You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pekko.apache.org by fa...@apache.org on 2023/04/13 09:56:25 UTC
[incubator-pekko-site] branch asf-staging updated: add mgmt docs
This is an automated email from the ASF dual-hosted git repository.
fanningpj pushed a commit to branch asf-staging
in repository https://gitbox.apache.org/repos/asf/incubator-pekko-site.git
The following commit(s) were added to refs/heads/asf-staging by this push:
new 12daa182 add mgmt docs
12daa182 is described below
commit 12daa182a790974f0a7d3ff5ec85e82f65edd0e5
Author: PJ Fanning <pj...@users.noreply.github.com>
AuthorDate: Thu Apr 13 11:56:14 2023 +0200
add mgmt docs
---
.../current/main/assets/fonts/font-awesome.css | 4 +
.../current/main/assets/fonts/material-icons.css | 13 +
.../main/assets/fonts/specimen/FontAwesome.ttf | Bin 0 -> 165548 bytes
.../main/assets/fonts/specimen/FontAwesome.woff | Bin 0 -> 98024 bytes
.../main/assets/fonts/specimen/FontAwesome.woff2 | Bin 0 -> 77160 bytes
.../fonts/specimen/MaterialIcons-Regular.ttf | Bin 0 -> 128180 bytes
.../fonts/specimen/MaterialIcons-Regular.woff | Bin 0 -> 57620 bytes
.../fonts/specimen/MaterialIcons-Regular.woff2 | Bin 0 -> 44300 bytes
.../current/main/assets/images/favicon.png | Bin 0 -> 1056 bytes
.../current/main/assets/images/pekko_favicon.png | Bin 0 -> 1344 bytes
.../current/main/assets/images/pekko_logo.png | Bin 0 -> 6152 bytes
.../assets/javascripts/application.583bbe55.js | 6 +
.../current/main/assets/javascripts/groups.js | 170 ++
.../main/assets/javascripts/modernizr.1aa3b519.js | 2 +
.../assets/javascripts/paradox-material-theme.js | 221 ++
.../current/main/assets/js/warnOldVersion.js | 23 +
.../stylesheets/application-palette.22915126.css | 1181 +++++++++
.../assets/stylesheets/application.451f80e5.css | 2557 ++++++++++++++++++++
.../assets/stylesheets/paradox-material-theme.css | 89 +
.../main/assets/stylesheets/pekko-theme.css | 14 +
.../current/main/bootstrap/details.html | 393 +++
.../current/main/bootstrap/index.html | 552 +++++
.../current/main/bootstrap/istio.html | 413 ++++
.../current/main/bootstrap/kubernetes-api.html | 441 ++++
.../current/main/bootstrap/kubernetes.html | 405 ++++
.../current/main/bootstrap/local-config.html | 408 ++++
.../current/main/bootstrap/recipes.html | 539 +++++
.../current/main/bootstrap/troubleshooting.html | 366 +++
.../current/main/cluster-http-management.html | 904 +++++++
.../current/main/cluster-jmx-management.html | 331 +++
.../current/main/discovery/aws.html | 603 +++++
.../current/main/discovery/consul.html | 454 ++++
.../current/main/discovery/index.html | 339 +++
.../current/main/discovery/kubernetes.html | 525 ++++
.../current/main/discovery/marathon.html | 453 ++++
.../current/main/healthchecks.html | 445 ++++
.../main/images/bootstrap-existing-cluster.png | Bin 0 -> 8267155 bytes
.../main/images/bootstrap-forming-cluster.png | Bin 0 -> 3441273 bytes
.../images/discovery-aws-ec2-tagged-instances.png | Bin 0 -> 233357 bytes
.../images/discovery-aws-ecs-task-instances.png | Bin 0 -> 125122 bytes
.../current/main/images/structure.png | Bin 0 -> 1097960 bytes
.../docs/pekko-management/current/main/index.html | 355 +++
.../building-using-maven.html | 439 ++++
.../kubernetes-deployment/building-using-sbt.html | 392 +++
.../main/kubernetes-deployment/building.html | 336 +++
.../main/kubernetes-deployment/deploying.html | 458 ++++
.../kubernetes-deployment/forming-a-cluster.html | 520 ++++
.../current/main/kubernetes-deployment/index.html | 364 +++
.../preparing-for-production.html | 425 ++++
.../current/main/kubernetes-lease.html | 534 ++++
.../current/main/lib/jquery/jquery.min.js | 5 +
.../main/lib/material__tabs/dist/mdc.tabs.min.css | 6 +
.../assets/fonts/font-awesome.css | 4 +
.../assets/fonts/material-icons.css | 13 +
.../assets/fonts/specimen/FontAwesome.ttf | Bin 0 -> 165548 bytes
.../assets/fonts/specimen/FontAwesome.woff | Bin 0 -> 98024 bytes
.../assets/fonts/specimen/FontAwesome.woff2 | Bin 0 -> 77160 bytes
.../fonts/specimen/MaterialIcons-Regular.ttf | Bin 0 -> 128180 bytes
.../fonts/specimen/MaterialIcons-Regular.woff | Bin 0 -> 57620 bytes
.../fonts/specimen/MaterialIcons-Regular.woff2 | Bin 0 -> 44300 bytes
.../assets/images/favicon.png | Bin 0 -> 1056 bytes
.../assets/javascripts/application.583bbe55.js | 6 +
.../assets/javascripts/modernizr.1aa3b519.js | 2 +
.../assets/javascripts/paradox-material-theme.js | 216 ++
.../stylesheets/application-palette.22915126.css | 1181 +++++++++
.../assets/stylesheets/application.451f80e5.css | 2557 ++++++++++++++++++++
.../assets/stylesheets/paradox-material-theme.css | 89 +
.../lib/material__tabs/dist/mdc.tabs.min.css | 6 +
.../lib/prettify/lang-scala.js | 2 +
.../lib/prettify/prettify.css | 1 +
.../lib/prettify/prettify.js | 30 +
.../main/lib/paradox-material-theme/page.st | 166 ++
.../lib/paradox-material-theme/partials/footer.st | 73 +
.../lib/paradox-material-theme/partials/header.st | 75 +
.../lib/paradox-material-theme/partials/hero.st | 28 +
.../partials/integrations/analytics.st | 1 +
.../paradox-material-theme/partials/language.st | 9 +
.../lib/paradox-material-theme/partials/nav.st | 56 +
.../paradox-material-theme/partials/poweredby.st | 26 +
.../lib/paradox-material-theme/partials/search.st | 42 +
.../lib/paradox-material-theme/partials/social.st | 27 +
.../lib/paradox-material-theme/partials/source.st | 33 +
.../lib/paradox-material-theme/partials/toc.st | 28 +
.../current/main/lib/prettify/lang-scala.js | 2 +
.../current/main/lib/prettify/prettify.css | 1 +
.../current/main/lib/prettify/prettify.js | 30 +
.../current/main/loglevels/index.html | 331 +++
.../current/main/loglevels/log4j2.html | 453 ++++
.../current/main/loglevels/logback.html | 453 ++++
.../pekko-management/current/main/migration.html | 356 +++
.../pekko-management/current/main/paradox.json | 4 +
.../current/main/pekko-management.html | 590 +++++
.../current/main/search/search_index.json | 1 +
93 files changed, 22577 insertions(+)
diff --git a/content/docs/pekko-management/current/main/assets/fonts/font-awesome.css b/content/docs/pekko-management/current/main/assets/fonts/font-awesome.css
new file mode 100644
index 00000000..b476b53e
--- /dev/null
+++ b/content/docs/pekko-management/current/main/assets/fonts/font-awesome.css
@@ -0,0 +1,4 @@
+/*!
+ * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome
+ * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
+ */@font-face{font-family:FontAwesome;font-style:normal;font-weight:400;src:url("specimen/FontAwesome.woff2") format("woff2"),url("specimen/FontAwesome.woff") format("woff"),url("specimen/FontAwesome.ttf") format("truetype")}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}. [...]
\ No newline at end of file
diff --git a/content/docs/pekko-management/current/main/assets/fonts/material-icons.css b/content/docs/pekko-management/current/main/assets/fonts/material-icons.css
new file mode 100644
index 00000000..d23d365e
--- /dev/null
+++ b/content/docs/pekko-management/current/main/assets/fonts/material-icons.css
@@ -0,0 +1,13 @@
+/*!
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy
+ * of the License at:
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING, SOFTWARE
+ * DISTRIBUTED UNDER THE LICENSE IS DISTRIBUTED ON AN "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+ * SEE THE LICENSE FOR THE SPECIFIC LANGUAGE GOVERNING PERMISSIONS AND
+ * LIMITATIONS UNDER THE LICENSE.
+ */@font-face{font-family:"Material Icons";font-style:normal;font-weight:400;src:local("Material Icons"),local("MaterialIcons-Regular"),url("specimen/MaterialIcons-Regular.woff2") format("woff2"),url("specimen/MaterialIcons-Regular.woff") format("woff"),url("specimen/MaterialIcons-Regular.ttf") format("truetype")}
\ No newline at end of file
diff --git a/content/docs/pekko-management/current/main/assets/fonts/specimen/FontAwesome.ttf b/content/docs/pekko-management/current/main/assets/fonts/specimen/FontAwesome.ttf
new file mode 100644
index 00000000..35acda2f
Binary files /dev/null and b/content/docs/pekko-management/current/main/assets/fonts/specimen/FontAwesome.ttf differ
diff --git a/content/docs/pekko-management/current/main/assets/fonts/specimen/FontAwesome.woff b/content/docs/pekko-management/current/main/assets/fonts/specimen/FontAwesome.woff
new file mode 100644
index 00000000..400014a4
Binary files /dev/null and b/content/docs/pekko-management/current/main/assets/fonts/specimen/FontAwesome.woff differ
diff --git a/content/docs/pekko-management/current/main/assets/fonts/specimen/FontAwesome.woff2 b/content/docs/pekko-management/current/main/assets/fonts/specimen/FontAwesome.woff2
new file mode 100644
index 00000000..4d13fc60
Binary files /dev/null and b/content/docs/pekko-management/current/main/assets/fonts/specimen/FontAwesome.woff2 differ
diff --git a/content/docs/pekko-management/current/main/assets/fonts/specimen/MaterialIcons-Regular.ttf b/content/docs/pekko-management/current/main/assets/fonts/specimen/MaterialIcons-Regular.ttf
new file mode 100644
index 00000000..7015564a
Binary files /dev/null and b/content/docs/pekko-management/current/main/assets/fonts/specimen/MaterialIcons-Regular.ttf differ
diff --git a/content/docs/pekko-management/current/main/assets/fonts/specimen/MaterialIcons-Regular.woff b/content/docs/pekko-management/current/main/assets/fonts/specimen/MaterialIcons-Regular.woff
new file mode 100644
index 00000000..b648a3ee
Binary files /dev/null and b/content/docs/pekko-management/current/main/assets/fonts/specimen/MaterialIcons-Regular.woff differ
diff --git a/content/docs/pekko-management/current/main/assets/fonts/specimen/MaterialIcons-Regular.woff2 b/content/docs/pekko-management/current/main/assets/fonts/specimen/MaterialIcons-Regular.woff2
new file mode 100644
index 00000000..9fa21125
Binary files /dev/null and b/content/docs/pekko-management/current/main/assets/fonts/specimen/MaterialIcons-Regular.woff2 differ
diff --git a/content/docs/pekko-management/current/main/assets/images/favicon.png b/content/docs/pekko-management/current/main/assets/images/favicon.png
new file mode 100644
index 00000000..23ccc2ba
Binary files /dev/null and b/content/docs/pekko-management/current/main/assets/images/favicon.png differ
diff --git a/content/docs/pekko-management/current/main/assets/images/pekko_favicon.png b/content/docs/pekko-management/current/main/assets/images/pekko_favicon.png
new file mode 100644
index 00000000..2d26c10b
Binary files /dev/null and b/content/docs/pekko-management/current/main/assets/images/pekko_favicon.png differ
diff --git a/content/docs/pekko-management/current/main/assets/images/pekko_logo.png b/content/docs/pekko-management/current/main/assets/images/pekko_logo.png
new file mode 100644
index 00000000..66915397
Binary files /dev/null and b/content/docs/pekko-management/current/main/assets/images/pekko_logo.png differ
diff --git a/content/docs/pekko-management/current/main/assets/javascripts/application.583bbe55.js b/content/docs/pekko-management/current/main/assets/javascripts/application.583bbe55.js
new file mode 100644
index 00000000..f577b695
--- /dev/null
+++ b/content/docs/pekko-management/current/main/assets/javascripts/application.583bbe55.js
@@ -0,0 +1,6 @@
+/*!
+ Material for MkDocs
+ Copyright (c) 2016-2019 Martin Donath
+ License: MIT
+*/
+!function(e,t){for(var n in t)e[n]=t[n]}(window,function(e){function t(r){if(n[r])return n[r].exports;var i=n[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,t),i.l=!0,i.exports}var n={};return t.m=e,t.c=n,t.d=function(e,n,r){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:r})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e [...]
\ No newline at end of file
diff --git a/content/docs/pekko-management/current/main/assets/javascripts/groups.js b/content/docs/pekko-management/current/main/assets/javascripts/groups.js
new file mode 100644
index 00000000..145ceaf8
--- /dev/null
+++ b/content/docs/pekko-management/current/main/assets/javascripts/groups.js
@@ -0,0 +1,170 @@
+/*!
+ Adopted from original paradox generic theme to work with paradox-material-theme
+ https://github.com/lightbend/paradox/blob/8e30c341f1f8351a19b71599219d2f636ba68eb4/themes/generic/src/main/assets/js/groups.js
+ licensed under Apache License 2.0.
+*/
+
+groupChangeListeners = [];
+
+window.groupChanged = function(callback) {
+ groupChangeListeners.push(callback);
+}
+
+$(function() {
+
+ // Groups (like 'java' and 'scala') represent groups of 'switchable' content, either in tabs or in regular text.
+ // The catalog of groups can be defined in the sbt parameters to initialize the group.
+
+ var groupCookie = "paradoxGroups";
+ var cookieTg = getCookie(groupCookie);
+ var currentGroups = {};
+
+ var catalog = {}
+ var supergroupByGroup = {};
+
+ if(cookieTg != "")
+ currentGroups = JSON.parse(cookieTg);
+
+ // https://developer.mozilla.org/en-US/docs/Web/API/Document/cookie
+ function setCookie(cookieName, cookieValue, daysToExpire) {
+ if (!daysToExpire) daysToExpire = 365;
+ const now = new Date();
+ now.setDate(now.getDate() + daysToExpire);
+ // The lax value will send the cookie for all same-site
+ // requests and top-level navigation GET requests. This
+ // is sufficient for user tracking, but it will prevent
+ // many CSRF attacks. This is the default value in modern browsers.
+ document.cookie = `${cookieName}=${encodeURIComponent(cookieValue)};expires=${now.toUTCString()};path=/;samesite=lax`;
+ }
+
+ // https://developer.mozilla.org/en-US/docs/Web/API/Document/cookie#Example_2_Get_a_sample_cookie_named_test2
+ function getCookie(cookieName) {
+ const cookieAttr = decodeURIComponent(document.cookie)
+ .split(";")
+ .find(row => row.trimStart().startsWith(cookieName))
+ return cookieAttr ? cookieAttr.split("=")[1] : "";
+ }
+
+ $("dl").has("dt").each(function() {
+ var dl = $(this);
+ dl.addClass("tabbed");
+ var dts = dl.find("dt");
+ dts.each(function(i) {
+ var dt = $(this);
+ dt.html("<a href=\"#tab" + i + "\">" + dt.text() + "</a>");
+ });
+ var dds = dl.find("dd");
+ dds.each(function(i) {
+ var dd = $(this);
+ dd.hide();
+ if (dd.find("blockquote").length) {
+ dd.addClass("has-note");
+ }
+ });
+
+ // Default to the first tab, for grouped tabs switch again later
+ switchToTab(dts.first());
+
+ dts.first().addClass("first");
+ dts.last().addClass("last");
+ });
+
+ // Determine all supergroups, populate 'catalog' and 'supergroupByGroup' accordingly.
+ $(".supergroup").each(function() {
+ var supergroup = $(this).attr('name').toLowerCase();
+ var groups = $(this).find(".group");
+
+ catalog[supergroup] = [];
+
+ groups.each(function() {
+ var group = "group-" + $(this).text().toLowerCase();
+ catalog[supergroup].push(group);
+ supergroupByGroup[group] = supergroup;
+ });
+
+ $(this).on("change", function() {
+ switchToGroup(supergroup, this.value);
+ });
+ });
+
+ // Switch to the right initial groups
+ for (var supergroup in catalog) {
+ var current = queryParamGroup(supergroup) || currentGroups[supergroup] || catalog[supergroup][0];
+
+ switchToGroup(supergroup, current);
+ }
+
+ $("dl dt.mdc-tab").click(function(e){
+ e.preventDefault();
+ var currentDt = $(this);//.parent("dt");
+ var currentDl = currentDt.parent("dl");
+
+ var currentGroup = groupOf(currentDt);
+
+ var supergroup = supergroupByGroup[currentGroup]
+ if (supergroup) {
+ switchToGroup(supergroup, currentGroup);
+ } else {
+ switchToTab(currentDt);
+ }
+ });
+
+ function queryParamGroup(supergroup) {
+ var value = new URLSearchParams(window.location.search).get(supergroup)
+ if (value) {
+ return "group-" + value.toLowerCase();
+ } else {
+ return "";
+ }
+ }
+
+ function switchToGroup(supergroup, group) {
+ currentGroups[supergroup] = group;
+ setCookie(groupCookie, JSON.stringify(currentGroups));
+
+ // Dropdown switcher:
+ $("select")
+ .has("option[value=" + group +"]")
+ .val(group);
+
+ // Inline snippets:
+ catalog[supergroup].forEach(peer => {
+ if (peer === group) {
+ $("." + group).show();
+ } else {
+ $("." + peer).hide();
+ }
+ })
+
+ // Tabbed snippets:
+ $("dl.tabbed").each(function() {
+ var dl = $(this);
+ dl.find("dt").each(function() {
+ var dt = $(this);
+ if(groupOf(dt) == group) {
+ switchToTab(dt);
+ }
+ });
+ });
+
+ groupChangeListeners.forEach(listener => listener(group, supergroup, catalog));
+ }
+
+ function switchToTab(dt) {
+ // interplay with paradox-material-theme.js adding an activate function to tabs
+ if (dt[0].activate) dt[0].activate();
+ }
+
+ function groupOf(elem) {
+ const classAttribute = elem.next("dd").find("pre").attr("class");
+ if (classAttribute) {
+ const currentClasses = classAttribute.split(' ');
+ const regex = new RegExp("^group-.*");
+ const matchingClass = currentClasses.find(cc => regex.test(cc));
+ if (matchingClass) return matchingClass;
+ }
+
+ // No class found? Then use the tab title
+ return "group-" + elem.find('a').text().toLowerCase();
+ }
+});
diff --git a/content/docs/pekko-management/current/main/assets/javascripts/modernizr.1aa3b519.js b/content/docs/pekko-management/current/main/assets/javascripts/modernizr.1aa3b519.js
new file mode 100644
index 00000000..1c9acd40
--- /dev/null
+++ b/content/docs/pekko-management/current/main/assets/javascripts/modernizr.1aa3b519.js
@@ -0,0 +1,2 @@
+/*! Modernizr 3.5.0 | MIT */
+!function(e,t){for(var n in t)e[n]=t[n]}(window,function(e){function t(r){if(n[r])return n[r].exports;var o=n[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,t),o.l=!0,o.exports}var n={};return t.m=e,t.c=n,t.d=function(e,n,r){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:r})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e [...]
\ No newline at end of file
diff --git a/content/docs/pekko-management/current/main/assets/javascripts/paradox-material-theme.js b/content/docs/pekko-management/current/main/assets/javascripts/paradox-material-theme.js
new file mode 100644
index 00000000..550ae3b6
--- /dev/null
+++ b/content/docs/pekko-management/current/main/assets/javascripts/paradox-material-theme.js
@@ -0,0 +1,221 @@
+/*!
+ Adopted from paradox-material-theme 0.6.0 to simplify switching to a tab.
+
+ Paradox Material Theme
+ Copyright (c) 2017 Jonas Fonseca
+ License: MIT
+*/
+
+function initParadoxMaterialTheme() {
+ // callout -> ammonition
+ document.querySelectorAll('.callout').forEach(callout => {
+ callout.classList.add('admonition')
+ callout.querySelectorAll('.callout-title').forEach(title => {
+ title.classList.add('admonition-title')
+ })
+ callout.style.visibility = 'visible';
+ })
+
+ var headers = ['h2', 'h3', 'h4', 'h5', 'h6']
+ headers.forEach(headerName => {
+ document.querySelectorAll(headerName).forEach(header => {
+ var link = header.querySelector('a')
+ if (link) {
+ header.id = link.name
+ link.name = ''
+ header.removeChild(link)
+ link.text = '¶'
+ link.title = 'Permanent link'
+ link.className = 'headerlink'
+ header.appendChild(link)
+ }
+ })
+ })
+
+ document.querySelectorAll('nav.md-nav--primary > ul').forEach((root, rootIndex) => {
+ function createNavToggle(path, active) {
+ var input = document.createElement('input')
+ input.classList.add('md-toggle')
+ input.classList.add('md-nav__toggle')
+ input.type = 'checkbox'
+ input.id = path
+ input.checked = active || false
+ input.setAttribute('data-md-toggle', path)
+ return input
+ }
+
+ function createNavLabel(path, active, contentNode) {
+ var label = document.createElement('label')
+ label.classList.add('md-nav__link')
+ if (active)
+ label.classList.add('md-nav__link--active')
+ label.setAttribute('for', path)
+ if (contentNode)
+ label.appendChild(contentNode)
+ return label
+ }
+
+ function visitListItem(item, path, level) {
+ item.classList.add('md-nav__item')
+
+ var link = item.querySelector(':scope > a')
+ if (link) {
+ link.classList.add('md-nav__link')
+ link.classList.remove('page')
+ if (link.classList.contains('active')) {
+ item.classList.add('md-nav__item--active')
+ link.classList.add('md-nav__link--active')
+ }
+ link.setAttribute('data-md-state', '')
+ }
+
+ var nestedNav = null
+ var nestedRoot = item.querySelector(':scope > ul')
+ if (nestedRoot) {
+ var active = item.querySelector(':scope a.active') != null
+ item.classList.add('md-nav__item--nested')
+ var nestedNav = document.createElement('nav')
+ nestedNav.classList.add('md-nav')
+ nestedNav.setAttribute('data-md-component', 'collapsible')
+ nestedNav.setAttribute('data-md-level', level)
+
+ var input = createNavToggle(path, active)
+
+ var label = createNavLabel(path, false, link)
+ if (link)
+ link.classList.remove('md-nav__link')
+
+ var labelInner = document.createElement('label')
+ labelInner.classList.add('md-nav__title')
+ labelInner.setAttribute('for', path)
+ labelInner.textContent = link ? link.textContent : '???'
+
+ nestedNav.appendChild(labelInner)
+ nestedNav.appendChild(nestedRoot)
+ item.appendChild(input)
+ item.appendChild(label)
+ item.appendChild(nestedNav)
+ visitList(nestedRoot, path, level + 1)
+ }
+
+ if (link && link.classList.contains('active')) {
+ var toc = document.querySelector('nav.md-nav--primary > .md-nav--secondary')
+ if (toc && toc.children.length > 0) {
+ var input = createNavToggle('__toc', false)
+ var labelText = nestedNav ? 'Table of contents' : link ? link.textContent : '???'
+ var label = createNavLabel('__toc', true, document.createTextNode(labelText))
+
+ if (nestedNav) {
+ var node = nestedNav.children[1]
+ nestedNav.insertBefore(input, node)
+ nestedNav.insertBefore(label, node)
+ nestedNav.appendChild(toc)
+ } else if (link) {
+ item.insertBefore(input, link)
+ item.insertBefore(label, link)
+ item.appendChild(toc)
+ }
+ }
+ }
+ }
+
+ function visitList(list, path, level) {
+ list.classList.add('md-nav__list')
+ list.setAttribute('data-md-scrollfix', '')
+ list.querySelectorAll('li').forEach((item, itemIndex) => {
+ visitListItem(item, path + '-' + itemIndex, level)
+ })
+ }
+
+ visitList(root, 'nav-' + rootIndex, 1)
+ var projectVersion = document.getElementById("project.version")
+ if (projectVersion) {
+ root.appendChild(projectVersion)
+ }
+ root.parentNode.style.visibility = 'visible'
+ })
+
+ document.querySelectorAll('.md-sidebar--secondary .md-nav--secondary > ul').forEach(tocRoot => {
+ function visitListItem(item) {
+ item.classList.add('md-nav__item')
+ item.querySelectorAll(':scope> a').forEach(link => {
+ link.classList.add('md-nav__link')
+ link.setAttribute('data-md-state', '')
+ })
+ item.querySelectorAll(':scope > ul').forEach(list => {
+ visitList(list)
+ })
+ }
+
+ function visitList(list) {
+ list.classList.add('md-nav__list')
+ list.querySelectorAll(':scope > li').forEach(item => {
+ visitListItem(item)
+ })
+ }
+
+ var parent = tocRoot.parentNode
+ parent.removeChild(tocRoot)
+
+ tocRoot.querySelectorAll(':scope > li > ul').forEach(list => {
+ parent.append(list)
+ list.setAttribute('data-md-scrollfix', '')
+ visitList(list)
+ })
+
+ parent.style.visibility = 'visible';
+ })
+
+ document.querySelectorAll('dl').forEach(dl => {
+ const tabContents = dl.querySelectorAll(':scope > dd > pre')
+ if (tabContents.length > 0) {
+ dl.classList.add('mdc-tab-bar')
+ var first = true
+ var contentContainer = document.createElement('div')
+ contentContainer.classList.add('mdc-tab-content-container')
+
+ tabContents.forEach(pre => {
+ var dd = pre.parentNode
+ var dt = dd.previousSibling
+ while (dt.nodeType != dt.ELEMENT_NODE) {
+ dt = dt.previousSibling
+ }
+
+ var tabContent = document.createElement('div')
+ tabContent.classList.add('mdc-tab-content')
+ contentContainer.appendChild(tabContent)
+ while (dd.childNodes.length > 0) {
+ tabContent.appendChild(dd.childNodes[0]);
+ }
+ dl.removeChild(dd)
+
+ dt.classList.add('mdc-tab')
+ if (first) {
+ dt.classList.add('mdc-tab--active')
+ tabContent.classList.add('mdc-tab-content--active')
+ }
+ first = false
+ dt.activate = function() {
+ dl.querySelectorAll(':scope .mdc-tab--active').forEach(active => {
+ active.classList.remove('mdc-tab--active')
+ })
+ contentContainer.querySelectorAll(':scope .mdc-tab-content--active').forEach(active => {
+ active.classList.remove('mdc-tab-content--active')
+ })
+ dt.classList.add('mdc-tab--active')
+ tabContent.classList.add('mdc-tab-content--active')
+ }
+ dt.onclick = event => {
+ dt.activate()
+ }
+ })
+
+ if (dl.nextSibling)
+ dl.parentNode.insertBefore(contentContainer, dl.nextSibling)
+ else
+ dl.parentNode.appendChild(contentContainer)
+ }
+ })
+}
+
+initParadoxMaterialTheme()
diff --git a/content/docs/pekko-management/current/main/assets/js/warnOldVersion.js b/content/docs/pekko-management/current/main/assets/js/warnOldVersion.js
new file mode 100644
index 00000000..39da3c3c
--- /dev/null
+++ b/content/docs/pekko-management/current/main/assets/js/warnOldVersion.js
@@ -0,0 +1,23 @@
+function initOldVersionWarnings($, thisVersion, projectUrl) {
+ if (projectUrl && projectUrl !== "") {
+ var schemeLessUrl = projectUrl;
+ if (projectUrl.startsWith("http://")) projectUrl = schemeLessUrl.substring(5);
+ else if (projectUrl.startsWith("https://")) projectUrl = schemeLessUrl.substring(6);
+ const url = schemeLessUrl + (schemeLessUrl.endsWith("\/") ? "" : "/") + "paradox.json";
+ $.get(url, function (versionData) {
+ const currentVersion = versionData.version;
+ if (thisVersion !== currentVersion) {
+ showVersionWarning(thisVersion, currentVersion, projectUrl);
+ }
+ });
+ }
+}
+
+function showVersionWarning(thisVersion, currentVersion, projectUrl) {
+ $('#docs').prepend(
+ '<div class="callout warning" style="margin-top: 16px">' +
+ '<p><span style="font-weight: bold">This documentation regards version ' + thisVersion + ', ' +
+ 'however the current version is <a href="' + projectUrl + '">' + currentVersion + '</a>.</span></p>' +
+ '</div>'
+ );
+}
\ No newline at end of file
diff --git a/content/docs/pekko-management/current/main/assets/stylesheets/application-palette.22915126.css b/content/docs/pekko-management/current/main/assets/stylesheets/application-palette.22915126.css
new file mode 100644
index 00000000..c5af7f58
--- /dev/null
+++ b/content/docs/pekko-management/current/main/assets/stylesheets/application-palette.22915126.css
@@ -0,0 +1,1181 @@
+/*!
+ Material for MkDocs
+ Copyright (c) 2016-2018 Martin Donath
+ License: MIT
+*/
+button[data-md-color-primary],
+button[data-md-color-accent] {
+ width: 13rem;
+ margin-bottom: 0.4rem;
+ padding: 2.4rem 0.8rem 0.4rem;
+ transition: background-color 0.25s, opacity 0.25s;
+ border-radius: 0.2rem;
+ color: white;
+ font-size: 1.28rem;
+ text-align: left;
+ cursor: pointer; }
+ button[data-md-color-primary]:hover,
+ button[data-md-color-accent]:hover {
+ opacity: 0.75; }
+
+button[data-md-color-primary="red"] {
+ background-color: #ef5350; }
+
+[data-md-color-primary="red"] .md-typeset a {
+ color: #ef5350; }
+
+[data-md-color-primary="red"] .md-header {
+ background-color: #ef5350; }
+
+[data-md-color-primary="red"] .md-hero {
+ background-color: #ef5350; }
+
+[data-md-color-primary="red"] .md-nav__link:active,
+[data-md-color-primary="red"] .md-nav__link--active {
+ color: #ef5350; }
+
+[data-md-color-primary="red"] .md-nav__item--nested > .md-nav__link {
+ color: inherit; }
+
+button[data-md-color-primary="pink"] {
+ background-color: #e91e63; }
+
+[data-md-color-primary="pink"] .md-typeset a {
+ color: #e91e63; }
+
+[data-md-color-primary="pink"] .md-header {
+ background-color: #e91e63; }
+
+[data-md-color-primary="pink"] .md-hero {
+ background-color: #e91e63; }
+
+[data-md-color-primary="pink"] .md-nav__link:active,
+[data-md-color-primary="pink"] .md-nav__link--active {
+ color: #e91e63; }
+
+[data-md-color-primary="pink"] .md-nav__item--nested > .md-nav__link {
+ color: inherit; }
+
+button[data-md-color-primary="purple"] {
+ background-color: #ab47bc; }
+
+[data-md-color-primary="purple"] .md-typeset a {
+ color: #ab47bc; }
+
+[data-md-color-primary="purple"] .md-header {
+ background-color: #ab47bc; }
+
+[data-md-color-primary="purple"] .md-hero {
+ background-color: #ab47bc; }
+
+[data-md-color-primary="purple"] .md-nav__link:active,
+[data-md-color-primary="purple"] .md-nav__link--active {
+ color: #ab47bc; }
+
+[data-md-color-primary="purple"] .md-nav__item--nested > .md-nav__link {
+ color: inherit; }
+
+button[data-md-color-primary="deep-purple"] {
+ background-color: #7e57c2; }
+
+[data-md-color-primary="deep-purple"] .md-typeset a {
+ color: #7e57c2; }
+
+[data-md-color-primary="deep-purple"] .md-header {
+ background-color: #7e57c2; }
+
+[data-md-color-primary="deep-purple"] .md-hero {
+ background-color: #7e57c2; }
+
+[data-md-color-primary="deep-purple"] .md-nav__link:active,
+[data-md-color-primary="deep-purple"] .md-nav__link--active {
+ color: #7e57c2; }
+
+[data-md-color-primary="deep-purple"] .md-nav__item--nested > .md-nav__link {
+ color: inherit; }
+
+button[data-md-color-primary="indigo"] {
+ background-color: #3f51b5; }
+
+[data-md-color-primary="indigo"] .md-typeset a {
+ color: #3f51b5; }
+
+[data-md-color-primary="indigo"] .md-header {
+ background-color: #3f51b5; }
+
+[data-md-color-primary="indigo"] .md-hero {
+ background-color: #3f51b5; }
+
+[data-md-color-primary="indigo"] .md-nav__link:active,
+[data-md-color-primary="indigo"] .md-nav__link--active {
+ color: #3f51b5; }
+
+[data-md-color-primary="indigo"] .md-nav__item--nested > .md-nav__link {
+ color: inherit; }
+
+button[data-md-color-primary="blue"] {
+ background-color: #2196f3; }
+
+[data-md-color-primary="blue"] .md-typeset a {
+ color: #2196f3; }
+
+[data-md-color-primary="blue"] .md-header {
+ background-color: #2196f3; }
+
+[data-md-color-primary="blue"] .md-hero {
+ background-color: #2196f3; }
+
+[data-md-color-primary="blue"] .md-nav__link:active,
+[data-md-color-primary="blue"] .md-nav__link--active {
+ color: #2196f3; }
+
+[data-md-color-primary="blue"] .md-nav__item--nested > .md-nav__link {
+ color: inherit; }
+
+button[data-md-color-primary="light-blue"] {
+ background-color: #03a9f4; }
+
+[data-md-color-primary="light-blue"] .md-typeset a {
+ color: #03a9f4; }
+
+[data-md-color-primary="light-blue"] .md-header {
+ background-color: #03a9f4; }
+
+[data-md-color-primary="light-blue"] .md-hero {
+ background-color: #03a9f4; }
+
+[data-md-color-primary="light-blue"] .md-nav__link:active,
+[data-md-color-primary="light-blue"] .md-nav__link--active {
+ color: #03a9f4; }
+
+[data-md-color-primary="light-blue"] .md-nav__item--nested > .md-nav__link {
+ color: inherit; }
+
+button[data-md-color-primary="cyan"] {
+ background-color: #00bcd4; }
+
+[data-md-color-primary="cyan"] .md-typeset a {
+ color: #00bcd4; }
+
+[data-md-color-primary="cyan"] .md-header {
+ background-color: #00bcd4; }
+
+[data-md-color-primary="cyan"] .md-hero {
+ background-color: #00bcd4; }
+
+[data-md-color-primary="cyan"] .md-nav__link:active,
+[data-md-color-primary="cyan"] .md-nav__link--active {
+ color: #00bcd4; }
+
+[data-md-color-primary="cyan"] .md-nav__item--nested > .md-nav__link {
+ color: inherit; }
+
+button[data-md-color-primary="teal"] {
+ background-color: #009688; }
+
+[data-md-color-primary="teal"] .md-typeset a {
+ color: #009688; }
+
+[data-md-color-primary="teal"] .md-header {
+ background-color: #009688; }
+
+[data-md-color-primary="teal"] .md-hero {
+ background-color: #009688; }
+
+[data-md-color-primary="teal"] .md-nav__link:active,
+[data-md-color-primary="teal"] .md-nav__link--active {
+ color: #009688; }
+
+[data-md-color-primary="teal"] .md-nav__item--nested > .md-nav__link {
+ color: inherit; }
+
+button[data-md-color-primary="green"] {
+ background-color: #4caf50; }
+
+[data-md-color-primary="green"] .md-typeset a {
+ color: #4caf50; }
+
+[data-md-color-primary="green"] .md-header {
+ background-color: #4caf50; }
+
+[data-md-color-primary="green"] .md-hero {
+ background-color: #4caf50; }
+
+[data-md-color-primary="green"] .md-nav__link:active,
+[data-md-color-primary="green"] .md-nav__link--active {
+ color: #4caf50; }
+
+[data-md-color-primary="green"] .md-nav__item--nested > .md-nav__link {
+ color: inherit; }
+
+button[data-md-color-primary="light-green"] {
+ background-color: #7cb342; }
+
+[data-md-color-primary="light-green"] .md-typeset a {
+ color: #7cb342; }
+
+[data-md-color-primary="light-green"] .md-header {
+ background-color: #7cb342; }
+
+[data-md-color-primary="light-green"] .md-hero {
+ background-color: #7cb342; }
+
+[data-md-color-primary="light-green"] .md-nav__link:active,
+[data-md-color-primary="light-green"] .md-nav__link--active {
+ color: #7cb342; }
+
+[data-md-color-primary="light-green"] .md-nav__item--nested > .md-nav__link {
+ color: inherit; }
+
+button[data-md-color-primary="lime"] {
+ background-color: #c0ca33; }
+
+[data-md-color-primary="lime"] .md-typeset a {
+ color: #c0ca33; }
+
+[data-md-color-primary="lime"] .md-header {
+ background-color: #c0ca33; }
+
+[data-md-color-primary="lime"] .md-hero {
+ background-color: #c0ca33; }
+
+[data-md-color-primary="lime"] .md-nav__link:active,
+[data-md-color-primary="lime"] .md-nav__link--active {
+ color: #c0ca33; }
+
+[data-md-color-primary="lime"] .md-nav__item--nested > .md-nav__link {
+ color: inherit; }
+
+button[data-md-color-primary="yellow"] {
+ background-color: #f9a825; }
+
+[data-md-color-primary="yellow"] .md-typeset a {
+ color: #f9a825; }
+
+[data-md-color-primary="yellow"] .md-header {
+ background-color: #f9a825; }
+
+[data-md-color-primary="yellow"] .md-hero {
+ background-color: #f9a825; }
+
+[data-md-color-primary="yellow"] .md-nav__link:active,
+[data-md-color-primary="yellow"] .md-nav__link--active {
+ color: #f9a825; }
+
+[data-md-color-primary="yellow"] .md-nav__item--nested > .md-nav__link {
+ color: inherit; }
+
+button[data-md-color-primary="amber"] {
+ background-color: #ffa000; }
+
+[data-md-color-primary="amber"] .md-typeset a {
+ color: #ffa000; }
+
+[data-md-color-primary="amber"] .md-header {
+ background-color: #ffa000; }
+
+[data-md-color-primary="amber"] .md-hero {
+ background-color: #ffa000; }
+
+[data-md-color-primary="amber"] .md-nav__link:active,
+[data-md-color-primary="amber"] .md-nav__link--active {
+ color: #ffa000; }
+
+[data-md-color-primary="amber"] .md-nav__item--nested > .md-nav__link {
+ color: inherit; }
+
+button[data-md-color-primary="orange"] {
+ background-color: #fb8c00; }
+
+[data-md-color-primary="orange"] .md-typeset a {
+ color: #fb8c00; }
+
+[data-md-color-primary="orange"] .md-header {
+ background-color: #fb8c00; }
+
+[data-md-color-primary="orange"] .md-hero {
+ background-color: #fb8c00; }
+
+[data-md-color-primary="orange"] .md-nav__link:active,
+[data-md-color-primary="orange"] .md-nav__link--active {
+ color: #fb8c00; }
+
+[data-md-color-primary="orange"] .md-nav__item--nested > .md-nav__link {
+ color: inherit; }
+
+button[data-md-color-primary="deep-orange"] {
+ background-color: #ff7043; }
+
+[data-md-color-primary="deep-orange"] .md-typeset a {
+ color: #ff7043; }
+
+[data-md-color-primary="deep-orange"] .md-header {
+ background-color: #ff7043; }
+
+[data-md-color-primary="deep-orange"] .md-hero {
+ background-color: #ff7043; }
+
+[data-md-color-primary="deep-orange"] .md-nav__link:active,
+[data-md-color-primary="deep-orange"] .md-nav__link--active {
+ color: #ff7043; }
+
+[data-md-color-primary="deep-orange"] .md-nav__item--nested > .md-nav__link {
+ color: inherit; }
+
+button[data-md-color-primary="brown"] {
+ background-color: #795548; }
+
+[data-md-color-primary="brown"] .md-typeset a {
+ color: #795548; }
+
+[data-md-color-primary="brown"] .md-header {
+ background-color: #795548; }
+
+[data-md-color-primary="brown"] .md-hero {
+ background-color: #795548; }
+
+[data-md-color-primary="brown"] .md-nav__link:active,
+[data-md-color-primary="brown"] .md-nav__link--active {
+ color: #795548; }
+
+[data-md-color-primary="brown"] .md-nav__item--nested > .md-nav__link {
+ color: inherit; }
+
+button[data-md-color-primary="grey"] {
+ background-color: #757575; }
+
+[data-md-color-primary="grey"] .md-typeset a {
+ color: #757575; }
+
+[data-md-color-primary="grey"] .md-header {
+ background-color: #757575; }
+
+[data-md-color-primary="grey"] .md-hero {
+ background-color: #757575; }
+
+[data-md-color-primary="grey"] .md-nav__link:active,
+[data-md-color-primary="grey"] .md-nav__link--active {
+ color: #757575; }
+
+[data-md-color-primary="grey"] .md-nav__item--nested > .md-nav__link {
+ color: inherit; }
+
+button[data-md-color-primary="blue-grey"] {
+ background-color: #546e7a; }
+
+[data-md-color-primary="blue-grey"] .md-typeset a {
+ color: #546e7a; }
+
+[data-md-color-primary="blue-grey"] .md-header {
+ background-color: #546e7a; }
+
+[data-md-color-primary="blue-grey"] .md-hero {
+ background-color: #546e7a; }
+
+[data-md-color-primary="blue-grey"] .md-nav__link:active,
+[data-md-color-primary="blue-grey"] .md-nav__link--active {
+ color: #546e7a; }
+
+[data-md-color-primary="blue-grey"] .md-nav__item--nested > .md-nav__link {
+ color: inherit; }
+
+button[data-md-color-primary="white"] {
+ background-color: white;
+ color: rgba(0, 0, 0, 0.87);
+ box-shadow: 0 0 0.1rem rgba(0, 0, 0, 0.54) inset; }
+
+[data-md-color-primary="white"] .md-header {
+ background-color: white;
+ color: rgba(0, 0, 0, 0.87); }
+
+[data-md-color-primary="white"] .md-hero {
+ background-color: white;
+ color: rgba(0, 0, 0, 0.87); }
+ [data-md-color-primary="white"] .md-hero--expand {
+ border-bottom: 0.1rem solid rgba(0, 0, 0, 0.07); }
+
+button[data-md-color-accent="red"] {
+ background-color: #ff1744; }
+
+[data-md-color-accent="red"] .md-typeset a:hover,
+[data-md-color-accent="red"] .md-typeset a:active {
+ color: #ff1744; }
+
+[data-md-color-accent="red"] .md-typeset pre code::-webkit-scrollbar-thumb:hover,
+[data-md-color-accent="red"] .md-typeset .codehilite pre::-webkit-scrollbar-thumb:hover {
+ background-color: #ff1744; }
+
+[data-md-color-accent="red"] .md-typeset .md-clipboard:hover::before,
+[data-md-color-accent="red"] .md-typeset .md-clipboard:active::before {
+ color: #ff1744; }
+
+[data-md-color-accent="red"] .md-typeset .footnote li:hover .footnote-backref:hover,
+[data-md-color-accent="red"] .md-typeset .footnote li:target .footnote-backref {
+ color: #ff1744; }
+
+[data-md-color-accent="red"] .md-typeset [id]:hover .headerlink:hover,
+[data-md-color-accent="red"] .md-typeset [id]:target .headerlink,
+[data-md-color-accent="red"] .md-typeset [id] .headerlink:focus {
+ color: #ff1744; }
+
+[data-md-color-accent="red"] .md-nav__link:focus,
+[data-md-color-accent="red"] .md-nav__link:hover {
+ color: #ff1744; }
+
+[data-md-color-accent="red"] .md-search__scrollwrap::-webkit-scrollbar-thumb:hover {
+ background-color: #ff1744; }
+
+[data-md-color-accent="red"] .md-search-result__link[data-md-state="active"], [data-md-color-accent="red"] .md-search-result__link:hover {
+ background-color: rgba(255, 23, 68, 0.1); }
+
+[data-md-color-accent="red"] .md-sidebar__scrollwrap::-webkit-scrollbar-thumb:hover {
+ background-color: #ff1744; }
+
+[data-md-color-accent="red"] .md-source-file:hover::before {
+ background-color: #ff1744; }
+
+button[data-md-color-accent="pink"] {
+ background-color: #f50057; }
+
+[data-md-color-accent="pink"] .md-typeset a:hover,
+[data-md-color-accent="pink"] .md-typeset a:active {
+ color: #f50057; }
+
+[data-md-color-accent="pink"] .md-typeset pre code::-webkit-scrollbar-thumb:hover,
+[data-md-color-accent="pink"] .md-typeset .codehilite pre::-webkit-scrollbar-thumb:hover {
+ background-color: #f50057; }
+
+[data-md-color-accent="pink"] .md-typeset .md-clipboard:hover::before,
+[data-md-color-accent="pink"] .md-typeset .md-clipboard:active::before {
+ color: #f50057; }
+
+[data-md-color-accent="pink"] .md-typeset .footnote li:hover .footnote-backref:hover,
+[data-md-color-accent="pink"] .md-typeset .footnote li:target .footnote-backref {
+ color: #f50057; }
+
+[data-md-color-accent="pink"] .md-typeset [id]:hover .headerlink:hover,
+[data-md-color-accent="pink"] .md-typeset [id]:target .headerlink,
+[data-md-color-accent="pink"] .md-typeset [id] .headerlink:focus {
+ color: #f50057; }
+
+[data-md-color-accent="pink"] .md-nav__link:focus,
+[data-md-color-accent="pink"] .md-nav__link:hover {
+ color: #f50057; }
+
+[data-md-color-accent="pink"] .md-search__scrollwrap::-webkit-scrollbar-thumb:hover {
+ background-color: #f50057; }
+
+[data-md-color-accent="pink"] .md-search-result__link[data-md-state="active"], [data-md-color-accent="pink"] .md-search-result__link:hover {
+ background-color: rgba(245, 0, 87, 0.1); }
+
+[data-md-color-accent="pink"] .md-sidebar__scrollwrap::-webkit-scrollbar-thumb:hover {
+ background-color: #f50057; }
+
+[data-md-color-accent="pink"] .md-source-file:hover::before {
+ background-color: #f50057; }
+
+button[data-md-color-accent="purple"] {
+ background-color: #e040fb; }
+
+[data-md-color-accent="purple"] .md-typeset a:hover,
+[data-md-color-accent="purple"] .md-typeset a:active {
+ color: #e040fb; }
+
+[data-md-color-accent="purple"] .md-typeset pre code::-webkit-scrollbar-thumb:hover,
+[data-md-color-accent="purple"] .md-typeset .codehilite pre::-webkit-scrollbar-thumb:hover {
+ background-color: #e040fb; }
+
+[data-md-color-accent="purple"] .md-typeset .md-clipboard:hover::before,
+[data-md-color-accent="purple"] .md-typeset .md-clipboard:active::before {
+ color: #e040fb; }
+
+[data-md-color-accent="purple"] .md-typeset .footnote li:hover .footnote-backref:hover,
+[data-md-color-accent="purple"] .md-typeset .footnote li:target .footnote-backref {
+ color: #e040fb; }
+
+[data-md-color-accent="purple"] .md-typeset [id]:hover .headerlink:hover,
+[data-md-color-accent="purple"] .md-typeset [id]:target .headerlink,
+[data-md-color-accent="purple"] .md-typeset [id] .headerlink:focus {
+ color: #e040fb; }
+
+[data-md-color-accent="purple"] .md-nav__link:focus,
+[data-md-color-accent="purple"] .md-nav__link:hover {
+ color: #e040fb; }
+
+[data-md-color-accent="purple"] .md-search__scrollwrap::-webkit-scrollbar-thumb:hover {
+ background-color: #e040fb; }
+
+[data-md-color-accent="purple"] .md-search-result__link[data-md-state="active"], [data-md-color-accent="purple"] .md-search-result__link:hover {
+ background-color: rgba(224, 64, 251, 0.1); }
+
+[data-md-color-accent="purple"] .md-sidebar__scrollwrap::-webkit-scrollbar-thumb:hover {
+ background-color: #e040fb; }
+
+[data-md-color-accent="purple"] .md-source-file:hover::before {
+ background-color: #e040fb; }
+
+button[data-md-color-accent="deep-purple"] {
+ background-color: #7c4dff; }
+
+[data-md-color-accent="deep-purple"] .md-typeset a:hover,
+[data-md-color-accent="deep-purple"] .md-typeset a:active {
+ color: #7c4dff; }
+
+[data-md-color-accent="deep-purple"] .md-typeset pre code::-webkit-scrollbar-thumb:hover,
+[data-md-color-accent="deep-purple"] .md-typeset .codehilite pre::-webkit-scrollbar-thumb:hover {
+ background-color: #7c4dff; }
+
+[data-md-color-accent="deep-purple"] .md-typeset .md-clipboard:hover::before,
+[data-md-color-accent="deep-purple"] .md-typeset .md-clipboard:active::before {
+ color: #7c4dff; }
+
+[data-md-color-accent="deep-purple"] .md-typeset .footnote li:hover .footnote-backref:hover,
+[data-md-color-accent="deep-purple"] .md-typeset .footnote li:target .footnote-backref {
+ color: #7c4dff; }
+
+[data-md-color-accent="deep-purple"] .md-typeset [id]:hover .headerlink:hover,
+[data-md-color-accent="deep-purple"] .md-typeset [id]:target .headerlink,
+[data-md-color-accent="deep-purple"] .md-typeset [id] .headerlink:focus {
+ color: #7c4dff; }
+
+[data-md-color-accent="deep-purple"] .md-nav__link:focus,
+[data-md-color-accent="deep-purple"] .md-nav__link:hover {
+ color: #7c4dff; }
+
+[data-md-color-accent="deep-purple"] .md-search__scrollwrap::-webkit-scrollbar-thumb:hover {
+ background-color: #7c4dff; }
+
+[data-md-color-accent="deep-purple"] .md-search-result__link[data-md-state="active"], [data-md-color-accent="deep-purple"] .md-search-result__link:hover {
+ background-color: rgba(124, 77, 255, 0.1); }
+
+[data-md-color-accent="deep-purple"] .md-sidebar__scrollwrap::-webkit-scrollbar-thumb:hover {
+ background-color: #7c4dff; }
+
+[data-md-color-accent="deep-purple"] .md-source-file:hover::before {
+ background-color: #7c4dff; }
+
+button[data-md-color-accent="indigo"] {
+ background-color: #536dfe; }
+
+[data-md-color-accent="indigo"] .md-typeset a:hover,
+[data-md-color-accent="indigo"] .md-typeset a:active {
+ color: #536dfe; }
+
+[data-md-color-accent="indigo"] .md-typeset pre code::-webkit-scrollbar-thumb:hover,
+[data-md-color-accent="indigo"] .md-typeset .codehilite pre::-webkit-scrollbar-thumb:hover {
+ background-color: #536dfe; }
+
+[data-md-color-accent="indigo"] .md-typeset .md-clipboard:hover::before,
+[data-md-color-accent="indigo"] .md-typeset .md-clipboard:active::before {
+ color: #536dfe; }
+
+[data-md-color-accent="indigo"] .md-typeset .footnote li:hover .footnote-backref:hover,
+[data-md-color-accent="indigo"] .md-typeset .footnote li:target .footnote-backref {
+ color: #536dfe; }
+
+[data-md-color-accent="indigo"] .md-typeset [id]:hover .headerlink:hover,
+[data-md-color-accent="indigo"] .md-typeset [id]:target .headerlink,
+[data-md-color-accent="indigo"] .md-typeset [id] .headerlink:focus {
+ color: #536dfe; }
+
+[data-md-color-accent="indigo"] .md-nav__link:focus,
+[data-md-color-accent="indigo"] .md-nav__link:hover {
+ color: #536dfe; }
+
+[data-md-color-accent="indigo"] .md-search__scrollwrap::-webkit-scrollbar-thumb:hover {
+ background-color: #536dfe; }
+
+[data-md-color-accent="indigo"] .md-search-result__link[data-md-state="active"], [data-md-color-accent="indigo"] .md-search-result__link:hover {
+ background-color: rgba(83, 109, 254, 0.1); }
+
+[data-md-color-accent="indigo"] .md-sidebar__scrollwrap::-webkit-scrollbar-thumb:hover {
+ background-color: #536dfe; }
+
+[data-md-color-accent="indigo"] .md-source-file:hover::before {
+ background-color: #536dfe; }
+
+button[data-md-color-accent="blue"] {
+ background-color: #448aff; }
+
+[data-md-color-accent="blue"] .md-typeset a:hover,
+[data-md-color-accent="blue"] .md-typeset a:active {
+ color: #448aff; }
+
+[data-md-color-accent="blue"] .md-typeset pre code::-webkit-scrollbar-thumb:hover,
+[data-md-color-accent="blue"] .md-typeset .codehilite pre::-webkit-scrollbar-thumb:hover {
+ background-color: #448aff; }
+
+[data-md-color-accent="blue"] .md-typeset .md-clipboard:hover::before,
+[data-md-color-accent="blue"] .md-typeset .md-clipboard:active::before {
+ color: #448aff; }
+
+[data-md-color-accent="blue"] .md-typeset .footnote li:hover .footnote-backref:hover,
+[data-md-color-accent="blue"] .md-typeset .footnote li:target .footnote-backref {
+ color: #448aff; }
+
+[data-md-color-accent="blue"] .md-typeset [id]:hover .headerlink:hover,
+[data-md-color-accent="blue"] .md-typeset [id]:target .headerlink,
+[data-md-color-accent="blue"] .md-typeset [id] .headerlink:focus {
+ color: #448aff; }
+
+[data-md-color-accent="blue"] .md-nav__link:focus,
+[data-md-color-accent="blue"] .md-nav__link:hover {
+ color: #448aff; }
+
+[data-md-color-accent="blue"] .md-search__scrollwrap::-webkit-scrollbar-thumb:hover {
+ background-color: #448aff; }
+
+[data-md-color-accent="blue"] .md-search-result__link[data-md-state="active"], [data-md-color-accent="blue"] .md-search-result__link:hover {
+ background-color: rgba(68, 138, 255, 0.1); }
+
+[data-md-color-accent="blue"] .md-sidebar__scrollwrap::-webkit-scrollbar-thumb:hover {
+ background-color: #448aff; }
+
+[data-md-color-accent="blue"] .md-source-file:hover::before {
+ background-color: #448aff; }
+
+button[data-md-color-accent="light-blue"] {
+ background-color: #0091ea; }
+
+[data-md-color-accent="light-blue"] .md-typeset a:hover,
+[data-md-color-accent="light-blue"] .md-typeset a:active {
+ color: #0091ea; }
+
+[data-md-color-accent="light-blue"] .md-typeset pre code::-webkit-scrollbar-thumb:hover,
+[data-md-color-accent="light-blue"] .md-typeset .codehilite pre::-webkit-scrollbar-thumb:hover {
+ background-color: #0091ea; }
+
+[data-md-color-accent="light-blue"] .md-typeset .md-clipboard:hover::before,
+[data-md-color-accent="light-blue"] .md-typeset .md-clipboard:active::before {
+ color: #0091ea; }
+
+[data-md-color-accent="light-blue"] .md-typeset .footnote li:hover .footnote-backref:hover,
+[data-md-color-accent="light-blue"] .md-typeset .footnote li:target .footnote-backref {
+ color: #0091ea; }
+
+[data-md-color-accent="light-blue"] .md-typeset [id]:hover .headerlink:hover,
+[data-md-color-accent="light-blue"] .md-typeset [id]:target .headerlink,
+[data-md-color-accent="light-blue"] .md-typeset [id] .headerlink:focus {
+ color: #0091ea; }
+
+[data-md-color-accent="light-blue"] .md-nav__link:focus,
+[data-md-color-accent="light-blue"] .md-nav__link:hover {
+ color: #0091ea; }
+
+[data-md-color-accent="light-blue"] .md-search__scrollwrap::-webkit-scrollbar-thumb:hover {
+ background-color: #0091ea; }
+
+[data-md-color-accent="light-blue"] .md-search-result__link[data-md-state="active"], [data-md-color-accent="light-blue"] .md-search-result__link:hover {
+ background-color: rgba(0, 145, 234, 0.1); }
+
+[data-md-color-accent="light-blue"] .md-sidebar__scrollwrap::-webkit-scrollbar-thumb:hover {
+ background-color: #0091ea; }
+
+[data-md-color-accent="light-blue"] .md-source-file:hover::before {
+ background-color: #0091ea; }
+
+button[data-md-color-accent="cyan"] {
+ background-color: #00b8d4; }
+
+[data-md-color-accent="cyan"] .md-typeset a:hover,
+[data-md-color-accent="cyan"] .md-typeset a:active {
+ color: #00b8d4; }
+
+[data-md-color-accent="cyan"] .md-typeset pre code::-webkit-scrollbar-thumb:hover,
+[data-md-color-accent="cyan"] .md-typeset .codehilite pre::-webkit-scrollbar-thumb:hover {
+ background-color: #00b8d4; }
+
+[data-md-color-accent="cyan"] .md-typeset .md-clipboard:hover::before,
+[data-md-color-accent="cyan"] .md-typeset .md-clipboard:active::before {
+ color: #00b8d4; }
+
+[data-md-color-accent="cyan"] .md-typeset .footnote li:hover .footnote-backref:hover,
+[data-md-color-accent="cyan"] .md-typeset .footnote li:target .footnote-backref {
+ color: #00b8d4; }
+
+[data-md-color-accent="cyan"] .md-typeset [id]:hover .headerlink:hover,
+[data-md-color-accent="cyan"] .md-typeset [id]:target .headerlink,
+[data-md-color-accent="cyan"] .md-typeset [id] .headerlink:focus {
+ color: #00b8d4; }
+
+[data-md-color-accent="cyan"] .md-nav__link:focus,
+[data-md-color-accent="cyan"] .md-nav__link:hover {
+ color: #00b8d4; }
+
+[data-md-color-accent="cyan"] .md-search__scrollwrap::-webkit-scrollbar-thumb:hover {
+ background-color: #00b8d4; }
+
+[data-md-color-accent="cyan"] .md-search-result__link[data-md-state="active"], [data-md-color-accent="cyan"] .md-search-result__link:hover {
+ background-color: rgba(0, 184, 212, 0.1); }
+
+[data-md-color-accent="cyan"] .md-sidebar__scrollwrap::-webkit-scrollbar-thumb:hover {
+ background-color: #00b8d4; }
+
+[data-md-color-accent="cyan"] .md-source-file:hover::before {
+ background-color: #00b8d4; }
+
+button[data-md-color-accent="teal"] {
+ background-color: #00bfa5; }
+
+[data-md-color-accent="teal"] .md-typeset a:hover,
+[data-md-color-accent="teal"] .md-typeset a:active {
+ color: #00bfa5; }
+
+[data-md-color-accent="teal"] .md-typeset pre code::-webkit-scrollbar-thumb:hover,
+[data-md-color-accent="teal"] .md-typeset .codehilite pre::-webkit-scrollbar-thumb:hover {
+ background-color: #00bfa5; }
+
+[data-md-color-accent="teal"] .md-typeset .md-clipboard:hover::before,
+[data-md-color-accent="teal"] .md-typeset .md-clipboard:active::before {
+ color: #00bfa5; }
+
+[data-md-color-accent="teal"] .md-typeset .footnote li:hover .footnote-backref:hover,
+[data-md-color-accent="teal"] .md-typeset .footnote li:target .footnote-backref {
+ color: #00bfa5; }
+
+[data-md-color-accent="teal"] .md-typeset [id]:hover .headerlink:hover,
+[data-md-color-accent="teal"] .md-typeset [id]:target .headerlink,
+[data-md-color-accent="teal"] .md-typeset [id] .headerlink:focus {
+ color: #00bfa5; }
+
+[data-md-color-accent="teal"] .md-nav__link:focus,
+[data-md-color-accent="teal"] .md-nav__link:hover {
+ color: #00bfa5; }
+
+[data-md-color-accent="teal"] .md-search__scrollwrap::-webkit-scrollbar-thumb:hover {
+ background-color: #00bfa5; }
+
+[data-md-color-accent="teal"] .md-search-result__link[data-md-state="active"], [data-md-color-accent="teal"] .md-search-result__link:hover {
+ background-color: rgba(0, 191, 165, 0.1); }
+
+[data-md-color-accent="teal"] .md-sidebar__scrollwrap::-webkit-scrollbar-thumb:hover {
+ background-color: #00bfa5; }
+
+[data-md-color-accent="teal"] .md-source-file:hover::before {
+ background-color: #00bfa5; }
+
+button[data-md-color-accent="green"] {
+ background-color: #00c853; }
+
+[data-md-color-accent="green"] .md-typeset a:hover,
+[data-md-color-accent="green"] .md-typeset a:active {
+ color: #00c853; }
+
+[data-md-color-accent="green"] .md-typeset pre code::-webkit-scrollbar-thumb:hover,
+[data-md-color-accent="green"] .md-typeset .codehilite pre::-webkit-scrollbar-thumb:hover {
+ background-color: #00c853; }
+
+[data-md-color-accent="green"] .md-typeset .md-clipboard:hover::before,
+[data-md-color-accent="green"] .md-typeset .md-clipboard:active::before {
+ color: #00c853; }
+
+[data-md-color-accent="green"] .md-typeset .footnote li:hover .footnote-backref:hover,
+[data-md-color-accent="green"] .md-typeset .footnote li:target .footnote-backref {
+ color: #00c853; }
+
+[data-md-color-accent="green"] .md-typeset [id]:hover .headerlink:hover,
+[data-md-color-accent="green"] .md-typeset [id]:target .headerlink,
+[data-md-color-accent="green"] .md-typeset [id] .headerlink:focus {
+ color: #00c853; }
+
+[data-md-color-accent="green"] .md-nav__link:focus,
+[data-md-color-accent="green"] .md-nav__link:hover {
+ color: #00c853; }
+
+[data-md-color-accent="green"] .md-search__scrollwrap::-webkit-scrollbar-thumb:hover {
+ background-color: #00c853; }
+
+[data-md-color-accent="green"] .md-search-result__link[data-md-state="active"], [data-md-color-accent="green"] .md-search-result__link:hover {
+ background-color: rgba(0, 200, 83, 0.1); }
+
+[data-md-color-accent="green"] .md-sidebar__scrollwrap::-webkit-scrollbar-thumb:hover {
+ background-color: #00c853; }
+
+[data-md-color-accent="green"] .md-source-file:hover::before {
+ background-color: #00c853; }
+
+button[data-md-color-accent="light-green"] {
+ background-color: #64dd17; }
+
+[data-md-color-accent="light-green"] .md-typeset a:hover,
+[data-md-color-accent="light-green"] .md-typeset a:active {
+ color: #64dd17; }
+
+[data-md-color-accent="light-green"] .md-typeset pre code::-webkit-scrollbar-thumb:hover,
+[data-md-color-accent="light-green"] .md-typeset .codehilite pre::-webkit-scrollbar-thumb:hover {
+ background-color: #64dd17; }
+
+[data-md-color-accent="light-green"] .md-typeset .md-clipboard:hover::before,
+[data-md-color-accent="light-green"] .md-typeset .md-clipboard:active::before {
+ color: #64dd17; }
+
+[data-md-color-accent="light-green"] .md-typeset .footnote li:hover .footnote-backref:hover,
+[data-md-color-accent="light-green"] .md-typeset .footnote li:target .footnote-backref {
+ color: #64dd17; }
+
+[data-md-color-accent="light-green"] .md-typeset [id]:hover .headerlink:hover,
+[data-md-color-accent="light-green"] .md-typeset [id]:target .headerlink,
+[data-md-color-accent="light-green"] .md-typeset [id] .headerlink:focus {
+ color: #64dd17; }
+
+[data-md-color-accent="light-green"] .md-nav__link:focus,
+[data-md-color-accent="light-green"] .md-nav__link:hover {
+ color: #64dd17; }
+
+[data-md-color-accent="light-green"] .md-search__scrollwrap::-webkit-scrollbar-thumb:hover {
+ background-color: #64dd17; }
+
+[data-md-color-accent="light-green"] .md-search-result__link[data-md-state="active"], [data-md-color-accent="light-green"] .md-search-result__link:hover {
+ background-color: rgba(100, 221, 23, 0.1); }
+
+[data-md-color-accent="light-green"] .md-sidebar__scrollwrap::-webkit-scrollbar-thumb:hover {
+ background-color: #64dd17; }
+
+[data-md-color-accent="light-green"] .md-source-file:hover::before {
+ background-color: #64dd17; }
+
+button[data-md-color-accent="lime"] {
+ background-color: #aeea00; }
+
+[data-md-color-accent="lime"] .md-typeset a:hover,
+[data-md-color-accent="lime"] .md-typeset a:active {
+ color: #aeea00; }
+
+[data-md-color-accent="lime"] .md-typeset pre code::-webkit-scrollbar-thumb:hover,
+[data-md-color-accent="lime"] .md-typeset .codehilite pre::-webkit-scrollbar-thumb:hover {
+ background-color: #aeea00; }
+
+[data-md-color-accent="lime"] .md-typeset .md-clipboard:hover::before,
+[data-md-color-accent="lime"] .md-typeset .md-clipboard:active::before {
+ color: #aeea00; }
+
+[data-md-color-accent="lime"] .md-typeset .footnote li:hover .footnote-backref:hover,
+[data-md-color-accent="lime"] .md-typeset .footnote li:target .footnote-backref {
+ color: #aeea00; }
+
+[data-md-color-accent="lime"] .md-typeset [id]:hover .headerlink:hover,
+[data-md-color-accent="lime"] .md-typeset [id]:target .headerlink,
+[data-md-color-accent="lime"] .md-typeset [id] .headerlink:focus {
+ color: #aeea00; }
+
+[data-md-color-accent="lime"] .md-nav__link:focus,
+[data-md-color-accent="lime"] .md-nav__link:hover {
+ color: #aeea00; }
+
+[data-md-color-accent="lime"] .md-search__scrollwrap::-webkit-scrollbar-thumb:hover {
+ background-color: #aeea00; }
+
+[data-md-color-accent="lime"] .md-search-result__link[data-md-state="active"], [data-md-color-accent="lime"] .md-search-result__link:hover {
+ background-color: rgba(174, 234, 0, 0.1); }
+
+[data-md-color-accent="lime"] .md-sidebar__scrollwrap::-webkit-scrollbar-thumb:hover {
+ background-color: #aeea00; }
+
+[data-md-color-accent="lime"] .md-source-file:hover::before {
+ background-color: #aeea00; }
+
+button[data-md-color-accent="yellow"] {
+ background-color: #ffd600; }
+
+[data-md-color-accent="yellow"] .md-typeset a:hover,
+[data-md-color-accent="yellow"] .md-typeset a:active {
+ color: #ffd600; }
+
+[data-md-color-accent="yellow"] .md-typeset pre code::-webkit-scrollbar-thumb:hover,
+[data-md-color-accent="yellow"] .md-typeset .codehilite pre::-webkit-scrollbar-thumb:hover {
+ background-color: #ffd600; }
+
+[data-md-color-accent="yellow"] .md-typeset .md-clipboard:hover::before,
+[data-md-color-accent="yellow"] .md-typeset .md-clipboard:active::before {
+ color: #ffd600; }
+
+[data-md-color-accent="yellow"] .md-typeset .footnote li:hover .footnote-backref:hover,
+[data-md-color-accent="yellow"] .md-typeset .footnote li:target .footnote-backref {
+ color: #ffd600; }
+
+[data-md-color-accent="yellow"] .md-typeset [id]:hover .headerlink:hover,
+[data-md-color-accent="yellow"] .md-typeset [id]:target .headerlink,
+[data-md-color-accent="yellow"] .md-typeset [id] .headerlink:focus {
+ color: #ffd600; }
+
+[data-md-color-accent="yellow"] .md-nav__link:focus,
+[data-md-color-accent="yellow"] .md-nav__link:hover {
+ color: #ffd600; }
+
+[data-md-color-accent="yellow"] .md-search__scrollwrap::-webkit-scrollbar-thumb:hover {
+ background-color: #ffd600; }
+
+[data-md-color-accent="yellow"] .md-search-result__link[data-md-state="active"], [data-md-color-accent="yellow"] .md-search-result__link:hover {
+ background-color: rgba(255, 214, 0, 0.1); }
+
+[data-md-color-accent="yellow"] .md-sidebar__scrollwrap::-webkit-scrollbar-thumb:hover {
+ background-color: #ffd600; }
+
+[data-md-color-accent="yellow"] .md-source-file:hover::before {
+ background-color: #ffd600; }
+
+button[data-md-color-accent="amber"] {
+ background-color: #ffab00; }
+
+[data-md-color-accent="amber"] .md-typeset a:hover,
+[data-md-color-accent="amber"] .md-typeset a:active {
+ color: #ffab00; }
+
+[data-md-color-accent="amber"] .md-typeset pre code::-webkit-scrollbar-thumb:hover,
+[data-md-color-accent="amber"] .md-typeset .codehilite pre::-webkit-scrollbar-thumb:hover {
+ background-color: #ffab00; }
+
+[data-md-color-accent="amber"] .md-typeset .md-clipboard:hover::before,
+[data-md-color-accent="amber"] .md-typeset .md-clipboard:active::before {
+ color: #ffab00; }
+
+[data-md-color-accent="amber"] .md-typeset .footnote li:hover .footnote-backref:hover,
+[data-md-color-accent="amber"] .md-typeset .footnote li:target .footnote-backref {
+ color: #ffab00; }
+
+[data-md-color-accent="amber"] .md-typeset [id]:hover .headerlink:hover,
+[data-md-color-accent="amber"] .md-typeset [id]:target .headerlink,
+[data-md-color-accent="amber"] .md-typeset [id] .headerlink:focus {
+ color: #ffab00; }
+
+[data-md-color-accent="amber"] .md-nav__link:focus,
+[data-md-color-accent="amber"] .md-nav__link:hover {
+ color: #ffab00; }
+
+[data-md-color-accent="amber"] .md-search__scrollwrap::-webkit-scrollbar-thumb:hover {
+ background-color: #ffab00; }
+
+[data-md-color-accent="amber"] .md-search-result__link[data-md-state="active"], [data-md-color-accent="amber"] .md-search-result__link:hover {
+ background-color: rgba(255, 171, 0, 0.1); }
+
+[data-md-color-accent="amber"] .md-sidebar__scrollwrap::-webkit-scrollbar-thumb:hover {
+ background-color: #ffab00; }
+
+[data-md-color-accent="amber"] .md-source-file:hover::before {
+ background-color: #ffab00; }
+
+button[data-md-color-accent="orange"] {
+ background-color: #ff9100; }
+
+[data-md-color-accent="orange"] .md-typeset a:hover,
+[data-md-color-accent="orange"] .md-typeset a:active {
+ color: #ff9100; }
+
+[data-md-color-accent="orange"] .md-typeset pre code::-webkit-scrollbar-thumb:hover,
+[data-md-color-accent="orange"] .md-typeset .codehilite pre::-webkit-scrollbar-thumb:hover {
+ background-color: #ff9100; }
+
+[data-md-color-accent="orange"] .md-typeset .md-clipboard:hover::before,
+[data-md-color-accent="orange"] .md-typeset .md-clipboard:active::before {
+ color: #ff9100; }
+
+[data-md-color-accent="orange"] .md-typeset .footnote li:hover .footnote-backref:hover,
+[data-md-color-accent="orange"] .md-typeset .footnote li:target .footnote-backref {
+ color: #ff9100; }
+
+[data-md-color-accent="orange"] .md-typeset [id]:hover .headerlink:hover,
+[data-md-color-accent="orange"] .md-typeset [id]:target .headerlink,
+[data-md-color-accent="orange"] .md-typeset [id] .headerlink:focus {
+ color: #ff9100; }
+
+[data-md-color-accent="orange"] .md-nav__link:focus,
+[data-md-color-accent="orange"] .md-nav__link:hover {
+ color: #ff9100; }
+
+[data-md-color-accent="orange"] .md-search__scrollwrap::-webkit-scrollbar-thumb:hover {
+ background-color: #ff9100; }
+
+[data-md-color-accent="orange"] .md-search-result__link[data-md-state="active"], [data-md-color-accent="orange"] .md-search-result__link:hover {
+ background-color: rgba(255, 145, 0, 0.1); }
+
+[data-md-color-accent="orange"] .md-sidebar__scrollwrap::-webkit-scrollbar-thumb:hover {
+ background-color: #ff9100; }
+
+[data-md-color-accent="orange"] .md-source-file:hover::before {
+ background-color: #ff9100; }
+
+button[data-md-color-accent="deep-orange"] {
+ background-color: #ff6e40; }
+
+[data-md-color-accent="deep-orange"] .md-typeset a:hover,
+[data-md-color-accent="deep-orange"] .md-typeset a:active {
+ color: #ff6e40; }
+
+[data-md-color-accent="deep-orange"] .md-typeset pre code::-webkit-scrollbar-thumb:hover,
+[data-md-color-accent="deep-orange"] .md-typeset .codehilite pre::-webkit-scrollbar-thumb:hover {
+ background-color: #ff6e40; }
+
+[data-md-color-accent="deep-orange"] .md-typeset .md-clipboard:hover::before,
+[data-md-color-accent="deep-orange"] .md-typeset .md-clipboard:active::before {
+ color: #ff6e40; }
+
+[data-md-color-accent="deep-orange"] .md-typeset .footnote li:hover .footnote-backref:hover,
+[data-md-color-accent="deep-orange"] .md-typeset .footnote li:target .footnote-backref {
+ color: #ff6e40; }
+
+[data-md-color-accent="deep-orange"] .md-typeset [id]:hover .headerlink:hover,
+[data-md-color-accent="deep-orange"] .md-typeset [id]:target .headerlink,
+[data-md-color-accent="deep-orange"] .md-typeset [id] .headerlink:focus {
+ color: #ff6e40; }
+
+[data-md-color-accent="deep-orange"] .md-nav__link:focus,
+[data-md-color-accent="deep-orange"] .md-nav__link:hover {
+ color: #ff6e40; }
+
+[data-md-color-accent="deep-orange"] .md-search__scrollwrap::-webkit-scrollbar-thumb:hover {
+ background-color: #ff6e40; }
+
+[data-md-color-accent="deep-orange"] .md-search-result__link[data-md-state="active"], [data-md-color-accent="deep-orange"] .md-search-result__link:hover {
+ background-color: rgba(255, 110, 64, 0.1); }
+
+[data-md-color-accent="deep-orange"] .md-sidebar__scrollwrap::-webkit-scrollbar-thumb:hover {
+ background-color: #ff6e40; }
+
+[data-md-color-accent="deep-orange"] .md-source-file:hover::before {
+ background-color: #ff6e40; }
+
+@media only screen and (max-width: 59.9375em) {
+ [data-md-color-primary="red"] .md-nav__source {
+ background-color: rgba(190, 66, 64, 0.9675); }
+ [data-md-color-primary="pink"] .md-nav__source {
+ background-color: rgba(185, 24, 79, 0.9675); }
+ [data-md-color-primary="purple"] .md-nav__source {
+ background-color: rgba(136, 57, 150, 0.9675); }
+ [data-md-color-primary="deep-purple"] .md-nav__source {
+ background-color: rgba(100, 69, 154, 0.9675); }
+ [data-md-color-primary="indigo"] .md-nav__source {
+ background-color: rgba(50, 64, 144, 0.9675); }
+ [data-md-color-primary="blue"] .md-nav__source {
+ background-color: rgba(26, 119, 193, 0.9675); }
+ [data-md-color-primary="light-blue"] .md-nav__source {
+ background-color: rgba(2, 134, 194, 0.9675); }
+ [data-md-color-primary="cyan"] .md-nav__source {
+ background-color: rgba(0, 150, 169, 0.9675); }
+ [data-md-color-primary="teal"] .md-nav__source {
+ background-color: rgba(0, 119, 108, 0.9675); }
+ [data-md-color-primary="green"] .md-nav__source {
+ background-color: rgba(60, 139, 64, 0.9675); }
+ [data-md-color-primary="light-green"] .md-nav__source {
+ background-color: rgba(99, 142, 53, 0.9675); }
+ [data-md-color-primary="lime"] .md-nav__source {
+ background-color: rgba(153, 161, 41, 0.9675); }
+ [data-md-color-primary="yellow"] .md-nav__source {
+ background-color: rgba(198, 134, 29, 0.9675); }
+ [data-md-color-primary="amber"] .md-nav__source {
+ background-color: rgba(203, 127, 0, 0.9675); }
+ [data-md-color-primary="orange"] .md-nav__source {
+ background-color: rgba(200, 111, 0, 0.9675); }
+ [data-md-color-primary="deep-orange"] .md-nav__source {
+ background-color: rgba(203, 89, 53, 0.9675); }
+ [data-md-color-primary="brown"] .md-nav__source {
+ background-color: rgba(96, 68, 57, 0.9675); }
+ [data-md-color-primary="grey"] .md-nav__source {
+ background-color: rgba(93, 93, 93, 0.9675); }
+ [data-md-color-primary="blue-grey"] .md-nav__source {
+ background-color: rgba(67, 88, 97, 0.9675); }
+ [data-md-color-primary="white"] .md-nav__source {
+ background-color: rgba(0, 0, 0, 0.07);
+ color: rgba(0, 0, 0, 0.87); } }
+
+@media only screen and (max-width: 76.1875em) {
+ html [data-md-color-primary="red"] .md-nav--primary .md-nav__title--site {
+ background-color: #ef5350; }
+ html [data-md-color-primary="pink"] .md-nav--primary .md-nav__title--site {
+ background-color: #e91e63; }
+ html [data-md-color-primary="purple"] .md-nav--primary .md-nav__title--site {
+ background-color: #ab47bc; }
+ html [data-md-color-primary="deep-purple"] .md-nav--primary .md-nav__title--site {
+ background-color: #7e57c2; }
+ html [data-md-color-primary="indigo"] .md-nav--primary .md-nav__title--site {
+ background-color: #3f51b5; }
+ html [data-md-color-primary="blue"] .md-nav--primary .md-nav__title--site {
+ background-color: #2196f3; }
+ html [data-md-color-primary="light-blue"] .md-nav--primary .md-nav__title--site {
+ background-color: #03a9f4; }
+ html [data-md-color-primary="cyan"] .md-nav--primary .md-nav__title--site {
+ background-color: #00bcd4; }
+ html [data-md-color-primary="teal"] .md-nav--primary .md-nav__title--site {
+ background-color: #009688; }
+ html [data-md-color-primary="green"] .md-nav--primary .md-nav__title--site {
+ background-color: #4caf50; }
+ html [data-md-color-primary="light-green"] .md-nav--primary .md-nav__title--site {
+ background-color: #7cb342; }
+ html [data-md-color-primary="lime"] .md-nav--primary .md-nav__title--site {
+ background-color: #c0ca33; }
+ html [data-md-color-primary="yellow"] .md-nav--primary .md-nav__title--site {
+ background-color: #f9a825; }
+ html [data-md-color-primary="amber"] .md-nav--primary .md-nav__title--site {
+ background-color: #ffa000; }
+ html [data-md-color-primary="orange"] .md-nav--primary .md-nav__title--site {
+ background-color: #fb8c00; }
+ html [data-md-color-primary="deep-orange"] .md-nav--primary .md-nav__title--site {
+ background-color: #ff7043; }
+ html [data-md-color-primary="brown"] .md-nav--primary .md-nav__title--site {
+ background-color: #795548; }
+ html [data-md-color-primary="grey"] .md-nav--primary .md-nav__title--site {
+ background-color: #757575; }
+ html [data-md-color-primary="blue-grey"] .md-nav--primary .md-nav__title--site {
+ background-color: #546e7a; }
+ html [data-md-color-primary="white"] .md-nav--primary .md-nav__title--site {
+ background-color: white;
+ color: rgba(0, 0, 0, 0.87); }
+ [data-md-color-primary="white"] .md-hero {
+ border-bottom: 0.1rem solid rgba(0, 0, 0, 0.07); } }
+
+@media only screen and (min-width: 76.25em) {
+ [data-md-color-primary="red"] .md-tabs {
+ background-color: #ef5350; }
+ [data-md-color-primary="pink"] .md-tabs {
+ background-color: #e91e63; }
+ [data-md-color-primary="purple"] .md-tabs {
+ background-color: #ab47bc; }
+ [data-md-color-primary="deep-purple"] .md-tabs {
+ background-color: #7e57c2; }
+ [data-md-color-primary="indigo"] .md-tabs {
+ background-color: #3f51b5; }
+ [data-md-color-primary="blue"] .md-tabs {
+ background-color: #2196f3; }
+ [data-md-color-primary="light-blue"] .md-tabs {
+ background-color: #03a9f4; }
+ [data-md-color-primary="cyan"] .md-tabs {
+ background-color: #00bcd4; }
+ [data-md-color-primary="teal"] .md-tabs {
+ background-color: #009688; }
+ [data-md-color-primary="green"] .md-tabs {
+ background-color: #4caf50; }
+ [data-md-color-primary="light-green"] .md-tabs {
+ background-color: #7cb342; }
+ [data-md-color-primary="lime"] .md-tabs {
+ background-color: #c0ca33; }
+ [data-md-color-primary="yellow"] .md-tabs {
+ background-color: #f9a825; }
+ [data-md-color-primary="amber"] .md-tabs {
+ background-color: #ffa000; }
+ [data-md-color-primary="orange"] .md-tabs {
+ background-color: #fb8c00; }
+ [data-md-color-primary="deep-orange"] .md-tabs {
+ background-color: #ff7043; }
+ [data-md-color-primary="brown"] .md-tabs {
+ background-color: #795548; }
+ [data-md-color-primary="grey"] .md-tabs {
+ background-color: #757575; }
+ [data-md-color-primary="blue-grey"] .md-tabs {
+ background-color: #546e7a; }
+ [data-md-color-primary="white"] .md-tabs {
+ border-bottom: 0.1rem solid rgba(0, 0, 0, 0.07);
+ background-color: white;
+ color: rgba(0, 0, 0, 0.87); } }
+
+@media only screen and (min-width: 60em) {
+ [data-md-color-primary="white"] .md-search__input {
+ background-color: rgba(0, 0, 0, 0.07); }
+ [data-md-color-primary="white"] .md-search__input::-webkit-input-placeholder {
+ color: rgba(0, 0, 0, 0.54); }
+ [data-md-color-primary="white"] .md-search__input:-ms-input-placeholder {
+ color: rgba(0, 0, 0, 0.54); }
+ [data-md-color-primary="white"] .md-search__input::-ms-input-placeholder {
+ color: rgba(0, 0, 0, 0.54); }
+ [data-md-color-primary="white"] .md-search__input::placeholder {
+ color: rgba(0, 0, 0, 0.54); } }
+
+/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsImZpbGUiOiJhc3NldHMvc3R5bGVzaGVldHMvYXBwbGljYXRpb24tcGFsZXR0ZS4yMjkxNTEyNi5jc3MiLCJzb3VyY2VSb290IjoiIn0=*/
\ No newline at end of file
diff --git a/content/docs/pekko-management/current/main/assets/stylesheets/application.451f80e5.css b/content/docs/pekko-management/current/main/assets/stylesheets/application.451f80e5.css
new file mode 100644
index 00000000..7001a0c8
--- /dev/null
+++ b/content/docs/pekko-management/current/main/assets/stylesheets/application.451f80e5.css
@@ -0,0 +1,2557 @@
+/*!
+ Material for MkDocs
+ Copyright (c) 2016-2018 Martin Donath
+ License: MIT
+*/
+@charset "UTF-8";
+html {
+ box-sizing: border-box; }
+
+*,
+*::before,
+*::after {
+ box-sizing: inherit; }
+
+html {
+ -webkit-text-size-adjust: none;
+ -moz-text-size-adjust: none;
+ -ms-text-size-adjust: none;
+ text-size-adjust: none; }
+
+body {
+ margin: 0; }
+
+hr {
+ overflow: visible;
+ box-sizing: content-box; }
+
+a {
+ -webkit-text-decoration-skip: objects; }
+
+a,
+button,
+label,
+input {
+ -webkit-tap-highlight-color: transparent; }
+
+a {
+ color: inherit;
+ text-decoration: none; }
+
+small {
+ font-size: 80%; }
+
+sub,
+sup {
+ position: relative;
+ font-size: 80%;
+ line-height: 0;
+ vertical-align: baseline; }
+
+sub {
+ bottom: -0.25em; }
+
+sup {
+ top: -0.5em; }
+
+img {
+ border-style: none; }
+
+table {
+ border-collapse: separate;
+ border-spacing: 0; }
+
+td,
+th {
+ font-weight: normal;
+ vertical-align: top; }
+
+button {
+ margin: 0;
+ padding: 0;
+ border: 0;
+ outline-style: none;
+ background: transparent;
+ font-size: inherit; }
+
+input {
+ border: 0;
+ outline: 0; }
+
+.md-icon, .md-clipboard::before, .md-nav__title::before, .md-nav__button, .md-nav__link::after, .md-search-result__article--document::before, .md-source-file::before, .md-typeset .admonition > .admonition-title::before, .md-typeset details > .admonition-title::before, .md-typeset .admonition > summary::before, .md-typeset details > summary::before, .md-typeset .footnote-backref, .md-typeset .critic.comment::before, .md-typeset summary::after, .md-typeset .task-list-control .task-list-ind [...]
+ font-family: "Material Icons";
+ font-style: normal;
+ font-variant: normal;
+ font-weight: normal;
+ line-height: 1;
+ text-transform: none;
+ white-space: nowrap;
+ speak: none;
+ word-wrap: normal;
+ direction: ltr; }
+ .md-content__icon, .md-header-nav__button, .md-footer-nav__button, .md-nav__title::before, .md-nav__button, .md-search-result__article--document::before {
+ display: inline-block;
+ margin: 0.4rem;
+ padding: 0.8rem;
+ font-size: 2.4rem;
+ cursor: pointer; }
+
+.md-icon--arrow-back::before {
+ content: "\E5C4"; }
+
+.md-icon--arrow-forward::before {
+ content: "\E5C8"; }
+
+.md-icon--menu::before {
+ content: "\E5D2"; }
+
+.md-icon--search::before {
+ content: "\E8B6"; }
+
+[dir="rtl"] .md-icon--arrow-back::before {
+ content: "\E5C8"; }
+
+[dir="rtl"] .md-icon--arrow-forward::before {
+ content: "\E5C4"; }
+
+body {
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale; }
+
+body,
+input {
+ color: rgba(0, 0, 0, 0.87);
+ -webkit-font-feature-settings: "kern", "liga";
+ font-feature-settings: "kern", "liga";
+ font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; }
+
+pre,
+code,
+kbd {
+ color: rgba(0, 0, 0, 0.87);
+ -webkit-font-feature-settings: "kern";
+ font-feature-settings: "kern";
+ font-family: "Courier New", Courier, monospace; }
+
+.md-typeset {
+ font-size: 1.6rem;
+ line-height: 1.6;
+ -webkit-print-color-adjust: exact; }
+ .md-typeset p,
+ .md-typeset ul,
+ .md-typeset ol,
+ .md-typeset blockquote {
+ margin: 1em 0; }
+ .md-typeset h1 {
+ margin: 0 0 4rem;
+ color: rgba(0, 0, 0, 0.54);
+ font-size: 3.125rem;
+ font-weight: 300;
+ letter-spacing: -0.01em;
+ line-height: 1.3; }
+ .md-typeset h2 {
+ margin: 4rem 0 1.6rem;
+ font-size: 2.5rem;
+ font-weight: 300;
+ letter-spacing: -0.01em;
+ line-height: 1.4; }
+ .md-typeset h3 {
+ margin: 3.2rem 0 1.6rem;
+ font-size: 2rem;
+ font-weight: 400;
+ letter-spacing: -0.01em;
+ line-height: 1.5; }
+ .md-typeset h2 + h3 {
+ margin-top: 1.6rem; }
+ .md-typeset h4 {
+ margin: 1.6rem 0;
+ font-size: 1.6rem;
+ font-weight: 700;
+ letter-spacing: -0.01em; }
+ .md-typeset h5,
+ .md-typeset h6 {
+ margin: 1.6rem 0;
+ color: rgba(0, 0, 0, 0.54);
+ font-size: 1.28rem;
+ font-weight: 700;
+ letter-spacing: -0.01em; }
+ .md-typeset h5 {
+ text-transform: uppercase; }
+ .md-typeset hr {
+ margin: 1.5em 0;
+ border-bottom: 0.1rem dotted rgba(0, 0, 0, 0.26); }
+ .md-typeset a {
+ color: #3f51b5;
+ word-break: break-word; }
+ .md-typeset a, .md-typeset a::before {
+ transition: color 0.125s; }
+ .md-typeset a:hover, .md-typeset a:active {
+ color: #536dfe; }
+ .md-typeset code,
+ .md-typeset pre {
+ background-color: rgba(236, 236, 236, 0.5);
+ color: #37474F;
+ font-size: 85%;
+ direction: ltr; }
+ .md-typeset code {
+ margin: 0 0.29412em;
+ padding: 0.07353em 0;
+ border-radius: 0.2rem;
+ box-shadow: 0.29412em 0 0 rgba(236, 236, 236, 0.5), -0.29412em 0 0 rgba(236, 236, 236, 0.5);
+ word-break: break-word;
+ -webkit-box-decoration-break: clone;
+ box-decoration-break: clone; }
+ .md-typeset h1 code,
+ .md-typeset h2 code,
+ .md-typeset h3 code,
+ .md-typeset h4 code,
+ .md-typeset h5 code,
+ .md-typeset h6 code {
+ margin: 0;
+ background-color: transparent;
+ box-shadow: none; }
+ .md-typeset a > code {
+ margin: inherit;
+ padding: inherit;
+ border-radius: none;
+ background-color: inherit;
+ color: inherit;
+ box-shadow: none; }
+ .md-typeset pre {
+ position: relative;
+ margin: 1em 0;
+ border-radius: 0.2rem;
+ line-height: 1.4;
+ -webkit-overflow-scrolling: touch; }
+ .md-typeset pre > code {
+ display: block;
+ margin: 0;
+ padding: 1.05rem 1.2rem;
+ background-color: transparent;
+ font-size: inherit;
+ box-shadow: none;
+ -webkit-box-decoration-break: none;
+ box-decoration-break: none;
+ overflow: auto; }
+ .md-typeset pre > code::-webkit-scrollbar {
+ width: 0.4rem;
+ height: 0.4rem; }
+ .md-typeset pre > code::-webkit-scrollbar-thumb {
+ background-color: rgba(0, 0, 0, 0.26); }
+ .md-typeset pre > code::-webkit-scrollbar-thumb:hover {
+ background-color: #536dfe; }
+ .md-typeset kbd {
+ padding: 0 0.29412em;
+ border: 0.1rem solid #c9c9c9;
+ border-radius: 0.3rem;
+ border-bottom-color: #bcbcbc;
+ background-color: #FCFCFC;
+ color: #555555;
+ font-size: 85%;
+ box-shadow: 0 0.1rem 0 #b0b0b0;
+ word-break: break-word; }
+ .md-typeset mark {
+ margin: 0 0.25em;
+ padding: 0.0625em 0;
+ border-radius: 0.2rem;
+ background-color: rgba(255, 235, 59, 0.5);
+ box-shadow: 0.25em 0 0 rgba(255, 235, 59, 0.5), -0.25em 0 0 rgba(255, 235, 59, 0.5);
+ word-break: break-word;
+ -webkit-box-decoration-break: clone;
+ box-decoration-break: clone; }
+ .md-typeset abbr {
+ border-bottom: 0.1rem dotted rgba(0, 0, 0, 0.54);
+ text-decoration: none;
+ cursor: help; }
+ .md-typeset small {
+ opacity: 0.75; }
+ .md-typeset sup,
+ .md-typeset sub {
+ margin-left: 0.07812em; }
+ [dir="rtl"] .md-typeset sup, [dir="rtl"]
+ .md-typeset sub {
+ margin-right: 0.07812em;
+ margin-left: initial; }
+ .md-typeset blockquote {
+ padding-left: 1.2rem;
+ border-left: 0.4rem solid rgba(0, 0, 0, 0.26);
+ color: rgba(0, 0, 0, 0.54); }
+ [dir="rtl"] .md-typeset blockquote {
+ padding-right: 1.2rem;
+ padding-left: initial;
+ border-right: 0.4rem solid rgba(0, 0, 0, 0.26);
+ border-left: initial; }
+ .md-typeset ul {
+ list-style-type: disc; }
+ .md-typeset ul,
+ .md-typeset ol {
+ margin-left: 0.625em;
+ padding: 0; }
+ [dir="rtl"] .md-typeset ul, [dir="rtl"]
+ .md-typeset ol {
+ margin-right: 0.625em;
+ margin-left: initial; }
+ .md-typeset ul ol,
+ .md-typeset ol ol {
+ list-style-type: lower-alpha; }
+ .md-typeset ul ol ol,
+ .md-typeset ol ol ol {
+ list-style-type: lower-roman; }
+ .md-typeset ul li,
+ .md-typeset ol li {
+ margin-bottom: 0.5em;
+ margin-left: 1.25em; }
+ [dir="rtl"] .md-typeset ul li, [dir="rtl"]
+ .md-typeset ol li {
+ margin-right: 1.25em;
+ margin-left: initial; }
+ .md-typeset ul li p,
+ .md-typeset ul li blockquote,
+ .md-typeset ol li p,
+ .md-typeset ol li blockquote {
+ margin: 0.5em 0; }
+ .md-typeset ul li:last-child,
+ .md-typeset ol li:last-child {
+ margin-bottom: 0; }
+ .md-typeset ul li ul,
+ .md-typeset ul li ol,
+ .md-typeset ol li ul,
+ .md-typeset ol li ol {
+ margin: 0.5em 0 0.5em 0.625em; }
+ [dir="rtl"] .md-typeset ul li ul, [dir="rtl"]
+ .md-typeset ul li ol, [dir="rtl"]
+ .md-typeset ol li ul, [dir="rtl"]
+ .md-typeset ol li ol {
+ margin-right: 0.625em;
+ margin-left: initial; }
+ .md-typeset dd {
+ margin: 1em 0 1em 1.875em; }
+ [dir="rtl"] .md-typeset dd {
+ margin-right: 1.875em;
+ margin-left: initial; }
+ .md-typeset iframe,
+ .md-typeset img,
+ .md-typeset svg {
+ max-width: 100%; }
+ .md-typeset table:not([class]) {
+ box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 1px 5px 0 rgba(0, 0, 0, 0.12), 0 3px 1px -2px rgba(0, 0, 0, 0.2);
+ display: inline-block;
+ max-width: 100%;
+ border-radius: 0.2rem;
+ font-size: 1.28rem;
+ overflow: auto;
+ -webkit-overflow-scrolling: touch; }
+ .md-typeset table:not([class]) + * {
+ margin-top: 1.5em; }
+ .md-typeset table:not([class]) th:not([align]),
+ .md-typeset table:not([class]) td:not([align]) {
+ text-align: left; }
+ [dir="rtl"] .md-typeset table:not([class]) th:not([align]), [dir="rtl"]
+ .md-typeset table:not([class]) td:not([align]) {
+ text-align: right; }
+ .md-typeset table:not([class]) th {
+ min-width: 10rem;
+ padding: 1.2rem 1.6rem;
+ background-color: rgba(0, 0, 0, 0.54);
+ color: white;
+ vertical-align: top; }
+ .md-typeset table:not([class]) td {
+ padding: 1.2rem 1.6rem;
+ border-top: 0.1rem solid rgba(0, 0, 0, 0.07);
+ vertical-align: top; }
+ .md-typeset table:not([class]) tr:first-child td {
+ border-top: 0; }
+ .md-typeset table:not([class]) a {
+ word-break: normal; }
+ .md-typeset__scrollwrap {
+ margin: 1em -1.6rem;
+ overflow-x: auto;
+ -webkit-overflow-scrolling: touch; }
+ .md-typeset .md-typeset__table {
+ display: inline-block;
+ margin-bottom: 0.5em;
+ padding: 0 1.6rem; }
+ .md-typeset .md-typeset__table table {
+ display: table;
+ width: 100%;
+ margin: 0;
+ overflow: hidden; }
+
+html {
+ height: 100%;
+ font-size: 62.5%;
+ overflow-x: hidden; }
+
+body {
+ position: relative;
+ height: 100%; }
+
+hr {
+ display: block;
+ height: 0.1rem;
+ padding: 0;
+ border: 0; }
+
+.md-svg {
+ display: none; }
+
+.md-grid {
+ max-width: 122rem;
+ margin-right: auto;
+ margin-left: auto; }
+
+.md-container,
+.md-main {
+ overflow: auto; }
+
+.md-container {
+ display: table;
+ width: 100%;
+ height: 100%;
+ padding-top: 4.8rem;
+ table-layout: fixed; }
+
+.md-main {
+ display: table-row;
+ height: 100%; }
+ .md-main__inner {
+ height: 100%;
+ padding-top: 3rem;
+ padding-bottom: 0.1rem; }
+
+.md-toggle {
+ display: none; }
+
+.md-overlay {
+ position: fixed;
+ top: 0;
+ width: 0;
+ height: 0;
+ transition: width 0s 0.25s, height 0s 0.25s, opacity 0.25s;
+ background-color: rgba(0, 0, 0, 0.54);
+ opacity: 0;
+ z-index: 3; }
+
+.md-flex {
+ display: table; }
+ .md-flex__cell {
+ display: table-cell;
+ position: relative;
+ vertical-align: top; }
+ .md-flex__cell--shrink {
+ width: 0%; }
+ .md-flex__cell--stretch {
+ display: table;
+ width: 100%;
+ table-layout: fixed; }
+ .md-flex__ellipsis {
+ display: table-cell;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ overflow: hidden; }
+
+.md-skip {
+ position: fixed;
+ width: 0.1rem;
+ height: 0.1rem;
+ margin: 1rem;
+ padding: 0.6rem 1rem;
+ clip: rect(0.1rem);
+ -webkit-transform: translateY(0.8rem);
+ transform: translateY(0.8rem);
+ border-radius: 0.2rem;
+ background-color: rgba(0, 0, 0, 0.87);
+ color: white;
+ font-size: 1.28rem;
+ opacity: 0;
+ overflow: hidden; }
+ .md-skip:focus {
+ width: auto;
+ height: auto;
+ clip: auto;
+ -webkit-transform: translateX(0);
+ transform: translateX(0);
+ transition: opacity 0.175s 0.075s, -webkit-transform 0.25s cubic-bezier(0.4, 0, 0.2, 1);
+ transition: transform 0.25s cubic-bezier(0.4, 0, 0.2, 1), opacity 0.175s 0.075s;
+ transition: transform 0.25s cubic-bezier(0.4, 0, 0.2, 1), opacity 0.175s 0.075s, -webkit-transform 0.25s cubic-bezier(0.4, 0, 0.2, 1);
+ opacity: 1;
+ z-index: 10; }
+
+@page {
+ margin: 25mm; }
+
+.md-clipboard {
+ position: absolute;
+ top: 0.6rem;
+ right: 0.6rem;
+ width: 2.8rem;
+ height: 2.8rem;
+ border-radius: 0.2rem;
+ font-size: 1.6rem;
+ cursor: pointer;
+ z-index: 1;
+ -webkit-backface-visibility: hidden;
+ backface-visibility: hidden; }
+ .md-clipboard::before {
+ transition: color 0.25s, opacity 0.25s;
+ color: rgba(0, 0, 0, 0.07);
+ content: "\E14D"; }
+ pre:hover .md-clipboard::before,
+ .codehilite:hover .md-clipboard::before, .md-typeset .highlight:hover .md-clipboard::before {
+ color: rgba(0, 0, 0, 0.54); }
+ .md-clipboard:focus::before, .md-clipboard:hover::before {
+ color: #536dfe; }
+ .md-clipboard__message {
+ display: block;
+ position: absolute;
+ top: 0;
+ right: 3.4rem;
+ padding: 0.6rem 1rem;
+ -webkit-transform: translateX(0.8rem);
+ transform: translateX(0.8rem);
+ transition: opacity 0.175s, -webkit-transform 0.25s cubic-bezier(0.9, 0.1, 0.9, 0);
+ transition: transform 0.25s cubic-bezier(0.9, 0.1, 0.9, 0), opacity 0.175s;
+ transition: transform 0.25s cubic-bezier(0.9, 0.1, 0.9, 0), opacity 0.175s, -webkit-transform 0.25s cubic-bezier(0.9, 0.1, 0.9, 0);
+ border-radius: 0.2rem;
+ background-color: rgba(0, 0, 0, 0.54);
+ color: white;
+ font-size: 1.28rem;
+ white-space: nowrap;
+ opacity: 0;
+ pointer-events: none; }
+ .md-clipboard__message--active {
+ -webkit-transform: translateX(0);
+ transform: translateX(0);
+ transition: opacity 0.175s 0.075s, -webkit-transform 0.25s cubic-bezier(0.4, 0, 0.2, 1);
+ transition: transform 0.25s cubic-bezier(0.4, 0, 0.2, 1), opacity 0.175s 0.075s;
+ transition: transform 0.25s cubic-bezier(0.4, 0, 0.2, 1), opacity 0.175s 0.075s, -webkit-transform 0.25s cubic-bezier(0.4, 0, 0.2, 1);
+ opacity: 1;
+ pointer-events: initial; }
+ .md-clipboard__message::before {
+ content: attr(aria-label); }
+ .md-clipboard__message::after {
+ display: block;
+ position: absolute;
+ top: 50%;
+ right: -0.4rem;
+ width: 0;
+ margin-top: -0.4rem;
+ border-width: 0.4rem 0 0.4rem 0.4rem;
+ border-style: solid;
+ border-color: transparent rgba(0, 0, 0, 0.54);
+ content: ""; }
+
+.md-content__inner {
+ margin: 0 1.6rem 2.4rem;
+ padding-top: 1.2rem; }
+ .md-content__inner::before {
+ display: block;
+ height: 0.8rem;
+ content: ""; }
+ .md-content__inner > :last-child {
+ margin-bottom: 0; }
+
+.md-content__icon {
+ position: relative;
+ margin: 0.8rem 0;
+ padding: 0;
+ float: right; }
+ .md-typeset .md-content__icon {
+ color: rgba(0, 0, 0, 0.26); }
+
+.md-header {
+ position: fixed;
+ top: 0;
+ right: 0;
+ left: 0;
+ height: 4.8rem;
+ transition: background-color 0.25s, color 0.25s;
+ background-color: #3f51b5;
+ color: white;
+ box-shadow: none;
+ z-index: 2;
+ -webkit-backface-visibility: hidden;
+ backface-visibility: hidden; }
+ .no-js .md-header {
+ transition: none;
+ box-shadow: none; }
+ .md-header[data-md-state="shadow"] {
+ transition: background-color 0.25s, color 0.25s, box-shadow 0.25s;
+ box-shadow: 0 0 0.4rem rgba(0, 0, 0, 0.1), 0 0.4rem 0.8rem rgba(0, 0, 0, 0.2); }
+
+.md-header-nav {
+ padding: 0 0.4rem; }
+ .md-header-nav__button {
+ position: relative;
+ transition: opacity 0.25s;
+ z-index: 1; }
+ .md-header-nav__button:hover {
+ opacity: 0.7; }
+ .md-header-nav__button.md-logo * {
+ display: block; }
+ .no-js .md-header-nav__button.md-icon--search {
+ display: none; }
+ .md-header-nav__topic {
+ display: block;
+ position: absolute;
+ transition: opacity 0.15s, -webkit-transform 0.4s cubic-bezier(0.1, 0.7, 0.1, 1);
+ transition: transform 0.4s cubic-bezier(0.1, 0.7, 0.1, 1), opacity 0.15s;
+ transition: transform 0.4s cubic-bezier(0.1, 0.7, 0.1, 1), opacity 0.15s, -webkit-transform 0.4s cubic-bezier(0.1, 0.7, 0.1, 1);
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ overflow: hidden; }
+ .md-header-nav__topic + .md-header-nav__topic {
+ -webkit-transform: translateX(2.5rem);
+ transform: translateX(2.5rem);
+ transition: opacity 0.15s, -webkit-transform 0.4s cubic-bezier(1, 0.7, 0.1, 0.1);
+ transition: transform 0.4s cubic-bezier(1, 0.7, 0.1, 0.1), opacity 0.15s;
+ transition: transform 0.4s cubic-bezier(1, 0.7, 0.1, 0.1), opacity 0.15s, -webkit-transform 0.4s cubic-bezier(1, 0.7, 0.1, 0.1);
+ opacity: 0;
+ z-index: -1;
+ pointer-events: none; }
+ [dir="rtl"] .md-header-nav__topic + .md-header-nav__topic {
+ -webkit-transform: translateX(-2.5rem);
+ transform: translateX(-2.5rem); }
+ .no-js .md-header-nav__topic {
+ position: initial; }
+ .no-js .md-header-nav__topic + .md-header-nav__topic {
+ display: none; }
+ .md-header-nav__title {
+ padding: 0 2rem;
+ font-size: 1.8rem;
+ line-height: 4.8rem; }
+ .md-header-nav__title[data-md-state="active"] .md-header-nav__topic {
+ -webkit-transform: translateX(-2.5rem);
+ transform: translateX(-2.5rem);
+ transition: opacity 0.15s, -webkit-transform 0.4s cubic-bezier(1, 0.7, 0.1, 0.1);
+ transition: transform 0.4s cubic-bezier(1, 0.7, 0.1, 0.1), opacity 0.15s;
+ transition: transform 0.4s cubic-bezier(1, 0.7, 0.1, 0.1), opacity 0.15s, -webkit-transform 0.4s cubic-bezier(1, 0.7, 0.1, 0.1);
+ opacity: 0;
+ z-index: -1;
+ pointer-events: none; }
+ [dir="rtl"] .md-header-nav__title[data-md-state="active"] .md-header-nav__topic {
+ -webkit-transform: translateX(2.5rem);
+ transform: translateX(2.5rem); }
+ .md-header-nav__title[data-md-state="active"] .md-header-nav__topic + .md-header-nav__topic {
+ -webkit-transform: translateX(0);
+ transform: translateX(0);
+ transition: opacity 0.15s, -webkit-transform 0.4s cubic-bezier(0.1, 0.7, 0.1, 1);
+ transition: transform 0.4s cubic-bezier(0.1, 0.7, 0.1, 1), opacity 0.15s;
+ transition: transform 0.4s cubic-bezier(0.1, 0.7, 0.1, 1), opacity 0.15s, -webkit-transform 0.4s cubic-bezier(0.1, 0.7, 0.1, 1);
+ opacity: 1;
+ z-index: 0;
+ pointer-events: initial; }
+ .md-header-nav__source {
+ display: none; }
+
+.md-hero {
+ transition: background 0.25s;
+ background-color: #3f51b5;
+ color: white;
+ font-size: 2rem;
+ overflow: hidden; }
+ .md-hero__inner {
+ margin-top: 2rem;
+ padding: 1.6rem 1.6rem 0.8rem;
+ transition: opacity 0.25s, -webkit-transform 0.4s cubic-bezier(0.1, 0.7, 0.1, 1);
+ transition: transform 0.4s cubic-bezier(0.1, 0.7, 0.1, 1), opacity 0.25s;
+ transition: transform 0.4s cubic-bezier(0.1, 0.7, 0.1, 1), opacity 0.25s, -webkit-transform 0.4s cubic-bezier(0.1, 0.7, 0.1, 1);
+ transition-delay: 0.1s; }
+ [data-md-state="hidden"] .md-hero__inner {
+ pointer-events: none;
+ -webkit-transform: translateY(1.25rem);
+ transform: translateY(1.25rem);
+ transition: opacity 0.1s 0s, -webkit-transform 0s 0.4s;
+ transition: transform 0s 0.4s, opacity 0.1s 0s;
+ transition: transform 0s 0.4s, opacity 0.1s 0s, -webkit-transform 0s 0.4s;
+ opacity: 0; }
+ .md-hero--expand .md-hero__inner {
+ margin-bottom: 2.4rem; }
+
+.md-footer-nav {
+ background-color: rgba(0, 0, 0, 0.87);
+ color: white; }
+ .md-footer-nav__inner {
+ padding: 0.4rem;
+ overflow: auto; }
+ .md-footer-nav__link {
+ padding-top: 2.8rem;
+ padding-bottom: 0.8rem;
+ transition: opacity 0.25s; }
+ .md-footer-nav__link:hover {
+ opacity: 0.7; }
+ .md-footer-nav__link--prev {
+ width: 25%;
+ float: left; }
+ [dir="rtl"] .md-footer-nav__link--prev {
+ float: right; }
+ .md-footer-nav__link--next {
+ width: 75%;
+ float: right;
+ text-align: right; }
+ [dir="rtl"] .md-footer-nav__link--next {
+ float: left;
+ text-align: left; }
+ .md-footer-nav__button {
+ transition: background 0.25s; }
+ .md-footer-nav__title {
+ position: relative;
+ padding: 0 2rem;
+ font-size: 1.8rem;
+ line-height: 4.8rem; }
+ .md-footer-nav__direction {
+ position: absolute;
+ right: 0;
+ left: 0;
+ margin-top: -2rem;
+ padding: 0 2rem;
+ color: rgba(255, 255, 255, 0.7);
+ font-size: 1.5rem; }
+
+.md-footer-meta {
+ background-color: rgba(0, 0, 0, 0.895); }
+ .md-footer-meta__inner {
+ padding: 0.4rem;
+ overflow: auto; }
+ html .md-footer-meta.md-typeset a {
+ color: rgba(255, 255, 255, 0.7); }
+ html .md-footer-meta.md-typeset a:focus, html .md-footer-meta.md-typeset a:hover {
+ color: white; }
+
+.md-footer-copyright {
+ margin: 0 1.2rem;
+ padding: 0.8rem 0;
+ color: rgba(255, 255, 255, 0.3);
+ font-size: 1.28rem; }
+ .md-footer-copyright__highlight {
+ color: rgba(255, 255, 255, 0.7); }
+
+.md-footer-social {
+ margin: 0 0.8rem;
+ padding: 0.4rem 0 1.2rem; }
+ .md-footer-social__link {
+ display: inline-block;
+ width: 3.2rem;
+ height: 3.2rem;
+ font-size: 1.6rem;
+ text-align: center; }
+ .md-footer-social__link::before {
+ line-height: 1.9; }
+
+.md-nav {
+ font-size: 1.4rem;
+ line-height: 1.3; }
+ .md-nav__title {
+ display: block;
+ padding: 0 1.2rem;
+ font-weight: 700;
+ text-overflow: ellipsis;
+ overflow: hidden; }
+ .md-nav__title::before {
+ display: none;
+ content: "\E5C4"; }
+ [dir="rtl"] .md-nav__title::before {
+ content: "\E5C8"; }
+ .md-nav__title .md-nav__button {
+ display: none; }
+ .md-nav__list {
+ margin: 0;
+ padding: 0;
+ list-style: none; }
+ .md-nav__item {
+ padding: 0 1.2rem; }
+ .md-nav__item:last-child {
+ padding-bottom: 1.2rem; }
+ .md-nav__item .md-nav__item {
+ padding-right: 0; }
+ [dir="rtl"] .md-nav__item .md-nav__item {
+ padding-right: 1.2rem;
+ padding-left: 0; }
+ .md-nav__item .md-nav__item:last-child {
+ padding-bottom: 0; }
+ .md-nav__button img {
+ width: 100%;
+ height: auto; }
+ .md-nav__link {
+ display: block;
+ margin-top: 0.625em;
+ transition: color 0.125s;
+ text-overflow: ellipsis;
+ cursor: pointer;
+ overflow: hidden; }
+ .md-nav__item--nested > .md-nav__link::after {
+ content: "\E313"; }
+ html .md-nav__link[for="__toc"] {
+ display: none; }
+ html .md-nav__link[for="__toc"] ~ .md-nav {
+ display: none; }
+ html .md-nav__link[for="__toc"] + .md-nav__link::after {
+ display: none; }
+ .md-nav__link[data-md-state="blur"] {
+ color: rgba(0, 0, 0, 0.54); }
+ .md-nav__link:active, .md-nav__link--active {
+ color: #3f51b5; }
+ .md-nav__item--nested > .md-nav__link {
+ color: inherit; }
+ .md-nav__link:focus, .md-nav__link:hover {
+ color: #536dfe; }
+ .md-nav__source {
+ display: none; }
+
+.no-js .md-search {
+ display: none; }
+
+.md-search__overlay {
+ opacity: 0;
+ z-index: 1; }
+
+.md-search__form {
+ position: relative; }
+
+.md-search__input {
+ position: relative;
+ padding: 0 4.4rem 0 7.2rem;
+ text-overflow: ellipsis;
+ z-index: 2; }
+ [dir="rtl"] .md-search__input {
+ padding: 0 7.2rem 0 4.4rem; }
+ .md-search__input::-webkit-input-placeholder {
+ transition: color 0.25s cubic-bezier(0.1, 0.7, 0.1, 1); }
+ .md-search__input:-ms-input-placeholder {
+ transition: color 0.25s cubic-bezier(0.1, 0.7, 0.1, 1); }
+ .md-search__input::-ms-input-placeholder {
+ transition: color 0.25s cubic-bezier(0.1, 0.7, 0.1, 1); }
+ .md-search__input::placeholder {
+ transition: color 0.25s cubic-bezier(0.1, 0.7, 0.1, 1); }
+ .md-search__input ~ .md-search__icon, .md-search__input::-webkit-input-placeholder {
+ color: rgba(0, 0, 0, 0.54); }
+ .md-search__input ~ .md-search__icon, .md-search__input:-ms-input-placeholder {
+ color: rgba(0, 0, 0, 0.54); }
+ .md-search__input ~ .md-search__icon, .md-search__input::-ms-input-placeholder {
+ color: rgba(0, 0, 0, 0.54); }
+ .md-search__input ~ .md-search__icon, .md-search__input::placeholder {
+ color: rgba(0, 0, 0, 0.54); }
+ .md-search__input::-ms-clear {
+ display: none; }
+
+.md-search__icon {
+ position: absolute;
+ transition: color 0.25s cubic-bezier(0.1, 0.7, 0.1, 1), opacity 0.25s;
+ font-size: 2.4rem;
+ cursor: pointer;
+ z-index: 2; }
+ .md-search__icon:hover {
+ opacity: 0.7; }
+ .md-search__icon[for="__search"] {
+ top: 0.6rem;
+ left: 1rem; }
+ [dir="rtl"] .md-search__icon[for="__search"] {
+ right: 1rem;
+ left: initial; }
+ .md-search__icon[for="__search"]::before {
+ content: "\E8B6"; }
+ .md-search__icon[type="reset"] {
+ top: 0.6rem;
+ right: 1rem;
+ -webkit-transform: scale(0.125);
+ transform: scale(0.125);
+ transition: opacity 0.15s, -webkit-transform 0.15s cubic-bezier(0.1, 0.7, 0.1, 1);
+ transition: transform 0.15s cubic-bezier(0.1, 0.7, 0.1, 1), opacity 0.15s;
+ transition: transform 0.15s cubic-bezier(0.1, 0.7, 0.1, 1), opacity 0.15s, -webkit-transform 0.15s cubic-bezier(0.1, 0.7, 0.1, 1);
+ opacity: 0; }
+ [dir="rtl"] .md-search__icon[type="reset"] {
+ right: initial;
+ left: 1rem; }
+ [data-md-toggle="search"]:checked ~ .md-header .md-search__input:valid ~ .md-search__icon[type="reset"] {
+ -webkit-transform: scale(1);
+ transform: scale(1);
+ opacity: 1; }
+ [data-md-toggle="search"]:checked ~ .md-header .md-search__input:valid ~ .md-search__icon[type="reset"]:hover {
+ opacity: 0.7; }
+
+.md-search__output {
+ position: absolute;
+ width: 100%;
+ border-radius: 0 0 0.2rem 0.2rem;
+ overflow: hidden;
+ z-index: 1; }
+
+.md-search__scrollwrap {
+ height: 100%;
+ background-color: white;
+ box-shadow: 0 0.1rem 0 rgba(0, 0, 0, 0.07) inset;
+ overflow-y: auto;
+ -webkit-overflow-scrolling: touch; }
+
+.md-search-result {
+ color: rgba(0, 0, 0, 0.87);
+ word-break: break-word; }
+ .md-search-result__meta {
+ padding: 0 1.6rem;
+ background-color: rgba(0, 0, 0, 0.07);
+ color: rgba(0, 0, 0, 0.54);
+ font-size: 1.28rem;
+ line-height: 3.6rem; }
+ .md-search-result__list {
+ margin: 0;
+ padding: 0;
+ border-top: 0.1rem solid rgba(0, 0, 0, 0.07);
+ list-style: none; }
+ .md-search-result__item {
+ box-shadow: 0 -0.1rem 0 rgba(0, 0, 0, 0.07); }
+ .md-search-result__link {
+ display: block;
+ transition: background 0.25s;
+ outline: 0;
+ overflow: hidden; }
+ .md-search-result__link[data-md-state="active"], .md-search-result__link:hover {
+ background-color: rgba(83, 109, 254, 0.1); }
+ .md-search-result__link[data-md-state="active"] .md-search-result__article::before, .md-search-result__link:hover .md-search-result__article::before {
+ opacity: 0.7; }
+ .md-search-result__link:last-child .md-search-result__teaser {
+ margin-bottom: 1.2rem; }
+ .md-search-result__article {
+ position: relative;
+ padding: 0 1.6rem;
+ overflow: auto; }
+ .md-search-result__article--document::before {
+ position: absolute;
+ left: 0;
+ margin: 0.2rem;
+ transition: opacity 0.25s;
+ color: rgba(0, 0, 0, 0.54);
+ content: "\E880"; }
+ [dir="rtl"] .md-search-result__article--document::before {
+ right: 0;
+ left: initial; }
+ .md-search-result__article--document .md-search-result__title {
+ margin: 1.1rem 0;
+ font-size: 1.6rem;
+ font-weight: 400;
+ line-height: 1.4; }
+ .md-search-result__title {
+ margin: 0.5em 0;
+ font-size: 1.28rem;
+ font-weight: 700;
+ line-height: 1.4; }
+ .md-search-result__teaser {
+ display: -webkit-box;
+ max-height: 3.3rem;
+ margin: 0.5em 0;
+ color: rgba(0, 0, 0, 0.54);
+ font-size: 1.28rem;
+ line-height: 1.4;
+ text-overflow: ellipsis;
+ overflow: hidden;
+ -webkit-line-clamp: 2; }
+ .md-search-result em {
+ font-style: normal;
+ font-weight: 700;
+ text-decoration: underline; }
+
+.md-sidebar {
+ position: absolute;
+ width: 24.2rem;
+ padding: 2.4rem 0;
+ overflow: hidden; }
+ .md-sidebar[data-md-state="lock"] {
+ position: fixed;
+ top: 4.8rem; }
+ .md-sidebar--secondary {
+ display: none; }
+ .md-sidebar__scrollwrap {
+ max-height: 100%;
+ margin: 0 0.4rem;
+ overflow-y: auto;
+ -webkit-backface-visibility: hidden;
+ backface-visibility: hidden; }
+ .md-sidebar__scrollwrap::-webkit-scrollbar {
+ width: 0.4rem;
+ height: 0.4rem; }
+ .md-sidebar__scrollwrap::-webkit-scrollbar-thumb {
+ background-color: rgba(0, 0, 0, 0.26); }
+ .md-sidebar__scrollwrap::-webkit-scrollbar-thumb:hover {
+ background-color: #536dfe; }
+
+@-webkit-keyframes md-source__facts--done {
+ 0% {
+ height: 0; }
+ 100% {
+ height: 1.3rem; } }
+
+@keyframes md-source__facts--done {
+ 0% {
+ height: 0; }
+ 100% {
+ height: 1.3rem; } }
+
+@-webkit-keyframes md-source__fact--done {
+ 0% {
+ -webkit-transform: translateY(100%);
+ transform: translateY(100%);
+ opacity: 0; }
+ 50% {
+ opacity: 0; }
+ 100% {
+ -webkit-transform: translateY(0%);
+ transform: translateY(0%);
+ opacity: 1; } }
+
+@keyframes md-source__fact--done {
+ 0% {
+ -webkit-transform: translateY(100%);
+ transform: translateY(100%);
+ opacity: 0; }
+ 50% {
+ opacity: 0; }
+ 100% {
+ -webkit-transform: translateY(0%);
+ transform: translateY(0%);
+ opacity: 1; } }
+
+.md-source {
+ display: block;
+ padding-right: 1.2rem;
+ transition: opacity 0.25s;
+ font-size: 1.3rem;
+ line-height: 1.2;
+ white-space: nowrap; }
+ [dir="rtl"] .md-source {
+ padding-right: initial;
+ padding-left: 1.2rem; }
+ .md-source:hover {
+ opacity: 0.7; }
+ .md-source::after {
+ display: inline-block;
+ height: 4.8rem;
+ content: "";
+ vertical-align: middle; }
+ .md-source__icon {
+ display: inline-block;
+ width: 4.8rem;
+ height: 4.8rem;
+ content: "";
+ vertical-align: middle; }
+ .md-source__icon svg {
+ width: 2.4rem;
+ height: 2.4rem;
+ margin-top: 1.2rem;
+ margin-left: 1.2rem; }
+ [dir="rtl"] .md-source__icon svg {
+ margin-right: 1.2rem;
+ margin-left: initial; }
+ .md-source__icon + .md-source__repository {
+ margin-left: -4.4rem;
+ padding-left: 4rem; }
+ [dir="rtl"] .md-source__icon + .md-source__repository {
+ margin-right: -4.4rem;
+ margin-left: initial;
+ padding-right: 4rem;
+ padding-left: initial; }
+ .md-source__repository {
+ display: inline-block;
+ max-width: 100%;
+ margin-left: 1.2rem;
+ font-weight: 700;
+ text-overflow: ellipsis;
+ overflow: hidden;
+ vertical-align: middle; }
+ .md-source__facts {
+ margin: 0;
+ padding: 0;
+ font-size: 1.1rem;
+ font-weight: 700;
+ list-style-type: none;
+ opacity: 0.75;
+ overflow: hidden; }
+ [data-md-state="done"] .md-source__facts {
+ -webkit-animation: md-source__facts--done 0.25s ease-in;
+ animation: md-source__facts--done 0.25s ease-in; }
+ .md-source__fact {
+ float: left; }
+ [dir="rtl"] .md-source__fact {
+ float: right; }
+ [data-md-state="done"] .md-source__fact {
+ -webkit-animation: md-source__fact--done 0.4s ease-out;
+ animation: md-source__fact--done 0.4s ease-out; }
+ .md-source__fact::before {
+ margin: 0 0.2rem;
+ content: "\B7"; }
+ .md-source__fact:first-child::before {
+ display: none; }
+
+.md-source-file {
+ display: inline-block;
+ margin: 1em 0.5em 1em 0;
+ padding-right: 0.5rem;
+ border-radius: 0.2rem;
+ background-color: rgba(0, 0, 0, 0.07);
+ font-size: 1.28rem;
+ list-style-type: none;
+ cursor: pointer;
+ overflow: hidden; }
+ .md-source-file::before {
+ display: inline-block;
+ margin-right: 0.5rem;
+ padding: 0.5rem;
+ background-color: rgba(0, 0, 0, 0.26);
+ color: white;
+ font-size: 1.6rem;
+ content: "\E86F";
+ vertical-align: middle; }
+ html .md-source-file {
+ transition: background 0.4s, color 0.4s, box-shadow 0.4s cubic-bezier(0.4, 0, 0.2, 1); }
+ html .md-source-file::before {
+ transition: inherit; }
+ html body .md-typeset .md-source-file {
+ color: rgba(0, 0, 0, 0.54); }
+ .md-source-file:hover {
+ box-shadow: 0 0 8px rgba(0, 0, 0, 0.18), 0 8px 16px rgba(0, 0, 0, 0.36); }
+ .md-source-file:hover::before {
+ background-color: #536dfe; }
+
+.md-tabs {
+ width: 100%;
+ transition: background 0.25s;
+ background-color: #3f51b5;
+ color: white;
+ overflow: auto; }
+ .md-tabs__list {
+ margin: 0;
+ margin-left: 0.4rem;
+ padding: 0;
+ list-style: none;
+ white-space: nowrap; }
+ .md-tabs__item {
+ display: inline-block;
+ height: 4.8rem;
+ padding-right: 1.2rem;
+ padding-left: 1.2rem; }
+ .md-tabs__link {
+ display: block;
+ margin-top: 1.6rem;
+ transition: opacity 0.25s, -webkit-transform 0.4s cubic-bezier(0.1, 0.7, 0.1, 1);
+ transition: transform 0.4s cubic-bezier(0.1, 0.7, 0.1, 1), opacity 0.25s;
+ transition: transform 0.4s cubic-bezier(0.1, 0.7, 0.1, 1), opacity 0.25s, -webkit-transform 0.4s cubic-bezier(0.1, 0.7, 0.1, 1);
+ font-size: 1.4rem;
+ opacity: 0.7; }
+ .md-tabs__link--active, .md-tabs__link:hover {
+ color: inherit;
+ opacity: 1; }
+ .md-tabs__item:nth-child(2) .md-tabs__link {
+ transition-delay: 0.02s; }
+ .md-tabs__item:nth-child(3) .md-tabs__link {
+ transition-delay: 0.04s; }
+ .md-tabs__item:nth-child(4) .md-tabs__link {
+ transition-delay: 0.06s; }
+ .md-tabs__item:nth-child(5) .md-tabs__link {
+ transition-delay: 0.08s; }
+ .md-tabs__item:nth-child(6) .md-tabs__link {
+ transition-delay: 0.1s; }
+ .md-tabs__item:nth-child(7) .md-tabs__link {
+ transition-delay: 0.12s; }
+ .md-tabs__item:nth-child(8) .md-tabs__link {
+ transition-delay: 0.14s; }
+ .md-tabs__item:nth-child(9) .md-tabs__link {
+ transition-delay: 0.16s; }
+ .md-tabs__item:nth-child(10) .md-tabs__link {
+ transition-delay: 0.18s; }
+ .md-tabs__item:nth-child(11) .md-tabs__link {
+ transition-delay: 0.2s; }
+ .md-tabs__item:nth-child(12) .md-tabs__link {
+ transition-delay: 0.22s; }
+ .md-tabs__item:nth-child(13) .md-tabs__link {
+ transition-delay: 0.24s; }
+ .md-tabs__item:nth-child(14) .md-tabs__link {
+ transition-delay: 0.26s; }
+ .md-tabs__item:nth-child(15) .md-tabs__link {
+ transition-delay: 0.28s; }
+ .md-tabs__item:nth-child(16) .md-tabs__link {
+ transition-delay: 0.3s; }
+ .md-tabs[data-md-state="hidden"] {
+ pointer-events: none; }
+ .md-tabs[data-md-state="hidden"] .md-tabs__link {
+ -webkit-transform: translateY(50%);
+ transform: translateY(50%);
+ transition: color 0.25s, opacity 0.1s, -webkit-transform 0s 0.4s;
+ transition: color 0.25s, transform 0s 0.4s, opacity 0.1s;
+ transition: color 0.25s, transform 0s 0.4s, opacity 0.1s, -webkit-transform 0s 0.4s;
+ opacity: 0; }
+
+.md-typeset .admonition, .md-typeset details {
+ box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 1px 5px 0 rgba(0, 0, 0, 0.12), 0 3px 1px -2px rgba(0, 0, 0, 0.2);
+ position: relative;
+ margin: 1.5625em 0;
+ padding: 0 1.2rem;
+ border-left: 0.4rem solid #448aff;
+ border-radius: 0.2rem;
+ font-size: 1.28rem;
+ overflow: auto; }
+ [dir="rtl"] .md-typeset .admonition, [dir="rtl"] .md-typeset details {
+ border-right: 0.4rem solid #448aff;
+ border-left: none; }
+ html .md-typeset .admonition > :last-child, html .md-typeset details > :last-child {
+ margin-bottom: 1.2rem; }
+ .md-typeset .admonition .admonition, .md-typeset details .admonition, .md-typeset .admonition details, .md-typeset details details {
+ margin: 1em 0; }
+ .md-typeset .admonition > .admonition-title, .md-typeset details > .admonition-title, .md-typeset .admonition > summary, .md-typeset details > summary {
+ margin: 0 -1.2rem;
+ padding: 0.8rem 1.2rem 0.8rem 4rem;
+ border-bottom: 0.1rem solid rgba(68, 138, 255, 0.1);
+ background-color: rgba(68, 138, 255, 0.1);
+ font-weight: 700; }
+ [dir="rtl"] .md-typeset .admonition > .admonition-title, [dir="rtl"] .md-typeset details > .admonition-title, [dir="rtl"] .md-typeset .admonition > summary, [dir="rtl"] .md-typeset details > summary {
+ padding: 0.8rem 4rem 0.8rem 1.2rem; }
+ .md-typeset .admonition > .admonition-title:last-child, .md-typeset details > .admonition-title:last-child, .md-typeset .admonition > summary:last-child, .md-typeset details > summary:last-child {
+ margin-bottom: 0; }
+ .md-typeset .admonition > .admonition-title::before, .md-typeset details > .admonition-title::before, .md-typeset .admonition > summary::before, .md-typeset details > summary::before {
+ position: absolute;
+ left: 1.2rem;
+ color: #448aff;
+ font-size: 2rem;
+ content: "\E3C9"; }
+ [dir="rtl"] .md-typeset .admonition > .admonition-title::before, [dir="rtl"] .md-typeset details > .admonition-title::before, [dir="rtl"] .md-typeset .admonition > summary::before, [dir="rtl"] .md-typeset details > summary::before {
+ right: 1.2rem;
+ left: initial; }
+ .md-typeset .admonition.summary, .md-typeset details.summary, .md-typeset .admonition.tldr, .md-typeset details.tldr, .md-typeset .admonition.abstract, .md-typeset details.abstract {
+ border-left-color: #00b0ff; }
+ [dir="rtl"] .md-typeset .admonition.summary, [dir="rtl"] .md-typeset details.summary, [dir="rtl"] .md-typeset .admonition.tldr, [dir="rtl"] .md-typeset details.tldr, [dir="rtl"] .md-typeset .admonition.abstract, [dir="rtl"] .md-typeset details.abstract {
+ border-right-color: #00b0ff; }
+ .md-typeset .admonition.summary > .admonition-title, .md-typeset details.summary > .admonition-title, .md-typeset .admonition.tldr > .admonition-title, .md-typeset details.tldr > .admonition-title, .md-typeset .admonition.summary > summary, .md-typeset details.summary > summary, .md-typeset .admonition.tldr > summary, .md-typeset details.tldr > summary, .md-typeset .admonition.abstract > .admonition-title, .md-typeset details.abstract > .admonition-title, .md-typeset .admonition.abst [...]
+ border-bottom-color: 0.1rem solid rgba(0, 176, 255, 0.1);
+ background-color: rgba(0, 176, 255, 0.1); }
+ .md-typeset .admonition.summary > .admonition-title::before, .md-typeset details.summary > .admonition-title::before, .md-typeset .admonition.tldr > .admonition-title::before, .md-typeset details.tldr > .admonition-title::before, .md-typeset .admonition.summary > summary::before, .md-typeset details.summary > summary::before, .md-typeset .admonition.tldr > summary::before, .md-typeset details.tldr > summary::before, .md-typeset .admonition.abstract > .admonition-title::before, .md- [...]
+ color: #00b0ff;
+ content: "\E8D2"; }
+ .md-typeset .admonition.todo, .md-typeset details.todo, .md-typeset .admonition.info, .md-typeset details.info {
+ border-left-color: #00b8d4; }
+ [dir="rtl"] .md-typeset .admonition.todo, [dir="rtl"] .md-typeset details.todo, [dir="rtl"] .md-typeset .admonition.info, [dir="rtl"] .md-typeset details.info {
+ border-right-color: #00b8d4; }
+ .md-typeset .admonition.todo > .admonition-title, .md-typeset details.todo > .admonition-title, .md-typeset .admonition.todo > summary, .md-typeset details.todo > summary, .md-typeset .admonition.info > .admonition-title, .md-typeset details.info > .admonition-title, .md-typeset .admonition.info > summary, .md-typeset details.info > summary {
+ border-bottom-color: 0.1rem solid rgba(0, 184, 212, 0.1);
+ background-color: rgba(0, 184, 212, 0.1); }
+ .md-typeset .admonition.todo > .admonition-title::before, .md-typeset details.todo > .admonition-title::before, .md-typeset .admonition.todo > summary::before, .md-typeset details.todo > summary::before, .md-typeset .admonition.info > .admonition-title::before, .md-typeset details.info > .admonition-title::before, .md-typeset .admonition.info > summary::before, .md-typeset details.info > summary::before {
+ color: #00b8d4;
+ content: "\E88E"; }
+ .md-typeset .admonition.hint, .md-typeset details.hint, .md-typeset .admonition.important, .md-typeset details.important, .md-typeset .admonition.tip, .md-typeset details.tip {
+ border-left-color: #00bfa5; }
+ [dir="rtl"] .md-typeset .admonition.hint, [dir="rtl"] .md-typeset details.hint, [dir="rtl"] .md-typeset .admonition.important, [dir="rtl"] .md-typeset details.important, [dir="rtl"] .md-typeset .admonition.tip, [dir="rtl"] .md-typeset details.tip {
+ border-right-color: #00bfa5; }
+ .md-typeset .admonition.hint > .admonition-title, .md-typeset details.hint > .admonition-title, .md-typeset .admonition.important > .admonition-title, .md-typeset details.important > .admonition-title, .md-typeset .admonition.hint > summary, .md-typeset details.hint > summary, .md-typeset .admonition.important > summary, .md-typeset details.important > summary, .md-typeset .admonition.tip > .admonition-title, .md-typeset details.tip > .admonition-title, .md-typeset .admonition.tip > [...]
+ border-bottom-color: 0.1rem solid rgba(0, 191, 165, 0.1);
+ background-color: rgba(0, 191, 165, 0.1); }
+ .md-typeset .admonition.hint > .admonition-title::before, .md-typeset details.hint > .admonition-title::before, .md-typeset .admonition.important > .admonition-title::before, .md-typeset details.important > .admonition-title::before, .md-typeset .admonition.hint > summary::before, .md-typeset details.hint > summary::before, .md-typeset .admonition.important > summary::before, .md-typeset details.important > summary::before, .md-typeset .admonition.tip > .admonition-title::before, . [...]
+ color: #00bfa5;
+ content: "\E80E"; }
+ .md-typeset .admonition.check, .md-typeset details.check, .md-typeset .admonition.done, .md-typeset details.done, .md-typeset .admonition.success, .md-typeset details.success {
+ border-left-color: #00c853; }
+ [dir="rtl"] .md-typeset .admonition.check, [dir="rtl"] .md-typeset details.check, [dir="rtl"] .md-typeset .admonition.done, [dir="rtl"] .md-typeset details.done, [dir="rtl"] .md-typeset .admonition.success, [dir="rtl"] .md-typeset details.success {
+ border-right-color: #00c853; }
+ .md-typeset .admonition.check > .admonition-title, .md-typeset details.check > .admonition-title, .md-typeset .admonition.done > .admonition-title, .md-typeset details.done > .admonition-title, .md-typeset .admonition.check > summary, .md-typeset details.check > summary, .md-typeset .admonition.done > summary, .md-typeset details.done > summary, .md-typeset .admonition.success > .admonition-title, .md-typeset details.success > .admonition-title, .md-typeset .admonition.success > summ [...]
+ border-bottom-color: 0.1rem solid rgba(0, 200, 83, 0.1);
+ background-color: rgba(0, 200, 83, 0.1); }
+ .md-typeset .admonition.check > .admonition-title::before, .md-typeset details.check > .admonition-title::before, .md-typeset .admonition.done > .admonition-title::before, .md-typeset details.done > .admonition-title::before, .md-typeset .admonition.check > summary::before, .md-typeset details.check > summary::before, .md-typeset .admonition.done > summary::before, .md-typeset details.done > summary::before, .md-typeset .admonition.success > .admonition-title::before, .md-typeset d [...]
+ color: #00c853;
+ content: "\E876"; }
+ .md-typeset .admonition.help, .md-typeset details.help, .md-typeset .admonition.faq, .md-typeset details.faq, .md-typeset .admonition.question, .md-typeset details.question {
+ border-left-color: #64dd17; }
+ [dir="rtl"] .md-typeset .admonition.help, [dir="rtl"] .md-typeset details.help, [dir="rtl"] .md-typeset .admonition.faq, [dir="rtl"] .md-typeset details.faq, [dir="rtl"] .md-typeset .admonition.question, [dir="rtl"] .md-typeset details.question {
+ border-right-color: #64dd17; }
+ .md-typeset .admonition.help > .admonition-title, .md-typeset details.help > .admonition-title, .md-typeset .admonition.faq > .admonition-title, .md-typeset details.faq > .admonition-title, .md-typeset .admonition.help > summary, .md-typeset details.help > summary, .md-typeset .admonition.faq > summary, .md-typeset details.faq > summary, .md-typeset .admonition.question > .admonition-title, .md-typeset details.question > .admonition-title, .md-typeset .admonition.question > summary, [...]
+ border-bottom-color: 0.1rem solid rgba(100, 221, 23, 0.1);
+ background-color: rgba(100, 221, 23, 0.1); }
+ .md-typeset .admonition.help > .admonition-title::before, .md-typeset details.help > .admonition-title::before, .md-typeset .admonition.faq > .admonition-title::before, .md-typeset details.faq > .admonition-title::before, .md-typeset .admonition.help > summary::before, .md-typeset details.help > summary::before, .md-typeset .admonition.faq > summary::before, .md-typeset details.faq > summary::before, .md-typeset .admonition.question > .admonition-title::before, .md-typeset details. [...]
+ color: #64dd17;
+ content: "\E887"; }
+ .md-typeset .admonition.caution, .md-typeset details.caution, .md-typeset .admonition.attention, .md-typeset details.attention, .md-typeset .admonition.warning, .md-typeset details.warning {
+ border-left-color: #ff9100; }
+ [dir="rtl"] .md-typeset .admonition.caution, [dir="rtl"] .md-typeset details.caution, [dir="rtl"] .md-typeset .admonition.attention, [dir="rtl"] .md-typeset details.attention, [dir="rtl"] .md-typeset .admonition.warning, [dir="rtl"] .md-typeset details.warning {
+ border-right-color: #ff9100; }
+ .md-typeset .admonition.caution > .admonition-title, .md-typeset details.caution > .admonition-title, .md-typeset .admonition.attention > .admonition-title, .md-typeset details.attention > .admonition-title, .md-typeset .admonition.caution > summary, .md-typeset details.caution > summary, .md-typeset .admonition.attention > summary, .md-typeset details.attention > summary, .md-typeset .admonition.warning > .admonition-title, .md-typeset details.warning > .admonition-title, .md-typese [...]
+ border-bottom-color: 0.1rem solid rgba(255, 145, 0, 0.1);
+ background-color: rgba(255, 145, 0, 0.1); }
+ .md-typeset .admonition.caution > .admonition-title::before, .md-typeset details.caution > .admonition-title::before, .md-typeset .admonition.attention > .admonition-title::before, .md-typeset details.attention > .admonition-title::before, .md-typeset .admonition.caution > summary::before, .md-typeset details.caution > summary::before, .md-typeset .admonition.attention > summary::before, .md-typeset details.attention > summary::before, .md-typeset .admonition.warning > .admonition- [...]
+ color: #ff9100;
+ content: "\E002"; }
+ .md-typeset .admonition.fail, .md-typeset details.fail, .md-typeset .admonition.missing, .md-typeset details.missing, .md-typeset .admonition.failure, .md-typeset details.failure {
+ border-left-color: #ff5252; }
+ [dir="rtl"] .md-typeset .admonition.fail, [dir="rtl"] .md-typeset details.fail, [dir="rtl"] .md-typeset .admonition.missing, [dir="rtl"] .md-typeset details.missing, [dir="rtl"] .md-typeset .admonition.failure, [dir="rtl"] .md-typeset details.failure {
+ border-right-color: #ff5252; }
+ .md-typeset .admonition.fail > .admonition-title, .md-typeset details.fail > .admonition-title, .md-typeset .admonition.missing > .admonition-title, .md-typeset details.missing > .admonition-title, .md-typeset .admonition.fail > summary, .md-typeset details.fail > summary, .md-typeset .admonition.missing > summary, .md-typeset details.missing > summary, .md-typeset .admonition.failure > .admonition-title, .md-typeset details.failure > .admonition-title, .md-typeset .admonition.failur [...]
+ border-bottom-color: 0.1rem solid rgba(255, 82, 82, 0.1);
+ background-color: rgba(255, 82, 82, 0.1); }
+ .md-typeset .admonition.fail > .admonition-title::before, .md-typeset details.fail > .admonition-title::before, .md-typeset .admonition.missing > .admonition-title::before, .md-typeset details.missing > .admonition-title::before, .md-typeset .admonition.fail > summary::before, .md-typeset details.fail > summary::before, .md-typeset .admonition.missing > summary::before, .md-typeset details.missing > summary::before, .md-typeset .admonition.failure > .admonition-title::before, .md-t [...]
+ color: #ff5252;
+ content: "\E14C"; }
+ .md-typeset .admonition.error, .md-typeset details.error, .md-typeset .admonition.danger, .md-typeset details.danger {
+ border-left-color: #ff1744; }
+ [dir="rtl"] .md-typeset .admonition.error, [dir="rtl"] .md-typeset details.error, [dir="rtl"] .md-typeset .admonition.danger, [dir="rtl"] .md-typeset details.danger {
+ border-right-color: #ff1744; }
+ .md-typeset .admonition.error > .admonition-title, .md-typeset details.error > .admonition-title, .md-typeset .admonition.error > summary, .md-typeset details.error > summary, .md-typeset .admonition.danger > .admonition-title, .md-typeset details.danger > .admonition-title, .md-typeset .admonition.danger > summary, .md-typeset details.danger > summary {
+ border-bottom-color: 0.1rem solid rgba(255, 23, 68, 0.1);
+ background-color: rgba(255, 23, 68, 0.1); }
+ .md-typeset .admonition.error > .admonition-title::before, .md-typeset details.error > .admonition-title::before, .md-typeset .admonition.error > summary::before, .md-typeset details.error > summary::before, .md-typeset .admonition.danger > .admonition-title::before, .md-typeset details.danger > .admonition-title::before, .md-typeset .admonition.danger > summary::before, .md-typeset details.danger > summary::before {
+ color: #ff1744;
+ content: "\E3E7"; }
+ .md-typeset .admonition.bug, .md-typeset details.bug {
+ border-left-color: #f50057; }
+ [dir="rtl"] .md-typeset .admonition.bug, [dir="rtl"] .md-typeset details.bug {
+ border-right-color: #f50057; }
+ .md-typeset .admonition.bug > .admonition-title, .md-typeset details.bug > .admonition-title, .md-typeset .admonition.bug > summary, .md-typeset details.bug > summary {
+ border-bottom-color: 0.1rem solid rgba(245, 0, 87, 0.1);
+ background-color: rgba(245, 0, 87, 0.1); }
+ .md-typeset .admonition.bug > .admonition-title::before, .md-typeset details.bug > .admonition-title::before, .md-typeset .admonition.bug > summary::before, .md-typeset details.bug > summary::before {
+ color: #f50057;
+ content: "\E868"; }
+ .md-typeset .admonition.example, .md-typeset details.example {
+ border-left-color: #651fff; }
+ [dir="rtl"] .md-typeset .admonition.example, [dir="rtl"] .md-typeset details.example {
+ border-right-color: #651fff; }
+ .md-typeset .admonition.example > .admonition-title, .md-typeset details.example > .admonition-title, .md-typeset .admonition.example > summary, .md-typeset details.example > summary {
+ border-bottom-color: 0.1rem solid rgba(101, 31, 255, 0.1);
+ background-color: rgba(101, 31, 255, 0.1); }
+ .md-typeset .admonition.example > .admonition-title::before, .md-typeset details.example > .admonition-title::before, .md-typeset .admonition.example > summary::before, .md-typeset details.example > summary::before {
+ color: #651fff;
+ content: "\E242"; }
+ .md-typeset .admonition.cite, .md-typeset details.cite, .md-typeset .admonition.quote, .md-typeset details.quote {
+ border-left-color: #9e9e9e; }
+ [dir="rtl"] .md-typeset .admonition.cite, [dir="rtl"] .md-typeset details.cite, [dir="rtl"] .md-typeset .admonition.quote, [dir="rtl"] .md-typeset details.quote {
+ border-right-color: #9e9e9e; }
+ .md-typeset .admonition.cite > .admonition-title, .md-typeset details.cite > .admonition-title, .md-typeset .admonition.cite > summary, .md-typeset details.cite > summary, .md-typeset .admonition.quote > .admonition-title, .md-typeset details.quote > .admonition-title, .md-typeset .admonition.quote > summary, .md-typeset details.quote > summary {
+ border-bottom-color: 0.1rem solid rgba(158, 158, 158, 0.1);
+ background-color: rgba(158, 158, 158, 0.1); }
+ .md-typeset .admonition.cite > .admonition-title::before, .md-typeset details.cite > .admonition-title::before, .md-typeset .admonition.cite > summary::before, .md-typeset details.cite > summary::before, .md-typeset .admonition.quote > .admonition-title::before, .md-typeset details.quote > .admonition-title::before, .md-typeset .admonition.quote > summary::before, .md-typeset details.quote > summary::before {
+ color: #9e9e9e;
+ content: "\E244"; }
+
+.codehilite .o, .md-typeset .highlight .o {
+ color: inherit; }
+
+.codehilite .ow, .md-typeset .highlight .ow {
+ color: inherit; }
+
+.codehilite .ge, .md-typeset .highlight .ge {
+ color: #000000; }
+
+.codehilite .gr, .md-typeset .highlight .gr {
+ color: #AA0000; }
+
+.codehilite .gh, .md-typeset .highlight .gh {
+ color: #999999; }
+
+.codehilite .go, .md-typeset .highlight .go {
+ color: #888888; }
+
+.codehilite .gp, .md-typeset .highlight .gp {
+ color: #555555; }
+
+.codehilite .gs, .md-typeset .highlight .gs {
+ color: inherit; }
+
+.codehilite .gu, .md-typeset .highlight .gu {
+ color: #AAAAAA; }
+
+.codehilite .gt, .md-typeset .highlight .gt {
+ color: #AA0000; }
+
+.codehilite .gd, .md-typeset .highlight .gd {
+ background-color: #FFDDDD; }
+
+.codehilite .gi, .md-typeset .highlight .gi {
+ background-color: #DDFFDD; }
+
+.codehilite .k, .md-typeset .highlight .k {
+ color: #3B78E7; }
+
+.codehilite .kc, .md-typeset .highlight .kc {
+ color: #A71D5D; }
+
+.codehilite .kd, .md-typeset .highlight .kd {
+ color: #3B78E7; }
+
+.codehilite .kn, .md-typeset .highlight .kn {
+ color: #3B78E7; }
+
+.codehilite .kp, .md-typeset .highlight .kp {
+ color: #A71D5D; }
+
+.codehilite .kr, .md-typeset .highlight .kr {
+ color: #3E61A2; }
+
+.codehilite .kt, .md-typeset .highlight .kt {
+ color: #3E61A2; }
+
+.codehilite .c, .md-typeset .highlight .c {
+ color: #999999; }
+
+.codehilite .cm, .md-typeset .highlight .cm {
+ color: #999999; }
+
+.codehilite .cp, .md-typeset .highlight .cp {
+ color: #666666; }
+
+.codehilite .c1, .md-typeset .highlight .c1 {
+ color: #999999; }
+
+.codehilite .ch, .md-typeset .highlight .ch {
+ color: #999999; }
+
+.codehilite .cs, .md-typeset .highlight .cs {
+ color: #999999; }
+
+.codehilite .na, .md-typeset .highlight .na {
+ color: #C2185B; }
+
+.codehilite .nb, .md-typeset .highlight .nb {
+ color: #C2185B; }
+
+.codehilite .bp, .md-typeset .highlight .bp {
+ color: #3E61A2; }
+
+.codehilite .nc, .md-typeset .highlight .nc {
+ color: #C2185B; }
+
+.codehilite .no, .md-typeset .highlight .no {
+ color: #3E61A2; }
+
+.codehilite .nd, .md-typeset .highlight .nd {
+ color: #666666; }
+
+.codehilite .ni, .md-typeset .highlight .ni {
+ color: #666666; }
+
+.codehilite .ne, .md-typeset .highlight .ne {
+ color: #C2185B; }
+
+.codehilite .nf, .md-typeset .highlight .nf {
+ color: #C2185B; }
+
+.codehilite .nl, .md-typeset .highlight .nl {
+ color: #3B5179; }
+
+.codehilite .nn, .md-typeset .highlight .nn {
+ color: #EC407A; }
+
+.codehilite .nt, .md-typeset .highlight .nt {
+ color: #3B78E7; }
+
+.codehilite .nv, .md-typeset .highlight .nv {
+ color: #3E61A2; }
+
+.codehilite .vc, .md-typeset .highlight .vc {
+ color: #3E61A2; }
+
+.codehilite .vg, .md-typeset .highlight .vg {
+ color: #3E61A2; }
+
+.codehilite .vi, .md-typeset .highlight .vi {
+ color: #3E61A2; }
+
+.codehilite .nx, .md-typeset .highlight .nx {
+ color: #EC407A; }
+
+.codehilite .m, .md-typeset .highlight .m {
+ color: #E74C3C; }
+
+.codehilite .mf, .md-typeset .highlight .mf {
+ color: #E74C3C; }
+
+.codehilite .mh, .md-typeset .highlight .mh {
+ color: #E74C3C; }
+
+.codehilite .mi, .md-typeset .highlight .mi {
+ color: #E74C3C; }
+
+.codehilite .il, .md-typeset .highlight .il {
+ color: #E74C3C; }
+
+.codehilite .mo, .md-typeset .highlight .mo {
+ color: #E74C3C; }
+
+.codehilite .s, .md-typeset .highlight .s {
+ color: #0D904F; }
+
+.codehilite .sb, .md-typeset .highlight .sb {
+ color: #0D904F; }
+
+.codehilite .sc, .md-typeset .highlight .sc {
+ color: #0D904F; }
+
+.codehilite .sd, .md-typeset .highlight .sd {
+ color: #999999; }
+
+.codehilite .s2, .md-typeset .highlight .s2 {
+ color: #0D904F; }
+
+.codehilite .se, .md-typeset .highlight .se {
+ color: #183691; }
+
+.codehilite .sh, .md-typeset .highlight .sh {
+ color: #183691; }
+
+.codehilite .si, .md-typeset .highlight .si {
+ color: #183691; }
+
+.codehilite .sx, .md-typeset .highlight .sx {
+ color: #183691; }
+
+.codehilite .sr, .md-typeset .highlight .sr {
+ color: #009926; }
+
+.codehilite .s1, .md-typeset .highlight .s1 {
+ color: #0D904F; }
+
+.codehilite .ss, .md-typeset .highlight .ss {
+ color: #0D904F; }
+
+.codehilite .err, .md-typeset .highlight .err {
+ color: #A61717; }
+
+.codehilite .w, .md-typeset .highlight .w {
+ color: transparent; }
+
+.codehilite .hll, .md-typeset .highlight .hll {
+ display: block;
+ margin: 0 -1.2rem;
+ padding: 0 1.2rem;
+ background-color: rgba(255, 235, 59, 0.5); }
+
+.md-typeset .codehilite, .md-typeset .highlight {
+ position: relative;
+ margin: 1em 0;
+ padding: 0;
+ border-radius: 0.2rem;
+ background-color: rgba(236, 236, 236, 0.5);
+ color: #37474F;
+ line-height: 1.4;
+ -webkit-overflow-scrolling: touch; }
+ .md-typeset .codehilite pre, .md-typeset .highlight pre,
+ .md-typeset .codehilite code, .md-typeset .highlight code {
+ display: block;
+ margin: 0;
+ padding: 1.05rem 1.2rem;
+ background-color: transparent;
+ overflow: auto;
+ vertical-align: top; }
+ .md-typeset .codehilite pre::-webkit-scrollbar, .md-typeset .highlight pre::-webkit-scrollbar,
+ .md-typeset .codehilite code::-webkit-scrollbar, .md-typeset .highlight code::-webkit-scrollbar {
+ width: 0.4rem;
+ height: 0.4rem; }
+ .md-typeset .codehilite pre::-webkit-scrollbar-thumb, .md-typeset .highlight pre::-webkit-scrollbar-thumb,
+ .md-typeset .codehilite code::-webkit-scrollbar-thumb, .md-typeset .highlight code::-webkit-scrollbar-thumb {
+ background-color: rgba(0, 0, 0, 0.26); }
+ .md-typeset .codehilite pre::-webkit-scrollbar-thumb:hover, .md-typeset .highlight pre::-webkit-scrollbar-thumb:hover,
+ .md-typeset .codehilite code::-webkit-scrollbar-thumb:hover, .md-typeset .highlight code::-webkit-scrollbar-thumb:hover {
+ background-color: #536dfe; }
+
+.md-typeset pre.codehilite, .md-typeset pre.highlight {
+ overflow: visible; }
+ .md-typeset pre.codehilite code, .md-typeset pre.highlight code {
+ display: block;
+ padding: 1.05rem 1.2rem;
+ overflow: auto; }
+
+.md-typeset .codehilitetable, .md-typeset .highlighttable {
+ display: block;
+ margin: 1em 0;
+ border-radius: 0.2em;
+ font-size: 1.6rem;
+ overflow: hidden; }
+ .md-typeset .codehilitetable tbody, .md-typeset .highlighttable tbody,
+ .md-typeset .codehilitetable td, .md-typeset .highlighttable td {
+ display: block;
+ padding: 0; }
+ .md-typeset .codehilitetable tr, .md-typeset .highlighttable tr {
+ display: flex; }
+ .md-typeset .codehilitetable .codehilite, .md-typeset .highlighttable .codehilite, .md-typeset .codehilitetable .highlight, .md-typeset .highlighttable .highlight,
+ .md-typeset .codehilitetable .linenodiv, .md-typeset .highlighttable .linenodiv {
+ margin: 0;
+ border-radius: 0; }
+ .md-typeset .codehilitetable .linenodiv, .md-typeset .highlighttable .linenodiv {
+ padding: 1.05rem 1.2rem; }
+ .md-typeset .codehilitetable .linenos, .md-typeset .highlighttable .linenos {
+ background-color: rgba(0, 0, 0, 0.07);
+ color: rgba(0, 0, 0, 0.26);
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none; }
+ .md-typeset .codehilitetable .linenos pre, .md-typeset .highlighttable .linenos pre {
+ margin: 0;
+ padding: 0;
+ background-color: transparent;
+ color: inherit;
+ text-align: right; }
+ .md-typeset .codehilitetable .code, .md-typeset .highlighttable .code {
+ flex: 1;
+ overflow: hidden; }
+
+.md-typeset > .codehilitetable, .md-typeset > .highlighttable {
+ box-shadow: none; }
+
+.md-typeset [id^="fnref:"] {
+ display: inline-block; }
+ .md-typeset [id^="fnref:"]:target {
+ margin-top: -7.6rem;
+ padding-top: 7.6rem;
+ pointer-events: none; }
+
+.md-typeset [id^="fn:"]::before {
+ display: none;
+ height: 0;
+ content: ""; }
+
+.md-typeset [id^="fn:"]:target::before {
+ display: block;
+ margin-top: -7rem;
+ padding-top: 7rem;
+ pointer-events: none; }
+
+.md-typeset .footnote {
+ color: rgba(0, 0, 0, 0.54);
+ font-size: 1.28rem; }
+ .md-typeset .footnote ol {
+ margin-left: 0; }
+ .md-typeset .footnote li {
+ transition: color 0.25s; }
+ .md-typeset .footnote li:target {
+ color: rgba(0, 0, 0, 0.87); }
+ .md-typeset .footnote li :first-child {
+ margin-top: 0; }
+ .md-typeset .footnote li:hover .footnote-backref,
+ .md-typeset .footnote li:target .footnote-backref {
+ -webkit-transform: translateX(0);
+ transform: translateX(0);
+ opacity: 1; }
+ .md-typeset .footnote li:hover .footnote-backref:hover,
+ .md-typeset .footnote li:target .footnote-backref {
+ color: #536dfe; }
+
+.md-typeset .footnote-ref {
+ display: inline-block;
+ pointer-events: initial; }
+ .md-typeset .footnote-ref::before {
+ display: inline;
+ margin: 0 0.2em;
+ border-left: 0.1rem solid rgba(0, 0, 0, 0.26);
+ font-size: 1.25em;
+ content: "";
+ vertical-align: -0.5rem; }
+
+.md-typeset .footnote-backref {
+ display: inline-block;
+ -webkit-transform: translateX(0.5rem);
+ transform: translateX(0.5rem);
+ transition: color 0.25s, opacity 0.125s 0.125s, -webkit-transform 0.25s 0.125s;
+ transition: transform 0.25s 0.125s, color 0.25s, opacity 0.125s 0.125s;
+ transition: transform 0.25s 0.125s, color 0.25s, opacity 0.125s 0.125s, -webkit-transform 0.25s 0.125s;
+ color: rgba(0, 0, 0, 0.26);
+ font-size: 0;
+ opacity: 0;
+ vertical-align: text-bottom; }
+ [dir="rtl"] .md-typeset .footnote-backref {
+ -webkit-transform: translateX(-0.5rem);
+ transform: translateX(-0.5rem); }
+ .md-typeset .footnote-backref::before {
+ display: inline-block;
+ font-size: 1.6rem;
+ content: "\E31B"; }
+ [dir="rtl"] .md-typeset .footnote-backref::before {
+ -webkit-transform: scaleX(-1);
+ transform: scaleX(-1); }
+
+.md-typeset .headerlink {
+ display: inline-block;
+ margin-left: 1rem;
+ -webkit-transform: translate(0, 0.5rem);
+ transform: translate(0, 0.5rem);
+ transition: color 0.25s, opacity 0.125s 0.25s, -webkit-transform 0.25s 0.25s;
+ transition: transform 0.25s 0.25s, color 0.25s, opacity 0.125s 0.25s;
+ transition: transform 0.25s 0.25s, color 0.25s, opacity 0.125s 0.25s, -webkit-transform 0.25s 0.25s;
+ opacity: 0; }
+ [dir="rtl"] .md-typeset .headerlink {
+ margin-right: 1rem;
+ margin-left: initial; }
+ html body .md-typeset .headerlink {
+ color: rgba(0, 0, 0, 0.26); }
+
+.md-typeset h1[id]::before {
+ display: block;
+ margin-top: -0.9rem;
+ padding-top: 0.9rem;
+ content: ""; }
+
+.md-typeset h1[id]:target::before {
+ margin-top: -6.9rem;
+ padding-top: 6.9rem; }
+
+.md-typeset h1[id]:hover .headerlink,
+.md-typeset h1[id]:target .headerlink,
+.md-typeset h1[id] .headerlink:focus {
+ -webkit-transform: translate(0, 0);
+ transform: translate(0, 0);
+ opacity: 1; }
+
+.md-typeset h1[id]:hover .headerlink:hover,
+.md-typeset h1[id]:target .headerlink,
+.md-typeset h1[id] .headerlink:focus {
+ color: #536dfe; }
+
+.md-typeset h2[id]::before {
+ display: block;
+ margin-top: -0.8rem;
+ padding-top: 0.8rem;
+ content: ""; }
+
+.md-typeset h2[id]:target::before {
+ margin-top: -6.8rem;
+ padding-top: 6.8rem; }
+
+.md-typeset h2[id]:hover .headerlink,
+.md-typeset h2[id]:target .headerlink,
+.md-typeset h2[id] .headerlink:focus {
+ -webkit-transform: translate(0, 0);
+ transform: translate(0, 0);
+ opacity: 1; }
+
+.md-typeset h2[id]:hover .headerlink:hover,
+.md-typeset h2[id]:target .headerlink,
+.md-typeset h2[id] .headerlink:focus {
+ color: #536dfe; }
+
+.md-typeset h3[id]::before {
+ display: block;
+ margin-top: -0.9rem;
+ padding-top: 0.9rem;
+ content: ""; }
+
+.md-typeset h3[id]:target::before {
+ margin-top: -6.9rem;
+ padding-top: 6.9rem; }
+
+.md-typeset h3[id]:hover .headerlink,
+.md-typeset h3[id]:target .headerlink,
+.md-typeset h3[id] .headerlink:focus {
+ -webkit-transform: translate(0, 0);
+ transform: translate(0, 0);
+ opacity: 1; }
+
+.md-typeset h3[id]:hover .headerlink:hover,
+.md-typeset h3[id]:target .headerlink,
+.md-typeset h3[id] .headerlink:focus {
+ color: #536dfe; }
+
+.md-typeset h4[id]::before {
+ display: block;
+ margin-top: -0.9rem;
+ padding-top: 0.9rem;
+ content: ""; }
+
+.md-typeset h4[id]:target::before {
+ margin-top: -6.9rem;
+ padding-top: 6.9rem; }
+
+.md-typeset h4[id]:hover .headerlink,
+.md-typeset h4[id]:target .headerlink,
+.md-typeset h4[id] .headerlink:focus {
+ -webkit-transform: translate(0, 0);
+ transform: translate(0, 0);
+ opacity: 1; }
+
+.md-typeset h4[id]:hover .headerlink:hover,
+.md-typeset h4[id]:target .headerlink,
+.md-typeset h4[id] .headerlink:focus {
+ color: #536dfe; }
+
+.md-typeset h5[id]::before {
+ display: block;
+ margin-top: -1.1rem;
+ padding-top: 1.1rem;
+ content: ""; }
+
+.md-typeset h5[id]:target::before {
+ margin-top: -7.1rem;
+ padding-top: 7.1rem; }
+
+.md-typeset h5[id]:hover .headerlink,
+.md-typeset h5[id]:target .headerlink,
+.md-typeset h5[id] .headerlink:focus {
+ -webkit-transform: translate(0, 0);
+ transform: translate(0, 0);
+ opacity: 1; }
+
+.md-typeset h5[id]:hover .headerlink:hover,
+.md-typeset h5[id]:target .headerlink,
+.md-typeset h5[id] .headerlink:focus {
+ color: #536dfe; }
+
+.md-typeset h6[id]::before {
+ display: block;
+ margin-top: -1.1rem;
+ padding-top: 1.1rem;
+ content: ""; }
+
+.md-typeset h6[id]:target::before {
+ margin-top: -7.1rem;
+ padding-top: 7.1rem; }
+
+.md-typeset h6[id]:hover .headerlink,
+.md-typeset h6[id]:target .headerlink,
+.md-typeset h6[id] .headerlink:focus {
+ -webkit-transform: translate(0, 0);
+ transform: translate(0, 0);
+ opacity: 1; }
+
+.md-typeset h6[id]:hover .headerlink:hover,
+.md-typeset h6[id]:target .headerlink,
+.md-typeset h6[id] .headerlink:focus {
+ color: #536dfe; }
+
+.md-typeset .MJXc-display {
+ margin: 0.75em 0;
+ padding: 0.75em 0;
+ overflow: auto;
+ -webkit-overflow-scrolling: touch; }
+
+.md-typeset .MathJax_CHTML {
+ outline: 0; }
+
+.md-typeset del.critic,
+.md-typeset ins.critic,
+.md-typeset .critic.comment {
+ margin: 0 0.25em;
+ padding: 0.0625em 0;
+ border-radius: 0.2rem;
+ -webkit-box-decoration-break: clone;
+ box-decoration-break: clone; }
+
+.md-typeset del.critic {
+ background-color: #FFDDDD;
+ box-shadow: 0.25em 0 0 #FFDDDD, -0.25em 0 0 #FFDDDD; }
+
+.md-typeset ins.critic {
+ background-color: #DDFFDD;
+ box-shadow: 0.25em 0 0 #DDFFDD, -0.25em 0 0 #DDFFDD; }
+
+.md-typeset .critic.comment {
+ background-color: rgba(236, 236, 236, 0.5);
+ color: #37474F;
+ box-shadow: 0.25em 0 0 rgba(236, 236, 236, 0.5), -0.25em 0 0 rgba(236, 236, 236, 0.5); }
+ .md-typeset .critic.comment::before {
+ padding-right: 0.125em;
+ color: rgba(0, 0, 0, 0.26);
+ content: "\E0B7";
+ vertical-align: -0.125em; }
+
+.md-typeset .critic.block {
+ display: block;
+ margin: 1em 0;
+ padding-right: 1.6rem;
+ padding-left: 1.6rem;
+ box-shadow: none; }
+ .md-typeset .critic.block :first-child {
+ margin-top: 0.5em; }
+ .md-typeset .critic.block :last-child {
+ margin-bottom: 0.5em; }
+
+.md-typeset details {
+ display: block;
+ padding-top: 0; }
+ .md-typeset details[open] > summary::after {
+ -webkit-transform: rotate(180deg);
+ transform: rotate(180deg); }
+ .md-typeset details:not([open]) {
+ padding-bottom: 0; }
+ .md-typeset details:not([open]) > summary {
+ border-bottom: none; }
+ .md-typeset details summary {
+ padding-right: 4rem; }
+ [dir="rtl"] .md-typeset details summary {
+ padding-left: 4rem; }
+ .no-details .md-typeset details:not([open]) > * {
+ display: none; }
+ .no-details .md-typeset details:not([open]) summary {
+ display: block; }
+
+.md-typeset summary {
+ display: block;
+ outline: none;
+ cursor: pointer; }
+ .md-typeset summary::-webkit-details-marker {
+ display: none; }
+ .md-typeset summary::after {
+ position: absolute;
+ top: 0.8rem;
+ right: 1.2rem;
+ color: rgba(0, 0, 0, 0.26);
+ font-size: 2rem;
+ content: "\E313"; }
+ [dir="rtl"] .md-typeset summary::after {
+ right: initial;
+ left: 1.2rem; }
+
+.md-typeset .emojione {
+ width: 2rem;
+ vertical-align: text-top; }
+
+.md-typeset code.codehilite, .md-typeset code.highlight {
+ margin: 0 0.29412em;
+ padding: 0.07353em 0; }
+
+.md-typeset .superfences-content {
+ display: none;
+ order: 99;
+ width: 100%;
+ background-color: white; }
+ .md-typeset .superfences-content > * {
+ margin: 0;
+ border-radius: 0; }
+
+.md-typeset .superfences-tabs {
+ display: flex;
+ position: relative;
+ flex-wrap: wrap;
+ margin: 1em 0;
+ border: 0.1rem solid rgba(0, 0, 0, 0.07);
+ border-radius: 0.2em; }
+ .md-typeset .superfences-tabs > input {
+ display: none; }
+ .md-typeset .superfences-tabs > input:checked + label {
+ font-weight: 700; }
+ .md-typeset .superfences-tabs > input:checked + label + .superfences-content {
+ display: block; }
+ .md-typeset .superfences-tabs > label {
+ width: auto;
+ padding: 1.2rem 1.2rem;
+ transition: color 0.125s;
+ font-size: 1.28rem;
+ cursor: pointer; }
+ html .md-typeset .superfences-tabs > label:hover {
+ color: #536dfe; }
+
+.md-typeset .task-list-item {
+ position: relative;
+ list-style-type: none; }
+ .md-typeset .task-list-item [type="checkbox"] {
+ position: absolute;
+ top: 0.45em;
+ left: -2em; }
+ [dir="rtl"] .md-typeset .task-list-item [type="checkbox"] {
+ right: -2em;
+ left: initial; }
+
+.md-typeset .task-list-control .task-list-indicator::before {
+ position: absolute;
+ top: 0.15em;
+ left: -1.25em;
+ color: rgba(0, 0, 0, 0.26);
+ font-size: 1.25em;
+ content: "\E835";
+ vertical-align: -0.25em; }
+ [dir="rtl"] .md-typeset .task-list-control .task-list-indicator::before {
+ right: -1.25em;
+ left: initial; }
+
+.md-typeset .task-list-control [type="checkbox"]:checked + .task-list-indicator::before {
+ content: "\E834"; }
+
+.md-typeset .task-list-control [type="checkbox"] {
+ opacity: 0;
+ z-index: -1; }
+
+@media print {
+ .md-typeset a::after {
+ color: rgba(0, 0, 0, 0.54);
+ content: " [" attr(href) "]"; }
+ .md-typeset code,
+ .md-typeset pre {
+ white-space: pre-wrap; }
+ .md-typeset code {
+ box-shadow: none;
+ -webkit-box-decoration-break: initial;
+ box-decoration-break: initial; }
+ .md-clipboard {
+ display: none; }
+ .md-content__icon {
+ display: none; }
+ .md-header {
+ display: none; }
+ .md-footer {
+ display: none; }
+ .md-sidebar {
+ display: none; }
+ .md-tabs {
+ display: none; }
+ .md-typeset .headerlink {
+ display: none; } }
+
+@media only screen and (max-width: 44.9375em) {
+ .md-typeset pre {
+ margin: 1em -1.6rem;
+ border-radius: 0; }
+ .md-typeset pre > code {
+ padding: 1.05rem 1.6rem; }
+ .md-footer-nav__link--prev .md-footer-nav__title {
+ display: none; }
+ .md-search-result__teaser {
+ max-height: 5rem;
+ -webkit-line-clamp: 3; }
+ .codehilite .hll, .md-typeset .highlight .hll {
+ margin: 0 -1.6rem;
+ padding: 0 1.6rem; }
+ .md-typeset > .codehilite, .md-typeset > .highlight {
+ margin: 1em -1.6rem;
+ border-radius: 0; }
+ .md-typeset > .codehilite pre, .md-typeset > .highlight pre,
+ .md-typeset > .codehilite code,
+ .md-typeset > .highlight code {
+ padding: 1.05rem 1.6rem; }
+ .md-typeset > .codehilitetable, .md-typeset > .highlighttable {
+ margin: 1em -1.6rem;
+ border-radius: 0; }
+ .md-typeset > .codehilitetable .codehilite > pre, .md-typeset > .highlighttable .codehilite > pre, .md-typeset > .codehilitetable .highlight > pre, .md-typeset > .highlighttable .highlight > pre,
+ .md-typeset > .codehilitetable .codehilite > code,
+ .md-typeset > .highlighttable .codehilite > code, .md-typeset > .codehilitetable .highlight > code, .md-typeset > .highlighttable .highlight > code,
+ .md-typeset > .codehilitetable .linenodiv,
+ .md-typeset > .highlighttable .linenodiv {
+ padding: 1rem 1.6rem; }
+ .md-typeset > p > .MJXc-display {
+ margin: 0.75em -1.6rem;
+ padding: 0.25em 1.6rem; }
+ .md-typeset > .superfences-tabs {
+ margin: 1em -1.6rem;
+ border: 0;
+ border-top: 0.1rem solid rgba(0, 0, 0, 0.07);
+ border-radius: 0; }
+ .md-typeset > .superfences-tabs pre,
+ .md-typeset > .superfences-tabs code {
+ padding: 1.05rem 1.6rem; } }
+
+@media only screen and (min-width: 100em) {
+ html {
+ font-size: 68.75%; } }
+
+@media only screen and (min-width: 125em) {
+ html {
+ font-size: 75%; } }
+
+@media only screen and (max-width: 59.9375em) {
+ body[data-md-state="lock"] {
+ overflow: hidden; }
+ .ios body[data-md-state="lock"] .md-container {
+ display: none; }
+ html .md-nav__link[for="__toc"] {
+ display: block;
+ padding-right: 4.8rem; }
+ html .md-nav__link[for="__toc"]::after {
+ color: inherit;
+ content: "\E8DE"; }
+ html .md-nav__link[for="__toc"] + .md-nav__link {
+ display: none; }
+ html .md-nav__link[for="__toc"] ~ .md-nav {
+ display: flex; }
+ html [dir="rtl"] .md-nav__link {
+ padding-right: 1.6rem;
+ padding-left: 4.8rem; }
+ .md-nav__source {
+ display: block;
+ padding: 0 0.4rem;
+ background-color: rgba(50, 64, 144, 0.9675);
+ color: white; }
+ .md-search__overlay {
+ position: absolute;
+ top: 0.4rem;
+ left: 0.4rem;
+ width: 3.6rem;
+ height: 3.6rem;
+ -webkit-transform-origin: center;
+ transform-origin: center;
+ transition: opacity 0.2s 0.2s, -webkit-transform 0.3s 0.1s;
+ transition: transform 0.3s 0.1s, opacity 0.2s 0.2s;
+ transition: transform 0.3s 0.1s, opacity 0.2s 0.2s, -webkit-transform 0.3s 0.1s;
+ border-radius: 2rem;
+ background-color: white;
+ overflow: hidden;
+ pointer-events: none; }
+ [dir="rtl"] .md-search__overlay {
+ right: 0.4rem;
+ left: initial; }
+ [data-md-toggle="search"]:checked ~ .md-header .md-search__overlay {
+ transition: opacity 0.1s, -webkit-transform 0.4s;
+ transition: transform 0.4s, opacity 0.1s;
+ transition: transform 0.4s, opacity 0.1s, -webkit-transform 0.4s;
+ opacity: 1; }
+ .md-search__inner {
+ position: fixed;
+ top: 0;
+ left: 100%;
+ width: 100%;
+ height: 100%;
+ -webkit-transform: translateX(5%);
+ transform: translateX(5%);
+ transition: right 0s 0.3s, left 0s 0.3s, opacity 0.15s 0.15s, -webkit-transform 0.15s 0.15s cubic-bezier(0.4, 0, 0.2, 1);
+ transition: right 0s 0.3s, left 0s 0.3s, transform 0.15s 0.15s cubic-bezier(0.4, 0, 0.2, 1), opacity 0.15s 0.15s;
+ transition: right 0s 0.3s, left 0s 0.3s, transform 0.15s 0.15s cubic-bezier(0.4, 0, 0.2, 1), opacity 0.15s 0.15s, -webkit-transform 0.15s 0.15s cubic-bezier(0.4, 0, 0.2, 1);
+ opacity: 0;
+ z-index: 2; }
+ [data-md-toggle="search"]:checked ~ .md-header .md-search__inner {
+ left: 0;
+ -webkit-transform: translateX(0);
+ transform: translateX(0);
+ transition: right 0s 0s, left 0s 0s, opacity 0.15s 0.15s, -webkit-transform 0.15s 0.15s cubic-bezier(0.1, 0.7, 0.1, 1);
+ transition: right 0s 0s, left 0s 0s, transform 0.15s 0.15s cubic-bezier(0.1, 0.7, 0.1, 1), opacity 0.15s 0.15s;
+ transition: right 0s 0s, left 0s 0s, transform 0.15s 0.15s cubic-bezier(0.1, 0.7, 0.1, 1), opacity 0.15s 0.15s, -webkit-transform 0.15s 0.15s cubic-bezier(0.1, 0.7, 0.1, 1);
+ opacity: 1; }
+ [dir="rtl"] [data-md-toggle="search"]:checked ~ .md-header .md-search__inner {
+ right: 0;
+ left: initial; }
+ html [dir="rtl"] .md-search__inner {
+ right: 100%;
+ left: initial;
+ -webkit-transform: translateX(-5%);
+ transform: translateX(-5%); }
+ .md-search__input {
+ width: 100%;
+ height: 4.8rem;
+ font-size: 1.8rem; }
+ .md-search__icon[for="__search"] {
+ top: 1.2rem;
+ left: 1.6rem; }
+ .md-search__icon[for="__search"][for="__search"]::before {
+ content: "\E5C4"; }
+ [dir="rtl"] .md-search__icon[for="__search"][for="__search"]::before {
+ content: "\E5C8"; }
+ .md-search__icon[type="reset"] {
+ top: 1.2rem;
+ right: 1.6rem; }
+ .md-search__output {
+ top: 4.8rem;
+ bottom: 0; }
+ .md-search-result__article--document::before {
+ display: none; } }
+
+@media only screen and (max-width: 76.1875em) {
+ [data-md-toggle="drawer"]:checked ~ .md-overlay {
+ width: 100%;
+ height: 100%;
+ transition: width 0s, height 0s, opacity 0.25s;
+ opacity: 1; }
+ .md-header-nav__button.md-icon--home, .md-header-nav__button.md-logo {
+ display: none; }
+ .md-hero__inner {
+ margin-top: 4.8rem;
+ margin-bottom: 2.4rem; }
+ .md-nav {
+ background-color: white; }
+ .md-nav--primary,
+ .md-nav--primary .md-nav {
+ display: flex;
+ position: absolute;
+ top: 0;
+ right: 0;
+ left: 0;
+ flex-direction: column;
+ height: 100%;
+ z-index: 1; }
+ .md-nav--primary .md-nav__title,
+ .md-nav--primary .md-nav__item {
+ font-size: 1.6rem;
+ line-height: 1.5; }
+ html .md-nav--primary .md-nav__title {
+ position: relative;
+ height: 11.2rem;
+ padding: 6rem 1.6rem 0.4rem;
+ background-color: rgba(0, 0, 0, 0.07);
+ color: rgba(0, 0, 0, 0.54);
+ font-weight: 400;
+ line-height: 4.8rem;
+ white-space: nowrap;
+ cursor: pointer; }
+ html .md-nav--primary .md-nav__title::before {
+ display: block;
+ position: absolute;
+ top: 0.4rem;
+ left: 0.4rem;
+ width: 4rem;
+ height: 4rem;
+ color: rgba(0, 0, 0, 0.54); }
+ html .md-nav--primary .md-nav__title ~ .md-nav__list {
+ background-color: white;
+ box-shadow: 0 0.1rem 0 rgba(0, 0, 0, 0.07) inset; }
+ html .md-nav--primary .md-nav__title ~ .md-nav__list > .md-nav__item:first-child {
+ border-top: 0; }
+ html .md-nav--primary .md-nav__title--site {
+ position: relative;
+ background-color: #3f51b5;
+ color: white; }
+ html .md-nav--primary .md-nav__title--site .md-nav__button {
+ display: block;
+ position: absolute;
+ top: 0.4rem;
+ left: 0.4rem;
+ width: 6.4rem;
+ height: 6.4rem;
+ font-size: 4.8rem; }
+ html .md-nav--primary .md-nav__title--site::before {
+ display: none; }
+ html [dir="rtl"] .md-nav--primary .md-nav__title::before {
+ right: 0.4rem;
+ left: initial; }
+ html [dir="rtl"] .md-nav--primary .md-nav__title--site .md-nav__button {
+ right: 0.4rem;
+ left: initial; }
+ .md-nav--primary .md-nav__list {
+ flex: 1;
+ overflow-y: auto; }
+ .md-nav--primary .md-nav__item {
+ padding: 0;
+ border-top: 0.1rem solid rgba(0, 0, 0, 0.07); }
+ [dir="rtl"] .md-nav--primary .md-nav__item {
+ padding: 0; }
+ .md-nav--primary .md-nav__item--nested > .md-nav__link {
+ padding-right: 4.8rem; }
+ [dir="rtl"] .md-nav--primary .md-nav__item--nested > .md-nav__link {
+ padding-right: 1.6rem;
+ padding-left: 4.8rem; }
+ .md-nav--primary .md-nav__item--nested > .md-nav__link::after {
+ content: "\E315"; }
+ [dir="rtl"] .md-nav--primary .md-nav__item--nested > .md-nav__link::after {
+ content: "\E314"; }
+ .md-nav--primary .md-nav__link {
+ position: relative;
+ margin-top: 0;
+ padding: 1.2rem 1.6rem; }
+ .md-nav--primary .md-nav__link::after {
+ position: absolute;
+ top: 50%;
+ right: 1.2rem;
+ margin-top: -1.2rem;
+ color: inherit;
+ font-size: 2.4rem; }
+ [dir="rtl"] .md-nav--primary .md-nav__link::after {
+ right: initial;
+ left: 1.2rem; }
+ .md-nav--primary .md-nav--secondary .md-nav__link {
+ position: static; }
+ .md-nav--primary .md-nav--secondary .md-nav {
+ position: static;
+ background-color: transparent; }
+ .md-nav--primary .md-nav--secondary .md-nav .md-nav__link {
+ padding-left: 2.8rem; }
+ [dir="rtl"] .md-nav--primary .md-nav--secondary .md-nav .md-nav__link {
+ padding-right: 2.8rem;
+ padding-left: initial; }
+ .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav__link {
+ padding-left: 4rem; }
+ [dir="rtl"] .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav__link {
+ padding-right: 4rem;
+ padding-left: initial; }
+ .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav .md-nav__link {
+ padding-left: 5.2rem; }
+ [dir="rtl"] .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav .md-nav__link {
+ padding-right: 5.2rem;
+ padding-left: initial; }
+ .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav .md-nav .md-nav__link {
+ padding-left: 6.4rem; }
+ [dir="rtl"] .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav .md-nav .md-nav__link {
+ padding-right: 6.4rem;
+ padding-left: initial; }
+ .md-nav__toggle ~ .md-nav {
+ display: flex;
+ -webkit-transform: translateX(100%);
+ transform: translateX(100%);
+ transition: opacity 0.125s 0.05s, -webkit-transform 0.25s cubic-bezier(0.8, 0, 0.6, 1);
+ transition: transform 0.25s cubic-bezier(0.8, 0, 0.6, 1), opacity 0.125s 0.05s;
+ transition: transform 0.25s cubic-bezier(0.8, 0, 0.6, 1), opacity 0.125s 0.05s, -webkit-transform 0.25s cubic-bezier(0.8, 0, 0.6, 1);
+ opacity: 0; }
+ [dir="rtl"] .md-nav__toggle ~ .md-nav {
+ -webkit-transform: translateX(-100%);
+ transform: translateX(-100%); }
+ .no-csstransforms3d .md-nav__toggle ~ .md-nav {
+ display: none; }
+ .md-nav__toggle:checked ~ .md-nav {
+ -webkit-transform: translateX(0);
+ transform: translateX(0);
+ transition: opacity 0.125s 0.125s, -webkit-transform 0.25s cubic-bezier(0.4, 0, 0.2, 1);
+ transition: transform 0.25s cubic-bezier(0.4, 0, 0.2, 1), opacity 0.125s 0.125s;
+ transition: transform 0.25s cubic-bezier(0.4, 0, 0.2, 1), opacity 0.125s 0.125s, -webkit-transform 0.25s cubic-bezier(0.4, 0, 0.2, 1);
+ opacity: 1; }
+ .no-csstransforms3d .md-nav__toggle:checked ~ .md-nav {
+ display: flex; }
+ .md-sidebar--primary {
+ position: fixed;
+ top: 0;
+ left: -24.2rem;
+ width: 24.2rem;
+ height: 100%;
+ -webkit-transform: translateX(0);
+ transform: translateX(0);
+ transition: box-shadow 0.25s, -webkit-transform 0.25s cubic-bezier(0.4, 0, 0.2, 1);
+ transition: transform 0.25s cubic-bezier(0.4, 0, 0.2, 1), box-shadow 0.25s;
+ transition: transform 0.25s cubic-bezier(0.4, 0, 0.2, 1), box-shadow 0.25s, -webkit-transform 0.25s cubic-bezier(0.4, 0, 0.2, 1);
+ background-color: white;
+ z-index: 3; }
+ [dir="rtl"] .md-sidebar--primary {
+ right: -24.2rem;
+ left: initial; }
+ .no-csstransforms3d .md-sidebar--primary {
+ display: none; }
+ [data-md-toggle="drawer"]:checked ~ .md-container .md-sidebar--primary {
+ box-shadow: 0 8px 10px 1px rgba(0, 0, 0, 0.14), 0 3px 14px 2px rgba(0, 0, 0, 0.12), 0 5px 5px -3px rgba(0, 0, 0, 0.4);
+ -webkit-transform: translateX(24.2rem);
+ transform: translateX(24.2rem); }
+ [dir="rtl"] [data-md-toggle="drawer"]:checked ~ .md-container .md-sidebar--primary {
+ -webkit-transform: translateX(-24.2rem);
+ transform: translateX(-24.2rem); }
+ .no-csstransforms3d [data-md-toggle="drawer"]:checked ~ .md-container .md-sidebar--primary {
+ display: block; }
+ .md-sidebar--primary .md-sidebar__scrollwrap {
+ overflow: hidden; }
+ .md-sidebar--primary .md-sidebar__scrollwrap {
+ position: absolute;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ margin: 0; }
+ .md-tabs {
+ display: none; } }
+
+@media only screen and (min-width: 60em) {
+ .md-content {
+ margin-right: 24.2rem; }
+ [dir="rtl"] .md-content {
+ margin-right: initial;
+ margin-left: 24.2rem; }
+ .md-header-nav__button.md-icon--search {
+ display: none; }
+ .md-header-nav__source {
+ display: block;
+ width: 23rem;
+ max-width: 23rem;
+ margin-left: 2.8rem;
+ padding-right: 1.2rem; }
+ [dir="rtl"] .md-header-nav__source {
+ margin-right: 2.8rem;
+ margin-left: initial;
+ padding-right: initial;
+ padding-left: 1.2rem; }
+ .md-search {
+ padding: 0.4rem; }
+ .md-search__overlay {
+ position: fixed;
+ top: 0;
+ left: 0;
+ width: 0;
+ height: 0;
+ transition: width 0s 0.25s, height 0s 0.25s, opacity 0.25s;
+ background-color: rgba(0, 0, 0, 0.54);
+ cursor: pointer; }
+ [dir="rtl"] .md-search__overlay {
+ right: 0;
+ left: initial; }
+ [data-md-toggle="search"]:checked ~ .md-header .md-search__overlay {
+ width: 100%;
+ height: 100%;
+ transition: width 0s, height 0s, opacity 0.25s;
+ opacity: 1; }
+ .md-search__inner {
+ position: relative;
+ width: 23rem;
+ padding: 0.2rem 0;
+ float: right;
+ transition: width 0.25s cubic-bezier(0.1, 0.7, 0.1, 1); }
+ [dir="rtl"] .md-search__inner {
+ float: left; }
+ .md-search__form {
+ border-radius: 0.2rem; }
+ .md-search__input {
+ width: 100%;
+ height: 3.6rem;
+ padding-left: 4.4rem;
+ transition: background-color 0.25s cubic-bezier(0.1, 0.7, 0.1, 1), color 0.25s cubic-bezier(0.1, 0.7, 0.1, 1);
+ border-radius: 0.2rem;
+ background-color: rgba(0, 0, 0, 0.26);
+ color: inherit;
+ font-size: 1.6rem; }
+ [dir="rtl"] .md-search__input {
+ padding-right: 4.4rem; }
+ .md-search__input + .md-search__icon {
+ color: inherit; }
+ .md-search__input::-webkit-input-placeholder {
+ color: rgba(255, 255, 255, 0.7); }
+ .md-search__input:-ms-input-placeholder {
+ color: rgba(255, 255, 255, 0.7); }
+ .md-search__input::-ms-input-placeholder {
+ color: rgba(255, 255, 255, 0.7); }
+ .md-search__input::placeholder {
+ color: rgba(255, 255, 255, 0.7); }
+ .md-search__input:hover {
+ background-color: rgba(255, 255, 255, 0.12); }
+ [data-md-toggle="search"]:checked ~ .md-header .md-search__input {
+ border-radius: 0.2rem 0.2rem 0 0;
+ background-color: white;
+ color: rgba(0, 0, 0, 0.87);
+ text-overflow: none; }
+ [data-md-toggle="search"]:checked ~ .md-header .md-search__input + .md-search__icon, [data-md-toggle="search"]:checked ~ .md-header .md-search__input::-webkit-input-placeholder {
+ color: rgba(0, 0, 0, 0.54); }
+ [data-md-toggle="search"]:checked ~ .md-header .md-search__input + .md-search__icon, [data-md-toggle="search"]:checked ~ .md-header .md-search__input:-ms-input-placeholder {
+ color: rgba(0, 0, 0, 0.54); }
+ [data-md-toggle="search"]:checked ~ .md-header .md-search__input + .md-search__icon, [data-md-toggle="search"]:checked ~ .md-header .md-search__input::-ms-input-placeholder {
+ color: rgba(0, 0, 0, 0.54); }
+ [data-md-toggle="search"]:checked ~ .md-header .md-search__input + .md-search__icon, [data-md-toggle="search"]:checked ~ .md-header .md-search__input::placeholder {
+ color: rgba(0, 0, 0, 0.54); }
+ .md-search__output {
+ top: 3.8rem;
+ transition: opacity 0.4s;
+ opacity: 0; }
+ [data-md-toggle="search"]:checked ~ .md-header .md-search__output {
+ box-shadow: 0 6px 10px 0 rgba(0, 0, 0, 0.14), 0 1px 18px 0 rgba(0, 0, 0, 0.12), 0 3px 5px -1px rgba(0, 0, 0, 0.4);
+ opacity: 1; }
+ .md-search__scrollwrap {
+ max-height: 0; }
+ [data-md-toggle="search"]:checked ~ .md-header .md-search__scrollwrap {
+ max-height: 75vh; }
+ .md-search__scrollwrap::-webkit-scrollbar {
+ width: 0.4rem;
+ height: 0.4rem; }
+ .md-search__scrollwrap::-webkit-scrollbar-thumb {
+ background-color: rgba(0, 0, 0, 0.26); }
+ .md-search__scrollwrap::-webkit-scrollbar-thumb:hover {
+ background-color: #536dfe; }
+ .md-search-result__meta {
+ padding-left: 4.4rem; }
+ [dir="rtl"] .md-search-result__meta {
+ padding-right: 4.4rem;
+ padding-left: initial; }
+ .md-search-result__article {
+ padding-left: 4.4rem; }
+ [dir="rtl"] .md-search-result__article {
+ padding-right: 4.4rem;
+ padding-left: 1.6rem; }
+ .md-sidebar--secondary {
+ display: block;
+ margin-left: 100%;
+ -webkit-transform: translate(-100%, 0);
+ transform: translate(-100%, 0); }
+ [dir="rtl"] .md-sidebar--secondary {
+ margin-right: 100%;
+ margin-left: initial;
+ -webkit-transform: translate(100%, 0);
+ transform: translate(100%, 0); } }
+
+@media only screen and (min-width: 76.25em) {
+ .md-content {
+ margin-left: 24.2rem; }
+ [dir="rtl"] .md-content {
+ margin-right: 24.2rem; }
+ .md-content__inner {
+ margin-right: 2.4rem;
+ margin-left: 2.4rem; }
+ .md-header-nav__button.md-icon--menu {
+ display: none; }
+ .md-nav[data-md-state="animate"] {
+ transition: max-height 0.25s cubic-bezier(0.86, 0, 0.07, 1); }
+ .md-nav__toggle ~ .md-nav {
+ max-height: 0;
+ overflow: hidden; }
+ .no-js .md-nav__toggle ~ .md-nav {
+ display: none; }
+ .md-nav__toggle:checked ~ .md-nav, .md-nav[data-md-state="expand"] {
+ max-height: 100%; }
+ .no-js .md-nav__toggle:checked ~ .md-nav, .no-js .md-nav[data-md-state="expand"] {
+ display: block; }
+ .md-nav__item--nested > .md-nav > .md-nav__title {
+ display: none; }
+ .md-nav__item--nested > .md-nav__link::after {
+ display: inline-block;
+ -webkit-transform-origin: 0.45em 0.45em;
+ transform-origin: 0.45em 0.45em;
+ -webkit-transform-style: preserve-3d;
+ transform-style: preserve-3d;
+ vertical-align: -0.125em; }
+ .js .md-nav__item--nested > .md-nav__link::after {
+ transition: -webkit-transform 0.4s;
+ transition: transform 0.4s;
+ transition: transform 0.4s, -webkit-transform 0.4s; }
+ .md-nav__item--nested .md-nav__toggle:checked ~ .md-nav__link::after {
+ -webkit-transform: rotateX(180deg);
+ transform: rotateX(180deg); }
+ [data-md-toggle="search"]:checked ~ .md-header .md-search__inner {
+ width: 68.8rem; }
+ .md-search__scrollwrap {
+ width: 68.8rem; }
+ .md-sidebar--secondary {
+ margin-left: 122rem; }
+ [dir="rtl"] .md-sidebar--secondary {
+ margin-right: 122rem;
+ margin-left: initial; }
+ .md-tabs ~ .md-main .md-nav--primary > .md-nav__list > .md-nav__item--nested {
+ font-size: 0;
+ visibility: hidden; }
+ .md-tabs--active ~ .md-main .md-nav--primary .md-nav__title {
+ display: block;
+ padding: 0; }
+ .md-tabs--active ~ .md-main .md-nav--primary .md-nav__title--site {
+ display: none; }
+ .no-js .md-tabs--active ~ .md-main .md-nav--primary .md-nav {
+ display: block; }
+ .md-tabs--active ~ .md-main .md-nav--primary > .md-nav__list > .md-nav__item {
+ font-size: 0;
+ visibility: hidden; }
+ .md-tabs--active ~ .md-main .md-nav--primary > .md-nav__list > .md-nav__item--nested {
+ display: none;
+ font-size: 1.4rem;
+ overflow: auto;
+ visibility: visible; }
+ .md-tabs--active ~ .md-main .md-nav--primary > .md-nav__list > .md-nav__item--nested > .md-nav__link {
+ display: none; }
+ .md-tabs--active ~ .md-main .md-nav--primary > .md-nav__list > .md-nav__item--active {
+ display: block; }
+ .md-tabs--active ~ .md-main .md-nav[data-md-level="1"] {
+ max-height: initial;
+ overflow: visible; }
+ .md-tabs--active ~ .md-main .md-nav[data-md-level="1"] > .md-nav__list > .md-nav__item {
+ padding-left: 0; }
+ .md-tabs--active ~ .md-main .md-nav[data-md-level="1"] .md-nav .md-nav__title {
+ display: none; } }
+
+@media only screen and (min-width: 45em) {
+ .md-footer-nav__link {
+ width: 50%; }
+ .md-footer-copyright {
+ max-width: 75%;
+ float: left; }
+ [dir="rtl"] .md-footer-copyright {
+ float: right; }
+ .md-footer-social {
+ padding: 1.2rem 0;
+ float: right; }
+ [dir="rtl"] .md-footer-social {
+ float: left; } }
+
+@media only screen and (max-width: 29.9375em) {
+ [data-md-toggle="search"]:checked ~ .md-header .md-search__overlay {
+ -webkit-transform: scale(45);
+ transform: scale(45); } }
+
+@media only screen and (min-width: 30em) and (max-width: 44.9375em) {
+ [data-md-toggle="search"]:checked ~ .md-header .md-search__overlay {
+ -webkit-transform: scale(60);
+ transform: scale(60); } }
+
+@media only screen and (min-width: 45em) and (max-width: 59.9375em) {
+ [data-md-toggle="search"]:checked ~ .md-header .md-search__overlay {
+ -webkit-transform: scale(75);
+ transform: scale(75); } }
+
+@media only screen and (min-width: 60em) and (max-width: 76.1875em) {
+ [data-md-toggle="search"]:checked ~ .md-header .md-search__inner {
+ width: 46.8rem; }
+ .md-search__scrollwrap {
+ width: 46.8rem; }
+ .md-search-result__teaser {
+ max-height: 5rem;
+ -webkit-line-clamp: 3; } }
+
+/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsImZpbGUiOiJhc3NldHMvc3R5bGVzaGVldHMvYXBwbGljYXRpb24uNDUxZjgwZTUuY3NzIiwic291cmNlUm9vdCI6IiJ9*/
\ No newline at end of file
diff --git a/content/docs/pekko-management/current/main/assets/stylesheets/paradox-material-theme.css b/content/docs/pekko-management/current/main/assets/stylesheets/paradox-material-theme.css
new file mode 100644
index 00000000..4d014788
--- /dev/null
+++ b/content/docs/pekko-management/current/main/assets/stylesheets/paradox-material-theme.css
@@ -0,0 +1,89 @@
+/*!
+ Paradox Material Theme
+ Copyright (c) 2017-2018 Jonas Fonseca
+ License: MIT
+*/
+
+.callout {
+ visibility: hidden;
+}
+
+.md-nav--primary > .md-nav--secondary {
+ display: none;
+}
+
+.md-nav--primary .md-version {
+ padding: 1.2rem 1.2rem 0rem;
+}
+
+.md-nav--primary .md-version label {
+ cursor: default;
+}
+
+.md-version .md-icon {
+ position: relative;
+ top: .2rem;
+ left: 0;
+}
+
+@media only screen and (max-width: 76.1875em) {
+ .md-nav--primary .md-version {
+ padding: 0;
+ }
+}
+
+.md-nav--secondary {
+ visibility: hidden;
+}
+
+dl.mdc-tab-bar {
+ margin-left: 0;
+}
+
+.mdc-tab-content {
+ display: none;
+}
+
+.mdc-tab-content--active {
+ display: block;
+}
+
+.md-source__icon i {
+ font-size: 24px;
+ margin-top: 1.2rem;
+ margin-left: 1.2rem;
+}
+
+.md-edit:before {
+ content: "\E3C9";
+}
+
+pre.prettyprint {
+ border: none;
+}
+
+.callout.no-title .callout-title {
+ display: none;
+}
+
+.callout.no-title > :nth-child(2) {
+ margin-top: 0;
+}
+
+.print-only {
+ display: none;
+}
+
+@media print {
+ .print-only {
+ display: block;
+ }
+
+ .md-edit, h1 a.anchor {
+ display: none;
+ }
+
+ .md-version:before {
+ content: "\E893";
+ }
+}
diff --git a/content/docs/pekko-management/current/main/assets/stylesheets/pekko-theme.css b/content/docs/pekko-management/current/main/assets/stylesheets/pekko-theme.css
new file mode 100644
index 00000000..813a6c58
--- /dev/null
+++ b/content/docs/pekko-management/current/main/assets/stylesheets/pekko-theme.css
@@ -0,0 +1,14 @@
+select.supergroup {
+ width: 50%;
+ border: none;
+ font-size: larger;
+ margin: 1rem;
+ padding: 0.5rem;
+}
+
+ul.md-nav__links li {
+ display: inline;
+}
+ul.md-nav__links li a {
+ display: inline;
+}
diff --git a/content/docs/pekko-management/current/main/bootstrap/details.html b/content/docs/pekko-management/current/main/bootstrap/details.html
new file mode 100644
index 00000000..b8b481ae
--- /dev/null
+++ b/content/docs/pekko-management/current/main/bootstrap/details.html
@@ -0,0 +1,393 @@
+<!DOCTYPE html>
+<html lang="en" class="no-js">
+<head>
+<meta charset="utf-8">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta http-equiv="x-ua-compatible" content="ie=edge">
+<meta name="description" content="Apache Pekko Management is a suite of tools for operating Apache Pekko Clusters.">
+<meta name="generator" content="Paradox, paradox-material-theme=0.6.0, mkdocs-material=3.0.3">
+
+<meta name="lang:clipboard.copy" content="Copy to clipboard">
+<meta name="lang:clipboard.copied" content="Copied to clipboard">
+<meta name="lang:search.language" content="">
+<meta name="lang:search.pipeline.stopwords" content="true">
+<meta name="lang:search.pipeline.trimmer" content="true">
+<meta name="lang:search.result.none" content="No matching documents">
+<meta name="lang:search.result.one" content="1 matching document">
+<meta name="lang:search.result.other" content="# matching documents">
+<meta name="lang:search.tokenizer" content="[\s\-]+">
+
+
+<meta name="description" content="Apache Pekko Management is a suite of tools for operating Apache Pekko Clusters.">
+<link rel="shortcut icon" href="../assets/images/pekko_favicon.png">
+<title>Bootstrap process · Apache Pekko Management</title>
+<link rel="stylesheet" href="../assets/stylesheets/application.451f80e5.css">
+<link rel="stylesheet" href="../assets/stylesheets/application-palette.22915126.css">
+<link rel="stylesheet" href="../lib/material__tabs/dist/mdc.tabs.min.css">
+<link rel="stylesheet" href="../lib/prettify/prettify.css">
+<script src="../assets/javascripts/modernizr.1aa3b519.js"></script>
+<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,400i,700|Roboto+Mono">
+<style>
+body,input{font-family:"Roboto","Helvetica Neue",Helvetica,Arial,sans-serif}
+code,kbd,pre{font-family:"Roboto Mono","Courier New",Courier,monospace}
+</style>
+<link rel="stylesheet" href="../assets/fonts/font-awesome.css">
+<link rel="stylesheet" href="../assets/fonts/material-icons.css">
+<link rel="stylesheet" href="../assets/stylesheets/paradox-material-theme.css">
+<link rel="stylesheet" href="../assets/stylesheets/pekko-theme.css">
+</head>
+<body
+data-md-color-primary="white"
+data-md-color-accent="orange"
+>
+<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
+<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
+<label class="md-overlay" data-md-component="overlay" for="__drawer"></label>
+<header class="md-header" data-md-component="header">
+<nav class="md-header-nav md-grid">
+<div class="md-flex">
+<div class="md-flex__cell md-flex__cell--shrink">
+<a href="../index.html" title="Apache Pekko Management" class="md-header-nav__button md-logo">
+<img src="../assets/images/pekko_logo.png" width="24" height="24">
+</a>
+</div>
+<div class="md-flex__cell md-flex__cell--shrink">
+<label class="md-icon md-icon--menu md-header-nav__button" for="__drawer"></label>
+</div>
+<div class="md-flex__cell md-flex__cell--stretch">
+<div class="md-flex__ellipsis md-header-nav__title" data-md-component="title">
+<span class="md-header-nav__topic">
+Apache Pekko Management
+</span>
+<span class="md-header-nav__topic">
+Bootstrap process
+</span>
+</div>
+</div>
+<div class="md-flex__cell md-flex__cell--shrink">
+<label class="md-icon md-icon--search md-header-nav__button" for="__search"></label>
+<div class="md-search" data-md-component="search" role="dialog">
+<label class="md-search__overlay" for="__search"></label>
+<div class="md-search__inner" role="search">
+<form class="md-search__form" name="search">
+<input type="text" class="md-search__input" name="query" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="query" data-md-state="active">
+<label class="md-icon md-search__icon" for="__search"></label>
+<button type="reset" class="md-icon md-search__icon" data-md-component="reset" tabindex="-1"></button>
+</form>
+<div class="md-search__output">
+<div class="md-search__scrollwrap" data-md-scrollfix>
+<div class="md-search-result" data-md-component="result">
+<div class="md-search-result__meta">
+Type to start searching
+</div>
+<ol class="md-search-result__list"></ol>
+</div>
+</div>
+</div>
+</div>
+</div>
+
+</div>
+<div class="md-flex__cell md-flex__cell--shrink">
+<div class="md-header-nav__source">
+<a href="https://github.com/apache/incubator-pekko-management"
+title="Go to repository"
+class="md-source"
+data-md-source="github">
+<div class="md-source__icon">
+<i class="fa fa-github"></i>
+</div>
+<div class="md-source__repository">
+apache/incubator-pekko-management
+</div>
+</a>
+
+</div>
+</div>
+</div>
+</nav>
+</header>
+
+<div class="md-container">
+<main class="md-main">
+<div class="md-main__inner md-grid" data-md-component="container">
+<div class="md-sidebar md-sidebar--primary" data-md-component="navigation">
+<div class="md-sidebar__scrollwrap">
+<div class="md-sidebar__inner">
+<nav class="md-nav md-nav--primary" data-md-level="0" style="visibility: hidden">
+<label class="md-nav__title md-nav__title--site" for="drawer">
+<a href="../index.html" title="Apache Pekko Management" class="md-nav__button md-logo">
+<span class="md-nav__button md-logo">
+<img src="../assets/images/pekko_logo.png" width="24" height="24">
+</a>
+<a href="../index.html" title="Apache Pekko Management">
+Apache Pekko Management
+</a>
+</label>
+<div class="md-nav__source">
+<a href="https://github.com/apache/incubator-pekko-management"
+title="Go to repository"
+class="md-source"
+data-md-source="github">
+<div class="md-source__icon">
+<i class="fa fa-github"></i>
+</div>
+<div class="md-source__repository">
+apache/incubator-pekko-management
+</div>
+</a>
+
+</div>
+<select class="supergroup" name="Language"><option class="group" value="group-java">Java</option><option class="group" value="group-scala">Scala</option></select>
+<ul>
+ <li><a href="../index.html#overview" class="header">Overview</a></li>
+ <li><a href="../kubernetes-deployment/index.html" class="page">Deploying Pekko Cluster to Kubernetes</a>
+ <ul>
+ <li><a href="../kubernetes-deployment/preparing-for-production.html" class="page">Preparing for production</a></li>
+ <li><a href="../kubernetes-deployment/forming-a-cluster.html" class="page">Forming an Pekko Cluster</a></li>
+ <li><a href="../kubernetes-deployment/building.html" class="page">Building the application</a></li>
+ <li><a href="../kubernetes-deployment/deploying.html" class="page">Deploying</a></li>
+ </ul></li>
+ <li><a href="../pekko-management.html" class="page">Apache Pekko Management</a>
+ <ul>
+ <li><a href="../pekko-management.html#project-info" class="header">Project Info</a></li>
+ <li><a href="../pekko-management.html#dependencies" class="header">Dependencies</a></li>
+ <li><a href="../pekko-management.html#basic-usage" class="header">Basic Usage</a></li>
+ <li><a href="../pekko-management.html#basic-configuration" class="header">Basic Configuration</a></li>
+ <li><a href="../pekko-management.html#read-only-routes" class="header">Read only routes</a></li>
+ <li><a href="../pekko-management.html#configuring-security" class="header">Configuring Security</a></li>
+ <li><a href="../pekko-management.html#stopping-pekko-management" class="header">Stopping Pekko Management</a></li>
+ <li><a href="../pekko-management.html#developing-extensions" class="header">Developing Extensions</a></li>
+ </ul></li>
+ <li><a href="../migration.html" class="page">Migration guide</a>
+ <ul>
+ <li><a href="../migration.html#1-0" class="header">1.0</a></li>
+ </ul></li>
+ <li><a href="../healthchecks.html" class="page">Health checks</a>
+ <ul>
+ <li><a href="../healthchecks.html#defining-a-health-check" class="header">Defining a Health Check</a></li>
+ <li><a href="../healthchecks.html#configuring-health-checks" class="header">Configuring health checks</a></li>
+ <li><a href="../healthchecks.html#hosting-health-checks-as-an-pekko-management-route" class="header">Hosting health checks as an Pekko Management Route</a></li>
+ </ul></li>
+ <li><a href="../bootstrap/index.html" class="page">Apache Pekko Cluster Bootstrap</a>
+ <ul>
+ <li><a href="../bootstrap/index.html#prerequisites" class="header">Prerequisites</a></li>
+ <li><a href="../bootstrap/index.html#project-info" class="header">Project Info</a></li>
+ <li><a href="../bootstrap/index.html#dependency" class="header">Dependency</a></li>
+ <li><a href="../bootstrap/index.html#using" class="header">Using</a></li>
+ <li><a href="../bootstrap/index.html#how-it-works" class="header">How It Works</a></li>
+ <li><a href="../bootstrap/index.html#joining-mechanism-precedence" class="header">Joining Mechanism Precedence</a></li>
+ <li><a href="../bootstrap/index.html#deployment-considerations" class="header">Deployment considerations</a></li>
+ <li><a href="../bootstrap/index.html#bootstrap-recipes" class="header">Bootstrap Recipes</a></li>
+ <li><a href="../bootstrap/recipes.html" class="page">Bootstrap environments</a></li>
+ <li><a href="../bootstrap/details.html#bootstrap-process" class="active page">Bootstrap process</a></li>
+ <li><a href="../bootstrap/troubleshooting.html" class="page">Troubleshooting</a></li>
+ <li><a href="../bootstrap/local-config.html" class="page">Local using config</a></li>
+ <li><a href="../bootstrap/kubernetes.html" class="page">Kubernetes via DNS</a></li>
+ <li><a href="../bootstrap/kubernetes-api.html" class="page">Kubernetes API</a></li>
+ <li><a href="../bootstrap/istio.html" class="page">Istio</a></li>
+ </ul></li>
+ <li><a href="../discovery/index.html" class="page">Apache Pekko Discovery Methods</a>
+ <ul>
+ <li><a href="../discovery/kubernetes.html" class="page">Kubernetes API</a></li>
+ <li><a href="../discovery/consul.html" class="page">Consul</a></li>
+ <li><a href="../discovery/marathon.html" class="page">Marathon API</a></li>
+ <li><a href="../discovery/aws.html" class="page">AWS API</a></li>
+ </ul></li>
+ <li><a href="../cluster-http-management.html" class="page">Cluster HTTP Management</a>
+ <ul>
+ <li><a href="../cluster-http-management.html#project-info" class="header">Project Info</a></li>
+ <li><a href="../cluster-http-management.html#dependencies" class="header">Dependencies</a></li>
+ <li><a href="../cluster-http-management.html#running" class="header">Running</a></li>
+ <li><a href="../cluster-http-management.html#api-definition" class="header">API Definition</a></li>
+ <li><a href="../cluster-http-management.html#hosting-the-routes-in-an-existing-pekko-http-server" class="header">Hosting the routes in an existing Pekko HTTP server</a></li>
+ <li><a href="../cluster-http-management.html#disable-routes" class="header">Disable routes</a></li>
+ <li><a href="../cluster-http-management.html#health-checks" class="header">Health checks</a></li>
+ </ul></li>
+ <li><a href="../cluster-jmx-management.html" class="page">Built-in JMX Management</a></li>
+ <li><a href="../loglevels/index.html" class="page">Dynamic Log Levels</a>
+ <ul>
+ <li><a href="../loglevels/logback.html" class="page">Logback</a></li>
+ <li><a href="../loglevels/log4j2.html" class="page">Log4j2</a></li>
+ </ul></li>
+ <li><a href="../kubernetes-lease.html" class="page">Kubernetes Lease</a>
+ <ul>
+ <li><a href="../kubernetes-lease.html#lease-instances" class="header">Lease Instances</a></li>
+ <li><a href="../kubernetes-lease.html#configuring" class="header">Configuring</a></li>
+ <li><a href="../kubernetes-lease.html#f-a-q" class="header">F.A.Q</a></li>
+ </ul></li>
+</ul>
+
+<nav class="md-nav md-nav--secondary">
+<label class="md-nav__title" for="__toc">Table of contents</label>
+<ul>
+ <li><a href="../bootstrap/details.html#bootstrap-process" class="header">Bootstrap process</a>
+ <ul>
+ <li><a href="../bootstrap/details.html#cluster-formation-in-a-dynamic-environment" class="header">Cluster formation in a dynamic environment</a></li>
+ <li><a href="../bootstrap/details.html#customizing-join-behavior" class="header">Customizing Join Behavior</a></li>
+ </ul></li>
+</ul>
+</nav>
+
+
+<ul class="md-nav__list md-nav__links">
+<li class="md-nav__item"><a href="https://apache.org"><i class="md-icon">link</i> Apache Software Foundation</a></li>
+<li class="md-nav__item"><a href="https://apache.org/licenses/"><i class="md-icon">link</i> License</a></li>
+<li class="md-nav__item"><a href="https://apache.org/security/"><i class="md-icon">link</i> Security</a></li>
+<li class="md-nav__item"><a href="https://privacy.apache.org/policies/privacy-policy-public.html"><i class="md-icon">link</i> Privacy</a></li>
+<li class="md-nav__item"><a href="https://www.apache.org/events/current-event.html"><i class="md-icon">link</i> Events</a></li>
+<li class="md-nav__item"><a href="https://www.apache.org/foundation/sponsorship.html"><i class="md-icon">link</i> Donate</a></li>
+<li class="md-nav__item"><a href="https://www.apache.org/foundation/thanks.html"><i class="md-icon">link</i> Thanks</a></li>
+</ul>
+
+</nav>
+<ul style="display: none">
+<li class="md-nav__item md-version" id="project.version">
+<label class="md-nav__link" for="__version">
+<i class="md-icon" title="Version">label_outline</i> 0.0.0+714-a034fd01*
+</label>
+</li>
+</ul>
+
+</div>
+</div>
+</div>
+<div class="md-sidebar md-sidebar--secondary" data-md-component="toc">
+<div class="md-sidebar__scrollwrap">
+<div class="md-sidebar__inner">
+<nav class="md-nav md-nav--secondary">
+<label class="md-nav__title" for="__toc">Table of contents</label>
+<ul>
+ <li><a href="../bootstrap/details.html#bootstrap-process" class="header">Bootstrap process</a>
+ <ul>
+ <li><a href="../bootstrap/details.html#cluster-formation-in-a-dynamic-environment" class="header">Cluster formation in a dynamic environment</a></li>
+ <li><a href="../bootstrap/details.html#customizing-join-behavior" class="header">Customizing Join Behavior</a></li>
+ </ul></li>
+</ul>
+</nav>
+
+</div>
+</div>
+</div>
+<div class="md-content">
+<article class="md-content__inner md-typeset">
+<div class="md-content__searchable">
+<h1><a href="#bootstrap-process" name="bootstrap-process" class="anchor"><span class="anchor-link"></span></a>Bootstrap process</h1>
+<p>Below is a description of the bootstrap process in more detail. All configuration properties references below are in the <code>pekko.management.cluster.bootstrap</code> section. </p>
+<ul>
+ <li>Each node discovers its “neighbours” using Pekko Discovery
+ <ul>
+ <li>Some initial negotiation between the nodes must take place to safely form a new cluster when there is no existing cluster.</li>
+ </ul>
+ </li>
+ <li>The node starts to probe the Contact Points of the discovered nodes (which are HTTP endpoints, exposed via Pekko Management by the Bootstrap Management Extension) for known seeds to join.
+ <ul>
+ <li>When a cluster exists the seed nodes are returned from probing the discovered Contact Points. It can immediately join such seed nodes and the following steps for the initial bootstrap are not needed.</li>
+ </ul>
+ </li>
+ <li>When no cluster exists yet, none of the contacted nodes return any seed nodes during the probing process. The following takes place to create a new cluster:
+ <ul>
+ <li>A service discovery lookup is done every <code>contact-point-discovery.interval</code></li>
+ <li>If discovery returns the same Contact Points for the <code>contact-point-discovery.stable-margin</code>. This is to prevent join decisions being made based on fluctuating Contact Points.</li>
+ <li>At least <code>contact-point-discovery.required-contact-point-nr</code> nodes have been discovered.</li>
+ <li>Communication with all discovered Contact Points have been confirmed via successful HTTP request-response.</li>
+ <li>Each node will discover that no cluster exists by probing each other and getting no <code>seed-nodes</code>, and a new one should be formed, they know all their addresses, and decide that the “lowest” sorted address is to start forming the cluster.</li>
+ <li>The lowest address node (e.g. “A”) notices the same, and makes the decision to <em>join itself</em>.</li>
+ <li>Once the lowest addressed node has joined itself, it has formed a new cluster.</li>
+ <li>Other nodes notice that A has started returning <em>itself</em> as a seed-node in the Contact Point responses.</li>
+ <li>Any node, including X, immediately joins such seed node that it has observed in the Contact Point process.</li>
+ <li>Nodes continue probing the other nodes, and eventually will notice any of the existing nodes that are part of the cluster, and immediately join it.</li>
+ <li>Eventually all nodes have joined the same cluster, the process is complete.</li>
+ </ul>
+ </li>
+</ul>
+<p>The illustration below may be of help in visualising this process:</p>
+<p><img src="../images/bootstrap-forming-cluster.png" alt="project structure" /></p>
+<h2><a href="#cluster-formation-in-a-dynamic-environment" name="cluster-formation-in-a-dynamic-environment" class="anchor"><span class="anchor-link"></span></a>Cluster formation in a dynamic environment</h2>
+<p>It is important to realise no <em>dynamic and automatic</em> cluster joining solution provides 100% safety, however the process presented here is very close to it. Please note that the often used claim of using a consistent data store for the seed-nodes also is not 100% safe (sic!), since races could occur between the node having discovered a node from the strongly consistent store and attempting the join operation.</p>
+<p>Pekko bootstrap’s solution is prone to very few and rather rare races. Built-in protection against the race cases exists in the form of the stable timeout, which means that if any changes are being observed in discovery, the decision making is delayed until the observation is stable again. This prevents initiating joining while discovery is still inconsistent.</p>
+<p>Note also that the bootstrap process does NOT rely on full consistency of the discovery mechanism when adding new nodes to an existing cluster. This is very desirable, since this situation usually occurs when dynamically scaling up due to increased load on your service, and some services may indeed not be fully consistent then. However, the Pekko Cluster membership protocol IS strongly consistent, and it is the source of truth with regards what the cluster is consisting of, and no ext [...]
+<p>If however we are talking about an inconsistent DNS lookup response during the Initial Bootstrap, the nodes will be delayed forming the cluster as they expect the lookups to be consistent, this is checked by the stable-margin configuration option.</p><div class="callout note "><div class="callout-title">Note</div>
+<p>It <em>is</em> crucial for the nodes to have a consistent view of their neighbours for the Initial Bootstrap. Otherwise multiple nodes could self-join and start multiple clusters.</p></div>
+<h2><a href="#customizing-join-behavior" name="customizing-join-behavior" class="anchor"><span class="anchor-link"></span></a>Customizing Join Behavior</h2>
+<p>The above section explains the default <code>JoinDecider</code> implementation. It is possible to replace the implementation with configuration property <code>join-decider.class</code>. See <code>reference.conf</code> and API documentation.</p>
+</div>
+<div>
+<a href="https://github.com/apache/incubator-pekko-management/tree/master/docs/src/main/paradox/bootstrap/details.md" title="Edit this page" class="md-source-file md-edit">
+Edit this page
+</a>
+</div>
+<div class="print-only">
+<span class="md-source-file md-version">
+0.0.0+714-a034fd01*
+</span>
+</div>
+</article>
+</div>
+</div>
+</main>
+<footer class="md-footer">
+<div class="md-footer-nav">
+<nav class="md-footer-nav__inner md-grid">
+<a href="../bootstrap/recipes.html" title="Bootstrap environments" class="md-flex md-footer-nav__link md-footer-nav__link--prev" rel="prev">
+<div class="md-flex__cell md-flex__cell--shrink">
+<i class="md-icon md-icon--arrow-back md-footer-nav__button"></i>
+</div>
+<div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
+<span class="md-flex__ellipsis">
+<span class="md-footer-nav__direction">
+Previous
+</span>
+Bootstrap environments
+</span>
+</div>
+</a>
+<a href="../bootstrap/troubleshooting.html" title="Troubleshooting" class="md-flex md-footer-nav__link md-footer-nav__link--next" rel="next">
+<div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
+<span class="md-flex__ellipsis">
+<span class="md-footer-nav__direction">
+Next
+</span>
+Troubleshooting
+</span>
+</div>
+<div class="md-flex__cell md-flex__cell--shrink">
+<i class="md-icon md-icon--arrow-forward md-footer-nav__button"></i>
+</div>
+</a>
+</nav>
+</div>
+<div class="md-footer-meta md-typeset">
+<div class="md-footer-meta__inner md-grid">
+<div class="md-footer-copyright">
+<div class="md-footer-copyright__highlight">
+Copyright © 2011-2022 <a href="https://www.lightbend.com/">Lightbend, Inc.</a>, © 2022, 2023
+ <a href="https://apache.org">The Apache Software Foundation</a>.
+ Apache Pekko, Pekko, and its feather logo are trademarks of The Apache Software Foundation.
+</div>
+Powered by
+<a href="https://github.com/lightbend/paradox">Paradox</a>
+and
+<a href="https://jonas.github.io/paradox-material-theme/">Paradox Material Theme</a>
+
+</div>
+</div>
+</div>
+</footer>
+
+</div>
+<script src="../assets/javascripts/application.583bbe55.js"></script>
+<script src="../assets/javascripts/paradox-material-theme.js"></script>
+<script>app.initialize({version:"0.17",url:{base:"../."}})</script>
+<script type="text/javascript" src="../lib/prettify/prettify.js"></script>
+<script type="text/javascript" src="../lib/prettify/lang-scala.js"></script>
+<script type="text/javascript" src="../lib/jquery/jquery.min.js"></script>
+<script type="text/javascript" src="../assets/javascripts/groups.js"></script>
+
+<script type="text/javascript">
+document.addEventListener("DOMContentLoaded", function(event) {
+window.prettyPrint && prettyPrint();
+});
+</script>
+</body>
+</html>
diff --git a/content/docs/pekko-management/current/main/bootstrap/index.html b/content/docs/pekko-management/current/main/bootstrap/index.html
new file mode 100644
index 00000000..bfb3719b
--- /dev/null
+++ b/content/docs/pekko-management/current/main/bootstrap/index.html
@@ -0,0 +1,552 @@
+<!DOCTYPE html>
+<html lang="en" class="no-js">
+<head>
+<meta charset="utf-8">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta http-equiv="x-ua-compatible" content="ie=edge">
+<meta name="description" content="Apache Pekko Management is a suite of tools for operating Apache Pekko Clusters.">
+<meta name="generator" content="Paradox, paradox-material-theme=0.6.0, mkdocs-material=3.0.3">
+
+<meta name="lang:clipboard.copy" content="Copy to clipboard">
+<meta name="lang:clipboard.copied" content="Copied to clipboard">
+<meta name="lang:search.language" content="">
+<meta name="lang:search.pipeline.stopwords" content="true">
+<meta name="lang:search.pipeline.trimmer" content="true">
+<meta name="lang:search.result.none" content="No matching documents">
+<meta name="lang:search.result.one" content="1 matching document">
+<meta name="lang:search.result.other" content="# matching documents">
+<meta name="lang:search.tokenizer" content="[\s\-]+">
+
+
+<meta name="description" content="Apache Pekko Management is a suite of tools for operating Apache Pekko Clusters.">
+<link rel="shortcut icon" href="../assets/images/pekko_favicon.png">
+<title>Apache Pekko Cluster Bootstrap · Apache Pekko Management</title>
+<link rel="stylesheet" href="../assets/stylesheets/application.451f80e5.css">
+<link rel="stylesheet" href="../assets/stylesheets/application-palette.22915126.css">
+<link rel="stylesheet" href="../lib/material__tabs/dist/mdc.tabs.min.css">
+<link rel="stylesheet" href="../lib/prettify/prettify.css">
+<script src="../assets/javascripts/modernizr.1aa3b519.js"></script>
+<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,400i,700|Roboto+Mono">
+<style>
+body,input{font-family:"Roboto","Helvetica Neue",Helvetica,Arial,sans-serif}
+code,kbd,pre{font-family:"Roboto Mono","Courier New",Courier,monospace}
+</style>
+<link rel="stylesheet" href="../assets/fonts/font-awesome.css">
+<link rel="stylesheet" href="../assets/fonts/material-icons.css">
+<link rel="stylesheet" href="../assets/stylesheets/paradox-material-theme.css">
+<link rel="stylesheet" href="../assets/stylesheets/pekko-theme.css">
+</head>
+<body
+data-md-color-primary="white"
+data-md-color-accent="orange"
+>
+<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
+<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
+<label class="md-overlay" data-md-component="overlay" for="__drawer"></label>
+<header class="md-header" data-md-component="header">
+<nav class="md-header-nav md-grid">
+<div class="md-flex">
+<div class="md-flex__cell md-flex__cell--shrink">
+<a href="../index.html" title="Apache Pekko Management" class="md-header-nav__button md-logo">
+<img src="../assets/images/pekko_logo.png" width="24" height="24">
+</a>
+</div>
+<div class="md-flex__cell md-flex__cell--shrink">
+<label class="md-icon md-icon--menu md-header-nav__button" for="__drawer"></label>
+</div>
+<div class="md-flex__cell md-flex__cell--stretch">
+<div class="md-flex__ellipsis md-header-nav__title" data-md-component="title">
+<span class="md-header-nav__topic">
+Apache Pekko Management
+</span>
+<span class="md-header-nav__topic">
+Apache Pekko Cluster Bootstrap
+</span>
+</div>
+</div>
+<div class="md-flex__cell md-flex__cell--shrink">
+<label class="md-icon md-icon--search md-header-nav__button" for="__search"></label>
+<div class="md-search" data-md-component="search" role="dialog">
+<label class="md-search__overlay" for="__search"></label>
+<div class="md-search__inner" role="search">
+<form class="md-search__form" name="search">
+<input type="text" class="md-search__input" name="query" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="query" data-md-state="active">
+<label class="md-icon md-search__icon" for="__search"></label>
+<button type="reset" class="md-icon md-search__icon" data-md-component="reset" tabindex="-1"></button>
+</form>
+<div class="md-search__output">
+<div class="md-search__scrollwrap" data-md-scrollfix>
+<div class="md-search-result" data-md-component="result">
+<div class="md-search-result__meta">
+Type to start searching
+</div>
+<ol class="md-search-result__list"></ol>
+</div>
+</div>
+</div>
+</div>
+</div>
+
+</div>
+<div class="md-flex__cell md-flex__cell--shrink">
+<div class="md-header-nav__source">
+<a href="https://github.com/apache/incubator-pekko-management"
+title="Go to repository"
+class="md-source"
+data-md-source="github">
+<div class="md-source__icon">
+<i class="fa fa-github"></i>
+</div>
+<div class="md-source__repository">
+apache/incubator-pekko-management
+</div>
+</a>
+
+</div>
+</div>
+</div>
+</nav>
+</header>
+
+<div class="md-container">
+<main class="md-main">
+<div class="md-main__inner md-grid" data-md-component="container">
+<div class="md-sidebar md-sidebar--primary" data-md-component="navigation">
+<div class="md-sidebar__scrollwrap">
+<div class="md-sidebar__inner">
+<nav class="md-nav md-nav--primary" data-md-level="0" style="visibility: hidden">
+<label class="md-nav__title md-nav__title--site" for="drawer">
+<a href="../index.html" title="Apache Pekko Management" class="md-nav__button md-logo">
+<span class="md-nav__button md-logo">
+<img src="../assets/images/pekko_logo.png" width="24" height="24">
+</a>
+<a href="../index.html" title="Apache Pekko Management">
+Apache Pekko Management
+</a>
+</label>
+<div class="md-nav__source">
+<a href="https://github.com/apache/incubator-pekko-management"
+title="Go to repository"
+class="md-source"
+data-md-source="github">
+<div class="md-source__icon">
+<i class="fa fa-github"></i>
+</div>
+<div class="md-source__repository">
+apache/incubator-pekko-management
+</div>
+</a>
+
+</div>
+<select class="supergroup" name="Language"><option class="group" value="group-java">Java</option><option class="group" value="group-scala">Scala</option></select>
+<ul>
+ <li><a href="../index.html#overview" class="header">Overview</a></li>
+ <li><a href="../kubernetes-deployment/index.html" class="page">Deploying Pekko Cluster to Kubernetes</a>
+ <ul>
+ <li><a href="../kubernetes-deployment/preparing-for-production.html" class="page">Preparing for production</a></li>
+ <li><a href="../kubernetes-deployment/forming-a-cluster.html" class="page">Forming an Pekko Cluster</a></li>
+ <li><a href="../kubernetes-deployment/building.html" class="page">Building the application</a></li>
+ <li><a href="../kubernetes-deployment/deploying.html" class="page">Deploying</a></li>
+ </ul></li>
+ <li><a href="../pekko-management.html" class="page">Apache Pekko Management</a>
+ <ul>
+ <li><a href="../pekko-management.html#project-info" class="header">Project Info</a></li>
+ <li><a href="../pekko-management.html#dependencies" class="header">Dependencies</a></li>
+ <li><a href="../pekko-management.html#basic-usage" class="header">Basic Usage</a></li>
+ <li><a href="../pekko-management.html#basic-configuration" class="header">Basic Configuration</a></li>
+ <li><a href="../pekko-management.html#read-only-routes" class="header">Read only routes</a></li>
+ <li><a href="../pekko-management.html#configuring-security" class="header">Configuring Security</a></li>
+ <li><a href="../pekko-management.html#stopping-pekko-management" class="header">Stopping Pekko Management</a></li>
+ <li><a href="../pekko-management.html#developing-extensions" class="header">Developing Extensions</a></li>
+ </ul></li>
+ <li><a href="../migration.html" class="page">Migration guide</a>
+ <ul>
+ <li><a href="../migration.html#1-0" class="header">1.0</a></li>
+ </ul></li>
+ <li><a href="../healthchecks.html" class="page">Health checks</a>
+ <ul>
+ <li><a href="../healthchecks.html#defining-a-health-check" class="header">Defining a Health Check</a></li>
+ <li><a href="../healthchecks.html#configuring-health-checks" class="header">Configuring health checks</a></li>
+ <li><a href="../healthchecks.html#hosting-health-checks-as-an-pekko-management-route" class="header">Hosting health checks as an Pekko Management Route</a></li>
+ </ul></li>
+ <li><a href="../bootstrap/index.html#apache-pekko-cluster-bootstrap" class="active page">Apache Pekko Cluster Bootstrap</a>
+ <ul>
+ <li><a href="../bootstrap/index.html#prerequisites" class="header">Prerequisites</a></li>
+ <li><a href="../bootstrap/index.html#project-info" class="header">Project Info</a></li>
+ <li><a href="../bootstrap/index.html#dependency" class="header">Dependency</a></li>
+ <li><a href="../bootstrap/index.html#using" class="header">Using</a></li>
+ <li><a href="../bootstrap/index.html#how-it-works" class="header">How It Works</a></li>
+ <li><a href="../bootstrap/index.html#joining-mechanism-precedence" class="header">Joining Mechanism Precedence</a></li>
+ <li><a href="../bootstrap/index.html#deployment-considerations" class="header">Deployment considerations</a></li>
+ <li><a href="../bootstrap/index.html#bootstrap-recipes" class="header">Bootstrap Recipes</a></li>
+ <li><a href="../bootstrap/recipes.html" class="page">Bootstrap environments</a></li>
+ <li><a href="../bootstrap/details.html" class="page">Bootstrap process</a></li>
+ <li><a href="../bootstrap/troubleshooting.html" class="page">Troubleshooting</a></li>
+ <li><a href="../bootstrap/local-config.html" class="page">Local using config</a></li>
+ <li><a href="../bootstrap/kubernetes.html" class="page">Kubernetes via DNS</a></li>
+ <li><a href="../bootstrap/kubernetes-api.html" class="page">Kubernetes API</a></li>
+ <li><a href="../bootstrap/istio.html" class="page">Istio</a></li>
+ </ul></li>
+ <li><a href="../discovery/index.html" class="page">Apache Pekko Discovery Methods</a>
+ <ul>
+ <li><a href="../discovery/kubernetes.html" class="page">Kubernetes API</a></li>
+ <li><a href="../discovery/consul.html" class="page">Consul</a></li>
+ <li><a href="../discovery/marathon.html" class="page">Marathon API</a></li>
+ <li><a href="../discovery/aws.html" class="page">AWS API</a></li>
+ </ul></li>
+ <li><a href="../cluster-http-management.html" class="page">Cluster HTTP Management</a>
+ <ul>
+ <li><a href="../cluster-http-management.html#project-info" class="header">Project Info</a></li>
+ <li><a href="../cluster-http-management.html#dependencies" class="header">Dependencies</a></li>
+ <li><a href="../cluster-http-management.html#running" class="header">Running</a></li>
+ <li><a href="../cluster-http-management.html#api-definition" class="header">API Definition</a></li>
+ <li><a href="../cluster-http-management.html#hosting-the-routes-in-an-existing-pekko-http-server" class="header">Hosting the routes in an existing Pekko HTTP server</a></li>
+ <li><a href="../cluster-http-management.html#disable-routes" class="header">Disable routes</a></li>
+ <li><a href="../cluster-http-management.html#health-checks" class="header">Health checks</a></li>
+ </ul></li>
+ <li><a href="../cluster-jmx-management.html" class="page">Built-in JMX Management</a></li>
+ <li><a href="../loglevels/index.html" class="page">Dynamic Log Levels</a>
+ <ul>
+ <li><a href="../loglevels/logback.html" class="page">Logback</a></li>
+ <li><a href="../loglevels/log4j2.html" class="page">Log4j2</a></li>
+ </ul></li>
+ <li><a href="../kubernetes-lease.html" class="page">Kubernetes Lease</a>
+ <ul>
+ <li><a href="../kubernetes-lease.html#lease-instances" class="header">Lease Instances</a></li>
+ <li><a href="../kubernetes-lease.html#configuring" class="header">Configuring</a></li>
+ <li><a href="../kubernetes-lease.html#f-a-q" class="header">F.A.Q</a></li>
+ </ul></li>
+</ul>
+
+<nav class="md-nav md-nav--secondary">
+<label class="md-nav__title" for="__toc">Table of contents</label>
+<ul>
+ <li><a href="../bootstrap/index.html#apache-pekko-cluster-bootstrap" class="header">Apache Pekko Cluster Bootstrap</a>
+ <ul>
+ <li><a href="../bootstrap/index.html#prerequisites" class="header">Prerequisites</a></li>
+ <li><a href="../bootstrap/index.html#project-info" class="header">Project Info</a></li>
+ <li><a href="../bootstrap/index.html#dependency" class="header">Dependency</a></li>
+ <li><a href="../bootstrap/index.html#using" class="header">Using</a></li>
+ <li><a href="../bootstrap/index.html#how-it-works" class="header">How It Works</a></li>
+ <li><a href="../bootstrap/index.html#joining-mechanism-precedence" class="header">Joining Mechanism Precedence</a></li>
+ <li><a href="../bootstrap/index.html#deployment-considerations" class="header">Deployment considerations</a></li>
+ <li><a href="../bootstrap/index.html#bootstrap-recipes" class="header">Bootstrap Recipes</a></li>
+ </ul></li>
+</ul>
+</nav>
+
+
+<ul class="md-nav__list md-nav__links">
+<li class="md-nav__item"><a href="https://apache.org"><i class="md-icon">link</i> Apache Software Foundation</a></li>
+<li class="md-nav__item"><a href="https://apache.org/licenses/"><i class="md-icon">link</i> License</a></li>
+<li class="md-nav__item"><a href="https://apache.org/security/"><i class="md-icon">link</i> Security</a></li>
+<li class="md-nav__item"><a href="https://privacy.apache.org/policies/privacy-policy-public.html"><i class="md-icon">link</i> Privacy</a></li>
+<li class="md-nav__item"><a href="https://www.apache.org/events/current-event.html"><i class="md-icon">link</i> Events</a></li>
+<li class="md-nav__item"><a href="https://www.apache.org/foundation/sponsorship.html"><i class="md-icon">link</i> Donate</a></li>
+<li class="md-nav__item"><a href="https://www.apache.org/foundation/thanks.html"><i class="md-icon">link</i> Thanks</a></li>
+</ul>
+
+</nav>
+<ul style="display: none">
+<li class="md-nav__item md-version" id="project.version">
+<label class="md-nav__link" for="__version">
+<i class="md-icon" title="Version">label_outline</i> 0.0.0+714-a034fd01*
+</label>
+</li>
+</ul>
+
+</div>
+</div>
+</div>
+<div class="md-sidebar md-sidebar--secondary" data-md-component="toc">
+<div class="md-sidebar__scrollwrap">
+<div class="md-sidebar__inner">
+<nav class="md-nav md-nav--secondary">
+<label class="md-nav__title" for="__toc">Table of contents</label>
+<ul>
+ <li><a href="../bootstrap/index.html#apache-pekko-cluster-bootstrap" class="header">Apache Pekko Cluster Bootstrap</a>
+ <ul>
+ <li><a href="../bootstrap/index.html#prerequisites" class="header">Prerequisites</a></li>
+ <li><a href="../bootstrap/index.html#project-info" class="header">Project Info</a></li>
+ <li><a href="../bootstrap/index.html#dependency" class="header">Dependency</a></li>
+ <li><a href="../bootstrap/index.html#using" class="header">Using</a></li>
+ <li><a href="../bootstrap/index.html#how-it-works" class="header">How It Works</a></li>
+ <li><a href="../bootstrap/index.html#joining-mechanism-precedence" class="header">Joining Mechanism Precedence</a></li>
+ <li><a href="../bootstrap/index.html#deployment-considerations" class="header">Deployment considerations</a></li>
+ <li><a href="../bootstrap/index.html#bootstrap-recipes" class="header">Bootstrap Recipes</a></li>
+ </ul></li>
+</ul>
+</nav>
+
+</div>
+</div>
+</div>
+<div class="md-content">
+<article class="md-content__inner md-typeset">
+<div class="md-content__searchable">
+<a id="bootstrap"></a>
+<h1><a href="#apache-pekko-cluster-bootstrap" name="apache-pekko-cluster-bootstrap" class="anchor"><span class="anchor-link"></span></a>Apache Pekko Cluster Bootstrap</h1>
+<p>Pekko Cluster Bootstrap helps forming (or joining to) a cluster by using <a href="../discovery/index.html">Pekko Discovery</a> to discover peer nodes. It is an alternative to configuring static <code>seed-nodes</code> in dynamic deployment environments such as on Kubernetes or AWS.</p>
+<p>It builds on the flexibility of Pekko Discovery, leveraging a range of discovery mechanisms depending on the environment you want to run your cluster in.</p>
+<h2><a href="#prerequisites" name="prerequisites" class="anchor"><span class="anchor-link"></span></a>Prerequisites</h2>
+<p>Bootstrap depends on:</p>
+<ul>
+ <li><a href="../discovery/index.html">Pekko Discovery</a> to discover other members of the cluster</li>
+ <li><a href="../pekko-management.html">Pekko Management</a> to host HTTP endpoints used during the bootstrap process</li>
+</ul>
+<p>A discovery mechanism needs to be chosen. A good default choice is DNS.</p>
+<h2><a href="#project-info" name="project-info" class="anchor"><span class="anchor-link"></span></a>Project Info</h2>
+<table class="project-info">
+<tr><th colspan="2">Project Info: Apache Pekko Cluster Bootstrap</th></tr>
+ <tr><th>Artifact</th><td><div>org.apache.pekko</div>
+ <div>pekko-management-cluster-bootstrap</div>
+ <div>0.0.0+714-a034fd01-SNAPSHOT</div>
+ <div><a href="https://repository.apache.org/content/repositories/snapshots/org/apache/pekko/" target="_blank" rel="noopener noreferrer">Snapshots are available</a></div>
+ </td></tr>
+ <tr><th>JDK versions</th><td><div>Adopt OpenJDK 8 with Hotspot</div><div>Adopt OpenJDK 11 with Hotspot</div></td></tr>
+ <tr><th>Scala versions</th><td>2.12.17, 2.13.10</td></tr>
+ <tr><th>License</th><td><div><a href="https://www.apache.org/licenses/LICENSE-2.0.html" target="_blank" rel="noopener noreferrer">Apache-2.0</a></div>
+ </td></tr>
+
+ <tr><th>Home page</th><td><a href="https://pekko.apache.org/">https://pekko.apache.org/</a></td></tr>
+ <tr><th>API documentation</th><td>
+ <div><a href="https://pekko.apache.org/api/pekko-management/current/org/apache/pekko/index.html" target="_blank" rel="noopener noreferrer">API (Scaladoc)</a></div>
+ </td></tr>
+ <tr><th>Forums</th><td>
+ <div><a href="https://lists.apache.org/list.html?dev@pekko.apache.org" target="_blank" rel="noopener noreferrer">Apache Pekko Dev mailing list</a></div>
+ <div><a href="https://lists.apache.org/list.html?user@pekko.apache.org" target="_blank" rel="noopener noreferrer">Apache Pekko User mailing list</a></div>
+ <div><a href="https://github.com/apache/incubator-pekko-management/discussions" target="_blank" rel="noopener noreferrer">Github Discussions</a></div>
+ </td></tr>
+ <tr><th>Release notes</th><td><a href="https://github.com/apache/incubator-pekko-management/releases" target="_blank" rel="noopener noreferrer">GitHub releases</a></td></tr>
+ <tr><th>Issues</th><td><a href="https://github.com/apache/incubator-pekko-management/issues" target="_blank" rel="noopener noreferrer">GitHub issues</a></td></tr>
+ <tr><th>Sources</th><td><a href="https://github.com/apache/incubator-pekko-management" target="_blank" rel="noopener noreferrer">https://github.com/apache/incubator-pekko-management</a></td></tr>
+</table>
+
+<h2><a href="#dependency" name="dependency" class="anchor"><span class="anchor-link"></span></a>Dependency</h2>
+
+<p>Add <code>pekko-management-cluster-bootstrap</code> and one or more discovery mechanisms to use for the discovery process.</p>
+
+<p>For example, you might choose to use the <a href="https://pekko.apache.org/docs/pekko/current/discovery/index.html#discovery-method-dns">DNS discovery</a> and bootstrap extensions:</p>
+<dl class="dependency"><dt>sbt</dt><dd><pre class="prettyprint"><code class="language-scala">val PekkoVersion = "0.0.0+26630-2c4d0ee0-SNAPSHOT"
+val PekkoManagementVersion = "0.0.0+714-a034fd01-SNAPSHOT"
+libraryDependencies ++= Seq(
+ "org.apache.pekko" %% "pekko-management-cluster-bootstrap" % PekkoManagementVersion,
+ "org.apache.pekko" %% "pekko-discovery" % PekkoVersion
+)</code></pre></dd><dt>Gradle</dt><dd><pre class="prettyprint"><code class="language-gradle">def versions = [
+ PekkoVersion: "0.0.0+26630-2c4d0ee0-SNAPSHOT",
+ PekkoManagementVersion: "0.0.0+714-a034fd01-SNAPSHOT",
+ ScalaBinary: "2.12"
+]
+dependencies {
+ implementation "org.apache.pekko:pekko-management-cluster-bootstrap_${versions.ScalaBinary}:${versions.PekkoManagementVersion}"
+ implementation "org.apache.pekko:pekko-discovery_${versions.ScalaBinary}:${versions.PekkoVersion}"
+}</code></pre></dd><dt>Maven</dt><dd><pre class="prettyprint"><code class="language-xml"><properties>
+ <pekko.version>0.0.0+26630-2c4d0ee0-SNAPSHOT</pekko.version>
+ <pekko.management.version>0.0.0+714-a034fd01-SNAPSHOT</pekko.management.version>
+ <scala.binary.version>2.12</scala.binary.version>
+</properties>
+<dependencies>
+ <dependency>
+ <groupId>org.apache.pekko</groupId>
+ <artifactId>pekko-management-cluster-bootstrap_${scala.binary.version}</artifactId>
+ <version>${pekko.management.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.pekko</groupId>
+ <artifactId>pekko-discovery_${scala.binary.version}</artifactId>
+ <version>${pekko.version}</version>
+ </dependency>
+</dependencies></code></pre></dd></dl>
+<p>Pekko Cluster Bootstrap can be used with Pekko 0.0.0+26630-2c4d0ee0-SNAPSHOT or later. You have to override the following Pekko dependencies by defining them explicitly in your build and define the Pekko version to the one that you are using. Latest patch version of Pekko is recommended and a later version than 0.0.0+26630-2c4d0ee0-SNAPSHOT can be used.</p><dl class="dependency"><dt>sbt</dt><dd><pre class="prettyprint"><code class="language-scala">val PekkoVersion = "0.0.0+26630-2c4d0 [...]
+libraryDependencies ++= Seq(
+ "org.apache.pekko" %% "pekko-cluster" % PekkoVersion,
+ "org.apache.pekko" %% "pekko-discovery" % PekkoVersion
+)</code></pre></dd><dt>Gradle</dt><dd><pre class="prettyprint"><code class="language-gradle">def versions = [
+ PekkoVersion: "0.0.0+26630-2c4d0ee0-SNAPSHOT",
+ ScalaBinary: "2.12"
+]
+dependencies {
+ implementation "org.apache.pekko:pekko-cluster_${versions.ScalaBinary}:${versions.PekkoVersion}"
+ implementation "org.apache.pekko:pekko-discovery_${versions.ScalaBinary}:${versions.PekkoVersion}"
+}</code></pre></dd><dt>Maven</dt><dd><pre class="prettyprint"><code class="language-xml"><properties>
+ <pekko.version>0.0.0+26630-2c4d0ee0-SNAPSHOT</pekko.version>
+ <scala.binary.version>2.12</scala.binary.version>
+</properties>
+<dependencies>
+ <dependency>
+ <groupId>org.apache.pekko</groupId>
+ <artifactId>pekko-cluster_${scala.binary.version}</artifactId>
+ <version>${pekko.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.pekko</groupId>
+ <artifactId>pekko-discovery_${scala.binary.version}</artifactId>
+ <version>${pekko.version}</version>
+ </dependency>
+</dependencies></code></pre></dd></dl><div class="callout note "><div class="callout-title">Note</div>
+<p><code>pekko-discovery</code> is already a transitive dependency of <code>pekko-management-cluster-bootstrap</code> but it can be good to define it explicitly in the build of the application to align the Pekko versions with other dependencies from the application. The version must be the same across all Pekko modules, e.g. <code>pekko-actor</code>, <code>pekko-discovery</code> and <code>pekko-cluster</code> must be of the same version.</p>
+<p>The minimum supported Pekko version is 0.0.0+26630-2c4d0ee0-SNAPSHOT. Use the same Pekko version for <code>pekko-discovery</code> as for other Pekko dependencies in the application. Latest patch version of Pekko is recommended and a later version than 0.0.0+26630-2c4d0ee0-SNAPSHOT can be used.</p></div>
+<h2><a href="#using" name="using" class="anchor"><span class="anchor-link"></span></a>Using</h2>
+<p>Pekko management must be started as well as the bootstrap process, this can either be done through config or programmatically.</p>
+<p><strong>Through config</strong></p>
+<p>Listing the <code>ClusterBootstrap</code> extension among the autoloaded <code>pekko.extensions</code> in <code>application.conf</code> will also cause it to autostart:</p>
+<pre><code>pekko.extensions = ["org.apache.pekko.management.cluster.bootstrap.ClusterBootstrap"]
+</code></pre>
+<p>If management or bootstrap configuration is incorrect, the autostart will log an error and terminate the actor system.</p>
+<p><strong>Programmatically</strong></p>
+<dl>
+ <dt>Scala</dt>
+ <dd>
+ <pre class="prettyprint"><button class="snippet-button copy-snippet" title="Copy snippet to clipboard">copy</button><a class="snippet-button go-to-source" href="https://github.com/apache/incubator-pekko-management/tree/master/management-cluster-bootstrap/src/test/scala/doc/org/apache/pekko/management/cluster/bootstrap/ClusterBootstrapCompileOnly.scala#L26-L30" target="_blank" title="Go to snippet source">source</a><code class="language-scala">// Pekko Management hosts the HTTP routes u [...]
+PekkoManagement(system).start()
+
+// Starting the bootstrap process needs to be done explicitly
+ClusterBootstrap(system).start()</code></pre></dd>
+ <dt>Java</dt>
+ <dd>
+ <pre class="prettyprint"><button class="snippet-button copy-snippet" title="Copy snippet to clipboard">copy</button><a class="snippet-button go-to-source" href="https://github.com/apache/incubator-pekko-management/tree/master/management-cluster-bootstrap/src/test/java/jdoc/org/apache/pekko/management/cluster/bootstrap/ClusterBootstrapCompileOnly.java#L26-L30" target="_blank" title="Go to snippet source">source</a><code class="language-java">// Pekko Management hosts the HTTP routes use [...]
+PekkoManagement.get(system).start();
+
+// Starting the bootstrap process needs to be done explicitly
+ClusterBootstrap.get(system).start();</code></pre></dd>
+</dl>
+<p><code>PekkoManagment().start()</code> will return a that will fail if management cannot be started. It is a good idea to act on such a failure, for example by logging an error and terminating the actor system.</p>
+<p>Ensure that <code>seed-nodes</code> is not present in configuration and that either autoloading through config or <code>start()</code> is called on every node.</p>
+<p>The following configuration is required, more details for each and additional configuration can be found in <a href="https://github.com/apache/incubator-pekko-management/blob/master/cluster-bootstrap/src/main/resources/reference.conf">reference.conf</a>:</p>
+<ul>
+ <li><code>pekko.management.cluster.bootstrap.contact-point-discovery.service-name</code>: a unique name in the deployment environment for this cluster instance which is used to lookup peers in service discovery. If unset, it will be derived from the <code>ActorSystem</code> name.</li>
+ <li><code>pekko.management.cluster.bootstrap.contact-point-discovery.discovery-method</code>: the intended service discovery mechanism (from what choices Pekko Discovery provides). If unset, falls back to the system-wide default from <code>pekko.discovery.method</code>.</li>
+</ul>
+<h2><a href="#how-it-works" name="how-it-works" class="anchor"><span class="anchor-link"></span></a>How It Works</h2>
+<ul>
+ <li>Each node exposes an HTTP endpoint <code>/bootstrap/seed-nodes</code>. This is provided by <code>pekko-management-cluster-bootstrap</code> and exposed automatically by starting Pekko management.</li>
+ <li>During bootstrap each node queries service discovery repeatedly to get the initial contact points until at least the number of contact points (<a href="#exact_contact_point">and recommended exactly equal</a>) as defined in <code>contact-point-discovery.required-contact-point-nr</code> has been found.</li>
+ <li>Each node then probes the found contact points’ <code>/bootstrap/seed-nodes</code> endpoint to see if a cluster has already been formed
+ <ul>
+ <li>If there is an existing cluster, it joins the cluster and bootstrapping is finished.</li>
+ <li>If no cluster exists, each node returns an empty list of <code>seed-nodes</code>. In that case, the node with the lowest address from the set of contact points forms a new cluster and starts advertising itself as a seed node.</li>
+ </ul>
+ </li>
+ <li>Other nodes will start to see the <code>/bootstrap/seed-nodes</code> of the node that self-joined and will join its cluster.</li>
+</ul>
+<p>See <a href="details.html">full bootstrap process and advanced configuration</a> for more details on the process.</p>
+<h2><a href="#joining-mechanism-precedence" name="joining-mechanism-precedence" class="anchor"><span class="anchor-link"></span></a>Joining Mechanism Precedence</h2>
+<p>As Pekko Cluster allows nodes to join to a cluster using multiple different methods, the precedence of each method is strictly defined and is as follows:</p>
+<ul>
+ <li>If <code>pekko.cluster.seed-nodes</code> (in your <code>application.conf</code>) are non-empty, those nodes will be joined, and bootstrap will NOT execute even if <code>start()</code> is called or autostart through configuration is enabled, however a warning will be logged.</li>
+ <li>If an explicit <code>cluster.join</code> or <code>cluster.joinSeedNodes</code> is invoked before the bootstrap completes, that joining would take precedence over the bootstrap (but it’s not recommended to do so, see below).</li>
+ <li>The Cluster Bootstrap mechanism takes some time to complete, but eventually issues a <code>joinSeednodes</code>.</li>
+</ul><div class="callout warning "><div class="callout-title">Warning</div>
+<p>It is NOT recommended to mix various joining mechanisms. Pick one mechanism and stick to it in order to avoid any surprises during cluster formation. E.g. do NOT set <code>pekko.cluster.seed-nodes</code> if you are going to be using the Bootstrap mechanism.</p></div>
+<h2><a href="#deployment-considerations" name="deployment-considerations" class="anchor"><span class="anchor-link"></span></a>Deployment considerations</h2>
+<h3><a href="#initial-deployment" name="initial-deployment" class="anchor"><span class="anchor-link"></span></a>Initial deployment</h3>
+<p>Cluster Bootstrap will always attempt to join an existing cluster if possible. However if no other contact point advertises any <code>seed-nodes</code> a new cluster will be formed by the node decided by the <code>JoinDecider</code> where the default sorts the addresses then picks the lowest.</p>
+<p>A setting is provided, <code>pekko.management.cluster.bootstrap.new-cluster-enabled</code> that can be disable new cluster formation to only allow the node to join existing clusters. </p>
+<ul>
+ <li>On initial deployment use the default <code>pekko.management.cluster.bootstrap.new-cluster-enabled=on</code></li>
+ <li>Following the initial deployment it is recommended to set <code>pekko.management.cluster.bootstrap.new-cluster-enabled=off</code> with an immediate re-deployment once the initial cluster has formed</li>
+</ul>
+<p>This can be used to provide additional safety during restarts and redeploys while there is a network partition present. Without new cluster formation disabled an isolated set of nodes could form a new cluster if all are restarted. </p>
+<p><a name="exact_contact_point"/>For complete safety of the Initial Bootstrap it is recommended to set the <code>contact-point-discovery.required-contact-point-nr</code> setting to the exact number of nodes the initial startup of the cluster will be done. For example, if starting a cluster with 4 nodes initially, and later scaling it out to many more nodes, be sure to set this setting to <code>4</code> for additional safety of the initial joining, even in face of an flaky discovery mech [...]
+<h3><a href="#recommended-configuration" name="recommended-configuration" class="anchor"><span class="anchor-link"></span></a>Recommended Configuration</h3>
+<p>When using the bootstrap module, there are some underlying Pekko Cluster settings that should be specified to ensure that your deployment is robust.</p>
+<p>Since the target environments for this module are dynamic, that is, instances can come and go, failure needs to be considered. The following configuration will result in your application being shut down after 30 seconds if it is unable to join the discovered seed nodes. In this case, the orchestrator (i.e. Kubernetes or Marathon) will restart your node and the operation will (presumably) eventually succeed. You’ll want to specify the following in your <code>application.conf</cod [...]
+<pre class="prettyprint"><button class="snippet-button copy-snippet" title="Copy snippet to clipboard">copy</button><a class="snippet-button go-to-source" href="https://github.com/apache/incubator-pekko-management/tree/master/integration-test/local/src/main/resources/application.conf#L22-L23" target="_blank" title="Go to snippet source">source</a><code class="language-conf">pekko.cluster.shutdown-after-unsuccessful-join-seed-nodes = 30s
+pekko.coordinated-shutdown.exit-jvm = on</code></pre>
+<h3><a href="#rolling-updates" name="rolling-updates" class="anchor"><span class="anchor-link"></span></a>Rolling updates</h3>
+<h4><a href="#graceful-shutdown" name="graceful-shutdown" class="anchor"><span class="anchor-link"></span></a>Graceful shutdown</h4>
+<p>Pekko Cluster can handle hard failures using a downing provider such as Lightbend’s split brain resolver discussed below. However this should not be relied upon for regular rolling redeploys. Features such as <code>ClusterSingleton</code>s and <code>ClusterSharding</code> can safely restart actors on new nodes far quicker when it is certain that a node has shutdown rather than crashed. </p>
+<p>Graceful leaving will happen with the default settings as it is part of <a href="https://pekko.apache.org/docs/pekko/current/actors.html#coordinated-shutdown">Coordinated Shutdown</a>. Just ensure that a node is sent a <code>SIGTERM</code> and not a <code>SIGKILL</code>. Environments such as Kubernetes will do this, it is important to ensure that if JVM is wrapped with a script that it forwards the signal. </p>
+<p>Upon receiving a <code>SIGTERM</code> Coordinated Shutdown will:</p>
+<ul>
+ <li>Perform a <code>Cluster(system).leave</code> on itself</li>
+ <li>The status of the member will be changed to Exiting while allowing any shards to be shutdown gracefully and <code>ClusterSingleton</code>s to be migrated if this was the oldest node. Finally the node is removed from the Pekko Cluster membership.</li>
+</ul>
+<h4><a href="#number-of-nodes-to-redeploy-at-once" name="number-of-nodes-to-redeploy-at-once" class="anchor"><span class="anchor-link"></span></a>Number of nodes to redeploy at once</h4>
+<p>Pekko bootstrap requires a <code>stable-period</code> where service discovery returns a stable set of contact points. When doing rolling updates it is best to wait for a node (or group of nodes) to finish joining the cluster before adding and removing other nodes.</p>
+<h4><a href="#cluster-singletons" name="cluster-singletons" class="anchor"><span class="anchor-link"></span></a>Cluster Singletons</h4>
+<p><code>ClusterSingleton</code>s run on the oldest node in the cluster. To avoid singletons moving during every node deployment it is advised to start a rolling redeploy starting at the newest node. Then <code>ClusterSingleton</code>s only move once. This is the default behaviour for Kubernetes deployments. Cluster Sharding uses a singleton internally so this is important even if not using singletons directly.</p>
+<h3><a href="#split-brains-and-ungraceful-shutdown" name="split-brains-and-ungraceful-shutdown" class="anchor"><span class="anchor-link"></span></a>Split brains and ungraceful shutdown</h3>
+<p>Nodes can crash causing cluster members to become unreachable. This is a tricky problem as it is not possible to distinguish between a network partition and a node failure. To rectify this in an automated manner, make sure you enable the <a href="https://pekko.apache.org/docs/pekko/current/split-brain-resolver.html">Split Brain Resolver</a> This module has a number of strategies that can ensure that the cluster continues to function during network partitions and node failures.</p>
+<h2><a href="#bootstrap-recipes" name="bootstrap-recipes" class="anchor"><span class="anchor-link"></span></a>Bootstrap Recipes</h2>
+<p>To see how to configure and use bootstrap in various environments such as Kubernetes, see <a href="recipes.html">recipes</a>.</p>
+</div>
+<div>
+<a href="https://github.com/apache/incubator-pekko-management/tree/master/docs/src/main/paradox/bootstrap/index.md" title="Edit this page" class="md-source-file md-edit">
+Edit this page
+</a>
+</div>
+<div class="print-only">
+<span class="md-source-file md-version">
+0.0.0+714-a034fd01*
+</span>
+</div>
+</article>
+</div>
+</div>
+</main>
+<footer class="md-footer">
+<div class="md-footer-nav">
+<nav class="md-footer-nav__inner md-grid">
+<a href="../healthchecks.html" title="Health checks" class="md-flex md-footer-nav__link md-footer-nav__link--prev" rel="prev">
+<div class="md-flex__cell md-flex__cell--shrink">
+<i class="md-icon md-icon--arrow-back md-footer-nav__button"></i>
+</div>
+<div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
+<span class="md-flex__ellipsis">
+<span class="md-footer-nav__direction">
+Previous
+</span>
+Health checks
+</span>
+</div>
+</a>
+<a href="../bootstrap/recipes.html" title="Bootstrap environments" class="md-flex md-footer-nav__link md-footer-nav__link--next" rel="next">
+<div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
+<span class="md-flex__ellipsis">
+<span class="md-footer-nav__direction">
+Next
+</span>
+Bootstrap environments
+</span>
+</div>
+<div class="md-flex__cell md-flex__cell--shrink">
+<i class="md-icon md-icon--arrow-forward md-footer-nav__button"></i>
+</div>
+</a>
+</nav>
+</div>
+<div class="md-footer-meta md-typeset">
+<div class="md-footer-meta__inner md-grid">
+<div class="md-footer-copyright">
+<div class="md-footer-copyright__highlight">
+Copyright © 2011-2022 <a href="https://www.lightbend.com/">Lightbend, Inc.</a>, © 2022, 2023
+ <a href="https://apache.org">The Apache Software Foundation</a>.
+ Apache Pekko, Pekko, and its feather logo are trademarks of The Apache Software Foundation.
+</div>
+Powered by
+<a href="https://github.com/lightbend/paradox">Paradox</a>
+and
+<a href="https://jonas.github.io/paradox-material-theme/">Paradox Material Theme</a>
+
+</div>
+</div>
+</div>
+</footer>
+
+</div>
+<script src="../assets/javascripts/application.583bbe55.js"></script>
+<script src="../assets/javascripts/paradox-material-theme.js"></script>
+<script>app.initialize({version:"0.17",url:{base:"../."}})</script>
+<script type="text/javascript" src="../lib/prettify/prettify.js"></script>
+<script type="text/javascript" src="../lib/prettify/lang-scala.js"></script>
+<script type="text/javascript" src="../lib/jquery/jquery.min.js"></script>
+<script type="text/javascript" src="../assets/javascripts/groups.js"></script>
+
+<script type="text/javascript">
+document.addEventListener("DOMContentLoaded", function(event) {
+window.prettyPrint && prettyPrint();
+});
+</script>
+</body>
+</html>
diff --git a/content/docs/pekko-management/current/main/bootstrap/istio.html b/content/docs/pekko-management/current/main/bootstrap/istio.html
new file mode 100644
index 00000000..fc46ec16
--- /dev/null
+++ b/content/docs/pekko-management/current/main/bootstrap/istio.html
@@ -0,0 +1,413 @@
+<!DOCTYPE html>
+<html lang="en" class="no-js">
+<head>
+<meta charset="utf-8">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta http-equiv="x-ua-compatible" content="ie=edge">
+<meta name="description" content="Apache Pekko Management is a suite of tools for operating Apache Pekko Clusters.">
+<meta name="generator" content="Paradox, paradox-material-theme=0.6.0, mkdocs-material=3.0.3">
+
+<meta name="lang:clipboard.copy" content="Copy to clipboard">
+<meta name="lang:clipboard.copied" content="Copied to clipboard">
+<meta name="lang:search.language" content="">
+<meta name="lang:search.pipeline.stopwords" content="true">
+<meta name="lang:search.pipeline.trimmer" content="true">
+<meta name="lang:search.result.none" content="No matching documents">
+<meta name="lang:search.result.one" content="1 matching document">
+<meta name="lang:search.result.other" content="# matching documents">
+<meta name="lang:search.tokenizer" content="[\s\-]+">
+
+
+<meta name="description" content="Apache Pekko Management is a suite of tools for operating Apache Pekko Clusters.">
+<link rel="shortcut icon" href="../assets/images/pekko_favicon.png">
+<title>Istio · Apache Pekko Management</title>
+<link rel="stylesheet" href="../assets/stylesheets/application.451f80e5.css">
+<link rel="stylesheet" href="../assets/stylesheets/application-palette.22915126.css">
+<link rel="stylesheet" href="../lib/material__tabs/dist/mdc.tabs.min.css">
+<link rel="stylesheet" href="../lib/prettify/prettify.css">
+<script src="../assets/javascripts/modernizr.1aa3b519.js"></script>
+<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,400i,700|Roboto+Mono">
+<style>
+body,input{font-family:"Roboto","Helvetica Neue",Helvetica,Arial,sans-serif}
+code,kbd,pre{font-family:"Roboto Mono","Courier New",Courier,monospace}
+</style>
+<link rel="stylesheet" href="../assets/fonts/font-awesome.css">
+<link rel="stylesheet" href="../assets/fonts/material-icons.css">
+<link rel="stylesheet" href="../assets/stylesheets/paradox-material-theme.css">
+<link rel="stylesheet" href="../assets/stylesheets/pekko-theme.css">
+</head>
+<body
+data-md-color-primary="white"
+data-md-color-accent="orange"
+>
+<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
+<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
+<label class="md-overlay" data-md-component="overlay" for="__drawer"></label>
+<header class="md-header" data-md-component="header">
+<nav class="md-header-nav md-grid">
+<div class="md-flex">
+<div class="md-flex__cell md-flex__cell--shrink">
+<a href="../index.html" title="Apache Pekko Management" class="md-header-nav__button md-logo">
+<img src="../assets/images/pekko_logo.png" width="24" height="24">
+</a>
+</div>
+<div class="md-flex__cell md-flex__cell--shrink">
+<label class="md-icon md-icon--menu md-header-nav__button" for="__drawer"></label>
+</div>
+<div class="md-flex__cell md-flex__cell--stretch">
+<div class="md-flex__ellipsis md-header-nav__title" data-md-component="title">
+<span class="md-header-nav__topic">
+Apache Pekko Management
+</span>
+<span class="md-header-nav__topic">
+Istio
+</span>
+</div>
+</div>
+<div class="md-flex__cell md-flex__cell--shrink">
+<label class="md-icon md-icon--search md-header-nav__button" for="__search"></label>
+<div class="md-search" data-md-component="search" role="dialog">
+<label class="md-search__overlay" for="__search"></label>
+<div class="md-search__inner" role="search">
+<form class="md-search__form" name="search">
+<input type="text" class="md-search__input" name="query" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="query" data-md-state="active">
+<label class="md-icon md-search__icon" for="__search"></label>
+<button type="reset" class="md-icon md-search__icon" data-md-component="reset" tabindex="-1"></button>
+</form>
+<div class="md-search__output">
+<div class="md-search__scrollwrap" data-md-scrollfix>
+<div class="md-search-result" data-md-component="result">
+<div class="md-search-result__meta">
+Type to start searching
+</div>
+<ol class="md-search-result__list"></ol>
+</div>
+</div>
+</div>
+</div>
+</div>
+
+</div>
+<div class="md-flex__cell md-flex__cell--shrink">
+<div class="md-header-nav__source">
+<a href="https://github.com/apache/incubator-pekko-management"
+title="Go to repository"
+class="md-source"
+data-md-source="github">
+<div class="md-source__icon">
+<i class="fa fa-github"></i>
+</div>
+<div class="md-source__repository">
+apache/incubator-pekko-management
+</div>
+</a>
+
+</div>
+</div>
+</div>
+</nav>
+</header>
+
+<div class="md-container">
+<main class="md-main">
+<div class="md-main__inner md-grid" data-md-component="container">
+<div class="md-sidebar md-sidebar--primary" data-md-component="navigation">
+<div class="md-sidebar__scrollwrap">
+<div class="md-sidebar__inner">
+<nav class="md-nav md-nav--primary" data-md-level="0" style="visibility: hidden">
+<label class="md-nav__title md-nav__title--site" for="drawer">
+<a href="../index.html" title="Apache Pekko Management" class="md-nav__button md-logo">
+<span class="md-nav__button md-logo">
+<img src="../assets/images/pekko_logo.png" width="24" height="24">
+</a>
+<a href="../index.html" title="Apache Pekko Management">
+Apache Pekko Management
+</a>
+</label>
+<div class="md-nav__source">
+<a href="https://github.com/apache/incubator-pekko-management"
+title="Go to repository"
+class="md-source"
+data-md-source="github">
+<div class="md-source__icon">
+<i class="fa fa-github"></i>
+</div>
+<div class="md-source__repository">
+apache/incubator-pekko-management
+</div>
+</a>
+
+</div>
+<select class="supergroup" name="Language"><option class="group" value="group-java">Java</option><option class="group" value="group-scala">Scala</option></select>
+<ul>
+ <li><a href="../index.html#overview" class="header">Overview</a></li>
+ <li><a href="../kubernetes-deployment/index.html" class="page">Deploying Pekko Cluster to Kubernetes</a>
+ <ul>
+ <li><a href="../kubernetes-deployment/preparing-for-production.html" class="page">Preparing for production</a></li>
+ <li><a href="../kubernetes-deployment/forming-a-cluster.html" class="page">Forming an Pekko Cluster</a></li>
+ <li><a href="../kubernetes-deployment/building.html" class="page">Building the application</a></li>
+ <li><a href="../kubernetes-deployment/deploying.html" class="page">Deploying</a></li>
+ </ul></li>
+ <li><a href="../pekko-management.html" class="page">Apache Pekko Management</a>
+ <ul>
+ <li><a href="../pekko-management.html#project-info" class="header">Project Info</a></li>
+ <li><a href="../pekko-management.html#dependencies" class="header">Dependencies</a></li>
+ <li><a href="../pekko-management.html#basic-usage" class="header">Basic Usage</a></li>
+ <li><a href="../pekko-management.html#basic-configuration" class="header">Basic Configuration</a></li>
+ <li><a href="../pekko-management.html#read-only-routes" class="header">Read only routes</a></li>
+ <li><a href="../pekko-management.html#configuring-security" class="header">Configuring Security</a></li>
+ <li><a href="../pekko-management.html#stopping-pekko-management" class="header">Stopping Pekko Management</a></li>
+ <li><a href="../pekko-management.html#developing-extensions" class="header">Developing Extensions</a></li>
+ </ul></li>
+ <li><a href="../migration.html" class="page">Migration guide</a>
+ <ul>
+ <li><a href="../migration.html#1-0" class="header">1.0</a></li>
+ </ul></li>
+ <li><a href="../healthchecks.html" class="page">Health checks</a>
+ <ul>
+ <li><a href="../healthchecks.html#defining-a-health-check" class="header">Defining a Health Check</a></li>
+ <li><a href="../healthchecks.html#configuring-health-checks" class="header">Configuring health checks</a></li>
+ <li><a href="../healthchecks.html#hosting-health-checks-as-an-pekko-management-route" class="header">Hosting health checks as an Pekko Management Route</a></li>
+ </ul></li>
+ <li><a href="../bootstrap/index.html" class="page">Apache Pekko Cluster Bootstrap</a>
+ <ul>
+ <li><a href="../bootstrap/index.html#prerequisites" class="header">Prerequisites</a></li>
+ <li><a href="../bootstrap/index.html#project-info" class="header">Project Info</a></li>
+ <li><a href="../bootstrap/index.html#dependency" class="header">Dependency</a></li>
+ <li><a href="../bootstrap/index.html#using" class="header">Using</a></li>
+ <li><a href="../bootstrap/index.html#how-it-works" class="header">How It Works</a></li>
+ <li><a href="../bootstrap/index.html#joining-mechanism-precedence" class="header">Joining Mechanism Precedence</a></li>
+ <li><a href="../bootstrap/index.html#deployment-considerations" class="header">Deployment considerations</a></li>
+ <li><a href="../bootstrap/index.html#bootstrap-recipes" class="header">Bootstrap Recipes</a></li>
+ <li><a href="../bootstrap/recipes.html" class="page">Bootstrap environments</a></li>
+ <li><a href="../bootstrap/details.html" class="page">Bootstrap process</a></li>
+ <li><a href="../bootstrap/troubleshooting.html" class="page">Troubleshooting</a></li>
+ <li><a href="../bootstrap/local-config.html" class="page">Local using config</a></li>
+ <li><a href="../bootstrap/kubernetes.html" class="page">Kubernetes via DNS</a></li>
+ <li><a href="../bootstrap/kubernetes-api.html" class="page">Kubernetes API</a></li>
+ <li><a href="../bootstrap/istio.html#istio" class="active page">Istio</a></li>
+ </ul></li>
+ <li><a href="../discovery/index.html" class="page">Apache Pekko Discovery Methods</a>
+ <ul>
+ <li><a href="../discovery/kubernetes.html" class="page">Kubernetes API</a></li>
+ <li><a href="../discovery/consul.html" class="page">Consul</a></li>
+ <li><a href="../discovery/marathon.html" class="page">Marathon API</a></li>
+ <li><a href="../discovery/aws.html" class="page">AWS API</a></li>
+ </ul></li>
+ <li><a href="../cluster-http-management.html" class="page">Cluster HTTP Management</a>
+ <ul>
+ <li><a href="../cluster-http-management.html#project-info" class="header">Project Info</a></li>
+ <li><a href="../cluster-http-management.html#dependencies" class="header">Dependencies</a></li>
+ <li><a href="../cluster-http-management.html#running" class="header">Running</a></li>
+ <li><a href="../cluster-http-management.html#api-definition" class="header">API Definition</a></li>
+ <li><a href="../cluster-http-management.html#hosting-the-routes-in-an-existing-pekko-http-server" class="header">Hosting the routes in an existing Pekko HTTP server</a></li>
+ <li><a href="../cluster-http-management.html#disable-routes" class="header">Disable routes</a></li>
+ <li><a href="../cluster-http-management.html#health-checks" class="header">Health checks</a></li>
+ </ul></li>
+ <li><a href="../cluster-jmx-management.html" class="page">Built-in JMX Management</a></li>
+ <li><a href="../loglevels/index.html" class="page">Dynamic Log Levels</a>
+ <ul>
+ <li><a href="../loglevels/logback.html" class="page">Logback</a></li>
+ <li><a href="../loglevels/log4j2.html" class="page">Log4j2</a></li>
+ </ul></li>
+ <li><a href="../kubernetes-lease.html" class="page">Kubernetes Lease</a>
+ <ul>
+ <li><a href="../kubernetes-lease.html#lease-instances" class="header">Lease Instances</a></li>
+ <li><a href="../kubernetes-lease.html#configuring" class="header">Configuring</a></li>
+ <li><a href="../kubernetes-lease.html#f-a-q" class="header">F.A.Q</a></li>
+ </ul></li>
+</ul>
+
+<nav class="md-nav md-nav--secondary">
+<label class="md-nav__title" for="__toc">Table of contents</label>
+<ul>
+ <li><a href="../bootstrap/istio.html#istio" class="header">Istio</a>
+ <ul>
+ <li><a href="../bootstrap/istio.html#allowing-outbound-communication" class="header">Allowing outbound communication</a></li>
+ <li><a href="../bootstrap/istio.html#allowing-inbound-communication" class="header">Allowing inbound communication</a></li>
+ <li><a href="../bootstrap/istio.html#example" class="header">Example</a></li>
+ </ul></li>
+</ul>
+</nav>
+
+
+<ul class="md-nav__list md-nav__links">
+<li class="md-nav__item"><a href="https://apache.org"><i class="md-icon">link</i> Apache Software Foundation</a></li>
+<li class="md-nav__item"><a href="https://apache.org/licenses/"><i class="md-icon">link</i> License</a></li>
+<li class="md-nav__item"><a href="https://apache.org/security/"><i class="md-icon">link</i> Security</a></li>
+<li class="md-nav__item"><a href="https://privacy.apache.org/policies/privacy-policy-public.html"><i class="md-icon">link</i> Privacy</a></li>
+<li class="md-nav__item"><a href="https://www.apache.org/events/current-event.html"><i class="md-icon">link</i> Events</a></li>
+<li class="md-nav__item"><a href="https://www.apache.org/foundation/sponsorship.html"><i class="md-icon">link</i> Donate</a></li>
+<li class="md-nav__item"><a href="https://www.apache.org/foundation/thanks.html"><i class="md-icon">link</i> Thanks</a></li>
+</ul>
+
+</nav>
+<ul style="display: none">
+<li class="md-nav__item md-version" id="project.version">
+<label class="md-nav__link" for="__version">
+<i class="md-icon" title="Version">label_outline</i> 0.0.0+714-a034fd01*
+</label>
+</li>
+</ul>
+
+</div>
+</div>
+</div>
+<div class="md-sidebar md-sidebar--secondary" data-md-component="toc">
+<div class="md-sidebar__scrollwrap">
+<div class="md-sidebar__inner">
+<nav class="md-nav md-nav--secondary">
+<label class="md-nav__title" for="__toc">Table of contents</label>
+<ul>
+ <li><a href="../bootstrap/istio.html#istio" class="header">Istio</a>
+ <ul>
+ <li><a href="../bootstrap/istio.html#allowing-outbound-communication" class="header">Allowing outbound communication</a></li>
+ <li><a href="../bootstrap/istio.html#allowing-inbound-communication" class="header">Allowing inbound communication</a></li>
+ <li><a href="../bootstrap/istio.html#example" class="header">Example</a></li>
+ </ul></li>
+</ul>
+</nav>
+
+</div>
+</div>
+</div>
+<div class="md-content">
+<article class="md-content__inner md-typeset">
+<div class="md-content__searchable">
+<h1><a href="#istio" name="istio" class="anchor"><span class="anchor-link"></span></a>Istio</h1>
+<p><a href="https://istio.io/">Istio</a> is a service mesh that handles many of the concerns of service to service communication for you, such as routing, load balancing, authentication, authorization, and observability. In certain use cases, it can complement an Pekko cluster well. Typically, Pekko cluster communication is used for multiple nodes of the same service to communicate with each other, to achieve things such as sharding, replication and peer to peer communication, while a se [...]
+<p>To bootstrap a Pekko cluster in Istio, Istio must be configured to allow Pekko cluster communication to bypass the Istio sidecar proxy. Istio’s routing design is made such that services don’t need to be aware of each others location, they just communicate with the proxy, and the mesh figures out how to route and secure the communication. However, Pekko cluster communication is fundamentally location aware, in order to, for example, route messages to sharded actors. Hence a [...]
+<p>It is important to be aware that since Istio’s proxy is bypassed, the Pekko cluster communication will not be secured by Istio using TLS. If you wish to secure your cluster communication, you will need to configure <a href="https://doc.akka.io/docs/akka/current/remoting-artery.html#remote-security">Akka remoting with mTLS</a> yourself.</p>
+<p>Booting a Pekko cluster in Istio requires a minimum Istio version of 1.2.0, as it requires the outbound port exclusions feature that was added in there. It also requires using the <a href="kubernetes-api.html">Kubernetes API</a> contact point discovery method to be used. The instructions below are for the additional configuration necessary to ensure an Akka cluster can be bootstrapped in Istio.</p>
+<h2><a href="#allowing-outbound-communication" name="allowing-outbound-communication" class="anchor"><span class="anchor-link"></span></a>Allowing outbound communication</h2>
+<p>By default, Istio redirects all outbound communication to its proxy. To prevent it from doing this for Pekko cluster communication, both the remoting and management ports need to be excluded from redirection. This can be done using the <code>traffic.sidecar.istio.io/excludeOutboundPorts</code> annotation in the deployment pod template. If your remoting port is 2552, and management port is 8558, this can be done like so:</p>
+<pre class="prettyprint"><code class="language-yaml">annotations:
+ traffic.sidecar.istio.io/excludeOutboundPorts: "2552,8558"
+</code></pre>
+<h2><a href="#allowing-inbound-communication" name="allowing-inbound-communication" class="anchor"><span class="anchor-link"></span></a>Allowing inbound communication</h2>
+<p>Inbound connections to Pekko management and remoting also need to bypass the sidecar proxy. By default, Istio will redirect all incoming traffic to the ports listed in the containers port specification to the sidecar proxy. Hence, there are two ways to ensure that the Pekko management and remoting traffic bypasses the proxy, either explicitly configure the incoming ports to redirect, or don’t list the Pekko management and remoting ports in the container’s ports specification.</p>
+<p>The inbound ports to redirect can be configured using the <code>traffic.sidecar.istio.io/includeInboundPorts</code> annotation. If your service offers a REST endpoint on port 8080, then you might configure that like so:</p>
+<pre class="prettyprint"><code class="language-yaml">annotations:
+ traffic.sidecar.istio.io/includeInboundPorts: "8080"
+</code></pre>
+<p>If you offer any other services on other ports, they can be added as a comma separated list. The important thing to ensure is that your remoting and management ports are not listed in that list.</p>
+<h2><a href="#example" name="example" class="anchor"><span class="anchor-link"></span></a>Example</h2>
+<p>Here is an example deployment spec for an Pekko cluster deployed to Istio, which uses the explicit include inbound ports annotation to ensure that incoming remoting and management traffic isn’t redirected through the proxy:</p>
+<pre class="prettyprint"><code class="language-yaml">apiVersion: apps/v1
+kind: Deployment
+metadata:
+ name: my-service
+spec:
+ replicas: 3
+ selector:
+ matchLabels:
+ app: my-service
+ template:
+ metadata:
+ labels:
+ app: my-service
+ annotations:
+ traffic.sidecar.istio.io/includeInboundPorts: "8080"
+ traffic.sidecar.istio.io/excludeOutboundPorts: "2552,8558"
+ spec:
+ containers:
+ - name: my-service
+ image: "my-service:latest"
+
+ ports:
+ - containerPort: 8080
+ name: http
+ - containerPort: 2552
+ name: remoting
+ - containerPort: 8558
+ name: management
+
+ readinessProbe:
+ httpGet:
+ path: "/ready"
+ port: management
+ livenessProbe:
+ httpGet:
+ path: "/alive"
+ port: management
+</code></pre>
+</div>
+<div>
+<a href="https://github.com/apache/incubator-pekko-management/tree/master/docs/src/main/paradox/bootstrap/istio.md" title="Edit this page" class="md-source-file md-edit">
+Edit this page
+</a>
+</div>
+<div class="print-only">
+<span class="md-source-file md-version">
+0.0.0+714-a034fd01*
+</span>
+</div>
+</article>
+</div>
+</div>
+</main>
+<footer class="md-footer">
+<div class="md-footer-nav">
+<nav class="md-footer-nav__inner md-grid">
+<a href="../bootstrap/kubernetes-api.html" title="Kubernetes API" class="md-flex md-footer-nav__link md-footer-nav__link--prev" rel="prev">
+<div class="md-flex__cell md-flex__cell--shrink">
+<i class="md-icon md-icon--arrow-back md-footer-nav__button"></i>
+</div>
+<div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
+<span class="md-flex__ellipsis">
+<span class="md-footer-nav__direction">
+Previous
+</span>
+Kubernetes API
+</span>
+</div>
+</a>
+<a href="../discovery/index.html" title="Apache Pekko Discovery Methods" class="md-flex md-footer-nav__link md-footer-nav__link--next" rel="next">
+<div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
+<span class="md-flex__ellipsis">
+<span class="md-footer-nav__direction">
+Next
+</span>
+Apache Pekko Discovery Methods
+</span>
+</div>
+<div class="md-flex__cell md-flex__cell--shrink">
+<i class="md-icon md-icon--arrow-forward md-footer-nav__button"></i>
+</div>
+</a>
+</nav>
+</div>
+<div class="md-footer-meta md-typeset">
+<div class="md-footer-meta__inner md-grid">
+<div class="md-footer-copyright">
+<div class="md-footer-copyright__highlight">
+Copyright © 2011-2022 <a href="https://www.lightbend.com/">Lightbend, Inc.</a>, © 2022, 2023
+ <a href="https://apache.org">The Apache Software Foundation</a>.
+ Apache Pekko, Pekko, and its feather logo are trademarks of The Apache Software Foundation.
+</div>
+Powered by
+<a href="https://github.com/lightbend/paradox">Paradox</a>
+and
+<a href="https://jonas.github.io/paradox-material-theme/">Paradox Material Theme</a>
+
+</div>
+</div>
+</div>
+</footer>
+
+</div>
+<script src="../assets/javascripts/application.583bbe55.js"></script>
+<script src="../assets/javascripts/paradox-material-theme.js"></script>
+<script>app.initialize({version:"0.17",url:{base:"../."}})</script>
+<script type="text/javascript" src="../lib/prettify/prettify.js"></script>
+<script type="text/javascript" src="../lib/prettify/lang-scala.js"></script>
+<script type="text/javascript" src="../lib/jquery/jquery.min.js"></script>
+<script type="text/javascript" src="../assets/javascripts/groups.js"></script>
+
+<script type="text/javascript">
+document.addEventListener("DOMContentLoaded", function(event) {
+window.prettyPrint && prettyPrint();
+});
+</script>
+</body>
+</html>
diff --git a/content/docs/pekko-management/current/main/bootstrap/kubernetes-api.html b/content/docs/pekko-management/current/main/bootstrap/kubernetes-api.html
new file mode 100644
index 00000000..66091fc3
--- /dev/null
+++ b/content/docs/pekko-management/current/main/bootstrap/kubernetes-api.html
@@ -0,0 +1,441 @@
+<!DOCTYPE html>
+<html lang="en" class="no-js">
+<head>
+<meta charset="utf-8">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta http-equiv="x-ua-compatible" content="ie=edge">
+<meta name="description" content="Apache Pekko Management is a suite of tools for operating Apache Pekko Clusters.">
+<meta name="generator" content="Paradox, paradox-material-theme=0.6.0, mkdocs-material=3.0.3">
+
+<meta name="lang:clipboard.copy" content="Copy to clipboard">
+<meta name="lang:clipboard.copied" content="Copied to clipboard">
+<meta name="lang:search.language" content="">
+<meta name="lang:search.pipeline.stopwords" content="true">
+<meta name="lang:search.pipeline.trimmer" content="true">
+<meta name="lang:search.result.none" content="No matching documents">
+<meta name="lang:search.result.one" content="1 matching document">
+<meta name="lang:search.result.other" content="# matching documents">
+<meta name="lang:search.tokenizer" content="[\s\-]+">
+
+
+<meta name="description" content="Apache Pekko Management is a suite of tools for operating Apache Pekko Clusters.">
+<link rel="shortcut icon" href="../assets/images/pekko_favicon.png">
+<title>Kubernetes API · Apache Pekko Management</title>
+<link rel="stylesheet" href="../assets/stylesheets/application.451f80e5.css">
+<link rel="stylesheet" href="../assets/stylesheets/application-palette.22915126.css">
+<link rel="stylesheet" href="../lib/material__tabs/dist/mdc.tabs.min.css">
+<link rel="stylesheet" href="../lib/prettify/prettify.css">
+<script src="../assets/javascripts/modernizr.1aa3b519.js"></script>
+<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,400i,700|Roboto+Mono">
+<style>
+body,input{font-family:"Roboto","Helvetica Neue",Helvetica,Arial,sans-serif}
+code,kbd,pre{font-family:"Roboto Mono","Courier New",Courier,monospace}
+</style>
+<link rel="stylesheet" href="../assets/fonts/font-awesome.css">
+<link rel="stylesheet" href="../assets/fonts/material-icons.css">
+<link rel="stylesheet" href="../assets/stylesheets/paradox-material-theme.css">
+<link rel="stylesheet" href="../assets/stylesheets/pekko-theme.css">
+</head>
+<body
+data-md-color-primary="white"
+data-md-color-accent="orange"
+>
+<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
+<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
+<label class="md-overlay" data-md-component="overlay" for="__drawer"></label>
+<header class="md-header" data-md-component="header">
+<nav class="md-header-nav md-grid">
+<div class="md-flex">
+<div class="md-flex__cell md-flex__cell--shrink">
+<a href="../index.html" title="Apache Pekko Management" class="md-header-nav__button md-logo">
+<img src="../assets/images/pekko_logo.png" width="24" height="24">
+</a>
+</div>
+<div class="md-flex__cell md-flex__cell--shrink">
+<label class="md-icon md-icon--menu md-header-nav__button" for="__drawer"></label>
+</div>
+<div class="md-flex__cell md-flex__cell--stretch">
+<div class="md-flex__ellipsis md-header-nav__title" data-md-component="title">
+<span class="md-header-nav__topic">
+Apache Pekko Management
+</span>
+<span class="md-header-nav__topic">
+Kubernetes API
+</span>
+</div>
+</div>
+<div class="md-flex__cell md-flex__cell--shrink">
+<label class="md-icon md-icon--search md-header-nav__button" for="__search"></label>
+<div class="md-search" data-md-component="search" role="dialog">
+<label class="md-search__overlay" for="__search"></label>
+<div class="md-search__inner" role="search">
+<form class="md-search__form" name="search">
+<input type="text" class="md-search__input" name="query" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="query" data-md-state="active">
+<label class="md-icon md-search__icon" for="__search"></label>
+<button type="reset" class="md-icon md-search__icon" data-md-component="reset" tabindex="-1"></button>
+</form>
+<div class="md-search__output">
+<div class="md-search__scrollwrap" data-md-scrollfix>
+<div class="md-search-result" data-md-component="result">
+<div class="md-search-result__meta">
+Type to start searching
+</div>
+<ol class="md-search-result__list"></ol>
+</div>
+</div>
+</div>
+</div>
+</div>
+
+</div>
+<div class="md-flex__cell md-flex__cell--shrink">
+<div class="md-header-nav__source">
+<a href="https://github.com/apache/incubator-pekko-management"
+title="Go to repository"
+class="md-source"
+data-md-source="github">
+<div class="md-source__icon">
+<i class="fa fa-github"></i>
+</div>
+<div class="md-source__repository">
+apache/incubator-pekko-management
+</div>
+</a>
+
+</div>
+</div>
+</div>
+</nav>
+</header>
+
+<div class="md-container">
+<main class="md-main">
+<div class="md-main__inner md-grid" data-md-component="container">
+<div class="md-sidebar md-sidebar--primary" data-md-component="navigation">
+<div class="md-sidebar__scrollwrap">
+<div class="md-sidebar__inner">
+<nav class="md-nav md-nav--primary" data-md-level="0" style="visibility: hidden">
+<label class="md-nav__title md-nav__title--site" for="drawer">
+<a href="../index.html" title="Apache Pekko Management" class="md-nav__button md-logo">
+<span class="md-nav__button md-logo">
+<img src="../assets/images/pekko_logo.png" width="24" height="24">
+</a>
+<a href="../index.html" title="Apache Pekko Management">
+Apache Pekko Management
+</a>
+</label>
+<div class="md-nav__source">
+<a href="https://github.com/apache/incubator-pekko-management"
+title="Go to repository"
+class="md-source"
+data-md-source="github">
+<div class="md-source__icon">
+<i class="fa fa-github"></i>
+</div>
+<div class="md-source__repository">
+apache/incubator-pekko-management
+</div>
+</a>
+
+</div>
+<select class="supergroup" name="Language"><option class="group" value="group-java">Java</option><option class="group" value="group-scala">Scala</option></select>
+<ul>
+ <li><a href="../index.html#overview" class="header">Overview</a></li>
+ <li><a href="../kubernetes-deployment/index.html" class="page">Deploying Pekko Cluster to Kubernetes</a>
+ <ul>
+ <li><a href="../kubernetes-deployment/preparing-for-production.html" class="page">Preparing for production</a></li>
+ <li><a href="../kubernetes-deployment/forming-a-cluster.html" class="page">Forming an Pekko Cluster</a></li>
+ <li><a href="../kubernetes-deployment/building.html" class="page">Building the application</a></li>
+ <li><a href="../kubernetes-deployment/deploying.html" class="page">Deploying</a></li>
+ </ul></li>
+ <li><a href="../pekko-management.html" class="page">Apache Pekko Management</a>
+ <ul>
+ <li><a href="../pekko-management.html#project-info" class="header">Project Info</a></li>
+ <li><a href="../pekko-management.html#dependencies" class="header">Dependencies</a></li>
+ <li><a href="../pekko-management.html#basic-usage" class="header">Basic Usage</a></li>
+ <li><a href="../pekko-management.html#basic-configuration" class="header">Basic Configuration</a></li>
+ <li><a href="../pekko-management.html#read-only-routes" class="header">Read only routes</a></li>
+ <li><a href="../pekko-management.html#configuring-security" class="header">Configuring Security</a></li>
+ <li><a href="../pekko-management.html#stopping-pekko-management" class="header">Stopping Pekko Management</a></li>
+ <li><a href="../pekko-management.html#developing-extensions" class="header">Developing Extensions</a></li>
+ </ul></li>
+ <li><a href="../migration.html" class="page">Migration guide</a>
+ <ul>
+ <li><a href="../migration.html#1-0" class="header">1.0</a></li>
+ </ul></li>
+ <li><a href="../healthchecks.html" class="page">Health checks</a>
+ <ul>
+ <li><a href="../healthchecks.html#defining-a-health-check" class="header">Defining a Health Check</a></li>
+ <li><a href="../healthchecks.html#configuring-health-checks" class="header">Configuring health checks</a></li>
+ <li><a href="../healthchecks.html#hosting-health-checks-as-an-pekko-management-route" class="header">Hosting health checks as an Pekko Management Route</a></li>
+ </ul></li>
+ <li><a href="../bootstrap/index.html" class="page">Apache Pekko Cluster Bootstrap</a>
+ <ul>
+ <li><a href="../bootstrap/index.html#prerequisites" class="header">Prerequisites</a></li>
+ <li><a href="../bootstrap/index.html#project-info" class="header">Project Info</a></li>
+ <li><a href="../bootstrap/index.html#dependency" class="header">Dependency</a></li>
+ <li><a href="../bootstrap/index.html#using" class="header">Using</a></li>
+ <li><a href="../bootstrap/index.html#how-it-works" class="header">How It Works</a></li>
+ <li><a href="../bootstrap/index.html#joining-mechanism-precedence" class="header">Joining Mechanism Precedence</a></li>
+ <li><a href="../bootstrap/index.html#deployment-considerations" class="header">Deployment considerations</a></li>
+ <li><a href="../bootstrap/index.html#bootstrap-recipes" class="header">Bootstrap Recipes</a></li>
+ <li><a href="../bootstrap/recipes.html" class="page">Bootstrap environments</a></li>
+ <li><a href="../bootstrap/details.html" class="page">Bootstrap process</a></li>
+ <li><a href="../bootstrap/troubleshooting.html" class="page">Troubleshooting</a></li>
+ <li><a href="../bootstrap/local-config.html" class="page">Local using config</a></li>
+ <li><a href="../bootstrap/kubernetes.html" class="page">Kubernetes via DNS</a></li>
+ <li><a href="../bootstrap/kubernetes-api.html#kubernetes-api" class="active page">Kubernetes API</a></li>
+ <li><a href="../bootstrap/istio.html" class="page">Istio</a></li>
+ </ul></li>
+ <li><a href="../discovery/index.html" class="page">Apache Pekko Discovery Methods</a>
+ <ul>
+ <li><a href="../discovery/kubernetes.html" class="page">Kubernetes API</a></li>
+ <li><a href="../discovery/consul.html" class="page">Consul</a></li>
+ <li><a href="../discovery/marathon.html" class="page">Marathon API</a></li>
+ <li><a href="../discovery/aws.html" class="page">AWS API</a></li>
+ </ul></li>
+ <li><a href="../cluster-http-management.html" class="page">Cluster HTTP Management</a>
+ <ul>
+ <li><a href="../cluster-http-management.html#project-info" class="header">Project Info</a></li>
+ <li><a href="../cluster-http-management.html#dependencies" class="header">Dependencies</a></li>
+ <li><a href="../cluster-http-management.html#running" class="header">Running</a></li>
+ <li><a href="../cluster-http-management.html#api-definition" class="header">API Definition</a></li>
+ <li><a href="../cluster-http-management.html#hosting-the-routes-in-an-existing-pekko-http-server" class="header">Hosting the routes in an existing Pekko HTTP server</a></li>
+ <li><a href="../cluster-http-management.html#disable-routes" class="header">Disable routes</a></li>
+ <li><a href="../cluster-http-management.html#health-checks" class="header">Health checks</a></li>
+ </ul></li>
+ <li><a href="../cluster-jmx-management.html" class="page">Built-in JMX Management</a></li>
+ <li><a href="../loglevels/index.html" class="page">Dynamic Log Levels</a>
+ <ul>
+ <li><a href="../loglevels/logback.html" class="page">Logback</a></li>
+ <li><a href="../loglevels/log4j2.html" class="page">Log4j2</a></li>
+ </ul></li>
+ <li><a href="../kubernetes-lease.html" class="page">Kubernetes Lease</a>
+ <ul>
+ <li><a href="../kubernetes-lease.html#lease-instances" class="header">Lease Instances</a></li>
+ <li><a href="../kubernetes-lease.html#configuring" class="header">Configuring</a></li>
+ <li><a href="../kubernetes-lease.html#f-a-q" class="header">F.A.Q</a></li>
+ </ul></li>
+</ul>
+
+<nav class="md-nav md-nav--secondary">
+</nav>
+
+
+<ul class="md-nav__list md-nav__links">
+<li class="md-nav__item"><a href="https://apache.org"><i class="md-icon">link</i> Apache Software Foundation</a></li>
+<li class="md-nav__item"><a href="https://apache.org/licenses/"><i class="md-icon">link</i> License</a></li>
+<li class="md-nav__item"><a href="https://apache.org/security/"><i class="md-icon">link</i> Security</a></li>
+<li class="md-nav__item"><a href="https://privacy.apache.org/policies/privacy-policy-public.html"><i class="md-icon">link</i> Privacy</a></li>
+<li class="md-nav__item"><a href="https://www.apache.org/events/current-event.html"><i class="md-icon">link</i> Events</a></li>
+<li class="md-nav__item"><a href="https://www.apache.org/foundation/sponsorship.html"><i class="md-icon">link</i> Donate</a></li>
+<li class="md-nav__item"><a href="https://www.apache.org/foundation/thanks.html"><i class="md-icon">link</i> Thanks</a></li>
+</ul>
+
+</nav>
+<ul style="display: none">
+<li class="md-nav__item md-version" id="project.version">
+<label class="md-nav__link" for="__version">
+<i class="md-icon" title="Version">label_outline</i> 0.0.0+714-a034fd01*
+</label>
+</li>
+</ul>
+
+</div>
+</div>
+</div>
+<div class="md-content">
+<article class="md-content__inner md-typeset">
+<div class="md-content__searchable">
+<h1><a href="#kubernetes-api" name="kubernetes-api" class="anchor"><span class="anchor-link"></span></a>Kubernetes API</h1>
+<p>The Kubernetes API can be used to discover peers and form a Pekko Cluster. The <code>kubernetes-api</code> mechanism queries the Kubernetes API server to find pods with a given label. A Kubernetes service isn’t required for the cluster bootstrap but may be used for external access to the application.</p>
+<p>The following Kubernetes resources are created:</p>
+<ul>
+ <li>Deployment: For creating the Pekko pods</li>
+ <li>Role and RoleBinding to give the pods access to the API server</li>
+</ul>
+<p>An example deployment (used for integration testing):</p>
+<pre class="prettyprint"><button class="snippet-button copy-snippet" title="Copy snippet to clipboard">copy</button><a class="snippet-button go-to-source" href="https://github.com/apache/incubator-pekko-management/tree/master/integration-test/kubernetes-api/kubernetes/pekko-cluster.yml#L2-L55" target="_blank" title="Go to snippet source">source</a><code class="language-yml">apiVersion: apps/v1
+kind: Deployment
+metadata:
+ labels:
+ app: pekko-bootstrap-demo
+ name: pekko-bootstrap-demo
+spec:
+ replicas: 3
+ selector:
+ matchLabels:
+ app: pekko-bootstrap-demo
+ strategy:
+ rollingUpdate:
+ maxSurge: 1
+ maxUnavailable: 0
+ type: RollingUpdate
+
+ template:
+ metadata:
+ labels:
+ app: pekko-bootstrap-demo
+ actorSystemName: pekko-bootstrap-demo
+ spec:
+ containers:
+ - name: pekko-bootstrap-demo
+ image: integration-test-kubernetes-api:1.3.3.7
+ # Remove for a real project, the image is picked up locally for the integratio test
+ imagePullPolicy: Never
+ livenessProbe:
+ httpGet:
+ path: /alive
+ port: management
+ readinessProbe:
+ httpGet:
+ path: /ready
+ port: management
+ ports:
+ # akka-management bootstrap
+ - containerPort: 8558
+ protocol: TCP
+ # when contact-point-discovery.port-name is set for cluster bootstrap,
+ # the management port must be named accordingly:
+ # name: management
+ env:
+ # The Kubernetes API discovery will use this service name to look for
+ # nodes with this value in the 'app' label.
+ # This can be customized with the 'pod-label-selector' setting.
+ - name: AKKA_CLUSTER_BOOTSTRAP_SERVICE_NAME
+ valueFrom:
+ fieldRef:
+ apiVersion: v1
+ fieldPath: "metadata.labels['app']"</code></pre>
+<p>An example <code>Role</code> and <code>Rolebinding</code> to allow the nodes to query the Kubernetes API server:</p>
+<pre class="prettyprint"><button class="snippet-button copy-snippet" title="Copy snippet to clipboard">copy</button><a class="snippet-button go-to-source" href="https://github.com/apache/incubator-pekko-management/tree/master/integration-test/kubernetes-api/kubernetes/pekko-cluster.yml#L59-L87" target="_blank" title="Go to snippet source">source</a><code class="language-yml">#
+# Create a role, `pod-reader`, that can list pods and
+# bind the default service account in the namespace
+# that the binding is deployed to to that role.
+#
+
+kind: Role
+apiVersion: rbac.authorization.k8s.io/v1
+metadata:
+ name: pod-reader
+rules:
+- apiGroups: [""] # "" indicates the core API group
+ resources: ["pods"]
+ verbs: ["get", "watch", "list"]
+---
+kind: RoleBinding
+apiVersion: rbac.authorization.k8s.io/v1
+metadata:
+ name: read-pods
+subjects:
+ # Uses the default service account.
+ # Consider creating a dedicated service account to run your
+ # Apache Pekko Cluster services and binding the role to that one.
+- kind: ServiceAccount
+ name: default
+roleRef:
+ kind: Role
+ name: pod-reader
+ apiGroup: rbac.authorization.k8s.io</code></pre>
+<p>The User name includes the namespace, this will need updated for your namespace.</p>
+<p>The following configuration is required:</p>
+<ul>
+ <li>Set <code>pekko.management.cluster.bootstrap.contact-point-discovery.discovery-method</code> to <code>kubernetes-api</code></li>
+ <li>Set <code>pekko.discovery.kubernetes-api.pod-label-selector</code> to a label selector that will match the Pekko pods e.g. <code>app=%s</code></li>
+</ul>
+<pre class="prettyprint"><button class="snippet-button copy-snippet" title="Copy snippet to clipboard">copy</button><a class="snippet-button go-to-source" href="https://github.com/apache/incubator-pekko-management/tree/master/integration-test/kubernetes-api/src/main/resources/application.conf#L11-L24" target="_blank" title="Go to snippet source">source</a><code class="language-conf">pekko.discovery {
+ kubernetes-api {
+ # in fact, this is already the default:
+ pod-label-selector = "app=%s"
+ }
+}
+
+pekko.management {
+ cluster.bootstrap {
+ contact-point-discovery {
+ discovery-method = kubernetes-api
+ }
+ }
+}</code></pre>
+<p>The lookup needs to know which namespace to look in. By default, this will be detected by reading the namespace from the service account secret, in <code>/var/run/secrets/kubernetes.io/serviceaccount/namespace</code>, but can be overridden by setting <code>pekko.discovery.kubernetes-api.pod-namespace</code>.</p>
+<p>For more details on how to configure the Kubernetes deployment see <a href="recipes.html">recipes</a>.</p>
+</div>
+<div>
+<a href="https://github.com/apache/incubator-pekko-management/tree/master/docs/src/main/paradox/bootstrap/kubernetes-api.md" title="Edit this page" class="md-source-file md-edit">
+Edit this page
+</a>
+</div>
+<div class="print-only">
+<span class="md-source-file md-version">
+0.0.0+714-a034fd01*
+</span>
+</div>
+</article>
+</div>
+</div>
+</main>
+<footer class="md-footer">
+<div class="md-footer-nav">
+<nav class="md-footer-nav__inner md-grid">
+<a href="../bootstrap/kubernetes.html" title="Kubernetes via DNS" class="md-flex md-footer-nav__link md-footer-nav__link--prev" rel="prev">
+<div class="md-flex__cell md-flex__cell--shrink">
+<i class="md-icon md-icon--arrow-back md-footer-nav__button"></i>
+</div>
+<div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
+<span class="md-flex__ellipsis">
+<span class="md-footer-nav__direction">
+Previous
+</span>
+Kubernetes via DNS
+</span>
+</div>
+</a>
+<a href="../bootstrap/istio.html" title="Istio" class="md-flex md-footer-nav__link md-footer-nav__link--next" rel="next">
+<div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
+<span class="md-flex__ellipsis">
+<span class="md-footer-nav__direction">
+Next
+</span>
+Istio
+</span>
+</div>
+<div class="md-flex__cell md-flex__cell--shrink">
+<i class="md-icon md-icon--arrow-forward md-footer-nav__button"></i>
+</div>
+</a>
+</nav>
+</div>
+<div class="md-footer-meta md-typeset">
+<div class="md-footer-meta__inner md-grid">
+<div class="md-footer-copyright">
+<div class="md-footer-copyright__highlight">
+Copyright © 2011-2022 <a href="https://www.lightbend.com/">Lightbend, Inc.</a>, © 2022, 2023
+ <a href="https://apache.org">The Apache Software Foundation</a>.
+ Apache Pekko, Pekko, and its feather logo are trademarks of The Apache Software Foundation.
+</div>
+Powered by
+<a href="https://github.com/lightbend/paradox">Paradox</a>
+and
+<a href="https://jonas.github.io/paradox-material-theme/">Paradox Material Theme</a>
+
+</div>
+</div>
+</div>
+</footer>
+
+</div>
+<script src="../assets/javascripts/application.583bbe55.js"></script>
+<script src="../assets/javascripts/paradox-material-theme.js"></script>
+<script>app.initialize({version:"0.17",url:{base:"../."}})</script>
+<script type="text/javascript" src="../lib/prettify/prettify.js"></script>
+<script type="text/javascript" src="../lib/prettify/lang-scala.js"></script>
+<script type="text/javascript" src="../lib/jquery/jquery.min.js"></script>
+<script type="text/javascript" src="../assets/javascripts/groups.js"></script>
+
+<script type="text/javascript">
+document.addEventListener("DOMContentLoaded", function(event) {
+window.prettyPrint && prettyPrint();
+});
+</script>
+</body>
+</html>
diff --git a/content/docs/pekko-management/current/main/bootstrap/kubernetes.html b/content/docs/pekko-management/current/main/bootstrap/kubernetes.html
new file mode 100644
index 00000000..5abb9048
--- /dev/null
+++ b/content/docs/pekko-management/current/main/bootstrap/kubernetes.html
@@ -0,0 +1,405 @@
+<!DOCTYPE html>
+<html lang="en" class="no-js">
+<head>
+<meta charset="utf-8">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta http-equiv="x-ua-compatible" content="ie=edge">
+<meta name="description" content="Apache Pekko Management is a suite of tools for operating Apache Pekko Clusters.">
+<meta name="generator" content="Paradox, paradox-material-theme=0.6.0, mkdocs-material=3.0.3">
+
+<meta name="lang:clipboard.copy" content="Copy to clipboard">
+<meta name="lang:clipboard.copied" content="Copied to clipboard">
+<meta name="lang:search.language" content="">
+<meta name="lang:search.pipeline.stopwords" content="true">
+<meta name="lang:search.pipeline.trimmer" content="true">
+<meta name="lang:search.result.none" content="No matching documents">
+<meta name="lang:search.result.one" content="1 matching document">
+<meta name="lang:search.result.other" content="# matching documents">
+<meta name="lang:search.tokenizer" content="[\s\-]+">
+
+
+<meta name="description" content="Apache Pekko Management is a suite of tools for operating Apache Pekko Clusters.">
+<link rel="shortcut icon" href="../assets/images/pekko_favicon.png">
+<title>Kubernetes via DNS · Apache Pekko Management</title>
+<link rel="stylesheet" href="../assets/stylesheets/application.451f80e5.css">
+<link rel="stylesheet" href="../assets/stylesheets/application-palette.22915126.css">
+<link rel="stylesheet" href="../lib/material__tabs/dist/mdc.tabs.min.css">
+<link rel="stylesheet" href="../lib/prettify/prettify.css">
+<script src="../assets/javascripts/modernizr.1aa3b519.js"></script>
+<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,400i,700|Roboto+Mono">
+<style>
+body,input{font-family:"Roboto","Helvetica Neue",Helvetica,Arial,sans-serif}
+code,kbd,pre{font-family:"Roboto Mono","Courier New",Courier,monospace}
+</style>
+<link rel="stylesheet" href="../assets/fonts/font-awesome.css">
+<link rel="stylesheet" href="../assets/fonts/material-icons.css">
+<link rel="stylesheet" href="../assets/stylesheets/paradox-material-theme.css">
+<link rel="stylesheet" href="../assets/stylesheets/pekko-theme.css">
+</head>
+<body
+data-md-color-primary="white"
+data-md-color-accent="orange"
+>
+<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
+<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
+<label class="md-overlay" data-md-component="overlay" for="__drawer"></label>
+<header class="md-header" data-md-component="header">
+<nav class="md-header-nav md-grid">
+<div class="md-flex">
+<div class="md-flex__cell md-flex__cell--shrink">
+<a href="../index.html" title="Apache Pekko Management" class="md-header-nav__button md-logo">
+<img src="../assets/images/pekko_logo.png" width="24" height="24">
+</a>
+</div>
+<div class="md-flex__cell md-flex__cell--shrink">
+<label class="md-icon md-icon--menu md-header-nav__button" for="__drawer"></label>
+</div>
+<div class="md-flex__cell md-flex__cell--stretch">
+<div class="md-flex__ellipsis md-header-nav__title" data-md-component="title">
+<span class="md-header-nav__topic">
+Apache Pekko Management
+</span>
+<span class="md-header-nav__topic">
+Kubernetes via DNS
+</span>
+</div>
+</div>
+<div class="md-flex__cell md-flex__cell--shrink">
+<label class="md-icon md-icon--search md-header-nav__button" for="__search"></label>
+<div class="md-search" data-md-component="search" role="dialog">
+<label class="md-search__overlay" for="__search"></label>
+<div class="md-search__inner" role="search">
+<form class="md-search__form" name="search">
+<input type="text" class="md-search__input" name="query" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="query" data-md-state="active">
+<label class="md-icon md-search__icon" for="__search"></label>
+<button type="reset" class="md-icon md-search__icon" data-md-component="reset" tabindex="-1"></button>
+</form>
+<div class="md-search__output">
+<div class="md-search__scrollwrap" data-md-scrollfix>
+<div class="md-search-result" data-md-component="result">
+<div class="md-search-result__meta">
+Type to start searching
+</div>
+<ol class="md-search-result__list"></ol>
+</div>
+</div>
+</div>
+</div>
+</div>
+
+</div>
+<div class="md-flex__cell md-flex__cell--shrink">
+<div class="md-header-nav__source">
+<a href="https://github.com/apache/incubator-pekko-management"
+title="Go to repository"
+class="md-source"
+data-md-source="github">
+<div class="md-source__icon">
+<i class="fa fa-github"></i>
+</div>
+<div class="md-source__repository">
+apache/incubator-pekko-management
+</div>
+</a>
+
+</div>
+</div>
+</div>
+</nav>
+</header>
+
+<div class="md-container">
+<main class="md-main">
+<div class="md-main__inner md-grid" data-md-component="container">
+<div class="md-sidebar md-sidebar--primary" data-md-component="navigation">
+<div class="md-sidebar__scrollwrap">
+<div class="md-sidebar__inner">
+<nav class="md-nav md-nav--primary" data-md-level="0" style="visibility: hidden">
+<label class="md-nav__title md-nav__title--site" for="drawer">
+<a href="../index.html" title="Apache Pekko Management" class="md-nav__button md-logo">
+<span class="md-nav__button md-logo">
+<img src="../assets/images/pekko_logo.png" width="24" height="24">
+</a>
+<a href="../index.html" title="Apache Pekko Management">
+Apache Pekko Management
+</a>
+</label>
+<div class="md-nav__source">
+<a href="https://github.com/apache/incubator-pekko-management"
+title="Go to repository"
+class="md-source"
+data-md-source="github">
+<div class="md-source__icon">
+<i class="fa fa-github"></i>
+</div>
+<div class="md-source__repository">
+apache/incubator-pekko-management
+</div>
+</a>
+
+</div>
+<select class="supergroup" name="Language"><option class="group" value="group-java">Java</option><option class="group" value="group-scala">Scala</option></select>
+<ul>
+ <li><a href="../index.html#overview" class="header">Overview</a></li>
+ <li><a href="../kubernetes-deployment/index.html" class="page">Deploying Pekko Cluster to Kubernetes</a>
+ <ul>
+ <li><a href="../kubernetes-deployment/preparing-for-production.html" class="page">Preparing for production</a></li>
+ <li><a href="../kubernetes-deployment/forming-a-cluster.html" class="page">Forming an Pekko Cluster</a></li>
+ <li><a href="../kubernetes-deployment/building.html" class="page">Building the application</a></li>
+ <li><a href="../kubernetes-deployment/deploying.html" class="page">Deploying</a></li>
+ </ul></li>
+ <li><a href="../pekko-management.html" class="page">Apache Pekko Management</a>
+ <ul>
+ <li><a href="../pekko-management.html#project-info" class="header">Project Info</a></li>
+ <li><a href="../pekko-management.html#dependencies" class="header">Dependencies</a></li>
+ <li><a href="../pekko-management.html#basic-usage" class="header">Basic Usage</a></li>
+ <li><a href="../pekko-management.html#basic-configuration" class="header">Basic Configuration</a></li>
+ <li><a href="../pekko-management.html#read-only-routes" class="header">Read only routes</a></li>
+ <li><a href="../pekko-management.html#configuring-security" class="header">Configuring Security</a></li>
+ <li><a href="../pekko-management.html#stopping-pekko-management" class="header">Stopping Pekko Management</a></li>
+ <li><a href="../pekko-management.html#developing-extensions" class="header">Developing Extensions</a></li>
+ </ul></li>
+ <li><a href="../migration.html" class="page">Migration guide</a>
+ <ul>
+ <li><a href="../migration.html#1-0" class="header">1.0</a></li>
+ </ul></li>
+ <li><a href="../healthchecks.html" class="page">Health checks</a>
+ <ul>
+ <li><a href="../healthchecks.html#defining-a-health-check" class="header">Defining a Health Check</a></li>
+ <li><a href="../healthchecks.html#configuring-health-checks" class="header">Configuring health checks</a></li>
+ <li><a href="../healthchecks.html#hosting-health-checks-as-an-pekko-management-route" class="header">Hosting health checks as an Pekko Management Route</a></li>
+ </ul></li>
+ <li><a href="../bootstrap/index.html" class="page">Apache Pekko Cluster Bootstrap</a>
+ <ul>
+ <li><a href="../bootstrap/index.html#prerequisites" class="header">Prerequisites</a></li>
+ <li><a href="../bootstrap/index.html#project-info" class="header">Project Info</a></li>
+ <li><a href="../bootstrap/index.html#dependency" class="header">Dependency</a></li>
+ <li><a href="../bootstrap/index.html#using" class="header">Using</a></li>
+ <li><a href="../bootstrap/index.html#how-it-works" class="header">How It Works</a></li>
+ <li><a href="../bootstrap/index.html#joining-mechanism-precedence" class="header">Joining Mechanism Precedence</a></li>
+ <li><a href="../bootstrap/index.html#deployment-considerations" class="header">Deployment considerations</a></li>
+ <li><a href="../bootstrap/index.html#bootstrap-recipes" class="header">Bootstrap Recipes</a></li>
+ <li><a href="../bootstrap/recipes.html" class="page">Bootstrap environments</a></li>
+ <li><a href="../bootstrap/details.html" class="page">Bootstrap process</a></li>
+ <li><a href="../bootstrap/troubleshooting.html" class="page">Troubleshooting</a></li>
+ <li><a href="../bootstrap/local-config.html" class="page">Local using config</a></li>
+ <li><a href="../bootstrap/kubernetes.html#kubernetes-via-dns" class="active page">Kubernetes via DNS</a></li>
+ <li><a href="../bootstrap/kubernetes-api.html" class="page">Kubernetes API</a></li>
+ <li><a href="../bootstrap/istio.html" class="page">Istio</a></li>
+ </ul></li>
+ <li><a href="../discovery/index.html" class="page">Apache Pekko Discovery Methods</a>
+ <ul>
+ <li><a href="../discovery/kubernetes.html" class="page">Kubernetes API</a></li>
+ <li><a href="../discovery/consul.html" class="page">Consul</a></li>
+ <li><a href="../discovery/marathon.html" class="page">Marathon API</a></li>
+ <li><a href="../discovery/aws.html" class="page">AWS API</a></li>
+ </ul></li>
+ <li><a href="../cluster-http-management.html" class="page">Cluster HTTP Management</a>
+ <ul>
+ <li><a href="../cluster-http-management.html#project-info" class="header">Project Info</a></li>
+ <li><a href="../cluster-http-management.html#dependencies" class="header">Dependencies</a></li>
+ <li><a href="../cluster-http-management.html#running" class="header">Running</a></li>
+ <li><a href="../cluster-http-management.html#api-definition" class="header">API Definition</a></li>
+ <li><a href="../cluster-http-management.html#hosting-the-routes-in-an-existing-pekko-http-server" class="header">Hosting the routes in an existing Pekko HTTP server</a></li>
+ <li><a href="../cluster-http-management.html#disable-routes" class="header">Disable routes</a></li>
+ <li><a href="../cluster-http-management.html#health-checks" class="header">Health checks</a></li>
+ </ul></li>
+ <li><a href="../cluster-jmx-management.html" class="page">Built-in JMX Management</a></li>
+ <li><a href="../loglevels/index.html" class="page">Dynamic Log Levels</a>
+ <ul>
+ <li><a href="../loglevels/logback.html" class="page">Logback</a></li>
+ <li><a href="../loglevels/log4j2.html" class="page">Log4j2</a></li>
+ </ul></li>
+ <li><a href="../kubernetes-lease.html" class="page">Kubernetes Lease</a>
+ <ul>
+ <li><a href="../kubernetes-lease.html#lease-instances" class="header">Lease Instances</a></li>
+ <li><a href="../kubernetes-lease.html#configuring" class="header">Configuring</a></li>
+ <li><a href="../kubernetes-lease.html#f-a-q" class="header">F.A.Q</a></li>
+ </ul></li>
+</ul>
+
+<nav class="md-nav md-nav--secondary">
+<label class="md-nav__title" for="__toc">Table of contents</label>
+<ul>
+ <li><a href="../bootstrap/kubernetes.html#kubernetes-via-dns" class="header">Kubernetes via DNS</a>
+ <ul>
+ <li><a href="../bootstrap/kubernetes.html#internal-headless-service-for-bootstrap" class="header">Internal headless service for bootstrap</a></li>
+ </ul></li>
+</ul>
+</nav>
+
+
+<ul class="md-nav__list md-nav__links">
+<li class="md-nav__item"><a href="https://apache.org"><i class="md-icon">link</i> Apache Software Foundation</a></li>
+<li class="md-nav__item"><a href="https://apache.org/licenses/"><i class="md-icon">link</i> License</a></li>
+<li class="md-nav__item"><a href="https://apache.org/security/"><i class="md-icon">link</i> Security</a></li>
+<li class="md-nav__item"><a href="https://privacy.apache.org/policies/privacy-policy-public.html"><i class="md-icon">link</i> Privacy</a></li>
+<li class="md-nav__item"><a href="https://www.apache.org/events/current-event.html"><i class="md-icon">link</i> Events</a></li>
+<li class="md-nav__item"><a href="https://www.apache.org/foundation/sponsorship.html"><i class="md-icon">link</i> Donate</a></li>
+<li class="md-nav__item"><a href="https://www.apache.org/foundation/thanks.html"><i class="md-icon">link</i> Thanks</a></li>
+</ul>
+
+</nav>
+<ul style="display: none">
+<li class="md-nav__item md-version" id="project.version">
+<label class="md-nav__link" for="__version">
+<i class="md-icon" title="Version">label_outline</i> 0.0.0+714-a034fd01*
+</label>
+</li>
+</ul>
+
+</div>
+</div>
+</div>
+<div class="md-sidebar md-sidebar--secondary" data-md-component="toc">
+<div class="md-sidebar__scrollwrap">
+<div class="md-sidebar__inner">
+<nav class="md-nav md-nav--secondary">
+<label class="md-nav__title" for="__toc">Table of contents</label>
+<ul>
+ <li><a href="../bootstrap/kubernetes.html#kubernetes-via-dns" class="header">Kubernetes via DNS</a>
+ <ul>
+ <li><a href="../bootstrap/kubernetes.html#internal-headless-service-for-bootstrap" class="header">Internal headless service for bootstrap</a></li>
+ </ul></li>
+</ul>
+</nav>
+
+</div>
+</div>
+</div>
+<div class="md-content">
+<article class="md-content__inner md-typeset">
+<div class="md-content__searchable">
+<h1><a href="#kubernetes-via-dns" name="kubernetes-via-dns" class="anchor"><span class="anchor-link"></span></a>Kubernetes via DNS</h1>
+<p>An example project that can be deployed to kubernetes via <code>minikube</code> is in <code>integration-test/kubernetes-dns</code>.</p>
+<p>The project shows how to:</p>
+<ul>
+ <li>Use Pekko Bootstrap with <code>pekko-dns</code> with cluster formation via DNS SRV records</li>
+ <li>Use a headless service for internal and Pekko management/bootstrap so that readiness probes for prod traffic don’t interfere with bootstrap
+ <ul>
+ <li>Note that this requires the use of the <code>publishNotReadyAddresses</code>, which replaces the <code>service.alpha.kubernetes.io/tolerate-unready-endpoints: "true"</code> annotation , so bootstrap can see the pods before they are ready. Check your Kubernetes environment supports this feature</li>
+ </ul>
+ </li>
+ <li>If required use a separate service and/or ingress for user-facing endpoints, for example <a href="https://pekko.apache.org/docs/pekko-http/current/">HTTP</a> or <a href="https://pekko.apache.org/docs/pekko-grpc/current/">gRPC</a></li>
+</ul>
+<h3><a href="#internal-headless-service-for-bootstrap" name="internal-headless-service-for-bootstrap" class="anchor"><span class="anchor-link"></span></a>Internal headless service for bootstrap</h3>
+<p>For Pekko Cluster / Management use a headless service. This allows the solution to not be coupled to k8s as well as there is no use case for load balancing across management/remoting ports. Set endpoints to be published before readiness checks pass as these endpoints are required to bootstrap the Cluster and make the application ready.</p>
+<pre class="prettyprint"><button class="snippet-button copy-snippet" title="Copy snippet to clipboard">copy</button><a class="snippet-button go-to-source" href="https://github.com/apache/incubator-pekko-management/tree/master/integration-test/kubernetes-dns/kubernetes/pekko-cluster.yml#L61-L82" target="_blank" title="Go to snippet source">source</a><code class="language-yml">apiVersion: v1
+kind: Service
+metadata:
+ labels:
+ app: pekko-bootstrap-demo
+ annotations:
+ service.alpha.kubernetes.io/tolerate-unready-endpoints: "true"
+ name: "integration-test-kubernetes-dns-internal"
+spec:
+ ports:
+ - name: management
+ port: 8558
+ protocol: TCP
+ targetPort: 8558
+ - name: remoting
+ port: 2552
+ protocol: TCP
+ targetPort: 2552
+ selector:
+ app: pekko-bootstrap-demo
+ clusterIP: None
+ publishNotReadyAddresses: true</code></pre>
+<p>Note there are currently two ways to specify that addresses should be published if not ready, the initial way via an annotation <code>service.alpha.kubernetes.io/tolerate-unready-endpoints</code> and via the new officially supported way as the property <code>publishNotReadyAddresses</code>. Set both as depending on your DNS solution it may have not migrated from the annotation to the property.</p>
+<p>This will result in SRV records being published for the service that contain the nodes that are not ready. This allows bootstrap to find them and form the cluster thus making them ready.</p>
+<p>Then to configure your application:</p>
+<pre class="prettyprint"><button class="snippet-button copy-snippet" title="Copy snippet to clipboard">copy</button><a class="snippet-button go-to-source" href="https://github.com/apache/incubator-pekko-management/tree/master/integration-test/kubernetes-dns/src/main/resources/application.conf#L16-L27" target="_blank" title="Go to snippet source">source</a><code class="language-conf">pekko.management {
+ cluster.bootstrap {
+ contact-point-discovery {
+ discovery-method = pekko-dns
+ }
+ }
+
+ http {
+ port = 8558
+ bind-hostname = "0.0.0.0"
+ }
+}</code></pre>
+<p>The same configuration will work for any environment that has an SRV record for your Pekko Clustered application.</p>
+<p>For more details on how to configure the Kubernetes deployment see <a href="recipes.html">recipes</a>.</p>
+</div>
+<div>
+<a href="https://github.com/apache/incubator-pekko-management/tree/master/docs/src/main/paradox/bootstrap/kubernetes.md" title="Edit this page" class="md-source-file md-edit">
+Edit this page
+</a>
+</div>
+<div class="print-only">
+<span class="md-source-file md-version">
+0.0.0+714-a034fd01*
+</span>
+</div>
+</article>
+</div>
+</div>
+</main>
+<footer class="md-footer">
+<div class="md-footer-nav">
+<nav class="md-footer-nav__inner md-grid">
+<a href="../bootstrap/local-config.html" title="Local using config" class="md-flex md-footer-nav__link md-footer-nav__link--prev" rel="prev">
+<div class="md-flex__cell md-flex__cell--shrink">
+<i class="md-icon md-icon--arrow-back md-footer-nav__button"></i>
+</div>
+<div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
+<span class="md-flex__ellipsis">
+<span class="md-footer-nav__direction">
+Previous
+</span>
+Local using config
+</span>
+</div>
+</a>
+<a href="../bootstrap/kubernetes-api.html" title="Kubernetes API" class="md-flex md-footer-nav__link md-footer-nav__link--next" rel="next">
+<div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
+<span class="md-flex__ellipsis">
+<span class="md-footer-nav__direction">
+Next
+</span>
+Kubernetes API
+</span>
+</div>
+<div class="md-flex__cell md-flex__cell--shrink">
+<i class="md-icon md-icon--arrow-forward md-footer-nav__button"></i>
+</div>
+</a>
+</nav>
+</div>
+<div class="md-footer-meta md-typeset">
+<div class="md-footer-meta__inner md-grid">
+<div class="md-footer-copyright">
+<div class="md-footer-copyright__highlight">
+Copyright © 2011-2022 <a href="https://www.lightbend.com/">Lightbend, Inc.</a>, © 2022, 2023
+ <a href="https://apache.org">The Apache Software Foundation</a>.
+ Apache Pekko, Pekko, and its feather logo are trademarks of The Apache Software Foundation.
+</div>
+Powered by
+<a href="https://github.com/lightbend/paradox">Paradox</a>
+and
+<a href="https://jonas.github.io/paradox-material-theme/">Paradox Material Theme</a>
+
+</div>
+</div>
+</div>
+</footer>
+
+</div>
+<script src="../assets/javascripts/application.583bbe55.js"></script>
+<script src="../assets/javascripts/paradox-material-theme.js"></script>
+<script>app.initialize({version:"0.17",url:{base:"../."}})</script>
+<script type="text/javascript" src="../lib/prettify/prettify.js"></script>
+<script type="text/javascript" src="../lib/prettify/lang-scala.js"></script>
+<script type="text/javascript" src="../lib/jquery/jquery.min.js"></script>
+<script type="text/javascript" src="../assets/javascripts/groups.js"></script>
+
+<script type="text/javascript">
+document.addEventListener("DOMContentLoaded", function(event) {
+window.prettyPrint && prettyPrint();
+});
+</script>
+</body>
+</html>
diff --git a/content/docs/pekko-management/current/main/bootstrap/local-config.html b/content/docs/pekko-management/current/main/bootstrap/local-config.html
new file mode 100644
index 00000000..339cb1c5
--- /dev/null
+++ b/content/docs/pekko-management/current/main/bootstrap/local-config.html
@@ -0,0 +1,408 @@
+<!DOCTYPE html>
+<html lang="en" class="no-js">
+<head>
+<meta charset="utf-8">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta http-equiv="x-ua-compatible" content="ie=edge">
+<meta name="description" content="Apache Pekko Management is a suite of tools for operating Apache Pekko Clusters.">
+<meta name="generator" content="Paradox, paradox-material-theme=0.6.0, mkdocs-material=3.0.3">
+
+<meta name="lang:clipboard.copy" content="Copy to clipboard">
+<meta name="lang:clipboard.copied" content="Copied to clipboard">
+<meta name="lang:search.language" content="">
+<meta name="lang:search.pipeline.stopwords" content="true">
+<meta name="lang:search.pipeline.trimmer" content="true">
+<meta name="lang:search.result.none" content="No matching documents">
+<meta name="lang:search.result.one" content="1 matching document">
+<meta name="lang:search.result.other" content="# matching documents">
+<meta name="lang:search.tokenizer" content="[\s\-]+">
+
+
+<meta name="description" content="Apache Pekko Management is a suite of tools for operating Apache Pekko Clusters.">
+<link rel="shortcut icon" href="../assets/images/pekko_favicon.png">
+<title>Local using config · Apache Pekko Management</title>
+<link rel="stylesheet" href="../assets/stylesheets/application.451f80e5.css">
+<link rel="stylesheet" href="../assets/stylesheets/application-palette.22915126.css">
+<link rel="stylesheet" href="../lib/material__tabs/dist/mdc.tabs.min.css">
+<link rel="stylesheet" href="../lib/prettify/prettify.css">
+<script src="../assets/javascripts/modernizr.1aa3b519.js"></script>
+<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,400i,700|Roboto+Mono">
+<style>
+body,input{font-family:"Roboto","Helvetica Neue",Helvetica,Arial,sans-serif}
+code,kbd,pre{font-family:"Roboto Mono","Courier New",Courier,monospace}
+</style>
+<link rel="stylesheet" href="../assets/fonts/font-awesome.css">
+<link rel="stylesheet" href="../assets/fonts/material-icons.css">
+<link rel="stylesheet" href="../assets/stylesheets/paradox-material-theme.css">
+<link rel="stylesheet" href="../assets/stylesheets/pekko-theme.css">
+</head>
+<body
+data-md-color-primary="white"
+data-md-color-accent="orange"
+>
+<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
+<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
+<label class="md-overlay" data-md-component="overlay" for="__drawer"></label>
+<header class="md-header" data-md-component="header">
+<nav class="md-header-nav md-grid">
+<div class="md-flex">
+<div class="md-flex__cell md-flex__cell--shrink">
+<a href="../index.html" title="Apache Pekko Management" class="md-header-nav__button md-logo">
+<img src="../assets/images/pekko_logo.png" width="24" height="24">
+</a>
+</div>
+<div class="md-flex__cell md-flex__cell--shrink">
+<label class="md-icon md-icon--menu md-header-nav__button" for="__drawer"></label>
+</div>
+<div class="md-flex__cell md-flex__cell--stretch">
+<div class="md-flex__ellipsis md-header-nav__title" data-md-component="title">
+<span class="md-header-nav__topic">
+Apache Pekko Management
+</span>
+<span class="md-header-nav__topic">
+Local using config
+</span>
+</div>
+</div>
+<div class="md-flex__cell md-flex__cell--shrink">
+<label class="md-icon md-icon--search md-header-nav__button" for="__search"></label>
+<div class="md-search" data-md-component="search" role="dialog">
+<label class="md-search__overlay" for="__search"></label>
+<div class="md-search__inner" role="search">
+<form class="md-search__form" name="search">
+<input type="text" class="md-search__input" name="query" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="query" data-md-state="active">
+<label class="md-icon md-search__icon" for="__search"></label>
+<button type="reset" class="md-icon md-search__icon" data-md-component="reset" tabindex="-1"></button>
+</form>
+<div class="md-search__output">
+<div class="md-search__scrollwrap" data-md-scrollfix>
+<div class="md-search-result" data-md-component="result">
+<div class="md-search-result__meta">
+Type to start searching
+</div>
+<ol class="md-search-result__list"></ol>
+</div>
+</div>
+</div>
+</div>
+</div>
+
+</div>
+<div class="md-flex__cell md-flex__cell--shrink">
+<div class="md-header-nav__source">
+<a href="https://github.com/apache/incubator-pekko-management"
+title="Go to repository"
+class="md-source"
+data-md-source="github">
+<div class="md-source__icon">
+<i class="fa fa-github"></i>
+</div>
+<div class="md-source__repository">
+apache/incubator-pekko-management
+</div>
+</a>
+
+</div>
+</div>
+</div>
+</nav>
+</header>
+
+<div class="md-container">
+<main class="md-main">
+<div class="md-main__inner md-grid" data-md-component="container">
+<div class="md-sidebar md-sidebar--primary" data-md-component="navigation">
+<div class="md-sidebar__scrollwrap">
+<div class="md-sidebar__inner">
+<nav class="md-nav md-nav--primary" data-md-level="0" style="visibility: hidden">
+<label class="md-nav__title md-nav__title--site" for="drawer">
+<a href="../index.html" title="Apache Pekko Management" class="md-nav__button md-logo">
+<span class="md-nav__button md-logo">
+<img src="../assets/images/pekko_logo.png" width="24" height="24">
+</a>
+<a href="../index.html" title="Apache Pekko Management">
+Apache Pekko Management
+</a>
+</label>
+<div class="md-nav__source">
+<a href="https://github.com/apache/incubator-pekko-management"
+title="Go to repository"
+class="md-source"
+data-md-source="github">
+<div class="md-source__icon">
+<i class="fa fa-github"></i>
+</div>
+<div class="md-source__repository">
+apache/incubator-pekko-management
+</div>
+</a>
+
+</div>
+<select class="supergroup" name="Language"><option class="group" value="group-java">Java</option><option class="group" value="group-scala">Scala</option></select>
+<ul>
+ <li><a href="../index.html#overview" class="header">Overview</a></li>
+ <li><a href="../kubernetes-deployment/index.html" class="page">Deploying Pekko Cluster to Kubernetes</a>
+ <ul>
+ <li><a href="../kubernetes-deployment/preparing-for-production.html" class="page">Preparing for production</a></li>
+ <li><a href="../kubernetes-deployment/forming-a-cluster.html" class="page">Forming an Pekko Cluster</a></li>
+ <li><a href="../kubernetes-deployment/building.html" class="page">Building the application</a></li>
+ <li><a href="../kubernetes-deployment/deploying.html" class="page">Deploying</a></li>
+ </ul></li>
+ <li><a href="../pekko-management.html" class="page">Apache Pekko Management</a>
+ <ul>
+ <li><a href="../pekko-management.html#project-info" class="header">Project Info</a></li>
+ <li><a href="../pekko-management.html#dependencies" class="header">Dependencies</a></li>
+ <li><a href="../pekko-management.html#basic-usage" class="header">Basic Usage</a></li>
+ <li><a href="../pekko-management.html#basic-configuration" class="header">Basic Configuration</a></li>
+ <li><a href="../pekko-management.html#read-only-routes" class="header">Read only routes</a></li>
+ <li><a href="../pekko-management.html#configuring-security" class="header">Configuring Security</a></li>
+ <li><a href="../pekko-management.html#stopping-pekko-management" class="header">Stopping Pekko Management</a></li>
+ <li><a href="../pekko-management.html#developing-extensions" class="header">Developing Extensions</a></li>
+ </ul></li>
+ <li><a href="../migration.html" class="page">Migration guide</a>
+ <ul>
+ <li><a href="../migration.html#1-0" class="header">1.0</a></li>
+ </ul></li>
+ <li><a href="../healthchecks.html" class="page">Health checks</a>
+ <ul>
+ <li><a href="../healthchecks.html#defining-a-health-check" class="header">Defining a Health Check</a></li>
+ <li><a href="../healthchecks.html#configuring-health-checks" class="header">Configuring health checks</a></li>
+ <li><a href="../healthchecks.html#hosting-health-checks-as-an-pekko-management-route" class="header">Hosting health checks as an Pekko Management Route</a></li>
+ </ul></li>
+ <li><a href="../bootstrap/index.html" class="page">Apache Pekko Cluster Bootstrap</a>
+ <ul>
+ <li><a href="../bootstrap/index.html#prerequisites" class="header">Prerequisites</a></li>
+ <li><a href="../bootstrap/index.html#project-info" class="header">Project Info</a></li>
+ <li><a href="../bootstrap/index.html#dependency" class="header">Dependency</a></li>
+ <li><a href="../bootstrap/index.html#using" class="header">Using</a></li>
+ <li><a href="../bootstrap/index.html#how-it-works" class="header">How It Works</a></li>
+ <li><a href="../bootstrap/index.html#joining-mechanism-precedence" class="header">Joining Mechanism Precedence</a></li>
+ <li><a href="../bootstrap/index.html#deployment-considerations" class="header">Deployment considerations</a></li>
+ <li><a href="../bootstrap/index.html#bootstrap-recipes" class="header">Bootstrap Recipes</a></li>
+ <li><a href="../bootstrap/recipes.html" class="page">Bootstrap environments</a></li>
+ <li><a href="../bootstrap/details.html" class="page">Bootstrap process</a></li>
+ <li><a href="../bootstrap/troubleshooting.html" class="page">Troubleshooting</a></li>
+ <li><a href="../bootstrap/local-config.html#local-using-config" class="active page">Local using config</a></li>
+ <li><a href="../bootstrap/kubernetes.html" class="page">Kubernetes via DNS</a></li>
+ <li><a href="../bootstrap/kubernetes-api.html" class="page">Kubernetes API</a></li>
+ <li><a href="../bootstrap/istio.html" class="page">Istio</a></li>
+ </ul></li>
+ <li><a href="../discovery/index.html" class="page">Apache Pekko Discovery Methods</a>
+ <ul>
+ <li><a href="../discovery/kubernetes.html" class="page">Kubernetes API</a></li>
+ <li><a href="../discovery/consul.html" class="page">Consul</a></li>
+ <li><a href="../discovery/marathon.html" class="page">Marathon API</a></li>
+ <li><a href="../discovery/aws.html" class="page">AWS API</a></li>
+ </ul></li>
+ <li><a href="../cluster-http-management.html" class="page">Cluster HTTP Management</a>
+ <ul>
+ <li><a href="../cluster-http-management.html#project-info" class="header">Project Info</a></li>
+ <li><a href="../cluster-http-management.html#dependencies" class="header">Dependencies</a></li>
+ <li><a href="../cluster-http-management.html#running" class="header">Running</a></li>
+ <li><a href="../cluster-http-management.html#api-definition" class="header">API Definition</a></li>
+ <li><a href="../cluster-http-management.html#hosting-the-routes-in-an-existing-pekko-http-server" class="header">Hosting the routes in an existing Pekko HTTP server</a></li>
+ <li><a href="../cluster-http-management.html#disable-routes" class="header">Disable routes</a></li>
+ <li><a href="../cluster-http-management.html#health-checks" class="header">Health checks</a></li>
+ </ul></li>
+ <li><a href="../cluster-jmx-management.html" class="page">Built-in JMX Management</a></li>
+ <li><a href="../loglevels/index.html" class="page">Dynamic Log Levels</a>
+ <ul>
+ <li><a href="../loglevels/logback.html" class="page">Logback</a></li>
+ <li><a href="../loglevels/log4j2.html" class="page">Log4j2</a></li>
+ </ul></li>
+ <li><a href="../kubernetes-lease.html" class="page">Kubernetes Lease</a>
+ <ul>
+ <li><a href="../kubernetes-lease.html#lease-instances" class="header">Lease Instances</a></li>
+ <li><a href="../kubernetes-lease.html#configuring" class="header">Configuring</a></li>
+ <li><a href="../kubernetes-lease.html#f-a-q" class="header">F.A.Q</a></li>
+ </ul></li>
+</ul>
+
+<nav class="md-nav md-nav--secondary">
+</nav>
+
+
+<ul class="md-nav__list md-nav__links">
+<li class="md-nav__item"><a href="https://apache.org"><i class="md-icon">link</i> Apache Software Foundation</a></li>
+<li class="md-nav__item"><a href="https://apache.org/licenses/"><i class="md-icon">link</i> License</a></li>
+<li class="md-nav__item"><a href="https://apache.org/security/"><i class="md-icon">link</i> Security</a></li>
+<li class="md-nav__item"><a href="https://privacy.apache.org/policies/privacy-policy-public.html"><i class="md-icon">link</i> Privacy</a></li>
+<li class="md-nav__item"><a href="https://www.apache.org/events/current-event.html"><i class="md-icon">link</i> Events</a></li>
+<li class="md-nav__item"><a href="https://www.apache.org/foundation/sponsorship.html"><i class="md-icon">link</i> Donate</a></li>
+<li class="md-nav__item"><a href="https://www.apache.org/foundation/thanks.html"><i class="md-icon">link</i> Thanks</a></li>
+</ul>
+
+</nav>
+<ul style="display: none">
+<li class="md-nav__item md-version" id="project.version">
+<label class="md-nav__link" for="__version">
+<i class="md-icon" title="Version">label_outline</i> 0.0.0+714-a034fd01*
+</label>
+</li>
+</ul>
+
+</div>
+</div>
+</div>
+<div class="md-content">
+<article class="md-content__inner md-typeset">
+<div class="md-content__searchable">
+<h1><a href="#local-using-config" name="local-using-config" class="anchor"><span class="anchor-link"></span></a>Local using config</h1>
+<p><a href="https://pekko.apache.org/docs/pekko/current/discovery/index.html#discovery-method-configuration">Configuration</a> based discovery can be used to see the Cluster Bootstrap process run locally within an IDE or from the command line.</p>
+<p>To use <code>config</code> service discovery set the following configuration:</p>
+<ul>
+ <li><code>pekko.management.cluster.bootstrap.contact-point-discovery.discovery-method</code> to <code>config</code></li>
+ <li><code>pekko.discovery.config.services.[cluster-name]</code> to the endpoinds of the Pekko nodes</li>
+</ul>
+<p>For example:</p>
+<pre class="prettyprint"><button class="snippet-button copy-snippet" title="Copy snippet to clipboard">copy</button><a class="snippet-button go-to-source" href="https://github.com/apache/incubator-pekko-management/tree/master/integration-test/local/src/main/resources/application.conf#L27-L46" target="_blank" title="Go to snippet source">source</a><code class="language-conf">pekko.discovery {
+ config.services = {
+ local-cluster = {
+ endpoints = [
+ {
+ host = "127.0.0.1"
+ port = 8558
+ },
+ {
+ host = "127.0.0.2"
+ port = 8558
+ },
+ {
+ host = "127.0.0.3"
+ port = 8558
+ }
+ ]
+ }
+ }
+}</code></pre>
+<p>This configuration will return three endpoints for a service called <code>local-cluster</code>.</p>
+<p>Pekko bootstrap is then configured to lookup <code>local-cluster</code> in the <code>config</code>:</p>
+<pre class="prettyprint"><button class="snippet-button copy-snippet" title="Copy snippet to clipboard">copy</button><a class="snippet-button go-to-source" href="https://github.com/apache/incubator-pekko-management/tree/master/integration-test/local/src/main/resources/application.conf#L61-L68" target="_blank" title="Go to snippet source">source</a><code class="language-conf">pekko.management {
+ cluster.bootstrap {
+ contact-point-discovery {
+ service-name = "local-cluster"
+ discovery-method = config
+ }
+ }
+}</code></pre>
+<p>Three main methods can be run, only overriding the host so the ActorSystem’s can all bind to the same port:</p>
+<pre class="prettyprint"><button class="snippet-button copy-snippet" title="Copy snippet to clipboard">copy</button><a class="snippet-button go-to-source" href="https://github.com/apache/incubator-pekko-management/tree/master/integration-test/local/src/main/scala/org/apache/pekko/cluster/bootstrap/Main.scala#L24-L51" target="_blank" title="Go to snippet source">source</a><code class="language-scala">object Node1 extends App {
+ new Main(1)
+}
+
+object Node2 extends App {
+ new Main(2)
+}
+
+object Node3 extends App {
+ new Main(3)
+}
+
+class Main(nr: Int) {
+
+ val config: Config = ConfigFactory.parseString(s"""
+ pekko.remote.artery.canonical.hostname = "127.0.0.$nr"
+ pekko.management.http.hostname = "127.0.0.$nr"
+ """).withFallback(ConfigFactory.load())
+ val system = ActorSystem("local-cluster", config)
+
+ PekkoManagement(system).start()
+
+ ClusterBootstrap(system).start()
+
+ Cluster(system).registerOnMemberUp {
+ system.log.info("Cluster is up!")
+ }
+}</code></pre>
+<p>The example uses three loopback addresses: <code>127.0.0.2-4</code>. On Mac you’ll need to set these up:</p>
+<pre><code>sudo ifconfig lo0 alias 127.0.0.2 up
+sudo ifconfig lo0 alias 127.0.0.3 up
+sudo ifconfig lo0 alias 127.0.0.4 up
+</code></pre>
+<p>On Linux this should not be required.</p>
+<p>Run the three mains: <code>Node1</code>, <code>Node2</code> and <code>Node3</code> and they will form a cluster either in your IDE or from the command line:</p>
+<pre><code>sbt "integration-test-local/runMain org.apache.pekko.cluster.bootstrap.Node1"
+sbt "integration-test-local/runMain org.apache.pekko.cluster.bootstrap.Node2"
+sbt "integration-test-local/runMain org.apache.pekko.cluster.bootstrap.Node3"
+</code></pre>
+<p>The first time one of the Nodes will form a new cluster and the others will join. Any subsequent restarts then the node will discover a cluster already exists and join.</p>
+</div>
+<div>
+<a href="https://github.com/apache/incubator-pekko-management/tree/master/docs/src/main/paradox/bootstrap/local-config.md" title="Edit this page" class="md-source-file md-edit">
+Edit this page
+</a>
+</div>
+<div class="print-only">
+<span class="md-source-file md-version">
+0.0.0+714-a034fd01*
+</span>
+</div>
+</article>
+</div>
+</div>
+</main>
+<footer class="md-footer">
+<div class="md-footer-nav">
+<nav class="md-footer-nav__inner md-grid">
+<a href="../bootstrap/troubleshooting.html" title="Troubleshooting" class="md-flex md-footer-nav__link md-footer-nav__link--prev" rel="prev">
+<div class="md-flex__cell md-flex__cell--shrink">
+<i class="md-icon md-icon--arrow-back md-footer-nav__button"></i>
+</div>
+<div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
+<span class="md-flex__ellipsis">
+<span class="md-footer-nav__direction">
+Previous
+</span>
+Troubleshooting
+</span>
+</div>
+</a>
+<a href="../bootstrap/kubernetes.html" title="Kubernetes via DNS" class="md-flex md-footer-nav__link md-footer-nav__link--next" rel="next">
+<div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
+<span class="md-flex__ellipsis">
+<span class="md-footer-nav__direction">
+Next
+</span>
+Kubernetes via DNS
+</span>
+</div>
+<div class="md-flex__cell md-flex__cell--shrink">
+<i class="md-icon md-icon--arrow-forward md-footer-nav__button"></i>
+</div>
+</a>
+</nav>
+</div>
+<div class="md-footer-meta md-typeset">
+<div class="md-footer-meta__inner md-grid">
+<div class="md-footer-copyright">
+<div class="md-footer-copyright__highlight">
+Copyright © 2011-2022 <a href="https://www.lightbend.com/">Lightbend, Inc.</a>, © 2022, 2023
+ <a href="https://apache.org">The Apache Software Foundation</a>.
+ Apache Pekko, Pekko, and its feather logo are trademarks of The Apache Software Foundation.
+</div>
+Powered by
+<a href="https://github.com/lightbend/paradox">Paradox</a>
+and
+<a href="https://jonas.github.io/paradox-material-theme/">Paradox Material Theme</a>
+
+</div>
+</div>
+</div>
+</footer>
+
+</div>
+<script src="../assets/javascripts/application.583bbe55.js"></script>
+<script src="../assets/javascripts/paradox-material-theme.js"></script>
+<script>app.initialize({version:"0.17",url:{base:"../."}})</script>
+<script type="text/javascript" src="../lib/prettify/prettify.js"></script>
+<script type="text/javascript" src="../lib/prettify/lang-scala.js"></script>
+<script type="text/javascript" src="../lib/jquery/jquery.min.js"></script>
+<script type="text/javascript" src="../assets/javascripts/groups.js"></script>
+
+<script type="text/javascript">
+document.addEventListener("DOMContentLoaded", function(event) {
+window.prettyPrint && prettyPrint();
+});
+</script>
+</body>
+</html>
diff --git a/content/docs/pekko-management/current/main/bootstrap/recipes.html b/content/docs/pekko-management/current/main/bootstrap/recipes.html
new file mode 100644
index 00000000..e350f858
--- /dev/null
+++ b/content/docs/pekko-management/current/main/bootstrap/recipes.html
@@ -0,0 +1,539 @@
+<!DOCTYPE html>
+<html lang="en" class="no-js">
+<head>
+<meta charset="utf-8">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta http-equiv="x-ua-compatible" content="ie=edge">
+<meta name="description" content="Apache Pekko Management is a suite of tools for operating Apache Pekko Clusters.">
+<meta name="generator" content="Paradox, paradox-material-theme=0.6.0, mkdocs-material=3.0.3">
+
+<meta name="lang:clipboard.copy" content="Copy to clipboard">
+<meta name="lang:clipboard.copied" content="Copied to clipboard">
+<meta name="lang:search.language" content="">
+<meta name="lang:search.pipeline.stopwords" content="true">
+<meta name="lang:search.pipeline.trimmer" content="true">
+<meta name="lang:search.result.none" content="No matching documents">
+<meta name="lang:search.result.one" content="1 matching document">
+<meta name="lang:search.result.other" content="# matching documents">
+<meta name="lang:search.tokenizer" content="[\s\-]+">
+
+
+<meta name="description" content="Apache Pekko Management is a suite of tools for operating Apache Pekko Clusters.">
+<link rel="shortcut icon" href="../assets/images/pekko_favicon.png">
+<title>Bootstrap environments · Apache Pekko Management</title>
+<link rel="stylesheet" href="../assets/stylesheets/application.451f80e5.css">
+<link rel="stylesheet" href="../assets/stylesheets/application-palette.22915126.css">
+<link rel="stylesheet" href="../lib/material__tabs/dist/mdc.tabs.min.css">
+<link rel="stylesheet" href="../lib/prettify/prettify.css">
+<script src="../assets/javascripts/modernizr.1aa3b519.js"></script>
+<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,400i,700|Roboto+Mono">
+<style>
+body,input{font-family:"Roboto","Helvetica Neue",Helvetica,Arial,sans-serif}
+code,kbd,pre{font-family:"Roboto Mono","Courier New",Courier,monospace}
+</style>
+<link rel="stylesheet" href="../assets/fonts/font-awesome.css">
+<link rel="stylesheet" href="../assets/fonts/material-icons.css">
+<link rel="stylesheet" href="../assets/stylesheets/paradox-material-theme.css">
+<link rel="stylesheet" href="../assets/stylesheets/pekko-theme.css">
+</head>
+<body
+data-md-color-primary="white"
+data-md-color-accent="orange"
+>
+<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
+<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
+<label class="md-overlay" data-md-component="overlay" for="__drawer"></label>
+<header class="md-header" data-md-component="header">
+<nav class="md-header-nav md-grid">
+<div class="md-flex">
+<div class="md-flex__cell md-flex__cell--shrink">
+<a href="../index.html" title="Apache Pekko Management" class="md-header-nav__button md-logo">
+<img src="../assets/images/pekko_logo.png" width="24" height="24">
+</a>
+</div>
+<div class="md-flex__cell md-flex__cell--shrink">
+<label class="md-icon md-icon--menu md-header-nav__button" for="__drawer"></label>
+</div>
+<div class="md-flex__cell md-flex__cell--stretch">
+<div class="md-flex__ellipsis md-header-nav__title" data-md-component="title">
+<span class="md-header-nav__topic">
+Apache Pekko Management
+</span>
+<span class="md-header-nav__topic">
+Bootstrap environments
+</span>
+</div>
+</div>
+<div class="md-flex__cell md-flex__cell--shrink">
+<label class="md-icon md-icon--search md-header-nav__button" for="__search"></label>
+<div class="md-search" data-md-component="search" role="dialog">
+<label class="md-search__overlay" for="__search"></label>
+<div class="md-search__inner" role="search">
+<form class="md-search__form" name="search">
+<input type="text" class="md-search__input" name="query" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="query" data-md-state="active">
+<label class="md-icon md-search__icon" for="__search"></label>
+<button type="reset" class="md-icon md-search__icon" data-md-component="reset" tabindex="-1"></button>
+</form>
+<div class="md-search__output">
+<div class="md-search__scrollwrap" data-md-scrollfix>
+<div class="md-search-result" data-md-component="result">
+<div class="md-search-result__meta">
+Type to start searching
+</div>
+<ol class="md-search-result__list"></ol>
+</div>
+</div>
+</div>
+</div>
+</div>
+
+</div>
+<div class="md-flex__cell md-flex__cell--shrink">
+<div class="md-header-nav__source">
+<a href="https://github.com/apache/incubator-pekko-management"
+title="Go to repository"
+class="md-source"
+data-md-source="github">
+<div class="md-source__icon">
+<i class="fa fa-github"></i>
+</div>
+<div class="md-source__repository">
+apache/incubator-pekko-management
+</div>
+</a>
+
+</div>
+</div>
+</div>
+</nav>
+</header>
+
+<div class="md-container">
+<main class="md-main">
+<div class="md-main__inner md-grid" data-md-component="container">
+<div class="md-sidebar md-sidebar--primary" data-md-component="navigation">
+<div class="md-sidebar__scrollwrap">
+<div class="md-sidebar__inner">
+<nav class="md-nav md-nav--primary" data-md-level="0" style="visibility: hidden">
+<label class="md-nav__title md-nav__title--site" for="drawer">
+<a href="../index.html" title="Apache Pekko Management" class="md-nav__button md-logo">
+<span class="md-nav__button md-logo">
+<img src="../assets/images/pekko_logo.png" width="24" height="24">
+</a>
+<a href="../index.html" title="Apache Pekko Management">
+Apache Pekko Management
+</a>
+</label>
+<div class="md-nav__source">
+<a href="https://github.com/apache/incubator-pekko-management"
+title="Go to repository"
+class="md-source"
+data-md-source="github">
+<div class="md-source__icon">
+<i class="fa fa-github"></i>
+</div>
+<div class="md-source__repository">
+apache/incubator-pekko-management
+</div>
+</a>
+
+</div>
+<select class="supergroup" name="Language"><option class="group" value="group-java">Java</option><option class="group" value="group-scala">Scala</option></select>
+<ul>
+ <li><a href="../index.html#overview" class="header">Overview</a></li>
+ <li><a href="../kubernetes-deployment/index.html" class="page">Deploying Pekko Cluster to Kubernetes</a>
+ <ul>
+ <li><a href="../kubernetes-deployment/preparing-for-production.html" class="page">Preparing for production</a></li>
+ <li><a href="../kubernetes-deployment/forming-a-cluster.html" class="page">Forming an Pekko Cluster</a></li>
+ <li><a href="../kubernetes-deployment/building.html" class="page">Building the application</a></li>
+ <li><a href="../kubernetes-deployment/deploying.html" class="page">Deploying</a></li>
+ </ul></li>
+ <li><a href="../pekko-management.html" class="page">Apache Pekko Management</a>
+ <ul>
+ <li><a href="../pekko-management.html#project-info" class="header">Project Info</a></li>
+ <li><a href="../pekko-management.html#dependencies" class="header">Dependencies</a></li>
+ <li><a href="../pekko-management.html#basic-usage" class="header">Basic Usage</a></li>
+ <li><a href="../pekko-management.html#basic-configuration" class="header">Basic Configuration</a></li>
+ <li><a href="../pekko-management.html#read-only-routes" class="header">Read only routes</a></li>
+ <li><a href="../pekko-management.html#configuring-security" class="header">Configuring Security</a></li>
+ <li><a href="../pekko-management.html#stopping-pekko-management" class="header">Stopping Pekko Management</a></li>
+ <li><a href="../pekko-management.html#developing-extensions" class="header">Developing Extensions</a></li>
+ </ul></li>
+ <li><a href="../migration.html" class="page">Migration guide</a>
+ <ul>
+ <li><a href="../migration.html#1-0" class="header">1.0</a></li>
+ </ul></li>
+ <li><a href="../healthchecks.html" class="page">Health checks</a>
+ <ul>
+ <li><a href="../healthchecks.html#defining-a-health-check" class="header">Defining a Health Check</a></li>
+ <li><a href="../healthchecks.html#configuring-health-checks" class="header">Configuring health checks</a></li>
+ <li><a href="../healthchecks.html#hosting-health-checks-as-an-pekko-management-route" class="header">Hosting health checks as an Pekko Management Route</a></li>
+ </ul></li>
+ <li><a href="../bootstrap/index.html" class="page">Apache Pekko Cluster Bootstrap</a>
+ <ul>
+ <li><a href="../bootstrap/index.html#prerequisites" class="header">Prerequisites</a></li>
+ <li><a href="../bootstrap/index.html#project-info" class="header">Project Info</a></li>
+ <li><a href="../bootstrap/index.html#dependency" class="header">Dependency</a></li>
+ <li><a href="../bootstrap/index.html#using" class="header">Using</a></li>
+ <li><a href="../bootstrap/index.html#how-it-works" class="header">How It Works</a></li>
+ <li><a href="../bootstrap/index.html#joining-mechanism-precedence" class="header">Joining Mechanism Precedence</a></li>
+ <li><a href="../bootstrap/index.html#deployment-considerations" class="header">Deployment considerations</a></li>
+ <li><a href="../bootstrap/index.html#bootstrap-recipes" class="header">Bootstrap Recipes</a></li>
+ <li><a href="../bootstrap/recipes.html#bootstrap-environments" class="active page">Bootstrap environments</a></li>
+ <li><a href="../bootstrap/details.html" class="page">Bootstrap process</a></li>
+ <li><a href="../bootstrap/troubleshooting.html" class="page">Troubleshooting</a></li>
+ <li><a href="../bootstrap/local-config.html" class="page">Local using config</a></li>
+ <li><a href="../bootstrap/kubernetes.html" class="page">Kubernetes via DNS</a></li>
+ <li><a href="../bootstrap/kubernetes-api.html" class="page">Kubernetes API</a></li>
+ <li><a href="../bootstrap/istio.html" class="page">Istio</a></li>
+ </ul></li>
+ <li><a href="../discovery/index.html" class="page">Apache Pekko Discovery Methods</a>
+ <ul>
+ <li><a href="../discovery/kubernetes.html" class="page">Kubernetes API</a></li>
+ <li><a href="../discovery/consul.html" class="page">Consul</a></li>
+ <li><a href="../discovery/marathon.html" class="page">Marathon API</a></li>
+ <li><a href="../discovery/aws.html" class="page">AWS API</a></li>
+ </ul></li>
+ <li><a href="../cluster-http-management.html" class="page">Cluster HTTP Management</a>
+ <ul>
+ <li><a href="../cluster-http-management.html#project-info" class="header">Project Info</a></li>
+ <li><a href="../cluster-http-management.html#dependencies" class="header">Dependencies</a></li>
+ <li><a href="../cluster-http-management.html#running" class="header">Running</a></li>
+ <li><a href="../cluster-http-management.html#api-definition" class="header">API Definition</a></li>
+ <li><a href="../cluster-http-management.html#hosting-the-routes-in-an-existing-pekko-http-server" class="header">Hosting the routes in an existing Pekko HTTP server</a></li>
+ <li><a href="../cluster-http-management.html#disable-routes" class="header">Disable routes</a></li>
+ <li><a href="../cluster-http-management.html#health-checks" class="header">Health checks</a></li>
+ </ul></li>
+ <li><a href="../cluster-jmx-management.html" class="page">Built-in JMX Management</a></li>
+ <li><a href="../loglevels/index.html" class="page">Dynamic Log Levels</a>
+ <ul>
+ <li><a href="../loglevels/logback.html" class="page">Logback</a></li>
+ <li><a href="../loglevels/log4j2.html" class="page">Log4j2</a></li>
+ </ul></li>
+ <li><a href="../kubernetes-lease.html" class="page">Kubernetes Lease</a>
+ <ul>
+ <li><a href="../kubernetes-lease.html#lease-instances" class="header">Lease Instances</a></li>
+ <li><a href="../kubernetes-lease.html#configuring" class="header">Configuring</a></li>
+ <li><a href="../kubernetes-lease.html#f-a-q" class="header">F.A.Q</a></li>
+ </ul></li>
+</ul>
+
+<nav class="md-nav md-nav--secondary">
+<label class="md-nav__title" for="__toc">Table of contents</label>
+<ul>
+ <li><a href="../bootstrap/recipes.html#bootstrap-environments" class="header">Bootstrap environments</a>
+ <ul>
+ <li><a href="../bootstrap/recipes.html#local" class="header">Local</a></li>
+ <li><a href="../bootstrap/recipes.html#running-pekko-cluster-in-kubernetes" class="header">Running Pekko Cluster in Kubernetes</a></li>
+ </ul></li>
+</ul>
+</nav>
+
+
+<ul class="md-nav__list md-nav__links">
+<li class="md-nav__item"><a href="https://apache.org"><i class="md-icon">link</i> Apache Software Foundation</a></li>
+<li class="md-nav__item"><a href="https://apache.org/licenses/"><i class="md-icon">link</i> License</a></li>
+<li class="md-nav__item"><a href="https://apache.org/security/"><i class="md-icon">link</i> Security</a></li>
+<li class="md-nav__item"><a href="https://privacy.apache.org/policies/privacy-policy-public.html"><i class="md-icon">link</i> Privacy</a></li>
+<li class="md-nav__item"><a href="https://www.apache.org/events/current-event.html"><i class="md-icon">link</i> Events</a></li>
+<li class="md-nav__item"><a href="https://www.apache.org/foundation/sponsorship.html"><i class="md-icon">link</i> Donate</a></li>
+<li class="md-nav__item"><a href="https://www.apache.org/foundation/thanks.html"><i class="md-icon">link</i> Thanks</a></li>
+</ul>
+
+</nav>
+<ul style="display: none">
+<li class="md-nav__item md-version" id="project.version">
+<label class="md-nav__link" for="__version">
+<i class="md-icon" title="Version">label_outline</i> 0.0.0+714-a034fd01*
+</label>
+</li>
+</ul>
+
+</div>
+</div>
+</div>
+<div class="md-sidebar md-sidebar--secondary" data-md-component="toc">
+<div class="md-sidebar__scrollwrap">
+<div class="md-sidebar__inner">
+<nav class="md-nav md-nav--secondary">
+<label class="md-nav__title" for="__toc">Table of contents</label>
+<ul>
+ <li><a href="../bootstrap/recipes.html#bootstrap-environments" class="header">Bootstrap environments</a>
+ <ul>
+ <li><a href="../bootstrap/recipes.html#local" class="header">Local</a></li>
+ <li><a href="../bootstrap/recipes.html#running-pekko-cluster-in-kubernetes" class="header">Running Pekko Cluster in Kubernetes</a></li>
+ </ul></li>
+</ul>
+</nav>
+
+</div>
+</div>
+</div>
+<div class="md-content">
+<article class="md-content__inner md-typeset">
+<div class="md-content__searchable">
+<h1><a href="#bootstrap-environments" name="bootstrap-environments" class="anchor"><span class="anchor-link"></span></a>Bootstrap environments</h1>
+<p>A set of integration tests projects can be found in <a href="https://github.com/apache/incubator-pekko-management/tree/master/integration-test">integration-test folder of the Pekko Management project</a>. These test various Pekko management features together in various environments such as Kubernetes.</p>
+<p>The following samples exist as standalone projects for Akka as a starting point and can be easily adapted to Pekko:</p>
+<ul>
+ <li><a href="https://github.com/akka/akka-sample-cluster-kubernetes-java">Akka Cluster bootstrap using the Kubernetes API with Java/Maven</a></li>
+ <li><a href="https://github.com/akka/akka-sample-cluster-kubernetes-dns-java">Akka Cluster bootstrap using DNS in Kubernetes</a></li>
+</ul>
+<h2><a href="#local" name="local" class="anchor"><span class="anchor-link"></span></a>Local</h2>
+<p>To run Bootstrap locally without any dependencies such as DNS or Kubernetes see the <a href="local-config.html"><code>local</code> example</a></p>
+<h2><a href="#running-pekko-cluster-in-kubernetes" name="running-pekko-cluster-in-kubernetes" class="anchor"><span class="anchor-link"></span></a>Running Pekko Cluster in Kubernetes</h2>
+<p>The goal of bootstrap is to support running Pekko Cluster in Kubernetes as if it is a stateless application. The part bootstrap solves is creating the initial cluster and handling scaling and re-deploys gracefully.</p>
+<p>The recommended approach is to:</p>
+<ul>
+ <li>Use a Deployment for creating the pods</li>
+ <li>Use either the Kubernetes API or DNS for contact point discovery (details below)</li>
+ <li>Optionally use a service or ingress for any for traffic coming from outside of the Pekko Cluster e.g. gRPC and HTTP</li>
+</ul>
+<h3><a href="#kubernetes-deployment" name="kubernetes-deployment" class="anchor"><span class="anchor-link"></span></a>Kubernetes Deployment</h3>
+<p>Use a regular deployment (not a StatefulSet) with the following settings.</p>
+<h4><a href="#update-strategy" name="update-strategy" class="anchor"><span class="anchor-link"></span></a>Update strategy</h4>
+<p>For small clusters it may make sense to set <code>maxUnavailable</code> to 0 and <code>maxSurge</code> to 1. This means that a new pod is created before removing any existing pods so if the new pod fails the cluster remains at full strength until a rollback happens. For large clusters it may be too slow to do 1 pod at a time.</p>
+<p>If using <a href="https://pekko.apache.org/docs/pekko/current/split-brain-resolver.html">Split Brain Resolver</a> have a <code>maxUnavailable</code> that will not cause downing</p>
+<h3><a href="#cluster-singletons" name="cluster-singletons" class="anchor"><span class="anchor-link"></span></a>Cluster singletons</h3>
+<p>Deployments order pods by pod state and then time spent ready when deciding which to remove first. This works well with cluster singletons as they are typically removed last and then the cluster singletons move to the the oldest new pod.</p>
+<h3><a href="#external-traffic" name="external-traffic" class="anchor"><span class="anchor-link"></span></a>External traffic</h3>
+<p>For production traffic e.g. HTTP use a regular service or an alternative ingress mechanism. With an appropriate readiness check this results in traffic not being routed until bootstrap has finished.</p>
+<pre class="prettyprint"><button class="snippet-button copy-snippet" title="Copy snippet to clipboard">copy</button><a class="snippet-button go-to-source" href="https://github.com/apache/incubator-pekko-management/tree/master/integration-test/kubernetes-dns/kubernetes/pekko-cluster.yml#L86-L100" target="_blank" title="Go to snippet source">source</a><code class="language-yml">apiVersion: v1
+kind: Service
+metadata:
+ labels:
+ app: pekko-bootstrap-demo
+ name: "integration-test-kubernetes-dns"
+spec:
+ ports:
+ - name: http
+ port: 8080
+ protocol: TCP
+ targetPort: 8080
+ selector:
+ app: "pekko-bootstrap-demo"
+ type: LoadBalancer</code></pre>
+<p>This will result in a ClusterIP being created and only added to <code>Endpoints</code> when the pods are <code>ready</code></p>
+<p>Note that the <code>app</code> is the same for both services as they both refer to the same pods.</p>
+<h3><a href="#health-checks" name="health-checks" class="anchor"><span class="anchor-link"></span></a>Health checks</h3>
+<p><code>pekko-management</code> includes a HTTP route for readiness and liveness checks. <code>pekko-management-cluster-http</code> includes readiness check for the Pekko Cluster membership. To use it add the following dependency:</p><dl class="dependency"><dt>sbt</dt><dd><pre class="prettyprint"><code class="language-scala">val PekkoManagementVersion = "0.0.0+714-a034fd01-SNAPSHOT"
+libraryDependencies += "org.apache.pekko" %% "pekko-management-cluster-http" % PekkoManagementVersion</code></pre></dd><dt>Gradle</dt><dd><pre class="prettyprint"><code class="language-gradle">def versions = [
+ PekkoManagementVersion: "0.0.0+714-a034fd01-SNAPSHOT",
+ ScalaBinary: "2.12"
+]
+dependencies {
+ implementation "org.apache.pekko:pekko-management-cluster-http_${versions.ScalaBinary}:${versions.PekkoManagementVersion}"
+}</code></pre></dd><dt>Maven</dt><dd><pre class="prettyprint"><code class="language-xml"><properties>
+ <pekko.management.version>0.0.0+714-a034fd01-SNAPSHOT</pekko.management.version>
+ <scala.binary.version>2.12</scala.binary.version>
+</properties>
+<dependencies>
+ <dependency>
+ <groupId>org.apache.pekko</groupId>
+ <artifactId>pekko-management-cluster-http_${scala.binary.version}</artifactId>
+ <version>${pekko.management.version}</version>
+ </dependency>
+</dependencies></code></pre></dd></dl>
+<p>Pekko Cluster HTTP Management can be used with Pekko 0.0.0+26630-2c4d0ee0-SNAPSHOT or later. You have to override the following Pekko dependencies by defining them explicitly in your build and define the Pekko version to the one that you are using. Latest patch version of Pekko is recommended and a later version than 0.0.0+26630-2c4d0ee0-SNAPSHOT can be used.</p><dl class="dependency"><dt>sbt</dt><dd><pre class="prettyprint"><code class="language-scala">val PekkoVersion = "0.0.0+26630 [...]
+libraryDependencies ++= Seq(
+ "org.apache.pekko" %% "pekko-cluster-sharding" % PekkoVersion,
+ "org.apache.pekko" %% "pekko-discovery" % PekkoVersion
+)</code></pre></dd><dt>Gradle</dt><dd><pre class="prettyprint"><code class="language-gradle">def versions = [
+ PekkoVersion: "0.0.0+26630-2c4d0ee0-SNAPSHOT",
+ ScalaBinary: "2.12"
+]
+dependencies {
+ implementation "org.apache.pekko:pekko-cluster-sharding_${versions.ScalaBinary}:${versions.PekkoVersion}"
+ implementation "org.apache.pekko:pekko-discovery_${versions.ScalaBinary}:${versions.PekkoVersion}"
+}</code></pre></dd><dt>Maven</dt><dd><pre class="prettyprint"><code class="language-xml"><properties>
+ <pekko.version>0.0.0+26630-2c4d0ee0-SNAPSHOT</pekko.version>
+ <scala.binary.version>2.12</scala.binary.version>
+</properties>
+<dependencies>
+ <dependency>
+ <groupId>org.apache.pekko</groupId>
+ <artifactId>pekko-cluster-sharding_${scala.binary.version}</artifactId>
+ <version>${pekko.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.pekko</groupId>
+ <artifactId>pekko-discovery_${scala.binary.version}</artifactId>
+ <version>${pekko.version}</version>
+ </dependency>
+</dependencies></code></pre></dd></dl>
+<p>The readiness check is exposed on the Pekko Management port as a <code>GET</code> on <code>/ready</code> and the liveness check is a <code>GET</code> on <code>/alive</code></p>
+<p>Configure them to be used in your deployment:</p>
+<pre class="prettyprint"><button class="snippet-button copy-snippet" title="Copy snippet to clipboard">copy</button><a class="snippet-button go-to-source" href="https://github.com/apache/incubator-pekko-management/tree/master/integration-test/kubernetes-dns/kubernetes/pekko-cluster.yml#L32-L39" target="_blank" title="Go to snippet source">source</a><code class="language-yml">readinessProbe:
+ httpGet:
+ path: /ready
+ port: management
+livenessProbe:
+ httpGet:
+ path: /alive
+ port: management</code></pre>
+<p>This will mean that a pod won’t get traffic until it is part of a cluster, which is important if either <code>ClusterSharding</code> or <code>ClusterSingleton</code> are used.</p>
+<h3><a href="#contact-point-discovery" name="contact-point-discovery" class="anchor"><span class="anchor-link"></span></a>Contact point discovery</h3>
+<p>Contact point discovery can use either <code>kubernetes</code> or <code>pekko-dns</code> service discovery. Details on additional resources required and how they work:</p>
+<ul>
+ <li><a href="kubernetes-api.html">Kubernetes using <code>kubernetes-api</code> discovery</a></li>
+ <li><a href="kubernetes.html">Kubernetes using <code>pekko-dns</code> discovery</a></li>
+</ul>
+<p>Kubernetes-api is the more battle tested mechanism, DNS was added in Pekko 2.5.15 and Pekko Management 0.18. DNS has the benefit that it is agnostic of Kubernetes so does not require pods be able to communicate with the API server. However it requires a headless service that supports the <code>publishNotReadyAddresses</code> feature. If your Kubernetes setup does not support <code>publishNotReadyAddresses</code> yet then use the <code>kubernetes-api</code> discovery mechanism.</p>
+<h3><a href="#running-in-istio" name="running-in-istio" class="anchor"><span class="anchor-link"></span></a>Running in Istio</h3>
+<p>For considerations and configuration necessary for bootstrapping a Pekko cluster in Istio, see <a href="istio.html">Bootstrapping an Pekko cluster in Istio</a>.</p>
+<h3><a href="#running-the-kubernetes-demos" name="running-the-kubernetes-demos" class="anchor"><span class="anchor-link"></span></a>Running the Kubernetes demos</h3>
+<p>The following steps work for the <code>integration-test/kubernetes-api</code> or the <code>integration-test/kubernetes-dns</code> sub-project:</p>
+<p>To run the demo in a real Kubernetes or OpenShift cluster the images must be pushed to a registry that cluster has access to and then <code>kubernetes/pekko-cluster.yml</code> (in either sub-project) modified with the full image path.</p>
+<p>The following shows how the sample can be run in a local cluster using either <code>minishift</code> or <code>minikube</code>. Unless explicitly stated <code>minikube</code> can be replaced with <code>minishift</code> and <code>kubectl</code> with <code>oc</code> in any of the commands below.</p>
+<p>Start <a href="https://github.com/kubernetes/minikube">minikube</a> make sure you have installed and is running:</p>
+<pre><code>$ minikube start
+</code></pre>
+<p>Make sure your shell is configured to target the docker daemon running inside the VM:</p>
+<pre><code>$ eval $(minikube docker-env)
+</code></pre>
+<p>Publish the application docker image locally. If running this project in a real cluster you’ll need to publish the image to a repository that is accessible from your Kubernetes cluster and update the <code>kubernetes/pekko-cluster.yml</code> with the new image name.</p>
+<pre><code>$ sbt shell
+> project integration-test-kubernetes-api (or integration-test-kubernetes-dns)
+> docker:publishLocal
+</code></pre>
+<p>You can run multiple different Pekko Bootstrap-based applications in the same namespace, alongside any other containers that belong to the same logical application. The resources in <code>kubernetes/pekko-cluster.yml</code> are configured to run in the <code>pekko-bootstrap-demo-ns</code> namespace. Change that to the namespace you want to deploy to. If you do not have a namespace to run your application in yet, create it:</p>
+<pre><code>kubectl create namespace <insert-namespace-name-here>
+
+# and set it as the default for subsequent commands
+kubectl config set-context $(kubectl config current-context) --namespace=<insert-namespace-name-here>
+</code></pre>
+<p>Or if running with <code>minishift</code>:</p>
+<pre><code>oc new-project <insert-namespace-name-here>
+
+# and switch to that project to make it the default for subsequent comments
+oc project <insert-namespace-name-here>
+</code></pre>
+<p>Next deploy the application:</p>
+<pre><code># minikube using Kubernetes API
+kubectl apply -f integration-test/kubernetes-api/kubernetes/pekko-cluster.yml
+
+or
+
+# minikube using DNS
+kubectl apply -f integration-test/kubernetes-dns/kubernetes/pekko-cluster.yml
+
+or
+
+# minishift using Kubernetes API
+oc apply -f integration-test/kubernetes-api/kubernetes/pekko-cluster.yaml
+
+or
+
+# minishift using DNS
+oc apply -f integration-test/kubernetes-dns/kubernetes/pekko-cluster.yaml
+</code></pre>
+<p>This will create and start running a number of Pods hosting the application. The application nodes will form a cluster.</p>
+<p>In order to observe the logs during the cluster formation you can pick one of the pods and issue the kubectl logs command on it:</p>
+<pre><code>$ POD=$(kubectl get pods | grep akka-bootstrap | grep Running | head -n1 | awk '{ print $1 }'); echo $POD
+akka-integration-test-bcc456d8c-6qx87
+
+$ kubectl logs $POD --follow | less
+</code></pre>
+<pre><code>[INFO] [12/13/2018 07:13:42.867] [main] [ClusterBootstrap(pekko://default)] Initiating bootstrap procedure using pekko.discovery.pekko-dns method...
+[DEBUG] [12/13/2018 07:13:42.906] [default-akka.actor.default-dispatcher-2] [TimerScheduler(pekko://default)] Start timer [resolve-key] with generation [1]
+[DEBUG] [12/13/2018 07:13:42.919] [default-akka.actor.default-dispatcher-2] [TimerScheduler(pekko://default)] Start timer [decide-key] with generation [2]
+[INFO] [12/13/2018 07:13:42.924] [default-akka.actor.default-dispatcher-2] [pekko.tcp://default@172.17.0.7:2552/system/bootstrapCoordinator] Locating service members. Using discovery [pekko.discovery.dns.DnsSimpleServiceDiscovery], join decider [org.apache.pekko.management.cluster.bootstrap.LowestAddressJoinDecider]
+[INFO] [12/13/2018 07:13:42.933] [default-akka.actor.default-dispatcher-2] [pekko.tcp://default@172.17.0.7:2552/system/bootstrapCoordinator] Looking up [Lookup(integration-test-kubernetes-dns-internal.akka-bootstrap.svc.cluster.local,Some(management),Some(tcp))]
+[DEBUG] [12/13/2018 07:13:42.936] [default-akka.actor.default-dispatcher-2] [DnsSimpleServiceDiscovery(pekko://default)] Lookup [Lookup(integration-test-kubernetes-dns-internal.akka-bootstrap-demo-ns.svc.cluster.local,Some(management),Some(tcp))] translated to SRV query [_management._tcp.integration-test-kubernetes-dns-internal.akka-bootstrap-demo-ns.svc.cluster.local] as contains portName and protocol
+[DEBUG] [12/13/2018 07:13:42.995] [default-akka.actor.default-dispatcher-18] [pekko.tcp://default@172.17.0.7:2552/system/IO-DNS] Resolution request for _management._tcp.integration-test-kubernetes-dns-internal.akka-bootstrap-demo-ns.svc.cluster.local Srv from Actor[pekko://default/temp/$a]
+[DEBUG] [12/13/2018 07:13:43.011] [default-akka.actor.default-dispatcher-6] [pekko.tcp://default@172.17.0.7:2552/system/IO-DNS/async-dns/$a] Attempting to resolve _management._tcp.integration-test-kubernetes-dns-internal.akka-bootstrap-demo-ns.svc.cluster.local with Actor[pekko://default/system/IO-DNS/async-dns/$a/$a#1272991285]
+[DEBUG] [12/13/2018 07:13:43.049] [default-akka.actor.default-dispatcher-18] [pekko.tcp://default@172.17.0.7:2552/system/IO-TCP/selectors/$a/0] Successfully bound to /0.0.0.0:8558
+[DEBUG] [12/13/2018 07:13:43.134] [default-akka.actor.default-dispatcher-18] [pekko.tcp://default@172.17.0.7:2552/system/IO-DNS/async-dns/$a/$a] Resolving [_management._tcp.integration-test-kubernetes-dns-internal.akka-bootstrap-demo-ns.svc.cluster.local] (SRV)
+[INFO] [12/13/2018 07:13:43.147] [default-akka.actor.default-dispatcher-6] [PekkoManagement(pekko://default)] Bound Pekko Management (HTTP) endpoint to: 0.0.0.0:8558
+[DEBUG] [12/13/2018 07:13:43.156] [default-akka.actor.default-dispatcher-5] [pekko.tcp://default@172.17.0.7:2552/system/IO-TCP/selectors/$a/1] Successfully bound to /0.0.0.0:8080
+[INFO] [12/13/2018 07:13:43.180] [main] [akka.actor.ActorSystemImpl(default)] Server online at http://localhost:8080/
+....
+[INFO] [12/13/2018 07:13:50.631] [default-akka.actor.default-dispatcher-5] [org.apache.pekko.cluster.Cluster(pekko://default)] Cluster Node [pekko.tcp://default@172.17.0.7:2552] - Welcome from [pekko.tcp://default@172.17.0.6:2552]
+[DEBUG] [12/13/2018 07:13:50.644] [default-pekko.remote.default-remote-dispatcher-22] [akka.serialization.Serialization(pekko://default)] Using serializer [org.apache.pekko.cluster.protobuf.ClusterMessageSerializer] for message [org.apache.pekko.cluster.GossipEnvelope]
+[INFO] [12/13/2018 07:13:50.659] [default-akka.actor.default-dispatcher-18] [pekko.tcp://default@172.17.0.7:2552/user/$b] Cluster pekko.tcp://default@172.17.0.7:2552 >>> MemberUp(Member(address = pekko.tcp://default@172.17.0.6:2552, status = Up))
+[INFO] [12/13/2018 07:13:50.676] [default-akka.actor.default-dispatcher-20] [pekko.tcp://default@172.17.0.7:2552/user/$b] Cluster pekko.tcp://default@172.17.0.7:2552 >>> MemberJoined(Member(address = pekko.tcp://default@172.17.0.7:2552, status = Joining))
+[INFO] [12/13/2018 07:13:50.716] [default-akka.actor.default-dispatcher-6] [pekko.tcp://default@172.17.0.7:2552/user/$b] Cluster pekko.tcp://default@172.17.0.7:2552 >>> LeaderChanged(Some(pekko.tcp://default@172.17.0.6:2552))
+[INFO] [12/13/2018 07:13:50.720] [default-akka.actor.default-dispatcher-3] [pekko.tcp://default@172.17.0.7:2552/user/$b] Cluster pekko.tcp://default@172.17.0.7:2552 >>> RoleLeaderChanged(dc-default,Some(pekko.tcp://default@172.17.0.6:2552))
+[INFO] [12/13/2018 07:13:50.727] [default-akka.actor.default-dispatcher-6] [pekko.tcp://default@172.17.0.7:2552/user/$b] Cluster pekko.tcp://default@172.17.0.7:2552 >>> SeenChanged(true,Set(pekko.tcp://default@172.17.0.6:2552, pekko.tcp://default@172.17.0.7:2552))
+[INFO] [12/13/2018 07:13:50.733] [default-akka.actor.default-dispatcher-5] [pekko.tcp://default@172.17.0.7:2552/user/$b] Cluster pekko.tcp://default@172.17.0.7:2552 >>> ReachabilityChanged()
+</code></pre>
+</div>
+<div>
+<a href="https://github.com/apache/incubator-pekko-management/tree/master/docs/src/main/paradox/bootstrap/recipes.md" title="Edit this page" class="md-source-file md-edit">
+Edit this page
+</a>
+</div>
+<div class="print-only">
+<span class="md-source-file md-version">
+0.0.0+714-a034fd01*
+</span>
+</div>
+</article>
+</div>
+</div>
+</main>
+<footer class="md-footer">
+<div class="md-footer-nav">
+<nav class="md-footer-nav__inner md-grid">
+<a href="../bootstrap/index.html" title="Apache Pekko Cluster Bootstrap" class="md-flex md-footer-nav__link md-footer-nav__link--prev" rel="prev">
+<div class="md-flex__cell md-flex__cell--shrink">
+<i class="md-icon md-icon--arrow-back md-footer-nav__button"></i>
+</div>
+<div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
+<span class="md-flex__ellipsis">
+<span class="md-footer-nav__direction">
+Previous
+</span>
+Apache Pekko Cluster Bootstrap
+</span>
+</div>
+</a>
+<a href="../bootstrap/details.html" title="Bootstrap process" class="md-flex md-footer-nav__link md-footer-nav__link--next" rel="next">
+<div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
+<span class="md-flex__ellipsis">
+<span class="md-footer-nav__direction">
+Next
+</span>
+Bootstrap process
+</span>
+</div>
+<div class="md-flex__cell md-flex__cell--shrink">
+<i class="md-icon md-icon--arrow-forward md-footer-nav__button"></i>
+</div>
+</a>
+</nav>
+</div>
+<div class="md-footer-meta md-typeset">
+<div class="md-footer-meta__inner md-grid">
+<div class="md-footer-copyright">
+<div class="md-footer-copyright__highlight">
+Copyright © 2011-2022 <a href="https://www.lightbend.com/">Lightbend, Inc.</a>, © 2022, 2023
+ <a href="https://apache.org">The Apache Software Foundation</a>.
+ Apache Pekko, Pekko, and its feather logo are trademarks of The Apache Software Foundation.
+</div>
+Powered by
+<a href="https://github.com/lightbend/paradox">Paradox</a>
+and
+<a href="https://jonas.github.io/paradox-material-theme/">Paradox Material Theme</a>
+
+</div>
+</div>
+</div>
+</footer>
+
+</div>
+<script src="../assets/javascripts/application.583bbe55.js"></script>
+<script src="../assets/javascripts/paradox-material-theme.js"></script>
+<script>app.initialize({version:"0.17",url:{base:"../."}})</script>
+<script type="text/javascript" src="../lib/prettify/prettify.js"></script>
+<script type="text/javascript" src="../lib/prettify/lang-scala.js"></script>
+<script type="text/javascript" src="../lib/jquery/jquery.min.js"></script>
+<script type="text/javascript" src="../assets/javascripts/groups.js"></script>
+
+<script type="text/javascript">
+document.addEventListener("DOMContentLoaded", function(event) {
+window.prettyPrint && prettyPrint();
+});
+</script>
+</body>
+</html>
diff --git a/content/docs/pekko-management/current/main/bootstrap/troubleshooting.html b/content/docs/pekko-management/current/main/bootstrap/troubleshooting.html
new file mode 100644
index 00000000..f440706c
--- /dev/null
+++ b/content/docs/pekko-management/current/main/bootstrap/troubleshooting.html
@@ -0,0 +1,366 @@
+<!DOCTYPE html>
+<html lang="en" class="no-js">
+<head>
+<meta charset="utf-8">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta http-equiv="x-ua-compatible" content="ie=edge">
+<meta name="description" content="Apache Pekko Management is a suite of tools for operating Apache Pekko Clusters.">
+<meta name="generator" content="Paradox, paradox-material-theme=0.6.0, mkdocs-material=3.0.3">
+
+<meta name="lang:clipboard.copy" content="Copy to clipboard">
+<meta name="lang:clipboard.copied" content="Copied to clipboard">
+<meta name="lang:search.language" content="">
+<meta name="lang:search.pipeline.stopwords" content="true">
+<meta name="lang:search.pipeline.trimmer" content="true">
+<meta name="lang:search.result.none" content="No matching documents">
+<meta name="lang:search.result.one" content="1 matching document">
+<meta name="lang:search.result.other" content="# matching documents">
+<meta name="lang:search.tokenizer" content="[\s\-]+">
+
+
+<meta name="description" content="Apache Pekko Management is a suite of tools for operating Apache Pekko Clusters.">
+<link rel="shortcut icon" href="../assets/images/pekko_favicon.png">
+<title>Troubleshooting · Apache Pekko Management</title>
+<link rel="stylesheet" href="../assets/stylesheets/application.451f80e5.css">
+<link rel="stylesheet" href="../assets/stylesheets/application-palette.22915126.css">
+<link rel="stylesheet" href="../lib/material__tabs/dist/mdc.tabs.min.css">
+<link rel="stylesheet" href="../lib/prettify/prettify.css">
+<script src="../assets/javascripts/modernizr.1aa3b519.js"></script>
+<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,400i,700|Roboto+Mono">
+<style>
+body,input{font-family:"Roboto","Helvetica Neue",Helvetica,Arial,sans-serif}
+code,kbd,pre{font-family:"Roboto Mono","Courier New",Courier,monospace}
+</style>
+<link rel="stylesheet" href="../assets/fonts/font-awesome.css">
+<link rel="stylesheet" href="../assets/fonts/material-icons.css">
+<link rel="stylesheet" href="../assets/stylesheets/paradox-material-theme.css">
+<link rel="stylesheet" href="../assets/stylesheets/pekko-theme.css">
+</head>
+<body
+data-md-color-primary="white"
+data-md-color-accent="orange"
+>
+<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
+<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
+<label class="md-overlay" data-md-component="overlay" for="__drawer"></label>
+<header class="md-header" data-md-component="header">
+<nav class="md-header-nav md-grid">
+<div class="md-flex">
+<div class="md-flex__cell md-flex__cell--shrink">
+<a href="../index.html" title="Apache Pekko Management" class="md-header-nav__button md-logo">
+<img src="../assets/images/pekko_logo.png" width="24" height="24">
+</a>
+</div>
+<div class="md-flex__cell md-flex__cell--shrink">
+<label class="md-icon md-icon--menu md-header-nav__button" for="__drawer"></label>
+</div>
+<div class="md-flex__cell md-flex__cell--stretch">
+<div class="md-flex__ellipsis md-header-nav__title" data-md-component="title">
+<span class="md-header-nav__topic">
+Apache Pekko Management
+</span>
+<span class="md-header-nav__topic">
+Troubleshooting
+</span>
+</div>
+</div>
+<div class="md-flex__cell md-flex__cell--shrink">
+<label class="md-icon md-icon--search md-header-nav__button" for="__search"></label>
+<div class="md-search" data-md-component="search" role="dialog">
+<label class="md-search__overlay" for="__search"></label>
+<div class="md-search__inner" role="search">
+<form class="md-search__form" name="search">
+<input type="text" class="md-search__input" name="query" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="query" data-md-state="active">
+<label class="md-icon md-search__icon" for="__search"></label>
+<button type="reset" class="md-icon md-search__icon" data-md-component="reset" tabindex="-1"></button>
+</form>
+<div class="md-search__output">
+<div class="md-search__scrollwrap" data-md-scrollfix>
+<div class="md-search-result" data-md-component="result">
+<div class="md-search-result__meta">
+Type to start searching
+</div>
+<ol class="md-search-result__list"></ol>
+</div>
+</div>
+</div>
+</div>
+</div>
+
+</div>
+<div class="md-flex__cell md-flex__cell--shrink">
+<div class="md-header-nav__source">
+<a href="https://github.com/apache/incubator-pekko-management"
+title="Go to repository"
+class="md-source"
+data-md-source="github">
+<div class="md-source__icon">
+<i class="fa fa-github"></i>
+</div>
+<div class="md-source__repository">
+apache/incubator-pekko-management
+</div>
+</a>
+
+</div>
+</div>
+</div>
+</nav>
+</header>
+
+<div class="md-container">
+<main class="md-main">
+<div class="md-main__inner md-grid" data-md-component="container">
+<div class="md-sidebar md-sidebar--primary" data-md-component="navigation">
+<div class="md-sidebar__scrollwrap">
+<div class="md-sidebar__inner">
+<nav class="md-nav md-nav--primary" data-md-level="0" style="visibility: hidden">
+<label class="md-nav__title md-nav__title--site" for="drawer">
+<a href="../index.html" title="Apache Pekko Management" class="md-nav__button md-logo">
+<span class="md-nav__button md-logo">
+<img src="../assets/images/pekko_logo.png" width="24" height="24">
+</a>
+<a href="../index.html" title="Apache Pekko Management">
+Apache Pekko Management
+</a>
+</label>
+<div class="md-nav__source">
+<a href="https://github.com/apache/incubator-pekko-management"
+title="Go to repository"
+class="md-source"
+data-md-source="github">
+<div class="md-source__icon">
+<i class="fa fa-github"></i>
+</div>
+<div class="md-source__repository">
+apache/incubator-pekko-management
+</div>
+</a>
+
+</div>
+<select class="supergroup" name="Language"><option class="group" value="group-java">Java</option><option class="group" value="group-scala">Scala</option></select>
+<ul>
+ <li><a href="../index.html#overview" class="header">Overview</a></li>
+ <li><a href="../kubernetes-deployment/index.html" class="page">Deploying Pekko Cluster to Kubernetes</a>
+ <ul>
+ <li><a href="../kubernetes-deployment/preparing-for-production.html" class="page">Preparing for production</a></li>
+ <li><a href="../kubernetes-deployment/forming-a-cluster.html" class="page">Forming an Pekko Cluster</a></li>
+ <li><a href="../kubernetes-deployment/building.html" class="page">Building the application</a></li>
+ <li><a href="../kubernetes-deployment/deploying.html" class="page">Deploying</a></li>
+ </ul></li>
+ <li><a href="../pekko-management.html" class="page">Apache Pekko Management</a>
+ <ul>
+ <li><a href="../pekko-management.html#project-info" class="header">Project Info</a></li>
+ <li><a href="../pekko-management.html#dependencies" class="header">Dependencies</a></li>
+ <li><a href="../pekko-management.html#basic-usage" class="header">Basic Usage</a></li>
+ <li><a href="../pekko-management.html#basic-configuration" class="header">Basic Configuration</a></li>
+ <li><a href="../pekko-management.html#read-only-routes" class="header">Read only routes</a></li>
+ <li><a href="../pekko-management.html#configuring-security" class="header">Configuring Security</a></li>
+ <li><a href="../pekko-management.html#stopping-pekko-management" class="header">Stopping Pekko Management</a></li>
+ <li><a href="../pekko-management.html#developing-extensions" class="header">Developing Extensions</a></li>
+ </ul></li>
+ <li><a href="../migration.html" class="page">Migration guide</a>
+ <ul>
+ <li><a href="../migration.html#1-0" class="header">1.0</a></li>
+ </ul></li>
+ <li><a href="../healthchecks.html" class="page">Health checks</a>
+ <ul>
+ <li><a href="../healthchecks.html#defining-a-health-check" class="header">Defining a Health Check</a></li>
+ <li><a href="../healthchecks.html#configuring-health-checks" class="header">Configuring health checks</a></li>
+ <li><a href="../healthchecks.html#hosting-health-checks-as-an-pekko-management-route" class="header">Hosting health checks as an Pekko Management Route</a></li>
+ </ul></li>
+ <li><a href="../bootstrap/index.html" class="page">Apache Pekko Cluster Bootstrap</a>
+ <ul>
+ <li><a href="../bootstrap/index.html#prerequisites" class="header">Prerequisites</a></li>
+ <li><a href="../bootstrap/index.html#project-info" class="header">Project Info</a></li>
+ <li><a href="../bootstrap/index.html#dependency" class="header">Dependency</a></li>
+ <li><a href="../bootstrap/index.html#using" class="header">Using</a></li>
+ <li><a href="../bootstrap/index.html#how-it-works" class="header">How It Works</a></li>
+ <li><a href="../bootstrap/index.html#joining-mechanism-precedence" class="header">Joining Mechanism Precedence</a></li>
+ <li><a href="../bootstrap/index.html#deployment-considerations" class="header">Deployment considerations</a></li>
+ <li><a href="../bootstrap/index.html#bootstrap-recipes" class="header">Bootstrap Recipes</a></li>
+ <li><a href="../bootstrap/recipes.html" class="page">Bootstrap environments</a></li>
+ <li><a href="../bootstrap/details.html" class="page">Bootstrap process</a></li>
+ <li><a href="../bootstrap/troubleshooting.html#troubleshooting" class="active page">Troubleshooting</a></li>
+ <li><a href="../bootstrap/local-config.html" class="page">Local using config</a></li>
+ <li><a href="../bootstrap/kubernetes.html" class="page">Kubernetes via DNS</a></li>
+ <li><a href="../bootstrap/kubernetes-api.html" class="page">Kubernetes API</a></li>
+ <li><a href="../bootstrap/istio.html" class="page">Istio</a></li>
+ </ul></li>
+ <li><a href="../discovery/index.html" class="page">Apache Pekko Discovery Methods</a>
+ <ul>
+ <li><a href="../discovery/kubernetes.html" class="page">Kubernetes API</a></li>
+ <li><a href="../discovery/consul.html" class="page">Consul</a></li>
+ <li><a href="../discovery/marathon.html" class="page">Marathon API</a></li>
+ <li><a href="../discovery/aws.html" class="page">AWS API</a></li>
+ </ul></li>
+ <li><a href="../cluster-http-management.html" class="page">Cluster HTTP Management</a>
+ <ul>
+ <li><a href="../cluster-http-management.html#project-info" class="header">Project Info</a></li>
+ <li><a href="../cluster-http-management.html#dependencies" class="header">Dependencies</a></li>
+ <li><a href="../cluster-http-management.html#running" class="header">Running</a></li>
+ <li><a href="../cluster-http-management.html#api-definition" class="header">API Definition</a></li>
+ <li><a href="../cluster-http-management.html#hosting-the-routes-in-an-existing-pekko-http-server" class="header">Hosting the routes in an existing Pekko HTTP server</a></li>
+ <li><a href="../cluster-http-management.html#disable-routes" class="header">Disable routes</a></li>
+ <li><a href="../cluster-http-management.html#health-checks" class="header">Health checks</a></li>
+ </ul></li>
+ <li><a href="../cluster-jmx-management.html" class="page">Built-in JMX Management</a></li>
+ <li><a href="../loglevels/index.html" class="page">Dynamic Log Levels</a>
+ <ul>
+ <li><a href="../loglevels/logback.html" class="page">Logback</a></li>
+ <li><a href="../loglevels/log4j2.html" class="page">Log4j2</a></li>
+ </ul></li>
+ <li><a href="../kubernetes-lease.html" class="page">Kubernetes Lease</a>
+ <ul>
+ <li><a href="../kubernetes-lease.html#lease-instances" class="header">Lease Instances</a></li>
+ <li><a href="../kubernetes-lease.html#configuring" class="header">Configuring</a></li>
+ <li><a href="../kubernetes-lease.html#f-a-q" class="header">F.A.Q</a></li>
+ </ul></li>
+</ul>
+
+<nav class="md-nav md-nav--secondary">
+<label class="md-nav__title" for="__toc">Table of contents</label>
+<ul>
+ <li><a href="../bootstrap/troubleshooting.html#troubleshooting" class="header">Troubleshooting</a>
+ <ul>
+ <li><a href="../bootstrap/troubleshooting.html#logging" class="header">Logging</a></li>
+ <li><a href="../bootstrap/troubleshooting.html#kubernetes-api-http-chunk-size-exceeds-the-configured-limit-during-contact-point-discovery" class="header">Kubernetes API <code>HTTP chunk size exceeds the configured limit</code> during contact point discovery</a></li>
+ </ul></li>
+</ul>
+</nav>
+
+
+<ul class="md-nav__list md-nav__links">
+<li class="md-nav__item"><a href="https://apache.org"><i class="md-icon">link</i> Apache Software Foundation</a></li>
+<li class="md-nav__item"><a href="https://apache.org/licenses/"><i class="md-icon">link</i> License</a></li>
+<li class="md-nav__item"><a href="https://apache.org/security/"><i class="md-icon">link</i> Security</a></li>
+<li class="md-nav__item"><a href="https://privacy.apache.org/policies/privacy-policy-public.html"><i class="md-icon">link</i> Privacy</a></li>
+<li class="md-nav__item"><a href="https://www.apache.org/events/current-event.html"><i class="md-icon">link</i> Events</a></li>
+<li class="md-nav__item"><a href="https://www.apache.org/foundation/sponsorship.html"><i class="md-icon">link</i> Donate</a></li>
+<li class="md-nav__item"><a href="https://www.apache.org/foundation/thanks.html"><i class="md-icon">link</i> Thanks</a></li>
+</ul>
+
+</nav>
+<ul style="display: none">
+<li class="md-nav__item md-version" id="project.version">
+<label class="md-nav__link" for="__version">
+<i class="md-icon" title="Version">label_outline</i> 0.0.0+714-a034fd01*
+</label>
+</li>
+</ul>
+
+</div>
+</div>
+</div>
+<div class="md-sidebar md-sidebar--secondary" data-md-component="toc">
+<div class="md-sidebar__scrollwrap">
+<div class="md-sidebar__inner">
+<nav class="md-nav md-nav--secondary">
+<label class="md-nav__title" for="__toc">Table of contents</label>
+<ul>
+ <li><a href="../bootstrap/troubleshooting.html#troubleshooting" class="header">Troubleshooting</a>
+ <ul>
+ <li><a href="../bootstrap/troubleshooting.html#logging" class="header">Logging</a></li>
+ <li><a href="../bootstrap/troubleshooting.html#kubernetes-api-http-chunk-size-exceeds-the-configured-limit-during-contact-point-discovery" class="header">Kubernetes API <code>HTTP chunk size exceeds the configured limit</code> during contact point discovery</a></li>
+ </ul></li>
+</ul>
+</nav>
+
+</div>
+</div>
+</div>
+<div class="md-content">
+<article class="md-content__inner md-typeset">
+<div class="md-content__searchable">
+<h1><a href="#troubleshooting" name="troubleshooting" class="anchor"><span class="anchor-link"></span></a>Troubleshooting</h1>
+<h2><a href="#logging" name="logging" class="anchor"><span class="anchor-link"></span></a>Logging</h2>
+<p>When troubleshooting cluster bootstrap, it could be helpful to enable <code>DEBUG</code> logging for:</p>
+<ul>
+ <li><code>org.apache.pekko.discovery</code></li>
+ <li><code>org.apache.pekko.management.cluster.bootstrap</code></li>
+</ul>
+<h2><a href="#kubernetes-api-http-chunk-size-exceeds-the-configured-limit-during-contact-point-discovery" name="kubernetes-api-http-chunk-size-exceeds-the-configured-limit-during-contact-point-discovery" class="anchor"><span class="anchor-link"></span></a>Kubernetes API <code>HTTP chunk size exceeds the configured limit</code> during contact point discovery</h2>
+<p>Increase the max chunk size with:</p>
+<pre><code>pekko.http.client.parsing.max-chunk-size = 20m
+</code></pre>
+<p>This should only be necessary if the cluster size is 100s of nodes.</p>
+</div>
+<div>
+<a href="https://github.com/apache/incubator-pekko-management/tree/master/docs/src/main/paradox/bootstrap/troubleshooting.md" title="Edit this page" class="md-source-file md-edit">
+Edit this page
+</a>
+</div>
+<div class="print-only">
+<span class="md-source-file md-version">
+0.0.0+714-a034fd01*
+</span>
+</div>
+</article>
+</div>
+</div>
+</main>
+<footer class="md-footer">
+<div class="md-footer-nav">
+<nav class="md-footer-nav__inner md-grid">
+<a href="../bootstrap/details.html" title="Bootstrap process" class="md-flex md-footer-nav__link md-footer-nav__link--prev" rel="prev">
+<div class="md-flex__cell md-flex__cell--shrink">
+<i class="md-icon md-icon--arrow-back md-footer-nav__button"></i>
+</div>
+<div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
+<span class="md-flex__ellipsis">
+<span class="md-footer-nav__direction">
+Previous
+</span>
+Bootstrap process
+</span>
+</div>
+</a>
+<a href="../bootstrap/local-config.html" title="Local using config" class="md-flex md-footer-nav__link md-footer-nav__link--next" rel="next">
+<div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
+<span class="md-flex__ellipsis">
+<span class="md-footer-nav__direction">
+Next
+</span>
+Local using config
+</span>
+</div>
+<div class="md-flex__cell md-flex__cell--shrink">
+<i class="md-icon md-icon--arrow-forward md-footer-nav__button"></i>
+</div>
+</a>
+</nav>
+</div>
+<div class="md-footer-meta md-typeset">
+<div class="md-footer-meta__inner md-grid">
+<div class="md-footer-copyright">
+<div class="md-footer-copyright__highlight">
+Copyright © 2011-2022 <a href="https://www.lightbend.com/">Lightbend, Inc.</a>, © 2022, 2023
+ <a href="https://apache.org">The Apache Software Foundation</a>.
+ Apache Pekko, Pekko, and its feather logo are trademarks of The Apache Software Foundation.
+</div>
+Powered by
+<a href="https://github.com/lightbend/paradox">Paradox</a>
+and
+<a href="https://jonas.github.io/paradox-material-theme/">Paradox Material Theme</a>
+
+</div>
+</div>
+</div>
+</footer>
+
+</div>
+<script src="../assets/javascripts/application.583bbe55.js"></script>
+<script src="../assets/javascripts/paradox-material-theme.js"></script>
+<script>app.initialize({version:"0.17",url:{base:"../."}})</script>
+<script type="text/javascript" src="../lib/prettify/prettify.js"></script>
+<script type="text/javascript" src="../lib/prettify/lang-scala.js"></script>
+<script type="text/javascript" src="../lib/jquery/jquery.min.js"></script>
+<script type="text/javascript" src="../assets/javascripts/groups.js"></script>
+
+<script type="text/javascript">
+document.addEventListener("DOMContentLoaded", function(event) {
+window.prettyPrint && prettyPrint();
+});
+</script>
+</body>
+</html>
diff --git a/content/docs/pekko-management/current/main/cluster-http-management.html b/content/docs/pekko-management/current/main/cluster-http-management.html
new file mode 100644
index 00000000..bc59fe7e
--- /dev/null
+++ b/content/docs/pekko-management/current/main/cluster-http-management.html
@@ -0,0 +1,904 @@
+<!DOCTYPE html>
+<html lang="en" class="no-js">
+<head>
+<meta charset="utf-8">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta http-equiv="x-ua-compatible" content="ie=edge">
+<meta name="description" content="Apache Pekko Management is a suite of tools for operating Apache Pekko Clusters.">
+<meta name="generator" content="Paradox, paradox-material-theme=0.6.0, mkdocs-material=3.0.3">
+
+<meta name="lang:clipboard.copy" content="Copy to clipboard">
+<meta name="lang:clipboard.copied" content="Copied to clipboard">
+<meta name="lang:search.language" content="">
+<meta name="lang:search.pipeline.stopwords" content="true">
+<meta name="lang:search.pipeline.trimmer" content="true">
+<meta name="lang:search.result.none" content="No matching documents">
+<meta name="lang:search.result.one" content="1 matching document">
+<meta name="lang:search.result.other" content="# matching documents">
+<meta name="lang:search.tokenizer" content="[\s\-]+">
+
+
+<meta name="description" content="Apache Pekko Management is a suite of tools for operating Apache Pekko Clusters.">
+<link rel="shortcut icon" href="assets/images/pekko_favicon.png">
+<title>Cluster HTTP Management · Apache Pekko Management</title>
+<link rel="stylesheet" href="assets/stylesheets/application.451f80e5.css">
+<link rel="stylesheet" href="assets/stylesheets/application-palette.22915126.css">
+<link rel="stylesheet" href="lib/material__tabs/dist/mdc.tabs.min.css">
+<link rel="stylesheet" href="lib/prettify/prettify.css">
+<script src="assets/javascripts/modernizr.1aa3b519.js"></script>
+<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,400i,700|Roboto+Mono">
+<style>
+body,input{font-family:"Roboto","Helvetica Neue",Helvetica,Arial,sans-serif}
+code,kbd,pre{font-family:"Roboto Mono","Courier New",Courier,monospace}
+</style>
+<link rel="stylesheet" href="assets/fonts/font-awesome.css">
+<link rel="stylesheet" href="assets/fonts/material-icons.css">
+<link rel="stylesheet" href="assets/stylesheets/paradox-material-theme.css">
+<link rel="stylesheet" href="assets/stylesheets/pekko-theme.css">
+</head>
+<body
+data-md-color-primary="white"
+data-md-color-accent="orange"
+>
+<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
+<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
+<label class="md-overlay" data-md-component="overlay" for="__drawer"></label>
+<header class="md-header" data-md-component="header">
+<nav class="md-header-nav md-grid">
+<div class="md-flex">
+<div class="md-flex__cell md-flex__cell--shrink">
+<a href="index.html" title="Apache Pekko Management" class="md-header-nav__button md-logo">
+<img src="assets/images/pekko_logo.png" width="24" height="24">
+</a>
+</div>
+<div class="md-flex__cell md-flex__cell--shrink">
+<label class="md-icon md-icon--menu md-header-nav__button" for="__drawer"></label>
+</div>
+<div class="md-flex__cell md-flex__cell--stretch">
+<div class="md-flex__ellipsis md-header-nav__title" data-md-component="title">
+<span class="md-header-nav__topic">
+Apache Pekko Management
+</span>
+<span class="md-header-nav__topic">
+Cluster HTTP Management
+</span>
+</div>
+</div>
+<div class="md-flex__cell md-flex__cell--shrink">
+<label class="md-icon md-icon--search md-header-nav__button" for="__search"></label>
+<div class="md-search" data-md-component="search" role="dialog">
+<label class="md-search__overlay" for="__search"></label>
+<div class="md-search__inner" role="search">
+<form class="md-search__form" name="search">
+<input type="text" class="md-search__input" name="query" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="query" data-md-state="active">
+<label class="md-icon md-search__icon" for="__search"></label>
+<button type="reset" class="md-icon md-search__icon" data-md-component="reset" tabindex="-1"></button>
+</form>
+<div class="md-search__output">
+<div class="md-search__scrollwrap" data-md-scrollfix>
+<div class="md-search-result" data-md-component="result">
+<div class="md-search-result__meta">
+Type to start searching
+</div>
+<ol class="md-search-result__list"></ol>
+</div>
+</div>
+</div>
+</div>
+</div>
+
+</div>
+<div class="md-flex__cell md-flex__cell--shrink">
+<div class="md-header-nav__source">
+<a href="https://github.com/apache/incubator-pekko-management"
+title="Go to repository"
+class="md-source"
+data-md-source="github">
+<div class="md-source__icon">
+<i class="fa fa-github"></i>
+</div>
+<div class="md-source__repository">
+apache/incubator-pekko-management
+</div>
+</a>
+
+</div>
+</div>
+</div>
+</nav>
+</header>
+
+<div class="md-container">
+<main class="md-main">
+<div class="md-main__inner md-grid" data-md-component="container">
+<div class="md-sidebar md-sidebar--primary" data-md-component="navigation">
+<div class="md-sidebar__scrollwrap">
+<div class="md-sidebar__inner">
+<nav class="md-nav md-nav--primary" data-md-level="0" style="visibility: hidden">
+<label class="md-nav__title md-nav__title--site" for="drawer">
+<a href="index.html" title="Apache Pekko Management" class="md-nav__button md-logo">
+<span class="md-nav__button md-logo">
+<img src="assets/images/pekko_logo.png" width="24" height="24">
+</a>
+<a href="index.html" title="Apache Pekko Management">
+Apache Pekko Management
+</a>
+</label>
+<div class="md-nav__source">
+<a href="https://github.com/apache/incubator-pekko-management"
+title="Go to repository"
+class="md-source"
+data-md-source="github">
+<div class="md-source__icon">
+<i class="fa fa-github"></i>
+</div>
+<div class="md-source__repository">
+apache/incubator-pekko-management
+</div>
+</a>
+
+</div>
+<select class="supergroup" name="Language"><option class="group" value="group-java">Java</option><option class="group" value="group-scala">Scala</option></select>
+<ul>
+ <li><a href="index.html#overview" class="header">Overview</a></li>
+ <li><a href="kubernetes-deployment/index.html" class="page">Deploying Pekko Cluster to Kubernetes</a>
+ <ul>
+ <li><a href="kubernetes-deployment/preparing-for-production.html" class="page">Preparing for production</a></li>
+ <li><a href="kubernetes-deployment/forming-a-cluster.html" class="page">Forming an Pekko Cluster</a></li>
+ <li><a href="kubernetes-deployment/building.html" class="page">Building the application</a></li>
+ <li><a href="kubernetes-deployment/deploying.html" class="page">Deploying</a></li>
+ </ul></li>
+ <li><a href="pekko-management.html" class="page">Apache Pekko Management</a>
+ <ul>
+ <li><a href="pekko-management.html#project-info" class="header">Project Info</a></li>
+ <li><a href="pekko-management.html#dependencies" class="header">Dependencies</a></li>
+ <li><a href="pekko-management.html#basic-usage" class="header">Basic Usage</a></li>
+ <li><a href="pekko-management.html#basic-configuration" class="header">Basic Configuration</a></li>
+ <li><a href="pekko-management.html#read-only-routes" class="header">Read only routes</a></li>
+ <li><a href="pekko-management.html#configuring-security" class="header">Configuring Security</a></li>
+ <li><a href="pekko-management.html#stopping-pekko-management" class="header">Stopping Pekko Management</a></li>
+ <li><a href="pekko-management.html#developing-extensions" class="header">Developing Extensions</a></li>
+ </ul></li>
+ <li><a href="migration.html" class="page">Migration guide</a>
+ <ul>
+ <li><a href="migration.html#1-0" class="header">1.0</a></li>
+ </ul></li>
+ <li><a href="healthchecks.html" class="page">Health checks</a>
+ <ul>
+ <li><a href="healthchecks.html#defining-a-health-check" class="header">Defining a Health Check</a></li>
+ <li><a href="healthchecks.html#configuring-health-checks" class="header">Configuring health checks</a></li>
+ <li><a href="healthchecks.html#hosting-health-checks-as-an-pekko-management-route" class="header">Hosting health checks as an Pekko Management Route</a></li>
+ </ul></li>
+ <li><a href="bootstrap/index.html" class="page">Apache Pekko Cluster Bootstrap</a>
+ <ul>
+ <li><a href="bootstrap/index.html#prerequisites" class="header">Prerequisites</a></li>
+ <li><a href="bootstrap/index.html#project-info" class="header">Project Info</a></li>
+ <li><a href="bootstrap/index.html#dependency" class="header">Dependency</a></li>
+ <li><a href="bootstrap/index.html#using" class="header">Using</a></li>
+ <li><a href="bootstrap/index.html#how-it-works" class="header">How It Works</a></li>
+ <li><a href="bootstrap/index.html#joining-mechanism-precedence" class="header">Joining Mechanism Precedence</a></li>
+ <li><a href="bootstrap/index.html#deployment-considerations" class="header">Deployment considerations</a></li>
+ <li><a href="bootstrap/index.html#bootstrap-recipes" class="header">Bootstrap Recipes</a></li>
+ <li><a href="bootstrap/recipes.html" class="page">Bootstrap environments</a></li>
+ <li><a href="bootstrap/details.html" class="page">Bootstrap process</a></li>
+ <li><a href="bootstrap/troubleshooting.html" class="page">Troubleshooting</a></li>
+ <li><a href="bootstrap/local-config.html" class="page">Local using config</a></li>
+ <li><a href="bootstrap/kubernetes.html" class="page">Kubernetes via DNS</a></li>
+ <li><a href="bootstrap/kubernetes-api.html" class="page">Kubernetes API</a></li>
+ <li><a href="bootstrap/istio.html" class="page">Istio</a></li>
+ </ul></li>
+ <li><a href="discovery/index.html" class="page">Apache Pekko Discovery Methods</a>
+ <ul>
+ <li><a href="discovery/kubernetes.html" class="page">Kubernetes API</a></li>
+ <li><a href="discovery/consul.html" class="page">Consul</a></li>
+ <li><a href="discovery/marathon.html" class="page">Marathon API</a></li>
+ <li><a href="discovery/aws.html" class="page">AWS API</a></li>
+ </ul></li>
+ <li><a href="cluster-http-management.html#cluster-http-management" class="active page">Cluster HTTP Management</a>
+ <ul>
+ <li><a href="cluster-http-management.html#project-info" class="header">Project Info</a></li>
+ <li><a href="cluster-http-management.html#dependencies" class="header">Dependencies</a></li>
+ <li><a href="cluster-http-management.html#running" class="header">Running</a></li>
+ <li><a href="cluster-http-management.html#api-definition" class="header">API Definition</a></li>
+ <li><a href="cluster-http-management.html#hosting-the-routes-in-an-existing-pekko-http-server" class="header">Hosting the routes in an existing Pekko HTTP server</a></li>
+ <li><a href="cluster-http-management.html#disable-routes" class="header">Disable routes</a></li>
+ <li><a href="cluster-http-management.html#health-checks" class="header">Health checks</a></li>
+ </ul></li>
+ <li><a href="cluster-jmx-management.html" class="page">Built-in JMX Management</a></li>
+ <li><a href="loglevels/index.html" class="page">Dynamic Log Levels</a>
+ <ul>
+ <li><a href="loglevels/logback.html" class="page">Logback</a></li>
+ <li><a href="loglevels/log4j2.html" class="page">Log4j2</a></li>
+ </ul></li>
+ <li><a href="kubernetes-lease.html" class="page">Kubernetes Lease</a>
+ <ul>
+ <li><a href="kubernetes-lease.html#lease-instances" class="header">Lease Instances</a></li>
+ <li><a href="kubernetes-lease.html#configuring" class="header">Configuring</a></li>
+ <li><a href="kubernetes-lease.html#f-a-q" class="header">F.A.Q</a></li>
+ </ul></li>
+</ul>
+
+<nav class="md-nav md-nav--secondary">
+<label class="md-nav__title" for="__toc">Table of contents</label>
+<ul>
+ <li><a href="cluster-http-management.html#cluster-http-management" class="header">Cluster HTTP Management</a>
+ <ul>
+ <li><a href="cluster-http-management.html#project-info" class="header">Project Info</a></li>
+ <li><a href="cluster-http-management.html#dependencies" class="header">Dependencies</a></li>
+ <li><a href="cluster-http-management.html#running" class="header">Running</a></li>
+ <li><a href="cluster-http-management.html#api-definition" class="header">API Definition</a></li>
+ <li><a href="cluster-http-management.html#hosting-the-routes-in-an-existing-pekko-http-server" class="header">Hosting the routes in an existing Pekko HTTP server</a></li>
+ <li><a href="cluster-http-management.html#disable-routes" class="header">Disable routes</a></li>
+ <li><a href="cluster-http-management.html#health-checks" class="header">Health checks</a></li>
+ </ul></li>
+</ul>
+</nav>
+
+
+<ul class="md-nav__list md-nav__links">
+<li class="md-nav__item"><a href="https://apache.org"><i class="md-icon">link</i> Apache Software Foundation</a></li>
+<li class="md-nav__item"><a href="https://apache.org/licenses/"><i class="md-icon">link</i> License</a></li>
+<li class="md-nav__item"><a href="https://apache.org/security/"><i class="md-icon">link</i> Security</a></li>
+<li class="md-nav__item"><a href="https://privacy.apache.org/policies/privacy-policy-public.html"><i class="md-icon">link</i> Privacy</a></li>
+<li class="md-nav__item"><a href="https://www.apache.org/events/current-event.html"><i class="md-icon">link</i> Events</a></li>
+<li class="md-nav__item"><a href="https://www.apache.org/foundation/sponsorship.html"><i class="md-icon">link</i> Donate</a></li>
+<li class="md-nav__item"><a href="https://www.apache.org/foundation/thanks.html"><i class="md-icon">link</i> Thanks</a></li>
+</ul>
+
+</nav>
+<ul style="display: none">
+<li class="md-nav__item md-version" id="project.version">
+<label class="md-nav__link" for="__version">
+<i class="md-icon" title="Version">label_outline</i> 0.0.0+714-a034fd01*
+</label>
+</li>
+</ul>
+
+</div>
+</div>
+</div>
+<div class="md-sidebar md-sidebar--secondary" data-md-component="toc">
+<div class="md-sidebar__scrollwrap">
+<div class="md-sidebar__inner">
+<nav class="md-nav md-nav--secondary">
+<label class="md-nav__title" for="__toc">Table of contents</label>
+<ul>
+ <li><a href="cluster-http-management.html#cluster-http-management" class="header">Cluster HTTP Management</a>
+ <ul>
+ <li><a href="cluster-http-management.html#project-info" class="header">Project Info</a></li>
+ <li><a href="cluster-http-management.html#dependencies" class="header">Dependencies</a></li>
+ <li><a href="cluster-http-management.html#running" class="header">Running</a></li>
+ <li><a href="cluster-http-management.html#api-definition" class="header">API Definition</a></li>
+ <li><a href="cluster-http-management.html#hosting-the-routes-in-an-existing-pekko-http-server" class="header">Hosting the routes in an existing Pekko HTTP server</a></li>
+ <li><a href="cluster-http-management.html#disable-routes" class="header">Disable routes</a></li>
+ <li><a href="cluster-http-management.html#health-checks" class="header">Health checks</a></li>
+ </ul></li>
+</ul>
+</nav>
+
+</div>
+</div>
+</div>
+<div class="md-content">
+<article class="md-content__inner md-typeset">
+<div class="md-content__searchable">
+<a id="http-cluster-management"></a>
+<h1><a href="#cluster-http-management" name="cluster-http-management" class="anchor"><span class="anchor-link"></span></a>Cluster HTTP Management</h1>
+<p>Pekko Management Cluster HTTP is a Management extension that allows interaction with an <code>pekko-cluster</code> through an HTTP interface. This management extension exposes different operations to manage nodes in a cluster as well as health checks based on the cluster state.</p>
+<p>The operations exposed are comparable to the Command Line Management tool or the JMX interface <code>pekko-cluster</code> provides.</p>
+<h2><a href="#project-info" name="project-info" class="anchor"><span class="anchor-link"></span></a>Project Info</h2>
+<table class="project-info">
+<tr><th colspan="2">Project Info: Apache Pekko Management Cluster HTTP</th></tr>
+ <tr><th>Artifact</th><td><div>org.apache.pekko</div>
+ <div>pekko-management-cluster-http</div>
+ <div>0.0.0+714-a034fd01-SNAPSHOT</div>
+ <div><a href="https://repository.apache.org/content/repositories/snapshots/org/apache/pekko/" target="_blank" rel="noopener noreferrer">Snapshots are available</a></div>
+ </td></tr>
+ <tr><th>JDK versions</th><td><div>Adopt OpenJDK 8 with Hotspot</div><div>Adopt OpenJDK 11 with Hotspot</div></td></tr>
+ <tr><th>Scala versions</th><td>2.12.17, 2.13.10</td></tr>
+ <tr><th>License</th><td><div><a href="https://www.apache.org/licenses/LICENSE-2.0.html" target="_blank" rel="noopener noreferrer">Apache-2.0</a></div>
+ </td></tr>
+
+ <tr><th>Home page</th><td><a href="https://pekko.apache.org/">https://pekko.apache.org/</a></td></tr>
+ <tr><th>API documentation</th><td>
+ <div><a href="https://pekko.apache.org/api/pekko-management/current/org/apache/pekko/index.html" target="_blank" rel="noopener noreferrer">API (Scaladoc)</a></div>
+ </td></tr>
+ <tr><th>Forums</th><td>
+ <div><a href="https://lists.apache.org/list.html?dev@pekko.apache.org" target="_blank" rel="noopener noreferrer">Apache Pekko Dev mailing list</a></div>
+ <div><a href="https://lists.apache.org/list.html?user@pekko.apache.org" target="_blank" rel="noopener noreferrer">Apache Pekko User mailing list</a></div>
+ <div><a href="https://github.com/apache/incubator-pekko-management/discussions" target="_blank" rel="noopener noreferrer">Github Discussions</a></div>
+ </td></tr>
+ <tr><th>Release notes</th><td><a href="https://github.com/apache/incubator-pekko-management/releases" target="_blank" rel="noopener noreferrer">GitHub releases</a></td></tr>
+ <tr><th>Issues</th><td><a href="https://github.com/apache/incubator-pekko-management/issues" target="_blank" rel="noopener noreferrer">GitHub issues</a></td></tr>
+ <tr><th>Sources</th><td><a href="https://github.com/apache/incubator-pekko-management" target="_blank" rel="noopener noreferrer">https://github.com/apache/incubator-pekko-management</a></td></tr>
+</table>
+
+<h2><a href="#dependencies" name="dependencies" class="anchor"><span class="anchor-link"></span></a>Dependencies</h2>
+
+<p>The Pekko Cluster HTTP Management is a separate jar file. Make sure to include it along with the core pekko-management library in your project:</p>
+<dl class="dependency"><dt>sbt</dt><dd><pre class="prettyprint"><code class="language-scala">val PekkoManagementVersion = "0.0.0+714-a034fd01-SNAPSHOT"
+libraryDependencies ++= Seq(
+ "org.apache.pekko" %% "pekko-management" % PekkoManagementVersion,
+ "org.apache.pekko" %% "pekko-management-cluster-http" % PekkoManagementVersion
+)</code></pre></dd><dt>Gradle</dt><dd><pre class="prettyprint"><code class="language-gradle">def versions = [
+ PekkoManagementVersion: "0.0.0+714-a034fd01-SNAPSHOT",
+ ScalaBinary: "2.12"
+]
+dependencies {
+ implementation "org.apache.pekko:pekko-management_${versions.ScalaBinary}:${versions.PekkoManagementVersion}"
+ implementation "org.apache.pekko:pekko-management-cluster-http_${versions.ScalaBinary}:${versions.PekkoManagementVersion}"
+}</code></pre></dd><dt>Maven</dt><dd><pre class="prettyprint"><code class="language-xml"><properties>
+ <pekko.management.version>0.0.0+714-a034fd01-SNAPSHOT</pekko.management.version>
+ <scala.binary.version>2.12</scala.binary.version>
+</properties>
+<dependencies>
+ <dependency>
+ <groupId>org.apache.pekko</groupId>
+ <artifactId>pekko-management_${scala.binary.version}</artifactId>
+ <version>${pekko.management.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.pekko</groupId>
+ <artifactId>pekko-management-cluster-http_${scala.binary.version}</artifactId>
+ <version>${pekko.management.version}</version>
+ </dependency>
+</dependencies></code></pre></dd></dl>
+<p>Pekko Cluster HTTP Management can be used with Apache Pekko 0.0.0+26630-2c4d0ee0-SNAPSHOT or later. You have to override the following Pekko dependencies by defining them explicitly in your build and define the Pekko version to the one that you are using. Latest patch version of Pekko is recommended and a later version than 0.0.0+26630-2c4d0ee0-SNAPSHOT can be used.</p><dl class="dependency"><dt>sbt</dt><dd><pre class="prettyprint"><code class="language-scala">val PekkoVersion = "0.0. [...]
+libraryDependencies ++= Seq(
+ "org.apache.pekko" %% "pekko-cluster-sharding" % PekkoVersion,
+ "org.apache.pekko" %% "pekko-discovery" % PekkoVersion
+)</code></pre></dd><dt>Gradle</dt><dd><pre class="prettyprint"><code class="language-gradle">def versions = [
+ PekkoVersion: "0.0.0+26630-2c4d0ee0-SNAPSHOT",
+ ScalaBinary: "2.12"
+]
+dependencies {
+ implementation "org.apache.pekko:pekko-cluster-sharding_${versions.ScalaBinary}:${versions.PekkoVersion}"
+ implementation "org.apache.pekko:pekko-discovery_${versions.ScalaBinary}:${versions.PekkoVersion}"
+}</code></pre></dd><dt>Maven</dt><dd><pre class="prettyprint"><code class="language-xml"><properties>
+ <pekko.version>0.0.0+26630-2c4d0ee0-SNAPSHOT</pekko.version>
+ <scala.binary.version>2.12</scala.binary.version>
+</properties>
+<dependencies>
+ <dependency>
+ <groupId>org.apache.pekko</groupId>
+ <artifactId>pekko-cluster-sharding_${scala.binary.version}</artifactId>
+ <version>${pekko.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.pekko</groupId>
+ <artifactId>pekko-discovery_${scala.binary.version}</artifactId>
+ <version>${pekko.version}</version>
+ </dependency>
+</dependencies></code></pre></dd></dl>
+<h2><a href="#running" name="running" class="anchor"><span class="anchor-link"></span></a>Running</h2>
+<p>To make sure the Pekko Cluster HTTP Management is running, register it with Pekko Management:</p>
+<dl>
+ <dt>Scala</dt>
+ <dd>
+ <pre class="prettyprint"><button class="snippet-button copy-snippet" title="Copy snippet to clipboard">copy</button><a class="snippet-button go-to-source" href="https://github.com/apache/incubator-pekko-management/tree/master/management-cluster-http/src/test/scala/doc/org/apache/pekko/cluster/http/management/CompileOnlySpec.scala#L26-L28" target="_blank" title="Go to snippet source">source</a><code class="language-scala">val system = ActorSystem()
+// Automatically loads Cluster Http Routes
+PekkoManagement(system).start()</code></pre></dd>
+ <dt>Java</dt>
+ <dd>
+ <pre class="prettyprint"><button class="snippet-button copy-snippet" title="Copy snippet to clipboard">copy</button><a class="snippet-button go-to-source" href="https://github.com/apache/incubator-pekko-management/tree/master/management-cluster-http/src/test/java/jdoc/org/apache/pekko/cluster/http/management/CompileOnlyTest.java#L27-L28" target="_blank" title="Go to snippet source">source</a><code class="language-java">ActorSystem system = ActorSystem.create();
+PekkoManagement.get(system).start();</code></pre></dd>
+</dl>
+<h2><a href="#api-definition" name="api-definition" class="anchor"><span class="anchor-link"></span></a>API Definition</h2>
+<p>The following table describes the usage of the API. All <code>GET</code> operations are exposed by default. <code>POST</code>, <code>PUT</code> and <code>DELETE</code> operations are only enabled if <code>pekko.management.http.route-providers-read-only</code> is set to <code>false</code>.</p>
+<table>
+ <thead>
+ <tr>
+ <th>Path </th>
+ <th>HTTP method </th>
+ <th>Required form fields </th>
+ <th>Description</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td><code>/cluster/</code> </td>
+ <td>PUT </td>
+ <td>operation: Prepare-for-full-shutdown </td>
+ <td>Executes a prepare for full shutdown operation in cluster.</td>
+ </tr>
+ <tr>
+ <td><code>/cluster/domain-events</code> </td>
+ <td>GET </td>
+ <td>None </td>
+ <td>Returns cluster domain events as they occur, in JSON-encoded SSE format.</td>
+ </tr>
+ <tr>
+ <td><code>/cluster/members/</code> </td>
+ <td>GET </td>
+ <td>None </td>
+ <td>Returns the status of the Cluster in JSON format.</td>
+ </tr>
+ <tr>
+ <td><code>/cluster/members/</code> </td>
+ <td>POST </td>
+ <td>address: <code>{address}</code> </td>
+ <td>Executes join operation in cluster for the provided <code>{address}</code>.</td>
+ </tr>
+ <tr>
+ <td><code>/cluster/members/{address}</code> </td>
+ <td>GET </td>
+ <td>None </td>
+ <td>Returns the status of <code>{address}</code> in the Cluster in JSON format.</td>
+ </tr>
+ <tr>
+ <td><code>/cluster/members/{address}</code> </td>
+ <td>DELETE </td>
+ <td>None </td>
+ <td>Executes leave operation in cluster for provided <code>{address}</code>.</td>
+ </tr>
+ <tr>
+ <td><code>/cluster/members/{address}</code> </td>
+ <td>PUT </td>
+ <td>operation: Down </td>
+ <td>Executes down operation in cluster for provided <code>{address}</code>.</td>
+ </tr>
+ <tr>
+ <td><code>/cluster/members/{address}</code> </td>
+ <td>PUT </td>
+ <td>operation: Leave </td>
+ <td>Executes leave operation in cluster for provided <code>{address}</code>.</td>
+ </tr>
+ <tr>
+ <td><code>/cluster/shards/{name}</code> </td>
+ <td>GET </td>
+ <td>None </td>
+ <td>Returns shard info for the shard region with the provided <code>{name}</code></td>
+ </tr>
+ </tbody>
+</table>
+<p>The expected format of <code>address</code> follows the Cluster URI convention. Example: <code>pekko://Main@myhostname.com:3311</code></p>
+<p>In the paths <code>address</code> is also allowed to be provided without the protocol prefix. Example: <code>Main@myhostname.com:3311</code></p>
+<h3><a href="#get-cluster-domain-events-request-query-parameters" name="get-cluster-domain-events-request-query-parameters" class="anchor"><span class="anchor-link"></span></a>Get /cluster/domain-events request query parameters</h3>
+<table>
+ <thead>
+ <tr>
+ <th>Query Parameter </th>
+ <th>Description</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>type </td>
+ <td>Optional. Specify event type(s) to include in response (see table). If not specified, all event types are included.</td>
+ </tr>
+ </tbody>
+</table>
+<table>
+ <thead>
+ <tr>
+ <th>Event Type </th>
+ <th>Description</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>ClusterDomainEvent </td>
+ <td>cluster domain event (parent)</td>
+ </tr>
+ <tr>
+ <td>MemberEvent </td>
+ <td>membership event (parent)</td>
+ </tr>
+ <tr>
+ <td>MemberJoined </td>
+ <td>membership event - joined</td>
+ </tr>
+ <tr>
+ <td>MemberWeaklyUp </td>
+ <td>membership event - transitioned to WeaklyUp</td>
+ </tr>
+ <tr>
+ <td>MemberUp </td>
+ <td>membership event - transitioned to Up</td>
+ </tr>
+ <tr>
+ <td>MemberLeft </td>
+ <td>membership event - left</td>
+ </tr>
+ <tr>
+ <td>MemberExited </td>
+ <td>membership event - exited</td>
+ </tr>
+ <tr>
+ <td>MemberDowned </td>
+ <td>membership event - downed</td>
+ </tr>
+ <tr>
+ <td>MemberRemoved </td>
+ <td>membership event - removed</td>
+ </tr>
+ <tr>
+ <td>LeaderChanged </td>
+ <td>cluster’s leader has changed</td>
+ </tr>
+ <tr>
+ <td>RoleLeaderChanged </td>
+ <td>cluster’s role leader has changed</td>
+ </tr>
+ <tr>
+ <td>ClusterShuttingDown </td>
+ <td>cluster is shutting down</td>
+ </tr>
+ <tr>
+ <td>ReachabilityEvent </td>
+ <td>reachability event (parent)</td>
+ </tr>
+ <tr>
+ <td>UnreachableMember </td>
+ <td>reachability event - member now unreachable</td>
+ </tr>
+ <tr>
+ <td>ReachableMember </td>
+ <td>reachability event - member now reachable</td>
+ </tr>
+ <tr>
+ <td>DataCenterReachabilityEvent </td>
+ <td>DC reachability event (parent)</td>
+ </tr>
+ <tr>
+ <td>UnreachableDataCenter </td>
+ <td>DC reachability event - DC now unreachable</td>
+ </tr>
+ <tr>
+ <td>ReachableDataCenter </td>
+ <td>DC reachability event - DC now reachable</td>
+ </tr>
+ </tbody>
+</table>
+<p>Example request:</p>
+<pre><code>GET /cluster/domain-events?type=MemberUp&type=LeaderChanged HTTP/1.1
+Host: 192.168.1.23:8558
+</code></pre>
+<p>Example response:</p>
+<pre><code>HTTP/1.1 200 OK
+Server: pekko-http/1.0.0
+Date: Mon, 11 Jan 2021 21:02:37 GMT
+Transfer-Encoding: chunked
+Content-Type: text/event-stream
+
+data:{"member":{"dataCenter":"default","roles":["dc-default"],"status":"Up","uniqueAddress":{"address":"pekko://default@127.0.0.1:2551","longUid":-2440990093160003086}},"type":"MemberUp"}
+event:MemberUp
+
+data:{"address":"pekko://default@127.0.0.1:2551","type":"LeaderChanged"}
+event:LeaderChanged
+</code></pre>
+<h3><a href="#get-cluster-domain-events-responses" name="get-cluster-domain-events-responses" class="anchor"><span class="anchor-link"></span></a>Get /cluster/domain-events responses</h3>
+<table>
+ <thead>
+ <tr>
+ <th>Response code </th>
+ <th>Description</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>200 </td>
+ <td>Cluster events in Server-Sent-Event format (JSON)</td>
+ </tr>
+ <tr>
+ <td>500 </td>
+ <td>Something went wrong.</td>
+ </tr>
+ </tbody>
+</table>
+<h3><a href="#get-cluster-members-responses" name="get-cluster-members-responses" class="anchor"><span class="anchor-link"></span></a>Get /cluster/members responses</h3>
+<table>
+ <thead>
+ <tr>
+ <th>Response code </th>
+ <th>Description</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>200 </td>
+ <td>Status of cluster in JSON format</td>
+ </tr>
+ <tr>
+ <td>500 </td>
+ <td>Something went wrong. Cluster might be shutdown.</td>
+ </tr>
+ </tbody>
+</table>
+<p>Example response:</p>
+<pre><code> {
+ "selfNode": "pekko.tcp://test@10.10.10.10:1111",
+ "members": [
+ {
+ "node": "pekko.tcp://test@10.10.10.10:1111",
+ "nodeUid": "1116964444",
+ "status": "Up",
+ "roles": []
+ }
+ ],
+ "unreachable": [],
+ "leader: "pekko.tcp://test@10.10.10.10:1111",
+ "oldest: "pekko.tcp://test@10.10.10.10:1111"
+ }
+</code></pre>
+<p>Where <code>oldest</code> is the oldest node in the current datacenter.</p>
+<h3><a href="#post-cluster-members-responses" name="post-cluster-members-responses" class="anchor"><span class="anchor-link"></span></a>Post /cluster/members responses</h3>
+<table>
+ <thead>
+ <tr>
+ <th>Response code </th>
+ <th>Description</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>200 </td>
+ <td>Executing join operation.</td>
+ </tr>
+ <tr>
+ <td>500 </td>
+ <td>Something went wrong. Cluster might be shutdown.</td>
+ </tr>
+ </tbody>
+</table>
+<p>Example response:</p>
+<pre><code>Joining pekko.tcp://test@10.10.10.10:111
+</code></pre>
+<h3><a href="#get-cluster-members-address-responses" name="get-cluster-members-address-responses" class="anchor"><span class="anchor-link"></span></a>Get /cluster/members/{address} responses</h3>
+<table>
+ <thead>
+ <tr>
+ <th>Response code </th>
+ <th>Description</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>200 </td>
+ <td>Status of cluster in JSON format</td>
+ </tr>
+ <tr>
+ <td>404 </td>
+ <td>No member was found in the cluster for the given <code>{address}</code>.</td>
+ </tr>
+ <tr>
+ <td>500 </td>
+ <td>Something went wrong. Cluster might be shutdown.</td>
+ </tr>
+ </tbody>
+</table>
+<p>Example response:</p>
+<pre><code>{
+ "node": "pekko.tcp://test@10.10.10.10:1111",
+ "nodeUid": "-169203556",
+ "status": "Up",
+ "roles": []
+}
+</code></pre>
+<h3><a href="#delete-cluster-members-address-responses" name="delete-cluster-members-address-responses" class="anchor"><span class="anchor-link"></span></a>Delete /cluster/members/{address} responses</h3>
+<table>
+ <thead>
+ <tr>
+ <th>Response code </th>
+ <th>Description</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>200 </td>
+ <td>Executing leave operation.</td>
+ </tr>
+ <tr>
+ <td>404 </td>
+ <td>No member was found in the cluster for the given <code>{address}</code>.</td>
+ </tr>
+ <tr>
+ <td>500 </td>
+ <td>Something went wrong. Cluster might be shutdown.</td>
+ </tr>
+ </tbody>
+</table>
+<p>Example response:</p>
+<pre><code>Leaving pekko.tcp://test@10.10.10.10:111
+</code></pre>
+<h3><a href="#put-cluster-members-address-responses" name="put-cluster-members-address-responses" class="anchor"><span class="anchor-link"></span></a>Put /cluster/members/{address} responses</h3>
+<table>
+ <thead>
+ <tr>
+ <th>Response code </th>
+ <th>Operation </th>
+ <th>Description</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>200 </td>
+ <td>Down </td>
+ <td>Executing down operation.</td>
+ </tr>
+ <tr>
+ <td>200 </td>
+ <td>Leave </td>
+ <td>Executing leave operation.</td>
+ </tr>
+ <tr>
+ <td>400 </td>
+ <td> </td>
+ <td>Operation supplied in <code>operation</code> form field is not supported.</td>
+ </tr>
+ <tr>
+ <td>404 </td>
+ <td> </td>
+ <td>No member was found in the cluster for the given <code>{address}</code></td>
+ </tr>
+ <tr>
+ <td>500 </td>
+ <td> </td>
+ <td>Something went wrong. Cluster might be shutdown.</td>
+ </tr>
+ </tbody>
+</table>
+<p>Example response:</p>
+<pre><code>Downing pekko.tcp://test@10.10.10.10:111
+</code></pre>
+<h3><a href="#get-cluster-shard-responses" name="get-cluster-shard-responses" class="anchor"><span class="anchor-link"></span></a>Get /cluster/shard responses</h3>
+<table>
+ <thead>
+ <tr>
+ <th>Response code </th>
+ <th>Description</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>200 </td>
+ <td>Shard entity type keys in JSON format</td>
+ </tr>
+ </tbody>
+</table>
+<p>Example response:</p>
+<p>{ “entityTypeKeys”: [“ShoppingCart”] }</p>
+<h3><a href="#get-cluster-shards-name-responses" name="get-cluster-shards-name-responses" class="anchor"><span class="anchor-link"></span></a>Get /cluster/shards/{name} responses</h3>
+<table>
+ <thead>
+ <tr>
+ <th>Response code </th>
+ <th>Description</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>200 </td>
+ <td>Shard region information in JSON format</td>
+ </tr>
+ <tr>
+ <td>404 </td>
+ <td>No shard region was found on the node for the given <code>{name}</code></td>
+ </tr>
+ </tbody>
+</table>
+<p>Example response:</p>
+<pre><code> {
+ "regions": [
+ {
+ "shardId": "1234",
+ "numEntities": 30
+ }
+ ]
+ }
+</code></pre>
+<h2><a href="#hosting-the-routes-in-an-existing-pekko-http-server" name="hosting-the-routes-in-an-existing-pekko-http-server" class="anchor"><span class="anchor-link"></span></a>Hosting the routes in an existing Pekko HTTP server</h2>
+<p>Starting <code>PekkoMangement</code> starts a Pekko HTTP server and hosts the Cluster HTTP Routes. The routes can also be added to an existing Pekko HTTP server. To access all the routes:</p>
+<dl>
+ <dt>Scala</dt>
+ <dd>
+ <pre class="prettyprint"><button class="snippet-button copy-snippet" title="Copy snippet to clipboard">copy</button><a class="snippet-button go-to-source" href="https://github.com/apache/incubator-pekko-management/tree/master/management-cluster-http/src/test/scala/doc/org/apache/pekko/cluster/http/management/CompileOnlySpec.scala#L32-L33" target="_blank" title="Go to snippet source">source</a><code class="language-scala">val cluster = Cluster(system)
+val allRoutes: Route = ClusterHttpManagementRoutes(cluster)</code></pre></dd>
+ <dt>Java</dt>
+ <dd>
+ <pre class="prettyprint"><button class="snippet-button copy-snippet" title="Copy snippet to clipboard">copy</button><a class="snippet-button go-to-source" href="https://github.com/apache/incubator-pekko-management/tree/master/management-cluster-http/src/test/java/jdoc/org/apache/pekko/cluster/http/management/CompileOnlyTest.java#L32-L33" target="_blank" title="Go to snippet source">source</a><code class="language-java">Cluster cluster = Cluster.get(system);
+Route allRoutes = ClusterHttpManagementRoutes.all(cluster);</code></pre></dd>
+</dl>
+<p>Just the read only routes can be accessed:</p>
+<dl>
+ <dt>Scala</dt>
+ <dd>
+ <pre class="prettyprint"><button class="snippet-button copy-snippet" title="Copy snippet to clipboard">copy</button><a class="snippet-button go-to-source" href="https://github.com/apache/incubator-pekko-management/tree/master/management-cluster-http/src/test/scala/doc/org/apache/pekko/cluster/http/management/CompileOnlySpec.scala#L37" target="_blank" title="Go to snippet source">source</a><code class="language-scala">val readOnlyRoutes: Route = ClusterHttpManagementRoutes.readOnly(clus [...]
+ <dt>Java</dt>
+ <dd>
+ <pre class="prettyprint"><button class="snippet-button copy-snippet" title="Copy snippet to clipboard">copy</button><a class="snippet-button go-to-source" href="https://github.com/apache/incubator-pekko-management/tree/master/management-cluster-http/src/test/java/jdoc/org/apache/pekko/cluster/http/management/CompileOnlyTest.java#L37" target="_blank" title="Go to snippet source">source</a><code class="language-java">Route readOnlyRoutes = ClusterHttpManagementRoutes.readOnly(cluster);</ [...]
+</dl>
+<h2><a href="#disable-routes" name="disable-routes" class="anchor"><span class="anchor-link"></span></a>Disable routes</h2>
+<p>The Cluster HTTP Routes are included by default when this module is used. It can be disabled with the following configuration, for example if the cluster membership health checks are to be included but not the other Cluster HTTP Routes.</p>
+<pre><code>pekko.management.http.routes {
+ cluster-management = ""
+}
+</code></pre>
+<h2><a href="#health-checks" name="health-checks" class="anchor"><span class="anchor-link"></span></a>Health checks</h2>
+<p>A cluster membership <a href="healthchecks.html">health check</a> is included that is designed to be used as a readiness check.</p>
+<p>By default the health check returns <code>true</code> when a node is either <code>Up</code> or <code>WeaklyUp</code>. Can be configured with <code>pekko.management.cluster.health-checks.ready-states</code>.</p>
+<p>The cluster membership readiness check can be disabled with configuration:</p>
+<pre><code>pekko.management.health-checks.readiness-checks {
+ cluster-membership = ""
+}
+</code></pre>
+</div>
+<div>
+<a href="https://github.com/apache/incubator-pekko-management/tree/master/docs/src/main/paradox/cluster-http-management.md" title="Edit this page" class="md-source-file md-edit">
+Edit this page
+</a>
+</div>
+<div class="print-only">
+<span class="md-source-file md-version">
+0.0.0+714-a034fd01*
+</span>
+</div>
+</article>
+</div>
+</div>
+</main>
+<footer class="md-footer">
+<div class="md-footer-nav">
+<nav class="md-footer-nav__inner md-grid">
+<a href="discovery/aws.html" title="AWS API" class="md-flex md-footer-nav__link md-footer-nav__link--prev" rel="prev">
+<div class="md-flex__cell md-flex__cell--shrink">
+<i class="md-icon md-icon--arrow-back md-footer-nav__button"></i>
+</div>
+<div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
+<span class="md-flex__ellipsis">
+<span class="md-footer-nav__direction">
+Previous
+</span>
+AWS API
+</span>
+</div>
+</a>
+<a href="cluster-jmx-management.html" title="Built-in JMX Management" class="md-flex md-footer-nav__link md-footer-nav__link--next" rel="next">
+<div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
+<span class="md-flex__ellipsis">
+<span class="md-footer-nav__direction">
+Next
+</span>
+Built-in JMX Management
+</span>
+</div>
+<div class="md-flex__cell md-flex__cell--shrink">
+<i class="md-icon md-icon--arrow-forward md-footer-nav__button"></i>
+</div>
+</a>
+</nav>
+</div>
+<div class="md-footer-meta md-typeset">
+<div class="md-footer-meta__inner md-grid">
+<div class="md-footer-copyright">
+<div class="md-footer-copyright__highlight">
+Copyright © 2011-2022 <a href="https://www.lightbend.com/">Lightbend, Inc.</a>, © 2022, 2023
+ <a href="https://apache.org">The Apache Software Foundation</a>.
+ Apache Pekko, Pekko, and its feather logo are trademarks of The Apache Software Foundation.
+</div>
+Powered by
+<a href="https://github.com/lightbend/paradox">Paradox</a>
+and
+<a href="https://jonas.github.io/paradox-material-theme/">Paradox Material Theme</a>
+
+</div>
+</div>
+</div>
+</footer>
+
+</div>
+<script src="assets/javascripts/application.583bbe55.js"></script>
+<script src="assets/javascripts/paradox-material-theme.js"></script>
+<script>app.initialize({version:"0.17",url:{base:"."}})</script>
+<script type="text/javascript" src="lib/prettify/prettify.js"></script>
+<script type="text/javascript" src="lib/prettify/lang-scala.js"></script>
+<script type="text/javascript" src="lib/jquery/jquery.min.js"></script>
+<script type="text/javascript" src="assets/javascripts/groups.js"></script>
+
+<script type="text/javascript">
+document.addEventListener("DOMContentLoaded", function(event) {
+window.prettyPrint && prettyPrint();
+});
+</script>
+</body>
+</html>
diff --git a/content/docs/pekko-management/current/main/cluster-jmx-management.html b/content/docs/pekko-management/current/main/cluster-jmx-management.html
new file mode 100644
index 00000000..27a5b3ab
--- /dev/null
+++ b/content/docs/pekko-management/current/main/cluster-jmx-management.html
@@ -0,0 +1,331 @@
+<!DOCTYPE html>
+<html lang="en" class="no-js">
+<head>
+<meta charset="utf-8">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta http-equiv="x-ua-compatible" content="ie=edge">
+<meta name="description" content="Apache Pekko Management is a suite of tools for operating Apache Pekko Clusters.">
+<meta name="generator" content="Paradox, paradox-material-theme=0.6.0, mkdocs-material=3.0.3">
+
+<meta name="lang:clipboard.copy" content="Copy to clipboard">
+<meta name="lang:clipboard.copied" content="Copied to clipboard">
+<meta name="lang:search.language" content="">
+<meta name="lang:search.pipeline.stopwords" content="true">
+<meta name="lang:search.pipeline.trimmer" content="true">
+<meta name="lang:search.result.none" content="No matching documents">
+<meta name="lang:search.result.one" content="1 matching document">
+<meta name="lang:search.result.other" content="# matching documents">
+<meta name="lang:search.tokenizer" content="[\s\-]+">
+
+
+<meta name="description" content="Apache Pekko Management is a suite of tools for operating Apache Pekko Clusters.">
+<link rel="shortcut icon" href="assets/images/pekko_favicon.png">
+<title>Built-in JMX Management · Apache Pekko Management</title>
+<link rel="stylesheet" href="assets/stylesheets/application.451f80e5.css">
+<link rel="stylesheet" href="assets/stylesheets/application-palette.22915126.css">
+<link rel="stylesheet" href="lib/material__tabs/dist/mdc.tabs.min.css">
+<link rel="stylesheet" href="lib/prettify/prettify.css">
+<script src="assets/javascripts/modernizr.1aa3b519.js"></script>
+<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,400i,700|Roboto+Mono">
+<style>
+body,input{font-family:"Roboto","Helvetica Neue",Helvetica,Arial,sans-serif}
+code,kbd,pre{font-family:"Roboto Mono","Courier New",Courier,monospace}
+</style>
+<link rel="stylesheet" href="assets/fonts/font-awesome.css">
+<link rel="stylesheet" href="assets/fonts/material-icons.css">
+<link rel="stylesheet" href="assets/stylesheets/paradox-material-theme.css">
+<link rel="stylesheet" href="assets/stylesheets/pekko-theme.css">
+</head>
+<body
+data-md-color-primary="white"
+data-md-color-accent="orange"
+>
+<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
+<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
+<label class="md-overlay" data-md-component="overlay" for="__drawer"></label>
+<header class="md-header" data-md-component="header">
+<nav class="md-header-nav md-grid">
+<div class="md-flex">
+<div class="md-flex__cell md-flex__cell--shrink">
+<a href="index.html" title="Apache Pekko Management" class="md-header-nav__button md-logo">
+<img src="assets/images/pekko_logo.png" width="24" height="24">
+</a>
+</div>
+<div class="md-flex__cell md-flex__cell--shrink">
+<label class="md-icon md-icon--menu md-header-nav__button" for="__drawer"></label>
+</div>
+<div class="md-flex__cell md-flex__cell--stretch">
+<div class="md-flex__ellipsis md-header-nav__title" data-md-component="title">
+<span class="md-header-nav__topic">
+Apache Pekko Management
+</span>
+<span class="md-header-nav__topic">
+Built-in JMX Management
+</span>
+</div>
+</div>
+<div class="md-flex__cell md-flex__cell--shrink">
+<label class="md-icon md-icon--search md-header-nav__button" for="__search"></label>
+<div class="md-search" data-md-component="search" role="dialog">
+<label class="md-search__overlay" for="__search"></label>
+<div class="md-search__inner" role="search">
+<form class="md-search__form" name="search">
+<input type="text" class="md-search__input" name="query" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="query" data-md-state="active">
+<label class="md-icon md-search__icon" for="__search"></label>
+<button type="reset" class="md-icon md-search__icon" data-md-component="reset" tabindex="-1"></button>
+</form>
+<div class="md-search__output">
+<div class="md-search__scrollwrap" data-md-scrollfix>
+<div class="md-search-result" data-md-component="result">
+<div class="md-search-result__meta">
+Type to start searching
+</div>
+<ol class="md-search-result__list"></ol>
+</div>
+</div>
+</div>
+</div>
+</div>
+
+</div>
+<div class="md-flex__cell md-flex__cell--shrink">
+<div class="md-header-nav__source">
+<a href="https://github.com/apache/incubator-pekko-management"
+title="Go to repository"
+class="md-source"
+data-md-source="github">
+<div class="md-source__icon">
+<i class="fa fa-github"></i>
+</div>
+<div class="md-source__repository">
+apache/incubator-pekko-management
+</div>
+</a>
+
+</div>
+</div>
+</div>
+</nav>
+</header>
+
+<div class="md-container">
+<main class="md-main">
+<div class="md-main__inner md-grid" data-md-component="container">
+<div class="md-sidebar md-sidebar--primary" data-md-component="navigation">
+<div class="md-sidebar__scrollwrap">
+<div class="md-sidebar__inner">
+<nav class="md-nav md-nav--primary" data-md-level="0" style="visibility: hidden">
+<label class="md-nav__title md-nav__title--site" for="drawer">
+<a href="index.html" title="Apache Pekko Management" class="md-nav__button md-logo">
+<span class="md-nav__button md-logo">
+<img src="assets/images/pekko_logo.png" width="24" height="24">
+</a>
+<a href="index.html" title="Apache Pekko Management">
+Apache Pekko Management
+</a>
+</label>
+<div class="md-nav__source">
+<a href="https://github.com/apache/incubator-pekko-management"
+title="Go to repository"
+class="md-source"
+data-md-source="github">
+<div class="md-source__icon">
+<i class="fa fa-github"></i>
+</div>
+<div class="md-source__repository">
+apache/incubator-pekko-management
+</div>
+</a>
+
+</div>
+<select class="supergroup" name="Language"><option class="group" value="group-java">Java</option><option class="group" value="group-scala">Scala</option></select>
+<ul>
+ <li><a href="index.html#overview" class="header">Overview</a></li>
+ <li><a href="kubernetes-deployment/index.html" class="page">Deploying Pekko Cluster to Kubernetes</a>
+ <ul>
+ <li><a href="kubernetes-deployment/preparing-for-production.html" class="page">Preparing for production</a></li>
+ <li><a href="kubernetes-deployment/forming-a-cluster.html" class="page">Forming an Pekko Cluster</a></li>
+ <li><a href="kubernetes-deployment/building.html" class="page">Building the application</a></li>
+ <li><a href="kubernetes-deployment/deploying.html" class="page">Deploying</a></li>
+ </ul></li>
+ <li><a href="pekko-management.html" class="page">Apache Pekko Management</a>
+ <ul>
+ <li><a href="pekko-management.html#project-info" class="header">Project Info</a></li>
+ <li><a href="pekko-management.html#dependencies" class="header">Dependencies</a></li>
+ <li><a href="pekko-management.html#basic-usage" class="header">Basic Usage</a></li>
+ <li><a href="pekko-management.html#basic-configuration" class="header">Basic Configuration</a></li>
+ <li><a href="pekko-management.html#read-only-routes" class="header">Read only routes</a></li>
+ <li><a href="pekko-management.html#configuring-security" class="header">Configuring Security</a></li>
+ <li><a href="pekko-management.html#stopping-pekko-management" class="header">Stopping Pekko Management</a></li>
+ <li><a href="pekko-management.html#developing-extensions" class="header">Developing Extensions</a></li>
+ </ul></li>
+ <li><a href="migration.html" class="page">Migration guide</a>
+ <ul>
+ <li><a href="migration.html#1-0" class="header">1.0</a></li>
+ </ul></li>
+ <li><a href="healthchecks.html" class="page">Health checks</a>
+ <ul>
+ <li><a href="healthchecks.html#defining-a-health-check" class="header">Defining a Health Check</a></li>
+ <li><a href="healthchecks.html#configuring-health-checks" class="header">Configuring health checks</a></li>
+ <li><a href="healthchecks.html#hosting-health-checks-as-an-pekko-management-route" class="header">Hosting health checks as an Pekko Management Route</a></li>
+ </ul></li>
+ <li><a href="bootstrap/index.html" class="page">Apache Pekko Cluster Bootstrap</a>
+ <ul>
+ <li><a href="bootstrap/index.html#prerequisites" class="header">Prerequisites</a></li>
+ <li><a href="bootstrap/index.html#project-info" class="header">Project Info</a></li>
+ <li><a href="bootstrap/index.html#dependency" class="header">Dependency</a></li>
+ <li><a href="bootstrap/index.html#using" class="header">Using</a></li>
+ <li><a href="bootstrap/index.html#how-it-works" class="header">How It Works</a></li>
+ <li><a href="bootstrap/index.html#joining-mechanism-precedence" class="header">Joining Mechanism Precedence</a></li>
+ <li><a href="bootstrap/index.html#deployment-considerations" class="header">Deployment considerations</a></li>
+ <li><a href="bootstrap/index.html#bootstrap-recipes" class="header">Bootstrap Recipes</a></li>
+ <li><a href="bootstrap/recipes.html" class="page">Bootstrap environments</a></li>
+ <li><a href="bootstrap/details.html" class="page">Bootstrap process</a></li>
+ <li><a href="bootstrap/troubleshooting.html" class="page">Troubleshooting</a></li>
+ <li><a href="bootstrap/local-config.html" class="page">Local using config</a></li>
+ <li><a href="bootstrap/kubernetes.html" class="page">Kubernetes via DNS</a></li>
+ <li><a href="bootstrap/kubernetes-api.html" class="page">Kubernetes API</a></li>
+ <li><a href="bootstrap/istio.html" class="page">Istio</a></li>
+ </ul></li>
+ <li><a href="discovery/index.html" class="page">Apache Pekko Discovery Methods</a>
+ <ul>
+ <li><a href="discovery/kubernetes.html" class="page">Kubernetes API</a></li>
+ <li><a href="discovery/consul.html" class="page">Consul</a></li>
+ <li><a href="discovery/marathon.html" class="page">Marathon API</a></li>
+ <li><a href="discovery/aws.html" class="page">AWS API</a></li>
+ </ul></li>
+ <li><a href="cluster-http-management.html" class="page">Cluster HTTP Management</a>
+ <ul>
+ <li><a href="cluster-http-management.html#project-info" class="header">Project Info</a></li>
+ <li><a href="cluster-http-management.html#dependencies" class="header">Dependencies</a></li>
+ <li><a href="cluster-http-management.html#running" class="header">Running</a></li>
+ <li><a href="cluster-http-management.html#api-definition" class="header">API Definition</a></li>
+ <li><a href="cluster-http-management.html#hosting-the-routes-in-an-existing-pekko-http-server" class="header">Hosting the routes in an existing Pekko HTTP server</a></li>
+ <li><a href="cluster-http-management.html#disable-routes" class="header">Disable routes</a></li>
+ <li><a href="cluster-http-management.html#health-checks" class="header">Health checks</a></li>
+ </ul></li>
+ <li><a href="cluster-jmx-management.html#built-in-jmx-management" class="active page">Built-in JMX Management</a></li>
+ <li><a href="loglevels/index.html" class="page">Dynamic Log Levels</a>
+ <ul>
+ <li><a href="loglevels/logback.html" class="page">Logback</a></li>
+ <li><a href="loglevels/log4j2.html" class="page">Log4j2</a></li>
+ </ul></li>
+ <li><a href="kubernetes-lease.html" class="page">Kubernetes Lease</a>
+ <ul>
+ <li><a href="kubernetes-lease.html#lease-instances" class="header">Lease Instances</a></li>
+ <li><a href="kubernetes-lease.html#configuring" class="header">Configuring</a></li>
+ <li><a href="kubernetes-lease.html#f-a-q" class="header">F.A.Q</a></li>
+ </ul></li>
+</ul>
+
+<nav class="md-nav md-nav--secondary">
+</nav>
+
+
+<ul class="md-nav__list md-nav__links">
+<li class="md-nav__item"><a href="https://apache.org"><i class="md-icon">link</i> Apache Software Foundation</a></li>
+<li class="md-nav__item"><a href="https://apache.org/licenses/"><i class="md-icon">link</i> License</a></li>
+<li class="md-nav__item"><a href="https://apache.org/security/"><i class="md-icon">link</i> Security</a></li>
+<li class="md-nav__item"><a href="https://privacy.apache.org/policies/privacy-policy-public.html"><i class="md-icon">link</i> Privacy</a></li>
+<li class="md-nav__item"><a href="https://www.apache.org/events/current-event.html"><i class="md-icon">link</i> Events</a></li>
+<li class="md-nav__item"><a href="https://www.apache.org/foundation/sponsorship.html"><i class="md-icon">link</i> Donate</a></li>
+<li class="md-nav__item"><a href="https://www.apache.org/foundation/thanks.html"><i class="md-icon">link</i> Thanks</a></li>
+</ul>
+
+</nav>
+<ul style="display: none">
+<li class="md-nav__item md-version" id="project.version">
+<label class="md-nav__link" for="__version">
+<i class="md-icon" title="Version">label_outline</i> 0.0.0+714-a034fd01*
+</label>
+</li>
+</ul>
+
+</div>
+</div>
+</div>
+<div class="md-content">
+<article class="md-content__inner md-typeset">
+<div class="md-content__searchable">
+<h1><a href="#built-in-jmx-management" name="built-in-jmx-management" class="anchor"><span class="anchor-link"></span></a>Built-in JMX Management</h1>
+<p>Pekko has built-in JMX beans which you can use to manage the cluster, read more about them in the Pekko documentation: <a href="https://pekko.apache.org/docs/pekko/current/cluster-usage.html#cluster-jmx">Cluster Usage: JMX</a></p>
+</div>
+<div>
+<a href="https://github.com/apache/incubator-pekko-management/tree/master/docs/src/main/paradox/cluster-jmx-management.md" title="Edit this page" class="md-source-file md-edit">
+Edit this page
+</a>
+</div>
+<div class="print-only">
+<span class="md-source-file md-version">
+0.0.0+714-a034fd01*
+</span>
+</div>
+</article>
+</div>
+</div>
+</main>
+<footer class="md-footer">
+<div class="md-footer-nav">
+<nav class="md-footer-nav__inner md-grid">
+<a href="cluster-http-management.html" title="Cluster HTTP Management" class="md-flex md-footer-nav__link md-footer-nav__link--prev" rel="prev">
+<div class="md-flex__cell md-flex__cell--shrink">
+<i class="md-icon md-icon--arrow-back md-footer-nav__button"></i>
+</div>
+<div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
+<span class="md-flex__ellipsis">
+<span class="md-footer-nav__direction">
+Previous
+</span>
+Cluster HTTP Management
+</span>
+</div>
+</a>
+<a href="loglevels/index.html" title="Dynamic Log Levels" class="md-flex md-footer-nav__link md-footer-nav__link--next" rel="next">
+<div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
+<span class="md-flex__ellipsis">
+<span class="md-footer-nav__direction">
+Next
+</span>
+Dynamic Log Levels
+</span>
+</div>
+<div class="md-flex__cell md-flex__cell--shrink">
+<i class="md-icon md-icon--arrow-forward md-footer-nav__button"></i>
+</div>
+</a>
+</nav>
+</div>
+<div class="md-footer-meta md-typeset">
+<div class="md-footer-meta__inner md-grid">
+<div class="md-footer-copyright">
+<div class="md-footer-copyright__highlight">
+Copyright © 2011-2022 <a href="https://www.lightbend.com/">Lightbend, Inc.</a>, © 2022, 2023
+ <a href="https://apache.org">The Apache Software Foundation</a>.
+ Apache Pekko, Pekko, and its feather logo are trademarks of The Apache Software Foundation.
+</div>
+Powered by
+<a href="https://github.com/lightbend/paradox">Paradox</a>
+and
+<a href="https://jonas.github.io/paradox-material-theme/">Paradox Material Theme</a>
+
+</div>
+</div>
+</div>
+</footer>
+
+</div>
+<script src="assets/javascripts/application.583bbe55.js"></script>
+<script src="assets/javascripts/paradox-material-theme.js"></script>
+<script>app.initialize({version:"0.17",url:{base:"."}})</script>
+<script type="text/javascript" src="lib/prettify/prettify.js"></script>
+<script type="text/javascript" src="lib/prettify/lang-scala.js"></script>
+<script type="text/javascript" src="lib/jquery/jquery.min.js"></script>
+<script type="text/javascript" src="assets/javascripts/groups.js"></script>
+
+<script type="text/javascript">
+document.addEventListener("DOMContentLoaded", function(event) {
+window.prettyPrint && prettyPrint();
+});
+</script>
+</body>
+</html>
diff --git a/content/docs/pekko-management/current/main/discovery/aws.html b/content/docs/pekko-management/current/main/discovery/aws.html
new file mode 100644
index 00000000..ab72c371
--- /dev/null
+++ b/content/docs/pekko-management/current/main/discovery/aws.html
@@ -0,0 +1,603 @@
+<!DOCTYPE html>
+<html lang="en" class="no-js">
+<head>
+<meta charset="utf-8">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta http-equiv="x-ua-compatible" content="ie=edge">
+<meta name="description" content="Apache Pekko Management is a suite of tools for operating Apache Pekko Clusters.">
+<meta name="generator" content="Paradox, paradox-material-theme=0.6.0, mkdocs-material=3.0.3">
+
+<meta name="lang:clipboard.copy" content="Copy to clipboard">
+<meta name="lang:clipboard.copied" content="Copied to clipboard">
+<meta name="lang:search.language" content="">
+<meta name="lang:search.pipeline.stopwords" content="true">
+<meta name="lang:search.pipeline.trimmer" content="true">
+<meta name="lang:search.result.none" content="No matching documents">
+<meta name="lang:search.result.one" content="1 matching document">
+<meta name="lang:search.result.other" content="# matching documents">
+<meta name="lang:search.tokenizer" content="[\s\-]+">
+
+
+<meta name="description" content="Apache Pekko Management is a suite of tools for operating Apache Pekko Clusters.">
+<link rel="shortcut icon" href="../assets/images/pekko_favicon.png">
+<title>AWS API · Apache Pekko Management</title>
+<link rel="stylesheet" href="../assets/stylesheets/application.451f80e5.css">
+<link rel="stylesheet" href="../assets/stylesheets/application-palette.22915126.css">
+<link rel="stylesheet" href="../lib/material__tabs/dist/mdc.tabs.min.css">
+<link rel="stylesheet" href="../lib/prettify/prettify.css">
+<script src="../assets/javascripts/modernizr.1aa3b519.js"></script>
+<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,400i,700|Roboto+Mono">
+<style>
+body,input{font-family:"Roboto","Helvetica Neue",Helvetica,Arial,sans-serif}
+code,kbd,pre{font-family:"Roboto Mono","Courier New",Courier,monospace}
+</style>
+<link rel="stylesheet" href="../assets/fonts/font-awesome.css">
+<link rel="stylesheet" href="../assets/fonts/material-icons.css">
+<link rel="stylesheet" href="../assets/stylesheets/paradox-material-theme.css">
+<link rel="stylesheet" href="../assets/stylesheets/pekko-theme.css">
+</head>
+<body
+data-md-color-primary="white"
+data-md-color-accent="orange"
+>
+<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
+<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
+<label class="md-overlay" data-md-component="overlay" for="__drawer"></label>
+<header class="md-header" data-md-component="header">
+<nav class="md-header-nav md-grid">
+<div class="md-flex">
+<div class="md-flex__cell md-flex__cell--shrink">
+<a href="../index.html" title="Apache Pekko Management" class="md-header-nav__button md-logo">
+<img src="../assets/images/pekko_logo.png" width="24" height="24">
+</a>
+</div>
+<div class="md-flex__cell md-flex__cell--shrink">
+<label class="md-icon md-icon--menu md-header-nav__button" for="__drawer"></label>
+</div>
+<div class="md-flex__cell md-flex__cell--stretch">
+<div class="md-flex__ellipsis md-header-nav__title" data-md-component="title">
+<span class="md-header-nav__topic">
+Apache Pekko Management
+</span>
+<span class="md-header-nav__topic">
+AWS API
+</span>
+</div>
+</div>
+<div class="md-flex__cell md-flex__cell--shrink">
+<label class="md-icon md-icon--search md-header-nav__button" for="__search"></label>
+<div class="md-search" data-md-component="search" role="dialog">
+<label class="md-search__overlay" for="__search"></label>
+<div class="md-search__inner" role="search">
+<form class="md-search__form" name="search">
+<input type="text" class="md-search__input" name="query" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="query" data-md-state="active">
+<label class="md-icon md-search__icon" for="__search"></label>
+<button type="reset" class="md-icon md-search__icon" data-md-component="reset" tabindex="-1"></button>
+</form>
+<div class="md-search__output">
+<div class="md-search__scrollwrap" data-md-scrollfix>
+<div class="md-search-result" data-md-component="result">
+<div class="md-search-result__meta">
+Type to start searching
+</div>
+<ol class="md-search-result__list"></ol>
+</div>
+</div>
+</div>
+</div>
+</div>
+
+</div>
+<div class="md-flex__cell md-flex__cell--shrink">
+<div class="md-header-nav__source">
+<a href="https://github.com/apache/incubator-pekko-management"
+title="Go to repository"
+class="md-source"
+data-md-source="github">
+<div class="md-source__icon">
+<i class="fa fa-github"></i>
+</div>
+<div class="md-source__repository">
+apache/incubator-pekko-management
+</div>
+</a>
+
+</div>
+</div>
+</div>
+</nav>
+</header>
+
+<div class="md-container">
+<main class="md-main">
+<div class="md-main__inner md-grid" data-md-component="container">
+<div class="md-sidebar md-sidebar--primary" data-md-component="navigation">
+<div class="md-sidebar__scrollwrap">
+<div class="md-sidebar__inner">
+<nav class="md-nav md-nav--primary" data-md-level="0" style="visibility: hidden">
+<label class="md-nav__title md-nav__title--site" for="drawer">
+<a href="../index.html" title="Apache Pekko Management" class="md-nav__button md-logo">
+<span class="md-nav__button md-logo">
+<img src="../assets/images/pekko_logo.png" width="24" height="24">
+</a>
+<a href="../index.html" title="Apache Pekko Management">
+Apache Pekko Management
+</a>
+</label>
+<div class="md-nav__source">
+<a href="https://github.com/apache/incubator-pekko-management"
+title="Go to repository"
+class="md-source"
+data-md-source="github">
+<div class="md-source__icon">
+<i class="fa fa-github"></i>
+</div>
+<div class="md-source__repository">
+apache/incubator-pekko-management
+</div>
+</a>
+
+</div>
+<select class="supergroup" name="Language"><option class="group" value="group-java">Java</option><option class="group" value="group-scala">Scala</option></select>
+<ul>
+ <li><a href="../index.html#overview" class="header">Overview</a></li>
+ <li><a href="../kubernetes-deployment/index.html" class="page">Deploying Pekko Cluster to Kubernetes</a>
+ <ul>
+ <li><a href="../kubernetes-deployment/preparing-for-production.html" class="page">Preparing for production</a></li>
+ <li><a href="../kubernetes-deployment/forming-a-cluster.html" class="page">Forming an Pekko Cluster</a></li>
+ <li><a href="../kubernetes-deployment/building.html" class="page">Building the application</a></li>
+ <li><a href="../kubernetes-deployment/deploying.html" class="page">Deploying</a></li>
+ </ul></li>
+ <li><a href="../pekko-management.html" class="page">Apache Pekko Management</a>
+ <ul>
+ <li><a href="../pekko-management.html#project-info" class="header">Project Info</a></li>
+ <li><a href="../pekko-management.html#dependencies" class="header">Dependencies</a></li>
+ <li><a href="../pekko-management.html#basic-usage" class="header">Basic Usage</a></li>
+ <li><a href="../pekko-management.html#basic-configuration" class="header">Basic Configuration</a></li>
+ <li><a href="../pekko-management.html#read-only-routes" class="header">Read only routes</a></li>
+ <li><a href="../pekko-management.html#configuring-security" class="header">Configuring Security</a></li>
+ <li><a href="../pekko-management.html#stopping-pekko-management" class="header">Stopping Pekko Management</a></li>
+ <li><a href="../pekko-management.html#developing-extensions" class="header">Developing Extensions</a></li>
+ </ul></li>
+ <li><a href="../migration.html" class="page">Migration guide</a>
+ <ul>
+ <li><a href="../migration.html#1-0" class="header">1.0</a></li>
+ </ul></li>
+ <li><a href="../healthchecks.html" class="page">Health checks</a>
+ <ul>
+ <li><a href="../healthchecks.html#defining-a-health-check" class="header">Defining a Health Check</a></li>
+ <li><a href="../healthchecks.html#configuring-health-checks" class="header">Configuring health checks</a></li>
+ <li><a href="../healthchecks.html#hosting-health-checks-as-an-pekko-management-route" class="header">Hosting health checks as an Pekko Management Route</a></li>
+ </ul></li>
+ <li><a href="../bootstrap/index.html" class="page">Apache Pekko Cluster Bootstrap</a>
+ <ul>
+ <li><a href="../bootstrap/index.html#prerequisites" class="header">Prerequisites</a></li>
+ <li><a href="../bootstrap/index.html#project-info" class="header">Project Info</a></li>
+ <li><a href="../bootstrap/index.html#dependency" class="header">Dependency</a></li>
+ <li><a href="../bootstrap/index.html#using" class="header">Using</a></li>
+ <li><a href="../bootstrap/index.html#how-it-works" class="header">How It Works</a></li>
+ <li><a href="../bootstrap/index.html#joining-mechanism-precedence" class="header">Joining Mechanism Precedence</a></li>
+ <li><a href="../bootstrap/index.html#deployment-considerations" class="header">Deployment considerations</a></li>
+ <li><a href="../bootstrap/index.html#bootstrap-recipes" class="header">Bootstrap Recipes</a></li>
+ <li><a href="../bootstrap/recipes.html" class="page">Bootstrap environments</a></li>
+ <li><a href="../bootstrap/details.html" class="page">Bootstrap process</a></li>
+ <li><a href="../bootstrap/troubleshooting.html" class="page">Troubleshooting</a></li>
+ <li><a href="../bootstrap/local-config.html" class="page">Local using config</a></li>
+ <li><a href="../bootstrap/kubernetes.html" class="page">Kubernetes via DNS</a></li>
+ <li><a href="../bootstrap/kubernetes-api.html" class="page">Kubernetes API</a></li>
+ <li><a href="../bootstrap/istio.html" class="page">Istio</a></li>
+ </ul></li>
+ <li><a href="../discovery/index.html" class="page">Apache Pekko Discovery Methods</a>
+ <ul>
+ <li><a href="../discovery/kubernetes.html" class="page">Kubernetes API</a></li>
+ <li><a href="../discovery/consul.html" class="page">Consul</a></li>
+ <li><a href="../discovery/marathon.html" class="page">Marathon API</a></li>
+ <li><a href="../discovery/aws.html#aws-api" class="active page">AWS API</a></li>
+ </ul></li>
+ <li><a href="../cluster-http-management.html" class="page">Cluster HTTP Management</a>
+ <ul>
+ <li><a href="../cluster-http-management.html#project-info" class="header">Project Info</a></li>
+ <li><a href="../cluster-http-management.html#dependencies" class="header">Dependencies</a></li>
+ <li><a href="../cluster-http-management.html#running" class="header">Running</a></li>
+ <li><a href="../cluster-http-management.html#api-definition" class="header">API Definition</a></li>
+ <li><a href="../cluster-http-management.html#hosting-the-routes-in-an-existing-pekko-http-server" class="header">Hosting the routes in an existing Pekko HTTP server</a></li>
+ <li><a href="../cluster-http-management.html#disable-routes" class="header">Disable routes</a></li>
+ <li><a href="../cluster-http-management.html#health-checks" class="header">Health checks</a></li>
+ </ul></li>
+ <li><a href="../cluster-jmx-management.html" class="page">Built-in JMX Management</a></li>
+ <li><a href="../loglevels/index.html" class="page">Dynamic Log Levels</a>
+ <ul>
+ <li><a href="../loglevels/logback.html" class="page">Logback</a></li>
+ <li><a href="../loglevels/log4j2.html" class="page">Log4j2</a></li>
+ </ul></li>
+ <li><a href="../kubernetes-lease.html" class="page">Kubernetes Lease</a>
+ <ul>
+ <li><a href="../kubernetes-lease.html#lease-instances" class="header">Lease Instances</a></li>
+ <li><a href="../kubernetes-lease.html#configuring" class="header">Configuring</a></li>
+ <li><a href="../kubernetes-lease.html#f-a-q" class="header">F.A.Q</a></li>
+ </ul></li>
+</ul>
+
+<nav class="md-nav md-nav--secondary">
+<label class="md-nav__title" for="__toc">Table of contents</label>
+<ul>
+ <li><a href="../discovery/aws.html#aws-api" class="header">AWS API</a>
+ <ul>
+ <li><a href="../discovery/aws.html#project-info" class="header">Project Info</a></li>
+ </ul></li>
+</ul>
+</nav>
+
+
+<ul class="md-nav__list md-nav__links">
+<li class="md-nav__item"><a href="https://apache.org"><i class="md-icon">link</i> Apache Software Foundation</a></li>
+<li class="md-nav__item"><a href="https://apache.org/licenses/"><i class="md-icon">link</i> License</a></li>
+<li class="md-nav__item"><a href="https://apache.org/security/"><i class="md-icon">link</i> Security</a></li>
+<li class="md-nav__item"><a href="https://privacy.apache.org/policies/privacy-policy-public.html"><i class="md-icon">link</i> Privacy</a></li>
+<li class="md-nav__item"><a href="https://www.apache.org/events/current-event.html"><i class="md-icon">link</i> Events</a></li>
+<li class="md-nav__item"><a href="https://www.apache.org/foundation/sponsorship.html"><i class="md-icon">link</i> Donate</a></li>
+<li class="md-nav__item"><a href="https://www.apache.org/foundation/thanks.html"><i class="md-icon">link</i> Thanks</a></li>
+</ul>
+
+</nav>
+<ul style="display: none">
+<li class="md-nav__item md-version" id="project.version">
+<label class="md-nav__link" for="__version">
+<i class="md-icon" title="Version">label_outline</i> 0.0.0+714-a034fd01*
+</label>
+</li>
+</ul>
+
+</div>
+</div>
+</div>
+<div class="md-sidebar md-sidebar--secondary" data-md-component="toc">
+<div class="md-sidebar__scrollwrap">
+<div class="md-sidebar__inner">
+<nav class="md-nav md-nav--secondary">
+<label class="md-nav__title" for="__toc">Table of contents</label>
+<ul>
+ <li><a href="../discovery/aws.html#aws-api" class="header">AWS API</a>
+ <ul>
+ <li><a href="../discovery/aws.html#project-info" class="header">Project Info</a></li>
+ </ul></li>
+</ul>
+</nav>
+
+</div>
+</div>
+</div>
+<div class="md-content">
+<article class="md-content__inner md-typeset">
+<div class="md-content__searchable">
+<h2><a href="#aws-api" name="aws-api" class="anchor"><span class="anchor-link"></span></a>AWS API</h2><div class="callout warning "><div class="callout-title">Warning</div>
+<p>This module is community maintained and the Lightbend subscription doesn’t cover support for this module.</p></div>
+<p>If you’re using EC2 directly <em>or</em> you’re using ECS with host mode networking <em>and</em> you’re deploying one container per cluster member, continue to <a href="aws.html#discovery-method-aws-api-ec2-tag-based-discovery">Discovery Method: AWS API - EC2 Tag-Based Discovery</a>.</p>
+<p>If you’re using ECS with <a href="https://aws.amazon.com/blogs/compute/introducing-cloud-native-networking-for-ecs-containers/">awsvpcs</a> mode networking (whether on EC2 or with <a href="https://aws.amazon.com/fargate/">Fargate</a>), continue to <a href="aws.html#discovery-method-aws-api-ecs-discovery">Discovery Method: AWS API - ECS Discovery</a>.</p>
+<p>ECS with bridge mode networking is not supported.</p>
+<p>If you’re using EKS, then you may want to use the <a href="kubernetes.html">‘Kubernetes API’-based discovery method</a> instead.</p>
+<h2><a href="#project-info" name="project-info" class="anchor"><span class="anchor-link"></span></a>Project Info</h2>
+<table class="project-info">
+<tr><th colspan="2">Project Info: Apache Pekko Discovery AWS</th></tr>
+ <tr><th>Artifact</th><td><div>org.apache.pekko</div>
+ <div>pekko-discovery-aws-api</div>
+ <div>0.0.0+714-a034fd01-SNAPSHOT</div>
+ <div><a href="https://repository.apache.org/content/repositories/snapshots/org/apache/pekko/" target="_blank" rel="noopener noreferrer">Snapshots are available</a></div>
+ </td></tr>
+ <tr><th>JDK versions</th><td><div>Adopt OpenJDK 8 with Hotspot</div><div>Adopt OpenJDK 11 with Hotspot</div></td></tr>
+ <tr><th>Scala versions</th><td>2.12.17, 2.13.10</td></tr>
+ <tr><th>License</th><td><div><a href="https://www.apache.org/licenses/LICENSE-2.0.html" target="_blank" rel="noopener noreferrer">Apache-2.0</a></div>
+ </td></tr>
+
+ <tr><th>Home page</th><td><a href="https://pekko.apache.org/">https://pekko.apache.org/</a></td></tr>
+ <tr><th>API documentation</th><td>
+ <div><a href="https://pekko.apache.org/api/pekko-management/current/org/apache/pekko/index.html" target="_blank" rel="noopener noreferrer">API (Scaladoc)</a></div>
+ </td></tr>
+ <tr><th>Forums</th><td>
+ <div><a href="https://lists.apache.org/list.html?dev@pekko.apache.org" target="_blank" rel="noopener noreferrer">Apache Pekko Dev mailing list</a></div>
+ <div><a href="https://lists.apache.org/list.html?user@pekko.apache.org" target="_blank" rel="noopener noreferrer">Apache Pekko User mailing list</a></div>
+ <div><a href="https://github.com/apache/incubator-pekko-management/discussions" target="_blank" rel="noopener noreferrer">Github Discussions</a></div>
+ </td></tr>
+ <tr><th>Release notes</th><td><a href="https://github.com/apache/incubator-pekko-management/releases" target="_blank" rel="noopener noreferrer">GitHub releases</a></td></tr>
+ <tr><th>Issues</th><td><a href="https://github.com/apache/incubator-pekko-management/issues" target="_blank" rel="noopener noreferrer">GitHub issues</a></td></tr>
+ <tr><th>Sources</th><td><a href="https://github.com/apache/incubator-pekko-management" target="_blank" rel="noopener noreferrer">https://github.com/apache/incubator-pekko-management</a></td></tr>
+</table>
+
+<h3><a href="#discovery-method-aws-api-ec2-tag-based-discovery" name="discovery-method-aws-api-ec2-tag-based-discovery" class="anchor"><span class="anchor-link"></span></a>Discovery Method: AWS API - EC2 Tag-Based Discovery</h3>
+
+<p>You can use tags to simply mark the instances that belong to the same cluster. Use a tag that has “service” as the key and set the value equal to the name of your service (same value as <code>pekko.management.cluster.bootstrap.contact-point-discovery.service-name</code> defined in <code>application.conf</code>, if you’re using this module for bootstrapping your Pekko cluster).</p>
+
+<p>Screenshot of two tagged EC2 instances:</p>
+
+<p><img src="../images/discovery-aws-ec2-tagged-instances.png" alt="EC2 instances" /></p>
+
+<p>Note the tag <strong>service</strong> -> <em>products-api</em>. It is set on both instances.</p>
+
+<p>Note that this implementation is adequate for users running service clusters on <em>vanilla</em> EC2 instances. These instances can be created and tagged manually, or created via an auto-scaling group (ASG). If they are created via an ASG, they can be tagged automatically on creation. Simply add the tag to the auto-scaling group configuration and ensure the “Tag New Instances” option is checked.</p>
+
+<h4><a href="#dependencies-and-usage-ec2-tag-based-discovery-" name="dependencies-and-usage-ec2-tag-based-discovery-" class="anchor"><span class="anchor-link"></span></a>Dependencies and usage (EC2 Tag-Based Discovery)</h4>
+
+<p>This is a separate JAR file:</p>
+<dl class="dependency"><dt>sbt</dt><dd><pre class="prettyprint"><code class="language-scala">val PekkoManagementVersion = "0.0.0+714-a034fd01-SNAPSHOT"
+libraryDependencies += "com.lightbend.pekko.discovery" %% "pekko-discovery-aws-api" % PekkoManagementVersion</code></pre></dd><dt>Gradle</dt><dd><pre class="prettyprint"><code class="language-gradle">def versions = [
+ PekkoManagementVersion: "0.0.0+714-a034fd01-SNAPSHOT",
+ ScalaBinary: "2.12"
+]
+dependencies {
+ implementation "com.lightbend.pekko.discovery:pekko-discovery-aws-api_${versions.ScalaBinary}:${versions.PekkoManagementVersion}"
+}</code></pre></dd><dt>Maven</dt><dd><pre class="prettyprint"><code class="language-xml"><properties>
+ <pekko.management.version>0.0.0+714-a034fd01-SNAPSHOT</pekko.management.version>
+ <scala.binary.version>2.12</scala.binary.version>
+</properties>
+<dependencies>
+ <dependency>
+ <groupId>com.lightbend.pekko.discovery</groupId>
+ <artifactId>pekko-discovery-aws-api_${scala.binary.version}</artifactId>
+ <version>${pekko.management.version}</version>
+ </dependency>
+</dependencies></code></pre></dd></dl>
+<p><code>pekko-discovery-aws-api</code> can be used with Pekko 0.0.0+26630-2c4d0ee0-SNAPSHOT or later. You have to override the following Pekko dependencies by defining them explicitly in your build and define the Pekko version to the one that you are using. Latest patch version of Pekko is recommended and a later version than 0.0.0+26630-2c4d0ee0-SNAPSHOT can be used.</p><dl class="dependency"><dt>sbt</dt><dd><pre class="prettyprint"><code class="language-scala">val PekkoVersion = "0.0. [...]
+libraryDependencies ++= Seq(
+ "org.apache.pekko" %% "pekko-cluster" % PekkoVersion,
+ "org.apache.pekko" %% "pekko-discovery" % PekkoVersion
+)</code></pre></dd><dt>Gradle</dt><dd><pre class="prettyprint"><code class="language-gradle">def versions = [
+ PekkoVersion: "0.0.0+26630-2c4d0ee0-SNAPSHOT",
+ ScalaBinary: "2.12"
+]
+dependencies {
+ implementation "org.apache.pekko:pekko-cluster_${versions.ScalaBinary}:${versions.PekkoVersion}"
+ implementation "org.apache.pekko:pekko-discovery_${versions.ScalaBinary}:${versions.PekkoVersion}"
+}</code></pre></dd><dt>Maven</dt><dd><pre class="prettyprint"><code class="language-xml"><properties>
+ <pekko.version>0.0.0+26630-2c4d0ee0-SNAPSHOT</pekko.version>
+ <scala.binary.version>2.12</scala.binary.version>
+</properties>
+<dependencies>
+ <dependency>
+ <groupId>org.apache.pekko</groupId>
+ <artifactId>pekko-cluster_${scala.binary.version}</artifactId>
+ <version>${pekko.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.pekko</groupId>
+ <artifactId>pekko-discovery_${scala.binary.version}</artifactId>
+ <version>${pekko.version}</version>
+ </dependency>
+</dependencies></code></pre></dd></dl>
+<p>And in your <code>application.conf</code>:</p>
+<pre><code>pekko.discovery {
+ method = aws-api-ec2-tag-based
+}
+</code></pre>
+<p>Notes:</p>
+<ul>
+ <li>
+ <p>You will need to make sure that the proper privileges are in place for the discovery implementation to access the Amazon EC2 API. The simplest way to do this is by creating a IAM role that, at a minimum, allows the <em>DescribeInstances</em> action. Attach this IAM role to the EC2 instances that need to access the discovery implementation. See the docs for <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-roles-for-amazon-ec2.html">IAM Roles for Amazon EC2</a>.</p></li>
+ <li>
+ <p>In general, for the EC2 instances to “talk to each other” (necessary for forming a cluster), they need to be in the same security group and <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/security-group-rules-reference.html#sg-rules-other-instances">the proper rules have to be set</a>.</p></li>
+ <li>
+ <p>You can set additional filters (by instance type, region, other tags etc.) in your application.conf file, in the <code>pekko.discovery.aws-api-ec2-tag-based.filters</code> key. The filters have to be key=value pairs separated by the semicolon character. For example:</p>
+ <pre><code>pekko {
+ discovery {
+ aws-api-ec2-tag-based {
+ filters = "instance-type=m1.small;tag:purpose=production"
+ }
+ }
+}
+</code></pre></li>
+ <li>
+ <p>By default, this module is configured for clusters with one Pekko node per EC2 instance: it separates cluster members solely by their EC2 IP address. However, we can change the default configuration to indicate multiple ports per discovered EC2 IP, and achieve a setup with multiple Pekko nodes (i.e. multiple JVMs) per EC2 instance.</p>
+ <pre><code>pekko {
+ discovery {
+ aws-api-ec2-tag-based {
+ ports = [8557, 8558, 8559] # 3 Pekko nodes per EC2 instance
+ # note that the above need to be the ports associated with the *Pekko Management* extension
+ }
+ }
+}
+</code></pre>
+ <p>Note: this comes with the limitation that each EC2 instance has to have the same number of Pekko nodes.</p></li>
+ <li>
+ <p>You can change the default tag key from “service” to something else. This can be done via <code>application.conf</code>, by setting <code>pekko.discovery.aws-api-ec2-tag-based.tag-key</code> to something else.</p>
+ <pre><code>pekko.discovery.aws-api-ec2-tag-based.tag-key = "pekko-cluster"
+</code></pre></li>
+ <li>
+ <p>If your service is running in a docker container, you will need to configure Pekko Management with separate IPs for binding and discovery. This is because Pekko Management needs to <em>bind</em> to the internal docker IP, but will <em>discover</em> the “host” IP (the EC2 private IP) on the AWS API. See <a href="../pekko-management.html">Basic Configuration</a> on how to separate the bind IP from the discovery IP.</p></li>
+</ul>
+<p>Demo:</p>
+<ul>
+ <li>A working demo app is available in the <a href="https://github.com/apache/incubator-pekko-management/tree/master/integration-test/aws-api-ec2">integration-test</a> folder.</li>
+</ul>
+<h3><a href="#discovery-method-aws-api-ecs-discovery" name="discovery-method-aws-api-ecs-discovery" class="anchor"><span class="anchor-link"></span></a>Discovery Method: AWS API - ECS Discovery</h3>
+<p>If you’re using ECS with <a href="https://aws.amazon.com/blogs/compute/introducing-cloud-native-networking-for-ecs-containers/">awsvpc</a> mode networking, you can have all task instances of a given ECS service discover each other. If you’re using this module for bootstrapping your Pekko cluster that you’ll do so by setting the value of <code>pekko.management.cluster.bootstrap.contact-point-discovery.service-name</code> to that of the ECS service itself.</p>
+<p>Screenshot of two ECS task instances (the service name is <code>liquidity-application</code>):</p>
+<p><img src="../images/discovery-aws-ecs-task-instances.png" alt="ECS task instances" /></p>
+<h4><a href="#dependencies-and-usage-ecs-discovery-" name="dependencies-and-usage-ecs-discovery-" class="anchor"><span class="anchor-link"></span></a>Dependencies and usage (ECS Discovery)</h4>
+<p>There are two “flavours” of the ECS Discovery module.</p>
+<h5><a href="#pekko-discovery-aws-api" name="pekko-discovery-aws-api" class="anchor"><span class="anchor-link"></span></a>pekko-discovery-aws-api</h5>
+<p>This uses the mainstream AWS SDK. The advantage here is that if you’ve already got the mainstream AWS SDK as a dependency you’re not now also bringing in the preview SDK. The disadvantage is that the mainstream SDK does blocking IO.</p><dl class="dependency"><dt>sbt</dt><dd><pre class="prettyprint"><code class="language-scala">val PekkoManagementVersion = "0.0.0+714-a034fd01-SNAPSHOT"
+libraryDependencies += "com.lightbend.pekko.discovery" %% "pekko-discovery-aws-api" % PekkoManagementVersion</code></pre></dd><dt>Gradle</dt><dd><pre class="prettyprint"><code class="language-gradle">def versions = [
+ PekkoManagementVersion: "0.0.0+714-a034fd01-SNAPSHOT",
+ ScalaBinary: "2.12"
+]
+dependencies {
+ implementation "com.lightbend.pekko.discovery:pekko-discovery-aws-api_${versions.ScalaBinary}:${versions.PekkoManagementVersion}"
+}</code></pre></dd><dt>Maven</dt><dd><pre class="prettyprint"><code class="language-xml"><properties>
+ <pekko.management.version>0.0.0+714-a034fd01-SNAPSHOT</pekko.management.version>
+ <scala.binary.version>2.12</scala.binary.version>
+</properties>
+<dependencies>
+ <dependency>
+ <groupId>com.lightbend.pekko.discovery</groupId>
+ <artifactId>pekko-discovery-aws-api_${scala.binary.version}</artifactId>
+ <version>${pekko.management.version}</version>
+ </dependency>
+</dependencies></code></pre></dd></dl>
+<p>And in your <code>application.conf</code>:</p>
+<pre><code>pekko.discovery {
+ method = aws-api-ecs
+ aws-api-ecs {
+ # Defaults to "default" to match the AWS default cluster name if not overridden
+ cluster = "your-ecs-cluster-name"
+ }
+}
+</code></pre>
+<h5><a href="#pekko-discovery-aws-api-async" name="pekko-discovery-aws-api-async" class="anchor"><span class="anchor-link"></span></a>pekko-discovery-aws-api-async</h5>
+<p>This uses the preview AWS SDK. The advantage here is that the SDK does non-blocking IO, which you probably want. You might need to think carefully before using this though if you’ve already got the mainstream AWS SDK as a dependency.</p>
+<p>Once the async AWS SDK is out of preview it is likely that the <code>pekko-discovery-aws-api</code> module will be discontinued in favour of <code>pekko-discovery-aws-api-async</code>.</p><dl class="dependency"><dt>sbt</dt><dd><pre class="prettyprint"><code class="language-scala">val PekkoManagementVersion = "0.0.0+714-a034fd01-SNAPSHOT"
+libraryDependencies += "com.lightbend.pekko.discovery" %% "pekko-discovery-aws-api-async" % PekkoManagementVersion</code></pre></dd><dt>Gradle</dt><dd><pre class="prettyprint"><code class="language-gradle">def versions = [
+ PekkoManagementVersion: "0.0.0+714-a034fd01-SNAPSHOT",
+ ScalaBinary: "2.12"
+]
+dependencies {
+ implementation "com.lightbend.pekko.discovery:pekko-discovery-aws-api-async_${versions.ScalaBinary}:${versions.PekkoManagementVersion}"
+}</code></pre></dd><dt>Maven</dt><dd><pre class="prettyprint"><code class="language-xml"><properties>
+ <pekko.management.version>0.0.0+714-a034fd01-SNAPSHOT</pekko.management.version>
+ <scala.binary.version>2.12</scala.binary.version>
+</properties>
+<dependencies>
+ <dependency>
+ <groupId>com.lightbend.pekko.discovery</groupId>
+ <artifactId>pekko-discovery-aws-api-async_${scala.binary.version}</artifactId>
+ <version>${pekko.management.version}</version>
+ </dependency>
+</dependencies></code></pre></dd></dl>
+<p>We have 2 approaches in ECS: <code>aws-api-ecs-async</code> and <code>aws-api-ecs-task-set-async</code>.</p>
+<h6><a href="#aws-api-ecs-async" name="aws-api-ecs-async" class="anchor"><span class="anchor-link"></span></a>aws-api-ecs-async</h6>
+<p>In your <code>application.conf</code>:</p>
+<pre><code>pekko.discovery {
+ method = aws-api-ecs-async
+ aws-api-ecs-async {
+ # Defaults to "default" to match the AWS default cluster name if not overridden
+ cluster = "your-ecs-cluster-name"
+ # Defaults to an empty list
+ tags = [
+ { key = "deployment-side", value = "blue" }
+ ]
+ }
+}
+</code></pre>
+<p>This will query the AWS API to retrieve all running tasks of the ESC service specified at <code>pekko.management.cluster.bootstrap.contact-point-discovery.service-name</code>.</p>
+<h6><a href="#aws-api-ecs-task-set-async" name="aws-api-ecs-task-set-async" class="anchor"><span class="anchor-link"></span></a>aws-api-ecs-task-set-async</h6>
+<p>If you use AWS CodeDeploy, you probably want to use this method of discovery.</p>
+<p>In your <code>application.conf</code>:</p>
+<pre><code>pekko.discovery {
+ method = aws-api-ecs-task-set-async
+ aws-api-ecs-task-set-async {
+ # Defaults to "default" to match the AWS default cluster name if not overridden
+ cluster = "your-ecs-cluster-name"
+ }
+}
+</code></pre>
+<p>The service-discovery works in 3 steps: 1. Query the internal ECS metadata API to retrieve the TaskARN of itself (See <a href="https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-metadata-endpoint-v3.html">AWS docs</a>) 2. Retrieve the TaskSet to which the TaskARN belongs 3. Retrieve all Tasks belonging to that TaskSet</p>
+<p>Notes:</p>
+<ul>
+ <li>
+ <p>Since the implementation uses the AWS ECS API, you’ll need to make sure that AWS credentials are provided. The simplest way to do this is to create an IAM role that includes appropriate permissions for AWS ECS API access. Attach this IAM role to the task definition of the ECS Service. See the docs for <a href="https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-iam-roles.html">IAM Roles for Tasks</a>.</p></li>
+ <li>
+ <p>In general, for the ECS task instances to “talk to each other” (necessary for forming a cluster), they need to be in the same security group and the proper rules have to be set. See the docs for <a href="https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-networking.html">Task Networking with the <code>awsvpc</code> Network Mode</a>.</p></li>
+ <li>
+ <p>pekko-remote by default sets <code>pekko.remote.netty.tcp.hostname</code> to the result of <code>InetAddress.getLocalHost.getHostAddress</code>, and pekko-management does the same for <code>pekko.management.http.hostname</code>. However, <code>InetAddress.getLocalHost.getHostAddress</code> throws an exception when running in awsvpc mode (because the container name cannot be resolved), so you will need to set this explicitly. An alternative host address discovery method is prov [...]
+ <li>
+ <p>Because ECS service discovery is only able to discover IP addresses (not ports too) you’ll need to set <code>pekko.management.cluster.bootstrap.contact-point.fallback-port = 8558</code>, where 8558 is whatever port you choose to bind pekko-management to.</p></li>
+ <li>
+ <p>You can set additional filters to only discover nodes with specific tag values in your application.conf file, in the <code>pekko.discovery.aws-api-ecs-async.tags</code> key. An empty list of tags will not filter any nodes out.</p></li>
+</ul>
+<p>For example: <code>
+ pekko {
+ discovery {
+ aws-api-ecs-async {
+ tags = [
+ { key = "environment", value = "staging" },
+ { key = "deployment-side", value = "blue" }
+ ]
+ }
+ }
+ }
+</code></p>
+<ul>
+ <li>The current implementation only supports discovery of service task instances within the same region.</li>
+</ul>
+<p>Demo:</p>
+<ul>
+ <li>A working demo app is available in the <a href="https://github.com/apache/incubator-pekko-management/tree/master/integration-test/aws-api-ecs">integration-test</a> folder. It includes CloudFormation templates with minimal permissions w.r.t to IAM policies and security group ingress, and so is a good starting point for any deployment that integrates the <a href="https://en.wikipedia.org/wiki/Principle_of_least_privilege">principle of least privilege</a>.</li>
+</ul>
+</div>
+<div>
+<a href="https://github.com/apache/incubator-pekko-management/tree/master/docs/src/main/paradox/discovery/aws.md" title="Edit this page" class="md-source-file md-edit">
+Edit this page
+</a>
+</div>
+<div class="print-only">
+<span class="md-source-file md-version">
+0.0.0+714-a034fd01*
+</span>
+</div>
+</article>
+</div>
+</div>
+</main>
+<footer class="md-footer">
+<div class="md-footer-nav">
+<nav class="md-footer-nav__inner md-grid">
+<a href="../discovery/marathon.html" title="Marathon API" class="md-flex md-footer-nav__link md-footer-nav__link--prev" rel="prev">
+<div class="md-flex__cell md-flex__cell--shrink">
+<i class="md-icon md-icon--arrow-back md-footer-nav__button"></i>
+</div>
+<div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
+<span class="md-flex__ellipsis">
+<span class="md-footer-nav__direction">
+Previous
+</span>
+Marathon API
+</span>
+</div>
+</a>
+<a href="../cluster-http-management.html" title="Cluster HTTP Management" class="md-flex md-footer-nav__link md-footer-nav__link--next" rel="next">
+<div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
+<span class="md-flex__ellipsis">
+<span class="md-footer-nav__direction">
+Next
+</span>
+Cluster HTTP Management
+</span>
+</div>
+<div class="md-flex__cell md-flex__cell--shrink">
+<i class="md-icon md-icon--arrow-forward md-footer-nav__button"></i>
+</div>
+</a>
+</nav>
+</div>
+<div class="md-footer-meta md-typeset">
+<div class="md-footer-meta__inner md-grid">
+<div class="md-footer-copyright">
+<div class="md-footer-copyright__highlight">
+Copyright © 2011-2022 <a href="https://www.lightbend.com/">Lightbend, Inc.</a>, © 2022, 2023
+ <a href="https://apache.org">The Apache Software Foundation</a>.
+ Apache Pekko, Pekko, and its feather logo are trademarks of The Apache Software Foundation.
+</div>
+Powered by
+<a href="https://github.com/lightbend/paradox">Paradox</a>
+and
+<a href="https://jonas.github.io/paradox-material-theme/">Paradox Material Theme</a>
+
+</div>
+</div>
+</div>
+</footer>
+
+</div>
+<script src="../assets/javascripts/application.583bbe55.js"></script>
+<script src="../assets/javascripts/paradox-material-theme.js"></script>
+<script>app.initialize({version:"0.17",url:{base:"../."}})</script>
+<script type="text/javascript" src="../lib/prettify/prettify.js"></script>
+<script type="text/javascript" src="../lib/prettify/lang-scala.js"></script>
+<script type="text/javascript" src="../lib/jquery/jquery.min.js"></script>
+<script type="text/javascript" src="../assets/javascripts/groups.js"></script>
+
+<script type="text/javascript">
+document.addEventListener("DOMContentLoaded", function(event) {
+window.prettyPrint && prettyPrint();
+});
+</script>
+</body>
+</html>
diff --git a/content/docs/pekko-management/current/main/discovery/consul.html b/content/docs/pekko-management/current/main/discovery/consul.html
new file mode 100644
index 00000000..2e92fa84
--- /dev/null
+++ b/content/docs/pekko-management/current/main/discovery/consul.html
@@ -0,0 +1,454 @@
+<!DOCTYPE html>
+<html lang="en" class="no-js">
+<head>
+<meta charset="utf-8">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<meta http-equiv="x-ua-compatible" content="ie=edge">
+<meta name="description" content="Apache Pekko Management is a suite of tools for operating Apache Pekko Clusters.">
+<meta name="generator" content="Paradox, paradox-material-theme=0.6.0, mkdocs-material=3.0.3">
+
+<meta name="lang:clipboard.copy" content="Copy to clipboard">
+<meta name="lang:clipboard.copied" content="Copied to clipboard">
+<meta name="lang:search.language" content="">
+<meta name="lang:search.pipeline.stopwords" content="true">
+<meta name="lang:search.pipeline.trimmer" content="true">
+<meta name="lang:search.result.none" content="No matching documents">
+<meta name="lang:search.result.one" content="1 matching document">
+<meta name="lang:search.result.other" content="# matching documents">
+<meta name="lang:search.tokenizer" content="[\s\-]+">
+
+
+<meta name="description" content="Apache Pekko Management is a suite of tools for operating Apache Pekko Clusters.">
+<link rel="shortcut icon" href="../assets/images/pekko_favicon.png">
+<title>Consul · Apache Pekko Management</title>
+<link rel="stylesheet" href="../assets/stylesheets/application.451f80e5.css">
+<link rel="stylesheet" href="../assets/stylesheets/application-palette.22915126.css">
+<link rel="stylesheet" href="../lib/material__tabs/dist/mdc.tabs.min.css">
+<link rel="stylesheet" href="../lib/prettify/prettify.css">
+<script src="../assets/javascripts/modernizr.1aa3b519.js"></script>
+<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,400i,700|Roboto+Mono">
+<style>
+body,input{font-family:"Roboto","Helvetica Neue",Helvetica,Arial,sans-serif}
+code,kbd,pre{font-family:"Roboto Mono","Courier New",Courier,monospace}
+</style>
+<link rel="stylesheet" href="../assets/fonts/font-awesome.css">
+<link rel="stylesheet" href="../assets/fonts/material-icons.css">
+<link rel="stylesheet" href="../assets/stylesheets/paradox-material-theme.css">
+<link rel="stylesheet" href="../assets/stylesheets/pekko-theme.css">
+</head>
+<body
+data-md-color-primary="white"
+data-md-color-accent="orange"
+>
+<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
+<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
+<label class="md-overlay" data-md-component="overlay" for="__drawer"></label>
+<header class="md-header" data-md-component="header">
+<nav class="md-header-nav md-grid">
+<div class="md-flex">
+<div class="md-flex__cell md-flex__cell--shrink">
+<a href="../index.html" title="Apache Pekko Management" class="md-header-nav__button md-logo">
+<img src="../assets/images/pekko_logo.png" width="24" height="24">
+</a>
+</div>
+<div class="md-flex__cell md-flex__cell--shrink">
+<label class="md-icon md-icon--menu md-header-nav__button" for="__drawer"></label>
+</div>
+<div class="md-flex__cell md-flex__cell--stretch">
+<div class="md-flex__ellipsis md-header-nav__title" data-md-component="title">
+<span class="md-header-nav__topic">
+Apache Pekko Management
+</span>
+<span class="md-header-nav__topic">
+Consul
+</span>
+</div>
+</div>
+<div class="md-flex__cell md-flex__cell--shrink">
+<label class="md-icon md-icon--search md-header-nav__button" for="__search"></label>
+<div class="md-search" data-md-component="search" role="dialog">
+<label class="md-search__overlay" for="__search"></label>
+<div class="md-search__inner" role="search">
+<form class="md-search__form" name="search">
+<input type="text" class="md-search__input" name="query" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="query" data-md-state="active">
+<label class="md-icon md-search__icon" for="__search"></label>
+<button type="reset" class="md-icon md-search__icon" data-md-component="reset" tabindex="-1"></button>
+</form>
+<div class="md-search__output">
+<div class="md-search__scrollwrap" data-md-scrollfix>
+<div class="md-search-result" data-md-component="result">
... 13219 lines suppressed ...
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@pekko.apache.org
For additional commands, e-mail: commits-help@pekko.apache.org