Java 8 is also a requirement to set up a Jenkins agent
Finally, it is a good practice to have a bot user whose only responsibility is to build your OSX/iOS projects. This means such a user with the correct permissions should be created, so the user can build OSX/iOS projects.The recommended way to set up a CI Build Node is to use Ansible.Ansible is a configuration management tool that is used to automate the setup of a specific system. It can define the system as code. This makes changes to a specific system easier and most importantly, track who changed what and how. Users unfamiliar with Ansible, should read quickstart video. It gives a good idea of what Ansible is and how it can be used.MacStadium provides an Ansible playbook that takes care of the installation and setup of the tools need for a CI Build Node. The playbook is open-source: see ansible-playbook-osx-ci-setup on GitHub.
The playbook works for OSX High Sierra and Mojave. It is capable of installing Xcode 8 and above. If you are using an older OSX version or require an older Xcode version, refer to our manual installation guide.
The playbook is intended to be executed on the machine to set up as a CI Build Node. To execute the playbook remotely, to configure another Ansible inventory.The Xcode installation requires a UI session. This means the user that executes Ansible must be logged in. For example, if Ansible with admin is executed, then the user must make sure that this user is logged in. This is achieved via VNC or via the Web Console.
The first step is to connect to the target machine. Do this via VNC or via the Web Console, or enable Remote Login in the macOS settings, then SSH in.To download and run the setup script contained in the repository. To do that run the following commands:
The OSX-CI requires a path to a public ssh key on the target machine. The role adds the key to the authorized_keys file of the created user to enable remote login via ssh with a private key.
To use the target machine as a Jenkins agent you will need a key pair generated using the RSA algorithm.
If you do not have a ssh key pair you can create one by executing on the target machine:
The playbook requires a privilege escalation password:
ansible_become_pass
To specify a password which will be used to create a default keychain for the build user:
ci_user_default_keychain_password:
It is highly recommended not to pass the passwords in plain text.To encrypt use Ansible Vault.Add the variable to group_vars/all.yml and execute the following command:
ansible-vault encrypt group_vars/all.yml
A vault password is required and is later used to decrypt the file. Once the operation is executed the file is encrypted.
You will be prompted for the vault password that you used to encrypt the group_vars/all.yml file in the previous step.Once the execution is completed, you will have a fully-setup machine that you can use for OSX/iOS builds and for a Jenkins agent.
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},"contextual":{"options":["copy","view","claude","chatgpt","mcp","cursor","vscode"],"display":"header"},"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":"6aea349393b34960fffb9f3f","collectionId":"77601672-61d0-4eea-8a63-032ee798fa2a","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6aea349393b34960fffb9f3f"},"feedback":{"edits":false,"issues":false,"agentFeedback":true,"thumbs":true},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6aea370289f9f1cf78111f31","clientVersion":"0.0.4054","searchFilterCounts":[{"language":"default","tag":"Orka","count":102},{"language":"default","tag":"IaaS","count":63},{"language":"default","tag":"Networking","count":53},{"language":"default","tag":"MacStadium VDI","count":40},{"language":"default","tag":"MacStadium","count":27},{"language":"default","tag":"Connecting to Other Clouds","count":19},{"language":"default","tag":"Cisco Firewalls","count":17},{"language":"default","tag":"CLI Reference","count":13},{"language":"default","tag":"Resources","count":13},{"language":"default","tag":"Overview","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":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"iaas/cisco-firewalls/network-firewalls-for-ci-build-node-ansible","slug":"/iaas/cisco-firewalls/network-firewalls-for-ci-build-node-ansible","pageMetadata":{"title":"Network Firewalls for CI Build Node: Ansible","description":"Set up a macOS CI build node with the MacStadium Ansible playbook. Installs Homebrew, Xcode, fastlane, CocoaPods, and optionally Java for Jenkins.","zendesk_id":28203419090075,"href":"/iaas/cisco-firewalls/network-firewalls-for-ci-build-node-ansible"},"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: \"Set up a macOS CI build node with the MacStadium Ansible playbook. Installs Homebrew, Xcode, fastlane, CocoaPods, and optionally Java for Jenkins.\"\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`,li:`li`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,ul:`ul`,..._provideComponents(),...props.components},{CodeBlock,Heading,Note}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Note)_missingMdxReference(`Note`,true);return _jsxs(_Fragment,{children:[_jsx(_components.p,{children:`This guide details how to install the build tools needed to set up a CI Build Node using Ansible.`}),`\n`,_jsx(_components.p,{children:`Minimum requirements:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`https://brew.sh/`,children:`Homebrew`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`https://fastlane.tools/`,children:`fastlane`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`https://cocoapods.org/`,children:`CocoaPods`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`https://developer.apple.com/xcode/`,children:`Xcode`})}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.a,{href:`https://www.oracle.com/technetwork/java/javase/overview/java8-2100321.html`,children:`Java 8`}),` is also a requirement to set up a Jenkins agent`]}),`\n`]}),`\n`,_jsx(_components.p,{children:`Finally, it is a good practice to have a bot user whose only responsibility is to build your OSX/iOS projects. This means such a user with the correct permissions should be created, so the user can build OSX/iOS projects.`}),`\n`,_jsxs(_components.p,{children:[`The recommended way to set up a CI Build Node is to use `,_jsx(_components.a,{href:`https://www.ansible.com/`,children:`Ansible`}),`.`]}),`\n`,_jsxs(_components.p,{children:[`Ansible is a configuration management tool that is used to automate the setup of a specific system. It can define the system as code. This makes changes to a specific system easier and most importantly, track who changed what and how. Users unfamiliar with Ansible, should read `,_jsx(_components.a,{href:`https://www.ansible.com/resources/videos/quick-start-video`,children:`quickstart video`}),`. It gives a good idea of what Ansible is and how it can be used.`]}),`\n`,_jsxs(_components.p,{children:[`MacStadium provides an `,_jsx(_components.a,{href:`https://docs.ansible.com/ansible/latest/user_guide/playbooks_intro.html`,children:`Ansible playbook`}),` that takes care of the installation and setup of the tools need for a CI Build Node. The playbook is open-source: see `,_jsx(_components.a,{href:`https://github.com/macstadium/ansible-playbook-osx-ci-setup`,children:`ansible-playbook-osx-ci-setup on GitHub`}),`.`]}),`\n`,_jsx(Note,{children:_jsx(_components.p,{children:`The playbook works for OSX High Sierra and Mojave. It is capable of installing Xcode 8 and above. If you are using an older OSX version or require an older Xcode version, refer to our manual installation guide.`})}),`\n`,_jsxs(_components.p,{children:[`The playbook is intended to be executed on the machine to set up as a CI Build Node. To execute the playbook remotely, to configure another `,_jsx(_components.a,{href:`https://docs.ansible.com/ansible/2.4/intro_inventory.html`,children:`Ansible inventory`}),`.`]}),`\n`,_jsx(_components.p,{children:`The Xcode installation requires a UI session. This means the user that executes Ansible must be logged in. For example, if Ansible with admin is executed, then the user must make sure that this user is logged in. This is achieved via VNC or via the Web Console.`}),`\n`,_jsx(Heading,{level:`2`,id:`ansible-playbook`,children:`Ansible Playbook`}),`\n`,_jsx(Heading,{level:`3`,id:`initial-setup`,children:`Initial setup`}),`\n`,_jsx(_components.p,{children:`The first step is to connect to the target machine. Do this via VNC or via the Web Console, or enable Remote Login in the macOS settings, then SSH in.`}),`\n`,_jsxs(_components.p,{children:[`To download and run the setup script contained in the `,_jsx(_components.a,{href:`https://github.com/macstadium/ansible-playbook-osx-ci-setup`,children:`repository`}),`. To do that run the following commands:`]}),`\n`,_jsx(CodeBlock,{numberOfLines:`4`,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:`4`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`curl https://raw.githubusercontent.com/macstadium/ansible-playbook-osx-ci-setup/master/scripts/ansible_setup.sh -o ~/ansible_setup.sh `})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`chmod +x ~/ansible_setup.sh `})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`sudo ~/ansible_setup.sh `})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(_components.p,{children:`This installs:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Xcode Command Line Tools`}),`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`https://pip.pypa.io/en/stable/`,children:`pip`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`https://www.ansible.com/`,children:`Ansible`})}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`Now clone the `,_jsx(_components.a,{href:`https://github.com/macstadium/ansible-playbook-osx-ci-setup`,children:`repository`}),` containing the Ansible playbook.`]}),`\n`,_jsx(_components.p,{children:`This is done by running:`}),`\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:`git clone https://github.com/macstadium/ansible-playbook-osx-ci-setup.git`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(_components.p,{children:`This playbook consists of two roles:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.a,{href:`https://github.com/macstadium/ansible-role-osx-ci`,children:`OSX-CI`}),` - Installs all common tooling and creates a user capable of running build jobs`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.a,{href:`https://github.com/macstadium/ansible-role-xcode`,children:`Xcode`}),` - Installs and configures Xcode`]}),`\n`]}),`\n`,_jsx(_components.p,{children:`To install these two roles execute:`}),`\n`,_jsx(CodeBlock,{numberOfLines:`3`,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:`3`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`cd ansible-playbook-osx-ci-setup `})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`ansible-galaxy install -r requirements.yml`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(Heading,{level:`2`,id:`osx-ci-role-requirements`,children:`OSX-CI Role Requirements`}),`\n`,_jsxs(_components.p,{children:[`The `,_jsx(_components.a,{href:`https://github.com/macstadium/ansible-role-osx-ci`,children:`OSX-CI`}),` requires a path to a public ssh key on the target machine. The role adds the key to the `,_jsx(_components.code,{children:`authorized_keys`}),` file of the created user to enable remote login via ssh with a private key.`]}),`\n`,_jsx(Note,{children:_jsxs(_components.p,{children:[`To use the target machine as a Jenkins agent you will need a key pair generated using the `,_jsx(_components.code,{children:`RSA`}),` algorithm.`]})}),`\n`,_jsx(_components.p,{children:`If you do not have a ssh key pair you can create one by executing on the target machine:`}),`\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:`ssh-keygen -m PEM -t rsa -C \"build machine key\" -f \"buildMachine_rsa\"`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(Note,{children:_jsx(_components.p,{children:`For increased security, it is recommended to associate a passphrase to the private key.`})}),`\n`,_jsx(_components.p,{children:`The command creates two files:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`buildMachine_rsa - This is the private key. Keep it safe and `,_jsx(_components.strong,{children:`do not`}),` share it with anyone.`]}),`\n`,_jsx(_components.li,{children:`buildMachine_rsa.pub - This is the public key.`}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`To copy the private key to a secure machine, use `,_jsx(_components.code,{children:`scp`}),`. This command executes copy over SSH; 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:`scp /path-to-buildMachine_rsa/ username@host:/path-to-location-on-secure-machine`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(Heading,{level:`2`,id:`xcode-role-requirements`,children:`Xcode Role Requirements`}),`\n`,_jsxs(_components.p,{children:[`The `,_jsx(_components.a,{href:`https://github.com/macstadium/ansible-role-xcode`,children:`Xcode`}),` needs a Xcode xip file to be present on the target machine. Get the version needed from the `,_jsx(_components.a,{href:`https://developer.apple.com/download/more/`,children:`Apple Downloads Page`}),`.`]}),`\n`,_jsx(Heading,{level:`2`,id:`password-encryption`,children:`Password Encryption`}),`\n`,_jsx(_components.p,{children:`The playbook requires a privilege escalation password:`}),`\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_become_pass`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(_components.p,{children:`To specify a password which will be used to create a default keychain for the build user:`}),`\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:`ci_user_default_keychain_password:`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(_components.p,{children:`It is highly recommended not to pass the passwords in plain text.`}),`\n`,_jsxs(_components.p,{children:[`To encrypt use `,_jsx(_components.a,{href:`https://docs.ansible.com/ansible/latest/user_guide/playbooks_vault.html`,children:`Ansible Vault`}),`.`]}),`\n`,_jsxs(_components.p,{children:[`Add the variable to `,_jsx(_components.code,{children:`group_vars/all.yml`}),` and execute the following command:`]}),`\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-vault encrypt group_vars/all.yml`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(_components.p,{children:`A vault password is required and is later used to decrypt the file. Once the operation is executed the file is encrypted.`}),`\n`,_jsx(Heading,{level:`2`,id:`running-the-ansible-playbook`,children:`Running the Ansible Playbook`}),`\n`,_jsxs(_components.p,{children:[`To execute the Ansible playbook you can use the following command by replacing the `,_jsx(_components.code,{children:`{placeholders}`}),` with the correct values:`]}),`\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 site.yml -i inventory -e ansible_user={AdminUser} -e xcode_xip_location={XcodeLocation} -e xcode_major_version={XcodeMajorVersion} -e ci_user_public_key_location={PublicSshKeyLocation} --ask-vault-pass`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsxs(_components.p,{children:[`You will be prompted for the vault password that you used to encrypt the `,_jsx(_components.code,{children:`group_vars/all.yml`}),` file in the previous step.`]}),`\n`,_jsx(_components.p,{children:`Once the execution is completed, you will have a fully-setup machine that you can use for OSX/iOS builds and for a Jenkins agent.`})]})}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":"Network Firewalls for CI Build Node: Ansible","description":"Set up a macOS CI build node with the MacStadium Ansible playbook. Installs Homebrew, Xcode, fastlane, CocoaPods, and optionally Java for Jenkins.","zendesk_id":28203419090075,"href":"/iaas/cisco-firewalls/network-firewalls-for-ci-build-node-ansible"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Ansible Playbook","slug":"ansible-playbook","depth":2,"children":[{"title":"Initial setup","slug":"initial-setup","depth":3,"children":[]}]},{"title":"OSX-CI Role Requirements","slug":"osx-ci-role-requirements","depth":2,"children":[]},{"title":"Xcode Role Requirements","slug":"xcode-role-requirements","depth":2,"children":[]},{"title":"Password Encryption","slug":"password-encryption","depth":2,"children":[]},{"title":"Running the Ansible Playbook","slug":"running-the-ansible-playbook","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"macstadiuminc","siteName":"MacStadium Docs","title":"Network Firewalls for CI Build Node: Ansible - MacStadium Docs","relatedPagesConfig":{"enabled":true,"limit":5,"mode":"automatic"},"contextualStarterQuestions":[{"_id":"6ae8bbeaf5f4e67eeb01260a","deploymentId":"69af00bd5a04945e653662f0","questionText":"What tools does Ansible install?","status":"active","generatedBy":"contextual","path":"iaas/cisco-firewalls/network-firewalls-for-ci-build-node-ansible","createdAt":"2026-11-02T16:35:54.564Z","updatedAt":"2026-11-02T16:35:54.564Z","__v":0},{"_id":"6ae8bbeaf5f4e67eeb012609","deploymentId":"69af00bd5a04945e653662f0","questionText":"How do I set up a CI build node?","status":"active","generatedBy":"contextual","path":"iaas/cisco-firewalls/network-firewalls-for-ci-build-node-ansible","createdAt":"2026-11-02T16:35:54.564Z","updatedAt":"2026-11-02T16:35:54.564Z","__v":0},{"_id":"6ae8bbeaf5f4e67eeb01260b","deploymentId":"69af00bd5a04945e653662f0","questionText":"Do I need Java for Jenkins setup?","status":"active","generatedBy":"contextual","path":"iaas/cisco-firewalls/network-firewalls-for-ci-build-node-ansible","createdAt":"2026-11-02T16:35:54.564Z","updatedAt":"2026-11-02T16:35:54.564Z","__v":0}],"navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-11-02T16:35:48.020Z","originalFileLocation":"iaas/cisco-firewalls/network-firewalls-for-ci-build-node-ansible.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=\"Set up a macOS CI build node with the MacStadium Ansible playbook. Installs Homebrew, Xcode, fastlane, CocoaPods, and optionally Java for Jenkins.\">\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=\"Network Firewalls for CI Build Node: Ansible - MacStadium Docs\">\u003cmeta data-mint-head property=\"og:description\" content=\"Set up a macOS CI build node with the MacStadium Ansible playbook. Installs Homebrew, Xcode, fastlane, CocoaPods, and optionally Java for Jenkins.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"MacStadium Docs\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.macstadium.com/iaas/cisco-firewalls/network-firewalls-for-ci-build-node-ansible\">\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=Cisco+Firewalls\u0026amp;title=Network+Firewalls+for+CI+Build+Node%3A+Ansible\u0026amp;description=Set+up+a+macOS+CI+build+node+with+the+MacStadium+Ansible+playbook.+Installs+Homebrew%2C+Xcode%2C+fastlane%2C+CocoaPods%2C+and+optionally+Java+for+Jenkins.\u0026amp;theme=a2b304edaac2dce38d1c6db6\u0026amp;signature=b23a4c2216bbb5ecaf5bd50738b311db5cd664dd0d2ac064e9edc66cdcaf45ec\">\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=\"Network Firewalls for CI Build Node: Ansible - MacStadium Docs\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Set up a macOS CI build node with the MacStadium Ansible playbook. Installs Homebrew, Xcode, fastlane, CocoaPods, and optionally Java for Jenkins.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://macstadiuminc.mintlify.app/_mintlify/api/og/v2?division=Cisco+Firewalls\u0026amp;title=Network+Firewalls+for+CI+Build+Node%3A+Ansible\u0026amp;description=Set+up+a+macOS+CI+build+node+with+the+MacStadium+Ansible+playbook.+Installs+Homebrew%2C+Xcode%2C+fastlane%2C+CocoaPods%2C+and+optionally+Java+for+Jenkins.\u0026amp;theme=a2b304edaac2dce38d1c6db6\u0026amp;signature=b23a4c2216bbb5ecaf5bd50738b311db5cd664dd0d2ac064e9edc66cdcaf45ec\">\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/iaas/cisco-firewalls/network-firewalls-for-ci-build-node-ansible\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/iaas/cisco-firewalls/network-firewalls-for-ci-build-node-ansible.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/iaas/cisco-firewalls/network-firewalls-for-ci-build-node-ansible#webpage\",\"url\":\"https://docs.macstadium.com/iaas/cisco-firewalls/network-firewalls-for-ci-build-node-ansible\",\"name\":\"Network Firewalls for CI Build Node: Ansible\",\"description\":\"Set up a macOS CI build node with the MacStadium Ansible playbook. Installs Homebrew, Xcode, fastlane, CocoaPods, and optionally Java for Jenkins.\",\"dateModified\":\"2026-11-02T16:35:48.020Z\",\"isPartOf\":{\"@id\":\"https://docs.macstadium.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.macstadium.com/iaas/cisco-firewalls/network-firewalls-for-ci-build-node-ansible#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.macstadium.com/iaas/cisco-firewalls/network-firewalls-for-ci-build-node-ansible#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"IaaS\",\"item\":\"https://docs.macstadium.com/iaas/iaas-overview/infrastructure-as-a-service-iaas\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Networking\",\"item\":\"https://docs.macstadium.com/iaas/networking/networking-overview\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Cisco Firewalls\",\"item\":\"https://docs.macstadium.com/iaas/cisco-firewalls/network-onboarding-form\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"Network Firewalls for CI Build Node: Ansible\",\"item\":\"https://docs.macstadium.com/iaas/cisco-firewalls/network-firewalls-for-ci-build-node-ansible\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.macstadium.com/iaas/cisco-firewalls/network-firewalls-for-ci-build-node-ansible#article\",\"headline\":\"Network Firewalls for CI Build Node: Ansible\",\"name\":\"Network Firewalls for CI Build Node: Ansible\",\"description\":\"Set up a macOS CI build node with the MacStadium Ansible playbook. Installs Homebrew, Xcode, fastlane, CocoaPods, and optionally Java for Jenkins.\",\"url\":\"https://docs.macstadium.com/iaas/cisco-firewalls/network-firewalls-for-ci-build-node-ansible\",\"mainEntityOfPage\":{\"@id\":\"https://docs.macstadium.com/iaas/cisco-firewalls/network-firewalls-for-ci-build-node-ansible#webpage\"},\"dateModified\":\"2026-11-02T16:35:48.020Z\",\"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":"Use these docs with AI tools","href":"/macstadium/macstadium-overview/use-these-docs-with-ai-tools"},{"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":"Service desk guide for MacStadium Macs","sidebarTitle":"Service desk guide","href":"/macstadium/support/service-desk-guide"},{"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":"Manage namespace access to Orka cluster resources","href":"/orka/orka-cluster-access/orka-cluster-manage-access-to-resources"},{"title":"Manage Orka service accounts for CI/CD","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 remote build execution with Orka: quick start","href":"/orka/orka-devops-integrations/bazel-rbe-quickstart"},{"title":"AI agent integration with the Orka CLI","sidebarTitle":"Orka CLI 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":"Manage OCI registry credentials in Orka","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":"Save Orka VM changes to a local or OCI image","href":"/orka/oci-images/oci-images-preserve-changes"},{"title":"Building a hardened custom image","href":"/orka/oci-images/building-a-hardened-custom-image"},{"title":"Use 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":"Orka Kubernetes custom resource definition 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":"Orka CLI OCI registry credential commands","href":"/orka/orka-cli-reference/oci-registry-integration"},{"title":"Orka CLI VM config templates and deployment","href":"/orka/orka-cli-reference/vm-deployment-and-configuration"},{"title":"Save, commit, and push Orka VM images with the CLI","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 cluster upgrades with the CLI","sidebarTitle":"Cluster upgrades","href":"/orka/orka-cli-reference/upgrade-management"},{"title":"Orka CLI command quick reference","sidebarTitle":"Command quick reference","href":"/orka/orka-cli-reference/command-quick-reference"},{"title":"Orka CLI output formats and built-in 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":"VM access ports","href":"/orka/orka-resources/vm-access-ports"},{"title":"Orka VM Tools for guest services on ARM VMs","href":"/orka/orka-resources/vm-tools"},{"title":"Orka cluster scheduling and VM isolation settings","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":"Orka CLI, API, and Web UI feature parity matrix","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":"Access Orka on AWS in a private VPC with SSM","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":"Orka 3.1+ backward compatibility for 2.4.x and 3.0.x","href":"/orka/orka-cluster-migration-from-24-3x/24x-and-30x-to-31x-and-above-backward-compatibility"},{"title":"What persists when migrating Orka 2.4.x to 3.0.0","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":"Orka 2.4.x to 3.0.0 CLI command mapping","href":"/orka/orka-cluster-migration-from-24-3x/24x-to-300-cli-mapping"},{"title":"Orka 2.4.x to 3.0.0 API endpoint 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":"MacStadium VDI architecture and deployment models","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","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","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","description":"Set up a macOS CI build node on MacStadium with Homebrew: install Ruby, fastlane, CocoaPods, and Xcode, with bot user best practices for iOS builds.","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":"Remote-access VPN through Cisco ASAv network firewalls","sidebarTitle":"Remote-access VPN","description":"Connect to your MacStadium Orka cluster via Cisco ASAv VPN with OpenConnect or Cisco AnyConnect. Requires the server address and credentials from My Cloud.","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":"Cloud Connect: dedicated circuits to AWS, Azure, and Google Cloud","sidebarTitle":"Cloud Connect","href":"/iaas/connecting-to-other-clouds/cloud-connect"},{"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":"How do I find the hardware serial number for my service?","href":"/iaas/iaas-faqs/how-do-i-find-the-hardware-serial-number-for-my-service"},{"title":"Can I attach an external drive to my Mac?","href":"/iaas/iaas-faqs/can-i-attach-an-external-drive-to-my-mac"},{"title":"How do I disable SIP on my Mac?","href":"/iaas/iaas-faqs/how-do-i-disable-sip-on-my-mac"}]}]}]},"basePath":"","title":"Network Firewalls for CI Build Node: Ansible - MacStadium Docs","buildId":"dpl_345ReqzYaAjzS9QpeJemsKdb7KDj","deploymentId":"dpl_345ReqzYaAjzS9QpeJemsKdb7KDj","dynamics":[],"chunks":[]}