<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Armory Docs – Install Armory Continuous Deployment for Spinnaker in Air-Gapped Environments</title><link>/continuous-deployment/installation/guide/air-gapped/</link><description>Recent content in Install Armory Continuous Deployment for Spinnaker in Air-Gapped Environments on Armory Docs</description><generator>Hugo -- gohugo.io</generator><atom:link href="/continuous-deployment/installation/guide/air-gapped/index.xml" rel="self" type="application/rss+xml"/><item><title>Continuous-Deployment: Air-Gapped with the Armory Operator</title><link>/continuous-deployment/installation/guide/air-gapped/ag-operator/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/continuous-deployment/installation/guide/air-gapped/ag-operator/</guid><description>
&lt;h2 id="overview">Overview&lt;/h2>
&lt;p>This guide details how you can host the Armory Continuous Deployment Bill of Materials (BOM) and Docker images, as well as the Armory Operator Docker images, in your air-gapped environment. The steps at a high level are:&lt;/p>
&lt;ol>
&lt;li>&lt;a href="#clone-the-spinnaker-kustomize-patches-repo">Clone the &lt;code>spinnaker-kustomize-patches&lt;/code> repo&lt;/a>, which contains helper scripts as well as Kustomize patches.&lt;/li>
&lt;li>&lt;a href="#deploy-minio-for-storage">Deploy S3-compatible MinIO&lt;/a> to store the BOM.&lt;/li>
&lt;li>&lt;a href="#download-the-bom">Download the BOM&lt;/a>.&lt;/li>
&lt;li>&lt;a href="#copy-the-bom">Copy the BOM&lt;/a> to your MinIO bucket.&lt;/li>
&lt;li>&lt;a href="#host-the-armory-enterprise-docker-images">Host Armory Continuous Deployment Docker images&lt;/a> in your private Docker registry.&lt;/li>
&lt;li>&lt;a href="#download-the-armory-operator">Download the Armory Operator&lt;/a>.&lt;/li>
&lt;li>&lt;a href="#host-the-armory-operator-docker-images">Host Armory Operator Docker images&lt;/a> in your private Docker registry.&lt;/li>
&lt;li>&lt;a href="#update-armory-operator-configuration">Update Armory Operator configuration&lt;/a>.&lt;/li>
&lt;li>&lt;a href="#deploy-the-armory-operator">Deploy the Armory Operator&lt;/a> in your Kubernetes cluster.&lt;/li>
&lt;/ol>
&lt;h2 id="before-you-begin">Before you begin&lt;/h2>
&lt;ul>
&lt;li>You are familiar with the &lt;a href="/continuous-deployment/installation/armory-operator/">Armory Operator&lt;/a> and &lt;a href="/continuous-deployment/installation/armory-operator/op-config-kustomize/">configuring Armory Continuous Deployment using Kustomize patches&lt;/a>.&lt;/li>
&lt;li>You have read the &lt;a href="/continuous-deployment/installation/guide/air-gapped/">introduction&lt;/a> to air-gapped environments.&lt;/li>
&lt;li>You have public internet access.&lt;/li>
&lt;li>You have administrator access to your Kubernetes cluster.&lt;/li>
&lt;li>You have created two namespaces in Kubernetes: &lt;code>spinnaker&lt;/code> and &lt;code>spinnaker-operator&lt;/code>.&lt;/li>
&lt;li>You have access to a private Docker registry with credentials to push images.&lt;/li>
&lt;li>You have installed the &lt;a href="https://aws.amazon.com/cli/">AWS CLI&lt;/a>.&lt;/li>
&lt;li>You have installed &lt;a href="https://mikefarah.gitbook.io/yq/#install">&lt;code>yq&lt;/code>&lt;/a> &lt;strong>version 4+&lt;/strong>. This is used by helper scripts.&lt;/li>
&lt;/ul>
&lt;h2 id="clone-the-spinnaker-kustomize-patches-repo">Clone the &lt;code>spinnaker-kustomize-patches&lt;/code> repo&lt;/h2>
&lt;p>Armory maintains the &lt;code>spinnakaker-kustomize-patches&lt;/code> &lt;a href="https://github.com/armory/spinnaker-kustomize-patches">repo&lt;/a>, which contains common configuration options for Armory Continuous Deployment or Spinnaker as well as helper scripts. The patches in this repo give you a reliable starting point when adding and removing features.&lt;/p>
&lt;blockquote>
&lt;p>Configuration in this repository is meant for Armory Continuous Delivery. To
make it compatible with Spinnaker instead, apply the
&lt;code>utilities/switch-to-oss.yml&lt;/code> patch.&lt;/p>
&lt;/blockquote>
&lt;p>To start, create your own copy of the &lt;code>spinnaker-kustomize-patches&lt;/code> repository
by clicking the &lt;code>Use this template&lt;/code> button:&lt;/p>
&lt;figure>
&lt;img src="mages/kustomize-patches-repo-clone.png"/>
&lt;/figure>
&lt;blockquote>
&lt;p>If you intend to update your copy from upstream, use &lt;strong>Fork&lt;/strong> instead. See &lt;a href="https://docs.github.com/en/github/creating-cloning-and-archiving-repositories/creating-a-repository-from-a-template">Creating a repository from a template&lt;/a> for the difference between &lt;strong>Use this template&lt;/strong> and &lt;strong>Fork&lt;/strong>.&lt;/p>
&lt;/blockquote>
&lt;p>Once created, clone this repository to your local machine.&lt;/p>
&lt;h2 id="deploy-minio-for-storage">Deploy MinIO for storage&lt;/h2>
&lt;p>Now that you have cloned the &lt;code>spinnaker-kustomize-patches&lt;/code> repo, you need to
create a storage bucket to host the BOM. &lt;a href="https://min.io">MinIO&lt;/a> is a good
choice for the bucket since it&amp;rsquo;s S3 compatible and runs as a pod in Kubernetes.
A ready to use MinIO component can be referenced in
&lt;code>spinnaker-kustomize-patches/core/persistence/in-cluster&lt;/code>.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6272a4"># Your kustomization.yml file&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">resources&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - path/to/spinnaker-kustomize-patches/core/persistence/in-cluster/minio.yml
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>When you look at the content of the &lt;code>minio.yml&lt;/code> manifest, you see that MinIO
needs a secret key called &lt;code>minioAccessKey&lt;/code>:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">env&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6272a4"># MinIO access key and secret key&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">name&lt;/span>: MINIO_ACCESS_KEY
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">value&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;minio&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">name&lt;/span>: MINIO_SECRET_KEY
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">valueFrom&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">secretKeyRef&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">name&lt;/span>: minio-secret-key
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">key&lt;/span>: minioAccessKey
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;code>minioAccessKey&lt;/code> is stored in a Kubernetes secret called &lt;code>minio-secret-key&lt;/code>.
You create the secret by adding a generator to your &lt;code>kustomization.yml&lt;/code> file.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">secretGenerator&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">name&lt;/span>: minio-secret-key
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">options&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">disableNameSuffixHash&lt;/span>: &lt;span style="color:#ff79c6">true&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">literals&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - minioAccessKey=MyAccessKeyValue
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Consult the &lt;a href="https://kubectl.docs.kubernetes.io/references/kustomize/builtins/">kustomize
documentation&lt;/a>
for more ways to configure secrets.&lt;/p>
&lt;ol>
&lt;li>
&lt;p>Deploy MinIO with your infrastructure:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>kubectl apply -k .
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;/ol>
&lt;h2 id="download-the-bom">Download the BOM&lt;/h2>
&lt;p>Decide which Armory Continuous Deployment version you want to deploy. Check &lt;a href="/continuous-deployment/release-notes/rn-armory-spinnaker/">Armory Release Notes&lt;/a> for the latest supported versions.&lt;/p>
&lt;p>The &lt;code>spinnaker-kustomize-patches/utilities/airgap&lt;/code> directory contains helper scripts for air-gapped environments. Use &lt;code>bomdownloader.sh&lt;/code> to download the version of the Armory Continuous Deployment BOM that you require.&lt;/p>
&lt;p>&lt;code>bomdownloader.sh&lt;/code> takes two command line parameters in the following order:&lt;/p>
&lt;ol>
&lt;li>Armory Continuous Deployment version; for example, 2.34.&lt;/li>
&lt;li>The name of your Docker registry; for example, &lt;code>my.jfrog.io/myteam/armory&lt;/code>.&lt;/li>
&lt;/ol>
&lt;p>The script creates a &lt;code>halconfig&lt;/code> folder, downloads the necessary files, and updates the BOM to use the Docker registry you specified. To download the BOM:&lt;/p>
&lt;ol>
&lt;li>
&lt;p>Switch to the &lt;code>spinnaker-kustomize-patches&lt;/code> directory.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Run &lt;code>bomdownloader.sh &amp;lt;armory-version&amp;gt; &amp;lt;docker-registry&amp;gt;&lt;/code>. For example, if you want to download the 2.25.0 BOM and your registry is &lt;code>my.jfrog.io/myteam/armory&lt;/code>:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>./utilities/airgap/bomdownloader.sh 2.25.0 my.jfrog.io/myteam/armory
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Output is similar to:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>download: s3://halconfig/versions.yml to halconfig/versions.yml
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>download: s3://halconfig/bom/2.25.0.yml to halconfig/bom/2.25.0.yml
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>download: s3://halconfig/profiles/clouddriver/2.25.3/clouddriver.yml to halconfig/profiles/clouddriver/2.25.3/clouddriver.yml
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>...
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Version 2.25.0 is ready to be uploaded to your private bucket.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>For example, with &lt;span style="color:#f1fa8c">&amp;#34;aws cp --recursive&amp;#34;&lt;/span> or &lt;span style="color:#f1fa8c">&amp;#34;gsutil cp -m -r ...&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;/ol>
&lt;p>Inspecting your file system, you should see the new &lt;code>halconfig&lt;/code> folder. For example, if you specified Armory Continuous Deployment v2.25.0, your file system should be:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>halconfig
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ┣ bom
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ┃ ┗ 2.25.0.yml
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ┣ profiles
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ┃ ┣ clouddriver
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ┃ ┣ dinghy
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ┃ ┣ &lt;span style="color:#8be9fd;font-style:italic">echo&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ┃ ┣ fiat
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ┃ ┣ front50
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ┃ ┣ gate
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ┃ ┣ igor
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ┃ ┣ kayenta
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ┃ ┣ monitoring-daemon
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ┃ ┣ orca
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ┃ ┣ rosco
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ┃ ┗ terraformer
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ┗ versions.yml
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Each subdirectory in the &lt;code>profiles&lt;/code> directory contains a &lt;code>&amp;lt;service-name&amp;gt;.yml&lt;/code> profile file.&lt;/p>
&lt;p>If you need to change your Docker registry, you can manually edit the &lt;code>&amp;lt;armory-version&amp;gt;.yml&lt;/code> file located under &lt;code>halconfig/bom&lt;/code>. Update the value for the key &lt;code>artifactSources.dockerRegistry&lt;/code>.&lt;/p>
&lt;div class="highlight">&lt;div style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;display:grid;">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;display:grid;">&lt;code>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 1
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 2
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 3
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 4
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 5
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 6
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 7
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 8
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 9
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">10
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">11
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">12
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">13
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">14
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">15
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">16
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">17
&lt;/span>&lt;span style="background-color:#3d3f4a">&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">18
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;display:grid;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">version&lt;/span>: &lt;span style="color:#bd93f9">2.25.0&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">timestamp&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;2021-03-25 09:28:32&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">services&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">clouddriver&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">commit&lt;/span>: de3aa3f0
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">version&lt;/span>: &lt;span style="color:#bd93f9">2.25.3&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">deck&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">commit&lt;/span>: 516bcf0a
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">version&lt;/span>: &lt;span style="color:#bd93f9">2.25.3&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ...
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">terraformer&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">commit&lt;/span>: 5dcae243
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">version&lt;/span>: &lt;span style="color:#bd93f9">2.25.0&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">dependencies&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">redis&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">version&lt;/span>: &lt;span style="color:#bd93f9">2&lt;/span>:&lt;span style="color:#bd93f9">2.8.4-2&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">artifactSources&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex; background-color:#3d3f4a">&lt;span> &lt;span style="color:#ff79c6">dockerRegistry&lt;/span>: my.jfrog.io/myteam/armory&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>
&lt;h2 id="copy-the-bom">Copy the BOM&lt;/h2>
&lt;p>With the MinIO pod running, copy your local BOM into your MinIO bucket.&lt;/p>
&lt;ol>
&lt;li>
&lt;p>Set environment variables:&lt;/p>
&lt;p>Update the &lt;code>AWS_SECRET_ACCESS_KEY&lt;/code> with the &lt;code>minioAccessKey&lt;/code> value you created in the &lt;a href="#deploy-minio-to-host-the-bom">Deploy MinIO to host the BOM&lt;/a> section.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8be9fd;font-style:italic">export&lt;/span> &lt;span style="color:#8be9fd;font-style:italic">AWS_ACCESS_KEY_ID&lt;/span>&lt;span style="color:#ff79c6">=&lt;/span>minio
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8be9fd;font-style:italic">export&lt;/span> &lt;span style="color:#8be9fd;font-style:italic">AWS_SECRET_ACCESS_KEY&lt;/span>&lt;span style="color:#ff79c6">=&lt;/span>&amp;lt;minioAccessKey&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>Port forward the MinIO service:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>kubectl port-forward svc/minio &lt;span style="color:#bd93f9">9000&lt;/span> -n spinnaker
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>Copy your local BOM to MinIO:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>aws s3 mb s3://halconfig --endpoint&lt;span style="color:#ff79c6">=&lt;/span>http://localhost:9000
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>aws s3 cp --recursive halconfig s3://halconfig --endpoint&lt;span style="color:#ff79c6">=&lt;/span>http://localhost:9000
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;/ol>
&lt;h2 id="host-the-armory-continuous-deployment-docker-images">Host the Armory Continuous Deployment Docker images&lt;/h2>
&lt;p>There are two options for hosting the Docker images: 1) configure your Docker registry as a proxy for &lt;code>docker.io/armory&lt;/code>; or 2) download the images and push them to your private Docker registry.&lt;/p>
&lt;h3 id="proxy-to-dockerioarmory">Proxy to &lt;code>docker.io/armory&lt;/code>&lt;/h3>
&lt;p>Configure &lt;code>docker.io/armory&lt;/code> as a remote repository within your private Docker registry. If you are using JFrog Artifactory, you can follow the instructions in the &lt;a href="https://www.jfrog.com/confluence/display/JFROG/Docker+Registry#DockerRegistry-RemoteDockerRepositories">Remote Docker Repositories&lt;/a> section of the JFrog docs.&lt;/p>
&lt;h3 id="download-images">Download images&lt;/h3>
&lt;p>You can use the &lt;code>imagedownloader.sh&lt;/code> helper script in the &lt;code>spinnaker-kustomize-patches/utilities/airgap&lt;/code> directory to download and push the images to your private Docker registry.&lt;/p>
&lt;p>The execution format is:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>./utilities/airgap/imagedownloader.sh &amp;lt;armory-version&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;code>&amp;lt;armory-version&amp;gt;&lt;/code> is the version you specified in the &lt;a href="#download-the-bom">Download the BOM&lt;/a> section.&lt;/p>
&lt;p>When you run &lt;code>imagedownloader.sh&lt;/code> from the &lt;code>spinnaker-patches-repository&lt;/code> directory, the script looks for the downloaded BOM and proceeds to download, tag, and push the images for that particular version to the private Docker registry you specified when you ran &lt;code>bomdownloader.sh&lt;/code>.&lt;/p>
&lt;h2 id="download-the-armory-operator">Download the Armory Operator&lt;/h2>
&lt;p>Download and unpack the latest Armory Operator release into the &lt;code>spinnaker-kustomize-patches/operator&lt;/code> folder. Run the following command from your &lt;code>spinnaker-kustomize-patches/operator&lt;/code> directory:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>bash -c &lt;span style="color:#f1fa8c">&amp;#39;curl -L https://github.com/armory-io/spinnaker-operator/releases/latest/download/manifests.tgz | tar -xz&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>You should see the following directory structure in the &lt;code>spinnaker-kustomize-patches/operator&lt;/code> folder:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>operator
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ┣ deploy
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ┃ ┣ crds
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ┃ ┣ openshift
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ┃ ┣ operator
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ┃ ┗ spinnaker
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ┣ halyard-local.yml
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ┣ kustomization.yml
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ┣ patch-config.yaml
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ┗ patch-validations.yaml
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="host-the-armory-operator-docker-images">Host the Armory Operator Docker images&lt;/h2>
&lt;p>You can find the &lt;code>operatorimageupdate.sh&lt;/code> script in &lt;code>spinnaker-kustomize-patches/utilities/airgap&lt;/code>. The script does the following:&lt;/p>
&lt;ol>
&lt;li>Downloads the Armory Operator Docker images and updates their names.&lt;/li>
&lt;li>Pushes the images to the Docker registry you specify in the command line.&lt;/li>
&lt;li>Updates the Armory Operator&amp;rsquo;s &lt;code>kustomization.yml&lt;/code> with the new image names.&lt;/li>
&lt;/ol>
&lt;p>From the &lt;code>spinnaker-kustomize-patches/operator&lt;/code> folder, execute the &lt;code>operatorimageupdate.sh&lt;/code> script:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>../utilities/airgap/operatorimageupdate.sh &amp;lt;your-docker-registry&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="update-armory-operator-configuration">Update Armory Operator configuration&lt;/h2>
&lt;h3 id="update-minio-secret-access-key">Update MinIO secret access key&lt;/h3>
&lt;p>You also need to update Armory Operator configuration to include the secret access key for MinIO.
Locate &lt;code>spinnaker-kustomize-patches/operator/patch-config.yml&lt;/code> and update the &lt;code>AWS_SECRET_ACCESS_KEY&lt;/code> value with the &lt;code>minioAccessKey&lt;/code> value you created in the &lt;a href="#deploy-minio-to-host-the-bom">Deploy MinIO to host the BOM&lt;/a> section.&lt;/p>
&lt;div class="highlight">&lt;div style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;display:grid;">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;display:grid;">&lt;code>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 1
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 2
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 3
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 4
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 5
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 6
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 7
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 8
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 9
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">10
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">11
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">12
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">13
&lt;/span>&lt;span style="background-color:#3d3f4a">&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">14
&lt;/span>&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">15
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">16
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">17
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">18
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">19
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">20
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">21
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">22
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">23
&lt;/span>&lt;span style="background-color:#3d3f4a">&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">24
&lt;/span>&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">25
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">26
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">27
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">28
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">29
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">30
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">31
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">32
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">33
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;display:grid;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">apiVersion&lt;/span>: apps/v1
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">kind&lt;/span>: Deployment
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">metadata&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">name&lt;/span>: spinnaker-operator
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">spec&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">template&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">spec&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">containers&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">name&lt;/span>: spinnaker-operator
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">env&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">name&lt;/span>: AWS_ACCESS_KEY_ID &lt;span style="color:#6272a4"># you can choose to use a secret for these values&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">value&lt;/span>: minio
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">name&lt;/span>: AWS_SECRET_ACCESS_KEY &lt;span style="color:#6272a4"># you can choose to use a secret for these values&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex; background-color:#3d3f4a">&lt;span> &lt;span style="color:#ff79c6">value&lt;/span>: changeme
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">volumeMounts&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">mountPath&lt;/span>: /opt/spinnaker/config/halyard.yml
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">name&lt;/span>: operator-config
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">subPath&lt;/span>: halyard-local.yml
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">name&lt;/span>: halyard
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">env&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">name&lt;/span>: AWS_ACCESS_KEY_ID &lt;span style="color:#6272a4"># you can choose to use a secret for these values&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">value&lt;/span>: minio
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">name&lt;/span>: AWS_SECRET_ACCESS_KEY &lt;span style="color:#6272a4"># you can choose to use a secret for these values&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex; background-color:#3d3f4a">&lt;span> &lt;span style="color:#ff79c6">value&lt;/span>: changeme
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">volumeMounts&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">mountPath&lt;/span>: /opt/spinnaker/config/halyard-local.yml
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">name&lt;/span>: operator-config
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">subPath&lt;/span>: halyard-local.yml
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">volumes&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">configMap&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">defaultMode&lt;/span>: &lt;span style="color:#bd93f9">420&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">name&lt;/span>: operator-config
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">name&lt;/span>: operator-config&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>
&lt;h3 id="update-halyard-configuration">Update Halyard configuration&lt;/h3>
&lt;p>The Armory Operator uses its own Halyard installation to deploy and manage Armory Continuous Deployment. You need to configure the new BOM location in &lt;code>spinnaker-kustomize-patches/operator/halyard-local.yml&lt;/code>. Update your &lt;code>halyard-local.yml&lt;/code> to match the content of the highlighted lines in the following example:&lt;/p>
&lt;div class="highlight">&lt;div style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;display:grid;">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;display:grid;">&lt;code>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 1
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 2
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 3
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 4
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 5
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 6
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 7
&lt;/span>&lt;span style="background-color:#3d3f4a">&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 8
&lt;/span>&lt;/span>&lt;span style="background-color:#3d3f4a">&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 9
&lt;/span>&lt;/span>&lt;span style="background-color:#3d3f4a">&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">10
&lt;/span>&lt;/span>&lt;span style="background-color:#3d3f4a">&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">11
&lt;/span>&lt;/span>&lt;span style="background-color:#3d3f4a">&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">12
&lt;/span>&lt;/span>&lt;span style="background-color:#3d3f4a">&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">13
&lt;/span>&lt;/span>&lt;span style="background-color:#3d3f4a">&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">14
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;display:grid;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">halyard&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">halconfig&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">directory&lt;/span>: /home/spinnaker/.hal
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">spinnaker&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">config&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6272a4"># This section is used in air-gapped environments to specify an alternate location for the Bill Of Materials (BOM).&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">input&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex; background-color:#3d3f4a">&lt;span> &lt;span style="color:#ff79c6">gcs&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex; background-color:#3d3f4a">&lt;span> &lt;span style="color:#ff79c6">enabled&lt;/span>: &lt;span style="color:#ff79c6">false&lt;/span> &lt;span style="color:#6272a4"># If the BOM is stored in a GCS bucket, switch this to true.&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex; background-color:#3d3f4a">&lt;span> &lt;span style="color:#ff79c6">bucket&lt;/span>: halconfig &lt;span style="color:#6272a4"># Name of the bucket where the BOM is located.&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex; background-color:#3d3f4a">&lt;span> &lt;span style="color:#6272a4">#region: us-west-2 # Bucket region; region does not matter for MinIO.&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex; background-color:#3d3f4a">&lt;span> &lt;span style="color:#ff79c6">enablePathStyleAccess&lt;/span>: &lt;span style="color:#ff79c6">true&lt;/span> &lt;span style="color:#6272a4"># If you are using a platform that does not support PathStyleAccess, such as MinIO, switch this to true (https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingBucket.html#access-bucket-intro).&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex; background-color:#3d3f4a">&lt;span> &lt;span style="color:#ff79c6">endpoint&lt;/span>: http://minio.spinnaker:9000
&lt;/span>&lt;/span>&lt;span style="display:flex; background-color:#3d3f4a">&lt;span> &lt;span style="color:#ff79c6">anonymousAccess&lt;/span>: &lt;span style="color:#ff79c6">false&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>
&lt;h2 id="deploy-the-armory-operator">Deploy the Armory Operator&lt;/h2>
&lt;p>Now that you have updated &lt;code>halyard-local.yml&lt;/code> and &lt;code>patch-config.yml&lt;/code>, you can deploy the Armory Operator using its &lt;code>kustomization.yml&lt;/code> file. By default, the Armory Operator deploys to the &lt;code>spinnaker-operator&lt;/code> namespace. From the &lt;code>spinnaker-kustomize-patches/operator&lt;/code> directory, execute:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>kubectl apply -k .
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>After the Armory Operator pod is running, verify that the S3-compatible MinIO bucket is properly configured and that the bucket contains the BOM.&lt;/p>
&lt;p>The following example uses version 2.25.0 and a private Docker registry called &lt;code>my.jfrog.io/myteam/armory&lt;/code>.&lt;/p>
&lt;ol>
&lt;li>
&lt;p>Run the following to access the Halyard container running in the &lt;code>spinnaker-operator&lt;/code> pod:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>kubectl &lt;span style="color:#8be9fd;font-style:italic">exec&lt;/span> -ti deploy/spinnaker-operator -c halyard -- bash
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>Verify that the bucket is properly configured by running:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>aws s3 ls --endpoint&lt;span style="color:#ff79c6">=&lt;/span>http://minio.spinnaker:9000 s3://halconfig/
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>Inspect the contents of the BOM for the version you downloaded in &lt;a href="#download-the-bom">Download the BOM&lt;/a>:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>hal version bom &amp;lt;version-number&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>If you run the command passing in &lt;code>2.25.0&lt;/code>, output is similar to:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>+ Get BOM &lt;span style="color:#ff79c6">for&lt;/span> 2.25.0
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Success
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>version: 2.25.0
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>timestamp: &lt;span style="color:#f1fa8c">&amp;#39;2021-03-25 09:28:32&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>services:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> echo:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> version: 2.25.2
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> commit: 3a098acc
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> clouddriver:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> version: 2.25.3
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> commit: de3aa3f0
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>...
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>dependencies:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> redis:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> version: 2:2.8.4-2
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>artifactSources:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> dockerRegistry: my.jfrog.io/myteam/armory
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;/ol>
&lt;h2 id="help-resources">Help resources&lt;/h2>
&lt;p>Contact &lt;a href="https://support.armory.io/">Armory Support&lt;/a> or use the &lt;a href="https://join.slack.com/t/spinnakerteam/shared_invite/zt-7juwxmx0-nQ4Ud4pJcbuPykX3SXwQrg">Spinnaker Slack&lt;/a> &lt;code>#armory&lt;/code> channel.&lt;/p>
&lt;h2 id="whats-next">What&amp;rsquo;s next&lt;/h2>
&lt;p>&lt;a href="/continuous-deployment/installation/armory-operator/op-config-kustomize/#configure-armory-enterprise">Configure and deploy Armory Continuous Deployment using Kustomize patches&lt;/a>.&lt;/p></description></item></channel></rss>