Quick-reference Ansible commands for Orka-based Citrix VDI: connectivity tests, Orka Engine checks, VM lifecycle, VDA management, and image operations.
Run these commands from the root of your orka-engine-orchestration clone. They use -i dev/inventory, the inventory next to dev/group_vars, so Ansible loads the variables you set there.
Set network_interface to the host’s network interface, for example en0, for bridged networking. Without it, the VM uses NAT, and Citrix Cloud and end users can’t reach it.
Deleting VMs matches names by prefix.delete.yml, and vm.yml with desired_state=absent, delete every VM whose name starts with the vm_name you pass, not only the VM with that exact name. For example, vm_name=citrix-vda-finance deletes every VM in that group. Before you delete, run list.yml and make sure no VM you want to keep has a name that starts with the value you’re passing.
Pass network_interface every time you start a VM, including when vm.yml starts a whole prefix group. Orka Engine doesn’t save the network interface with the VM, so a VM started without it comes up on NAT, where Citrix Cloud and end users can’t reach it.
# All AVDs across all hostsansible-playbook -i dev/inventory list_avds.yml# Filter by VMansible-playbook -i dev/inventory list_avds.yml -e "vm_name=my-vm"
list.yml, vm.yml, and delete.yml match VM names by prefix, so give related VMs a shared name prefix, and don’t give a VM a name that is the start of another VM’s name. Use clear, descriptive names:
dev-desktop-01, dev-desktop-02
prod-build-runner-01, prod-build-runner-02
ci-macOS-sonoma
AVDs are named automatically based on the VM: {vm_name}-avd-0, {vm_name}-avd-1, etc.
Playbooks that build a plan or list results on the Ansible control node, such as deploy.yml, delete.yml, and list.yml, also need localhost in the limit: --limit mac-node-1,localhost.
The orchestration modules that query Orka Engine don’t support Ansible check mode, so --check fails. To preview changes, run deploy.yml, delete.yml, deploy_avd.yml, delete_avd.yml, or avd.yml with --tags plan:
ansible-playbook -i dev/inventory deploy.yml -e "vm_name=my-vm" --tags plan
The plays in create_image.yml that deploy the image-host build VM and add it to the inventory aren’t tagged, so --tags configure or --tags push on their own match no hosts and do nothing. To keep the build VM running after the image is pushed, skip the delete step instead:
Project README: Check your repository’s README.md for architecture details
Was this page helpful?
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"MacStadium Docs","description":"Documentation for MacStadium's Apple infrastructure: Orka macOS virtualization for CI/CD, bare metal Mac hosting, MacStadium VDI, and account, billing, and support guides.","colors":{"primary":"#FE9000","light":"#FE9000","dark":"#323151"},"logo":{"light":"https://mintcdn.com/macstadiuminc/qJnYHjjgtjKQ73n9/logo/light.png?fit=max\u0026auto=format\u0026n=qJnYHjjgtjKQ73n9\u0026q=85\u0026s=8095707b80300088ba5f7c1cd8363d18","dark":"https://mintcdn.com/macstadiuminc/qJnYHjjgtjKQ73n9/logo/dark.png?fit=max\u0026auto=format\u0026n=qJnYHjjgtjKQ73n9\u0026q=85\u0026s=a7103488c2b17f28a81966f51e8e7e46"},"favicon":"https://mintcdn.com/macstadiuminc/OBF0bbLSkBRXQGQP/favicon.png?fit=max\u0026auto=format\u0026n=OBF0bbLSkBRXQGQP\u0026q=85\u0026s=f810953a4ccb3af9a5d809d6eba89505","seo":{"metatags":{"google-site-verification":"OeKTGa7HvmEnL1jtMDksZEYQg1LGTk97_JlFSE5nxF4"}},"integrations":{"ga4":{"measurementId":"G-LW571X03HJ"},"telemetry":{"enabled":true}},"banner":{"content":"Welcome to the new MacStadium Documentation site. We've migrated from support.macstadium.com, you're in the right place.","dismissible":true},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"macstadiuminc","hasAudioNarration":false,"actualSubdomain":"macstadiuminc","customDomains":["docs.macstadium.com"],"gitSource":{"type":"github","owner":"macstadium","repo":"macstadium-docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6ae10cd3cc5d3160cbaf2023","collectionId":"6c0a90bc-28a9-4f11-97dd-b3c3a3c0c3df","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ae10cd3cc5d3160cbaf2023"},"feedback":{"edits":false,"issues":false,"agentFeedback":true,"thumbs":true},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6ae20c4360416b77ca6b965b","clientVersion":"0.0.3990","searchFilterCounts":[{"language":"default","tag":"Orka","count":100},{"language":"default","tag":"IaaS","count":59},{"language":"default","tag":"Networking","count":52},{"language":"default","tag":"MacStadium VDI","count":40},{"language":"default","tag":"MacStadium","count":25},{"language":"default","tag":"Connecting to Other Clouds","count":18},{"language":"default","tag":"Cisco Firewalls","count":17},{"language":"default","tag":"Overview","count":12},{"language":"default","tag":"CLI Reference","count":12},{"language":"default","tag":"Resources","count":12}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":true,"enableContextualStarterQuestions":true,"enableAskAiSearchBar":true,"deflection":{"enabled":true,"email":"support@macstadium.com","showHelpButton":true}},"basePath":"","hasChatPermissions":true,"hasWebMcpPermissions":true,"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":"editor-v7-file-tree","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":"pause-universal-search-reconcile","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":"per-site-search-delta","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":"editor-private-page-search","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":"editor-nav-generations","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":"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":"editor-agent-model-picker","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":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"isAtlas":false,"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"remote-desktop-vdi/reference/ansible-quick-reference","slug":"/remote-desktop-vdi/reference/ansible-quick-reference","pageMetadata":{"title":"Ansible quick reference","description":"Quick-reference Ansible commands for Orka-based Citrix VDI: connectivity tests, Orka Engine checks, VM lifecycle, VDA management, and image operations.","zendesk_id":44260146530715,"keywords":["Ansible commands","playbook quick reference","Orka CLI","VDI command reference"],"href":"/remote-desktop-vdi/reference/ansible-quick-reference"},"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: \"Quick-reference Ansible commands for Orka-based Citrix VDI: connectivity tests, Orka Engine checks, VM lifecycle, VDA management, and image operations.\"\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];function _createMdxContent(props){const _components={a:`a`,code:`code`,hr:`hr`,li:`li`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,ul:`ul`,..._provideComponents(),...props.components},{CodeBlock,Heading,Warning}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsxs(_components.p,{children:[`Run these commands from the root of your `,_jsx(_components.code,{children:`orka-engine-orchestration`}),` clone. They use `,_jsx(_components.code,{children:`-i dev/inventory`}),`, the inventory next to `,_jsx(_components.code,{children:`dev/group_vars`}),`, so Ansible loads the variables you set there.`]}),`\n`,_jsx(Heading,{level:`2`,id:`setup-commands`,children:`Setup Commands`}),`\n`,_jsx(Heading,{level:`3`,id:`test-connectivity`,children:`Test Connectivity`}),`\n`,_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:`ansible hosts -i dev/inventory -m ping`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(Heading,{level:`3`,id:`check-orka-engine-status`,children:`Check Orka Engine Status`}),`\n`,_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:`ansible hosts -i dev/inventory -m shell -a \"/usr/local/bin/orka-engine info\"`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(Heading,{level:`3`,id:`verify-python-version`,children:`Verify Python Version`}),`\n`,_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:`ansible hosts -i dev/inventory -m shell -a \"python3 --version\"`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`one-liner-examples`,children:`One-Liner Examples`}),`\n`,_jsx(Heading,{level:`3`,id:`install/upgrade-orka-engine`,children:`Install/Upgrade Orka Engine`}),`\n`,_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:`ansible-playbook -i dev/inventory install_engine.yml -e \"orka_license_key=\u003cORKA_LICENSE_KEY>\" -e \"engine_url=\u003cENGINE_URL>\"`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(Heading,{level:`3`,id:`plan-deployment-dry-run`,children:`Plan Deployment (Dry Run)`}),`\n`,_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:`ansible-playbook -i dev/inventory deploy.yml -e \"vm_name=my-vm\" --tags plan`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(Heading,{level:`3`,id:`deploy-vm`,children:`Deploy VM`}),`\n`,_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:`ansible-playbook -i dev/inventory deploy.yml -e \"vm_name=my-vm\" -e \"vm_image=ghcr.io/macstadium/orka-images/sonoma:latest\" -e \"network_interface=en0\"`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsxs(_components.p,{children:[`Set `,_jsx(_components.code,{children:`network_interface`}),` to the host’s network interface, for example `,_jsx(_components.code,{children:`en0`}),`, for bridged networking. Without it, the VM uses NAT, and Citrix Cloud and end users can’t reach it.`]}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Deleting VMs matches names by prefix.`}),` `,_jsx(_components.code,{children:`delete.yml`}),`, and `,_jsx(_components.code,{children:`vm.yml`}),` with `,_jsx(_components.code,{children:`desired_state=absent`}),`, delete every VM whose name starts with the `,_jsx(_components.code,{children:`vm_name`}),` you pass, not only the VM with that exact name. For example, `,_jsx(_components.code,{children:`vm_name=citrix-vda-finance`}),` deletes every VM in that group. Before you delete, run `,_jsx(_components.code,{children:`list.yml`}),` and make sure no VM you want to keep has a name that starts with the value you’re passing.`]})}),`\n`,_jsx(Heading,{level:`3`,id:`plan-deletion-dry-run`,children:`Plan Deletion (Dry Run)`}),`\n`,_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:`ansible-playbook -i dev/inventory delete.yml -e \"vm_name=my-vm\" --tags plan`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(Heading,{level:`3`,id:`delete-vm`,children:`Delete VM`}),`\n`,_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:`ansible-playbook -i dev/inventory delete.yml -e \"vm_name=my-vm\"`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(Heading,{level:`3`,id:`stop-vm`,children:`Stop VM`}),`\n`,_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:`ansible-playbook -i dev/inventory vm.yml -e \"vm_name=my-vm\" -e \"desired_state=stopped\"`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(Heading,{level:`3`,id:`start-vm`,children:`Start VM`}),`\n`,_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:`ansible-playbook -i dev/inventory vm.yml -e \"vm_name=my-vm\" -e \"desired_state=running\" -e \"network_interface=en0\"`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsxs(_components.p,{children:[`Pass `,_jsx(_components.code,{children:`network_interface`}),` every time you start a VM, including when `,_jsx(_components.code,{children:`vm.yml`}),` starts a whole prefix group. Orka Engine doesn’t save the network interface with the VM, so a VM started without it comes up on NAT, where Citrix Cloud and end users can’t reach it.`]}),`\n`,_jsx(Heading,{level:`3`,id:`delete-vms-by-name-prefix`,children:`Delete VMs by name prefix`}),`\n`,_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:`ansible-playbook -i dev/inventory vm.yml -e \"vm_name=my-vm\" -e \"desired_state=absent\"`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(Heading,{level:`3`,id:`list-all-vms`,children:`List All VMs`}),`\n`,_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:`ansible-playbook -i dev/inventory list.yml`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(Heading,{level:`3`,id:`list-vms-by-name`,children:`List VMs by Name`}),`\n`,_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:`ansible-playbook -i dev/inventory list.yml -e \"vm_name=my-vm\"`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(Heading,{level:`3`,id:`pull-image-to-all-hosts`,children:`Pull Image to All Hosts`}),`\n`,_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:`ansible-playbook -i dev/inventory pull_image.yml -e \"remote_image_name=ghcr.io/macstadium/orka-images/sonoma:latest\"`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(Heading,{level:`3`,id:`create-and-push-custom-image`,children:`Create and Push Custom Image`}),`\n`,_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:`ansible-playbook -i dev/inventory create_image.yml -e \"vm_image=ghcr.io/macstadium/orka-images/sonoma:latest\" -e \"remote_image_name=registry.example.com/custom:v1.0\"`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(Heading,{level:`3`,id:`create-image-with-os-upgrade`,children:`Create Image with OS Upgrade`}),`\n`,_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:`ansible-playbook -i dev/inventory create_image.yml -e \"vm_image=base:latest\" -e \"remote_image_name=registry.example.com/custom:v1.0\" -e \"upgrade_os=true\"`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`android-virtual-devices`,children:`Android Virtual Devices`}),`\n`,_jsx(Heading,{level:`3`,id:`install-android-sdk-on-hosts`,children:`Install Android SDK on Hosts`}),`\n`,_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:`ansible-playbook -i dev/inventory install_android_sdk.yml`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(_components.p,{children:`To force reinstallation on hosts where the SDK is already present:`}),`\n`,_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:`ansible-playbook -i dev/inventory install_android_sdk.yml -e \"install_android_sdk_force=true\"`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(Heading,{level:`3`,id:`install-sdk-platforms-and-system-images`,children:`Install SDK Platforms and System Images`}),`\n`,_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:`ansible-playbook -i dev/inventory sdkmanager_install.yml`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(_components.p,{children:`With a specific platform and image types:`}),`\n`,_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:`ansible-playbook -i dev/inventory sdkmanager_install.yml -e \"platform=android-34\" -e \"image_types=default,google_apis,google_apis_playstore\"`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(Heading,{level:`3`,id:`create-an-avd-plan-first`,children:`Create an AVD (Plan First)`}),`\n`,_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:`ansible-playbook -i dev/inventory deploy_avd.yml -e \"vm_name=my-vm\" --tags plan`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(Heading,{level:`3`,id:`create-an-avd`,children:`Create an AVD`}),`\n`,_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:`ansible-playbook -i dev/inventory deploy_avd.yml -e \"vm_name=my-vm\"`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(_components.p,{children:`With custom platform, image type, and resources:`}),`\n`,_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:`ansible-playbook -i dev/inventory deploy_avd.yml -e \"vm_name=my-vm\" -e \"platform=android-34\" -e \"image_type=google_apis\" -e \"cpu=4\" -e \"memory=2048\"`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(Heading,{level:`3`,id:`manage-avd-state`,children:`Manage AVD State`}),`\n`,_jsx(CodeBlock,{numberOfLines:`9`,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:`9`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`# Start AVD`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`ansible-playbook -i dev/inventory avd.yml -e \"vm_name=my-vm\" -e \"desired_state=running\"`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`# Stop AVD`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`ansible-playbook -i dev/inventory avd.yml -e \"vm_name=my-vm\" -e \"desired_state=stopped\"`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`# Delete AVD (specify index if multiple exist)`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`ansible-playbook -i dev/inventory avd.yml -e \"vm_name=my-vm\" -e \"desired_state=absent\" -e \"avd_index=0\"`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(Heading,{level:`3`,id:`list-avds`,children:`List AVDs`}),`\n`,_jsx(CodeBlock,{numberOfLines:`6`,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:`6`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`# All AVDs across all hosts`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`ansible-playbook -i dev/inventory list_avds.yml`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`# Filter by VM`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`ansible-playbook -i dev/inventory list_avds.yml -e \"vm_name=my-vm\"`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(Heading,{level:`3`,id:`delete-avd-by-index`,children:`Delete AVD by Index`}),`\n`,_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:`ansible-playbook -i dev/inventory delete_avd.yml -e \"vm_name=my-vm\" -e \"avd_index=0\"`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(Heading,{level:`3`,id:`uninstall-sdk-platform`,children:`Uninstall SDK Platform`}),`\n`,_jsx(CodeBlock,{numberOfLines:`5`,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:`5`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`ansible-playbook -i dev/inventory sdkmanager_uninstall.yml`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`# Target a specific platform`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`ansible-playbook -i dev/inventory sdkmanager_uninstall.yml -e \"platform=android-34\"`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`common-variable-combinations`,children:`Common Variable Combinations`}),`\n`,_jsx(Heading,{level:`3`,id:`deploy-with-custom-cpu-and-memory`,children:`Deploy with Custom CPU and Memory`}),`\n`,_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:`ansible-playbook -i dev/inventory deploy.yml -e \"vm_name=dev-desktop\" -e \"vm_image=ghcr.io/macstadium/orka-images/sonoma:latest\" -e \"cpu=4\" -e \"memory=8192\" -e \"network_interface=en0\"`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(Heading,{level:`3`,id:`deploy-with-network-interface`,children:`Deploy with Network Interface`}),`\n`,_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:`ansible-playbook -i dev/inventory deploy.yml -e \"vm_name=prod-desktop\" -e \"vm_image=ghcr.io/macstadium/orka-images/sonoma:latest\" -e \"network_interface=en0\"`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(Heading,{level:`3`,id:`deploy-to-specific-host`,children:`Deploy to Specific Host`}),`\n`,_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:`ansible-playbook -i dev/inventory deploy.yml -e \"vm_name=build-01\" -e \"vm_image=ghcr.io/macstadium/orka-images/sonoma:latest\" -e \"network_interface=en0\" --limit mac-node-1,localhost`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`deploy.yml`}),` builds its plan on the Ansible control node, so include `,_jsx(_components.code,{children:`localhost`}),` in `,_jsx(_components.code,{children:`--limit`}),`.`]}),`\n`,_jsx(Heading,{level:`3`,id:`image-creation-with-auth`,children:`Image Creation with Auth`}),`\n`,_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:`ansible-playbook -i dev/inventory create_image.yml -e \"vm_image=base:latest\" -e \"remote_image_name=registry.company.com/app:v2.0\" -e \"registry_username=\u003cREGISTRY_USERNAME>\" -e \"registry_password=\u003cREGISTRY_PASSWORD>\" -e \"insecure_push=false\"`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(Heading,{level:`3`,id:`insecure-registry`,children:`Insecure Registry`}),`\n`,_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:`ansible-playbook -i dev/inventory pull_image.yml -e \"remote_image_name=insecure-registry:5000/image:latest\" -e \"insecure_pull=true\"`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`image-naming-patterns`,children:`Image Naming Patterns`}),`\n`,_jsx(Heading,{level:`3`,id:`macstadium-public-images`,children:`MacStadium Public Images`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Tahoe`}),`: `,_jsx(_components.code,{children:`ghcr.io/macstadium/orka-images/tahoe:latest`})]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Sequoia`}),`: `,_jsx(_components.code,{children:`ghcr.io/macstadium/orka-images/sequoia:latest`})]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Sonoma`}),`: `,_jsx(_components.code,{children:`ghcr.io/macstadium/orka-images/sonoma:latest`})]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`private-registry-format`,children:`Private Registry Format`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Full path`}),`: `,_jsx(_components.code,{children:`registry.example.com/organization/repository:tag`})]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`With port`}),`: `,_jsx(_components.code,{children:`registry.example.com:5000/orka/image:v1.0`})]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`vm-naming-convention`,children:`VM Naming Convention`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`list.yml`}),`, `,_jsx(_components.code,{children:`vm.yml`}),`, and `,_jsx(_components.code,{children:`delete.yml`}),` match VM names by prefix, so give related VMs a shared name prefix, and don’t give a VM a name that is the start of another VM’s name. Use clear, descriptive names:`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`dev-desktop-01`}),`, `,_jsx(_components.code,{children:`dev-desktop-02`})]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`prod-build-runner-01`}),`, `,_jsx(_components.code,{children:`prod-build-runner-02`})]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:_jsx(_components.code,{children:`ci-macOS-sonoma`})}),`\n`]}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`AVDs are named automatically based on the VM: `,_jsx(_components.code,{children:`{vm_name}-avd-0`}),`, `,_jsx(_components.code,{children:`{vm_name}-avd-1`}),`, etc.`]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`ansible-shortcuts`,children:`Ansible Shortcuts`}),`\n`,_jsx(Heading,{level:`3`,id:`run-on-single-host`,children:`Run on Single Host`}),`\n`,_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:`ansible-playbook -i dev/inventory \u003cPLAYBOOK>.yml --limit mac-node-1`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsxs(_components.p,{children:[`Playbooks that build a plan or list results on the Ansible control node, such as `,_jsx(_components.code,{children:`deploy.yml`}),`, `,_jsx(_components.code,{children:`delete.yml`}),`, and `,_jsx(_components.code,{children:`list.yml`}),`, also need `,_jsx(_components.code,{children:`localhost`}),` in the limit: `,_jsx(_components.code,{children:`--limit mac-node-1,localhost`}),`.`]}),`\n`,_jsx(Heading,{level:`3`,id:`dry-run`,children:`Dry run`}),`\n`,_jsxs(_components.p,{children:[`The orchestration modules that query Orka Engine don’t support Ansible check mode, so `,_jsx(_components.code,{children:`--check`}),` fails. To preview changes, run `,_jsx(_components.code,{children:`deploy.yml`}),`, `,_jsx(_components.code,{children:`delete.yml`}),`, `,_jsx(_components.code,{children:`deploy_avd.yml`}),`, `,_jsx(_components.code,{children:`delete_avd.yml`}),`, or `,_jsx(_components.code,{children:`avd.yml`}),` with `,_jsx(_components.code,{children:`--tags plan`}),`:`]}),`\n`,_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:`ansible-playbook -i dev/inventory deploy.yml -e \"vm_name=my-vm\" --tags plan`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(Heading,{level:`3`,id:`verbose-output`,children:`Verbose Output`}),`\n`,_jsx(CodeBlock,{numberOfLines:`9`,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:`9`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`# Verbose output`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`ansible-playbook -i dev/inventory \u003cPLAYBOOK>.yml -v`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`# More verbose output`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`ansible-playbook -i dev/inventory \u003cPLAYBOOK>.yml -vv`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`# Debug level output`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`ansible-playbook -i dev/inventory \u003cPLAYBOOK>.yml -vvv`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(Heading,{level:`3`,id:`skip-tags`,children:`Skip Tags`}),`\n`,_jsxs(_components.p,{children:[`The plays in `,_jsx(_components.code,{children:`create_image.yml`}),` that deploy the `,_jsx(_components.code,{children:`image-host`}),` build VM and add it to the inventory aren’t tagged, so `,_jsx(_components.code,{children:`--tags configure`}),` or `,_jsx(_components.code,{children:`--tags push`}),` on their own match no hosts and do nothing. To keep the build VM running after the image is pushed, skip the delete step instead:`]}),`\n`,_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:`ansible-playbook -i dev/inventory create_image.yml --skip-tags delete`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(Heading,{level:`3`,id:`step-through-tasks`,children:`Step Through Tasks`}),`\n`,_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:`ansible-playbook -i dev/inventory \u003cPLAYBOOK>.yml --step`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`best-practices-checklist`,children:`Best Practices Checklist`}),`\n`,_jsx(Heading,{level:`3`,id:`planning-and-safety`,children:`Planning and Safety`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`Always use `,_jsx(_components.code,{children:`--tags plan`}),` before production deployments`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`Test playbooks on single host first with `,_jsx(_components.code,{children:`--limit`})]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`Review deployment plan output before executing`}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`Verify capacity before large deployments`}),`\n`]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`naming-and-organization`,children:`Naming and Organization`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`Use clear, descriptive VM names (for example, `,_jsx(_components.code,{children:`prod-desktop-01`}),`, `,_jsx(_components.code,{children:`build-runner-sonoma`}),`)`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`Version your images with tags (`,_jsx(_components.code,{children:`:v1.0`}),`, `,_jsx(_components.code,{children:`:v2.0`}),`, not `,_jsx(_components.code,{children:`:latest`}),` in prod)`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`Document VM purposes in inventory comments`}),`\n`]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`capacity-management`,children:`Capacity Management`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`Set appropriate `,_jsx(_components.code,{children:`max_vms_per_host`}),` limits`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`Monitor disk space on hosts regularly`}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`Keep Orka Engine updated across all hosts`}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`Track VM distribution across hosts`}),`\n`]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`image-management`,children:`Image Management`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`Place custom configuration scripts in the `,_jsx(_components.code,{children:`scripts/`}),` directory at the root of your `,_jsx(_components.code,{children:`orka-engine-orchestration`}),` clone`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`Test image builds in dev before production`}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`Keep base images cached on all hosts`}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`Implement regular image rebuild schedule`}),`\n`]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`security-and-operations`,children:`Security and Operations`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`Store credentials as secrets in the management UI, or pass them at run time with `,_jsx(_components.code,{children:`-e`}),`. Don’t commit them to Git`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`Maintain inventory file accuracy`}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`Use SSH keys (not passwords) for host access`}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`Rotate credentials regularly`}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`Review deployment logs for errors`}),`\n`]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`state-and-tracking`,children:`State and Tracking`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`Let Ansible manage VMs (use playbooks, not manual creation)`}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`Use `,_jsx(_components.code,{children:`list.yml`}),` to verify state before changes`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`Keep group vars consistent across environments`}),`\n`]}),`\n`]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`support-resources`,children:`Support Resources`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Documentation`}),`: `,_jsx(_components.a,{href:`https://docs.macstadium.com`,children:`MacStadium`})]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Support Portal`}),`: `,_jsx(_components.a,{href:`mailto:support@macstadium.com`,children:`support@macstadium.com`})]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`CLI Reference`}),`: `,_jsx(_components.code,{children:`orka-engine --help`})]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`VM Commands`}),`: `,_jsx(_components.code,{children:`orka-engine vm --help`})]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Image Commands`}),`: `,_jsx(_components.code,{children:`orka-engine image --help`})]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Project README`}),`: Check your repository’s README.md for architecture details`]}),`\n`]}),`\n`]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{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":"Ansible quick reference","description":"Quick-reference Ansible commands for Orka-based Citrix VDI: connectivity tests, Orka Engine checks, VM lifecycle, VDA management, and image operations.","zendesk_id":44260146530715,"keywords":["Ansible commands","playbook quick reference","Orka CLI","VDI command reference"],"href":"/remote-desktop-vdi/reference/ansible-quick-reference"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Setup Commands","slug":"setup-commands","depth":2,"children":[{"title":"Test Connectivity","slug":"test-connectivity","depth":3,"children":[]},{"title":"Check Orka Engine Status","slug":"check-orka-engine-status","depth":3,"children":[]},{"title":"Verify Python Version","slug":"verify-python-version","depth":3,"children":[]}]},{"title":"One-Liner Examples","slug":"one-liner-examples","depth":2,"children":[{"title":"Install/Upgrade Orka Engine","slug":"install/upgrade-orka-engine","depth":3,"children":[]},{"title":"Plan Deployment (Dry Run)","slug":"plan-deployment-dry-run","depth":3,"children":[]},{"title":"Deploy VM","slug":"deploy-vm","depth":3,"children":[]},{"title":"Plan Deletion (Dry Run)","slug":"plan-deletion-dry-run","depth":3,"children":[]},{"title":"Delete VM","slug":"delete-vm","depth":3,"children":[]},{"title":"Stop VM","slug":"stop-vm","depth":3,"children":[]},{"title":"Start VM","slug":"start-vm","depth":3,"children":[]},{"title":"Delete VMs by name prefix","slug":"delete-vms-by-name-prefix","depth":3,"children":[]},{"title":"List All VMs","slug":"list-all-vms","depth":3,"children":[]},{"title":"List VMs by Name","slug":"list-vms-by-name","depth":3,"children":[]},{"title":"Pull Image to All Hosts","slug":"pull-image-to-all-hosts","depth":3,"children":[]},{"title":"Create and Push Custom Image","slug":"create-and-push-custom-image","depth":3,"children":[]},{"title":"Create Image with OS Upgrade","slug":"create-image-with-os-upgrade","depth":3,"children":[]}]},{"title":"Android Virtual Devices","slug":"android-virtual-devices","depth":2,"children":[{"title":"Install Android SDK on Hosts","slug":"install-android-sdk-on-hosts","depth":3,"children":[]},{"title":"Install SDK Platforms and System Images","slug":"install-sdk-platforms-and-system-images","depth":3,"children":[]},{"title":"Create an AVD (Plan First)","slug":"create-an-avd-plan-first","depth":3,"children":[]},{"title":"Create an AVD","slug":"create-an-avd","depth":3,"children":[]},{"title":"Manage AVD State","slug":"manage-avd-state","depth":3,"children":[]},{"title":"List AVDs","slug":"list-avds","depth":3,"children":[]},{"title":"Delete AVD by Index","slug":"delete-avd-by-index","depth":3,"children":[]},{"title":"Uninstall SDK Platform","slug":"uninstall-sdk-platform","depth":3,"children":[]}]},{"title":"Common Variable Combinations","slug":"common-variable-combinations","depth":2,"children":[{"title":"Deploy with Custom CPU and Memory","slug":"deploy-with-custom-cpu-and-memory","depth":3,"children":[]},{"title":"Deploy with Network Interface","slug":"deploy-with-network-interface","depth":3,"children":[]},{"title":"Deploy to Specific Host","slug":"deploy-to-specific-host","depth":3,"children":[]},{"title":"Image Creation with Auth","slug":"image-creation-with-auth","depth":3,"children":[]},{"title":"Insecure Registry","slug":"insecure-registry","depth":3,"children":[]}]},{"title":"Image Naming Patterns","slug":"image-naming-patterns","depth":2,"children":[{"title":"MacStadium Public Images","slug":"macstadium-public-images","depth":3,"children":[]},{"title":"Private Registry Format","slug":"private-registry-format","depth":3,"children":[]},{"title":"VM Naming Convention","slug":"vm-naming-convention","depth":3,"children":[]}]},{"title":"Ansible Shortcuts","slug":"ansible-shortcuts","depth":2,"children":[{"title":"Run on Single Host","slug":"run-on-single-host","depth":3,"children":[]},{"title":"Dry run","slug":"dry-run","depth":3,"children":[]},{"title":"Verbose Output","slug":"verbose-output","depth":3,"children":[]},{"title":"Skip Tags","slug":"skip-tags","depth":3,"children":[]},{"title":"Step Through Tasks","slug":"step-through-tasks","depth":3,"children":[]}]},{"title":"Best Practices Checklist","slug":"best-practices-checklist","depth":2,"children":[{"title":"Planning and Safety","slug":"planning-and-safety","depth":3,"children":[]},{"title":"Naming and Organization","slug":"naming-and-organization","depth":3,"children":[]},{"title":"Capacity Management","slug":"capacity-management","depth":3,"children":[]},{"title":"Image Management","slug":"image-management","depth":3,"children":[]},{"title":"Security and Operations","slug":"security-and-operations","depth":3,"children":[]},{"title":"State and Tracking","slug":"state-and-tracking","depth":3,"children":[]}]},{"title":"Support Resources","slug":"support-resources","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"macstadiuminc","siteName":"MacStadium Docs","title":"Ansible quick reference - MacStadium Docs","relatedPagesConfig":{"enabled":true,"limit":5,"mode":"automatic"},"contextualStarterQuestions":[{"_id":"6ae20c4df51b3c0265f963ce","deploymentId":"69af00bd5a04945e653662f0","questionText":"How do I test Ansible connectivity?","status":"active","generatedBy":"contextual","path":"remote-desktop-vdi/reference/ansible-quick-reference","createdAt":"2026-10-28T14:53:01.660Z","updatedAt":"2026-10-28T14:53:01.660Z","__v":0},{"_id":"6ae20c4df51b3c0265f963d0","deploymentId":"69af00bd5a04945e653662f0","questionText":"How do I delete a VM safely?","status":"active","generatedBy":"contextual","path":"remote-desktop-vdi/reference/ansible-quick-reference","createdAt":"2026-10-28T14:53:01.660Z","updatedAt":"2026-10-28T14:53:01.660Z","__v":0},{"_id":"6ae20c4df51b3c0265f963cf","deploymentId":"69af00bd5a04945e653662f0","questionText":"How do I deploy a VM with Ansible?","status":"active","generatedBy":"contextual","path":"remote-desktop-vdi/reference/ansible-quick-reference","createdAt":"2026-10-28T14:53:01.660Z","updatedAt":"2026-10-28T14:53:01.660Z","__v":0}],"navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-28T14:52:56.792Z","originalFileLocation":"remote-desktop-vdi/reference/ansible-quick-reference.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=\"Quick-reference Ansible commands for Orka-based Citrix VDI: connectivity tests, Orka Engine checks, VM lifecycle, VDA management, and image operations.\">\u003cmeta data-mint-head name=\"application-name\" content=\"MacStadium Docs\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/macstadiuminc/D_B1b0VJlo6ZTf9Z/_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/macstadiuminc/D_B1b0VJlo6ZTf9Z/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/macstadiuminc/D_B1b0VJlo6ZTf9Z/_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/macstadiuminc/D_B1b0VJlo6ZTf9Z/_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/macstadiuminc/D_B1b0VJlo6ZTf9Z/_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/macstadiuminc/D_B1b0VJlo6ZTf9Z/_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/macstadiuminc/D_B1b0VJlo6ZTf9Z/_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/macstadiuminc/D_B1b0VJlo6ZTf9Z/_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/macstadiuminc/D_B1b0VJlo6ZTf9Z/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Ansible quick reference - MacStadium Docs\">\u003cmeta data-mint-head property=\"og:description\" content=\"Quick-reference Ansible commands for Orka-based Citrix VDI: connectivity tests, Orka Engine checks, VM lifecycle, VDA management, and image operations.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"MacStadium Docs\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.macstadium.com/remote-desktop-vdi/reference/ansible-quick-reference\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://macstadiuminc.mintlify.app/_mintlify/api/og/v2?division=Reference\u0026amp;title=Ansible+quick+reference\u0026amp;description=Quick-reference+Ansible+commands+for+Orka-based+Citrix+VDI%3A+connectivity+tests%2C+Orka+Engine+checks%2C+VM+lifecycle%2C+VDA+management%2C+and+image+operations.\u0026amp;theme=a2b304edaac2dce38d1c6db6\u0026amp;signature=dd434c795db072024bee32f3e4dd7fd09dab8bf099a3f34d38b7f9621499e1f5\">\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=\"Ansible quick reference - MacStadium Docs\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Quick-reference Ansible commands for Orka-based Citrix VDI: connectivity tests, Orka Engine checks, VM lifecycle, VDA management, and image operations.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://macstadiuminc.mintlify.app/_mintlify/api/og/v2?division=Reference\u0026amp;title=Ansible+quick+reference\u0026amp;description=Quick-reference+Ansible+commands+for+Orka-based+Citrix+VDI%3A+connectivity+tests%2C+Orka+Engine+checks%2C+VM+lifecycle%2C+VDA+management%2C+and+image+operations.\u0026amp;theme=a2b304edaac2dce38d1c6db6\u0026amp;signature=dd434c795db072024bee32f3e4dd7fd09dab8bf099a3f34d38b7f9621499e1f5\">\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/macstadiuminc/D_B1b0VJlo6ZTf9Z/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"MacStadium Docs\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#FE9000\">\u003cmeta data-mint-head name=\"google-site-verification\" content=\"OeKTGa7HvmEnL1jtMDksZEYQg1LGTk97_JlFSE5nxF4\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.macstadium.com/remote-desktop-vdi/reference/ansible-quick-reference\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/remote-desktop-vdi/reference/ansible-quick-reference.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.macstadium.com/#organization\",\"name\":\"MacStadium Docs\",\"url\":\"https://docs.macstadium.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/macstadiuminc/qJnYHjjgtjKQ73n9/logo/light.png?fit=max\u0026auto=format\u0026n=qJnYHjjgtjKQ73n9\u0026q=85\u0026s=8095707b80300088ba5f7c1cd8363d18\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.macstadium.com#website\",\"name\":\"MacStadium Docs\",\"url\":\"https://docs.macstadium.com\",\"publisher\":{\"@id\":\"https://docs.macstadium.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.macstadium.com/remote-desktop-vdi/reference/ansible-quick-reference#webpage\",\"url\":\"https://docs.macstadium.com/remote-desktop-vdi/reference/ansible-quick-reference\",\"name\":\"Ansible quick reference\",\"description\":\"Quick-reference Ansible commands for Orka-based Citrix VDI: connectivity tests, Orka Engine checks, VM lifecycle, VDA management, and image operations.\",\"dateModified\":\"2026-10-28T14:52:56.792Z\",\"isPartOf\":{\"@id\":\"https://docs.macstadium.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.macstadium.com/remote-desktop-vdi/reference/ansible-quick-reference#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.macstadium.com/remote-desktop-vdi/reference/ansible-quick-reference#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"MacStadium VDI\",\"item\":\"https://docs.macstadium.com/remote-desktop-vdi/overview/what-is-macstadium-vdi\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Reference\",\"item\":\"https://docs.macstadium.com/remote-desktop-vdi/reference/known-issues\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Ansible quick reference\",\"item\":\"https://docs.macstadium.com/remote-desktop-vdi/reference/ansible-quick-reference\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.macstadium.com/remote-desktop-vdi/reference/ansible-quick-reference#article\",\"headline\":\"Ansible quick reference\",\"name\":\"Ansible quick reference\",\"description\":\"Quick-reference Ansible commands for Orka-based Citrix VDI: connectivity tests, Orka Engine checks, VM lifecycle, VDA management, and image operations.\",\"url\":\"https://docs.macstadium.com/remote-desktop-vdi/reference/ansible-quick-reference\",\"mainEntityOfPage\":{\"@id\":\"https://docs.macstadium.com/remote-desktop-vdi/reference/ansible-quick-reference#webpage\"},\"dateModified\":\"2026-10-28T14:52:56.792Z\",\"keywords\":\"Ansible commands, playbook quick reference, Orka CLI, VDI command reference\",\"publisher\":{\"@id\":\"https://docs.macstadium.com/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.macstadium.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"MacStadium Docs\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"MacStadium Docs","nav":{"global":null,"groups":[{"group":"MacStadium","pages":[{"group":"MacStadium Overview","pages":[{"title":"MacStadium cloud hosting for Apple hardware","href":"/macstadium/macstadium-overview/macstadium-overview"},{"title":"MacStadium Portal for subscriptions and support","href":"/macstadium/macstadium-overview/macstadium-portal"},{"title":"Viewing your environment in My Cloud","href":"/macstadium/macstadium-overview/ip-plan"}]},{"group":"Account Management","pages":[{"title":"First-Time SSO Login to MacStadium Portal","href":"/macstadium/account-management-and-saml/first-time-sso-login-to-macstadium-portal"},{"title":"Troubleshooting Credential Issues","href":"/macstadium/account-management-and-saml/troubleshooting-credential-issues"},{"title":"Add a new user to your MacStadium account","href":"/macstadium/account-management-and-saml/add-a-new-user"},{"title":"Two-Factor Authentication (2FA)","href":"/macstadium/account-management-and-saml/two-factor-authentication-2fa"},{"title":"SAML single sign-on for MacStadium accounts","href":"/macstadium/account-management-and-saml/saml-sso"},{"title":"Enable SAML SSO with Okta","href":"/macstadium/account-management-and-saml/enable-saml-sso-with-okta"},{"title":"Enable SAML SSO with Microsoft Entra ID","href":"/macstadium/account-management-and-saml/enable-saml-sso-with-azure-active-directory"},{"title":"Enable SAML SSO with Google Workspace Federation","href":"/macstadium/account-management-and-saml/enable-saml-sso-with-google-workspace-federation"}]},{"group":"Billing","pages":[{"title":"MacStadium vendor onboarding and management","href":"/macstadium/billing/vendor-management"},{"title":"Access and download MacStadium invoices","href":"/macstadium/billing/accessing-invoices"},{"title":"Fix a declined credit card on MacStadium","href":"/macstadium/billing/credit-card-declined"},{"title":"Canceling a MacStadium Subscription","href":"/macstadium/billing/canceling-a-macstadium-subscription"}]},{"group":"Legal and Compliance","pages":[{"title":"Master Services Agreement","href":"/macstadium/legal-and-compliance/master-services-agreement"},{"title":"Service Level Agreement","href":"/macstadium/legal-and-compliance/service-level-agreement"},{"title":"Acceptable Use Policy","href":"/macstadium/legal-and-compliance/acceptable-use-policy"},{"title":"Copyright and Trademark Policy","href":"/macstadium/legal-and-compliance/copyright-and-trademark-policy"},{"title":"MacStadium security and compliance overview","href":"/macstadium/legal-and-compliance/security"}]},{"group":"Support","pages":[{"title":"MacStadium support plans and services","href":"/macstadium/support/support"},{"title":"Update regarding CVE-2026-65400","href":"/CVE-2026-65400"},{"title":"MacStadium Support Tiers","href":"/macstadium/support/macstadium-support-tiers"},{"title":"Creating Slack Tickets","hidden":true,"href":"/macstadium/support/creating-slack-tickets"},{"title":"Mac Configuration Assistance","href":"/macstadium/support/mac-configuration-assistance"},{"title":"MacStadium Remote Hands hardware support","href":"/macstadium/support/remote-hands-service"}]}]},{"group":"Orka","pages":[{"group":"Overview","pages":[{"title":"Orka macOS virtualization platform overview","href":"/orka/orka-overview/orka-overview"},{"title":"Orka tools, CLI downloads, and CI/CD plugins","href":"/orka/orka-overview/tools-integrations"},{"title":"Orka compatibility matrix for macOS and hardware","href":"/orka/orka-overview/compatibility-matrix"}]},{"group":"Quick Start Guides","pages":[{"title":"Deploy your first VM with the Orka CLI","href":"/orka/quick-start-guides/orka-cli-quick-start"},{"title":"Deploy your first VM with the Orka REST API","href":"/orka/quick-start-guides/orka-api-quick-start"},{"title":"Orka Web UI quick start guide","href":"/orka/quick-start-guides/web-ui-quick-start"},{"title":"Orka CI/CD integrations quick start guide","sidebarTitle":"CI/CD Integrations Quick Start","href":"/orka/quick-start-guides/cicd-integrations-quick-start"}]},{"group":"Cluster Access","pages":[{"title":"Cluster Access Management: Overview","href":"/orka/orka-cluster-access/cluster-access-management-overview"},{"title":"Orka authentication, OIDC, and RBAC configuration","sidebarTitle":"Authentication and RBAC","href":"/orka/orka-cluster-access/orka-authentication-and-rbac"},{"title":"Understanding Orka Credentials","href":"/orka/orka-cluster-access/understanding-orka-credentials"},{"title":"Customer Portal: Manage Account Users","href":"/orka/orka-cluster-access/customer-portal-manage-account-users"},{"title":"Log in to your Orka cluster for the first time","sidebarTitle":"Access the Cluster","href":"/orka/orka-cluster-access/orka-cluster-access-the-cluster"},{"title":"Orka Cluster: Manage Access to Resources","href":"/orka/orka-cluster-access/orka-cluster-manage-access-to-resources"},{"title":"Orka Cluster: Manage Service Accounts","href":"/orka/orka-cluster-access/orka-cluster-manage-service-accounts"}]},{"group":"Networking","pages":[{"title":"MSDC Network Requirements","href":"/orka/networking-with-orka-at-macstadium/msdc-network-requirements"},{"title":"Connect to your Orka cluster via VPN","href":"/orka/networking-with-orka-at-macstadium/vpn-connection"},{"title":"Built-In Orka Domains","href":"/orka/networking-with-orka-at-macstadium/built-in-orka-domains"},{"title":"Custom domains and TLS certificates for Orka clusters","sidebarTitle":"External Custom Domains","href":"/orka/networking-with-orka-at-macstadium/external-custom-domains"},{"group":"AWS","pages":[{"title":"Connect AWS to your Orka cluster","href":"/orka/networking-with-orka-at-macstadium/aws-orka-connections"},{"title":"1. AWS Side of the VPN Tunnel","href":"/orka/networking-with-orka-at-macstadium/1-aws-side-of-the-vpn-tunnel"},{"title":"2. AWS VPN Tunnel Configuration File","href":"/orka/networking-with-orka-at-macstadium/2-aws-vpn-tunnel-configuration-file"},{"title":"3. Orka side of the AWS VPN tunnel","href":"/orka/networking-with-orka-at-macstadium/3-aws-orka-side-of-the-vpn-tunnel"},{"title":"4. Verifying the AWS VPN tunnel","href":"/orka/networking-with-orka-at-macstadium/4-aws-verifying-the-vpn-tunnel"},{"title":"AWS VPN Tunnel Troubleshooting","href":"/orka/networking-with-orka-at-macstadium/aws-vpn-tunnel-troubleshooting"}]},{"group":"GCP","pages":[{"title":"Connect GCP to your Orka cluster","href":"/orka/networking-with-orka-at-macstadium/gcp-orka-connections"},{"title":"1. GCP Side of the VPN Tunnel","href":"/orka/networking-with-orka-at-macstadium/1-gcp-side-of-the-vpn-tunnel"},{"title":"2. GCP VPN Tunnel Configuration File","href":"/orka/networking-with-orka-at-macstadium/2-gcp-vpn-tunnel-configuration-file"},{"title":"3. Orka Side of the GCP VPN Tunnel","href":"/orka/networking-with-orka-at-macstadium/3-orka-side-of-the-gcp-vpn-tunnel"},{"title":"4. Verifying the GCP VPN Tunnel","href":"/orka/networking-with-orka-at-macstadium/4-verifying-the-gcp-vpn-tunnel"},{"title":"GCP VPN Tunnel Troubleshooting","href":"/orka/networking-with-orka-at-macstadium/gcp-vpn-tunnel-troubleshooting"}]}]},{"group":"DevOps Integrations","pages":[{"title":"Jenkins plugin for Orka macOS build agents","href":"/orka/orka-devops-integrations/jenkins"},{"title":"GitHub Actions integration for Orka","href":"/orka/orka-devops-integrations/github-actions"},{"title":"GitLab CI/CD runners on Orka macOS VMs","sidebarTitle":"GitLab","href":"/orka/orka-devops-integrations/gitlab"},{"title":"Buildkite agents on Orka macOS VMs","sidebarTitle":"Buildkite","href":"/orka/orka-devops-integrations/buildkite"},{"title":"TeamCity plugin for Orka macOS build agents","href":"/orka/orka-devops-integrations/teamcity"},{"title":"Packer plugin for automated Orka image builds","href":"/orka/orka-devops-integrations/packer"},{"title":"Bazel Remote Build Execution with Orka","href":"/orka/orka-devops-integrations/bazel-rbe"},{"title":"Bazel RBE + Orka: Getting Started","href":"/orka/orka-devops-integrations/bazel-rbe-quickstart"},{"title":"AI agent integration with the Orka CLI","sidebarTitle":"Orka3 Agent Skill","href":"/orka/orka-devops-integrations/claude-code"}]},{"group":"OCI Images","pages":[{"title":"OCI container images for Orka VMs","href":"/orka/oci-images/oci-images-overview"},{"title":"OCI Images: Manage Registry Credentials","href":"/orka/oci-images/oci-images-manage-registry-credentials"},{"title":"Deploy Orka VMs from an OCI image registry","sidebarTitle":"Deploy VMs from OCI images","href":"/orka/oci-images/oci-images-deploy-vms"},{"title":"OCI Images: Preserve Changes","href":"/orka/oci-images/oci-images-preserve-changes"},{"title":"Building a hardened custom image","href":"/orka/oci-images/building-a-hardened-custom-image"},{"title":"Using Harbor OCI Storage with the Orka CLI","href":"/orka/oci-images/using-harbor-oci-storage-with-the-orka-cli"},{"title":"Migrate NFS Orka images to OCI format with Harbor","sidebarTitle":"Migrating NFS Images to OCI with Harbor","href":"/orka/oci-images/orka-self-service-migrating-nfs-images-to-oci-with-harbor"}]},{"group":"Kubernetes","pages":[{"title":"Kubernetes-native Orka resource management","href":"/orka/kubernetes-native/k8s-native-overview"},{"title":"Kubernetes persistent volumes in Orka namespaces","sidebarTitle":"Persistent Volumes","href":"/orka/kubernetes-native/k8s-native-persistent-volumes"},{"title":"K8s Native: Orka3 CRD Reference","href":"/orka/kubernetes-native/k8s-native-orka3-crd-reference"}]},{"group":"CLI Reference","pages":[{"title":"Orka CLI Overview \u0026 Configuration","href":"/orka/orka-cli-reference/orka-cli-overview-configuration"},{"title":"Authentication and User Management","href":"/orka/orka-cli-reference/authentication-and-user-management"},{"title":"Manage macOS VM images with the Orka CLI","href":"/orka/orka-cli-reference/image-management"},{"title":"OCI Registry Integration","href":"/orka/orka-cli-reference/oci-registry-integration"},{"title":"VM Deployment and Configuration","href":"/orka/orka-cli-reference/vm-deployment-and-configuration"},{"title":"VM Lifecycle Management","href":"/orka/orka-cli-reference/vm-lifecycle-management"},{"title":"Manage Android emulators with the Orka CLI","href":"/orka/orka-cli-reference/emulator-management"},{"title":"Orka node management with the CLI","href":"/orka/orka-cli-reference/node-management"},{"title":"Orka namespace management with the CLI","href":"/orka/orka-cli-reference/namespace-management"},{"title":"Role-Based Access Control (RBAC)","href":"/orka/orka-cli-reference/role-based-access-control-rbac"},{"title":"Orka CLI command quick reference","sidebarTitle":"Command quick reference","href":"/orka/orka-cli-reference/command-quick-reference"},{"title":"Output formats and Getting Help","href":"/orka/orka-cli-reference/output-formats-and-getting-help"}]},{"group":"Resources","pages":[{"title":"Working with Orka VM metadata and custom tags","href":"/orka/orka-resources/working-with-vm-metadata"},{"title":"Bootstrap VMs with User Data","sidebarTitle":"User Data","href":"/orka/orka-resources/userdata"},{"title":"Orka image caching for faster VM deployments","href":"/orka/orka-resources/image-caching"},{"title":"Shared VM storage for Orka CI artifacts","href":"/orka/orka-resources/shared-vm-storage"},{"title":"Orka Burst for on-demand elastic cluster capacity","href":"/orka/orka-resources/burst"},{"title":"Apple silicon Mac servers in Orka","href":"/orka/orka-resources/apple-silicon-based-support"},{"title":"Android emulators on Orka","href":"/orka/orka-resources/android-emulators"},{"title":"Orka Required URL Rules for Filtering","href":"/orka/orka-resources/orka-required-url-rules-for-filtering"},{"title":"Orka VM Tools for guest services on ARM VMs","href":"/orka/orka-resources/vm-tools"},{"title":"Cluster Configurations","href":"/orka/orka-resources/cluster-configurations"},{"title":"Consuming Metrics from Prometheus","href":"/orka/orka-resources/consuming-metrics-from-prometheus"},{"title":"Resiliency, High Availability, and Disaster Recovery","href":"/orka/orka-resources/resiliency-high-availability-and-disaster-recovery"}]},{"group":"Configuration","pages":[{"title":"Enable GPU passthrough for Orka VMs on Intel nodes","sidebarTitle":"Performance: GPU passthrough","href":"/orka/orka-configuration/performance-gpu-passthrough"}]},{"group":"Compatibility","pages":[{"title":"Orka feature parity across Intel and Apple silicon","sidebarTitle":"Feature parity: Apple hardware","href":"/orka/compatibility/feature-parity-apple-hardware"},{"title":"Feature Parity: Orka Tools","href":"/orka/compatibility/feature-parity-orka-tools"},{"title":"Orka performance features by hardware and macOS version","sidebarTitle":"Performance improving features","href":"/orka/compatibility/compatibility-performance-improving-features"}]},{"group":"Desktop","pages":[{"title":"What's new in Orka Desktop 3.1.0","href":"/orka/orka-desktop/orka-desktop-310-release-notes"},{"title":"Orka Desktop 3.0 local macOS virtualization tool","href":"/orka/orka-desktop/welcome-to-orka-desktop-30"}]},{"group":"Engine","pages":[{"title":"Orka Engine standalone macOS VM management","href":"/orka/orka-engine/orka-engine-30"},{"title":"Managing your Orka license","href":"/orka/orka-engine/managing-your-orka-license"}]},{"group":"On AWS and On-Prem","pages":[{"title":"Orka on AWS architecture and deployment overview","href":"/orka/orka-on-aws-and-on-prem/orka-on-aws-getting-started"},{"title":"Orka on AWS: Private VPC Access","href":"/orka/orka-on-aws-and-on-prem/orka-on-aws-vpc-access"},{"title":"Risk Assessment and Mitigation Plan for Orka on AWS","href":"/orka/orka-on-aws-and-on-prem/risk-assessment-and-mitigation-plan-for-orka-on-aws"},{"title":"Orka On-Prem architecture and networking overview","href":"/orka/orka-on-aws-and-on-prem/orka-on-prem-getting-started"},{"title":"Orka Anywhere On-Prem: Troubleshooting VM Deployments","href":"/orka/orka-on-aws-and-on-prem/orka-on-prem-troubleshooting"},{"title":"Using Bridge Networking with Orka 3.5.0","href":"/orka/orka-on-aws-and-on-prem/using-bridge-networking-with-orka-350"}]},{"group":"Cluster Migration","pages":[{"title":"2.4.x and 3.0.x to 3.1.x and above: Backward Compatibility","href":"/orka/orka-cluster-migration-from-24-3x/24x-and-30x-to-31x-and-above-backward-compatibility"},{"title":"2.4.x to 3.0.0: What Persists","href":"/orka/orka-cluster-migration-from-24-3x/24x-to-300-what-persists"},{"title":"Post-migration tasks after upgrading Orka 2.4.x to 3.0.0","href":"/orka/orka-cluster-migration-from-24-3x/24x-to-300-after-the-migration"},{"title":"2.4.x to 3.0.0: CLI Mapping","href":"/orka/orka-cluster-migration-from-24-3x/24x-to-300-cli-mapping"},{"title":"2.4.x to 3.0.0: API Mapping","href":"/orka/orka-cluster-migration-from-24-3x/24x-to-300-api-mapping"}]},{"group":"Upgrade Guides","pages":[{"title":"How to upgrade your Orka cluster","href":"/orka/orka-upgrades-and-release-notes/orka-upgrades"},{"title":"Run guided Orka cluster upgrades with Upgrade Service","sidebarTitle":"Orka Upgrade Service","href":"/orka/orka-upgrades-and-release-notes/orka-upgrade-service"},{"title":"Upgrade a self-managed Orka Anywhere cluster","sidebarTitle":"Upgrading Orka Anywhere","href":"/orka/orka-upgrades-and-release-notes/upgrading-orka-anywhere"},{"title":"Upgrading Orka on AWS","href":"/orka/orka-upgrades-and-release-notes/upgrading-orka-on-aws"},{"title":"Kubernetes upgrade guide","href":"/orka/orka-upgrades-and-release-notes/kubernetes-upgrade-guide"}]},{"group":"Release Notes","pages":[{"title":"Orka release notes","href":"/orka/orka-upgrades-and-release-notes/orka-release-notes"},{"title":"Orka component versions by release","sidebarTitle":"Component versions","href":"/orka/orka-upgrades-and-release-notes/orka-component-versions"},{"title":"Orka known issues and fixes by version","sidebarTitle":"Known issues and fixes by version","href":"/orka/orka-upgrades-and-release-notes/known-issues-by-version"}]}]},{"group":"MacStadium VDI","pages":[{"group":"Overview","pages":[{"title":"What is MacStadium VDI: macOS DaaS Hosting","sidebarTitle":"What is MacStadium VDI","href":"/remote-desktop-vdi/overview/what-is-macstadium-vdi"},{"title":"Architecture","href":"/remote-desktop-vdi/overview/architecture"},{"title":"Use cases","href":"/remote-desktop-vdi/overview/use-cases"},{"title":"Prerequisites","href":"/remote-desktop-vdi/overview/prerequisites"},{"title":"Choose your deployment model","href":"/remote-desktop-vdi/overview/choose-your-deployment-model"},{"title":"VDI on bare metal Mac","href":"/remote-desktop-vdi/overview/bare-metal-mac-vdi"},{"title":"MacStadium VDI business outcomes and use cases","href":"/remote-desktop-vdi/overview/business-outcomes-use-cases"}]},{"group":"Getting Started","pages":[{"title":"Getting started: MSDC-hosted","href":"/remote-desktop-vdi/getting-started/msdc-hosted"},{"title":"Self-hosted MacStadium VDI deployment guide","href":"/remote-desktop-vdi/getting-started/self-hosted"}]},{"group":"Configuration","pages":[{"title":"Ansible playbook implementation","href":"/remote-desktop-vdi/configuration/ansible-playbook-implementation"},{"title":"Citrix DaaS configuration","href":"/remote-desktop-vdi/configuration/citrix-daas-configuration"},{"title":"VDI golden image management","href":"/remote-desktop-vdi/configuration/image-management"},{"title":"MDM enrollment for MacStadium VDI desktops","href":"/remote-desktop-vdi/configuration/mdm-enrollment"},{"title":"Android virtual devices","href":"/remote-desktop-vdi/configuration/android-virtual-devices"},{"title":"Apple Business Manager and MDM with MacStadium","href":"/remote-desktop-vdi/configuration/apple-business-manager-and-mobile-device-management-with-macstadium"},{"title":"MacStadium VDI customer environment tips","href":"/remote-desktop-vdi/configuration/customer-environment-tips"},{"title":"USB passthrough guide","href":"/remote-desktop-vdi/configuration/usb-passthrough-guide"},{"title":"Advanced configuration","href":"/remote-desktop-vdi/configuration/advanced-configuration"}]},{"group":"Operations","pages":[{"title":"IT administrator onboarding guide","href":"/remote-desktop-vdi/it-admin-onboarding-guide"},{"title":"Validation and testing","href":"/remote-desktop-vdi/operations/validation-and-testing"},{"title":"VDI production rollout checklist","href":"/remote-desktop-vdi/operations/production-rollout"},{"title":"MacStadium VDI day-2 operations guide","href":"/remote-desktop-vdi/operations/day-2-operations-guide"},{"title":"Monitoring and observability","href":"/remote-desktop-vdi/operations/monitoring"},{"title":"Incident response and change management","href":"/remote-desktop-vdi/operations/incident-response"},{"title":"Bulk VM lifecycle management","href":"/remote-desktop-vdi/operations/bulk-vm-lifecycle"},{"title":"Deprovision and recover Mac hosts with Jamf Pro","href":"/remote-desktop-vdi/operations/deprovision-and-recover-mac-hosts"}]},{"group":"Reference","pages":[{"title":"MacStadium VDI known issues and limitations","href":"/remote-desktop-vdi/reference/known-issues"},{"title":"Networking requirements","description":"Port and firewall requirements, network topology, DNS, and VPN/connectivity requirements for MacStadium VDI, covering all three deployment models.","href":"/remote-desktop-vdi/reference/networking-requirements"},{"title":"Ansible quick reference","href":"/remote-desktop-vdi/reference/ansible-quick-reference"},{"title":"MacStadium VDI troubleshooting quick reference","description":"Quick-reference for MacStadium VDI issues organized by symptom. Each section lists likely causes, diagnostic commands, and recommended solutions.","href":"/remote-desktop-vdi/reference/troubleshooting-quick-reference"},{"title":"Shared responsibility guide","href":"/remote-desktop-vdi/reference/shared-user-responsibility-guide-for-macstadium-customers"}]},{"group":"Legacy (Cloud Access)","pages":[{"title":"MacStadium Cloud Access with Teradici PCoIP","href":"/remote-desktop-vdi/cloud-access-legacy/cloud-access"},{"title":"Getting Started with Cloud Access","href":"/remote-desktop-vdi/cloud-access-legacy/getting-started-with-cloud-access"},{"title":"Cloud Access Customer Environment Tips","href":"/remote-desktop-vdi/cloud-access-legacy/cloud-access-customer-environment-tips"},{"title":"Connect to Your Cloud (via VPN)","href":"/remote-desktop-vdi/cloud-access-legacy/connect-to-your-cloud-via-vpn"},{"title":"Cloud Access troubleshooting","href":"/remote-desktop-vdi/cloud-access-legacy/cloud-access-troubleshooting"},{"title":"Connect to Your Cloud (SSH)","href":"/remote-desktop-vdi/cloud-access-legacy/connect-to-your-cloud-ssh"},{"title":"Connect to Your Cloud (Windows)","href":"/remote-desktop-vdi/cloud-access-legacy/connect-to-your-cloud-windows"},{"title":"Setup VPN using Cisco AnyConnect","href":"/remote-desktop-vdi/cloud-access-legacy/setup-vpn-using-cisco-anyconnect"}]},{"group":"Release Notes","pages":[{"title":"MacStadium VDI 1.0 release notes","href":"/remote-desktop-vdi/macstadium-vdi-deployment/vdi-10-release-notes"}]}]},{"group":"IaaS","pages":[{"group":"Overview","pages":[{"title":"Bare Metal Mac Hosting: Infrastructure as a Service (IaaS)","sidebarTitle":"IaaS Overview","href":"/iaas/iaas-overview/infrastructure-as-a-service-iaas"},{"title":"MacStadium data center locations and latency testing","sidebarTitle":"Data Center Locations","href":"/iaas/iaas-overview/data-center-locations"}]},{"group":"Bare Metal Macs","pages":[{"title":"Connecting to your Mac for the first time","href":"/iaas/bare-metal-macs/connecting-to-your-mac-for-the-first-time"},{"title":"Bare metal Mac configurations","href":"/iaas/bare-metal-macs/mac-mini-comparison-chart"},{"title":"MacStadium Bare Metal Mac Benchmarks","href":"/iaas/bare-metal-macs/macstadium-bare-metal-mac-benchmarks"},{"title":"Common macOS CI/CD tools for MacStadium","href":"/iaas/bare-metal-macs/common-tools"},{"title":"Disabling Activation Lock and Find My on Mac","href":"/iaas/bare-metal-macs/2018-mac-mini-deactivation-process"}]},{"group":"Networking","pages":[{"title":"MacStadium IaaS networking overview","href":"/iaas/networking/networking-overview"},{"group":"Cisco Firewalls","pages":[{"title":"MacStadium network onboarding form for new customers","sidebarTitle":"Network Onboarding Form","href":"/iaas/cisco-firewalls/network-onboarding-form"},{"title":"Prepare the VPN Configuration for Input into Cisco ASA/ASAv","href":"/iaas/cisco-firewalls/prepare-the-vpn-configuration-for-input-into-cisco-asaasav"},{"title":"Cisco firewall models, specs, and capabilities","sidebarTitle":"Network Firewalls: Overview","href":"/iaas/cisco-firewalls/network-firewalls-overview"},{"title":"Firewall Upgrade Maintenance: What to Expect","href":"/iaas/cisco-firewalls/firewall-upgrade-maintenance-what-to-expect"},{"title":"Logging into Cisco Firewall","href":"/iaas/cisco-firewalls/logging-into-cisco-firewall"},{"title":"Creating Local User Accounts on a Cisco ASA","href":"/iaas/cisco-firewalls/creating-local-user-accounts-on-a-cisco-asa"},{"title":"Backup and Restore Firewall Config using ASDM","href":"/iaas/cisco-firewalls/backup-and-restore-firewall-config-using-asdm"},{"title":"Managing Cisco ASA firewall interfaces via ASDM","href":"/iaas/cisco-firewalls/managing-interfaces"},{"title":"Network Firewalls Configuration","href":"/iaas/cisco-firewalls/network-firewalls-configuration"},{"title":"Allowing Specific IPs to Access MacStadium via Internet","href":"/iaas/cisco-firewalls/allowing-specific-ips-to-access-macstadium-via-internet"},{"title":"Checking the Firewall Version","href":"/iaas/cisco-firewalls/checking-the-firewall-version"},{"title":"Changing the VPN \u0026 Firewall Password","href":"/iaas/cisco-firewalls/changing-the-vpn-firewall-password"},{"title":"Firewall Change Request Form","href":"/iaas/cisco-firewalls/firewall-change-request-form"},{"title":"Network Firewalls Mac Mini Connect","href":"/iaas/cisco-firewalls/network-firewalls-mac-mini-connect"},{"title":"Network Firewalls for CI Build Node: Homebrew","href":"/iaas/cisco-firewalls/network-firewalls-for-ci-build-node-homebrew"},{"title":"Network Firewalls for CI Build Node: Ansible","href":"/iaas/cisco-firewalls/network-firewalls-for-ci-build-node-ansible"},{"title":"Cloud Connect VPN through Cisco ASAv network firewalls","sidebarTitle":"Network Firewalls Cloud Connect VPN","href":"/iaas/cisco-firewalls/network-firewalls-cloud-connect-vpn"}]},{"group":"Connecting to Other Clouds","pages":[{"title":"Connect third-party clouds to MacStadium","href":"/iaas/connecting-to-other-clouds/other-clouds"},{"title":"Private Cloud Networking Setup","href":"/iaas/connecting-to-other-clouds/private-cloud-networking-setup"},{"title":"Site-to-Site VPN Config","href":"/iaas/connecting-to-other-clouds/site-to-site-vpn-config"},{"group":"AWS","pages":[{"title":"AWS-to-MacStadium VPN troubleshooting","href":"/iaas/aws/aws-troubleshooting"},{"title":"AWS-to-MacStadium VPN networking setup","href":"/iaas/aws/aws-networking-setup"},{"title":"Site-to-site VPN configuration with AWS","href":"/iaas/aws/site-to-site-vpn-configuration-with-aws"},{"title":"AWS VPN Config for Cisco ASA/ASAv","href":"/iaas/aws/aws-vpn-config-for-cisco-asaasav"},{"title":"Verify your AWS-to-MacStadium VPN connection","href":"/iaas/aws/verify-aws"}]},{"group":"Azure","pages":[{"title":"Azure-to-MacStadium VPN networking setup","href":"/iaas/azure/azure-networking-setup"},{"title":"Azure-to-MacStadium VPN troubleshooting","href":"/iaas/azure/azure-troubleshooting"},{"title":"Site-to-Site VPN Configuration with Azure","href":"/iaas/azure/site-to-site-vpn-configuration-with-azure"},{"title":"Azure VPN Config for Cisco ASA/ASAv","href":"/iaas/azure/azure-vpn-config-for-cisco-asaasav"},{"title":"Verify your Azure-to-MacStadium VPN connection","href":"/iaas/azure/verify-azure"}]},{"group":"Google Cloud Platform","pages":[{"title":"GCP-to-MacStadium VPN networking setup","href":"/iaas/google-cloud-platform/google-cloud-networking-setup"},{"title":"Site-to-site VPN configuration with GCP","href":"/iaas/google-cloud-platform/site-to-site-vpn-configuration-with-gcp"},{"title":"GCP-to-MacStadium VPN troubleshooting","href":"/iaas/google-cloud-platform/gcp-troubleshooting"},{"title":"GCP VPN Config for Cisco ASA/ASAv","href":"/iaas/google-cloud-platform/gcp-vpn-config-for-cisco-asaasav"},{"title":"Verify your GCP-to-MacStadium VPN connection","href":"/iaas/google-cloud-platform/verify-gcp"}]}]}]},{"group":"Storage","pages":[{"title":"Private Cloud Network Attached Storage","href":"/iaas/storage/private-cloud-network-attached-storage"},{"title":"Private Cloud VM restorable snapshots","href":"/iaas/storage/restorable-snapshots"}]},{"group":"x86 VMs (Private Cloud VMs)","pages":[{"title":"Private Cloud x86 VMs","href":"/iaas/x86-vms-private-cloud-vms/private-cloud-x86-vms"},{"title":"VM Creation and OS Installation","href":"/iaas/x86-vms-private-cloud-vms/vm-creation-and-os-installation"},{"title":"Creating a New VM with a Recipe","href":"/iaas/x86-vms-private-cloud-vms/creating-a-new-vm-with-a-recipe"},{"title":"Creating a New VM Manually","href":"/iaas/x86-vms-private-cloud-vms/creating-a-new-vm-manually"},{"title":"Manual Windows Installation","href":"/iaas/x86-vms-private-cloud-vms/manual-windows-installation"},{"title":"Windows 2022 Installation","href":"/iaas/x86-vms-private-cloud-vms/windows-2022-installation"}]},{"group":"FAQs","pages":[{"title":"Troubleshooting Connectivity Issues","href":"/iaas/iaas-faqs/troubleshooting-connectivity-issues"},{"title":"MacStadium REST API for server management","href":"/iaas/iaas-faqs/macstadium-api"},{"title":"Hard reboot a MacStadium Mac from the portal","href":"/iaas/iaas-faqs/reboot-your-mac"},{"title":"Root and admin access on MacStadium Mac servers","href":"/iaas/iaas-faqs/do-i-have-root-and-admin-access-to-subscription-based-mac-servers"},{"title":"Can I change the OS on my server from macOS to Linux?","href":"/iaas/iaas-faqs/can-i-change-the-os-on-my-server-from-macos-to-linux"},{"title":"Fix high CPU from coreaudiod and launchd on macOS","sidebarTitle":"coreaudiod and launchd high CPU","href":"/iaas/iaas-faqs/why-are-coreaudiod-and-launchd-using-a-high-amount-of-resources"},{"title":"What is instant provisioning and how long does it take?","href":"/iaas/iaas-faqs/what-is-instant-provisioning-and-how-long-does-it-take"},{"title":"How do I order multiple servers at one time?","href":"/iaas/iaas-faqs/how-do-i-order-multiple-servers-at-one-time"}]}]}]},"title":"Ansible quick reference - MacStadium Docs","buildId":"dpl_2oYXwqkEXirXBPk8wV1FtM5USFWi","deploymentId":"dpl_2oYXwqkEXirXBPk8wV1FtM5USFWi","dynamics":[],"chunks":[]}