diff --git a/docusaurus.config.js b/docusaurus.config.js
index b20dec7729..66ef839156 100644
--- a/docusaurus.config.js
+++ b/docusaurus.config.js
@@ -7,7 +7,7 @@ const darkTheme = themes.dracula;
/** @type {import('@docusaurus/types').Config} */
const config = {
- title: 'Replicated Docs',
+ title: 'Replicated',
tagline: 'Technical documentation for Replicated vendors and their enterprise end-customers.',
url: 'https://docs.replicated.com',
baseUrl: '/',
@@ -29,7 +29,7 @@ const config = {
docs: {
routeBasePath: '/', // Serve the docs at the site's root
sidebarPath: require.resolve('./sidebars.js'),
- breadcrumbs: false,
+ breadcrumbs: true,
editUrl: 'https://github.com/replicatedhq/replicated-docs/edit/main/',
admonitions: {
keywords: ['note','important', 'tip', 'info', 'caution', 'danger'],
@@ -50,7 +50,36 @@ const config = {
}),
],
],
-
+ plugins: [
+ [
+ '@docusaurus/plugin-content-docs',
+ {
+ id: 'embedded-cluster',
+ path: 'embedded-cluster',
+ routeBasePath: 'embedded-cluster',
+ sidebarPath: './sidebarEmbeddedCluster.js',
+ breadcrumbs: true,
+ editUrl: 'https://github.com/replicatedhq/replicated-docs/edit/main/',
+ // Versioning configuration
+ lastVersion: 'current', // Make 3.0.0 the default version
+ includeCurrentVersion: true, // Include the "next" version from installer/ folder
+ versions: {
+ current: {
+ label: 'Embedded Cluster 3.0.0',
+ path: 'v3',
+ banner: 'none',
+ badge: false,
+ },
+ '2.0.0': {
+ label: 'Embedded Cluster 2.13.3',
+ path: 'v2',
+ banner: 'unmaintained',
+ badge: false,
+ },
+ },
+ },
+ ],
+ ],
scripts: [
{
src:
@@ -136,7 +165,8 @@ const config = {
},
{
type: 'doc',
- docId: 'vendor/embedded-overview',
+ docId: 'v3-placeholder',
+ docsPluginId: 'embedded-cluster',
label: 'Embedded Cluster',
},
{
@@ -173,9 +203,19 @@ const config = {
},
{
type: 'dropdown',
- label: 'Developer tools',
+ label: 'Reference',
position: 'left',
items: [
+ {
+ type: 'doc',
+ docId: 'reference/custom-resource-about',
+ label: 'Custom resources',
+ },
+ {
+ type: 'doc',
+ docId: 'reference/template-functions-about',
+ label: 'Template functions',
+ },
{
type: 'doc',
docId: 'reference/kots-cli-getting-started',
diff --git a/embedded-cluster/v3-placeholder.md b/embedded-cluster/v3-placeholder.md
new file mode 100644
index 0000000000..aeb4c25e02
--- /dev/null
+++ b/embedded-cluster/v3-placeholder.md
@@ -0,0 +1 @@
+# v3 placeholder
\ No newline at end of file
diff --git a/docs/reference/embedded-cluster-admin-console.mdx b/embedded-cluster_versioned_docs/version-2.0.0/embedded-cluster-admin-console.mdx
similarity index 100%
rename from docs/reference/embedded-cluster-admin-console.mdx
rename to embedded-cluster_versioned_docs/version-2.0.0/embedded-cluster-admin-console.mdx
diff --git a/docs/reference/embedded-cluster-completion.mdx b/embedded-cluster_versioned_docs/version-2.0.0/embedded-cluster-completion.mdx
similarity index 100%
rename from docs/reference/embedded-cluster-completion.mdx
rename to embedded-cluster_versioned_docs/version-2.0.0/embedded-cluster-completion.mdx
diff --git a/docs/reference/embedded-cluster-enable-ha.mdx b/embedded-cluster_versioned_docs/version-2.0.0/embedded-cluster-enable-ha.mdx
similarity index 100%
rename from docs/reference/embedded-cluster-enable-ha.mdx
rename to embedded-cluster_versioned_docs/version-2.0.0/embedded-cluster-enable-ha.mdx
diff --git a/docs/reference/embedded-cluster-install.mdx b/embedded-cluster_versioned_docs/version-2.0.0/embedded-cluster-install.mdx
similarity index 96%
rename from docs/reference/embedded-cluster-install.mdx
rename to embedded-cluster_versioned_docs/version-2.0.0/embedded-cluster-install.mdx
index f68e5b75ff..9a7e481900 100644
--- a/docs/reference/embedded-cluster-install.mdx
+++ b/embedded-cluster_versioned_docs/version-2.0.0/embedded-cluster-install.mdx
@@ -1,7 +1,7 @@
-import ProxyLimitations from "../partials/embedded-cluster/_proxy-install-limitations.mdx"
-import ProxyRequirements from "../partials/embedded-cluster/_proxy-install-reqs.mdx"
-import ProxyEnvVars from "../partials/embedded-cluster/_proxy-env-vars.mdx"
-import DeprecatedPrivateCa from "../partials/embedded-cluster/_deprecated-private-ca.mdx"
+import ProxyLimitations from "../../docs/partials/embedded-cluster/_proxy-install-limitations.mdx"
+import ProxyRequirements from "../../docs/partials/embedded-cluster/_proxy-install-reqs.mdx"
+import ProxyEnvVars from "../../docs/partials/embedded-cluster/_proxy-env-vars.mdx"
+import DeprecatedPrivateCa from "../../docs/partials/embedded-cluster/_deprecated-private-ca.mdx"
# install
diff --git a/docs/reference/embedded-cluster-join-print-command.mdx b/embedded-cluster_versioned_docs/version-2.0.0/embedded-cluster-join-print-command.mdx
similarity index 100%
rename from docs/reference/embedded-cluster-join-print-command.mdx
rename to embedded-cluster_versioned_docs/version-2.0.0/embedded-cluster-join-print-command.mdx
diff --git a/docs/reference/embedded-cluster-join.mdx b/embedded-cluster_versioned_docs/version-2.0.0/embedded-cluster-join.mdx
similarity index 100%
rename from docs/reference/embedded-cluster-join.mdx
rename to embedded-cluster_versioned_docs/version-2.0.0/embedded-cluster-join.mdx
diff --git a/docs/reference/embedded-cluster-reset.mdx b/embedded-cluster_versioned_docs/version-2.0.0/embedded-cluster-reset.mdx
similarity index 100%
rename from docs/reference/embedded-cluster-reset.mdx
rename to embedded-cluster_versioned_docs/version-2.0.0/embedded-cluster-reset.mdx
diff --git a/docs/reference/embedded-cluster-restore.mdx b/embedded-cluster_versioned_docs/version-2.0.0/embedded-cluster-restore.mdx
similarity index 100%
rename from docs/reference/embedded-cluster-restore.mdx
rename to embedded-cluster_versioned_docs/version-2.0.0/embedded-cluster-restore.mdx
diff --git a/docs/reference/embedded-cluster-shell.mdx b/embedded-cluster_versioned_docs/version-2.0.0/embedded-cluster-shell.mdx
similarity index 100%
rename from docs/reference/embedded-cluster-shell.mdx
rename to embedded-cluster_versioned_docs/version-2.0.0/embedded-cluster-shell.mdx
diff --git a/docs/reference/embedded-cluster-support-bundle.mdx b/embedded-cluster_versioned_docs/version-2.0.0/embedded-cluster-support-bundle.mdx
similarity index 100%
rename from docs/reference/embedded-cluster-support-bundle.mdx
rename to embedded-cluster_versioned_docs/version-2.0.0/embedded-cluster-support-bundle.mdx
diff --git a/docs/reference/embedded-cluster-update.mdx b/embedded-cluster_versioned_docs/version-2.0.0/embedded-cluster-update.mdx
similarity index 100%
rename from docs/reference/embedded-cluster-update.mdx
rename to embedded-cluster_versioned_docs/version-2.0.0/embedded-cluster-update.mdx
diff --git a/docs/reference/embedded-cluster-version.mdx b/embedded-cluster_versioned_docs/version-2.0.0/embedded-cluster-version.mdx
similarity index 100%
rename from docs/reference/embedded-cluster-version.mdx
rename to embedded-cluster_versioned_docs/version-2.0.0/embedded-cluster-version.mdx
diff --git a/docs/reference/embedded-config.mdx b/embedded-cluster_versioned_docs/version-2.0.0/embedded-config.mdx
similarity index 99%
rename from docs/reference/embedded-config.mdx
rename to embedded-cluster_versioned_docs/version-2.0.0/embedded-config.mdx
index 8596011fe1..15ac79ea76 100644
--- a/docs/reference/embedded-config.mdx
+++ b/embedded-cluster_versioned_docs/version-2.0.0/embedded-config.mdx
@@ -1,4 +1,4 @@
-import DoNotDowngrade from "../partials/embedded-cluster/_warning-do-not-downgrade.mdx"
+import DoNotDowngrade from "../../docs/partials/embedded-cluster/_warning-do-not-downgrade.mdx"
# Embedded Cluster Config
diff --git a/docs/vendor/embedded-disaster-recovery.mdx b/embedded-cluster_versioned_docs/version-2.0.0/embedded-disaster-recovery.mdx
similarity index 100%
rename from docs/vendor/embedded-disaster-recovery.mdx
rename to embedded-cluster_versioned_docs/version-2.0.0/embedded-disaster-recovery.mdx
diff --git a/docs/enterprise/embedded-manage-nodes.mdx b/embedded-cluster_versioned_docs/version-2.0.0/embedded-manage-nodes.mdx
similarity index 98%
rename from docs/enterprise/embedded-manage-nodes.mdx
rename to embedded-cluster_versioned_docs/version-2.0.0/embedded-manage-nodes.mdx
index dd5805538f..69fb03d267 100644
--- a/docs/enterprise/embedded-manage-nodes.mdx
+++ b/embedded-cluster_versioned_docs/version-2.0.0/embedded-manage-nodes.mdx
@@ -1,5 +1,5 @@
-import HaArchitecture from "../partials/embedded-cluster/_multi-node-ha-arch.mdx"
-import ShellCommand from "../partials/embedded-cluster/_shell-command.mdx"
+import HaArchitecture from "../../docs/partials/embedded-cluster/_multi-node-ha-arch.mdx"
+import ShellCommand from "../../docs/partials/embedded-cluster/_shell-command.mdx"
# Access and manage embedded clusters
diff --git a/docs/vendor/embedded-overview.mdx b/embedded-cluster_versioned_docs/version-2.0.0/embedded-overview.mdx
similarity index 99%
rename from docs/vendor/embedded-overview.mdx
rename to embedded-cluster_versioned_docs/version-2.0.0/embedded-overview.mdx
index 26e4222f1e..77f1a8aeaa 100644
--- a/docs/vendor/embedded-overview.mdx
+++ b/embedded-cluster_versioned_docs/version-2.0.0/embedded-overview.mdx
@@ -1,5 +1,5 @@
-import EmbeddedCluster from "../partials/embedded-cluster/_definition.mdx"
-import HaArchitecture from "../partials/embedded-cluster/_multi-node-ha-arch.mdx"
+import EmbeddedCluster from "../../docs/partials/embedded-cluster/_definition.mdx"
+import HaArchitecture from "../../docs/partials/embedded-cluster/_multi-node-ha-arch.mdx"
# Embedded Cluster overview
diff --git a/docs/enterprise/embedded-tls-certs.mdx b/embedded-cluster_versioned_docs/version-2.0.0/embedded-tls-certs.mdx
similarity index 100%
rename from docs/enterprise/embedded-tls-certs.mdx
rename to embedded-cluster_versioned_docs/version-2.0.0/embedded-tls-certs.mdx
diff --git a/docs/vendor/embedded-troubleshooting.mdx b/embedded-cluster_versioned_docs/version-2.0.0/embedded-troubleshooting.mdx
similarity index 96%
rename from docs/vendor/embedded-troubleshooting.mdx
rename to embedded-cluster_versioned_docs/version-2.0.0/embedded-troubleshooting.mdx
index 6c1a8faa25..fda8dbb6ba 100644
--- a/docs/vendor/embedded-troubleshooting.mdx
+++ b/embedded-cluster_versioned_docs/version-2.0.0/embedded-troubleshooting.mdx
@@ -1,6 +1,6 @@
-import SupportBundleIntro from "../partials/support-bundles/_ec-support-bundle-intro.mdx"
-import EmbeddedClusterSupportBundle from "../partials/support-bundles/_generate-bundle-ec.mdx"
-import ShellCommand from "../partials/embedded-cluster/_shell-command.mdx"
+import SupportBundleIntro from "../../docs/partials/support-bundles/_ec-support-bundle-intro.mdx"
+import EmbeddedClusterSupportBundle from "../../docs/partials/support-bundles/_generate-bundle-ec.mdx"
+import ShellCommand from "../../docs/partials/embedded-cluster/_shell-command.mdx"
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
diff --git a/docs/vendor/embedded-using.mdx b/embedded-cluster_versioned_docs/version-2.0.0/embedded-using.mdx
similarity index 97%
rename from docs/vendor/embedded-using.mdx
rename to embedded-cluster_versioned_docs/version-2.0.0/embedded-using.mdx
index bcefc3f41b..74fa000c83 100644
--- a/docs/vendor/embedded-using.mdx
+++ b/embedded-cluster_versioned_docs/version-2.0.0/embedded-using.mdx
@@ -1,6 +1,6 @@
-import UpdateOverview from "../partials/embedded-cluster/_update-overview.mdx"
-import EcConfig from "../partials/embedded-cluster/_ec-config.mdx"
-import ShellCommand from "../partials/embedded-cluster/_shell-command.mdx"
+import UpdateOverview from "../../docs/partials/embedded-cluster/_update-overview.mdx"
+import EcConfig from "../../docs/partials/embedded-cluster/_ec-config.mdx"
+import ShellCommand from "../../docs/partials/embedded-cluster/_shell-command.mdx"
# Configure Embedded Cluster
diff --git a/docs/enterprise/installing-embedded-air-gap.mdx b/embedded-cluster_versioned_docs/version-2.0.0/installing-embedded-air-gap.mdx
similarity index 95%
rename from docs/enterprise/installing-embedded-air-gap.mdx
rename to embedded-cluster_versioned_docs/version-2.0.0/installing-embedded-air-gap.mdx
index d6f8ff581a..4b0c4f172b 100644
--- a/docs/enterprise/installing-embedded-air-gap.mdx
+++ b/embedded-cluster_versioned_docs/version-2.0.0/installing-embedded-air-gap.mdx
@@ -1,8 +1,8 @@
-import UpdateAirGapAdm from "../partials/embedded-cluster/_update-air-gap-admin-console.mdx"
-import UpdateAirGapCli from "../partials/embedded-cluster/_update-air-gap-cli.mdx"
-import UpdateAirGapOverview from "../partials/embedded-cluster/_update-air-gap-overview.mdx"
-import DoNotDowngrade from "../partials/embedded-cluster/_warning-do-not-downgrade.mdx"
-import Prerequisites from "../partials/install/_ec-prereqs.mdx"
+import UpdateAirGapAdm from "../../docs/partials/embedded-cluster/_update-air-gap-admin-console.mdx"
+import UpdateAirGapCli from "../../docs/partials/embedded-cluster/_update-air-gap-cli.mdx"
+import UpdateAirGapOverview from "../../docs/partials/embedded-cluster/_update-air-gap-overview.mdx"
+import DoNotDowngrade from "../../docs/partials/embedded-cluster/_warning-do-not-downgrade.mdx"
+import Prerequisites from "../../docs/partials/install/_ec-prereqs.mdx"
# Air gap installation with Embedded Cluster
diff --git a/docs/enterprise/installing-embedded-automation.mdx b/embedded-cluster_versioned_docs/version-2.0.0/installing-embedded-automation.mdx
similarity index 94%
rename from docs/enterprise/installing-embedded-automation.mdx
rename to embedded-cluster_versioned_docs/version-2.0.0/installing-embedded-automation.mdx
index 422b1d37f7..7aff906b8c 100644
--- a/docs/enterprise/installing-embedded-automation.mdx
+++ b/embedded-cluster_versioned_docs/version-2.0.0/installing-embedded-automation.mdx
@@ -1,6 +1,6 @@
-import ConfigValuesExample from "../partials/configValues/_configValuesExample.mdx"
-import ConfigValuesProcedure from "../partials/configValues/_config-values-procedure.mdx"
-import ConfigValuesRequirements from "../partials/configValues/_requirements.mdx"
+import ConfigValuesExample from "../../docs/partials/configValues/_configValuesExample.mdx"
+import ConfigValuesProcedure from "../../docs/partials/configValues/_config-values-procedure.mdx"
+import ConfigValuesRequirements from "../../docs/partials/configValues/_requirements.mdx"
# Automate installation with Embedded Cluster
diff --git a/docs/enterprise/installing-embedded-requirements.mdx b/embedded-cluster_versioned_docs/version-2.0.0/installing-embedded-requirements.mdx
similarity index 88%
rename from docs/enterprise/installing-embedded-requirements.mdx
rename to embedded-cluster_versioned_docs/version-2.0.0/installing-embedded-requirements.mdx
index 3d7508ba9b..6db6c11aec 100644
--- a/docs/enterprise/installing-embedded-requirements.mdx
+++ b/embedded-cluster_versioned_docs/version-2.0.0/installing-embedded-requirements.mdx
@@ -1,7 +1,7 @@
-import EmbeddedClusterRequirements from "../partials/embedded-cluster/_requirements.mdx"
-import EmbeddedClusterPortRequirements from "../partials/embedded-cluster/_port-reqs.mdx"
-import FirewallOpeningsIntro from "../partials/install/_firewall-openings-intro.mdx"
-import FirewallOpeningsEc from "../partials/install/_firewall-openings-embedded-cluster.mdx"
+import EmbeddedClusterRequirements from "../../docs/partials/embedded-cluster/_requirements.mdx"
+import EmbeddedClusterPortRequirements from "../../docs/partials/embedded-cluster/_port-reqs.mdx"
+import FirewallOpeningsIntro from "../../docs/partials/install/_firewall-openings-intro.mdx"
+import FirewallOpeningsEc from "../../docs/partials/install/_firewall-openings-embedded-cluster.mdx"
# Embedded Cluster installation requirements
diff --git a/docs/enterprise/installing-embedded.mdx b/embedded-cluster_versioned_docs/version-2.0.0/installing-embedded.mdx
similarity index 98%
rename from docs/enterprise/installing-embedded.mdx
rename to embedded-cluster_versioned_docs/version-2.0.0/installing-embedded.mdx
index dafb7f5da4..10f19171de 100644
--- a/docs/enterprise/installing-embedded.mdx
+++ b/embedded-cluster_versioned_docs/version-2.0.0/installing-embedded.mdx
@@ -1,4 +1,4 @@
-import Prerequisites from "../partials/install/_ec-prereqs.mdx"
+import Prerequisites from "../../docs/partials/install/_ec-prereqs.mdx"
# Online installation with Embedded Cluster
diff --git a/docs/enterprise/updating-embedded.mdx b/embedded-cluster_versioned_docs/version-2.0.0/updating-embedded.mdx
similarity index 86%
rename from docs/enterprise/updating-embedded.mdx
rename to embedded-cluster_versioned_docs/version-2.0.0/updating-embedded.mdx
index ce34166f40..41cfb98177 100644
--- a/docs/enterprise/updating-embedded.mdx
+++ b/embedded-cluster_versioned_docs/version-2.0.0/updating-embedded.mdx
@@ -1,7 +1,8 @@
-import UpdateAirGapAdm from "../partials/embedded-cluster/_update-air-gap-admin-console.mdx"
-import UpdateAirGapCli from "../partials/embedded-cluster/_update-air-gap-cli.mdx"
-import UpdateAirGapOverview from "../partials/embedded-cluster/_update-air-gap-overview.mdx"
-import Overview from "../partials/embedded-cluster/_update-overview.mdx"
+import UpdateAirGapAdm from "../../docs/partials/embedded-cluster/_update-air-gap-admin-console.mdx"
+import UpdateAirGapCli from "../../docs/partials/embedded-cluster/_update-air-gap-cli.mdx"
+import UpdateAirGapOverview from "../../docs/partials/embedded-cluster/_update-air-gap-overview.mdx"
+import DoNotDowngrade from "../../docs/partials/embedded-cluster/_warning-do-not-downgrade.mdx"
+import Overview from "../../docs/partials/embedded-cluster/_update-overview.mdx"
# Perform updates in embedded clusters
diff --git a/embedded-cluster_versioned_sidebars/version-2.0.0-sidebars.json b/embedded-cluster_versioned_sidebars/version-2.0.0-sidebars.json
new file mode 100644
index 0000000000..79bcb0084a
--- /dev/null
+++ b/embedded-cluster_versioned_sidebars/version-2.0.0-sidebars.json
@@ -0,0 +1,40 @@
+{
+ "embeddedClusterSidebar": [
+ "embedded-overview",
+ "embedded-using",
+ "embedded-config",
+ {
+ "type": "category",
+ "label": "Install with Embedded Cluster",
+ "items": [
+ "installing-embedded-requirements",
+ "installing-embedded",
+ "installing-embedded-air-gap",
+ "installing-embedded-automation"
+ ]
+ },
+ "embedded-manage-nodes",
+ "updating-embedded",
+ "embedded-troubleshooting",
+ "embedded-tls-certs",
+ "embedded-disaster-recovery",
+ {
+ "type": "category",
+ "label": "Embedded Cluster Commands",
+ "items": [
+ "embedded-cluster-admin-console",
+ "embedded-cluster-completion",
+ "embedded-cluster-enable-ha",
+ "embedded-cluster-install",
+ "embedded-cluster-join",
+ "embedded-cluster-join-print-command",
+ "embedded-cluster-reset",
+ "embedded-cluster-restore",
+ "embedded-cluster-shell",
+ "embedded-cluster-support-bundle",
+ "embedded-cluster-update",
+ "embedded-cluster-version"
+ ]
+ }
+ ]
+}
diff --git a/embedded-cluster_versions.json b/embedded-cluster_versions.json
new file mode 100644
index 0000000000..ca7ffcdaa9
--- /dev/null
+++ b/embedded-cluster_versions.json
@@ -0,0 +1,3 @@
+[
+ "2.0.0"
+]
\ No newline at end of file
diff --git a/sidebarEmbeddedCluster.js b/sidebarEmbeddedCluster.js
new file mode 100644
index 0000000000..d00bb5a1b9
--- /dev/null
+++ b/sidebarEmbeddedCluster.js
@@ -0,0 +1,5 @@
+module.exports = {
+ embeddedClusterSidebar: [
+ "v3-placeholder",
+ ],
+};
diff --git a/sidebars.js b/sidebars.js
index d21d0c3939..e0f1629c7b 100644
--- a/sidebars.js
+++ b/sidebars.js
@@ -60,35 +60,44 @@ const sidebars = {
},
{
type: "category",
- label: "Labs",
+ label: "Add Replicated to CI/CD Workflows",
items: [
- {
- type: "link",
- href: "https://play.instruqt.com/embed/replicated/tracks/distributing-with-replicated?token=em_VHOEfNnBgU3auAnN",
- label: "Distributing Your Application with Replicated",
- },
- {
- type: "link",
- href: "https://play.instruqt.com/embed/replicated/tracks/delivering-as-an-appliance?token=em_lUZdcv0LrF6alIa3",
- label: "Delivering Your Application as a Kubernetes Appliance",
- },
- {
- type: "link",
- href: "https://play.instruqt.com/embed/replicated/tracks/avoiding-installation-pitfalls?token=em_gJjtIzzTTtdd5RFG",
- label: "Avoiding Installation Pitfalls",
- },
- {
- type: "link",
- href: "https://play.instruqt.com/embed/replicated/tracks/closing-information-gap?token=em_MO2XXCz3bAgwtEca",
- label: "Closing the Support Information Gap",
- },
- {
- type: "link",
- href: "https://play.instruqt.com/embed/replicated/tracks/protecting-your-assets?token=em_7QjY34G_UHKoREBd",
- label: "Protecting Your Assets",
- },
+ "vendor/ci-overview",
+ "vendor/ci-workflows",
+ "vendor/ci-workflows-github-actions",
],
},
+ // {
+ // type: "category",
+ // label: "Labs",
+ // items: [
+ // {
+ // type: "link",
+ // href: "https://play.instruqt.com/embed/replicated/tracks/distributing-with-replicated?token=em_VHOEfNnBgU3auAnN",
+ // label: "Distributing Your Application with Replicated",
+ // },
+ // {
+ // type: "link",
+ // href: "https://play.instruqt.com/embed/replicated/tracks/delivering-as-an-appliance?token=em_lUZdcv0LrF6alIa3",
+ // label: "Delivering Your Application as a Kubernetes Appliance",
+ // },
+ // {
+ // type: "link",
+ // href: "https://play.instruqt.com/embed/replicated/tracks/avoiding-installation-pitfalls?token=em_gJjtIzzTTtdd5RFG",
+ // label: "Avoiding Installation Pitfalls",
+ // },
+ // {
+ // type: "link",
+ // href: "https://play.instruqt.com/embed/replicated/tracks/closing-information-gap?token=em_MO2XXCz3bAgwtEca",
+ // label: "Closing the Support Information Gap",
+ // },
+ // {
+ // type: "link",
+ // href: "https://play.instruqt.com/embed/replicated/tracks/protecting-your-assets?token=em_7QjY34G_UHKoREBd",
+ // label: "Protecting Your Assets",
+ // },
+ // ],
+ // },
// PRODUCT DOCS
{ type: "html", value: "
Product docs
", defaultStyle: true },
{
@@ -219,7 +228,9 @@ const sidebars = {
{
type: "category",
label: "Security Center (Alpha)",
- items: ["vendor/security-center-about"],
+ items: [
+ "vendor/security-center-about",
+ ],
},
{
type: "category",
@@ -229,10 +240,7 @@ const sidebars = {
"vendor/testing-supported-clusters",
"vendor/testing-how-to",
"vendor/testing-vm-create",
- // "vendor/testing-vm-transfer-files",
"vendor/testing-ingress",
- // "vendor/testing-vm-about",
- // "vendor/testing-vm-networking",
"vendor/testing-network-policy",
"vendor/testing-cluster-addons",
"vendor/testing-ci-cd",
@@ -246,269 +254,254 @@ const sidebars = {
},
],
},
+ {
+ type: "link",
+ href: "/embedded-cluster/v3/v3-placeholder",
+ label: "Embedded Cluster",
+ },
+ {
+ type: "category",
+ label: "Helm Installations with Replicated",
+ items: [
+ "vendor/helm-install-overview",
+ "vendor/helm-install-values-schema",
+ "vendor/install-with-helm",
+ "vendor/helm-install-airgap",
+ "vendor/using-third-party-registry-proxy",
+ "vendor/helm-install-troubleshooting",
+ ],
+ },
+ {
+ type: "category",
+ label: "KOTS",
+ items: [
+ "intro-kots",
{
type: "category",
- label: "Embedded Cluster",
- items: [
- "vendor/embedded-overview",
- "vendor/embedded-using",
- {
- type: "category",
- label: "Install with Embedded Cluster",
- items: [
- "enterprise/installing-embedded-requirements",
- "enterprise/installing-embedded",
- "enterprise/installing-embedded-air-gap",
- "enterprise/installing-embedded-automation",
- ],
- },
- "enterprise/embedded-manage-nodes",
- "enterprise/updating-embedded",
- "vendor/embedded-troubleshooting",
- "enterprise/embedded-tls-certs",
- "vendor/embedded-disaster-recovery",
- {
- type: "category",
- label: "Embedded Cluster commands",
- items: [
- "reference/embedded-cluster-admin-console",
- "reference/embedded-cluster-completion",
- "reference/embedded-cluster-enable-ha",
- "reference/embedded-cluster-install",
- "reference/embedded-cluster-join",
- "reference/embedded-cluster-join-print-command",
- "reference/embedded-cluster-reset",
- "reference/embedded-cluster-restore",
- "reference/embedded-cluster-shell",
- "reference/embedded-cluster-support-bundle",
- "reference/embedded-cluster-update",
- "reference/embedded-cluster-version",
- ],
- },
- ],
- },
- {
- type: "category",
- label: "KOTS",
+ label: "Configure KOTS",
items: [
- "intro-kots",
- {
- type: "category",
- label: "Configure KOTS",
- items: [
- {
- type: "category",
- label: "Configure the HelmChart custom resource",
- items: [
- "vendor/helm-native-about",
- "vendor/helm-native-v2-using",
- "vendor/helm-packaging-airgap-bundles",
- "vendor/helm-optional-value-keys",
- "vendor/helm-v2-migrate",
- ],
- },
- {
- type: "category",
- label: "Customize the Admin Console and Download Portal",
- items: [
- "vendor/admin-console-customize-app-icon",
- "vendor/admin-console-adding-buttons-links",
- "vendor/admin-console-port-forward",
- "vendor/admin-console-prometheus-monitoring",
- ],
- },
- {
- type: "category",
- label: "Configure the Admin Console config screen",
- items: [
- "vendor/config-screen-about",
- "vendor/admin-console-customize-config-screen",
- "vendor/config-screen-map-inputs",
- "vendor/config-screen-conditional",
- ],
- },
- {
- type: "category",
- label: "Manage resources and objects",
- items: [
- "vendor/admin-console-display-app-status",
- {
- type: "category",
- label: "Conditionally deploy resources",
- items: [
- "vendor/packaging-include-resources",
- "vendor/tutorial-adding-db-config",
- ],
- },
- "vendor/resources-annotations-templating",
- "vendor/orchestrating-resource-deployment",
- "vendor/database-config-adding-options",
- "vendor/packaging-cleaning-up-jobs",
- "vendor/packaging-ingress",
- ],
- },
- {
- type: "category",
- label: "Manage KOTS",
- items: [
- "vendor/packaging-kots-versions",
- "vendor/packaging-rbac",
- "vendor/packaging-air-gap-excluding-minio",
- ],
- },
- {
- type: "category",
- label: "Distribute Kubernetes Operators with KOTS",
- items: [
- "vendor/operator-packaging-about",
- "vendor/operator-defining-additional-images",
- "vendor/operator-referencing-images",
- "vendor/operator-defining-additional-namespaces",
- ],
- },
- ],
- },
{
type: "category",
- label: "Install in existing clusters with KOTS",
+ label: "Configure the HelmChart Custom Resource",
items: [
- "enterprise/installing-overview",
- "enterprise/installing-general-requirements",
- "enterprise/installing-existing-cluster",
- "enterprise/installing-existing-cluster-airgapped",
- "enterprise/installing-existing-cluster-automation",
- "enterprise/installing-stateful-component-requirements",
+ "vendor/helm-native-about",
+ "vendor/helm-native-v2-using",
+ "vendor/helm-packaging-airgap-bundles",
+ "vendor/helm-optional-value-keys",
+ "vendor/helm-v2-migrate",
],
},
{
type: "category",
- label: "Perform updates in existing cluster KOTS installations",
+ label: "Customize the Admin Console and Download Portal",
items: [
- "enterprise/updating-app-manager",
- "enterprise/updating-apps",
- "enterprise/updating-patching-with-kustomize",
+ "vendor/admin-console-customize-app-icon",
+ "vendor/admin-console-adding-buttons-links",
+ "vendor/admin-console-port-forward",
+ "vendor/admin-console-prometheus-monitoring",
],
},
{
type: "category",
- label: "Configure local image registries",
+ label: "Configure the Admin Console Config Screen",
items: [
- "enterprise/image-registry-settings",
- "enterprise/image-registry-rate-limits",
+ "vendor/config-screen-about",
+ "vendor/admin-console-customize-config-screen",
+ "vendor/config-screen-map-inputs",
+ "vendor/config-screen-conditional",
],
},
- "enterprise/updating-licenses",
{
type: "category",
- label: "Perform backup and restore with snapshots",
+ label: "Manage Resources and Objects",
items: [
- "vendor/snapshots-overview",
- {
- type: "category",
- label: "Enable and configure snapshots",
- items: [
- "vendor/snapshots-configuring-backups",
- "reference/custom-resource-backup",
- "vendor/snapshots-hooks",
- ],
- },
+ "vendor/admin-console-display-app-status",
{
type: "category",
- label: "Configure backup storage for snapshots",
+ label: "Conditionally Deploy Resources",
items: [
- "enterprise/snapshots-velero-cli-installing",
- "enterprise/snapshots-configuring-hostpath",
- "enterprise/snapshots-configuring-nfs",
- "enterprise/snapshots-storage-destinations",
- "enterprise/snapshots-velero-installing-config",
+ "vendor/packaging-include-resources",
+ "vendor/tutorial-adding-db-config",
],
},
- "enterprise/snapshots-creating",
- "enterprise/snapshots-restoring-full",
- "enterprise/snapshots-updating-with-admin-console",
- "enterprise/snapshots-troubleshooting-backup-restore",
+ "vendor/resources-annotations-templating",
+ "vendor/orchestrating-resource-deployment",
+ "vendor/database-config-adding-options",
+ "vendor/packaging-cleaning-up-jobs",
+ "vendor/packaging-ingress",
],
},
{
type: "category",
- label: "Manage Admin Console user access",
+ label: "Manage KOTS",
items: [
- "enterprise/auth-changing-passwords",
- "enterprise/auth-identity-provider",
- "enterprise/auth-configuring-rbac",
+ "vendor/packaging-kots-versions",
+ "vendor/packaging-rbac",
+ "vendor/packaging-air-gap-excluding-minio",
],
},
{
type: "category",
- label: "Monitor applications with Prometheus",
+ label: "Distribute Kubernetes Operators with KOTS",
items: [
- "enterprise/monitoring-applications",
- "enterprise/monitoring-access-dashboards",
- ],
- },
- "enterprise/status-viewing-details",
- "enterprise/delete-admin-console",
- {
- type: "category",
- label: "Use a GitOps workflow",
- items: [
- "enterprise/gitops-workflow",
- "enterprise/gitops-managing-secrets",
+ "vendor/operator-packaging-about",
+ "vendor/operator-defining-additional-images",
+ "vendor/operator-referencing-images",
+ "vendor/operator-defining-additional-namespaces",
],
},
],
},
{
type: "category",
- label: "kURL",
+ label: "Install in Existing Clusters with KOTS",
items: [
- "vendor/kurl-about",
- {
- type: "category",
- label: "Configure kURL Installers",
- items: [
- "vendor/packaging-embedded-kubernetes",
- "vendor/packaging-installer-storage",
- "vendor/installer-history",
- "vendor/kurl-nodeport-services",
- ],
- },
+ "enterprise/installing-overview",
+ "enterprise/installing-general-requirements",
+ "enterprise/installing-existing-cluster",
+ "enterprise/installing-existing-cluster-airgapped",
+ "enterprise/installing-existing-cluster-automation",
+ "enterprise/installing-stateful-component-requirements",
+ ],
+ },
+ {
+ type: "category",
+ label: "Perform Updates in Existing Cluster KOTS Installations",
+ items: [
+ "enterprise/updating-app-manager",
+ "enterprise/updating-apps",
+ "enterprise/updating-patching-with-kustomize",
+ ],
+ },
+ {
+ type: "category",
+ label: "Configure Local Image Registries",
+ items: [
+ "enterprise/image-registry-settings",
+ "enterprise/image-registry-rate-limits",
+ ],
+ },
+ "enterprise/updating-licenses",
+ {
+ type: "category",
+ label: "Perform Backup and Restore with Snapshots",
+ items: [
+ "vendor/snapshots-overview",
{
type: "category",
- label: "Install with kURL",
+ label: "Enable and Configure Snapshots",
items: [
- "enterprise/installing-kurl-requirements",
- "enterprise/installing-kurl",
- "enterprise/installing-kurl-airgap",
- "enterprise/installing-kurl-automation",
+ "vendor/snapshots-configuring-backups",
+ "reference/custom-resource-backup",
+ "vendor/snapshots-hooks",
],
},
- "enterprise/cluster-management-add-nodes",
{
type: "category",
- label: "Perform updates with kURL",
+ label: "Configure Backup Storage for Snaphots",
items: [
- "enterprise/updating-kurl-about",
- "enterprise/updating-kurl",
+ "enterprise/snapshots-velero-cli-installing",
+ "enterprise/snapshots-configuring-hostpath",
+ "enterprise/snapshots-configuring-nfs",
+ "enterprise/snapshots-storage-destinations",
+ "enterprise/snapshots-velero-installing-config",
],
},
- "vendor/packaging-using-tls-certs",
- "enterprise/updating-tls-cert",
- "enterprise/image-registry-kurl",
- "enterprise/monitoring-external-prometheus",
- "vendor/kurl-reset",
+ "enterprise/snapshots-creating",
+ "enterprise/snapshots-restoring-full",
+ "enterprise/snapshots-updating-with-admin-console",
+ "enterprise/snapshots-troubleshooting-backup-restore",
+ ],
+ },
+ {
+ type: "category",
+ label: "Manage Admin Console User Access",
+ items: [
+ "enterprise/auth-changing-passwords",
+ "enterprise/auth-identity-provider",
+ "enterprise/auth-configuring-rbac",
],
},
+ {
+ type: "category",
+ label: "Monitor Applications with Prometheus",
+ items: [
+ "enterprise/monitoring-applications",
+ "enterprise/monitoring-access-dashboards",
+ ],
+ },
+ "enterprise/status-viewing-details",
+ "enterprise/delete-admin-console",
+ {
+ type: "category",
+ label: "Use a GitOps Workflow",
+ items: [
+ "enterprise/gitops-workflow",
+ "enterprise/gitops-managing-secrets",
+ ],
+ },
+ ],
+ },
{
type: "category",
- label: "Helm installations with Replicated",
+ label: "kURL",
items: [
- "vendor/helm-install-overview",
- "vendor/helm-install-values-schema",
- "vendor/install-with-helm",
- "vendor/helm-install-airgap",
- "vendor/using-third-party-registry-proxy",
- "vendor/helm-install-troubleshooting",
+ "vendor/kurl-about",
+ {
+ type: "category",
+ label: "Configure kURL Installers",
+ items: [
+ "vendor/packaging-embedded-kubernetes",
+ "vendor/packaging-installer-storage",
+ "vendor/installer-history",
+ "vendor/kurl-nodeport-services",
+ ],
+ },
+ {
+ type: "category",
+ label: "Install with kURL",
+ items: [
+ "enterprise/installing-kurl-requirements",
+ "enterprise/installing-kurl",
+ "enterprise/installing-kurl-airgap",
+ "enterprise/installing-kurl-automation",
+ ],
+ },
+ "enterprise/cluster-management-add-nodes",
+ {
+ type: "category",
+ label: "Perform Updates with kURL",
+ items: [
+ "enterprise/updating-kurl-about",
+ "enterprise/updating-kurl",
+ ],
+ },
+ "vendor/packaging-using-tls-certs",
+ "enterprise/updating-tls-cert",
+ "enterprise/image-registry-kurl",
+ "enterprise/monitoring-external-prometheus",
+ "vendor/kurl-reset",
+ ],
+ },
+ {
+ type: "category",
+ label: "Replicated proxy registry",
+ items: [
+ "vendor/private-images-about",
+ "vendor/packaging-private-images",
+ "vendor/helm-image-registry",
+ "vendor/private-images-kots",
+ "vendor/private-images-tags-digests",
+ "vendor/packaging-public-images",
+ {
+ type: "category",
+ label: "Replicated Private Registry",
+ items: [
+ "vendor/private-images-replicated",
+ "vendor/packaging-private-registry-security",
+ ],
+ },
+ "vendor/tutorial-ecr-private-images",
],
},
{
@@ -520,11 +513,12 @@ const sidebars = {
"vendor/replicated-sdk-airgap",
"vendor/replicated-sdk-development",
"vendor/replicated-sdk-customizing",
+ "reference/replicated-sdk-apis",
],
},
{
type: "category",
- label: "Preflight checks and support bundles",
+ label: "Preflight Checks and support bundles",
items: [
"vendor/preflight-support-bundle-about",
{
@@ -570,36 +564,6 @@ const sidebars = {
},
],
},
- {
- type: "category",
- label: "Replicated proxy registry",
- items: [
- "vendor/private-images-about",
- "vendor/packaging-private-images",
- "vendor/helm-image-registry",
- "vendor/private-images-kots",
- "vendor/private-images-tags-digests",
- {
- type: "category",
- label: "Replicated Private Registry",
- items: [
- "vendor/private-images-replicated",
- "vendor/packaging-private-registry-security",
- ],
- },
- "vendor/packaging-public-images",
- "vendor/tutorial-ecr-private-images",
- ],
- },
- {
- type: "category",
- label: "Add Replicated to CI/CD workflows",
- items: [
- "vendor/ci-overview",
- "vendor/ci-workflows",
- "vendor/ci-workflows-github-actions",
- ],
- },
// Reference
{ type: "html", value: "Reference
", defaultStyle: true },
@@ -611,7 +575,7 @@ const sidebars = {
"reference/custom-resource-application",
"reference/custom-resource-config",
"reference/custom-resource-configvalues",
- "reference/embedded-config",
+ // "reference/embedded-config",
"reference/custom-resource-helmchart-v2",
"reference/custom-resource-helmchart",
"reference/custom-resource-lintconfig",
@@ -933,6 +897,7 @@ const sidebars = {
],
},
],
+
};
-module.exports = sidebars;
\ No newline at end of file
+module.exports = sidebars;
diff --git a/src/components/InstallerVersionSelector/index.js b/src/components/InstallerVersionSelector/index.js
new file mode 100644
index 0000000000..425098b985
--- /dev/null
+++ b/src/components/InstallerVersionSelector/index.js
@@ -0,0 +1,124 @@
+/**
+ * Version selector for the installer docs, displayed at the top of the
+ * installer sidebar. Uses Docusaurus dropdown styles to match navbar dropdowns.
+ */
+import React, { useState, useRef, useEffect } from 'react';
+import Link from '@docusaurus/Link';
+import {
+ useVersions,
+ useActiveDocContext,
+ useDocsVersionCandidates,
+ useDocsPreferredVersion,
+} from '@docusaurus/plugin-content-docs/client';
+import { useHistorySelector } from '@docusaurus/theme-common';
+import clsx from 'clsx';
+
+const DOCS_PLUGIN_ID = 'embedded-cluster';
+
+function getVersionMainDoc(version) {
+ return version.docs.find((doc) => doc.id === version.mainDocId);
+}
+
+function getVersionTargetDoc(version, activeDocContext) {
+ return (
+ activeDocContext.alternateDocVersions?.[version.name] ??
+ getVersionMainDoc(version)
+ );
+}
+
+export default function InstallerVersionSelector() {
+ const dropdownRef = useRef(null);
+ const [showDropdown, setShowDropdown] = useState(false);
+ const search = useHistorySelector((h) => h.location.search);
+ const hash = useHistorySelector((h) => h.location.hash);
+ const versions = useVersions(DOCS_PLUGIN_ID);
+ const activeDocContext = useActiveDocContext(DOCS_PLUGIN_ID);
+ const { savePreferredVersionName } = useDocsPreferredVersion(DOCS_PLUGIN_ID);
+ const candidates = useDocsVersionCandidates(DOCS_PLUGIN_ID);
+
+ useEffect(() => {
+ const handleClickOutside = (event) => {
+ if (!dropdownRef.current?.contains(event.target)) {
+ setShowDropdown(false);
+ }
+ };
+ document.addEventListener('mousedown', handleClickOutside);
+ document.addEventListener('touchstart', handleClickOutside);
+ document.addEventListener('focusin', handleClickOutside);
+ return () => {
+ document.removeEventListener('mousedown', handleClickOutside);
+ document.removeEventListener('touchstart', handleClickOutside);
+ document.removeEventListener('focusin', handleClickOutside);
+ };
+ }, []);
+
+ if (!versions?.length || versions.length <= 1) {
+ return null;
+ }
+
+ const versionItems = versions.map((v) => ({ version: v, label: v.label }));
+ const displayedCandidate = candidates?.[0];
+ const currentItem = versionItems.find(
+ (vi) => vi.version === displayedCandidate
+ ) ?? versionItems[0];
+
+ return (
+
+
+
+ {versionItems.map(({ version, label }) => {
+ const targetDoc = getVersionTargetDoc(version, activeDocContext);
+ const to = `${targetDoc.path}${search}${hash}`;
+ const isActive = version === currentItem?.version;
+ return (
+ -
+ {
+ savePreferredVersionName(version.name);
+ setShowDropdown(false);
+ }}
+ >
+ {label}
+
+
+ );
+ })}
+
+
+ );
+}
\ No newline at end of file
diff --git a/src/css/navbar.css b/src/css/navbar.css
index ea4be68ca3..d9e6e4df27 100644
--- a/src/css/navbar.css
+++ b/src/css/navbar.css
@@ -2,19 +2,30 @@
display: none;
}
+.navbar__title {
+ display: none;
+}
+
.DocSearch-Footer {
justify-content: center !important;
}
-.dropdown__link:hover, .navbar__link {
- background-color: transparent;
- color: var(--ifm-dropdown-link-color);
- text-decoration: none;
+.dropdown__link,
+.navbar__link {
+ background-color: transparent;
+ text-decoration: none;
+}
+
+.navbar__link:hover,
+.dropdown__link:hover {
+ color: var(--replicated-red);
+ background-color: transparent;
}
-.dropdown__link--active, .navbar__link--active {
- background-color: transparent;
- color: #2f2f2f;
+.dropdown__link--active,
+.navbar__link--active {
+ background-color: transparent;
+ color: #2f2f2f;
}
.dropdown > .navbar__link:after {
diff --git a/src/css/sidebar.css b/src/css/sidebar.css
index 7d20320301..51609266d3 100644
--- a/src/css/sidebar.css
+++ b/src/css/sidebar.css
@@ -15,4 +15,76 @@
.menu__list-item-collapsible > a:hover,
.menu__link--active {
color: var(--slate-noir);
- }
\ No newline at end of file
+ }
+
+/* Version selector styles for installer sidebar */
+.installer-version-selector {
+ padding: 0.75rem 0.5rem 0 0.5rem;
+ margin-bottom: 1rem;
+ display: block;
+ width: 100%;
+}
+
+.installer-version-selector .dropdown__menu {
+ top: 100%;
+ margin-top: 0.25rem;
+ min-width: 100%;
+ left: 0;
+ right: 0;
+}
+
+.installer-version-selector__trigger {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ width: 100%;
+ padding: 0.45rem 0.5rem;
+ font-size: .9rem;
+ font-weight: var(--ifm-dropdown-font-weight);
+ color: var(--ifm-dropdown-link-color);
+ background-color: var(--ifm-dropdown-background-color);
+ border: 1px solid var(--ifm-color-emphasis-300);
+ border-radius: var(--ifm-global-radius);
+ cursor: pointer;
+ transition: background-color 0.2s ease, border-color 0.2s ease;
+ outline: none;
+}
+
+.installer-version-selector__trigger:hover {
+ background-color: var(--ifm-dropdown-hover-background-color);
+}
+
+.installer-version-selector__trigger:focus {
+ border-color: var(--ifm-color-emphasis-500);
+}
+
+.installer-version-selector .dropdown__link {
+ font-size: .9rem;
+ padding: 0.35rem 0.5rem;
+}
+
+.installer-version-selector .dropdown__link:hover {
+ color: var(--ifm-dropdown-link-color);
+ background-color: var(--ifm-dropdown-hover-background-color);
+}
+
+.installer-version-selector .dropdown__link--active,
+.installer-version-selector .dropdown__link--active:hover {
+ color: var(--ifm-font-color-base);
+}
+
+.installer-version-selector__trigger-label {
+ flex: 1;
+ text-align: left;
+}
+
+.installer-version-selector__trigger-icon {
+ width: 1rem;
+ height: 1rem;
+ margin-left: 0.25rem;
+ flex-shrink: 0;
+}
+
+.installer-version-selector.dropdown--show .installer-version-selector__trigger-icon {
+ transform: rotate(180deg);
+}
\ No newline at end of file
diff --git a/src/theme/DocSidebar/Desktop/Content/index.js b/src/theme/DocSidebar/Desktop/Content/index.js
new file mode 100644
index 0000000000..f3052baf2a
--- /dev/null
+++ b/src/theme/DocSidebar/Desktop/Content/index.js
@@ -0,0 +1,93 @@
+/**
+ * Custom DocSidebar Desktop Content: version selector for embedded cluster docs
+ * and slide+fade transition when switching between main and embedded cluster sidebars.
+ */
+import React, { useState, useRef, useEffect } from 'react';
+import clsx from 'clsx';
+import { ThemeClassNames } from '@docusaurus/theme-common';
+import {
+ useAnnouncementBar,
+ useScrollPosition,
+} from '@docusaurus/theme-common/internal';
+import { translate } from '@docusaurus/Translate';
+import DocSidebarItems from '@theme/DocSidebarItems';
+import InstallerVersionSelector from '@site/src/components/InstallerVersionSelector';
+import { getProductForPath } from '@site/src/utils/sidebarProductFromPath';
+import styles from './styles.module.css';
+
+const ANIMATION_MS = 200;
+
+function useShowAnnouncementBar() {
+ const { isActive } = useAnnouncementBar();
+ const [showAnnouncementBar, setShowAnnouncementBar] = useState(isActive);
+ useScrollPosition(
+ ({ scrollY }) => {
+ if (isActive) {
+ setShowAnnouncementBar(scrollY === 0);
+ }
+ },
+ [isActive]
+ );
+ return isActive && showAnnouncementBar;
+}
+
+const SIDEBAR_KEY_STORAGE = 'docsSidebarKey';
+
+function useSidebarTransition(sidebarKey) {
+ const [animate, setAnimate] = useState(() => {
+ if (typeof sessionStorage === 'undefined') return false;
+ const prev = sessionStorage.getItem(SIDEBAR_KEY_STORAGE);
+ if (!prev || prev === sidebarKey) return false;
+ const wasMain = prev === 'main';
+ const isMain = sidebarKey === 'main';
+ return wasMain || isMain;
+ });
+
+ useEffect(() => {
+ if (typeof sessionStorage !== 'undefined') {
+ sessionStorage.setItem(SIDEBAR_KEY_STORAGE, sidebarKey);
+ }
+ }, [sidebarKey]);
+
+ useEffect(() => {
+ if (!animate) return;
+ const id = setTimeout(() => setAnimate(false), ANIMATION_MS);
+ return () => clearTimeout(id);
+ }, [animate]);
+
+ return animate;
+}
+
+export default function DocSidebarDesktopContent({ path, sidebar, className }) {
+ const showAnnouncementBar = useShowAnnouncementBar();
+ const product = getProductForPath(path);
+ const sidebarKey = product?.key ?? 'main';
+ const shouldAnimate = useSidebarTransition(sidebarKey);
+
+ return (
+
+ {product?.key === 'embedded-cluster' &&
}
+
+
+ );
+}
diff --git a/src/theme/DocSidebar/Desktop/Content/styles.module.css b/src/theme/DocSidebar/Desktop/Content/styles.module.css
new file mode 100644
index 0000000000..e05a331618
--- /dev/null
+++ b/src/theme/DocSidebar/Desktop/Content/styles.module.css
@@ -0,0 +1,62 @@
+/**
+ * DocSidebar Desktop Content styles
+ */
+
+/* Wrapper: flex column so the nav can fill and scroll; min-height: 0 allows overflow */
+.sidebarContentTransition {
+ display: flex;
+ flex-direction: column;
+ flex: 1;
+ min-height: 0;
+ overflow: hidden;
+}
+
+/* Only animate when crossing between main and embedded cluster sidebar (data-animate set by JS) */
+.sidebarContentTransition[data-animate='true'][data-sidebar]:not([data-sidebar='main']) {
+ animation: sidebarSlideInFromRight 0.2s ease-out forwards;
+}
+
+.sidebarContentTransition[data-animate='true'][data-sidebar='main'] {
+ animation: sidebarSlideInFromLeft 0.2s ease-out forwards;
+}
+
+@keyframes sidebarSlideInFromRight {
+ from {
+ opacity: 0;
+ transform: translateX(12px);
+ }
+ to {
+ opacity: 1;
+ transform: translateX(0);
+ }
+}
+
+@keyframes sidebarSlideInFromLeft {
+ from {
+ opacity: 0;
+ transform: translateX(-12px);
+ }
+ to {
+ opacity: 1;
+ transform: translateX(0);
+ }
+}
+
+@media (min-width: 997px) {
+ .menu {
+ flex: 1;
+ min-height: 0;
+ overflow-y: auto;
+ padding: 0.5rem;
+ }
+ @supports (scrollbar-gutter: stable) {
+ .menu {
+ padding: 0.5rem 0 0.5rem 0.5rem;
+ scrollbar-gutter: stable;
+ }
+ }
+
+ .menuWithAnnouncementBar {
+ margin-bottom: var(--docusaurus-announcement-bar-height);
+ }
+}
diff --git a/src/theme/DocSidebar/Mobile/index.js b/src/theme/DocSidebar/Mobile/index.js
new file mode 100644
index 0000000000..37bf79f258
--- /dev/null
+++ b/src/theme/DocSidebar/Mobile/index.js
@@ -0,0 +1,54 @@
+/**
+ * Custom DocSidebar Mobile: version selector for embedded cluster docs.
+ */
+import React from 'react';
+import clsx from 'clsx';
+import {
+ NavbarSecondaryMenuFiller,
+ ThemeClassNames,
+} from '@docusaurus/theme-common';
+import { useNavbarMobileSidebar } from '@docusaurus/theme-common/internal';
+import DocSidebarItems from '@theme/DocSidebarItems';
+import InstallerVersionSelector from '@site/src/components/InstallerVersionSelector';
+import { getProductForPath } from '@site/src/utils/sidebarProductFromPath';
+
+const DocSidebarMobileSecondaryMenu = ({ sidebar, path }) => {
+ const mobileSidebar = useNavbarMobileSidebar();
+ const product = getProductForPath(path);
+
+ return (
+ <>
+ {product?.key === 'embedded-cluster' && (
+
+
+
+ )}
+
+ {
+ if (item.type === 'category' && item.href) {
+ mobileSidebar.toggle();
+ }
+ if (item.type === 'link') {
+ mobileSidebar.toggle();
+ }
+ }}
+ level={1}
+ />
+
+ >
+ );
+};
+
+function DocSidebarMobile(props) {
+ return (
+
+ );
+}
+
+export default React.memo(DocSidebarMobile);
diff --git a/src/utils/sidebarProductFromPath.js b/src/utils/sidebarProductFromPath.js
new file mode 100644
index 0000000000..8895858e1e
--- /dev/null
+++ b/src/utils/sidebarProductFromPath.js
@@ -0,0 +1,22 @@
+/**
+ * Maps current doc path to a product identifier for the sidebar.
+ * Used by Desktop/Mobile DocSidebar to show the version selector
+ * and drive the slide transition when entering/leaving the embedded cluster docs.
+ */
+
+const EC_PREFIX = '/embedded-cluster';
+const EC_NAME = 'Embedded Cluster';
+
+/**
+ * @param {string} path - Current doc path (e.g. /embedded-cluster/v2/embedded-overview)
+ * @returns {{ key: string, name: string } | null}
+ */
+export function getProductForPath(path) {
+ if (!path || typeof path !== 'string') return null;
+
+ if (path.startsWith(EC_PREFIX)) {
+ return { key: 'embedded-cluster', name: EC_NAME };
+ }
+
+ return null;
+}
diff --git a/static/js/generate-llms.js b/static/js/generate-llms.js
index e5eb239f34..8be01d03d5 100644
--- a/static/js/generate-llms.js
+++ b/static/js/generate-llms.js
@@ -22,6 +22,7 @@ const fs = require('fs');
const path = require('path');
const DOCS_DIR = path.join(__dirname, "../../docs");
+const EC_DOCS_DIR = path.join(__dirname, "../../embedded-cluster_versioned_docs/version-2.0.0");
const STATIC_DIR = path.join(__dirname, "../../static");
const OUTPUT_FILE = path.join(STATIC_DIR, "llms.txt");
const OUTPUT_FULL_FILE = path.join(STATIC_DIR, "llms-full.txt");
@@ -41,14 +42,14 @@ const INCLUDED_FILES = [
'vendor/testing-about.md',
'vendor/testing-how-to.md',
'vendor/testing-supported-clusters.md',
- // Embedded Cluster docs
- 'enterprise/embedded-manage-nodes.mdx',
- 'enterprise/installing-embedded-air-gap.mdx',
- 'enterprise/installing-embedded-automation.mdx',
- 'enterprise/installing-embedded-requirements.mdx',
- 'enterprise/installing-embedded.mdx',
- 'reference/embedded-cluster-install.mdx',
- 'vendor/embedded-overview.mdx',
+ // Embedded Cluster docs (in embedded-cluster plugin, prefixed with ec:)
+ 'ec:embedded-manage-nodes.mdx',
+ 'ec:installing-embedded-air-gap.mdx',
+ 'ec:installing-embedded-automation.mdx',
+ 'ec:installing-embedded-requirements.mdx',
+ 'ec:installing-embedded.mdx',
+ 'ec:embedded-cluster-install.mdx',
+ 'ec:embedded-overview.mdx',
// Helm Install docs
'vendor/helm-install-airgap.mdx',
'vendor/helm-install-overview.mdx',
@@ -79,7 +80,7 @@ const INCLUDED_FILES = [
'reference/template-functions-license-context.md',
'reference/template-functions-static-context.md',
'vendor/helm-native-about.mdx',
- 'vendor/helm-native-v2-using.md',
+ 'vendor/helm-native-v2-using.mdx',
'vendor/helm-packaging-airgap-bundles.mdx',
'vendor/resources-annotations-templating.md',
'vendor/snapshots-overview.mdx',
@@ -109,7 +110,7 @@ const INCLUDED_FILES = [
'reference/replicated-sdk-apis.md',
'vendor/replicated-sdk-installing.mdx',
'vendor/replicated-sdk-overview.mdx',
- 'vendor/replicated-sdk-customizing.md',
+ 'vendor/replicated-sdk-customizing.mdx',
// Vendor Portal docs
'vendor/custom-domains-using.md',
'vendor/custom-domains.md',
@@ -117,7 +118,7 @@ const INCLUDED_FILES = [
'vendor/insights-app-status.md',
'vendor/instance-insights-event-data.mdx',
'vendor/licenses-about.mdx',
- 'vendor/licenses-adding-custom-fields.md',
+ 'vendor/licenses-adding-custom-fields.mdx',
'vendor/licenses-install-types.mdx',
'vendor/licenses-reference-sdk.mdx',
'vendor/releases-about.mdx',
@@ -205,7 +206,10 @@ function shouldSkipDirectory(filePath, excludedDirs = ['.history', 'templates',
return excludedDirs.some(dir => filePath.includes(dir));
}
-function getAllMarkdownFiles(dir, fileList = [], excludeReleaseNotes = true) {
+function getAllMarkdownFiles(dir, fileList = [], excludeReleaseNotes = true, baseDir = null) {
+ if (!baseDir) baseDir = dir;
+ const urlPrefix = (baseDir === EC_DOCS_DIR) ? 'embedded-cluster/v2/' : '';
+
fs.readdirSync(dir).forEach(file => {
const filePath = path.join(dir, file);
@@ -219,7 +223,7 @@ function getAllMarkdownFiles(dir, fileList = [], excludeReleaseNotes = true) {
}
if (fs.statSync(filePath).isDirectory()) {
- getAllMarkdownFiles(filePath, fileList, excludeReleaseNotes);
+ getAllMarkdownFiles(filePath, fileList, excludeReleaseNotes, baseDir);
} else if ((path.extname(file) === '.md' || path.extname(file) === '.mdx') && !file.startsWith('_')) {
const content = fs.readFileSync(filePath, 'utf8');
@@ -229,8 +233,8 @@ function getAllMarkdownFiles(dir, fileList = [], excludeReleaseNotes = true) {
const titleMatch = processedContent.match(/^#\s+(.+)$/m);
const title = titleMatch ? titleMatch[1] : file.replace(/\.(md|mdx)$/, '');
- const relativePath = filePath
- .replace(`${DOCS_DIR}/`, '')
+ const relativePath = urlPrefix + filePath
+ .replace(`${baseDir}/`, '')
.replace(/\.(md|mdx)$/, '');
fileList.push({
@@ -243,15 +247,22 @@ function getAllMarkdownFiles(dir, fileList = [], excludeReleaseNotes = true) {
return fileList;
}
-// New function to get all markdown files including release-notes (only for static folder)
+// Get all markdown files including release-notes (only for static folder)
function getAllMarkdownFilesForStatic(dir, fileList = []) {
- return getAllMarkdownFiles(dir, fileList, false);
+ return getAllMarkdownFiles(dir, fileList, false, dir);
}
function getCuratedFiles(dir) {
const fileList = [];
INCLUDED_FILES.forEach(relativePath => {
- const filePath = path.join(dir, relativePath);
+ // Files prefixed with ec: live in the embedded cluster docs directory
+ const isEC = relativePath.startsWith('ec:');
+ const actualRelPath = isEC ? relativePath.slice(3) : relativePath;
+ const filePath = isEC ? path.join(EC_DOCS_DIR, actualRelPath) : path.join(dir, actualRelPath);
+ // For URL paths, embedded cluster docs are under embedded-cluster/v2/
+ const urlPath = isEC
+ ? `embedded-cluster/v2/${actualRelPath.replace(/\.(md|mdx)$/, '')}`
+ : actualRelPath.replace(/\.(md|mdx)$/, '');
try {
const content = fs.readFileSync(filePath, 'utf8');
@@ -260,12 +271,12 @@ function getCuratedFiles(dir) {
const processedContent = processContent(content, filePath);
const titleMatch = processedContent.match(/^#\s+(.+)$/m);
- const title = titleMatch ? titleMatch[1] : path.basename(relativePath).replace(/\.(md|mdx)$/, '');
+ const title = titleMatch ? titleMatch[1] : path.basename(actualRelPath).replace(/\.(md|mdx)$/, '');
const description = extractFirstSentence(processedContent);
fileList.push({
- path: relativePath.replace(/\.(md|mdx)$/, ''),
+ path: urlPath,
title: title,
description: description,
content: processedContent
@@ -375,10 +386,15 @@ function generateLLMsTxt(files) {
// Update the main execution
loadPartials(DOCS_DIR);
-// Get files for llms-full.txt (excluding release-notes)
+
+// Get files for llms-full.txt (excluding release-notes) from both docs sources
const allFiles = getAllMarkdownFiles(DOCS_DIR);
+getAllMarkdownFiles(EC_DOCS_DIR, allFiles);
+
// Get all files including release-notes for copying to static
const allFilesForStatic = getAllMarkdownFilesForStatic(DOCS_DIR);
+getAllMarkdownFilesForStatic(EC_DOCS_DIR, allFilesForStatic);
+
const curatedFiles = getCuratedFiles(DOCS_DIR);
// Generate llms-full.txt (excluding release-notes)