Learn how to clone one or multiple stacks from one cluster to another - including across organisations - for consistent deployments across environments
Cloning stacks allows you to replicate your infrastructure configurations across multiple clusters - even across different organisations. You can clone a single stack or select multiple stacks at once. With Deploy on the target after cloning left on, a cloned stack deploys on the target straight away; turn it off to keep the clone as a draft for review first. A stack whose encrypted values had to be removed is always held as a draft, marked Needs input, until you re-enter them.
Cloning a Stack Between Clusters
AI Prompts
Use these prompts with the AI Assistant (Cmd+J) to clone stacks with natural language.
Replicate your monitoring stack across all clusters
Create templates
Use a well-configured stack as a starting point for new clusters
Keep a standby ready
Run the same configuration on a second cluster, ready to take over
Cross-org sharing
Clone a stack from a development org to a client or production org
Replicate entire clusters
Select all stacks and clone them to a new cluster in one operation
By default a clone copies configuration only, and it reads the live source. A clone reproduces the stack’s definition on the target; persistent volumes and database contents stay where they are unless you add them with the Data step in the dialog or --with-data on the CLI. Cloning with data needs a backup vault. It also needs the source cluster to be readable, so it is not a disaster-recovery mechanism - for that, protect the stack and restore a restore point.
Security Note: Encrypted values (secrets) are not transferred during cloning for security reasons. You’ll need to reconfigure them in the target cluster. This includes passwords, API keys, and any values encrypted with SOPS. A stripped Secret is still a valid Kubernetes object - each cleared key holds the ENCRYPTED_VALUE_REMOVED placeholder (base64-encoded under data) so the draft deploys and the workload fails clearly on the placeholder rather than the apply failing on the manifest.
Go to your source cluster and navigate to Stacks. Find the stack you want to clone.
2
Open Clone Dialog
Click the menu icon (three dots) on the stack card and select Clone to Cluster.
3
Target
On the Target step:
If you belong to multiple organisations, select the target organisation. The cluster list updates to show clusters in that organisation.
Choose the destination cluster.
Optionally change the Stack name.
If your stack contains encrypted values, a warning says they do not travel. For a cross-organisation clone, a banner says you are taken to the target organisation once the copy is made.
4
Data (optional)
A Data step lets you carry the stack’s volumes and database contents as well, through a backup vault.
5
Review
Check the summary. Include addon configurations copies the Helm values and settings of every add-on. Deploy on the target after cloning is on by default; turn it off to keep the clone as a draft.
6
Clone the Stack
Click Clone stack. A deployed clone takes you to the running stack on the target; a clone that needs input opens its draft in the builder, with a banner naming the values to re-enter. If you cloned to a different organisation, Ankra automatically switches your active organisation.
7
Finish on the target
If the clone was held as a draft (you turned deploy off, or encrypted values had to be removed), add any missing secrets, adjust cluster-specific settings, and deploy it from the builder.
You can select multiple stacks and clone them all to another cluster in a single operation. Each stack is created as a separate draft on the target cluster.
1
Select Stacks
On the Stacks page, click any stack card’s avatar (the colored circle) to start selecting. Click additional avatars to add more stacks to your selection.Alternatively, click the Clone Stacks button to the left of the search bar - this selects all stacks on the page.
2
Open the Clone Dialog
With stacks selected, a floating action bar appears at the bottom of the screen showing the count. Click Clone to Cluster in the bar, or click the Clone N Stacks button next to the search bar.
3
Choose a Target
In the dialog:
Select the target organisation (if you belong to multiple)
Choose the destination cluster
Toggle whether to include addon configurations
The dialog shows a list of all selected stacks as tags.
4
Clone
Click Clone N Stacks. Each stack is cloned sequentially - you’ll see a progress bar and each stack tag turns green on success. Name conflicts are auto-resolved with suffixes (e.g. -copy).
5
Navigate to Target
The summary says how many stacks are deploying and how many were held for your input, with a link into each held draft’s builder tab. Click Go to Target Cluster to watch them come up.
Multi-stack cloning is useful for replicating an entire cluster’s configuration. Select all stacks and clone to a new cluster; the ones without secrets deploy on their own, and the Needs input chip on the stack list shows which are waiting for you.
Deploy the clone on the target (default: false, so the CLI creates a draft)
--with-data
Carry the stack’s data through a restore point (needs a backup vault)
This table covers the common flags. --deploy, --with-data and the data flags need CLI v0.18.0 or later; see the CLI reference for --from, --vault, --wait and the rest.
The CLI and the dashboard have opposite defaults: the dashboard deploys the clone unless you turn Deploy on the target after cloning off, while ankra cluster stacks clone creates a draft unless you pass --deploy.
Cloning stack 'monitoring-stack' to cluster 'production'...Stack cloned successfully! Draft ID: a1b2c3d4-e5f6-7890-abcd-ef1234567890 Stack Name: monitoring-stack Addons: 3 Manifests: 2 Applications: 1Warnings: - Addon 'grafana' had encrypted configuration that needs to be reconfigured. - Cluster variable 'db_host' was copied from the source cluster onto the cloned stack; review its value for the target cluster. - Manifest 'prometheus' pins scheduling to nodes labelled purpose=monitoring - make sure the target cluster has matching nodes. - Deploy check for addon 'grafana': registry 'bitnami' is not connected in this organisation.The stack has been created as a draft. Open the Ankra dashboard to review and deploy.
The clone runs the checks a deploy would, and reports what it finds as warnings rather than refusing - a clone never fails on them:
Variables: a ${{ ankra.* }} token the target cannot resolve is named, and a same-organisation clone copies the source cluster’s value onto the stack so the manifest does not deploy the literal token.
Node pinning: manifests and applications whose nodeSelector targets labels the target may not have.
SOPS readiness: encrypted paths that survived the strip, on a target with no deployed SOPS key.
Chart references: registries not connected in the target organisation, and charts or versions the catalog does not know.
Ankra supports cloning stacks to clusters that belong to a different organisation. This is useful for sharing configurations with clients, replicating setups from a template org to a production org, or migrating workloads.
Credentials and secrets don’t transfer across organisations. Each organisation has its own SOPS keys, registry credentials, and secrets. After a cross-org clone you must reconfigure:
Encrypted values in manifests and addon configs
Registry credentials if images are in private registries
Any organisation-specific variables referenced by the stack
Organisation and cluster variables are scoped to their organisation, and no variable value crosses that boundary. A cross-organisation clone names every ${{ ankra.* }} reference it could not resolve in its warnings - define those variables in the target organisation or on the target cluster before deploying.
When you clone a stack that contains encrypted values:
Manifests: Encrypted fields are replaced with the ENCRYPTED_VALUE_REMOVED placeholder
Addon configurations: Encrypted values are replaced with the same placeholder
Held as a draft: the stack is not deployed; the clone result, the Needs input chip on the stack card and a banner in the builder name each member and field to re-enter, and the banner links straight to it
Re-encrypting Secrets After Clone
After cloning, you’ll need to re-encrypt secrets for the target cluster:
Open the cloned draft in the target cluster
Navigate to each manifest or addon that had encrypted values
Enter the new secret values
List the keys under Encrypted Keys (SOPS) so they are sealed with the target organisation’s key
Save and deploy
The SOPS key pair belongs to the organisation, not to a cluster. Clusters in the same organisation share it, so a value sealed for one can be decrypted by another. A clone into a different organisation cannot decrypt the source’s values - this is by design for security.
Automating Secret Configuration
For automated deployments, consider:
Using external secrets management (e.g., Vault, AWS Secrets Manager)
Storing secrets in environment-specific configuration
# Test in staging firstankra cluster select stagingankra cluster stacks list# Clone to production when readyankra cluster stacks clone my-app-stack --to production# Switch to production and configure secretsankra cluster select production# ... configure in dashboard
Standardizing Multiple Clusters
Clone your standard monitoring stack to all clusters:
ankra cluster select template-clusterfor cluster in dev staging production; do ankra cluster stacks clone observability --to $cluster --name observability echo "Cloned to $cluster"done
Creating a Backup Configuration
# Clone critical stacks to a DR clusterankra cluster select primaryankra cluster stacks clone core-services --to dr-clusterankra cluster stacks clone monitoring --to dr-clusterankra cluster stacks clone ingress --to dr-cluster
Replicate All Stacks to a New Cluster
In the dashboard:
Go to Stacks in your source cluster
Click the Clone Stacks button next to the search bar - all stacks are selected
Click Clone to Cluster in the floating action bar
Choose your target cluster and click Clone
All stacks are created as drafts on the target - review and deploy each one
With the CLI:
ankra cluster select source-clusterankra cluster stacks list # note the stack names# Clone each stack to the new clusterfor stack in monitoring ingress app-data; do ankra cluster stacks clone "$stack" --to new-clusterdone
Sharing a Stack with Another Organisation
Clone a well-tested stack to a client or partner organisation from the dashboard: select the target organisation in the clone dialog’s Target step. After cloning, Ankra switches you to the target organisation automatically, where the stack’s secrets can be added.
Ensure the source stack is deployed (not just a draft) and you have the correct stack name:
ankra cluster stacks list
Clone Failed: Access Denied
Verify you have access to both the source and target clusters. You must be a member of both clusters’ organizations.
Clone Failed: Target Cluster Unavailable
The clone operation only creates a draft in the database - it doesn’t require the target cluster to be online. Check your network connection to the Ankra API.
Missing Resources After Clone
If addons or manifests are missing:
Check if the source stack had resources in a deleting or deleted state
Verify the clone included addon configurations (--include-config=true)
Check the warnings for any resources that couldn’t be cloned
Sync your stack configurations to a Git repository.
Ankra CLI
Learn more CLI commands for stack management.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Ankra","colors":{"primary":"#5d64ff","light":"#5d64ff","dark":"#3f48b2"},"logo":{"light":"https://mintcdn.com/ankra/uW749bPYey14eJsU/logo/light.svg?fit=max\u0026auto=format\u0026n=uW749bPYey14eJsU\u0026q=85\u0026s=7f48236f76559638a5a154da424c91d6","dark":"https://mintcdn.com/ankra/uW749bPYey14eJsU/logo/dark.svg?fit=max\u0026auto=format\u0026n=uW749bPYey14eJsU\u0026q=85\u0026s=4e4b278d2d7c90f2c8ff4ac9cc95c78a","href":"https://ankra.ai"},"favicon":"https://mintcdn.com/ankra/uW749bPYey14eJsU/favicon.ico?fit=max\u0026auto=format\u0026n=uW749bPYey14eJsU\u0026q=85\u0026s=68fd8c280641a74d9a2171dfa7b39219","api":{"playground":{"display":"interactive"},"examples":{"defaults":"required","languages":["python","javascript","curl"]},"mdx":{"auth":{"method":"bearer"}}},"navbar":{"links":[{"href":"mailto:[email protected]","label":"Support"}],"primary":{"type":"button","label":"Platform","href":"https://platform.ankra.app"}},"footer":{"socials":{"linkedin":"https://linkedin.com/company/ankra","github":"https://github.com/ankraio","slack":"https://join.slack.com/t/ankra-community/shared_invite/zt-3a5rem8f8-cUho4epX2MoLT83bFf~VSA"}},"seo":{"metatags":{"og:site_name":"Ankra"}},"integrations":{"posthog":{"apiKey":"phc_c1cRSlsPgqJH5IGiQYzk40R91jQxf2e3ZaZVwO5e6OM","apiHost":"https://eu.i.posthog.com"}},"contextual":{"options":["copy","view","chatgpt","claude"],"display":"header"},"styling":{"latex":false},"navigation":{"global":{"anchors":[{"anchor":"Community","icon":"slack","href":"https://join.slack.com/t/ankra-community/shared_invite/zt-3a5rem8f8-cUho4epX2MoLT83bFf~VSA"},{"anchor":"Youtube","icon":"youtube","href":"https://www.youtube.com/@ankraio"},{"anchor":"Blog","icon":"newspaper","href":"https://www.ankra.ai/blog"}]},"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"ankra","hasAudioNarration":false,"actualSubdomain":"ankra","customDomains":["docs.ankra.ai"],"gitSource":{"type":"github","owner":"ankraio","repo":"ankra-docs","deployBranch":"master","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6ae571201e6670f666a1e015","collectionId":"79bbfa3f-bf94-4b0d-90b7-78c34dd1c2df","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ae571201e6670f666a1e015"},"entitlements":{},"buildId":"6ae595bdf146f7c5c1de118d","clientVersion":"0.0.4043","searchFilterCounts":[{"language":"default","tag":"API Reference","count":1576},{"language":"default","tag":"Endpoints","count":1575},{"language":"default","tag":"Documentation","count":255},{"language":"default","tag":"Applications","count":150},{"language":"default","tag":"Security","count":125},{"language":"default","tag":"Scaleway Clusters","count":96},{"language":"default","tag":"Ankra Cloud Clusters","count":95},{"language":"default","tag":"AWS Clusters","count":94},{"language":"default","tag":"Services","count":68},{"language":"default","tag":"Stack Profiles","count":59}]},"assistantConfig":{},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"guides/clone-stack","slug":"/guides/clone-stack","pageMetadata":{"title":"Clone Stacks Between Clusters \u0026 Organisations","description":"Learn how to clone one or multiple stacks from one cluster to another - including across organisations - for consistent deployments across environments","href":"/guides/clone-stack"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Learn how to clone one or multiple stacks from one cluster to another - including across organisations - for consistent deployments across environments\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];const CliVersion=({since,command,note})=>{const _components={a:`a`,..._provideComponents()};const latestStableCli=`0.52.4`;const parse=version=>String(version).split(`.`).map(part=>parseInt(part,10)||0);const requested=parse(since);const stable=parse(latestStableCli);let isPrerelease=false;for(let index=0;index\u003c3;index+=1){if(requested[index]>stable[index]){isPrerelease=true;break}if(requested[index]\u003cstable[index]){break}}const containerStyle={display:`flex`,alignItems:`baseline`,gap:`0.6rem`,margin:`1rem 0`,padding:`0.6rem 0.9rem`,border:`1px solid rgba(128, 128, 128, 0.35)`,borderRadius:`0.5rem`,fontSize:`0.9em`,lineHeight:1.5};const pillStyle={flex:`none`,padding:`0.1rem 0.5rem`,borderRadius:`999px`,background:`rgba(128, 128, 128, 0.18)`,fontFamily:`ui-monospace, SFMono-Regular, Menlo, monospace`,fontSize:`0.85em`,fontWeight:600,whiteSpace:`nowrap`};const keepTogether={whiteSpace:`nowrap`};return _jsxs(`div`,{style:containerStyle,\"data-cli-version\":since,children:[_jsxs(`span`,{style:pillStyle,children:[`CLI v`,since,`+`]}),_jsxs(`span`,{children:[command?_jsxs(`span`,{children:[_jsx(`span`,{style:keepTogether,children:_jsxs(`code`,{children:[`ankra `,command]})}),` `,`needs`]}):_jsx(`span`,{children:`The commands on this page need`}),` `,`the ankra CLI `,_jsxs(`strong`,{style:keepTogether,children:[`v`,since,` or later`]}),isPrerelease?_jsxs(`span`,{children:[` `,`- a pre-release today, so enable the`,` `,_jsx(_components.a,{href:`/integrations/ankra-cli#beta-pre-release-channel`,children:`beta channel`}),` before upgrading`]}):null,`. Check yours with`,` `,_jsx(`span`,{style:keepTogether,children:_jsx(`code`,{children:`ankra --version`})}),`; `,_jsx(_components.a,{href:`/integrations/ankra-cli#upgrading-the-cli`,children:`upgrade`}),` with`,` `,_jsx(`span`,{style:keepTogether,children:_jsx(`code`,{children:`ankra upgrade`})}),`.`,note?_jsxs(`span`,{children:[` `,note]}):null]})]})};function _createMdxContent(props){const _components={a:`a`,code:`code`,hr:`hr`,li:`li`,ol:`ol`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,..._provideComponents(),...props.components},{Accordion,AccordionGroup,Card,CardGroup,CodeBlock,Frame,Heading,Note,Step,Steps,Table,Tip,Warning,_MdxComponentBoundary}=_components;if(!Accordion)_missingMdxReference(`Accordion`,true);if(!AccordionGroup)_missingMdxReference(`AccordionGroup`,true);if(!Card)_missingMdxReference(`Card`,true);if(!CardGroup)_missingMdxReference(`CardGroup`,true);if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Frame)_missingMdxReference(`Frame`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Note)_missingMdxReference(`Note`,true);if(!Step)_missingMdxReference(`Step`,true);if(!Steps)_missingMdxReference(`Steps`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Tip)_missingMdxReference(`Tip`,true);if(!Warning)_missingMdxReference(`Warning`,true);if(!_MdxComponentBoundary)_missingMdxReference(`_MdxComponentBoundary`,true);return _jsxs(_Fragment,{children:[_jsx(Note,{children:_jsxs(_components.p,{children:[`Cloning stacks allows you to replicate your infrastructure configurations across multiple clusters - even across different organisations. You can clone a single stack or select multiple stacks at once. With `,_jsx(_components.strong,{children:`Deploy on the target after cloning`}),` left on, a cloned stack deploys on the target straight away; turn it off to keep the clone as a draft for review first. A stack whose encrypted values had to be removed is always held as a draft, marked `,_jsx(_components.strong,{children:`Needs input`}),`, until you re-enter them.`]})}),`\n`,_jsx(Frame,{caption:`Cloning a Stack Between Clusters`,children:_jsx(`video`,{controls:true,autoPlay:true,muted:true,loop:true,playsInline:true,className:`mint-w-full mint-aspect-video mint-rounded-xl`,src:`https://fsn1.your-objectstorage.com/ankra-vod/docs/clone-stack.mp4`})}),`\n`,_jsx(Card,{title:`AI Prompts`,icon:`wand-magic-sparkles`,href:`#ai-prompts`,children:_jsxs(_components.p,{children:[`Use these prompts with the AI Assistant (`,_jsx(_components.code,{children:`Cmd+J`}),`) to clone stacks with natural language.`]})}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`overview`,children:`Overview`}),`\n`,_jsx(_components.p,{children:`Stack cloning is useful when you want to:`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Use Case`}),_jsx(_components.th,{children:`Example`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Promote configurations`})}),_jsx(_components.td,{children:`Clone a tested stack from staging to production`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Standardize environments`})}),_jsx(_components.td,{children:`Replicate your monitoring stack across all clusters`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Create templates`})}),_jsx(_components.td,{children:`Use a well-configured stack as a starting point for new clusters`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Keep a standby ready`})}),_jsx(_components.td,{children:`Run the same configuration on a second cluster, ready to take over`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Cross-org sharing`})}),_jsx(_components.td,{children:`Clone a stack from a development org to a client or production org`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Replicate entire clusters`})}),_jsx(_components.td,{children:`Select all stacks and clone them to a new cluster in one operation`})]})]})]}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`By default a clone copies configuration only, and it reads the live source.`}),` A clone reproduces the stack’s definition on the target; persistent volumes and database contents stay where they are unless you add them with the `,_jsx(_components.strong,{children:`Data`}),` step in the dialog or `,_jsx(_components.code,{children:`--with-data`}),` on the CLI. Cloning with data needs a `,_jsx(_components.a,{href:`/guides/backups`,children:`backup vault`}),`. It also needs the source cluster to be readable, so it is not a disaster-recovery mechanism - for that, protect the stack and restore a `,_jsx(_components.a,{href:`/guides/backups`,children:`restore point`}),`.`]})}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Security Note:`}),` Encrypted values (secrets) are not transferred during cloning for security reasons. You’ll need to reconfigure them in the target cluster. This includes passwords, API keys, and any values encrypted with SOPS. A stripped Secret is still a valid Kubernetes object - each cleared key holds the `,_jsx(_components.code,{children:`ENCRYPTED_VALUE_REMOVED`}),` placeholder (base64-encoded under `,_jsx(_components.code,{children:`data`}),`) so the draft deploys and the workload fails clearly on the placeholder rather than the apply failing on the manifest.`]})}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`prerequisites`,children:`Prerequisites`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`At least two clusters imported into Ankra (can be in different organisations)`}),`\n`,_jsx(_components.li,{children:`A deployed stack in the source cluster that you want to clone`}),`\n`,_jsx(_components.li,{children:`Access to both the source and target clusters`}),`\n`,_jsx(_components.li,{children:`For cross-org cloning: membership in both the source and target organisations`}),`\n`]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`clone-using-the-dashboard`,children:`Clone Using the Dashboard`}),`\n`,_jsxs(Steps,{children:[_jsx(Step,{title:`Navigate to Source Stack`,children:_jsxs(_components.p,{children:[`Go to your source cluster and navigate to `,_jsx(_components.strong,{children:`Stacks`}),`. Find the stack you want to clone.`]})}),_jsx(Step,{title:`Open Clone Dialog`,children:_jsxs(_components.p,{children:[`Click the menu icon (three dots) on the stack card and select `,_jsx(_components.strong,{children:`Clone to Cluster`}),`.`]})}),_jsxs(Step,{title:`Target`,children:[_jsxs(_components.p,{children:[`On the `,_jsx(_components.strong,{children:`Target`}),` step:`]}),_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`If you belong to multiple organisations, select the `,_jsx(_components.strong,{children:`target organisation`}),`. The cluster list updates to show clusters in that organisation.`]}),`\n`,_jsxs(_components.li,{children:[`Choose the `,_jsx(_components.strong,{children:`destination cluster`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Optionally change the `,_jsx(_components.strong,{children:`Stack name`}),`.`]}),`\n`]}),_jsxs(_components.p,{children:[`If your stack contains encrypted values, a warning says they do not travel. For a `,_jsx(_components.strong,{children:`cross-organisation`}),` clone, a banner says you are taken to the target organisation once the copy is made.`]})]}),_jsx(Step,{title:`Data (optional)`,children:_jsxs(_components.p,{children:[`A `,_jsx(_components.strong,{children:`Data`}),` step lets you carry the stack’s volumes and database contents as well, through a `,_jsx(_components.a,{href:`/guides/backups`,children:`backup vault`}),`.`]})}),_jsx(Step,{title:`Review`,children:_jsxs(_components.p,{children:[`Check the summary. `,_jsx(_components.strong,{children:`Include addon configurations`}),` copies the Helm values and settings of every add-on. `,_jsx(_components.strong,{children:`Deploy on the target after cloning`}),` is on by default; turn it off to keep the clone as a draft.`]})}),_jsx(Step,{title:`Clone the Stack`,children:_jsxs(_components.p,{children:[`Click `,_jsx(_components.strong,{children:`Clone stack`}),`. A deployed clone takes you to the running stack on the target; a clone that needs input opens its draft in the builder, with a banner naming the values to re-enter. If you cloned to a different organisation, Ankra automatically switches your active organisation.`]})}),_jsx(Step,{title:`Finish on the target`,children:_jsx(_components.p,{children:`If the clone was held as a draft (you turned deploy off, or encrypted values had to be removed), add any missing secrets, adjust cluster-specific settings, and deploy it from the builder.`})})]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`clone-multiple-stacks-at-once`,children:`Clone Multiple Stacks at Once`}),`\n`,_jsx(_components.p,{children:`You can select multiple stacks and clone them all to another cluster in a single operation. Each stack is created as a separate draft on the target cluster.`}),`\n`,_jsxs(Steps,{children:[_jsxs(Step,{title:`Select Stacks`,children:[_jsxs(_components.p,{children:[`On the `,_jsx(_components.strong,{children:`Stacks`}),` page, click any stack card’s avatar (the colored circle) to start selecting. Click additional avatars to add more stacks to your selection.`]}),_jsxs(_components.p,{children:[`Alternatively, click the `,_jsx(_components.strong,{children:`Clone Stacks`}),` button to the left of the search bar - this selects all stacks on the page.`]})]}),_jsx(Step,{title:`Open the Clone Dialog`,children:_jsxs(_components.p,{children:[`With stacks selected, a floating action bar appears at the bottom of the screen showing the count. Click `,_jsx(_components.strong,{children:`Clone to Cluster`}),` in the bar, or click the `,_jsx(_components.strong,{children:`Clone N Stacks`}),` button next to the search bar.`]})}),_jsxs(Step,{title:`Choose a Target`,children:[_jsx(_components.p,{children:`In the dialog:`}),_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`Select the `,_jsx(_components.strong,{children:`target organisation`}),` (if you belong to multiple)`]}),`\n`,_jsxs(_components.li,{children:[`Choose the `,_jsx(_components.strong,{children:`destination cluster`})]}),`\n`,_jsx(_components.li,{children:`Toggle whether to include addon configurations`}),`\n`]}),_jsx(_components.p,{children:`The dialog shows a list of all selected stacks as tags.`})]}),_jsx(Step,{title:`Clone`,children:_jsxs(_components.p,{children:[`Click `,_jsx(_components.strong,{children:`Clone N Stacks`}),`. Each stack is cloned sequentially - you’ll see a progress bar and each stack tag turns green on success. Name conflicts are auto-resolved with suffixes (e.g. `,_jsx(_components.code,{children:`-copy`}),`).`]})}),_jsx(Step,{title:`Navigate to Target`,children:_jsxs(_components.p,{children:[`The summary says how many stacks are deploying and how many were held for your input, with a link into each held draft’s builder tab. Click `,_jsx(_components.strong,{children:`Go to Target Cluster`}),` to watch them come up.`]})})]}),`\n`,_jsx(Tip,{children:_jsxs(_components.p,{children:[`Multi-stack cloning is useful for replicating an entire cluster’s configuration. Select all stacks and clone to a new cluster; the ones without secrets deploy on their own, and the `,_jsx(_components.strong,{children:`Needs input`}),` chip on the stack list shows which are waiting for you.`]})}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`clone-using-the-cli`,children:`Clone Using the CLI`}),`\n`,_jsxs(_components.p,{children:[`The Ankra CLI provides a `,_jsx(_components.code,{children:`clone`}),` command for scripting and automation.`]}),`\n`,_jsx(Heading,{level:`3`,id:`basic-usage`,children:`Basic Usage`}),`\n`,_jsx(_MdxComponentBoundary,{name:`CliVersion`,children:_jsx(CliVersion,{since:`0.2.4`})}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`5`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`5`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# Select the source cluster first`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`ankra`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` cluster`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` select`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` my-source-cluster`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# Clone a stack to another cluster`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`ankra`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` cluster`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` stacks`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` clone`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` monitoring-stack`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --to`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` production-cluster`})]}),`\n`]})})}),`\n`,_jsx(Heading,{level:`3`,id:`command-options`,children:`Command Options`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Flag`}),_jsx(_components.th,{children:`Short`}),_jsx(_components.th,{children:`Description`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`--to`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`-t`})}),_jsx(_components.td,{children:`Target cluster name or ID (required)`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`--name`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`-n`})}),_jsx(_components.td,{children:`Custom name for the cloned stack`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`--include-config`})}),_jsx(_components.td,{}),_jsx(_components.td,{children:`Include addon configurations (default: true)`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`--deploy`})}),_jsx(_components.td,{}),_jsx(_components.td,{children:`Deploy the clone on the target (default: false, so the CLI creates a draft)`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`--with-data`})}),_jsx(_components.td,{}),_jsxs(_components.td,{children:[`Carry the stack’s data through a restore point (needs a `,_jsx(_components.a,{href:`/guides/backups`,children:`backup vault`}),`)`]})]})]})]}),`\n`,_jsxs(_components.p,{children:[`This table covers the common flags. `,_jsx(_components.code,{children:`--deploy`}),`, `,_jsx(_components.code,{children:`--with-data`}),` and the data flags need CLI v0.18.0 or later; see the `,_jsx(_components.a,{href:`/reference/cli/cluster#ankra-cluster-stacks-clone`,children:`CLI reference`}),` for `,_jsx(_components.code,{children:`--from`}),`, `,_jsx(_components.code,{children:`--vault`}),`, `,_jsx(_components.code,{children:`--wait`}),` and the rest.`]}),`\n`,_jsx(Note,{children:_jsxs(_components.p,{children:[`The CLI and the dashboard have opposite defaults: the dashboard deploys the clone unless you turn `,_jsx(_components.strong,{children:`Deploy on the target after cloning`}),` off, while `,_jsx(_components.code,{children:`ankra cluster stacks clone`}),` creates a draft unless you pass `,_jsx(_components.code,{children:`--deploy`}),`.`]})}),`\n`,_jsx(Heading,{level:`3`,id:`examples`,children:`Examples`}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`Clone with a custom name:`})}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`ankra`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` cluster`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` stacks`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` clone`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` my-stack`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --to`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` production`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --name`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` my-stack-prod`})]}),`\n`]})})}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`Clone without addon configurations:`})}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`ankra`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` cluster`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` stacks`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` clone`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` my-stack`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --to`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` production`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --include-config=false`})]}),`\n`]})})}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`Clone using cluster IDs:`})}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`ankra`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` cluster`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` stacks`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` clone`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` monitoring-stack`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --to`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 550e8400-e29b-41d4-a716-446655440000`})]}),`\n`]})})}),`\n`,_jsx(Heading,{level:`3`,id:`cli-output`,children:`CLI Output`}),`\n`,_jsx(CodeBlock,{numberOfLines:`17`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`17`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Cloning stack 'monitoring-stack' to cluster 'production'...`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Stack cloned successfully!`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` Draft ID: a1b2c3d4-e5f6-7890-abcd-ef1234567890`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` Stack Name: monitoring-stack`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` Addons: 3`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` Manifests: 2`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` Applications: 1`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Warnings:`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` - Addon 'grafana' had encrypted configuration that needs to be reconfigured.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` - Cluster variable 'db_host' was copied from the source cluster onto the cloned stack; review its value for the target cluster.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` - Manifest 'prometheus' pins scheduling to nodes labelled purpose=monitoring - make sure the target cluster has matching nodes.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` - Deploy check for addon 'grafana': registry 'bitnami' is not connected in this organisation.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`The stack has been created as a draft. Open the Ankra dashboard to review and deploy.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`what-gets-cloned`,children:`What Gets Cloned`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Component`}),_jsx(_components.th,{style:{textAlign:`center`},children:`Cloned`}),_jsx(_components.th,{children:`Notes`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Stack name \u0026 description`}),_jsx(_components.td,{style:{textAlign:`center`},children:`Yes`}),_jsx(_components.td,{children:`Can be renamed during clone`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Stack variables`}),_jsx(_components.td,{style:{textAlign:`center`},children:`Yes`}),_jsx(_components.td,{children:`Transferred as-is; cluster variables the content references are copied onto the stack (same organisation)`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Manifests`}),_jsx(_components.td,{style:{textAlign:`center`},children:`Yes`}),_jsx(_components.td,{children:`YAML content (encrypted values cleared)`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Addons`}),_jsx(_components.td,{style:{textAlign:`center`},children:`Yes`}),_jsx(_components.td,{children:`Chart references, versions, settings, job timeouts and AGENTS.md notes`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Applications`}),_jsx(_components.td,{style:{textAlign:`center`},children:`Yes`}),_jsx(_components.td,{children:`Same organisation only - applications are organisation-scoped, so a cross-organisation clone drops them with a warning`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Addon configurations`}),_jsx(_components.td,{style:{textAlign:`center`},children:`Optional`}),_jsxs(_components.td,{children:[_jsx(_components.strong,{children:`Include addon configurations`}),` in the dialog, or `,_jsx(_components.code,{children:`--include-config`})]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Encrypted secrets`}),_jsx(_components.td,{style:{textAlign:`center`},children:`No`}),_jsx(_components.td,{children:`Must be reconfigured`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Deployment state`}),_jsx(_components.td,{style:{textAlign:`center`},children:`By default`}),_jsxs(_components.td,{children:[_jsx(_components.strong,{children:`Deploy on the target after cloning`}),` (dashboard) or `,_jsx(_components.code,{children:`--deploy`}),` (CLI) deploys the clone; a stack whose secrets were removed is held as a draft`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Resource positions`}),_jsx(_components.td,{style:{textAlign:`center`},children:`Yes`}),_jsx(_components.td,{children:`Canvas layout and deploy wave carry over`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Dependencies`}),_jsx(_components.td,{style:{textAlign:`center`},children:`Yes`}),_jsx(_components.td,{children:`Parent relationships preserved by name and kind`})]})]})]}),`\n`,_jsx(Heading,{level:`3`,id:`pre-checks-in-the-warnings`,children:`Pre-checks in the warnings`}),`\n`,_jsx(_components.p,{children:`The clone runs the checks a deploy would, and reports what it finds as warnings rather than refusing - a clone never fails on them:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Variables`}),`: a `,_jsx(_components.code,{children:\"${{ ankra.* }}\"}),` token the target cannot resolve is named, and a same-organisation clone copies the source cluster’s value onto the stack so the manifest does not deploy the literal token.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Node pinning`}),`: manifests and applications whose `,_jsx(_components.code,{children:`nodeSelector`}),` targets labels the target may not have.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`SOPS readiness`}),`: encrypted paths that survived the strip, on a target with no deployed SOPS key.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Chart references`}),`: registries not connected in the target organisation, and charts or versions the catalog does not know.`]}),`\n`]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`cloning-between-organisations`,children:`Cloning Between Organisations`}),`\n`,_jsx(_components.p,{children:`Ankra supports cloning stacks to clusters that belong to a different organisation. This is useful for sharing configurations with clients, replicating setups from a template org to a production org, or migrating workloads.`}),`\n`,_jsx(Heading,{level:`3`,id:`how-it-works`,children:`How it works`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`You must be a `,_jsx(_components.strong,{children:`member of both`}),` the source and target organisations.`]}),`\n`,_jsxs(_components.li,{children:[`In the clone dialog, an `,_jsx(_components.strong,{children:`Organisation`}),` dropdown appears when you belong to more than one org. Select the target organisation to see its clusters.`]}),`\n`,_jsx(_components.li,{children:`Cross-organisation cloning is available from the dashboard only.`}),`\n`,_jsxs(_components.li,{children:[`After a cross-org clone, the dashboard `,_jsx(_components.strong,{children:`switches your active organisation`}),` to the target automatically.`]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`what-to-keep-in-mind`,children:`What to keep in mind`}),`\n`,_jsxs(Warning,{children:[_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Credentials and secrets don’t transfer across organisations.`}),` Each organisation has its own SOPS keys, registry credentials, and secrets. After a cross-org clone you must reconfigure:`]}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Encrypted values in manifests and addon configs`}),`\n`,_jsx(_components.li,{children:`Registry credentials if images are in private registries`}),`\n`,_jsx(_components.li,{children:`Any organisation-specific variables referenced by the stack`}),`\n`]})]}),`\n`,_jsx(Tip,{children:_jsxs(_components.p,{children:[`Organisation and cluster variables are scoped to their organisation, and no variable value crosses that boundary. A cross-organisation clone names every `,_jsx(_components.code,{children:\"${{ ankra.* }}\"}),` reference it could not resolve in its warnings - define those variables in the target organisation or on the target cluster before deploying.`]})}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`handling-encrypted-values`,children:`Handling Encrypted Values`}),`\n`,_jsx(_components.p,{children:`When you clone a stack that contains encrypted values:`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Manifests:`}),` Encrypted fields are replaced with the `,_jsx(_components.code,{children:`ENCRYPTED_VALUE_REMOVED`}),` placeholder`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Addon configurations:`}),` Encrypted values are replaced with the same placeholder`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Held as a draft:`}),` the stack is not deployed; the clone result, the `,_jsx(_components.strong,{children:`Needs input`}),` chip on the stack card and a banner in the builder name each member and field to re-enter, and the banner links straight to it`]}),`\n`]}),`\n`,_jsxs(AccordionGroup,{children:[_jsxs(Accordion,{title:`Re-encrypting Secrets After Clone`,id:`re-encrypting-secrets-after-clone`,children:[_jsx(_components.p,{children:`After cloning, you’ll need to re-encrypt secrets for the target cluster:`}),_jsxs(_components.ol,{children:[`\n`,_jsx(_components.li,{children:`Open the cloned draft in the target cluster`}),`\n`,_jsx(_components.li,{children:`Navigate to each manifest or addon that had encrypted values`}),`\n`,_jsx(_components.li,{children:`Enter the new secret values`}),`\n`,_jsxs(_components.li,{children:[`List the keys under `,_jsx(_components.strong,{children:`Encrypted Keys (SOPS)`}),` so they are sealed with the target organisation’s key`]}),`\n`,_jsx(_components.li,{children:`Save and deploy`}),`\n`]}),_jsx(Tip,{children:_jsx(_components.p,{children:`The SOPS key pair belongs to the organisation, not to a cluster. Clusters in the same organisation share it, so a value sealed for one can be decrypted by another. A clone into a different organisation cannot decrypt the source’s values - this is by design for security.`})})]}),_jsxs(Accordion,{title:`Automating Secret Configuration`,id:`automating-secret-configuration`,children:[_jsx(_components.p,{children:`For automated deployments, consider:`}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Using external secrets management (e.g., Vault, AWS Secrets Manager)`}),`\n`,_jsx(_components.li,{children:`Storing secrets in environment-specific configuration`}),`\n`,_jsx(_components.li,{children:`Using Kubernetes ExternalSecrets operator`}),`\n`]})]})]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`common-workflows`,children:`Common Workflows`}),`\n`,_jsxs(AccordionGroup,{children:[_jsx(Accordion,{title:`Staging to Production Promotion`,id:`staging-to-production-promotion`,children:_jsx(CodeBlock,{filename:``,numberOfLines:`10`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`10`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# Test in staging first`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`ankra`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` cluster`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` select`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` staging`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`ankra`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` cluster`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` stacks`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` list`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# Clone to production when ready`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`ankra`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` cluster`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` stacks`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` clone`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` my-app-stack`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --to`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` production`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# Switch to production and configure secrets`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`ankra`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` cluster`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` select`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` production`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# ... configure in dashboard`})}),`\n`]})})})}),_jsxs(Accordion,{title:`Standardizing Multiple Clusters`,id:`standardizing-multiple-clusters`,children:[_jsx(_components.p,{children:`Clone your standard monitoring stack to all clusters:`}),_jsx(CodeBlock,{filename:``,numberOfLines:`6`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`6`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`ankra`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` cluster`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` select`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` template-cluster`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`for`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` cluster`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` in`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` dev`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` staging`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` production`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`; `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`do`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:` ankra`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` cluster`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` stacks`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` clone`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` observability`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --to`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` $cluster`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --name`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` observability`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#DCDCAA`},children:` echo`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"Cloned to `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$cluster`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`done`})}),`\n`]})})})]}),_jsx(Accordion,{title:`Creating a Backup Configuration`,id:`creating-a-backup-configuration`,children:_jsx(CodeBlock,{filename:``,numberOfLines:`5`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`5`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# Clone critical stacks to a DR cluster`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`ankra`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` cluster`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` select`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` primary`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`ankra`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` cluster`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` stacks`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` clone`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` core-services`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --to`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` dr-cluster`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`ankra`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` cluster`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` stacks`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` clone`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` monitoring`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --to`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` dr-cluster`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`ankra`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` cluster`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` stacks`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` clone`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` ingress`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --to`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` dr-cluster`})]}),`\n`]})})})}),_jsxs(Accordion,{title:`Replicate All Stacks to a New Cluster`,id:`replicate-all-stacks-to-a-new-cluster`,children:[_jsx(_components.p,{children:`In the dashboard:`}),_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`Go to `,_jsx(_components.strong,{children:`Stacks`}),` in your source cluster`]}),`\n`,_jsxs(_components.li,{children:[`Click the `,_jsx(_components.strong,{children:`Clone Stacks`}),` button next to the search bar - all stacks are selected`]}),`\n`,_jsxs(_components.li,{children:[`Click `,_jsx(_components.strong,{children:`Clone to Cluster`}),` in the floating action bar`]}),`\n`,_jsxs(_components.li,{children:[`Choose your target cluster and click `,_jsx(_components.strong,{children:`Clone`})]}),`\n`,_jsx(_components.li,{children:`All stacks are created as drafts on the target - review and deploy each one`}),`\n`]}),_jsx(_components.p,{children:`With the CLI:`}),_jsx(CodeBlock,{filename:``,numberOfLines:`7`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`7`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`ankra`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` cluster`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` select`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` source-cluster`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`ankra`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` cluster`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` stacks`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` list`}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` # note the stack names`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# Clone each stack to the new cluster`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`for`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` stack`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` in`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` monitoring`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` ingress`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` app-data`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`; `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`do`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:` ankra`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` cluster`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` stacks`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` clone`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$stack`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --to`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` new-cluster`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`done`})}),`\n`]})})})]}),_jsx(Accordion,{title:`Sharing a Stack with Another Organisation`,id:`sharing-a-stack-with-another-organisation`,children:_jsxs(_components.p,{children:[`Clone a well-tested stack to a client or partner organisation from the dashboard: select the target organisation in the clone dialog’s `,_jsx(_components.strong,{children:`Target`}),` step. After cloning, Ankra switches you to the target organisation automatically, where the stack’s secrets can be added.`]})})]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`troubleshooting`,children:`Troubleshooting`}),`\n`,_jsxs(AccordionGroup,{children:[_jsxs(Accordion,{title:`Clone Failed: Stack Not Found`,id:`clone-failed-stack-not-found`,children:[_jsx(_components.p,{children:`Ensure the source stack is deployed (not just a draft) and you have the correct stack name:`}),_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`ankra`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` cluster`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` stacks`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` list`})]}),`\n`]})})})]}),_jsx(Accordion,{title:`Clone Failed: Access Denied`,id:`clone-failed-access-denied`,children:_jsx(_components.p,{children:`Verify you have access to both the source and target clusters. You must be a member of both clusters’ organizations.`})}),_jsx(Accordion,{title:`Clone Failed: Target Cluster Unavailable`,id:`clone-failed-target-cluster-unavailable`,children:_jsx(_components.p,{children:`The clone operation only creates a draft in the database - it doesn’t require the target cluster to be online. Check your network connection to the Ankra API.`})}),_jsxs(Accordion,{title:`Missing Resources After Clone`,id:`missing-resources-after-clone`,children:[_jsx(_components.p,{children:`If addons or manifests are missing:`}),_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`Check if the source stack had resources in a `,_jsx(_components.code,{children:`deleting`}),` or `,_jsx(_components.code,{children:`deleted`}),` state`]}),`\n`,_jsxs(_components.li,{children:[`Verify the clone included addon configurations (`,_jsx(_components.code,{children:`--include-config=true`}),`)`]}),`\n`,_jsx(_components.li,{children:`Check the warnings for any resources that couldn’t be cloned`}),`\n`]})]})]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`ai-prompts`,children:`AI Prompts`}),`\n`,_jsxs(_components.p,{children:[`Press `,_jsx(_components.code,{children:`Cmd+J`}),` to open the AI Assistant and use these prompts:`]}),`\n`,_jsxs(AccordionGroup,{children:[_jsx(Accordion,{title:`Clone Stack`,id:`clone-stack`,children:_jsx(CodeBlock,{numberOfLines:`2`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`2`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Clone the monitoring stack to my production cluster`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})})}),_jsx(Accordion,{title:`Duplicate and Modify`,id:`duplicate-and-modify`,children:_jsx(CodeBlock,{numberOfLines:`2`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`2`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Clone the ingress stack from staging to production and rename it to prod-ingress`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})})}),_jsx(Accordion,{title:`Replicate to Multiple Clusters`,id:`replicate-to-multiple-clusters`,children:_jsx(CodeBlock,{numberOfLines:`2`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`2`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Help me clone my observability stack to all my clusters`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})})})]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`next-steps`,children:`Next Steps`}),`\n`,_jsxs(CardGroup,{cols:2,children:[_jsx(Card,{title:`SOPS Encryption`,icon:`lock`,href:`/guides/sops`,children:_jsx(_components.p,{children:`Learn how to encrypt secrets in your stacks.`})}),_jsx(Card,{title:`GitOps Sync`,icon:`git-alt`,href:`/concepts/gitops`,children:_jsx(_components.p,{children:`Sync your stack configurations to a Git repository.`})}),_jsx(Card,{title:`Ankra CLI`,icon:`terminal`,href:`/integrations/ankra-cli`,children:_jsx(_components.p,{children:`Learn more CLI commands for stack management.`})})]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{CliVersion,default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Clone Stacks Between Clusters \u0026 Organisations","description":"Learn how to clone one or multiple stacks from one cluster to another - including across organisations - for consistent deployments across environments","href":"/guides/clone-stack"}}},"mdxSourceWithNoJs":null,"noJsSplices":[[146,2060,")=>null;function _cr"]]},"mdxExtracts":{"tableOfContents":[{"title":"Overview","slug":"overview","depth":2,"children":[]},{"title":"Prerequisites","slug":"prerequisites","depth":2,"children":[]},{"title":"Clone Using the Dashboard","slug":"clone-using-the-dashboard","depth":2,"children":[]},{"title":"Clone Multiple Stacks at Once","slug":"clone-multiple-stacks-at-once","depth":2,"children":[]},{"title":"Clone Using the CLI","slug":"clone-using-the-cli","depth":2,"children":[{"title":"Basic Usage","slug":"basic-usage","depth":3,"children":[]},{"title":"Command Options","slug":"command-options","depth":3,"children":[]},{"title":"Examples","slug":"examples","depth":3,"children":[]},{"title":"CLI Output","slug":"cli-output","depth":3,"children":[]}]},{"title":"What Gets Cloned","slug":"what-gets-cloned","depth":2,"children":[{"title":"Pre-checks in the warnings","slug":"pre-checks-in-the-warnings","depth":3,"children":[]}]},{"title":"Cloning Between Organisations","slug":"cloning-between-organisations","depth":2,"children":[{"title":"How it works","slug":"how-it-works","depth":3,"children":[]},{"title":"What to keep in mind","slug":"what-to-keep-in-mind","depth":3,"children":[]}]},{"title":"Handling Encrypted Values","slug":"handling-encrypted-values","depth":2,"children":[]},{"title":"Common Workflows","slug":"common-workflows","depth":2,"children":[]},{"title":"Troubleshooting","slug":"troubleshooting","depth":2,"children":[]},{"title":"AI Prompts","slug":"ai-prompts","depth":2,"children":[]},{"title":"Next Steps","slug":"next-steps","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"dynamicCss":".mint-aspect-video {\n aspect-ratio: 16 / 9\n}\n.mint-w-full {\n width: 100%\n}\n.mint-rounded-xl {\n border-radius: 0.75rem\n}","subdomain":"ankra","siteName":"Ankra","title":"Clone Stacks Between Clusters \u0026 Organisations - Ankra","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-31T04:17:16.727Z","originalFileLocation":"guides/clone-stack.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Learn how to clone one or multiple stacks from one cluster to another - including across organisations - for consistent deployments across environments\">\u003cmeta data-mint-head name=\"application-name\" content=\"Ankra\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/ankra/POmNwpWKiefNAN49/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/ankra/POmNwpWKiefNAN49/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/ankra/POmNwpWKiefNAN49/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/ankra/POmNwpWKiefNAN49/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/ankra/POmNwpWKiefNAN49/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/ankra/POmNwpWKiefNAN49/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/ankra/POmNwpWKiefNAN49/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/ankra/POmNwpWKiefNAN49/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/ankra/POmNwpWKiefNAN49/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Clone Stacks Between Clusters \u0026amp; Organisations - Ankra\">\u003cmeta data-mint-head property=\"og:description\" content=\"Learn how to clone one or multiple stacks from one cluster to another - including across organisations - for consistent deployments across environments\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Ankra\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.ankra.ai/guides/clone-stack\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://ankra.mintlify.app/_mintlify/api/og/v2?division=Stacks+and+Add-ons\u0026amp;title=Clone+Stacks+Between+Clusters+%26+Organisations\u0026amp;description=Learn+how+to+clone+one+or+multiple+stacks+from+one+cluster+to+another+-+including+across+organisations+-+for+consistent+deployments+across+environments\u0026amp;theme=ef4c4736068bff3e3be2924d\u0026amp;signature=6e68c52295227f1420a336ab6d086224481e23ecb3a84a551b7ed6684375ee5a\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Clone Stacks Between Clusters \u0026amp; Organisations - Ankra\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Learn how to clone one or multiple stacks from one cluster to another - including across organisations - for consistent deployments across environments\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://ankra.mintlify.app/_mintlify/api/og/v2?division=Stacks+and+Add-ons\u0026amp;title=Clone+Stacks+Between+Clusters+%26+Organisations\u0026amp;description=Learn+how+to+clone+one+or+multiple+stacks+from+one+cluster+to+another+-+including+across+organisations+-+for+consistent+deployments+across+environments\u0026amp;theme=ef4c4736068bff3e3be2924d\u0026amp;signature=6e68c52295227f1420a336ab6d086224481e23ecb3a84a551b7ed6684375ee5a\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/ankra/POmNwpWKiefNAN49/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Ankra\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#5d64ff\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.ankra.ai/guides/clone-stack\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/guides/clone-stack.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.ankra.ai/#organization\",\"name\":\"Ankra\",\"url\":\"https://docs.ankra.ai\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/ankra/uW749bPYey14eJsU/logo/light.svg?fit=max\u0026auto=format\u0026n=uW749bPYey14eJsU\u0026q=85\u0026s=7f48236f76559638a5a154da424c91d6\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.ankra.ai#website\",\"name\":\"Ankra\",\"url\":\"https://docs.ankra.ai\",\"publisher\":{\"@id\":\"https://docs.ankra.ai/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.ankra.ai/guides/clone-stack#webpage\",\"url\":\"https://docs.ankra.ai/guides/clone-stack\",\"name\":\"Clone Stacks Between Clusters \u0026 Organisations\",\"description\":\"Learn how to clone one or multiple stacks from one cluster to another - including across organisations - for consistent deployments across environments\",\"dateModified\":\"2026-10-31T04:17:16.727Z\",\"isPartOf\":{\"@id\":\"https://docs.ankra.ai#website\"},\"breadcrumb\":{\"@id\":\"https://docs.ankra.ai/guides/clone-stack#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.ankra.ai/guides/clone-stack#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Stacks and Add-ons\",\"item\":\"https://docs.ankra.ai/guides/monitoring-stack\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Clone Stacks Between Clusters \u0026 Organisations\",\"item\":\"https://docs.ankra.ai/guides/clone-stack\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.ankra.ai/guides/clone-stack#article\",\"headline\":\"Clone Stacks Between Clusters \u0026 Organisations\",\"name\":\"Clone Stacks Between Clusters \u0026 Organisations\",\"description\":\"Learn how to clone one or multiple stacks from one cluster to another - including across organisations - for consistent deployments across environments\",\"url\":\"https://docs.ankra.ai/guides/clone-stack\",\"mainEntityOfPage\":{\"@id\":\"https://docs.ankra.ai/guides/clone-stack#webpage\"},\"dateModified\":\"2026-10-31T04:17:16.727Z\",\"publisher\":{\"@id\":\"https://docs.ankra.ai/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.ankra.ai#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Ankra\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Ankra","nav":{"global":{"anchors":[{"anchor":"Community","icon":"slack","href":"https://join.slack.com/t/ankra-community/shared_invite/zt-3a5rem8f8-cUho4epX2MoLT83bFf~VSA"},{"anchor":"Youtube","icon":"youtube","href":"https://www.youtube.com/@ankraio"},{"anchor":"Blog","icon":"newspaper","href":"https://www.ankra.ai/blog"}]},"tabs":[{"tab":"Documentation","icon":"book","groups":[{"group":"Get Started","pages":[{"title":"Introduction","href":""},{"title":"Quickstart","href":"/get-started/quickstart"},{"title":"Guided Setup","href":"/get-started/guided-setup"},{"title":"Get started with Ankra CI","sidebarTitle":"Get started with Ankra CI","href":"/get-started/ankra-ci"},{"title":"Add a Cluster","href":"/guides/import-cluster"},{"title":"Playground","href":"/guides/cluster-sandbox"}]},{"group":"Use Cases","pages":[{"title":"Production Multi-Cluster Platform","href":"/use-cases/production-multi-cluster-platform"},{"title":"Prompt to Production","href":"/use-cases/prompt-to-production"},{"title":"Lovable to Ankra","href":"/use-cases/lovable-to-ankra"},{"title":"Vercel to Ankra","href":"/use-cases/vercel-to-ankra"},{"title":"Claude Code to Two Clusters","href":"/use-cases/claude-code-to-two-clusters"},{"title":"Speed Up CI","href":"/use-cases/speed-up-ci"},{"title":"Self-host an AI agent observability backend on-prem","href":"/use-cases/self-host-ai-agent-observability"}]},{"group":"Concepts","pages":[{"title":"How Ankra Works","href":"/concepts/how-ankra-works"},{"title":"Organisations \u0026 User Management","href":"/concepts/organisations"},{"title":"Projects","href":"/concepts/projects"},{"title":"Ankra Agent","href":"/concepts/cluster-agent"},{"title":"GitOps","href":"/concepts/gitops"},{"title":"Stacks","href":"/concepts/stacks"},{"title":"Add-ons","href":"/concepts/addons"},{"title":"Variables","href":"/concepts/variables"},{"title":"Deployment Engines","href":"/concepts/deployment-engines"},{"title":"Stack Profiles, Reusable Kubernetes Stack Templates","sidebarTitle":"Stack Profiles","href":"/concepts/stack-profiles"},{"title":"Applications","href":"/concepts/applications"},{"title":"Backup Vaults","href":"/concepts/backup-vaults"}]},{"group":"Create and Run Clusters","pages":[{"group":"Ankra Managed","pages":[{"title":"Hetzner Clusters","href":"/guides/hetzner-clusters"},{"title":"OVH Clusters","href":"/guides/ovh-clusters"},{"title":"UpCloud Clusters","href":"/guides/upcloud-clusters"},{"title":"DigitalOcean Clusters","href":"/guides/digitalocean-clusters"},{"title":"Scaleway Clusters","tag":"Closed Beta","href":"/guides/scaleway-clusters"},{"title":"AWS Clusters","icon":"aws","href":"/guides/aws-clusters"},{"title":"Ankra Cloud Clusters","icon":"cloud","tag":"Closed Beta","href":"/guides/ankra-cloud-clusters"},{"title":"Proxmox VE Clusters","href":"/guides/proxmox-clusters"},{"title":"Persistent Volumes on Proxmox VE Clusters","icon":"hard-drive","href":"/guides/proxmox-persistent-volumes"},{"title":"Morpheus Clusters","tag":"Closed Beta","href":"/guides/morpheus-clusters"},{"title":"Operate an Ankra Managed Cluster","href":"/guides/operate-ankra-managed-clusters"},{"title":"Cluster Autoscaling","href":"/guides/cluster-autoscaling"},{"title":"Node Group Cloud-init User Data","href":"/guides/node-group-user-data"}]},{"group":"Cloud Managed","pages":[{"title":"Managed Kubernetes","href":"/guides/managed-kubernetes"},{"title":"DigitalOcean Kubernetes (DOKS)","icon":"digital-ocean","href":"/guides/doks-clusters"},{"title":"UpCloud Kubernetes (UKS)","icon":"cloud","href":"/guides/uks-clusters"},{"title":"Google Kubernetes Engine (GKE)","icon":"google","href":"/guides/gke-clusters"},{"title":"OVHcloud Managed Kubernetes (MKS)","icon":"cloud","href":"/guides/ovh-mks-clusters"},{"title":"Azure Kubernetes Service (AKS)","icon":"microsoft","href":"/guides/aks-clusters"},{"title":"Amazon EKS","icon":"aws","href":"/guides/eks-clusters"},{"title":"Ankra Cloud Kubernetes","icon":"cloud","tag":"Closed Beta","href":"/guides/ankra-cloud-kubernetes"}]},{"group":"Operate","pages":[{"title":"Cluster Settings","href":"/platform/cluster-settings"},{"title":"Nodes","href":"/platform/cluster-nodes"},{"title":"Stop, Start and Power Schedules","href":"/platform/cluster-power-schedules"},{"title":"Upgrade Kubernetes on a Cluster","href":"/guides/kubernetes-upgrades"},{"title":"Clone a Cluster","href":"/guides/clone-cluster"},{"title":"Cluster Mesh","href":"/platform/cluster-mesh"},{"title":"Verify a Cluster Mesh","href":"/guides/cluster-mesh-verification"}]},{"title":"Run Kubernetes Locally","href":"/guides/minikube"},{"title":"Talos Linux Clusters","sidebarTitle":"Talos Linux","href":"/guides/talos-clusters"}]},{"group":"Ship Your App","pages":[{"title":"Ship Your App","sidebarTitle":"Pick a Route","href":"/guides/deliver-your-app"},{"group":"Applications","pages":[{"title":"Environments and Branch Rules","sidebarTitle":"Environments and Branch Rules","href":"/guides/application-environments"},{"title":"Application CI/CD","href":"/guides/cicd-pipeline"},{"title":"Harbor as your application registry","href":"/guides/harbor-registry"},{"title":"From Claude Design to a live application","href":"/guides/claude-design-to-ankra"}]},{"group":"Managed Services","pages":[{"title":"Managed Services","tag":"Closed Beta","href":"/concepts/managed-services"},{"title":"Set Up a Managed Service","tag":"Closed Beta","href":"/guides/set-up-a-managed-service"},{"title":"Connect to a Managed Service","tag":"Closed Beta","href":"/guides/connect-to-a-managed-service"},{"title":"Delete a Managed Service","tag":"Closed Beta","href":"/guides/delete-a-managed-service"},{"title":"Managed Service Settings","tag":"Closed Beta","href":"/reference/managed-services"}]},{"group":"Previews","pages":[{"title":"PR Preview Environments","href":"/guides/pr-preview-environments"},{"title":"Branch Demos","href":"/guides/branch-demos"},{"title":"Stack Profile Demos","href":"/guides/stack-profile-demos"}]},{"group":"Bring Your Own CI","pages":[{"title":"GitLab CI/CD Pipeline","href":"/guides/gitlab-cicd-pipeline"},{"title":"Use the ankra CLI in CI","href":"/guides/pipeline-agents"}]},{"group":"Move From Docker","pages":[{"title":"Move a Docker Deployment Into a Cluster","href":"/guides/migrate-from-docker"},{"title":"Write an ankra migrate Module","href":"/guides/migrate-modules"}]}]},{"group":"Ankra Pipelines","pages":[{"title":"Ankra Pipelines","sidebarTitle":"Overview","href":"/pipelines/overview"},{"title":"Why Ankra Pipelines","sidebarTitle":"Why Ankra Pipelines","href":"/pipelines/why-ankra-pipelines"},{"title":"How Ankra Pipelines works","sidebarTitle":"How it works","href":"/pipelines/how-it-works"},{"title":"Generated pipelines","sidebarTitle":"Generated pipelines","href":"/pipelines/generated-pipelines"},{"title":"Pipeline examples","sidebarTitle":"Examples","href":"/pipelines/examples"},{"group":"Speed","pages":[{"title":"Fast CI","sidebarTitle":"Fast CI","href":"/pipelines/fast-ci"},{"title":"Pipeline caching","sidebarTitle":"Caching","href":"/pipelines/caching"},{"title":"The merge train","sidebarTitle":"Merge train","href":"/pipelines/merge-train"}]},{"group":"AI","pages":[{"title":"AI in pull requests","sidebarTitle":"AI in pull requests","href":"/pipelines/ai-in-pull-requests"},{"title":"AI Gateway","sidebarTitle":"AI Gateway","href":"/pipelines/ai-gateway"},{"title":"Pipelines with Claude Code, Codex and the Claude app","sidebarTitle":"With coding agents","href":"/pipelines/coding-agents"}]},{"title":"Pipelines from the CLI and MCP","sidebarTitle":"CLI and MCP","href":"/pipelines/cli-and-mcp"},{"group":"Set Up and Operate","pages":[{"title":"Ankra Pipelines","href":"/guides/ankra-pipelines"},{"title":"Ankra CI starter pipelines","sidebarTitle":"Starter pipelines","href":"/guides/ankra-ci-starter-pipelines"},{"title":"Build a Bazel Repository with Ankra Pipelines","sidebarTitle":"Bazel","href":"/guides/bazel-pipelines"},{"title":"Move a team to Ankra CI","sidebarTitle":"Move a team to Ankra CI","href":"/guides/move-to-ankra-ci"},{"title":"Migrate from GitHub Actions","href":"/guides/migrate-from-github-actions"},{"title":"Run tests and lint in Ankra Workspaces","sidebarTitle":"Workspaces","href":"/guides/ankra-workspaces"},{"title":"Ankra CI troubleshooting","sidebarTitle":"Troubleshooting","href":"/guides/ankra-ci-troubleshooting"}]},{"title":"pipeline.yaml reference","href":"/guides/pipeline-reference"}]},{"group":"Stacks and Add-ons","pages":[{"title":"Build a Monitoring Stack","href":"/guides/monitoring-stack"},{"title":"Build a Cloudflare Stack","href":"/guides/cloudflare-tunnel"},{"title":"Use Avura domains with Ankra","description":"Connect an Avura workspace to its Ankra organisation, choose which Avura domains Ankra may use, then publish cluster hostnames, manage records and root generated cluster domains on those domains.","href":"/guides/avura-domains"},{"title":"Clone Stacks Between Clusters \u0026 Organisations","href":"/guides/clone-stack"},{"title":"Protect Persistent Data Before Changing a Stack","description":"Removing or renaming a Stack manifest deletes its objects, PersistentVolumeClaims included, and a Delete reclaim policy destroys the disk too. Check and fix this before you change the Stack.","href":"/guides/protect-persistent-data"},{"title":"Stack Profile Suggestions","href":"/guides/stack-profile-suggestions"},{"group":"Add-on Catalog","pages":[{"title":"Add-on Catalog","href":"/platform/addon-catalog"},{"title":"Helm Registries","sidebarTitle":"Connect a Helm Registry","href":"/guides/registries"},{"title":"Helm Registries","sidebarTitle":"Helm Registry Providers","href":"/integrations/helm-registries"},{"title":"Create a Registry","href":"/guides/create-a-registry"},{"title":"Publishing Add-ons","href":"/platform/addon-publishing"},{"title":"Publishing Applications as Add-ons","href":"/platform/application-addons"}]}]},{"group":"Observe and Troubleshoot","pages":[{"title":"Dashboard","href":"/platform/dashboard"},{"title":"Activity \u0026 Inbox","href":"/platform/activity-inbox"},{"title":"Find out why a deploy failed and retry it","sidebarTitle":"Operations","href":"/platform/operations"},{"title":"Cluster Metrics","href":"/platform/cluster-metrics"},{"title":"Prometheus","href":"/integrations/prometheus"},{"title":"Logs","href":"/platform/logs"},{"title":"Ankra Hosted Logs","href":"/guides/hosted-logs"},{"title":"Log Sources","href":"/integrations/log-sources"},{"group":"Kubernetes Resources","pages":[{"title":"Kubernetes Resources","sidebarTitle":"Overview","href":"/platform/kubernetes-insights"},{"title":"Kubernetes Nodes","href":"/platform/kubernetes-nodes"},{"title":"Pod Terminal for Kubernetes in Your Browser","sidebarTitle":"Pod Terminal","href":"/platform/pod-terminal"},{"title":"Debug Pods","href":"/platform/debug-pods"}]},{"group":"Alerts and Notifications","pages":[{"title":"Alerts","href":"/guides/alerts"},{"title":"Notification routing","href":"/guides/notification-routing"},{"title":"Webhooks","href":"/guides/webhooks"},{"title":"Alert on Manifest Failures","href":"/guides/webhook-integrations"},{"title":"Mobile push notifications","href":"/guides/mobile-push"}]}]},{"group":"Ankra AI","pages":[{"title":"Ankra AI","sidebarTitle":"Overview","href":"/platform/ai-overview"},{"group":"Use It","pages":[{"title":"Guided Setup","href":"/platform/ai-guided-setup"},{"title":"AI Assistant","href":"/platform/ai-assistant"},{"title":"AI Insights","href":"/platform/ai-insights"}]},{"group":"Agents and Board","pages":[{"title":"AI Agents","href":"/platform/ai-agents"},{"title":"AI Board","href":"/platform/ai-board"},{"title":"Work the AI Board with Your Own Agent","href":"/guides/board-own-agent"},{"title":"AI Automations","href":"/platform/ai-automations"},{"title":"AI Autonomy","href":"/platform/ai-autonomy"},{"title":"Sync Board Tickets to Jira, Linear, or a Webhook","href":"/guides/ticket-sync"},{"title":"AI Workspaces","href":"/platform/ai-workspaces"}]},{"group":"Code Review","pages":[{"title":"AI Code Review","href":"/platform/ai-code-review"},{"title":"Cross-Repository Review","href":"/platform/ai-code-review-cross-repo"},{"title":"Application AI Settings","href":"/platform/application-ai"},{"title":"Teach Your Agents with AGENTS.md","href":"/platform/agents-md"}]},{"group":"Configure","pages":[{"title":"Models and Cost","href":"/platform/ai-provider"},{"title":"Bring Your Own OpenRouter API Key","href":"/guides/openrouter-api-key"},{"title":"AI Connections","href":"/platform/ai-connections"},{"title":"AI Skills and Custom Tools","href":"/platform/ai-skills"},{"title":"AI Memory and Feedback","href":"/platform/ai-memory"}]}]},{"group":"Connect Tools","pages":[{"title":"Ankra CLI","href":"/integrations/ankra-cli"},{"title":"MCP Server","href":"/platform/mcp-server"},{"title":"MCP Tool Reference","href":"/platform/mcp-tools"},{"title":"Agent Skills","href":"/integrations/agent-skills"},{"title":"Agent Skills Catalogue","href":"/integrations/agent-skills-catalogue"},{"title":"OpenClaw","href":"/integrations/openclaw"},{"title":"Ankra Terraform Provider","href":"/integrations/terraform"}]},{"group":"Source Control","pages":[{"title":"Git Providers","href":"/integrations/git-providers"},{"title":"GitHub Integration","href":"/integrations/github"},{"title":"GitLab Integration","href":"/integrations/gitlab"},{"title":"Bitbucket Cloud Integration","href":"/integrations/bitbucket-cloud"}]},{"group":"Security and Access","pages":[{"title":"What Ankra Can See and Do","sidebarTitle":"Security overview","href":"/security/overview"},{"title":"Cluster Security","href":"/guides/cluster-security"},{"title":"Security Reports","href":"/guides/security-reports"},{"group":"Access","pages":[{"title":"Identity \u0026 Access Controls","href":"/security/identity-and-access"},{"title":"Single Sign-On","href":"/guides/single-sign-on"},{"title":"Roles \u0026 Access","href":"/guides/roles-and-access"},{"title":"Private access for proxied domains","href":"/guides/private-proxied-domains"},{"title":"Account Security \u0026 2FA","href":"/platform/account-security"},{"title":"Service Tokens","href":"/guides/service-tokens"},{"title":"API Tokens","href":"/reference/tokens"},{"title":"Cluster Access","href":"/guides/cluster-access"},{"title":"Accessing Clusters with kubectl","href":"/guides/kubeconfig"}]},{"group":"Hardening","pages":[{"title":"Cluster Hardening","href":"/security/hardening"},{"title":"Hardening the Agent","href":"/security/agent-hardening"},{"title":"Verified Provenance at Deploy","href":"/security/deploy-provenance"},{"title":"SOPS Encryption","href":"/guides/sops"}]},{"group":"Compliance and Audit","pages":[{"title":"Shared Responsibility","href":"/security/shared-responsibility"},{"title":"Compliance Management","href":"/security/compliance-management"},{"title":"Change Management","href":"/security/change-management"},{"title":"Audit Log","href":"/guides/audit-log"},{"title":"Audit Export","href":"/security/audit-export"},{"title":"Agent Compliance Posture","href":"/security/agent-compliance"}]}]},{"group":"Cost and Backups","pages":[{"title":"Cloud Cost","href":"/platform/cloud-cost"},{"title":"Backups and Restore Points","href":"/guides/backups"}]},{"group":"Organisation and Account","pages":[{"title":"Organisation Settings","href":"/platform/organisation-settings"},{"group":"Credentials","pages":[{"title":"Credentials","href":"/platform/credentials"},{"title":"Git Credentials","icon":"code-branch","href":"/platform/credentials/git"},{"title":"Registry Credentials","icon":"box","href":"/platform/credentials/registry"},{"title":"Hetzner API Credentials","icon":"cloud","href":"/platform/credentials/hetzner"},{"title":"OVH API Credentials","icon":"cloud","href":"/platform/credentials/ovh"},{"title":"UpCloud API Credentials","icon":"cloud","href":"/platform/credentials/upcloud"},{"title":"DigitalOcean API Credentials","icon":"digital-ocean","href":"/platform/credentials/digitalocean"},{"title":"Scaleway Credentials","icon":"cloud","tag":"Closed Beta","href":"/platform/credentials/scaleway"},{"title":"AWS Credentials","icon":"aws","href":"/platform/credentials/aws"},{"title":"Google Cloud (GCP) Credentials","icon":"google","href":"/platform/credentials/gcp"},{"title":"Azure Credentials","icon":"microsoft","href":"/platform/credentials/azure"},{"title":"Proxmox VE API Credentials","icon":"server","href":"/platform/credentials/proxmox"},{"title":"Morpheus API Credentials","icon":"server","tag":"Closed Beta","href":"/platform/credentials/morpheus"},{"title":"Ankra Cloud Credentials","icon":"cloud","tag":"Closed Beta","href":"/platform/credentials/ankra-cloud"},{"title":"SSH Key Credentials","icon":"lock","href":"/platform/credentials/ssh-key"}]},{"title":"Billing \u0026 Usage","href":"/platform/billing"},{"title":"Usage","href":"/platform/usage"},{"title":"User Profile","href":"/platform/user-profile"},{"title":"Command Palette","href":"/platform/command-palette"},{"title":"Keyboard Shortcuts","href":"/platform/keyboard-shortcuts"},{"title":"Support","href":"/platform/support"}]},{"group":"Reference","pages":[{"group":"CLI","pages":[{"title":"CLI Command Reference","href":"/reference/cli/index"},{"title":"ankra agents","href":"/reference/cli/agents"},{"title":"ankra ai","href":"/reference/cli/ai"},{"title":"ankra alerts","href":"/reference/cli/alerts"},{"title":"ankra application","href":"/reference/cli/application"},{"title":"ankra backup","href":"/reference/cli/backup"},{"title":"ankra bucket","href":"/reference/cli/bucket"},{"title":"ankra canvas","href":"/reference/cli/canvas"},{"title":"ankra charts","href":"/reference/cli/charts"},{"title":"ankra chat","href":"/reference/cli/chat"},{"title":"ankra cluster","href":"/reference/cli/cluster"},{"title":"ankra completion","href":"/reference/cli/completion"},{"title":"ankra config","href":"/reference/cli/config"},{"title":"ankra cost","href":"/reference/cli/cost"},{"title":"ankra credentials","href":"/reference/cli/credentials"},{"title":"ankra delete","href":"/reference/cli/delete"},{"title":"ankra deployments","href":"/reference/cli/deployments"},{"title":"ankra dev","href":"/reference/cli/dev"},{"title":"ankra exec","href":"/reference/cli/exec"},{"title":"ankra helm","href":"/reference/cli/helm"},{"title":"ankra login","href":"/reference/cli/login"},{"title":"ankra logout","href":"/reference/cli/logout"},{"title":"ankra migrate","href":"/reference/cli/migrate"},{"title":"ankra openclaw","href":"/reference/cli/openclaw"},{"title":"ankra org","href":"/reference/cli/org"},{"title":"ankra pipeline","href":"/reference/cli/pipeline"},{"title":"ankra plugins","href":"/reference/cli/plugins"},{"title":"ankra profile","href":"/reference/cli/profile"},{"title":"ankra project","href":"/reference/cli/project"},{"title":"ankra registry","href":"/reference/cli/registry"},{"title":"ankra runs","href":"/reference/cli/runs"},{"title":"ankra secrets","href":"/reference/cli/secrets"},{"title":"ankra security","href":"/reference/cli/security"},{"title":"ankra services","href":"/reference/cli/services"},{"title":"ankra skills","href":"/reference/cli/skills"},{"title":"ankra stack-profiles","href":"/reference/cli/stack-profiles"},{"title":"ankra support","href":"/reference/cli/support"},{"title":"ankra targets","href":"/reference/cli/targets"},{"title":"ankra tickets","href":"/reference/cli/tickets"},{"title":"ankra tokens","href":"/reference/cli/tokens"},{"title":"ankra upgrade","href":"/reference/cli/upgrade"},{"title":"ankra workspace","href":"/reference/cli/workspace"}]},{"title":"ImportCluster YAML Schema","href":"/reference/importcluster"},{"title":"ankra.yaml reference","href":"/reference/application-descriptor"},{"title":"Agent Helm Values","href":"/reference/agent-helm-values"},{"title":"Add-on Settings","href":"/concepts/addon-settings"},{"title":"Cost API fields","href":"/reference/cost-api"},{"title":"Portal URLs","href":"/platform/portal-urls"},{"title":"Portal Links","href":"/reference/portal-links"},{"group":"Providers","pages":[{"title":"Hetzner Reference","href":"/reference/hetzner"},{"title":"OVH Reference","href":"/reference/ovh"},{"title":"UpCloud Reference","href":"/reference/upcloud"},{"title":"DigitalOcean Reference","href":"/reference/digitalocean"},{"title":"AWS Reference","href":"/reference/aws"},{"title":"Proxmox VE Reference","href":"/reference/proxmox"},{"title":"Morpheus Reference","tag":"Closed Beta","href":"/reference/morpheus"},{"title":"Managed Kubernetes Reference","href":"/reference/managed-kubernetes"}]}]}]},{"tab":"API Reference","icon":"terminal","pages":[{"title":"API Reference","href":"/api-reference/introduction"}]},{"tab":"Changelog","icon":"clock-rotate-left","pages":[{"title":"Changelog","href":"/changelog"}]}]},"basePath":"","title":"Clone Stacks Between Clusters \u0026 Organisations - Ankra","buildId":"dpl_G9nrg4qeJSZtah1Ziwbc2n6WkLch","deploymentId":"dpl_G9nrg4qeJSZtah1Ziwbc2n6WkLch","dynamics":["07c022d89b"],"chunks":["Frame-Bpq2Z6jK.js","DynamicMarkdown-D5M2At0B.js"]}