<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Armory Docs – Armory Continuous Deployment</title><link>/continuous-deployment/</link><description>Recent content in Armory Continuous Deployment on Armory Docs</description><generator>Hugo -- gohugo.io</generator><atom:link href="/continuous-deployment/index.xml" rel="self" type="application/rss+xml"/><item><title>Continuous-Deployment: Cloud Foundry as a Deployment Target in Spinnaker</title><link>/continuous-deployment/armory-admin/cf/cloud-foundry-concept/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/continuous-deployment/armory-admin/cf/cloud-foundry-concept/</guid><description>
&lt;h2 id="how-spinnaker-interacts-with-cloud-foundry">How Spinnaker interacts with Cloud Foundry&lt;/h2>
&lt;figure>
&lt;img src="/images/cf/CloudFoundrySpinnaker.png"
alt="Spinnaker - Cloud Foundry Deployment Design" width="618" height="207"/> &lt;figcaption>
&lt;p>&lt;i>Spinnaker - Cloud Foundry Deployment Design&lt;/i>&lt;/p>
&lt;/figcaption>
&lt;/figure>
&lt;p>Spinnaker has caching agents for Cloud Foundry Server Groups, Load Balancers, and Spaces. In order to perform caching and operations, these caching agents communicate directly with the Cloud Foundry Cloud Controller via its REST API. The caching agents run on a specific interval, typically every 30 seconds. You can read more about caching agents in the &lt;a href="/continuous-deployment/armory-admin/caching-agents-concept/"}>Clouddriver Caching Agents in Spinnaker&lt;/a> guide.&lt;/p>
&lt;h2 id="cloud-foundry-as-a-deployment-target">Cloud Foundry as a deployment target&lt;/h2>
&lt;p>&lt;strong>Cloud Foundry administrators&lt;/strong> should configure the minimal amount of permissions required by Spinnaker to successfully function. This typically means the Cloud Foundry account has &lt;code>Space Developer&lt;/code> permissions for at least one organization/space. In some cases, it may make sense to have one account for the entire Foundation, but this configuration isn&amp;rsquo;t normal or desired for security reasons.&lt;/p>
&lt;p>&lt;strong>Spinnaker administrators&lt;/strong> can configure one or more Cloud Foundry accounts as cloud providers.&lt;/p>
&lt;p>&lt;strong>Spinnaker users&lt;/strong> can use a Cloud Foundry account as a deployment target. Users can perform Cloud Foundry operations by using the Cloud Foundry &lt;a href="https://spinnaker.io/reference/pipeline/stages/#cloud-foundry">stages&lt;/a> in their pipelines.&lt;/p>
&lt;h2 id="whats-next">What&amp;rsquo;s next&lt;/h2>
&lt;ul>
&lt;li>&lt;a href="/continuous-deployment/armory-admin/cf/add-cf-account/"}>Add a Cloud Foundry Account in Spinnaker&lt;/a>&lt;/li>
&lt;li>&lt;a href="/continuous-deployment/spinnaker-user-guides/best-practices-cf/"}>Cloud Foundry Best Practices&lt;/a>&lt;/li>
&lt;/ul></description></item><item><title>Continuous-Deployment: Install Operator and Deploy Armory Continuous Deployment Quickstart</title><link>/continuous-deployment/installation/armory-operator/op-quickstart/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/continuous-deployment/installation/armory-operator/op-quickstart/</guid><description>
&lt;blockquote>
&lt;p>This guide is for both the Armory Operator and the Spinnaker Operator. Armory Continuous Deployment and Spinnaker configuration is the same except for features only in Armory Continuous Deployment. Those features are marked &lt;img src="/images/proprietary.svg" alt="Proprietary">.&lt;/p>
&lt;/blockquote>
&lt;h2 id="before-you-begin">Before you begin&lt;/h2>
&lt;p>The goal of this guide is to deploy Armory Continuous Deployment with bare minimum configuration. The &lt;a href="#whats-next">What&amp;rsquo;s next&lt;/a> section contains links to advanced configuration guides.&lt;/p>
&lt;ul>
&lt;li>You are familiar with &lt;a href="https://kubernetes.io/docs/concepts/extend-kubernetes/operator/">Kubernetes Operators&lt;/a>, which use custom resources to manage applications and their components.&lt;/li>
&lt;li>You understand the concept of &lt;a href="https://kubernetes.io/docs/concepts/cluster-administration/manage-deployment/">managing Kubernetes resources using manifests&lt;/a>.&lt;/li>
&lt;li>You have reviewed and met the Armory Continuous Deployment &lt;a href="/continuous-deployment/installation/system-requirements/">system requirements&lt;/a>.&lt;/li>
&lt;/ul>
&lt;p>If you are using Armory Continuous Deployment, be sure to choose the Armory Operator version that is compatible with your Armory CD and Kubernetes versions. Likewise, if you are using open source Spinnaker, choose the Spinnaker Operator that is compatible with your Spinnaker and Kubernetes versions.&lt;/p>
&lt;ul class="nav nav-tabs justify-content-end" id="tabs-0" role="tablist">
&lt;li class="nav-item">
&lt;button class="nav-link active"
id="tabs-00-00-tab" data-bs-toggle="tab" data-bs-target="#tabs-00-00" role="tab"
aria-controls="tabs-00-00" aria-selected="true">
Armory Continuous Deployment
&lt;/button>
&lt;/li>&lt;li class="nav-item">
&lt;button class="nav-link"
id="tabs-00-01-tab" data-bs-toggle="tab" data-bs-target="#tabs-00-01" role="tab"
aria-controls="tabs-00-01" aria-selected="false">
Open Source Spinnaker
&lt;/button>
&lt;/li>
&lt;/ul>
&lt;div class="tab-content" id="tabs-0-content">
&lt;div class="tab-body tab-pane fade show active"
id="tabs-00-00" role="tabpanel" aria-labelled-by="tabs-00-00-tab" tabindex="0">
&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align:left">Kubernetes Version&lt;/th>
&lt;th style="text-align:left">Armory Operator Version&lt;/th>
&lt;th style="text-align:left">Armory CD Version&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align:left">&amp;lt; 1.21&lt;/td>
&lt;td style="text-align:left">&amp;lt;= 1.6.x&lt;/td>
&lt;td style="text-align:left">&amp;lt;= 2.28.0&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&amp;gt;= 1.21&lt;/td>
&lt;td style="text-align:left">&amp;gt;= 1.7.x&lt;/td>
&lt;td style="text-align:left">All supported versions&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;/div>
&lt;div class="tab-body tab-pane fade"
id="tabs-00-01" role="tabpanel" aria-labelled-by="tabs-00-01-tab" tabindex="0">
&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align:left">Kubernetes Version&lt;/th>
&lt;th style="text-align:left">Spinnaker Operator Version&lt;/th>
&lt;th style="text-align:left">Spinnaker Version&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align:left">&amp;lt; 1.21&lt;/td>
&lt;td style="text-align:left">&amp;lt;= 1.2.5&lt;/td>
&lt;td style="text-align:left">&amp;gt;= 1.27.3&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&amp;gt;= 1.21&lt;/td>
&lt;td style="text-align:left">&amp;gt;= 1.3.x&lt;/td>
&lt;td style="text-align:left">&amp;gt;= 1.27.3&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;/div>
&lt;/div>
&lt;p>Consult the &lt;a href="/continuous-deployment/installation/armory-operator/op-manage-operator/"}>Manage Operator&lt;/a> guide for how to upgrade your Operator version.&lt;/p>
&lt;blockquote>
&lt;p>Depending on your Kubernetes version, you may need to adjust the following instructions to use a supported Operator version.&lt;/p>
&lt;/blockquote>
&lt;h2 id="operator-installation-options">Operator installation options&lt;/h2>
&lt;p>The Operator has &lt;code>basic&lt;/code> and &lt;code>cluster&lt;/code> installation modes. The option you use depends on which namespace you want to deploy Armory Continuous Deployment or open source Spinnaker to.&lt;/p>
&lt;p>Most users choose Cluster Mode.&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align:left">&lt;/th>
&lt;th style="text-align:center">Basic Mode&lt;/th>
&lt;th style="text-align:center">Cluster Mode&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align:left">Must deploy Armory Continuous Deployment or open source Spinnaker in the same namespace as the Operator;&lt;br>permissions scoped to single namespace; suitable for a Proof of Concept (POC)&lt;/td>
&lt;td style="text-align:center">✅&lt;/td>
&lt;td style="text-align:center">❌&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">Can deploy Armory Continuous Deployment or open source Spinnaker to multiple namespaces&lt;br>(requires Kubernetes ClusterRole)&lt;/td>
&lt;td style="text-align:center">❌&lt;/td>
&lt;td style="text-align:center">✅&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">Configure Armory Continuous Deployment or open source Spinnaker using a single manifest file&lt;/td>
&lt;td style="text-align:center">✅&lt;/td>
&lt;td style="text-align:center">✅&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">Configure Armory Continuous Deployment or open source Spinnaker using Kustomize patches&lt;/td>
&lt;td style="text-align:center">✅&lt;/td>
&lt;td style="text-align:center">✅&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">Perform pre-flight checks to prevent misconfiguration&lt;/td>
&lt;td style="text-align:center">❌&lt;/td>
&lt;td style="text-align:center">✅&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h2 id="install-the-operator">Install the Operator&lt;/h2>
&lt;ul class="nav nav-tabs justify-content-end" id="tabs-5" role="tablist">
&lt;li class="nav-item">
&lt;button class="nav-link disabled"
id="tabs-05-00-tab" data-bs-toggle="tab" data-bs-target="#tabs-05-00" role="tab"
aria-controls="tabs-05-00" aria-selected="false">
&lt;strong>Mode&lt;/strong>:
&lt;/button>
&lt;/li>&lt;li class="nav-item">
&lt;button class="nav-link active"
id="tabs-05-01-tab" data-bs-toggle="tab" data-bs-target="#tabs-05-01" role="tab"
aria-controls="tabs-05-01" aria-selected="true">
Cluster
&lt;/button>
&lt;/li>&lt;li class="nav-item">
&lt;button class="nav-link"
id="tabs-05-02-tab" data-bs-toggle="tab" data-bs-target="#tabs-05-02" role="tab"
aria-controls="tabs-05-02" aria-selected="false">
Basic
&lt;/button>
&lt;/li>
&lt;/ul>
&lt;div class="tab-content" id="tabs-5-content">
&lt;div class="tab-body tab-pane fade"
id="tabs-05-00" role="tabpanel" aria-labelled-by="tabs-05-00-tab" tabindex="5">
&lt;/div>
&lt;div class="tab-body tab-pane fade show active"
id="tabs-05-01" role="tabpanel" aria-labelled-by="tabs-05-01-tab" tabindex="5">
&lt;p>You need Kubernetes &lt;code>ClusterRole&lt;/code> authority to install the Operator in &lt;code>cluster&lt;/code> mode. You should use Cluster mode to do &lt;strong>one&lt;/strong> of the following:&lt;/p>
&lt;ul>
&lt;li>Install a single Spinnaker Operator to manage an entire Kubernetes cluster of Spinnaker installations&lt;/li>
&lt;li>Install a single Armory Operator to manage an entire Kubernetes cluster of Armory CD installations&lt;/li>
&lt;/ul>
&lt;p>You can find the Operator&amp;rsquo;s deployment configuration in &lt;code>spinnaker-operator/deploy/operator/cluster&lt;/code> after you download and unpack the archive. You don&amp;rsquo;t need to update any configuration values.&lt;/p>
&lt;ol>
&lt;li>
&lt;p>Get the latest Operator release:&lt;/p>
&lt;p>&lt;strong>Armory Operator for Armory CD Installation&lt;/strong>&lt;/p>
&lt;figure>
&lt;img src="/images/proprietary.svg"/>
&lt;/figure>
&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>mkdir -p spinnaker-operator &lt;span style="color:#ff79c6">&amp;amp;&amp;amp;&lt;/span> &lt;span style="color:#8be9fd;font-style:italic">cd&lt;/span> spinnaker-operator
&lt;/span>&lt;/span>&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;br>
&lt;p>&lt;strong>Spinnaker Operator for Open Source Spinnaker Installation&lt;/strong>&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>mkdir -p spinnaker-operator &lt;span style="color:#ff79c6">&amp;amp;&amp;amp;&lt;/span> &lt;span style="color:#8be9fd;font-style:italic">cd&lt;/span> spinnaker-operator
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>bash -c &lt;span style="color:#f1fa8c">&amp;#39;curl -L https://github.com/armory/spinnaker-operator/releases/latest/download/manifests.tgz | tar -xz&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>Install or update CRDs across the cluster:&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 -f deploy/crds/
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>Create the namespace for the Operator:&lt;/p>
&lt;p>In &lt;code>cluster&lt;/code> mode, if you want to use a namespace other than &lt;code>spinnaker-operator&lt;/code>, you need to edit the namespace in &lt;code>deploy/operator/cluster/role_binding.yaml&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>kubectl create ns spinnaker-operator
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>Install the Operator:&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 -n spinnaker-operator apply -f deploy/operator/cluster
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>Verify that the Operator is 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>kubectl -n spinnaker-operator get pods
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>The command returns output similar to the following if the pod for the Operator is 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-fallback" data-lang="fallback">&lt;span style="display:flex;">&lt;span>NAMESPACE READY STATUS RESTARTS AGE
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>spinnaker-operator-7cd659654b-4vktl 2/2 Running 0 6s
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;/ol>
&lt;/div>
&lt;div class="tab-body tab-pane fade"
id="tabs-05-02" role="tabpanel" aria-labelled-by="tabs-05-02-tab" tabindex="5">
&lt;p>Operator in &lt;code>basic&lt;/code> mode has permissions scoped to a single namespace, so the Operator can&amp;rsquo;t see anything in other namespaces. You must deploy Armory Continuous Deployment or open source Spinnaker to the same namespace as the Operator, in a 1:1 correlation (one Armory Operator per Armory CD; one Spinnaker Operator per open source Spinnaker install).&lt;/p>
&lt;p>You can find the Operator&amp;rsquo;s deployment configuration in &lt;code>spinnaker-operator/deploy/operator/basic&lt;/code> after you download and unpack the archive. You don&amp;rsquo;t need to update any configuration values.&lt;/p>
&lt;ol>
&lt;li>
&lt;p>Get the latest Operator release:&lt;/p>
&lt;p>&lt;strong>Armory Operator for Armory CD Installation&lt;/strong> &lt;img src="/images/proprietary.svg" alt="Proprietary">&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>mkdir -p spinnaker-operator &lt;span style="color:#ff79c6">&amp;amp;&amp;amp;&lt;/span> &lt;span style="color:#8be9fd;font-style:italic">cd&lt;/span> spinnaker-operator
&lt;/span>&lt;/span>&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>&lt;strong>Spinnaker Operator for Open Source Spinnaker Installation&lt;/strong>&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>mkdir -p spinnaker-operator &lt;span style="color:#ff79c6">&amp;amp;&amp;amp;&lt;/span> &lt;span style="color:#8be9fd;font-style:italic">cd&lt;/span> spinnaker-operator
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>bash -c &lt;span style="color:#f1fa8c">&amp;#39;curl -L https://github.com/armory/spinnaker-operator/releases/latest/download/manifests.tgz | tar -xz&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>Install or update CRDs across the cluster:&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 -f deploy/crds/
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>Create the namespace for the Operator:&lt;/p>
&lt;p>In &lt;code>basic&lt;/code> mode, the namespace must be &lt;code>spinnaker-operator&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>kubectl create ns spinnaker-operator
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>Install the Operator:&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 -n spinnaker-operator apply -f deploy/operator/basic
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>Verify that the Operator is 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>kubectl -n spinnaker-operator get pods
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>The command returns output similar to the following if the pod for the Operator is 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-fallback" data-lang="fallback">&lt;span style="display:flex;">&lt;span>NAMESPACE READY STATUS RESTARTS AGE
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>spinnaker-operator-7cd659654b-4vktl 2/2 Running 0 6s
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;/ol>
&lt;/div>
&lt;/div>
&lt;h2 id="deploy-an-armory-continuous-deployment-instance">Deploy an Armory Continuous Deployment instance&lt;/h2>
&lt;h3 id="single-manifest-file-option">Single manifest file option&lt;/h3>
&lt;ul class="nav nav-tabs justify-content-end" id="tabs-6" role="tablist">
&lt;li class="nav-item">
&lt;button class="nav-link active"
id="tabs-06-00-tab" data-bs-toggle="tab" data-bs-target="#tabs-06-00" role="tab"
aria-controls="tabs-06-00" aria-selected="true">
Armory Continuous Deployment
&lt;/button>
&lt;/li>&lt;li class="nav-item">
&lt;button class="nav-link"
id="tabs-06-01-tab" data-bs-toggle="tab" data-bs-target="#tabs-06-01" role="tab"
aria-controls="tabs-06-01" aria-selected="false">
Open Source Spinnaker
&lt;/button>
&lt;/li>
&lt;/ul>
&lt;div class="tab-content" id="tabs-6-content">
&lt;div class="tab-body tab-pane fade show active"
id="tabs-06-00" role="tabpanel" aria-labelled-by="tabs-06-00-tab" tabindex="6">
&lt;p>&lt;img src="/images/proprietary.svg" alt="Proprietary">&lt;/p>
&lt;p>You can find the &lt;code>SpinnakerService.yml&lt;/code> manifest file in &lt;code>/spinnaker-operator/deploy/spinnaker/basic/&lt;/code>. You need to specify persistent storage details and the version to deploy before you can use the manifest to deploy Armory Continuous Deployment.&lt;/p>
&lt;p>The following example uses an AWS S3 bucket. You can find configuration for other storage types in the &lt;a href="/continuous-deployment/installation/armory-operator/op-manifest-reference/persistent-storage/">Persistent Storage&lt;/a> reference.&lt;/p>
&lt;p>You can see the list of Armory Continuous Deployment versions on the &lt;a href="/continuous-deployment/release-notes/rn-armory-spinnaker/">Release Notes&lt;/a> page.&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">apiVersion&lt;/span>: spinnaker.armory.io/v1alpha2
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">kind&lt;/span>: SpinnakerService
&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
&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">spinnakerConfig&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:#ff79c6">version&lt;/span>: &amp;lt;version&amp;gt; &lt;span style="color:#6272a4"># the version of Armory Continuous Deployment to deploy&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">persistentStorage&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">persistentStoreType&lt;/span>: s3
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">s3&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">bucket&lt;/span>: &amp;lt;change-me&amp;gt; &lt;span style="color:#6272a4"># Armory Continuous Deployment stores application and pipeline definitions here. Create an S3 bucket and provide the name here.&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">rootFolder&lt;/span>: front50
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6272a4"># spec.expose - This section defines how Armory Continuous Deployment should be publicly exposed&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">expose&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">type: service # Kubernetes LoadBalancer type (service/ingress), note&lt;/span>: only &amp;#34;service&amp;#34; is supported for now
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">service&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">type&lt;/span>: LoadBalancer
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>The Armory Operator contains Halyard to manage a portion of your Armory Continuous Deployment installation.
See &lt;a href="/continuous-deployment/installation/armory-operator/op-advanced-config/">Advanced Operator Configuration&lt;/a> if you need to override the default settings for the Halyard container for some advanced features.&lt;/p>
&lt;p>Deploy using &lt;code>kubectl&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>kubectl create ns spinnaker
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>kubectl -n spinnaker apply -f deploy/spinnaker/basic/SpinnakerService.yml
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;/div>
&lt;div class="tab-body tab-pane fade"
id="tabs-06-01" role="tabpanel" aria-labelled-by="tabs-06-01-tab" tabindex="6">
&lt;p>You can find the basic &lt;code>spinnakerservice.yml&lt;/code> manifest file in &lt;code>/spinnaker-operator/deploy/spinnaker/basic/&lt;/code>.&lt;/p>
&lt;p>You need to specify persistent storage details and the version to deploy before you can use the manifest to deploy Spinnaker. The following example uses an AWS S3 bucket. You can find configuration for other storage types in the &lt;a href="/continuous-deployment/installation/armory-operator/op-manifest-reference/persistent-storage/">Persistent Storage&lt;/a> reference.&lt;/p>
&lt;p>You can see the list of Spinnaker versions on the Spinnaker &lt;a href="https://spinnaker.io/community/releases/versions/">Versions&lt;/a> page.&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">apiVersion&lt;/span>: spinnaker.io/v1alpha2
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">kind&lt;/span>: SpinnakerService
&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
&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">spinnakerConfig&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:#ff79c6">version&lt;/span>: &amp;lt;version&amp;gt; &lt;span style="color:#6272a4"># the version of Spinnaker to deploy&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">persistentStorage&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">persistentStoreType&lt;/span>: s3
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">s3&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">bucket&lt;/span>: &amp;lt;change-me&amp;gt; &lt;span style="color:#6272a4"># Spinnaker stores application and pipeline definitions here. Create an S3 bucket and provide the name here.&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">rootFolder&lt;/span>: front50
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6272a4"># spec.expose - This section defines how Spinnaker should be publicly exposed&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">expose&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">type: service # Kubernetes LoadBalancer type (service/ingress), note&lt;/span>: only &amp;#34;service&amp;#34; is supported for now
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">service&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">type&lt;/span>: LoadBalancer
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Deploy using &lt;code>kubectl&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>kubectl create ns spinnaker
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>kubectl -n spinnaker apply -f deploy/spinnaker/basic/spinnakerservice.yml
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;/div>
&lt;/div>
&lt;p>You can watch the installation progress by executing:&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 -n spinnaker get spinsvc spinnaker -w
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>You can verify pod status by executing:&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 -n spinnaker get pods
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>The included manifest file is only for a very basic installation.
&lt;a href="/continuous-deployment/installation/armory-operator/op-config-manifest/"}>Configure Armory Continuous Deployment Using a Manifest File&lt;/a> contains detailed manifest configuration options.&lt;/p>
&lt;h3 id="kustomize-patches-option">Kustomize patches option&lt;/h3>
&lt;blockquote>
&lt;p>This example assumes you deploy Armory Continuous Deployment to the &lt;code>spinnaker-operator&lt;/code> namespace.&lt;/p>
&lt;/blockquote>
&lt;p>Kustomize uses patch files to build a deployment file by overwriting sections of the &lt;code>spinnakerservice.yml&lt;/code> manifest file. You declare your patch files in a &lt;code>kustomization.yml&lt;/code> file, which &lt;code>kubectl&lt;/code> and Kustomize and use to build the Armory Continuous Deployment or Spinnaker manifest file.&lt;/p>
&lt;p>You can put each manifest config section in its own file. For example, if you create a &lt;code>profiles-patch.yml&lt;/code> patch with configuration for various services, you are telling Kustomize to overwrite the &lt;code>profiles&lt;/code> section of the &lt;code>spinnakerservice.yml&lt;/code> manifest with the contents of &lt;code>profiles-patch.yml&lt;/code>. Kustomize is flexible, though, so you could instead create a separate patch file for each service (&lt;code>profiles-clouddriver-patch.yml&lt;/code>, &lt;code>profiles-gate-patch.yml&lt;/code>, &lt;code>profiles-deck-patch.yml&lt;/code>, etc.), and then declare those patches in the &lt;code>kustomization.yml&lt;/code> file.&lt;/p>
&lt;p>Kustomize is part of &lt;code>kubectl&lt;/code>, so you do not need to install Kustomize locally to build and verify your manifest file. You can run &lt;code>kubectl kustomize &amp;lt;path-to-kustomization.yml&amp;gt;&lt;/code>. This prints out the contents of the manifest file that Kustomize builds using your &lt;code>kustomization.yml&lt;/code> file.&lt;/p>
&lt;blockquote>
&lt;p>&lt;code>kubectl&lt;/code> versions up to and including v1.20 come bundled with Kustomize v2.0.3. &lt;code>kubectl&lt;/code> 1.21 comes bundled with Kustomize v4.0.5. Using Kustomize patches has been tested with &lt;code>kubectl&lt;/code> v1.19.x. and standalone Kustomize v2 and v3. You may see a &lt;code>panic&lt;/code> error if you use the &lt;code>spinnaker-kustomize-patches&lt;/code> repo with Kustomize v4.0+ or &lt;code>kubectl&lt;/code> v1.21+.&lt;/p>
&lt;/blockquote>
&lt;p>For this quickstart, you can find bare minimum patches in &lt;code>/spinnaker-operator/deploy/spinnaker/kustomize&lt;/code>. Before you deploy Armory Continuous Deployment, you need to update the &lt;code>version&lt;/code> and &lt;code>persistentStorage&lt;/code> values in &lt;code>config-patch.yml&lt;/code>.&lt;/p>
&lt;p>The following example uses an AWS S3 bucket. You can find configuration for other storage types in the &lt;a href="/continuous-deployment/installation/armory-operator/op-manifest-reference/persistent-storage/">Persistent Storage&lt;/a> reference.&lt;/p>
&lt;blockquote>
&lt;p>This quickstart example is suitable for a proof of concept. For production environments, you should use a robust set of Kustomize patches. See the &lt;a href="/continuous-deployment/installation/armory-operator/op-config-kustomize/">Configure Armory Continuous Deployment Using Kustomize&lt;/a> guide for details.&lt;/p>
&lt;/blockquote>
&lt;ul class="nav nav-tabs justify-content-end" id="tabs-12" role="tablist">
&lt;li class="nav-item">
&lt;button class="nav-link active"
id="tabs-12-00-tab" data-bs-toggle="tab" data-bs-target="#tabs-12-00" role="tab"
aria-controls="tabs-12-00" aria-selected="true">
Armory Continuous Deployment
&lt;/button>
&lt;/li>&lt;li class="nav-item">
&lt;button class="nav-link"
id="tabs-12-01-tab" data-bs-toggle="tab" data-bs-target="#tabs-12-01" role="tab"
aria-controls="tabs-12-01" aria-selected="false">
Open Source Spinnaker
&lt;/button>
&lt;/li>
&lt;/ul>
&lt;div class="tab-content" id="tabs-12-content">
&lt;div class="tab-body tab-pane fade show active"
id="tabs-12-00" role="tabpanel" aria-labelled-by="tabs-12-00-tab" tabindex="12">
&lt;p>&lt;img src="/images/proprietary.svg" alt="Proprietary">&lt;/p>
&lt;p>You can see the list of Armory Continuous Deployment versions on the &lt;a href="/continuous-deployment/release-notes/rn-armory-spinnaker/">Release Notes&lt;/a> page.&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">apiVersion&lt;/span>: spinnaker.armory.io/v1alpha2
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">kind&lt;/span>: SpinnakerService
&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
&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:#6272a4"># spec.spinnakerConfig - This section is how to specify configuration spinnaker&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">spinnakerConfig&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6272a4"># spec.spinnakerConfig.config - This section contains the contents of a deployment found in a halconfig .deploymentConfigurations[0]&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:#ff79c6">version&lt;/span>: &amp;lt;version&amp;gt; &lt;span style="color:#6272a4"># the version of Armory Continuous Deployment to be deployed&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">persistentStorage&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">persistentStoreType&lt;/span>: s3
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">s3&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">bucket&lt;/span>: mybucket
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">rootFolder&lt;/span>: front50
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>The Armory Operator contains Halyard to manage a portion of the deployment Armory Continuous Deployment.
See &lt;a href="/continuous-deployment/installation/armory-operator/op-advanced-config/">Advanced Operator Configuration&lt;/a> if you need to override the default settings for the Halyard Container for some advanced features.&lt;/p>
&lt;/div>
&lt;div class="tab-body tab-pane fade"
id="tabs-12-01" role="tabpanel" aria-labelled-by="tabs-12-01-tab" tabindex="12">
&lt;p>You can see the list of open source Spinnaker versions on the Spinnaker website&amp;rsquo;s &lt;a href="https://spinnaker.io/community/releases/versions/">Versions&lt;/a> page.&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">apiVersion&lt;/span>: spinnaker.io/v1alpha2
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">kind&lt;/span>: SpinnakerService
&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
&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:#6272a4"># spec.spinnakerConfig - This section is how to specify configuration Spinnaker&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">spinnakerConfig&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6272a4"># spec.spinnakerConfig.config - This section contains the contents of a deployment found in a halconfig .deploymentConfigurations[0]&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:#ff79c6">version&lt;/span>: &amp;lt;version&amp;gt; &lt;span style="color:#6272a4"># the version of Spinnaker to be deployed&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">persistentStorage&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">persistentStoreType&lt;/span>: s3
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">s3&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">bucket&lt;/span>: mybucket
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">rootFolder&lt;/span>: front50
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;/div>
&lt;/div>
&lt;ol>
&lt;li>
&lt;p>If you want to verify the contents of the manifest file, execute from the &lt;code>/spinnaker-operator/deploy/spinnaker/kustomize/&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>kubectl kustomize .
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>This prints out the contents of the manifest file that Kustomize built based on your &lt;code>kustomization.yml&lt;/code> file.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Deploy from the &lt;code>/spinnaker-operator/deploy/spinnaker/kustomize/&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>kubectl create ns spinnaker
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>kubectl -n spinnaker apply -k .
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>You can watch the installation progress by executing:&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 -n spinnaker get spinsvc spinnaker -w
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>You can verify pod status by executing:&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 -n spinnaker get pods
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;/ol>
&lt;h2 id="help-resources">Help resources&lt;/h2>
&lt;ul>
&lt;li>Armory Operator and Armory Continuous Deployment: 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;/li>
&lt;li>Spinnaker Operator and Spinnaker: &lt;a href="https://join.slack.com/t/spinnakerteam/shared_invite/zt-7juwxmx0-nQ4Ud4pJcbuPykX3SXwQrg">Spinnaker Slack&lt;/a> &lt;code>#kubernetes-operator&lt;/code> channel.&lt;/li>
&lt;/ul>
&lt;h2 id="whats-next">What&amp;rsquo;s next&lt;/h2>
&lt;ul>
&lt;li>&lt;a href="/continuous-deployment/installation/ae-instance-reg/">Register your Armory Continuous Deployment instance&lt;/a>.&lt;/li>
&lt;li>Learn how to &lt;a href="/continuous-deployment/installation/armory-operator/op-manage-spinnaker/"}>Manage Armory Continuous Deployment using the Operator&lt;/a>.&lt;/li>
&lt;li>See advanced manifest configuration in the &lt;a href="/continuous-deployment/installation/armory-operator/op-config-manifest/"}>Configure Armory Continuous Deployment Using a Manifest File&lt;/a> guide.&lt;/li>
&lt;li>See advanced configuration using Kustomize in the &lt;a href="/continuous-deployment/installation/armory-operator/op-config-kustomize/"}>Configure Armory Continuous Deployment Using Kustomize&lt;/a> guide.&lt;/li>
&lt;li>See the &lt;a href="/continuous-deployment/installation/armory-operator/op-troubleshooting/"}>Errors and Troubleshooting&lt;/a> guide if you encounter issues.&lt;/li>
&lt;li>If you are deploying Armory Continuous Deployment, you may need to override the default settings for the Halyard container for some advanced features. See the &lt;a href="/continuous-deployment/installation/armory-operator/op-advanced-config/"}>Advanced Operator Configuration&lt;/a> guide.&lt;/li>
&lt;li>Learn how to &lt;a href="/continuous-deployment/installation/armory-operator/op-manage-operator/"}>Manage Operator&lt;/a>.&lt;/li>
&lt;/ul></description></item><item><title>Continuous-Deployment: System Requirements for Armory Continuous Deployment</title><link>/continuous-deployment/installation/system-requirements/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/continuous-deployment/installation/system-requirements/</guid><description>
&lt;p>The requirements described on this page are meant as a minimum starting point for installing Armory Continuous Deployment. You may need to increase the resources based on the number of applications, pipelines, and executions. Work with your IT organization to make sure that the requirements are met.&lt;/p>
&lt;h2 id="installation-targets">Installation targets&lt;/h2>
&lt;blockquote>
&lt;p>This section defines where you can run Armory Continuous Deployment, not where you can deploy your applications. For information about where you can deploy applications to, see the &lt;a href="/continuous-deployment/feature-status/continuous-deployment-matrix/#deployment-targets">Product Compatibility Matrix&lt;/a>.&lt;/p>
&lt;/blockquote>
&lt;p>Armory Continuous Deployment can be installed on any &lt;a href="https://www.cncf.io/certification/software-conformance/">certified Kubernetes cluster&lt;/a> that meets the following version requirements:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Minimum version&lt;/strong>: 1.20&lt;/li>
&lt;li>&lt;strong>Maximum version&lt;/strong>: 1.25&lt;/li>
&lt;/ul>
&lt;!-- track EKS versions -->
&lt;p>You install Armory Continuous Deployment using the &lt;a href="/continuous-deployment/installation/armory-operator/">Armory Operator&lt;/a> (a Kubernetes operator), which has the following requirements:&lt;/p>
&lt;ul>
&lt;li>You must be able to apply Kubernetes manifests and CRDs, either directly using &lt;code>kubectl&lt;/code> commands from your machine or another method.&lt;/li>
&lt;li>By default, the Operator pulls images from a public registry. If you cannot pull images from public registries, see &lt;a href="/continuous-deployment/installation/guide/air-gapped/ag-operator/"}>Air-Gapped with the Armory Operator&lt;/a>.&lt;/li>
&lt;/ul>
&lt;p>Note that Armory does not produce marketplace specific images that can be used by different certified Kubernetes offerings.&lt;/p>
&lt;p>The Kubernetes cluster itself must meet the following requirements:&lt;/p>
&lt;ul>
&lt;li>You have administrator rights to install the Custom Resource Definition (CRD) for the Armory Operator.&lt;/li>
&lt;li>If you are managing your own Kubernetes cluster (&lt;strong>not&lt;/strong> EKS), be sure:
&lt;ul>
&lt;li>You have enabled admission controllers in Kubernetes (&lt;code>-enable-admission-plugins&lt;/code>).&lt;/li>
&lt;li>You have &lt;code>ValidatingAdmissionWebhook&lt;/code> enabled in &lt;code>kube-apiserver&lt;/code>. Alternatively, you can pass the &lt;code>--disable-admission-controller&lt;/code> parameter to the to the &lt;code>deployment.yaml&lt;/code> file that deploys the Operator.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;p>If you do not have a cluster already, consult guides for &lt;a href="https://docs.aws.amazon.com/eks/latest/userguide/getting-started-console.html">Amazon EKS&lt;/a>or the equivalent for your Kubernetes provider.&lt;/p>
&lt;h2 id="browsers">Browsers&lt;/h2>
&lt;p>The UI for Armory Continuous Deployment works best on Firefox or Chromium-based browsers.&lt;/p>
&lt;h2 id="external-storage">External storage&lt;/h2>
&lt;p>Armory Continuous Deployment requires external storage for storing metadata and history.&lt;/p>
&lt;h3 id="bucket-storage">Bucket storage&lt;/h3>
&lt;p>You need an S3-compatible object store, such as an S3 bucket or Minio, for persisting your application settings and pipelines. The account you use to install and run Armory Continuous Deployment needs read/write access to the buckets.&lt;/p>
&lt;h3 id="rdbms-sql">RDBMS (SQL)&lt;/h3>
&lt;p>Depending on the service, Armory Continuous Deployment also uses either Redis, MySQL, or Postgres as a backing store. The following table lists the supported database and the service:&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Database&lt;/th>
&lt;th>DB version&lt;/th>
&lt;th>Armory&lt;/th>
&lt;th>Services&lt;/th>
&lt;th>Note&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>Redis&lt;/td>
&lt;td>All supported versions&lt;/td>
&lt;td>All supported versions&lt;/td>
&lt;td>All Armory Continuous Deployment services that require a backing store&lt;/td>
&lt;td>The DB versions refer to external Redis instances. Supported only for services that still require Redis for a feature, such as Gate sessions. Redis is not supported as a core persistent storage engine. Although Armory Continuous Deployment deploys internal Redis instances, do not use these instances for production deployments. Armory recommends only using them for testing and proof-of-concept deployments. &lt;br/>&lt;br/> For AWS ElastiCache for Redis, the instance type should minimally be set to &lt;code>cache.m5.large&lt;/code>.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>MySQL&lt;/td>
&lt;td>5.7; AWS Aurora&lt;/td>
&lt;td>All supported versions&lt;/td>
&lt;td>Clouddriver, Front50, Orca&lt;/td>
&lt;td>For AWS RDS, the instance type should minimally be set to &lt;code>db.r5&lt;/code>.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>PostgreSQL&lt;/td>
&lt;td>10&amp;#43;&lt;/td>
&lt;td>2.24.0 or later&lt;/td>
&lt;td>Clouddriver&lt;/td>
&lt;td>For AWS RDS, the instance type should minimally be set to &lt;code>db.r5&lt;/code>.&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>Armory recommends using MySQL or PostgreSQL as the backing store when possible for production instances of Armory Continuous Deployment. For other services, use an external Redis instance for production instances of Armory Continuous Deployment.&lt;/p>
&lt;h2 id="hardware-requirements">Hardware requirements&lt;/h2>
&lt;p>Armory recommends a minimum of 3 nodes that match the following profile:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>CPUS&lt;/strong>: 8&lt;/li>
&lt;li>&lt;strong>Memory (GiB)&lt;/strong>: 32&lt;/li>
&lt;/ul>
&lt;h2 id="kubectl">kubectl&lt;/h2>
&lt;p>To install and manage Armory Continuous Deployment, Armory recommends using the &lt;a href="/continuous-deployment/installation/armory-operator/op-config-kustomize/">Armory Operator with Kustomize&lt;/a> and tailoring the Kustomize files to meet the requirements of your instance and environment. This installation method supports the following versions of &lt;code>kubectl&lt;/code>: 1.16 to 1.19.&lt;/p>
&lt;!-- this is cause of the go-yaml bug: https://github.com/kubernetes-sigs/kustomize/issues/3605 -->
&lt;p>It is possible to use the Operator to &lt;a href="/continuous-deployment/installation/armory-operator/op-config-manifest/">install Armory Continuous Deployment without the Kustomize repo&lt;/a>. In that case, any actively maintained version of &lt;code>kubectl&lt;/code> is supported.&lt;/p>
&lt;h2 id="networking">Networking&lt;/h2>
&lt;p>Pods in your Kubernetes cluster must be able to communicate with each other without restrictions.&lt;/p>
&lt;p>Additionally, the ports for the API gateway (the Gate service) and the UI (the Deck service) need to be exposed. All interactions with Armory Continuous Deployment go through these two services.&lt;/p>
&lt;p>&lt;strong>Gate ports&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>8084&lt;/li>
&lt;li>8085 when secured by x509&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Deck port&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>9000&lt;/li>
&lt;/ul>
&lt;h2 id="security">Security&lt;/h2>
&lt;p>Armory Continuous Deployment needs to be able to assume roles in the accounts that it deploys applications to. For example, Armory Continuous Deployment needs the &lt;code>sts:AssumeRole&lt;/code> permission for AWS. Elevated access (equivalent to the level of &lt;strong>PowerUser&lt;/strong> access in AWS) is helpful so that Armory Continuous Deployment can cache data from deployment target accounts and deploy without errors.&lt;/p>
&lt;p>In addition to the security requirements that Armory Continuous Deployment needs to run, Armory recommends securing your installation by using a &lt;a href="/continuous-deployment/feature-status/continuous-deployment-matrix/#secret-stores">secret store&lt;/a> for sensitive values in your configs as well as configuring &lt;a href="/continuous-deployment/feature-status/continuous-deployment-matrix/#authentication">authentication&lt;/a> and &lt;a href="/continuous-deployment/feature-status/continuous-deployment-matrix/#authorization">authorization&lt;/a>.&lt;/p></description></item><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><item><title>Continuous-Deployment: Armory Config</title><link>/continuous-deployment/installation/armory-operator/op-manifest-reference/armory/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/continuous-deployment/installation/armory-operator/op-manifest-reference/armory/</guid><description>
&lt;p>&lt;img src="/images/proprietary.svg" alt="Proprietary">&lt;/p>
&lt;h2 id="specspinnakerconfigconfigarmory">spec.spinnakerConfig.config.armory&lt;/h2>
&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">armory&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">dinghy&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">enabled&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">templateOrg&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">templateRepo&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">githubToken&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">githubEndpoint&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">stashUsername&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">stashToken&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">stashEndpoint&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">gitlabToken&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">gitlabEndpoint&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">dinghyFilename&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">autoLockPipelines&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">fiatUser&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">notifiers&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">slack&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">enabled&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">channel&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">github&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">enabled&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">webhookValidationEnabledProviders&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">webhookValidations&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">enabled&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">versionControlProvider&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">organization&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">repo&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">secret&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">diagnostics&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">enabled&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">uuid&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">logging&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">enabled&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">endpoint&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">terraform&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">enabled&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">git&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">enabled&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">accessToken&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">username&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">secrets&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">vault&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">enabled&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">url&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">path&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">role&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">authMethod&lt;/span>:
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="dinghy-parameters">Dinghy parameters&lt;/h2>
&lt;ul>
&lt;li>&lt;code>enabled&lt;/code>: true or false.&lt;/li>
&lt;li>&lt;code>templateOrg&lt;/code>: SCM organization or namespace where application and template repositories are located.&lt;/li>
&lt;li>&lt;code>templateRepo&lt;/code>: SCM repository where module templates are located&lt;/li>
&lt;li>&lt;code>githubToken&lt;/code>: GitHub token. Supports encrypted value.&lt;/li>
&lt;li>&lt;code>githubEndpoint&lt;/code>: (Default: &lt;code>https://api.github.com&lt;/code>) Github API endpoint. Useful if you’re using Github Enterprise.&lt;/li>
&lt;li>&lt;code>stashUsername&lt;/code>: Stash username.&lt;/li>
&lt;li>&lt;code>stashToken&lt;/code>: Stash token. Supports encrypted value.&lt;/li>
&lt;li>&lt;code>stashEndpoint&lt;/code>: Stash API endpoint.&lt;/li>
&lt;li>&lt;code>gitlabToken&lt;/code>: GitLab token. Supports encrypted value.&lt;/li>
&lt;li>&lt;code>gitlabEndpoint&lt;/code>: GitLab endpoint.&lt;/li>
&lt;li>&lt;code>dinghyFilename&lt;/code>: (Default: &lt;code>dinghyfile&lt;/code>) Name of the file in application repositories which contains pipelines.&lt;/li>
&lt;li>&lt;code>autoLockPipelines&lt;/code>: (Default: true) Lock pipelines in the UI before overwriting on change.&lt;/li>
&lt;li>&lt;code>fiatUser&lt;/code>: Fiat user to use for Dinghy operations.&lt;/li>
&lt;li>&lt;code>notifiers&lt;/code>:
&lt;ul>
&lt;li>&lt;code>slack&lt;/code>:
&lt;ul>
&lt;li>&lt;code>enabled&lt;/code>: true or false.&lt;/li>
&lt;li>&lt;code>channel&lt;/code>: Name of channel to send notifications to.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;code>github&lt;/code>:
&lt;ul>
&lt;li>&lt;code>enabled&lt;/code>: true or false. This enables comments to the PR to allow for more robust feedback information from Dinghy. May cause issues with those using custom GitHub endpoints, as detailed in &lt;a href="https://support.armory.io/support?id=kb_article&amp;amp;sysparm_article=KB0010290">this KB article&lt;/a>.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;code>webhookValidationEnabledProviders&lt;/code>: List of enabled providers for Webhook validations.&lt;/li>
&lt;li>&lt;code>webhookValidations&lt;/code>: Webhook validations list
&lt;ul>
&lt;li>&lt;code>enabled&lt;/code>: true/false flag to enable this validation.&lt;/li>
&lt;li>&lt;code>versionControlProvider&lt;/code>: Version control provider.&lt;/li>
&lt;li>&lt;code>organization&lt;/code>: Organization for the repository.&lt;/li>
&lt;li>&lt;code>repo&lt;/code>: Repository name.&lt;/li>
&lt;li>&lt;code>secret&lt;/code>: Secret configured.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h2 id="diagnostics-parameters">Diagnostics parameters&lt;/h2>
&lt;ul>
&lt;li>&lt;code>enabled&lt;/code>: true or false.&lt;/li>
&lt;li>&lt;code>uuid&lt;/code>: UUID of the Armory installation&lt;/li>
&lt;li>&lt;code>logging&lt;/code>:
&lt;ul>
&lt;li>&lt;code>enabled&lt;/code>: true or false.&lt;/li>
&lt;li>&lt;code>endpoint&lt;/code>: Example: &lt;code>https://debug.armory.io/v1/logs&lt;/code>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h2 id="armory-terraform-parameters">Armory Terraform parameters&lt;/h2>
&lt;ul>
&lt;li>&lt;code>enabled&lt;/code>: true or false.&lt;/li>
&lt;li>&lt;code>git&lt;/code>:
&lt;ul>
&lt;li>&lt;code>enabled&lt;/code>: true or false.&lt;/li>
&lt;li>&lt;code>accessToken&lt;/code>: Git access token. Supports encrypted value.&lt;/li>
&lt;li>&lt;code>username&lt;/code>: Git username.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h2 id="secrets-parameters">Secrets parameters&lt;/h2>
&lt;ul>
&lt;li>&lt;code>vault&lt;/code>:
&lt;ul>
&lt;li>&lt;code>enabled&lt;/code>: true or false.&lt;/li>
&lt;li>&lt;code>url&lt;/code>: URL of the Vault endpoint from Spinnaker services.&lt;/li>
&lt;li>&lt;code>path&lt;/code>: (Default: &lt;code>kubernetes&lt;/code>) (Applies to Kubernetes authentication method) Path of the Kubernetes authentication backend mount.&lt;/li>
&lt;li>&lt;code>role&lt;/code>: (Applies to Kubernetes authentication method) Name of the role against which the login is being attempted.&lt;/li>
&lt;li>&lt;code>authMethod&lt;/code>: Method used to authenticate with the Vault endpoint. Must be either &lt;code>KUBERNETES&lt;/code> for Kubernetes service account auth or &lt;code>TOKEN&lt;/code> for Vault token auth. The &lt;code>TOKEN&lt;/code> method requires a &lt;code>VAULT_TOKEN&lt;/code> environment variable for Operator and the services.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h2 id="kustomize-patch-examples">Kustomize patch examples&lt;/h2>
&lt;p>You can see examples in the &lt;code>spinnaker-kustomize-patches&lt;/code> repo&amp;rsquo;s &lt;a href="https://github.com/armory/spinnaker-kustomize-patches/tree/master/armory">&lt;code>armory&lt;/code> folder&lt;/a>.&lt;/p></description></item><item><title>Continuous-Deployment: Artifact Config</title><link>/continuous-deployment/installation/armory-operator/op-manifest-reference/artifact/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/continuous-deployment/installation/armory-operator/op-manifest-reference/artifact/</guid><description>
&lt;h2 id="specspinnakerconfigconfigartifacts">spec.spinnakerConfig.config.artifacts&lt;/h2>
&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">artifacts&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">bitbucket&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">gcs&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">github&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">gitlab&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">gitrepo&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">helm&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">http&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">maven&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">oracle&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">s3&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">templates&lt;/span>:
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="bitbucket">Bitbucket&lt;/h2>
&lt;p>&lt;strong>spec.spinnakerConfig.config.artifacts.bitbucket&lt;/strong>&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">artifacts&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">bitbucket&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">enabled&lt;/span>: &lt;span style="color:#ff79c6">false&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">accounts&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">name&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">username&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">password&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">token&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">tokenFile&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">usernamePasswordFile&lt;/span>:
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>&lt;code>enabled&lt;/code>: true or false&lt;/li>
&lt;/ul>
&lt;h3 id="account-parameters">Account parameters&lt;/h3>
&lt;ul>
&lt;li>&lt;code>username&lt;/code>: Bitbucket username&lt;/li>
&lt;li>&lt;code>password&lt;/code>: Bitbucket password. Supports encrypted value.&lt;/li>
&lt;li>&lt;code>usernamePasswordFile&lt;/code>: File containing &amp;ldquo;username:password&amp;rdquo; to use for Bitbucket authentication. File needs to be present on the machine running Spinnaker. Supports encrypted file.&lt;/li>
&lt;li>&lt;code>token&lt;/code>: Bitbucket Server token. Supports encrypted value.&lt;/li>
&lt;li>&lt;code>tokenFile&lt;/code>: File containing a Bitbucket Server authentication token. File needs to be present on the machine running Spinnaker. Supports encrypted file. This file can be dynamically updated because it is automatically reloaded each time Armory Continuous Deployment makes a request.&lt;/li>
&lt;/ul>
&lt;p>Note: supply &lt;code>username&lt;/code> and &lt;code>password&lt;/code> OR &lt;code>usernamePasswordFile&lt;/code> OR &lt;code>token&lt;/code> OR &lt;code>tokenFile&lt;/code>&lt;/p>
&lt;h2 id="gcs">GCS&lt;/h2>
&lt;p>&lt;strong>spec.spinnakerConfig.config.artifacts.gcs&lt;/strong>&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">gcs&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">enabled&lt;/span>: &lt;span style="color:#ff79c6">false&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">accounts&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">name&lt;/span>: my-gcs-account
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">jsonPath&lt;/span>:
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>&lt;code>enabled&lt;/code>: true or false&lt;/li>
&lt;/ul>
&lt;h3 id="account-parameters-1">Account parameters&lt;/h3>
&lt;ul>
&lt;li>&lt;code>json-path&lt;/code>: The path to a JSON service account that Spinnaker will use as credentials. This is only needed if Spinnaker is not deployed on a Google Compute Engine VM, or needs permissions not afforded to the VM it is running on. See &lt;a href="https://cloud.google.com/compute/docs/access/service-accounts">service-accounts&lt;/a> for more information. File needs to be present on the machine running Spinnaker. Supports encrypted file.&lt;/li>
&lt;/ul>
&lt;h2 id="github">GitHub&lt;/h2>
&lt;p>&lt;strong>spec.spinnakerConfig.config.artifacts.github&lt;/strong>&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">github&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">accounts&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">name&lt;/span>: my-github
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">username&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">password&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">usernamePasswordFile&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">token&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">tokenFile&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">enabled&lt;/span>: &lt;span style="color:#ff79c6">true&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>&lt;code>enabled&lt;/code>: true or false&lt;/li>
&lt;/ul>
&lt;h3 id="account-parameters-2">Account parameters&lt;/h3>
&lt;ul>
&lt;li>&lt;code>username&lt;/code>: GitHub username&lt;/li>
&lt;li>&lt;code>password&lt;/code>: GitHub password. Supports encrypted value.&lt;/li>
&lt;li>&lt;code>usernamePasswordFile&lt;/code>: File containing &amp;ldquo;username:password&amp;rdquo; to use for GitHub authentication. File needs to be present on the machine running Spinnaker. Supports encrypted file.&lt;/li>
&lt;li>&lt;code>token&lt;/code>: GitHub token. Supports encrypted value.&lt;/li>
&lt;li>&lt;code>tokenFile&lt;/code>: File containing a GitHub authentication token. File needs to be present on the machine running Spinnaker. Supports encrypted file. This file can be dynamically updated because it is automatically reloaded each time Armory Continuous Deployment makes a request.&lt;/li>
&lt;/ul>
&lt;p>Note: supply &lt;code>username&lt;/code> and &lt;code>password&lt;/code> OR &lt;code>usernamePasswordFile&lt;/code> or &lt;code>token&lt;/code> or &lt;code>tokenFile&lt;/code>&lt;/p>
&lt;h2 id="gitlab">GitLab&lt;/h2>
&lt;p>&lt;strong>spec.spinnakerConfig.config.artifacts.gitlab&lt;/strong>&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">gitlab&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">enabled&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">accounts&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">name&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">token&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">tokenFile&lt;/span>:
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>&lt;code>enabled&lt;/code>: true or false&lt;/li>
&lt;/ul>
&lt;h3 id="account-parameters-3">Account parameters&lt;/h3>
&lt;ul>
&lt;li>&lt;code>token&lt;/code>: Gitlab token. Supports encrypted value.&lt;/li>
&lt;li>&lt;code>tokenFile&lt;/code>: File containing a Gitlab authentication token. File needs to be present on the machine running Spinnaker. Supports encrypted file. This file can be dynamically updated because it is automatically reloaded each time Armory Continuous Deployment makes a request.&lt;/li>
&lt;/ul>
&lt;p>Note: supply &lt;code>token&lt;/code> or &lt;code>tokenFile&lt;/code>&lt;/p>
&lt;h2 id="gitrepo">GitRepo&lt;/h2>
&lt;p>&lt;strong>spec.spinnakerConfig.config.artifacts.gitrepo&lt;/strong>&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">gitrepo&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">enabled&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">accounts&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">name&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">username&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">password&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">usernamePasswordFile&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">token&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">tokenFile&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">sshPrivateKeyFilePath&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">sshPrivateKeyPassphrase&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">sshKnownHostsFilePath&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">sshTrustUnknownHosts&lt;/span>:
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>&lt;code>enabled&lt;/code>: true or false&lt;/li>
&lt;/ul>
&lt;h3 id="account-parameters-4">Account parameters&lt;/h3>
&lt;ul>
&lt;li>&lt;code>username&lt;/code>: Git username&lt;/li>
&lt;li>&lt;code>password&lt;/code>: Git password. Supports encrypted value.&lt;/li>
&lt;li>&lt;code>usernamePasswordFile&lt;/code>: File containing &amp;ldquo;username:password&amp;rdquo; to use for Git authentication. File needs to be present on the machine running Spinnaker. Supports encrypted file.&lt;/li>
&lt;li>&lt;code>token&lt;/code>: Git token. Supports encrypted value.&lt;/li>
&lt;li>&lt;code>tokenFile&lt;/code>: File containing a Git authentication token. File needs to be present on the machine running Spinnaker. Supports encrypted file. This file can be dynamically updated because it is automatically reloaded each time Armory Continuous Deployment makes a request.&lt;/li>
&lt;li>&lt;code>sshPrivateKeyFilePath&lt;/code>: Path to the ssh private key in PEM format. File needs to be present on the machine running Spinnaker. Supports encrypted file.&lt;/li>
&lt;li>&lt;code>sshPrivateKeyPassphrase&lt;/code>: Passphrase for encrypted private key. Supports encrypted value.&lt;/li>
&lt;li>&lt;code>sshKnownHostsFilePath&lt;/code>: File containing the known and trusted SSH hosts. File needs to be present on the machine running Spinnaker. Supports encrypted file.&lt;/li>
&lt;li>&lt;code>sshTrustUnknownHosts&lt;/code>: Setting this to true allows Spinnaker to authenticate with unknown hosts&lt;/li>
&lt;/ul>
&lt;p>Note: supply &lt;code>username&lt;/code> and &lt;code>password&lt;/code> OR &lt;code>usernamePasswordFile&lt;/code> or &lt;code>token&lt;/code> or &lt;code>tokenFile&lt;/code>&lt;/p>
&lt;h2 id="helm">Helm&lt;/h2>
&lt;p>&lt;strong>spec.spinnakerConfig.config.artifacts.helm&lt;/strong>&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">helm&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">enabled&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">accounts&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">name&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">repository&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">username&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">password&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">usernamePasswordFile&lt;/span>:
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>&lt;code>enabled&lt;/code>: true or false&lt;/li>
&lt;/ul>
&lt;h3 id="account-parameters-5">Account parameters&lt;/h3>
&lt;ul>
&lt;li>&lt;code>repository&lt;/code>: Helm chart repository&lt;/li>
&lt;li>&lt;code>username&lt;/code>: Helm chart repository basic auth username&lt;/li>
&lt;li>&lt;code>password&lt;/code>: Helm chart repository basic auth password. Supports encrypted value.&lt;/li>
&lt;li>&lt;code>usernamePasswordFile&lt;/code>: File containing &amp;ldquo;username:password&amp;rdquo; to use for helm chart repository basic auth. File needs to be present on the machine running Spinnaker. Supports encrypted file.&lt;/li>
&lt;/ul>
&lt;p>Note: supply &lt;code>username&lt;/code> and &lt;code>password&lt;/code> OR &lt;code>usernamePasswordFile&lt;/code>&lt;/p>
&lt;h2 id="https">HTTPS&lt;/h2>
&lt;p>&lt;strong>spec.spinnakerConfig.config.artifacts.https&lt;/strong>&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">http&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">enabled&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">accounts&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">name&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">username&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">password&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">usernamePasswordFile&lt;/span>:
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>&lt;code>enabled&lt;/code>: true or false&lt;/li>
&lt;/ul>
&lt;h3 id="account-parameters-6">Account parameters&lt;/h3>
&lt;ul>
&lt;li>&lt;code>username&lt;/code>: HTTP basic auth username&lt;/li>
&lt;li>&lt;code>password&lt;/code>: HTTP basic auth password. Supports encrypted value.&lt;/li>
&lt;li>&lt;code>usernamePasswordFile&lt;/code>: File containing &amp;ldquo;username:password&amp;rdquo; to use for HTTP basic auth. File needs to be present on the machine running Spinnaker. Supports encrypted file.&lt;/li>
&lt;/ul>
&lt;p>Note: supply &lt;code>username&lt;/code> and &lt;code>password&lt;/code> OR &lt;code>usernamePasswordFile&lt;/code>&lt;/p>
&lt;h2 id="maven">Maven&lt;/h2>
&lt;p>&lt;strong>spec.spinnakerConfig.config.artifacts.maven.accounts&lt;/strong>&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">maven&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">enabled&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">accounts&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">name&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">repositoryUrl&lt;/span>:
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>&lt;code>enabled&lt;/code>: true or false&lt;/li>
&lt;/ul>
&lt;h3 id="account-parameters-7">Account parameters&lt;/h3>
&lt;ul>
&lt;li>&lt;code>repositoryUrl&lt;/code>: Full URI for the Maven repository ie.&lt;code>http://some.host.com/repository/path&lt;/code>&lt;/li>
&lt;/ul>
&lt;h2 id="oracle">Oracle&lt;/h2>
&lt;p>&lt;strong>spec.spinnakerConfig.config.artifacts.oracle&lt;/strong>&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">oracle&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">enabled&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">accounts&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">name&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">namespace&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">region&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">userId&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">fingerprint&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">sshPrivateKeyFilePath&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">privateKeyPassphrase&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">tenancyId&lt;/span>:
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>&lt;code>enabled&lt;/code>: true or false&lt;/li>
&lt;/ul>
&lt;h3 id="account-parameters-8">Account parameters&lt;/h3>
&lt;ul>
&lt;li>&lt;code>namespace&lt;/code>: The namespace the bucket and objects should be created in&lt;/li>
&lt;li>&lt;code>region&lt;/code>: An Oracle region (e.g., us-phoenix-1)&lt;/li>
&lt;li>&lt;code>userId&lt;/code>: Provide the OCID of the Oracle User you&amp;rsquo;re authenticating as&lt;/li>
&lt;li>&lt;code>fingerprint&lt;/code>: Fingerprint of the public key&lt;/li>
&lt;li>&lt;code>sshPrivateKeyFilePath&lt;/code>: Path to the private key in PEM format. File needs to be present on the machine running Spinnaker. Supports encrypted file.&lt;/li>
&lt;li>&lt;code>privateKeyPassphrase&lt;/code>: Passphrase used for the private key, if it is encrypted. Supports encrypted value.&lt;/li>
&lt;li>&lt;code>tenancyId&lt;/code>: Provide the OCID of the Oracle Tenancy to use.&lt;/li>
&lt;/ul>
&lt;h2 id="s3">S3&lt;/h2>
&lt;p>&lt;strong>spec.spinnakerConfig.config.artifacts.s3&lt;/strong>&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">s3&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">enabled&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">accounts&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">name&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">apiEndpoint&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">apiRegion&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">region&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">awsAccessKeyId&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">awsSecretAccessKey&lt;/span>:
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>&lt;code>enabled&lt;/code>: true or false&lt;/li>
&lt;/ul>
&lt;h3 id="account-parameters-9">Account parameters&lt;/h3>
&lt;ul>
&lt;li>&lt;code>apiEndpoint&lt;/code>: S3 api endpoint; only required when using an S3 clone such as Minio&lt;/li>
&lt;li>&lt;code>apiRegion&lt;/code>: S3 api region; only required when using an S3 clone such as Minio&lt;/li>
&lt;li>&lt;code>region&lt;/code>: S3 region&lt;/li>
&lt;li>&lt;code>awsAccessKeyId&lt;/code>: Your AWS Access Key ID. If not provided, Halyard/Spinnaker will try to find AWS credentials as described at &lt;a href="http://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/credentials.html#credentials-default">http://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/credentials.html#credentials-default&lt;/a>&lt;/li>
&lt;li>&lt;code>awsSecretAccessKey&lt;/code>: Your AWS Secret Key. Supports encrypted value.&lt;/li>
&lt;/ul>
&lt;h2 id="templates">Templates&lt;/h2>
&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">templates&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>- &lt;span style="color:#ff79c6">name&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">templatePath&lt;/span>:
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;code>templatePath&lt;/code>: The path to the Jinja template to use for artifact extraction. File needs to be present on the machine running Spinnaker.&lt;/p></description></item><item><title>Continuous-Deployment: AWS QuickStart Step 1</title><link>/continuous-deployment/installation/guide/quickstart/armory-spinnaker-quickstart-1/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/continuous-deployment/installation/guide/quickstart/armory-spinnaker-quickstart-1/</guid><description>
&lt;p>The AWS QuickStart walks you through configuring your Spinnaker instance hosted on AWS to deploy to AWS.&lt;/p>
&lt;div class="alert alert-primary" role="alert">
&lt;h4 class="alert-heading">Note&lt;/h4>
This guide assumes that Spinnaker is installed with Halyard, not Operator.
&lt;/div>
&lt;h2 id="prerequisites">Prerequisites&lt;/h2>
&lt;p>Before you start, ensure that you complete the following requirements:&lt;/p>
&lt;ul>
&lt;li>Have your AWS Account number available in a text editor*&lt;/li>
&lt;li>Have Minnaker installed on AWS. For more information about Minnaker, see &lt;a href="https://github.com/armory/minnaker">Minnaker&lt;/a>.&lt;/li>
&lt;li>SSH into your Minnaker Instance with AWS keys&lt;/li>
&lt;/ul>
&lt;p>Need help setting this up? - For a guided tutorial, watch the &lt;strong>Video Walkthrough&lt;/strong> at the bottom of this document.&lt;/p>
&lt;h2 id="prepare-aws-by-creating-roles-permissions-and-trust">Prepare AWS by creating Roles, Permissions, and Trust&lt;/h2>
&lt;figure>
&lt;img src="/images/AWS-Roles-Spinnaker.png"/>
&lt;/figure>
&lt;h3 id="in-this-step-we-configure-2-aws-roles-to-enable-spinnaker-to-deploy-to-your-aws-environment">In this step, we configure 2 AWS Roles to enable Spinnaker to deploy to your AWS environment&lt;/h3>
&lt;ol>
&lt;li>
&lt;p>Create - &lt;strong>&amp;ldquo;Spinnaker-Managed-Role&amp;rdquo;&lt;/strong> in AWS Console -&amp;gt; IAM -&amp;gt; Roles.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Bind &lt;strong>&amp;ldquo;PowerUserAccess&amp;rdquo;&lt;/strong> to &lt;strong>&amp;ldquo;Spinnaker-Managed-Role&amp;rdquo;&lt;/strong> in &lt;strong>Permissions&lt;/strong>.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&amp;ldquo;PassRole-and-Certificate&amp;rdquo;&lt;/strong> (inline policy for &lt;strong>Spinnaker-Managed-Role&lt;/strong>):&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-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;Version&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;2012-10-17&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;Statement&amp;#34;&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">&amp;#34;Action&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f1fa8c">&amp;#34;iam:ListServerCertificates&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f1fa8c">&amp;#34;iam:PassRole&amp;#34;&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">&amp;#34;Resource&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f1fa8c">&amp;#34;*&amp;#34;&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">&amp;#34;Effect&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;Allow&amp;#34;&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>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>Create - &lt;strong>&amp;ldquo;Spinnaker-Managing-Role&amp;rdquo;&lt;/strong>.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Bind &lt;strong>&amp;ldquo;PowerUserAccess&amp;rdquo;&lt;/strong> to &lt;strong>&amp;ldquo;Spinnaker-Managing-Role&amp;rdquo;&lt;/strong>.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&amp;ldquo;BaseIAM-PassRole&amp;rdquo;&lt;/strong> (Create as inline policy on &lt;strong>&amp;ldquo;Spinnaker-Managing-Role&amp;rdquo;&lt;/strong>). You must replace [YOUR_AWS_ACCOUNT_ID] with your actual AWS account id.&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-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;Version&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;2012-10-17&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;Statement&amp;#34;&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">&amp;#34;Effect&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;Allow&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;Action&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f1fa8c">&amp;#34;ec2:DescribeAvailabilityZones&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f1fa8c">&amp;#34;ec2:DescribeRegions&amp;#34;&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">&amp;#34;Resource&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f1fa8c">&amp;#34;*&amp;#34;&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>&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">&amp;#34;Action&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;sts:AssumeRole&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;Resource&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f1fa8c">&amp;#34;arn:aws:iam::[YOUR_AWS_ACCOUNT_ID]:role/Spinnaker-Managed-Role&amp;#34;&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">&amp;#34;Effect&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;Allow&amp;#34;&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>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>&lt;strong>Spinnaker-Managed-Role&lt;/strong> -&amp;gt; &lt;strong>Trust relationship&lt;/strong>&lt;/p>
&lt;p>Now, &lt;strong>&amp;ldquo;Spinnaker-Managed-Role&amp;rdquo;&lt;/strong> must have Trust relationship with &lt;strong>&amp;ldquo;Spinnaker-Managing-Role&amp;rdquo;&lt;/strong>. You must replace [YOUR_AWS_ACCOUNT_ID] with your actual AWS account id.&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-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;Version&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;2012-10-17&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;Statement&amp;#34;&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">&amp;#34;Effect&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;Allow&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;Principal&amp;#34;&lt;/span>: {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;AWS&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;arn:aws:iam::[YOUR_AWS_ACCOUNT_ID]:role/Spinnaker-Managing-Role&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;Service&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f1fa8c">&amp;#34;ecs.amazonaws.com&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f1fa8c">&amp;#34;application-autoscaling.amazonaws.com&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f1fa8c">&amp;#34;ecs-tasks.amazonaws.com&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f1fa8c">&amp;#34;ec2.amazonaws.com&amp;#34;&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>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;Action&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;sts:AssumeRole&amp;#34;&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>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;/ol>
&lt;h3 id="bind-spinnaker-managing-role-to-minnaker-instance-in-aws-console">Bind &amp;ldquo;Spinnaker-Managing-Role&amp;rdquo; to Minnaker Instance in AWS Console&lt;/h3>
&lt;ol>
&lt;li>
&lt;p>Locate your Minnaker EC2 instance in the AWS Console and click &lt;strong>Action&lt;/strong> &amp;gt; &lt;strong>Instance Settings&lt;/strong> &amp;gt; &lt;strong>Attach Replace IAM Role&lt;/strong>.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>From the dropdown menu, find &lt;strong>&amp;ldquo;Spinnaker-Managing-Role&amp;rdquo;&lt;/strong> and click &lt;strong>Apply&lt;/strong> to bind the Role to the Minnaker Instance.&lt;/p>
&lt;/li>
&lt;/ol>
&lt;h2 id="login-to-your-minnaker-ec2-instance-with-ssh-outside-of-halyard-container">Login to your Minnaker EC2 Instance with SSH (Outside of Halyard Container)&lt;/h2>
&lt;h3 id="verify-roles-are-configured-correctly">Verify Roles are configured correctly&lt;/h3>
&lt;ol>
&lt;li>
&lt;p>Download the aws-cli:&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>sudo snap install aws-cli --classic
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>Verify &lt;strong>&amp;ldquo;Spinnaker-Managing-Role&amp;rdquo;&lt;/strong>:&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 sts get-caller-identity
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>The command returns output similar to the following output:&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>ubuntu:~$ aws sts get-caller-identity
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f1fa8c">&amp;#34;UserId&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;AROA3SQXSP.............7893f355&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f1fa8c">&amp;#34;Account&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;[YOUR_AWS_ACCOUNT_ID]&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f1fa8c">&amp;#34;Arn&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;arn:aws:sts::[YOUR_AWS_ACCOUNT_ID]:assumed-role/Spinnaker-Managing-Role/i-0e.........7893f355&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>Verify that Spinnaker Managing Role can Assume Managing Role:&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 sts assume-role --role-arn arn:aws:iam::&lt;span style="color:#ff79c6">[&lt;/span>YOUR_AWS_ACCOUNT_ID&lt;span style="color:#ff79c6">]&lt;/span>:role/Spinnaker-Managed-Role --role-session-name &lt;span style="color:#8be9fd;font-style:italic">test&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>The command returns output similar to the following output:&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>ubuntu:~$ aws sts assume-role --role-arn arn:aws:iam::&lt;span style="color:#ff79c6">[&lt;/span>YOUR_AWS_ACCOUNT_ID&lt;span style="color:#ff79c6">]&lt;/span>:role/Spinnaker-Managed-Role --role-session-name &lt;span style="color:#8be9fd;font-style:italic">test&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f1fa8c">&amp;#34;Credentials&amp;#34;&lt;/span>: &lt;span style="color:#ff79c6">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f1fa8c">&amp;#34;Expiration&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;2020-01-09T01:03:05Z&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f1fa8c">&amp;#34;AccessKeyId&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;AWS_ACCESS_KEY&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f1fa8c">&amp;#34;SecretAccessKey&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;AWS_SECRET_ACCESS_KEY&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f1fa8c">&amp;#34;SessionToken&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;FwoGZXIvYXdzEGEaDEyTECcALWUjAgy0GyKoAZ5PapC1qqFwN55X0vRISdtZh19mR3V9p3i5dGZugt3FQ4DNOamVgIG82I1qaspn83aBefdbpUtznN9fJxwPNoRhYinVgIXGdsTWnBuQ57U7s/cDoHosvV5+J3oZj8ffjLInzsI05IrRBiOTmqU3caEP/e+6N5nzHg/9+aS6TCWjCIzjL0mHtclBBQ7k/dijrg/5vTVFh8UGakcJL3SV6gaCHj0k6BUzEii529nwBTItq6/QISV8wfGNLQJOPDB5P3zoQkHjkpoWCEh1p0oc4hEwki8F7NutXNrg14W+&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f1fa8c">&amp;#34;AssumedRoleUser&amp;#34;&lt;/span>: &lt;span style="color:#ff79c6">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f1fa8c">&amp;#34;AssumedRoleId&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;AROA3SQXSP6SGOWFHHJ7B:test&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f1fa8c">&amp;#34;Arn&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;arn:aws:sts::[YOUR_AWS_ACCOUNT_ID]:assumed-role/Spinnaker-Managed-Role/test&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;/ol>
&lt;h2 id="congratulations">Congratulations&lt;/h2>
&lt;p>You have completed the 1st step in setting up the Spinnaker AWS Provider. For Step 2, see &lt;a href="/continuous-deployment/installation/guide/quickstart/armory-spinnaker-quickstart-2/">AWS Quick Start Step 2&lt;/a>.&lt;/p></description></item><item><title>Continuous-Deployment: AWS QuickStart Step 2</title><link>/continuous-deployment/installation/guide/quickstart/armory-spinnaker-quickstart-2/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/continuous-deployment/installation/guide/quickstart/armory-spinnaker-quickstart-2/</guid><description>
&lt;p>Need help setting this up? - For a guided tutorial, see the &lt;a href="#aws-quickstart-step-2-video">video walkthrough&lt;/a> at the bottom of this page.&lt;/p>
&lt;div class="alert alert-primary" role="alert">
&lt;h4 class="alert-heading">Note&lt;/h4>
This guide assumes that Spinnaker is installed with Halyard, not Operator.
&lt;/div>
&lt;h2 id="prerequisites">Prerequisites&lt;/h2>
&lt;p>Before you start, ensure that have completed the following requirements:&lt;/p>
&lt;ul>
&lt;li>
&lt;p>Finish &lt;a href="/continuous-deployment/installation/guide/quickstart/armory-spinnaker-quickstart-1/">AWS QuickStart Step 1&lt;/a>.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Have access to the Kubernetes cluster you would like to deploy to, and you need cluster admin permissions on that Kubernetes cluster.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Have &lt;code>kubectl&lt;/code> installed on your local workstation have the context set to the EKS cluster you want to deploy to.&lt;/p>
&lt;p>Running the following command from your local machine should return the namespaces for the EKS cluster you want to deploy 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>kubectl get ns
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>Have a way to copy files from your local workstation to the Minnaker VM, such as &lt;code>scp&lt;/code>.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;h2 id="first-configure-the-aws-provider-for-spinnaker">First: Configure the AWS Provider for Spinnaker&lt;/h2>
&lt;figure>
&lt;img src="/images/AWS-Deploy-Spinnaker.png"/>
&lt;/figure>
&lt;h3 id="adding-aws-role-to-spinnaker-through-halyard-configuration--note-aws-account-name-is-within-spinnaker-and-will-appear-in-ui">Adding AWS Role to Spinnaker through Halyard configuration. Note AWS account name is within Spinnaker and will appear in UI&lt;/h3>
&lt;p>&lt;strong>NOTE&lt;/strong>: You &lt;strong>MUST&lt;/strong> configure the regions that Spinnaker can deploy to in the &lt;code>hal&lt;/code> command below.&lt;/p>
&lt;p>The Account name is arbitrary and should be a name that is an identifiable. The name is visable in Spinnaker UI. The following examples use &lt;code>aws-dev-1&lt;/code>.&lt;/p>
&lt;ol>
&lt;li>
&lt;p>Set environment variables for halyard command:&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_ACCOUNT_NAME&lt;/span>&lt;span style="color:#ff79c6">=&lt;/span>aws-dev-1 &lt;span style="color:#f1fa8c">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c">&lt;/span>&lt;span style="color:#8be9fd;font-style:italic">export&lt;/span> &lt;span style="color:#8be9fd;font-style:italic">ACCOUNT_ID&lt;/span>&lt;span style="color:#ff79c6">=[&lt;/span>YOUR_ACCOUNT_ID&lt;span style="color:#ff79c6">]&lt;/span> &lt;span style="color:#f1fa8c">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c">&lt;/span>&lt;span style="color:#8be9fd;font-style:italic">export&lt;/span> &lt;span style="color:#8be9fd;font-style:italic">ROLE_NAME&lt;/span>&lt;span style="color:#ff79c6">=&lt;/span>role/Spinnaker-Managed-Role
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>Add the AWS provider account to Spinnaker:&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 config provider aws account add &lt;span style="color:#f1fa8c">${&lt;/span>&lt;span style="color:#8be9fd;font-style:italic">AWS_ACCOUNT_NAME&lt;/span>&lt;span style="color:#f1fa8c">}&lt;/span> &lt;span style="color:#f1fa8c">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c">&lt;/span> --account-id &lt;span style="color:#f1fa8c">${&lt;/span>&lt;span style="color:#8be9fd;font-style:italic">ACCOUNT_ID&lt;/span>&lt;span style="color:#f1fa8c">}&lt;/span> &lt;span style="color:#f1fa8c">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c">&lt;/span> --assume-role &lt;span style="color:#f1fa8c">${&lt;/span>&lt;span style="color:#8be9fd;font-style:italic">ROLE_NAME&lt;/span>&lt;span style="color:#f1fa8c">}&lt;/span> &lt;span style="color:#f1fa8c">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c">&lt;/span> --regions us-east-1,us-west-2
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>Enable the AWS provider:&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 config provider aws &lt;span style="color:#8be9fd;font-style:italic">enable&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>Add an account to the ECS provider:&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 config provider ecs account add ecs-account-name --aws-account aws-dev-1
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>Enable the ECS provider:&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 config provider ecs &lt;span style="color:#8be9fd;font-style:italic">enable&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>Apply the new configurations and redeploy Spinnaker:&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 deploy apply
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;/ol>
&lt;h3 id="tag-aws-subnets-for-spinnaker-auto-discovery">Tag AWS Subnets for Spinnaker Auto Discovery&lt;/h3>
&lt;p>If subnets do not appear in Deck (the Spinnaker UI), perform AWS Subnet tagging. &amp;ldquo;example-purpose&amp;rdquo; should be a descriptor of the subnet and will appear in the Spinnaker UI dropdown.&lt;/p>
&lt;p>For more information about AWS Subnet tagging, see &lt;a href="/continuous-deployment/armory-admin/aws/aws-subnets-configure/">AWS: Configuring AWS Networking&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-fallback" data-lang="fallback">&lt;span style="display:flex;">&lt;span>Key Value
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>immutable_metadata {&amp;#34;purpose&amp;#34;:&amp;#34;example-purpose&amp;#34;}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>Replace &lt;code>example-purpose&lt;/code> with your subnet identifier. The subnet shows up in Deck as a dropdown option.&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Example:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>Key: &lt;code>immutable_metadata&lt;/code>&lt;/li>
&lt;li>Value: &lt;code>{&amp;quot;purpose&amp;quot;:&amp;quot;us-west-2-dev-subnet&amp;quot;}&lt;/code>&lt;/li>
&lt;/ul>
&lt;h2 id="second-connect-spinnaker-to-an-amazon-eks-cluster">Second: Connect Spinnaker to an Amazon EKS cluster&lt;/h2>
&lt;p>For the tasks in this section, complete them on your local workstation, &lt;em>not from the Minnaker VM&lt;/em>.&lt;/p>
&lt;figure>
&lt;img src="/images/Spinnaker-to-EKS.png"/>
&lt;/figure>
&lt;h2 id="using-spinnaker-tools">Using spinnaker-tools&lt;/h2>
&lt;p>spinnaker-tools is a wrapper that performs a series of &lt;code>kubectl&lt;/code> commands for you to automate creating a service account.&lt;/p>
&lt;p>On your local workstation (where you currently have access to Kubernetes), download the spinnaker-tools binary:&lt;/p>
&lt;p>If you&amp;rsquo;re on a Mac:&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>curl -L https://github.com/armory/spinnaker-tools/releases/download/0.0.7/spinnaker-tools-darwin -o spinnaker-tools
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>chmod +x spinnaker-tools
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>If you&amp;rsquo;re on Linux:&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>curl -L https://github.com/armory/spinnaker-tools/releases/download/0.0.7/spinnaker-tools-linux -o spinnaker-tools
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>chmod +x spinnaker-tools
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Then, run it:&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>./spinnaker-tools create-service-account
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Provide the following information:&lt;/p>
&lt;ul>
&lt;li>Select the Kubernetes cluster to deploy to (this helps if you have multiple Kubernetes clusters configured in your local kubeconfig)&lt;/li>
&lt;li>Select the namespace (choose the &lt;code>kube-system&lt;/code> namespace, or select some other namespace or select the option to create a new namespace). This is the namespace that the Kubernetes ServiceAccount will be created in.&lt;/li>
&lt;li>Enter a name for the service account. You can use the default &lt;code>spinnaker-service-account&lt;/code>, or enter a new (unique) name.&lt;/li>
&lt;li>Enter a name for the output file. You can use the default &lt;code>kubeconfig-sa&lt;/code>, or you can enter a unique name. You should use something that identifies the Kubernetes cluster you are deploying to (for example, if you are setting up Spinnaker to deploy to your us-west-2 dev cluster, then you could do something like &lt;code>kubeconfig-us-west-2-dev&lt;/code>)&lt;/li>
&lt;/ul>
&lt;p>&lt;code>spinnaker-tools&lt;/code> uses this information to create the service account (and namespace, if applicable) and the ClusterRoleBinding. It then creates the kubeconfig file with the specified name.&lt;/p>
&lt;p>Copy this file from your local workstation to your Minnaker VM. You can use &lt;code>scp&lt;/code> or some other copy mechanism.&lt;/p>
&lt;h2 id="add-the-kubeconfig-to-spinnakers-halyard-configuration">Add the kubeconfig to Spinnaker&amp;rsquo;s Halyard configuration&lt;/h2>
&lt;p>On the Minnaker VM, move or copy the file to &lt;code>/etc/spinnaker/.hal/.secret&lt;/code>. Make sure you are creating a new file, not overwriting an existing one.&lt;/p>
&lt;p>Then, run this command:&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 config provider kubernetes account add kubeconfig-sa-eks &lt;span style="color:#f1fa8c">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c">&lt;/span> --provider-version v2 &lt;span style="color:#f1fa8c">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c">&lt;/span> --kubeconfig-file /home/spinnaker/.hal/.secret/kubeconfig-sa-eks &lt;span style="color:#f1fa8c">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c">&lt;/span> --only-spinnaker-managed &lt;span style="color:#8be9fd;font-style:italic">true&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Note:&lt;/p>
&lt;ul>
&lt;li>Update the &lt;code>--kubeconfig-file&lt;/code> path with the correct filename. Note that the path will be &lt;code>/home/spinnaker/...&lt;/code> &lt;strong>not&lt;/strong> &lt;code>/etc/spinnaker/...&lt;/code>. This is because this command runs inside the Halyard container, which has local volumes mounted into it.&lt;/li>
&lt;/ul>
&lt;h2 id="apply-your-changes">Apply your changes&lt;/h2>
&lt;p>Run this command to apply your changes to Spinnaker:&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 deploy apply --wait-for-completion
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="congratulations">Congratulations&lt;/h2>
&lt;p>You have configured the Spinnaker AWS Provider and Kubernetes Account for EKS. You can now deploy to EC2, ECS, Fargate, and EKS. Lets build some pipelines in &lt;a href="/continuous-deployment/installation/guide/quickstart/armory-spinnaker-quickstart-3/">AWS QuickStart Step 3&lt;/a>.&lt;/p></description></item><item><title>Continuous-Deployment: AWS QuickStart Step 3</title><link>/continuous-deployment/installation/guide/quickstart/armory-spinnaker-quickstart-3/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/continuous-deployment/installation/guide/quickstart/armory-spinnaker-quickstart-3/</guid><description>
&lt;p>Need help setting this up? - For a guided tutorial, see the &lt;a href="#aws-quickstart-step-3-video">video walkthrough&lt;/a> at the bottom of this page.&lt;/p>
&lt;div class="alert alert-primary" role="alert">
&lt;h4 class="alert-heading">Note&lt;/h4>
This guide assumes that Spinnaker is installed with Halyard, not Operator.
&lt;/div>
&lt;h2 id="prerequisite">Prerequisite&lt;/h2>
&lt;p>Before you start, ensure that have completed the following requirements:&lt;/p>
&lt;ul>
&lt;li>Finish &lt;a href="/continuous-deployment/installation/guide/quickstart/armory-spinnaker-quickstart-2/">AWS QuickStart Step 2&lt;/a>&lt;/li>
&lt;/ul>
&lt;h2 id="deploy-to-ec2-and-eks">Deploy to EC2 and EKS&lt;/h2>
&lt;p>Before you start, you need to log in to Deck, the Spinnaker UI.&lt;/p>
&lt;p>You can access it by navigating to the Public IP address of your instance in a browser. You can get the Public IP address from your AWS Console.&lt;/p>
&lt;p>If you have forgotten the password to your Minnaker instance you can recover your password with the following steps:&lt;/p>
&lt;ol>
&lt;li>SSH to the Minnaker host VM. Do not exec into the Halyard pod though.&lt;/li>
&lt;li>Run the following command:&lt;/li>
&lt;/ol>
&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>cat /etc/spinnaker/.hal/.secret/spinnaker_password
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>The command returns the password for Minnaker.&lt;/p>
&lt;p>After you log in to Deck, perform the following steps:&lt;/p>
&lt;ol>
&lt;li>Create an Application called &lt;strong>QuickStart&lt;/strong> by clicking &amp;ldquo;&lt;strong>Applications&lt;/strong>&amp;rdquo; tab &amp;gt; &amp;ldquo;&lt;strong>Action&lt;/strong>&amp;rdquo; (top right) &amp;gt; &amp;ldquo;&lt;strong>Create New App&lt;/strong>&amp;rdquo; with the following Settings&lt;/li>
&lt;/ol>
&lt;figure>
&lt;img src="/images/New-App.png"/>
&lt;/figure>
&lt;ol start="2">
&lt;li>
&lt;p>Go into Application &lt;strong>QuickStart&lt;/strong> and create your first pipeline. This pipeline will deploy to an EC2 instance.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Click &lt;strong>Add Stage +&lt;/strong> and search for a &lt;strong>Bake&lt;/strong> stage to bake an AMI.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Select the AWS Region you want to deploy to.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Click &lt;strong>Add Server Group&lt;/strong> and configure basic AMI bake settings: Account, Region, Subnet, Instance Type, and AWS SSH key. Note: For more information about setting up your Bake Stage, please check out &lt;a href="/continuous-deployment/armory-admin/aws/packer/#configuring-aws-networks">configuring AWS networks&lt;/a>, which includes guides about requirements regarding subnet configuration.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Click &lt;strong>Done&lt;/strong> and then &lt;strong>Save Changes&lt;/strong> in the bottom right corner.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Click &lt;strong>Add Stage&lt;/strong> and add another stage called &lt;strong>Deploy&lt;/strong> for AWS EC2.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Click the &amp;ldquo;&lt;strong>Back to Execution&lt;/strong>&amp;rdquo; button on the top left of the Pipeline Name&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Run your Pipeline and Validate! The end result will be an Auto Scaling Group build within your AWS subnet.&lt;/p>
&lt;/li>
&lt;/ol>
&lt;h2 id="ec2-pipeline-and-deployment">EC2 Pipeline and deployment&lt;/h2>
&lt;figure>
&lt;img src="/images/Deploy-to-EC2.png"/>
&lt;/figure>
&lt;p>&lt;strong>Note&lt;/strong> - Don&amp;rsquo;t mind the red dot in the Bake Stage. It&amp;rsquo;s an informational tip suggesting a CI Trigger should be configured for a Bake Stage to ensure you are deploying the latest code and artifacts.&lt;/p>
&lt;figure>
&lt;img src="/images/AutoScale-Group.png"/>
&lt;/figure>
&lt;h2 id="eks-deployment">EKS deployment&lt;/h2>
&lt;p>&lt;strong>Note&lt;/strong> As a prerequisite, create a &amp;ldquo;quickstart&amp;rdquo; namespace in EKS:&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 create ns quickstart
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;figure>
&lt;img src="/images/Deploy-Service-EKS.png"/>
&lt;/figure>
&lt;ol>
&lt;li>Navigate to the pipeline page within your &lt;strong>QuickStart&lt;/strong> application.&lt;/li>
&lt;li>Click &lt;strong>Create&lt;/strong> button in top right corner.&lt;/li>
&lt;li>Give the name &lt;strong>Deploy-to-EKS&lt;/strong>.&lt;/li>
&lt;li>Click &lt;strong>Add Stage&lt;/strong> and Search / Select &lt;strong>Deploy(Manifest)&lt;/strong>.&lt;/li>
&lt;li>Select the &lt;strong>kubeconfig-sa-eks&lt;/strong> account created in Step 2.&lt;/li>
&lt;li>Select the &lt;strong>quickstart&lt;/strong> namespace.&lt;/li>
&lt;li>Scroll down and paste in the &lt;strong>Deployment&lt;/strong> yaml below.&lt;/li>
&lt;li>Click &lt;strong>Save Changes&lt;/strong> in the bottom right corner.&lt;/li>
&lt;li>Now create another stange after the &lt;strong>Deployment&lt;/strong> stage. Again select &lt;strong>Deploy(Manifest)&lt;/strong>.&lt;/li>
&lt;li>Select the &lt;strong>kubeconfig-sa-eks&lt;/strong> account and the &lt;strong>quickstart&lt;/strong> namespace for deployment.&lt;/li>
&lt;li>Scroll down and paste in the &lt;strong>Service&lt;/strong> yaml below.&lt;/li>
&lt;li>Click &lt;strong>Save Changes&lt;/strong>.&lt;/li>
&lt;/ol>
&lt;h2 id="time-to-run-your-eks-pipeline-and-validate">Time to run your EKS pipeline and validate&lt;/h2>
&lt;ol>
&lt;li>Click back to the pipeline page using the &lt;strong>Back to Executions&lt;/strong> to the left of the pipeline name.&lt;/li>
&lt;li>Click on the &lt;strong>Start Manual Execution&lt;/strong> on the new pipeline. Then, click &lt;strong>Execution Details&lt;/strong> to see pipeline in action.&lt;/li>
&lt;/ol>
&lt;p>&lt;strong>Deployment yaml definition&lt;/strong>&lt;/p>
&lt;p>Copy and paste the following example into the text field in the 1st Deploy Manifest stage.&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">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>: my-nginx
&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">replicas&lt;/span>: &lt;span style="color:#bd93f9">2&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">selector&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">matchLabels&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">run&lt;/span>: my-nginx
&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">metadata&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">labels&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">run&lt;/span>: my-nginx
&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">image&lt;/span>: nginx
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">name&lt;/span>: my-nginx
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">ports&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">containerPort&lt;/span>: &lt;span style="color:#bd93f9">80&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;strong>Service yaml for last Deployment Stage&lt;/strong>&lt;/p>
&lt;p>Copy and paste the following example into the text field in the 2nd Deploy Manifest stage.&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">apiVersion&lt;/span>: v1
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">kind&lt;/span>: Service
&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">labels&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">run&lt;/span>: my-nginx
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">name&lt;/span>: my-nginx
&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">ports&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">port&lt;/span>: &lt;span style="color:#bd93f9">80&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">protocol&lt;/span>: TCP
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">targetPort&lt;/span>: &lt;span style="color:#bd93f9">80&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">selector&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">run&lt;/span>: my-nginx
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">type&lt;/span>: LoadBalancer
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="validation-in-eks-and-in-spinnaker">Validation in EKS and in Spinnaker&lt;/h2>
&lt;ol>
&lt;li>In EKS run the following commands to see nginx pods being created: &lt;code>kubectl get pods -n quickstart&lt;/code>.&lt;/li>
&lt;li>In Deck, the Spinnaker UI, navigate to the &lt;strong>Applications&lt;/strong> page and see the deployment and containers there.&lt;/li>
&lt;/ol>
&lt;ul>
&lt;li>Under &lt;strong>Load Balancers&lt;/strong>, click on Apps to view the status of your service.&lt;/li>
&lt;li>In the Status section on the right of the page, locate the Ingress address that was created to allow public access to your new deployment.&lt;/li>
&lt;/ul>
&lt;ol start="3">
&lt;li>Copy and paste the FQDN from the load balancer status section into a web browser to test the NGINX landing page.&lt;/li>
&lt;/ol>
&lt;figure>
&lt;img src="/images/kubectl-validate.png"/>
&lt;/figure>
&lt;figure>
&lt;img src="/images/Deployment-Validation.png"/>
&lt;/figure>
&lt;h2 id="congratulations">Congratulations&lt;/h2>
&lt;p>You completed the QuickStart exercise! You can now deploy to AWS using Spinnaker. What&amp;rsquo;s Next?&lt;/p>
&lt;ul>
&lt;li>Connect your Spinnaker instance to your repositories / artifacts (Github, Sonatype, Artifactory, DockerHub, ECR, GCR, etc).&lt;/li>
&lt;li>Build in a automated trigger from your CI systems (Jenkins, Bamboo, CircleCI, TravisCI, Nexus, Git, Generic Webhook, etc).&lt;/li>
&lt;li>Integrate with 3rd party systems (OKTA, Sumo Logic, Splunk, Datadog, Newrelic, Slack, etc).&lt;/li>
&lt;li>Integrate with DevSecOps tools (Xray, ChaosMonkey, Artifactory, etc).&lt;/li>
&lt;/ul>
&lt;p>To get expert help in any of the areas above you can contact Armory.io at &lt;a href="https://go.armory.io/needs-analysis">https://go.armory.io/needs-analysis&lt;/a>&lt;/p></description></item><item><title>Continuous-Deployment: Canary Config</title><link>/continuous-deployment/installation/armory-operator/op-manifest-reference/canary-op-config/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/continuous-deployment/installation/armory-operator/op-manifest-reference/canary-op-config/</guid><description>
&lt;h2 id="specspinnakerconfigconfigcanary">spec.spinnakerConfig.config.canary&lt;/h2>
&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">canary&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">enabled&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">reduxLoggerEnabled&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">defaultMetricsAccount&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">defaultStorageAccount&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">defaultJudge&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">defaultMetricsStore&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">stagesEnabled&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">atlasWebComponentsUrl&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">templatesEnabled&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">showAllConfigsEnabled&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">serviceIntegrations&lt;/span>:
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>&lt;code>enabled&lt;/code>: true or false&lt;/li>
&lt;li>&lt;code>reduxLoggerEnabled&lt;/code>: true or false; whether or not to enable redux logging in the canary module in deck (Default: true).&lt;/li>
&lt;li>&lt;code>defaultMetricsAccount&lt;/code>: Name of metrics account to use by default.&lt;/li>
&lt;li>&lt;code>defaultStorageAccount&lt;/code>: Name of storage account to use by default.&lt;/li>
&lt;li>&lt;code>defaultJudge&lt;/code>: Name of canary judge to use by default (Default: NetflixACAJudge-v1.0).&lt;/li>
&lt;li>&lt;code>defaultMetricsStore&lt;/code>: Name of metrics store to use by default (e.g. atlas, datadog, prometheus, stackdriver).&lt;/li>
&lt;li>&lt;code>stagesEnabled&lt;/code>: true or false; whether or not to enable canary stages in deck (Default: true).&lt;/li>
&lt;li>&lt;code>atlasWebComponentsUrl&lt;/code>: Location of web components to use for Atlas metric configuration.&lt;/li>
&lt;li>&lt;code>templatesEnabled&lt;/code>: true or false; whether or not to enable custom filter templates for canary configs in deck (Default: true).&lt;/li>
&lt;li>&lt;code>showAllConfigsEnabled&lt;/code>: true or false; whether or not to show all canary configs in deck, or just those scoped to the current application (Default: true).&lt;/li>
&lt;li>&lt;code>serviceIntegrations&lt;/code>: list of configured canary services&lt;/li>
&lt;/ul>
&lt;h2 id="service-integrations">Service Integrations&lt;/h2>
&lt;p>&lt;strong>spec.spinnakerConfig.config.canary.serviceIntegrations&lt;/strong>&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">canary&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">enabled&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">serviceIntegrations&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">name&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">enabled&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">accounts&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">name&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">enabled&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">accounts&lt;/span>:
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="datadog">Datadog&lt;/h3>
&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">name&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">enabled&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">accounts&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">name&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">endpoint&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">baseUrl&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">apiKey&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">applicationKey&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">supportedTypes&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - METRICS_STORE
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - CONFIGURATION_STORE
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - OBJECT_STORE
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>&lt;code>name&lt;/code>: datadog
&lt;ul>
&lt;li>&lt;code>enabled&lt;/code>: true or false&lt;/li>
&lt;li>&lt;code>accounts&lt;/code>:
&lt;ul>
&lt;li>&lt;code>name&lt;/code>: account name
&lt;ul>
&lt;li>&lt;code>endpoint&lt;/code>:
&lt;ul>
&lt;li>&lt;code>baseUrl&lt;/code>: (&lt;em>Required&lt;/em>) The base URL to the Datadog server.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;code>apiKey&lt;/code>: (&lt;em>Required&lt;/em>) Your org&amp;rsquo;s unique Datadog API key. See &lt;a href="https://app.datadoghq.com/account/settings#api">https://app.datadoghq.com/account/settings#api&lt;/a>. Supports encrypted value.&lt;/li>
&lt;li>&lt;code>applicationKey&lt;/code>: (&lt;em>Required&lt;/em>) Your Datadog application key. See &lt;a href="https://app.datadoghq.com/account/settings#api">https://app.datadoghq.com/account/settings#api&lt;/a>. Supports encrypted value.&lt;/li>
&lt;li>&lt;code>supportedTypes&lt;/code>: One of: &lt;code>METRICS_STORE&lt;/code>, &lt;code>METRICS_STORE&lt;/code>, &lt;code>OBJECT_STORE&lt;/code>
&lt;ul>
&lt;li>METRICS_STORE&lt;/li>
&lt;li>CONFIGURATION_STORE&lt;/li>
&lt;li>OBJECT_STORE&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h3 id="google">Google&lt;/h3>
&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">name&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">enabled&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">accounts&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">name&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">project&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">jsonPath&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">bucket&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">bucketLocation&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">rootFolder&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">supportedTypes&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - METRICS_STORE
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - CONFIGURATION_STORE
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - OBJECT_STORE
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">gcsEnabled&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">stackdriverEnabled&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">metadataCachingIntervalMS&lt;/span>:
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>&lt;code>name&lt;/code>: google
&lt;ul>
&lt;li>&lt;code>enabled&lt;/code>: true or false&lt;/li>
&lt;li>&lt;code>accounts&lt;/code>:`
&lt;ul>
&lt;li>&lt;code>name&lt;/code>: account name
&lt;ul>
&lt;li>&lt;code>project&lt;/code>: (&lt;em>Required&lt;/em>) The Google Cloud Platform project the canary service will use to consume GCS and Stackdriver.&lt;/li>
&lt;li>&lt;code>jsonPath&lt;/code>: The path to a JSON service account that Spinnaker will use as credentials. This is only needed if Spinnaker is not deployed on a Google Compute Engine VM, or needs permissions not afforded to the VM it is running on. See &lt;a href="https://cloud.google.com/compute/docs/access/service-accounts">https://cloud.google.com/compute/docs/access/service-accounts&lt;/a> for more information. File needs to be present on the machine running Spinnaker. Supports encrypted file.&lt;/li>
&lt;li>&lt;code>bucket&lt;/code>: The name of a storage bucket that your specified account has access to. If you specify a globally unique bucket name that doesn&amp;rsquo;t exist yet, Kayenta will create that bucket for you.&lt;/li>
&lt;li>&lt;code>bucketLocation&lt;/code>: This is only required if the bucket you specify doesn&amp;rsquo;t exist yet. In that case, the bucket will be created in that location. See &lt;a href="https://cloud.google.com/storage/docs/managing-buckets#manage-class-location">https://cloud.google.com/storage/docs/managing-buckets#manage-class-location&lt;/a>.&lt;/li>
&lt;li>&lt;code>rootFolder&lt;/code>: The root folder in the chosen bucket to place all of the canary service&amp;rsquo;s persistent data in (Default: kayenta).&lt;/li>
&lt;li>&lt;code>supportedTypes&lt;/code>: One of: &lt;code>METRICS_STORE&lt;/code>, &lt;code>CONFIGURATION_STORE&lt;/code>, &lt;code>OBJECT_STORE&lt;/code>
&lt;ul>
&lt;li>METRICS_STORE&lt;/li>
&lt;li>CONFIGURATION_STORE&lt;/li>
&lt;li>OBJECT_STORE&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;code>gcsEnabled&lt;/code>: true or false. Whether or not to enable GCS as a persistent store (Default: false).&lt;/li>
&lt;li>&lt;code>stackdriverEnabled&lt;/code>: true or false. Whether or not to enable Stackdriver as a metrics service (Default: false).&lt;/li>
&lt;li>&lt;code>metadataCachingIntervalMS&lt;/code>: Number of milliseconds to wait in between caching the names of available metric types (for use in building canary configs; default: 60000).&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h3 id="new-relic">New Relic&lt;/h3>
&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">name&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">enabled&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">accounts&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">name&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">endpoint&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">baseUrl&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">apiKey&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">applicationKey&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">supportedTypes&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - METRICS_STORE
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - CONFIGURATION_STORE
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - OBJECT_STORE
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>&lt;code>name&lt;/code>: newrelic
&lt;ul>
&lt;li>&lt;code>enabled&lt;/code>: true or false&lt;/li>
&lt;li>&lt;code>accounts&lt;/code>:`
&lt;ul>
&lt;li>&lt;code>name&lt;/code>: account name
&lt;ul>
&lt;li>&lt;code>endpoint&lt;/code>:
&lt;ul>
&lt;li>&lt;code>baseUrl&lt;/code>: (&lt;em>Required&lt;/em>) The base URL to the New Relic Insights server.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;code>apiKey&lt;/code>: (&lt;em>Required&lt;/em>) Your account&amp;rsquo;s unique New Relic Insights API key. See &lt;a href="https://docs.newrelic.com/docs/insights/insights-api/get-data/query-insights-event-data-api">https://docs.newrelic.com/docs/insights/insights-api/get-data/query-insights-event-data-api&lt;/a>. Supports encrypted value.&lt;/li>
&lt;li>&lt;code>applicationKey&lt;/code>: (&lt;em>Required&lt;/em>) Your New Relic account id. See &lt;a href="https://docs.newrelic.com/docs/accounts/install-new-relic/account-setup/account-id">https://docs.newrelic.com/docs/accounts/install-new-relic/account-setup/account-id&lt;/a>. Supports encrypted value.&lt;/li>
&lt;li>&lt;code>supportedTypes&lt;/code>: One of: &lt;code>METRICS_STORE&lt;/code>, &lt;code>CONFIGURATION_STORE&lt;/code>, &lt;code>OBJECT_STORE&lt;/code>
&lt;ul>
&lt;li>METRICS_STORE&lt;/li>
&lt;li>CONFIGURATION_STORE&lt;/li>
&lt;li>OBJECT_STORE&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h3 id="prometheus">Prometheus&lt;/h3>
&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">name&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">enabled&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">accounts&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">name&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">endpoint&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">baseUrl&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">username&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">password&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">usernamePasswordFile&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">supportedTypes&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - METRICS_STORE
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - CONFIGURATION_STORE
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - OBJECT_STORE
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">metadataCachingIntervalMS&lt;/span>:
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>&lt;code>name&lt;/code>: prometheus
&lt;ul>
&lt;li>&lt;code>enabled&lt;/code>: true or false&lt;/li>
&lt;li>&lt;code>accounts&lt;/code>: account name
&lt;ul>
&lt;li>&lt;code>name&lt;/code>:
&lt;ul>
&lt;li>&lt;code>endpoint&lt;/code>:
&lt;ul>
&lt;li>&lt;code>baseUrl&lt;/code>: (&lt;em>Required&lt;/em>) The base URL to the Prometheus server.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;code>username&lt;/code>: A basic auth username.&lt;/li>
&lt;li>&lt;code>password&lt;/code>: A basic auth password.&lt;/li>
&lt;li>&lt;code>usernamePasswordFile&lt;/code>: The path to a file containing &amp;ldquo;username:password&amp;rdquo;. File needs to be present on the machine running Spinnaker. Supports encrypted file.&lt;/li>
&lt;li>&lt;code>supportedTypes&lt;/code>: One of: &lt;code>METRICS_STORE&lt;/code>, &lt;code>CONFIGURATION_STORE&lt;/code>, &lt;code>OBJECT_STORE&lt;/code>
&lt;ul>
&lt;li>METRICS_STORE&lt;/li>
&lt;li>CONFIGURATION_STORE&lt;/li>
&lt;li>OBJECT_STORE&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;code>metadataCachingIntervalMS&lt;/code>: Number of milliseconds to wait in between caching the names of available metric types (for use in building canary configs; Default: 60000).&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h3 id="signalfx">SignalFX&lt;/h3>
&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">name&lt;/span>: signalfx
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">enabled&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">accounts&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">name&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">endpoint&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">baseUrl&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">accessToken&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">defaultScopeKey&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">defaultLocationKey&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">supportedTypes&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - METRICS_STORE
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - CONFIGURATION_STORE
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - OBJECT_STORE
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>&lt;code>name&lt;/code>: signalfx
&lt;ul>
&lt;li>&lt;code>enabled&lt;/code>: true or false&lt;/li>
&lt;li>&lt;code>accounts&lt;/code>:
&lt;ul>
&lt;li>&lt;code>name&lt;/code>: account name
&lt;ul>
&lt;li>&lt;code>endpoint&lt;/code>:
&lt;ul>
&lt;li>&lt;code>baseUrl&lt;/code>: The base URL to the SignalFx server. Defaults to &lt;code>https://stream.signalfx.com&lt;/code>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;code>accessToken&lt;/code>: (&lt;em>Required&lt;/em>) The SignalFx access token. Supports encrypted value.&lt;/li>
&lt;li>&lt;code>defaultScopeKey&lt;/code>: Scope key is used to distinguish between base and canary deployments. If omitted every request must supply the &lt;code>_scope_key&lt;/code> param in extended scope params&lt;/li>
&lt;li>&lt;code>defaultLocationKey&lt;/code>: Location key is used to filter by deployment region. If omitted requests must supply the &lt;code>_location_key&lt;/code> if it is needed.&lt;/li>
&lt;li>&lt;code>supportedTypes&lt;/code>: One of: &lt;code>METRICS_STORE&lt;/code>, &lt;code>CONFIGURATION_STORE&lt;/code>, &lt;code>OBJECT_STORE&lt;/code>
&lt;ul>
&lt;li>METRICS_STORE&lt;/li>
&lt;li>CONFIGURATION_STORE&lt;/li>
&lt;li>OBJECT_STORE&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h2 id="kustomize-patch-examples">Kustomize patch examples&lt;/h2>
&lt;p>You can see examples in the &lt;code>spinnaker-kustomize-patches&lt;/code> repo&amp;rsquo;s &lt;a href="https://github.com/armory/spinnaker-kustomize-patches/tree/master/accounts/canary">&lt;code>canary&lt;/code> folder&lt;/a>.&lt;/p></description></item><item><title>Continuous-Deployment: CI Config</title><link>/continuous-deployment/installation/armory-operator/op-manifest-reference/ci/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/continuous-deployment/installation/armory-operator/op-manifest-reference/ci/</guid><description>
&lt;h2 id="aws-codebuild">AWS CodeBuild&lt;/h2>
&lt;p>&lt;strong>spec.spinnakerConfig.config.ci.codebuild&lt;/strong>&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">codebuild&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">enabled&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">accounts&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">name&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">permissions&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">READ&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">accountId&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">assumeRole&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">region&lt;/span>:
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>&lt;code>enabled&lt;/code>: whether this CI tool is enabled&lt;/li>
&lt;li>&lt;code>accounts&lt;/code>: list of configured accounts&lt;/li>
&lt;/ul>
&lt;h3 id="account-parameters">Account parameters&lt;/h3>
&lt;ul>
&lt;li>&lt;code>name&lt;/code>: (&lt;em>Required&lt;/em>) account name&lt;/li>
&lt;li>&lt;code>permissions&lt;/code>:
&lt;ul>
&lt;li>&lt;code>READ&lt;/code>:&lt;/li>
&lt;li>read1&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;code>accountId&lt;/code>: The AWS account ID that will be used to trigger CodeBuild build.&lt;/li>
&lt;li>&lt;code>assumeRole&lt;/code>: If set, Operator will configure a credentials provider that uses AWS Security Token Service to assume the specified role.&lt;/li>
&lt;li>&lt;code>region&lt;/code>: (&lt;em>Required&lt;/em>) The AWS region in which your CodeBuild projects live.&lt;/li>
&lt;/ul>
&lt;h2 id="concourse">Concourse&lt;/h2>
&lt;p>&lt;strong>spec.spinnakerConfig.config.ci.concourse&lt;/strong>&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">concourse&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">enabled&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">masters&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">name&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">permissions&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">READ&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">WRITE&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">url&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">username&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">password&lt;/span>:
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>&lt;code>enabled&lt;/code>: whether this CI tool is enabled&lt;/li>
&lt;li>&lt;code>masters&lt;/code>: list of configured masters&lt;/li>
&lt;/ul>
&lt;h3 id="master-parameters">Master parameters&lt;/h3>
&lt;ul>
&lt;li>&lt;code>name&lt;/code>: master&amp;rsquo;s name&lt;/li>
&lt;li>&lt;code>permissions&lt;/code>: []
&lt;ul>
&lt;li>&lt;code>READ&lt;/code>: A user must have at least one of these roles in order to view this build master or use it as a trigger source.&lt;/li>
&lt;li>&lt;code>WRITE&lt;/code>: A user must have at least one of these roles in order to be able to run jobs on this build master.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;code>url&lt;/code>: (&lt;em>Required&lt;/em>) The url your concourse search is reachable at.&lt;/li>
&lt;li>&lt;code>username&lt;/code>: (&lt;em>Required&lt;/em>) The username of the concourse user to authenticate as.&lt;/li>
&lt;li>&lt;code>password&lt;/code>: (&lt;em>Required&lt;/em>) The password of the concourse user to authenticate as. Supports encrypted value.&lt;/li>
&lt;/ul>
&lt;h2 id="google-cloudbuild-gcb">Google CloudBuild (gcb)&lt;/h2>
&lt;p>&lt;strong>spec.spinnakerConfig.config.ci.gcb&lt;/strong>&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">gcb&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">enabled&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">accounts&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">name&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">permissions&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">READ&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - read1
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">project&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">subscriptionName&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">jsonKey&lt;/span>:
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>&lt;code>enabled&lt;/code>: whether this CI tool is enabled&lt;/li>
&lt;li>&lt;code>accounts&lt;/code>: list of configured masters&lt;/li>
&lt;/ul>
&lt;h3 id="account-parameters-1">Account parameters&lt;/h3>
&lt;ul>
&lt;li>&lt;code>name&lt;/code>: (&lt;em>Required&lt;/em>) account name&lt;/li>
&lt;li>&lt;code>permissions&lt;/code>: []
&lt;ul>
&lt;li>&lt;code>READ&lt;/code>: A user must have at least one of these roles in order to view this build master or use it as a trigger source.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;code>project&lt;/code>: (&lt;em>Required&lt;/em>) The name of the GCP project in which to trigger and monitor builds.&lt;/li>
&lt;li>&lt;code>subscriptionName&lt;/code>: The name of the PubSub subscription on which to listen for build changes.&lt;/li>
&lt;li>&lt;code>jsonKey&lt;/code>: The path to a JSON service account that Spinnaker will use as credentials. File needs to be present on the machine running Spinnaker. Supports encrypted file.&lt;/li>
&lt;/ul>
&lt;h2 id="jenkins">Jenkins&lt;/h2>
&lt;p>&lt;strong>spec.spinnakerConfig.config.ci.jenkins&lt;/strong>&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">jenkins&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">enabled&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">masters&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">name&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">permissions&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">READ&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - read1
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">address&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">username&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">password&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">csrf&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">trustStore&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">trustStoreType&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">trustStorePassword&lt;/span>:
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>&lt;code>enabled&lt;/code>: whether this CI tool is enabled&lt;/li>
&lt;li>&lt;code>masters&lt;/code>: list of configured masters&lt;/li>
&lt;/ul>
&lt;h3 id="master-parameters-1">Master parameters&lt;/h3>
&lt;ul>
&lt;li>&lt;code>name&lt;/code>: master&amp;rsquo;s name&lt;/li>
&lt;li>&lt;code>permissions&lt;/code>: []
&lt;ul>
&lt;li>&lt;code>READ&lt;/code>: A user must have at least one of these roles in order to view this build master or use it as a trigger source.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;code>address&lt;/code>: (&lt;em>Required&lt;/em>) The address your Jenkins master is reachable at.&lt;/li>
&lt;li>&lt;code>username&lt;/code>: The username of the Jenkins user to authenticate as.&lt;/li>
&lt;li>&lt;code>password&lt;/code>: The password of the Jenkins user to authenticate as. Supports encrypted value.&lt;/li>
&lt;li>&lt;code>csrf&lt;/code>: Whether or not to negotiate CSRF tokens when calling Jenkins.&lt;/li>
&lt;li>&lt;code>trustStore&lt;/code>: File needs to be present on the machine running Spinnaker. Supports encrypted file.&lt;/li>
&lt;li>&lt;code>trustStoreType&lt;/code>:&lt;/li>
&lt;li>&lt;code>trustStorePassword&lt;/code>: Supports encrypted value.&lt;/li>
&lt;/ul>
&lt;h2 id="travis">Travis&lt;/h2>
&lt;p>&lt;strong>spec.spinnakerConfig.config.ci.travis&lt;/strong>&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">travis&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">enabled&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">masters&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">name&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">permissions&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">READ&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - read1
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">WRITE&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - write1
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">address&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">baseUrl&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">githubToken&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">numberOfRepositories&lt;/span>:
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>&lt;code>enabled&lt;/code>: whether this CI tool is enabled&lt;/li>
&lt;li>&lt;code>masters&lt;/code>: list of configured masters&lt;/li>
&lt;/ul>
&lt;h3 id="master-parameters-2">Master parameters&lt;/h3>
&lt;ul>
&lt;li>&lt;code>name&lt;/code>: master&amp;rsquo;s name&lt;/li>
&lt;li>&lt;code>permissions&lt;/code>: []
&lt;ul>
&lt;li>&lt;code>READ&lt;/code>: A user must have at least one of these roles in order to view this build master or use it as a trigger source.&lt;/li>
&lt;li>&lt;code>WRITE&lt;/code>: A user must have at least one of these roles in order to be able to run jobs on this build master.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;code>address&lt;/code>: (&lt;em>Required&lt;/em>) The address of the Travis API.&lt;/li>
&lt;li>&lt;code>baseUrl&lt;/code>: (&lt;em>Required&lt;/em>) The base URL to the Travis UI.&lt;/li>
&lt;li>&lt;code>githubToken&lt;/code>: The github token to authenticate against Travis with. Supports encrypted value.&lt;/li>
&lt;li>&lt;code>numberOfRepositories&lt;/code>: How many repositories the Travis integration should fetch from the api each time the poller runs. Should be set a bit higher than the expected maximum number of repositories built within the poll interval.&lt;/li>
&lt;/ul>
&lt;h2 id="wercker">Wercker&lt;/h2>
&lt;p>&lt;strong>spec.spinnakerConfig.config.ci.wercker&lt;/strong>&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">wercker&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">enabled&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">masters&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">name&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">permissions&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">READ&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - read1
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">WRITE&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - write1
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">address&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">user&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">token&lt;/span>:
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>&lt;code>enabled&lt;/code>: whether this CI tool is enabled&lt;/li>
&lt;li>&lt;code>masters&lt;/code>: list of configured masters&lt;/li>
&lt;/ul>
&lt;h3 id="master-parameters-3">Master parameters&lt;/h3>
&lt;ul>
&lt;li>&lt;code>name&lt;/code>: master&amp;rsquo;s name&lt;/li>
&lt;li>&lt;code>permissions&lt;/code>: []
&lt;ul>
&lt;li>&lt;code>READ&lt;/code>: A user must have at least one of these roles in order to view this build master or use it as a trigger source.&lt;/li>
&lt;li>&lt;code>WRITE&lt;/code>: A user must have at least one of these roles in order to be able to run jobs on this build master.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;code>address&lt;/code>: (&lt;em>Required&lt;/em>) The address your Wercker master is reachable at.&lt;/li>
&lt;li>&lt;code>user&lt;/code>: The username of the Wercker user to authenticate as.&lt;/li>
&lt;li>&lt;code>token&lt;/code>: The personal token of the Wercker user to authenticate as. Supports encrypted value.&lt;/li>
&lt;/ul>
&lt;h2 id="kustomize-patch-examples">Kustomize patch examples&lt;/h2>
&lt;p>You can see examples in the &lt;code>spinnaker-kustomize-patches&lt;/code> repo&amp;rsquo;s &lt;a href="https://github.com/armory/spinnaker-kustomize-patches/tree/master/accounts/ci">&lt;code>ci&lt;/code> folder&lt;/a>.&lt;/p></description></item><item><title>Continuous-Deployment: Deployment Environment Config</title><link>/continuous-deployment/installation/armory-operator/op-manifest-reference/deploy/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/continuous-deployment/installation/armory-operator/op-manifest-reference/deploy/</guid><description>
&lt;h2 id="deploymentenvironment">deploymentEnvironment&lt;/h2>
&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">deploymentEnvironment&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">size&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">type&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">accountName&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">imageVariant&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">bootstrapOnly&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">updateVersions&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">consul&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">enabled&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">address&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">vault&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">enabled&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">address&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">location&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">customSizing&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">replicas&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">requests&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">memory&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">cpu&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">limits&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">memory&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">cpu&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">sidecars&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">name&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">dockerImage&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">port&lt;/span>:
&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">abc&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">args&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - arg1
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">command&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - arg1
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">configMapVolumeMounts&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">configMapName&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">mountPath&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">secretVolumeMounts&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">secretName&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">mountPath&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">mountPath&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">securityContext&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">privileged&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">initContainers&lt;/span>: {}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">hostAliases&lt;/span>: {}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">nodeSelectors&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">abc&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">affinity&lt;/span>: {}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">tolerations&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">key&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">operator&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">value&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">effect&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">gitConfig&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">upstreamUser&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">originUser&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">livenessProbeConfig&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">enabled&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">initialDelaySeconds&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">haServices&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">enabled&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">disableClouddriverRoDeck&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">redisMasterEndpoint&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">redisSlaveEndpoint&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">redisSlaveDeckEndpoint&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">echo&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">enabled&lt;/span>:
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>&lt;code>size&lt;/code>: &lt;code>SMALL&lt;/code>&lt;/li>
&lt;li>&lt;code>type&lt;/code>: &lt;code>Distributed&lt;/code>, &lt;code>LocalDebian&lt;/code>, or &lt;code>LocalGit&lt;/code>; &lt;code>Distributed&lt;/code>: Deploy Spinnaker with one server group per microservice, and a single shared Redis. &lt;code>LocalDebian&lt;/code>: Download and run the Spinnaker debians on the machine running the Daemon. &lt;code>LocalGit&lt;/code>: Download and run the Spinnaker git repos on the machine running the Daemon.&lt;/li>
&lt;li>&lt;code>accountName&lt;/code>: The Spinnaker account that Spinnaker will be deployed to, assuming you are running a deployment of Spinnaker that requires an active cloud provider.&lt;/li>
&lt;li>&lt;code>imageVariant&lt;/code>: The container image variant type to use when deploying a distributed installation of Spinnaker. &lt;code>SLIM&lt;/code>: Based on an Alpine image ubuntu: Based on Canonical&amp;rsquo;s ubuntu:bionic image. &lt;code>JAVA8&lt;/code>: A variant of slim that uses the Java 8 runtime. &lt;code>UBUNTU-JAVA8&lt;/code>: A variant of ubuntu that uses the Java 8 runtime Default value: &lt;code>SLIM&lt;/code>&lt;/li>
&lt;li>&lt;code>bootstrapOnly&lt;/code>: true or false; a bootstrap-only account is the account in which Spinnaker itself is deployed. When true, this account will not be included the accounts managed by Spinnaker.&lt;/li>
&lt;li>&lt;code>updateVersions&lt;/code>: true or false; when set to &amp;ldquo;false&amp;rdquo;, any local version of Spinnaker components will be used instead of attempting to update. This does not work for distributed installations of Spinnaker, where no local version exists.&lt;/li>
&lt;li>&lt;code>consul&lt;/code>:
&lt;ul>
&lt;li>&lt;code>enabled&lt;/code>: true or false; whether or not to use Consul as a service discovery mechanism to deploy Spinnaker.&lt;/li>
&lt;li>&lt;code>address&lt;/code>: The address of a running &lt;a href="https://www.consul.io/">Consul&lt;/a> cluster. This is only required when Spinnaker is being deployed in non-Kubernetes clustered configuration.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;code>vault&lt;/code>:
&lt;ul>
&lt;li>&lt;code>enabled&lt;/code>: true or false; whether or not to use Vault as a secret storage mechanism to deploy Spinnaker.&lt;/li>
&lt;li>&lt;code>address&lt;/code>: The address of a running &lt;a href="https://www.vaultproject.io/">Vault&lt;/a> datastore. This is only required when Spinnaker is being deployed in non-Kubernetes clustered configuration.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;code>location&lt;/code>: This is the location spinnaker will be deployed to. When deploying to Kubernetes, use this flag to specify the namespace to deploy to (defaults to &lt;code>spinnaker&lt;/code>)&lt;/li>
&lt;li>&lt;code>customSizing&lt;/code>: Configure, validate, and view the component sizings for the Spinnaker services. Example above only lists &lt;code>clouddriver&lt;/code> as an option, but other services can be defined, e.g. &lt;code>echo&lt;/code>. Note that if you want to define the sizing for the entire service including sidecars, the definition should be in the &lt;code>spin-$SERVICE&lt;/code> format. If only the main container should be defined, use &lt;code>$SERVICE&lt;/code> for the definition instead.
&lt;ul>
&lt;li>&lt;code>spin-clouddriver&lt;/code>:
&lt;ul>
&lt;li>&lt;code>replicas&lt;/code>: Set the number of replicas (pods) to be created for this service.&lt;/li>
&lt;li>&lt;code>requests&lt;/code>:
&lt;ul>
&lt;li>&lt;code>memory&lt;/code>: Sets the memory request for the container running the spinnaker service. Examples: 512Mi, 8Gi&lt;/li>
&lt;li>&lt;code>cpu&lt;/code>: Sets the cpu request for the container running the spinnaker service. Example: 250m.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;code>limits&lt;/code>:
&lt;ul>
&lt;li>&lt;code>memory&lt;/code>: example: 8Gi&lt;/li>
&lt;li>&lt;code>cpu&lt;/code>: example: 250m&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;code>sidecars&lt;/code>:
&lt;ul>
&lt;li>&lt;code>clouddriver&lt;/code>:
&lt;ul>
&lt;li>&lt;code>name&lt;/code>:&lt;/li>
&lt;li>&lt;code>dockerImage&lt;/code>:&lt;/li>
&lt;li>&lt;code>port&lt;/code>:&lt;/li>
&lt;li>&lt;code>env&lt;/code>:
&lt;ul>
&lt;li>key: definition&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;code>args&lt;/code>:
&lt;ul>
&lt;li>arg1&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;code>command&lt;/code>:
&lt;ul>
&lt;li>arg1&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;code>configMapVolumeMounts&lt;/code>:
&lt;ul>
&lt;li>&lt;code>configMapName&lt;/code>:&lt;/li>
&lt;li>&lt;code>mountPath&lt;/code>:&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;code>secretVolumeMounts&lt;/code>:
&lt;ul>
&lt;li>&lt;code>secretName&lt;/code>:&lt;/li>
&lt;li>&lt;code>mountPath&lt;/code>:&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;code>mountPath&lt;/code>:&lt;/li>
&lt;li>&lt;code>securityContext&lt;/code>:
&lt;ul>
&lt;li>&lt;code>privileged&lt;/code>: true or false.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;code>initContainers&lt;/code>: {}&lt;/li>
&lt;li>&lt;code>hostAliases&lt;/code>: {}&lt;/li>
&lt;li>&lt;code>nodeSelectors&lt;/code>:
&lt;ul>
&lt;li>key: definition&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;code>affinity&lt;/code>: {}&lt;/li>
&lt;li>&lt;code>tolerations&lt;/code>:
&lt;ul>
&lt;li>&lt;code>clouddriver&lt;/code>:`
&lt;ul>
&lt;li>&lt;code>key&lt;/code>:&lt;/li>
&lt;li>&lt;code>operator&lt;/code>: Exists, Equal, or DoesNotExist&lt;/li>
&lt;li>&lt;code>value&lt;/code>:&lt;/li>
&lt;li>&lt;code>effect&lt;/code>:&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;code>gitConfig&lt;/code>:
&lt;ul>
&lt;li>&lt;code>upstreamUser&lt;/code>: This is the upstream git user you are configuring to pull changes from &amp;amp; push PRs to.&lt;/li>
&lt;li>&lt;code>originUser&lt;/code>: This is the git user your github fork exists under.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;code>livenessProbeConfig&lt;/code>:
&lt;ul>
&lt;li>&lt;code>enabled&lt;/code>: true or false; when true, enable Kubernetes liveness probes on Spinnaker services deployed in a Distributed installation. See &lt;a href="https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-probes/">docs&lt;/a> for more information.&lt;/li>
&lt;li>&lt;code>initialDelaySeconds&lt;/code>: The number of seconds to wait before performing the first liveness probe. Should be set to the longest service startup time. See &lt;a href="https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-probes/">docs&lt;/a> for more information.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;code>haServices&lt;/code>:
&lt;ul>
&lt;li>&lt;code>clouddriver&lt;/code>:
&lt;ul>
&lt;li>&lt;code>enabled&lt;/code>: true or false.&lt;/li>
&lt;li>&lt;code>disableClouddriverRoDeck&lt;/code>: true or false.&lt;/li>
&lt;li>&lt;code>redisMasterEndpoint&lt;/code>: Set external Redis endpoint for clouddriver-rw and clouddriver-caching. The Redis URI schema is described &lt;a href="https://www.iana.org/assignments/uri-schemes/prov/redis">here&lt;/a>. clouddriver-rw and clouddriver-caching are configured to use the shared Redis, by default.&lt;/li>
&lt;li>&lt;code>redisSlaveEndpoint&lt;/code>: Set external Redis endpoint for clouddriver-ro. The Redis URI schema is described &lt;a href="https://www.iana.org/assignments/uri-schemes/prov/redis">here&lt;/a>. clouddriver-ro is configured to use the shared Redis, by default.&lt;/li>
&lt;li>&lt;code>redisSlaveDeckEndpoint&lt;/code>: Set external Redis endpoint for clouddriver-ro-deck. The Redis URI schema is described &lt;a href="https://www.iana.org/assignments/uri-schemes/prov/redis">here&lt;/a>. clouddriver-ro-deck is configured to use the shared Redis, by default.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;code>echo&lt;/code>:
&lt;ul>
&lt;li>&lt;code>enabled&lt;/code>: true or false.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h2 id="kustomize-patch-examples">Kustomize patch examples&lt;/h2>
&lt;p>You can see examples in the &lt;code>spinnaker-kustomize-patches&lt;/code> repo&amp;rsquo;s &lt;a href="https://github.com/armory/spinnaker-kustomize-patches/tree/master/spinnaker_deployment">&lt;code>spinnaker_deployment&lt;/code> folder&lt;/a>.&lt;/p></description></item><item><title>Continuous-Deployment: Features Config</title><link>/continuous-deployment/installation/armory-operator/op-manifest-reference/features/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/continuous-deployment/installation/armory-operator/op-manifest-reference/features/</guid><description>
&lt;h2 id="specspinnakerconfigconfigfeatures">spec.spinnakerConfig.config.features&lt;/h2>
&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">features&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">artifacts&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">auth&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">fiat&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">chaos&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">entityTags&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">pipelineTemplates&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">artifactsRewrite&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">mineCanary&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">appengineContainerImageUrlDeployments&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">infrastructureStages&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">travis&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">wercker&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">managedPipelineTemplatesV2UI&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">gremlin&lt;/span>:
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>&lt;code>artifacts&lt;/code>: true or false. Enable &lt;a href="https://spinnaker.io/reference/artifacts/">artifact&lt;/a> support.&lt;/li>
&lt;li>&lt;code>auth&lt;/code>: true or false.&lt;/li>
&lt;li>&lt;code>fiat&lt;/code>: true or false.&lt;/li>
&lt;li>&lt;code>chaos&lt;/code>: true or false. Enable &lt;a href="https://github.com/Netflix/chaosmonkey/wiki">Chaos Monkey&lt;/a> support. For this to work, you&amp;rsquo;ll need a running Chaos Monkey deployment. Currently, Halyard doesn&amp;rsquo;t configure Chaos Monkey for you.&lt;/li>
&lt;li>&lt;code>entityTags&lt;/code>: true or false.&lt;/li>
&lt;li>&lt;code>pipelineTemplates&lt;/code>: true or false. Enable &lt;a href="https://github.com/spinnaker/dcd-spec">pipeline template&lt;/a> support.&lt;/li>
&lt;li>&lt;code>artifactsRewrite&lt;/code>: true or false. Enable &lt;a href="https://www.spinnaker.io/reference/artifacts-with-artifactsrewrite/">new artifact&lt;/a> support.&lt;/li>
&lt;li>&lt;code>mineCanary&lt;/code>: true or false. Enable Canary support. For this to work, you&amp;rsquo;ll need a Canary judge configured. Currently, Halyard does not configure Canary judge for you.&lt;/li>
&lt;li>&lt;code>appengineContainerImageUrlDeployments&lt;/code>: true or false. Enable appengine deployments using a container image URL from gcr.io.&lt;/li>
&lt;li>&lt;code>infrastructureStages&lt;/code>: true or false. Enable infrastructure stages. Allows for creating Load Balancers as part of pipelines.&lt;/li>
&lt;li>&lt;code>travis&lt;/code>: true or false. Enable the Travis CI stage.&lt;/li>
&lt;li>&lt;code>wercker&lt;/code>: true or false. Enable the Wercker CI stage.&lt;/li>
&lt;li>&lt;code>managedPipelineTemplatesV2UI&lt;/code>: true or false. Enable managed pipeline templates v2 UI support.&lt;/li>
&lt;li>&lt;code>gremlin&lt;/code>: true or false. Enable Gremlin fault-injection support.&lt;/li>
&lt;/ul></description></item><item><title>Continuous-Deployment: Install Armory Continuous Deployment from the AWS Container Marketplace</title><link>/continuous-deployment/installation/guide/aws-container-marketplace/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/continuous-deployment/installation/guide/aws-container-marketplace/</guid><description>
&lt;div class="alert alert-primary" role="alert">
&lt;h4 class="alert-heading">Note&lt;/h4>
&lt;p>This document is intended for users who have purchased Armory&amp;rsquo;s AWS Container Marketplace offering. It will not work if you have not subscribed to the Armory Container Marketplace offering.&lt;/p>
&lt;p>Please contact &lt;a href="mailto:hello@armory.io">Armory&lt;/a> if you&amp;rsquo;re interested in an AWS Marketplace Private Offer.&lt;/p>
&lt;/div>
&lt;h2 id="overview-of-the-armory-operator">Overview of the Armory Operator&lt;/h2>
&lt;p>The Armory Operator is a Kubernetes Operator for Spinnaker&lt;sup>TM&lt;/sup> that makes it easier to install, deploy, and upgrade Spinnaker or Armory. The AWS Container Marketplace offering for Armory installs a version of the Armory Operator in an EKS cluster. After that, Armory can be installed in any namespace in your EKS cluster; this document assumes that Armory will be installed in the &lt;code>spinnaker&lt;/code> namespace.&lt;/p>
&lt;h2 id="aws-resources">AWS Resources&lt;/h2>
&lt;p>Before you install Armory on AWS, it is essential that you familiarize yourself with &lt;a href="/continuous-deployment/cloud-resources/resources-aws/">relevant AWS services&lt;/a>.&lt;/p>
&lt;h2 id="prerequisites-for-using-the-armory-operator">Prerequisites for using the Armory Operator&lt;/h2>
&lt;p>To use the Marketplace&amp;rsquo;s Armory offering, make sure you meet the following requirements:&lt;/p>
&lt;ul>
&lt;li>You have reviewed and met the Armory Continuous Deployment &lt;a href="/continuous-deployment/installation/system-requirements/">system requirements&lt;/a>.&lt;/li>
&lt;li>You have access to an EKS cluster configured with &lt;a href="https://docs.aws.amazon.com/eks/latest/userguide/iam-roles-for-service-accounts.html">IAM roles for service accounts&lt;/a>.&lt;/li>
&lt;li>You have an ingress controller for your EKS cluster. This document assumes the EKS cluster is using the NGINX Ingress Controller.&lt;/li>
&lt;li>You have &lt;code>cluster-admin&lt;/code> access on the EKS cluster.&lt;/li>
&lt;li>You have An AWS S3 bucket to store Armory application and pipeline configuration.&lt;/li>
&lt;/ul>
&lt;h2 id="installation-summary">Installation summary&lt;/h2>
&lt;p>This document covers the following high-level steps:&lt;/p>
&lt;ol>
&lt;li>Creating and configuring the necessary AWS IAM roles for your Kubernetes cluster&lt;/li>
&lt;li>Installing the Armory Operator Custom Resource Definitions (CRDs) for Armory into your Kubernetes cluster&lt;/li>
&lt;li>Installing the Armory Operator&lt;/li>
&lt;li>Creating a SpinnakerService Custom Resource&lt;/li>
&lt;li>Exposing your Armory instance&lt;/li>
&lt;/ol>
&lt;h2 id="create-an-aws-bucket">Create an AWS bucket&lt;/h2>
&lt;p>If you do not already have an AWS S3 bucket, create one with these settings:&lt;/p>
&lt;ul>
&lt;li>Versioning turned on (&amp;ldquo;Keep all versions of an object in the same bucket&amp;rdquo;)&lt;/li>
&lt;li>Default encryption turned on&lt;/li>
&lt;li>All public access blocked&lt;/li>
&lt;/ul>
&lt;h2 id="create-and-configure-the-aws-iam-roles-for-your-kubernetes-cluster">Create and configure the AWS IAM roles for your Kubernetes cluster&lt;/h2>
&lt;p>AWS IAM permissions are granted to Armory through the use of AWS&amp;rsquo;s IAM roles for Kubernetes Service Accounts. This feature must be enabled at a cluster level. You need to create three IAM roles:&lt;/p>
&lt;ul>
&lt;li>An IAM role for the Armory Operator (&lt;code>spinnaker-operator&lt;/code> ServiceAccount in &lt;code>spinnaker-operator&lt;/code> namespace) that has these permissions:
&lt;ul>
&lt;li>&lt;code>aws-marketplace:RegisterUsage&lt;/code>&lt;/li>
&lt;li>&lt;code>s3:*&lt;/code> on your AWS Bucket&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>An IAM role for the Front50 service (&lt;code>front50&lt;/code> ServiceAccount in the &lt;code>spinnaker&lt;/code> namespace), that has these permissions:
&lt;ul>
&lt;li>&lt;code>s3:*&lt;/code> on your AWS Bucket&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>An IAM role for the Clouddriver service (&lt;code>clouddriver&lt;/code> ServiceAccount in the &lt;code>spinnaker&lt;/code> namespace). This IAM role does not require any explicit permissions. If you want Armory to deploy AWS resources (AWS EC2, AWS ECS, AWS Lambda, or other AWS EKS clusters), you can add these permissions later.
&lt;ul>
&lt;li>&lt;em>AWS permissions are &lt;strong>not&lt;/strong> needed to deploy to the EKS cluster where Spinnaker is installed.&lt;/em>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;p>Upon completion of this section, you should have these three IAM roles:&lt;/p>
&lt;ul>
&lt;li>&lt;code>arn:aws:iam::AWS_ACCOUNT_ID:role/eks-spinnaker-operator&lt;/code> granted to the Kubernetes Service Account &lt;code>system:serviceaccount:spinnaker-operator:spinnaker-operator&lt;/code>&lt;/li>
&lt;li>&lt;code>arn:aws:iam::AWS_ACCOUNT_ID:role/eks-spinnaker-front50&lt;/code> granted to the Kubernetes Service Account &lt;code>system:serviceaccount:spinnaker:front50&lt;/code>&lt;/li>
&lt;li>&lt;code>arn:aws:iam::AWS_ACCOUNT_ID:role/eks-spinnaker-clouddriver&lt;/code> granted to the Kubernetes Service Account &lt;code>system:serviceaccount:spinnaker:clouddriver&lt;/code>&lt;/li>
&lt;/ul>
&lt;h3 id="iam-role-for-armory-operator-pod">IAM role for Armory Operator Pod&lt;/h3>
&lt;p>Create an IAM role for the Armory Operator pod (call it &lt;code>eks-spinnaker-operator&lt;/code>) and configure it for use by EC2. You will replace the trust relationship later.&lt;/p>
&lt;p>Grant the role the AWS managed policy &lt;code>AWSMarketplaceMeteringRegisterUsage&lt;/code>.&lt;/p>
&lt;p>Grant the role an inline policy granting permissions on your S3 bucket (replace &lt;code>BUCKET_NAME&lt;/code> with the name of your bucket):&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-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;Version&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;2012-10-17&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;Statement&amp;#34;&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">&amp;#34;Effect&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;Allow&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;Action&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;s3:*&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;Resource&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f1fa8c">&amp;#34;arn:aws:s3:::BUCKET_NAME&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f1fa8c">&amp;#34;arn:aws:s3:::BUCKET_NAME/*&amp;#34;&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>&lt;/span>&lt;span style="display:flex;">&lt;span> ]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>For example:&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-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;Version&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;2012-10-17&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;Statement&amp;#34;&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">&amp;#34;Effect&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;Allow&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;Action&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;s3:*&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;Resource&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f1fa8c">&amp;#34;arn:aws:s3:::my-spinnaker-bucket&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f1fa8c">&amp;#34;arn:aws:s3:::my-spinnaker-bucket/*&amp;#34;&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>&lt;/span>&lt;span style="display:flex;">&lt;span> ]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Create this trust relationship on the IAM role, with these fields replaced:&lt;/p>
&lt;ul>
&lt;li>replace &lt;code>AWS_ACCOUNT_ID&lt;/code> with your AWS account ID&lt;/li>
&lt;li>replace &lt;code>OIDC_PROVIDER&lt;/code> with the &amp;ldquo;OpenID Connect provider URL&amp;rdquo; for your Kubernetes cluster (&lt;em>with the &lt;code>https://&lt;/code> removed&lt;/em>)&lt;/li>
&lt;/ul>
&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-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;Version&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;2012-10-17&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;Statement&amp;#34;&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">&amp;#34;Effect&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;Allow&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;Principal&amp;#34;&lt;/span>: {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;Federated&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;arn:aws:iam::AWS_ACCOUNT_ID:oidc-provider/OIDC_PROVIDER&amp;#34;&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">&amp;#34;Action&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;sts:AssumeRoleWithWebIdentity&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;Condition&amp;#34;&lt;/span>: {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;StringEquals&amp;#34;&lt;/span>: {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;OIDC_PROVIDER:sub&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;system:serviceaccount:spinnaker-operator:spinnaker-operator&amp;#34;&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>&lt;/span>&lt;span style="display:flex;">&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>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>For example:&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-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;Version&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;2012-10-17&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;Statement&amp;#34;&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">&amp;#34;Effect&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;Allow&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;Principal&amp;#34;&lt;/span>: {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;Federated&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;arn:aws:iam::111222333444:oidc-provider/oidc.eks.us-east-1.amazonaws.com/id/AAAABBBBCCCCDDDDEEEEFFFF00001111&amp;#34;&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">&amp;#34;Action&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;sts:AssumeRoleWithWebIdentity&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;Condition&amp;#34;&lt;/span>: {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;StringEquals&amp;#34;&lt;/span>: {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;oidc.eks.us-east-1.amazonaws.com/id/AAAABBBBCCCCDDDDEEEEFFFF00001111:sub&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;system:serviceaccount:spinnaker-operator:spinnaker-operator&amp;#34;&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>&lt;/span>&lt;span style="display:flex;">&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>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="iam-role-for-front50-pod">IAM role for Front50 Pod&lt;/h3>
&lt;p>Create an IAM role for the Armory Operator pod (call it &lt;code>eks-spinnaker-front50&lt;/code>) and configure it for use by EC2. You will replace the trust relationship later.&lt;/p>
&lt;p>Grant the role an inline policy granting permissions on your S3 bucket (replace &lt;code>BUCKET_NAME&lt;/code> with the name of your bucket):&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-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;Version&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;2012-10-17&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;Statement&amp;#34;&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">&amp;#34;Effect&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;Allow&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;Action&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;s3:*&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;Resource&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f1fa8c">&amp;#34;arn:aws:s3:::BUCKET_NAME&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f1fa8c">&amp;#34;arn:aws:s3:::BUCKET_NAME/*&amp;#34;&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>&lt;/span>&lt;span style="display:flex;">&lt;span> ]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>For example:&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-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;Version&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;2012-10-17&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;Statement&amp;#34;&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">&amp;#34;Effect&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;Allow&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;Action&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;s3:*&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;Resource&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f1fa8c">&amp;#34;arn:aws:s3:::my-spinnaker-bucket&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f1fa8c">&amp;#34;arn:aws:s3:::my-spinnaker-bucket/*&amp;#34;&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>&lt;/span>&lt;span style="display:flex;">&lt;span> ]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Create this trust relationship on the IAM role, with these fields replaced:&lt;/p>
&lt;ul>
&lt;li>Replace &lt;code>AWS_ACCOUNT_ID&lt;/code> with your AWS account ID&lt;/li>
&lt;li>Replace &lt;code>OIDC_PROVIDER&lt;/code> with the &amp;ldquo;OpenID Connect provider URL&amp;rdquo; for your Kubernetes cluster (&lt;em>with the &lt;code>https://&lt;/code> removed&lt;/em>)&lt;/li>
&lt;/ul>
&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-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;Version&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;2012-10-17&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;Statement&amp;#34;&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">&amp;#34;Effect&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;Allow&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;Principal&amp;#34;&lt;/span>: {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;Federated&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;arn:aws:iam::AWS_ACCOUNT_ID:oidc-provider/OIDC_PROVIDER&amp;#34;&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">&amp;#34;Action&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;sts:AssumeRoleWithWebIdentity&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;Condition&amp;#34;&lt;/span>: {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;StringEquals&amp;#34;&lt;/span>: {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;OIDC_PROVIDER:sub&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;system:serviceaccount:spinnaker:front50&amp;#34;&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>&lt;/span>&lt;span style="display:flex;">&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>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>For example:&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-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;Version&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;2012-10-17&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;Statement&amp;#34;&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">&amp;#34;Effect&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;Allow&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;Principal&amp;#34;&lt;/span>: {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;Federated&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;arn:aws:iam::111222333444:oidc-provider/oidc.eks.us-east-1.amazonaws.com/id/AAAABBBBCCCCDDDDEEEEFFFF00001111&amp;#34;&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">&amp;#34;Action&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;sts:AssumeRoleWithWebIdentity&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;Condition&amp;#34;&lt;/span>: {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;StringEquals&amp;#34;&lt;/span>: {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;oidc.eks.us-east-1.amazonaws.com/id/AAAABBBBCCCCDDDDEEEEFFFF00001111:sub&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;system:serviceaccount:spinnaker:front50&amp;#34;&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>&lt;/span>&lt;span style="display:flex;">&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>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="iam-role-for-clouddriver-pod">IAM role for Clouddriver pod&lt;/h3>
&lt;p>Create an IAM role for the Armory Operator pod (call it &lt;code>eks-spinnaker-clouddriver&lt;/code>) and configure it for use by EC2. You will replace the trust relationship later. It does not need explicit AWS permissions.&lt;/p>
&lt;p>Create this trust relationship on the IAM role, with these fields replaced:&lt;/p>
&lt;ul>
&lt;li>Replace &lt;code>AWS_ACCOUNT_ID&lt;/code> with your AWS account ID&lt;/li>
&lt;li>Replace &lt;code>OIDC_PROVIDER&lt;/code> with the &amp;ldquo;OpenID Connect provider URL&amp;rdquo; for your Kubernetes cluster (&lt;em>with the &lt;code>https://&lt;/code> removed&lt;/em>)&lt;/li>
&lt;/ul>
&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-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;Version&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;2012-10-17&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;Statement&amp;#34;&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">&amp;#34;Effect&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;Allow&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;Principal&amp;#34;&lt;/span>: {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;Federated&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;arn:aws:iam::AWS_ACCOUNT_ID:oidc-provider/OIDC_PROVIDER&amp;#34;&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">&amp;#34;Action&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;sts:AssumeRoleWithWebIdentity&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;Condition&amp;#34;&lt;/span>: {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;StringEquals&amp;#34;&lt;/span>: {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;OIDC_PROVIDER:sub&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;system:serviceaccount:spinnaker:clouddriver&amp;#34;&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>&lt;/span>&lt;span style="display:flex;">&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>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>For example:&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-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;Version&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;2012-10-17&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;Statement&amp;#34;&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">&amp;#34;Effect&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;Allow&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;Principal&amp;#34;&lt;/span>: {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;Federated&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;arn:aws:iam::111222333444:oidc-provider/oidc.eks.us-east-1.amazonaws.com/id/AAAABBBBCCCCDDDDEEEEFFFF00001111&amp;#34;&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">&amp;#34;Action&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;sts:AssumeRoleWithWebIdentity&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;Condition&amp;#34;&lt;/span>: {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;StringEquals&amp;#34;&lt;/span>: {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;oidc.eks.us-east-1.amazonaws.com/id/AAAABBBBCCCCDDDDEEEEFFFF00001111:sub&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;system:serviceaccount:spinnaker:clouddriver&amp;#34;&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>&lt;/span>&lt;span style="display:flex;">&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>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="install-the-armory-operator-custom-resource-definitions-crds">Install the Armory Operator Custom Resource Definitions (CRDs)&lt;/h2>
&lt;p>Download the Kubernetes manifest for Armory Operator and install it into your Kubernetes cluster:&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>mkdir -p spinnaker-operator &lt;span style="color:#ff79c6">&amp;amp;&amp;amp;&lt;/span> &lt;span style="color:#8be9fd;font-style:italic">cd&lt;/span> spinnaker-operator
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>bash -c &lt;span style="color:#f1fa8c">&amp;#39;curl -L https://github.com/armory/marketplace/releases/latest/download/marketplace.tgz | tar -xz&amp;#39;&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:#6272a4"># Install or update CRDs cluster wide&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>kubectl apply -f manifests/crds/
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="install-the-armory-operator">Install the Armory Operator&lt;/h2>
&lt;p>Update the manifest for the Armory Operator with your AWS Account ID:&lt;/p>
&lt;ul>
&lt;li>You must update &lt;code>AWS_ACCOUNT_ID&lt;/code> (in the ServiceAccount annotation) with your account ID, so the ServiceAccount can access your AWS IAM roles.&lt;/li>
&lt;/ul>
&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_ACCOUNT_ID&lt;/span>&lt;span style="color:#ff79c6">=&lt;/span>&lt;span style="color:#bd93f9">111122223333&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>sed -i.bak &lt;span style="color:#f1fa8c">&amp;#34;s|AWS_ACCOUNT_ID|&lt;/span>&lt;span style="color:#f1fa8c">${&lt;/span>&lt;span style="color:#8be9fd;font-style:italic">AWS_ACCOUNT_ID&lt;/span>&lt;span style="color:#f1fa8c">}&lt;/span>&lt;span style="color:#f1fa8c">|g&amp;#34;&lt;/span> manifests/operator/ServiceAccount.yaml
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>rm manifests/operator/ServiceAccount.yaml.bak
&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:#6272a4"># Install the armory operator&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>kubectl apply -f manifests/operator
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Deploying the Armory Operator may take a little bit of time. You can monitor its status by running this command:&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 -n spinnaker-operator get pod -owide
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>You&amp;rsquo;re looking for the deployment to be completely up (READY of &lt;code>2/2&lt;/code> and STATUS of &lt;code>Running&lt;/code>).&lt;/p>
&lt;h3 id="creating-a-spinnakerservice-custom-resource">Creating a SpinnakerService Custom Resource&lt;/h3>
&lt;p>Update the manifest for the SpinnakerService object with these:&lt;/p>
&lt;ul>
&lt;li>&lt;code>AWS_ACCOUNT_ID&lt;/code> (in both ServiceAccount annotations) - your account ID, so the ServiceAccount can access your AWS IAM roles&lt;/li>
&lt;li>&lt;code>BUCKET_NAME&lt;/code> (in the SpinnakerService) - the name of your AWS S3 Bucket&lt;/li>
&lt;/ul>
&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_ACCOUNT_ID&lt;/span>&lt;span style="color:#ff79c6">=&lt;/span>&lt;span style="color:#bd93f9">111122223333&lt;/span>
&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">BUCKET_NAME&lt;/span>&lt;span style="color:#ff79c6">=&lt;/span>my-spinnaker-bucket
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>sed -i.bak &lt;span style="color:#f1fa8c">&amp;#34;s|AWS_ACCOUNT_ID|&lt;/span>&lt;span style="color:#f1fa8c">${&lt;/span>&lt;span style="color:#8be9fd;font-style:italic">AWS_ACCOUNT_ID&lt;/span>&lt;span style="color:#f1fa8c">}&lt;/span>&lt;span style="color:#f1fa8c">|g&amp;#34;&lt;/span> manifests/spinnaker/ServiceAccount-clouddriver.yaml
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>sed -i.bak &lt;span style="color:#f1fa8c">&amp;#34;s|AWS_ACCOUNT_ID|&lt;/span>&lt;span style="color:#f1fa8c">${&lt;/span>&lt;span style="color:#8be9fd;font-style:italic">AWS_ACCOUNT_ID&lt;/span>&lt;span style="color:#f1fa8c">}&lt;/span>&lt;span style="color:#f1fa8c">|g&amp;#34;&lt;/span> manifests/spinnaker/ServiceAccount-front50.yaml
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>rm manifests/spinnaker/ServiceAccount-clouddriver.yaml.bak
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>rm manifests/spinnaker/ServiceAccount-front50.yaml.bak
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>sed -i.bak &lt;span style="color:#f1fa8c">&amp;#34;s|BUCKET_NAME|&lt;/span>&lt;span style="color:#f1fa8c">${&lt;/span>&lt;span style="color:#8be9fd;font-style:italic">BUCKET_NAME&lt;/span>&lt;span style="color:#f1fa8c">}&lt;/span>&lt;span style="color:#f1fa8c">|g&amp;#34;&lt;/span> manifests/spinnaker/SpinnakerService.yaml
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>rm manifests/spinnaker/SpinnakerService.yaml.bak
&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:#6272a4"># Install the operator&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>kubectl apply -f manifests/spinnaker
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>If everything is configured properly, the Armory Operator should see the SpinnakerService custom resource, and start creating Kubernetes Deployments, ServiceAccounts, and Secrets in the &lt;code>spinnaker&lt;/code> Namespace. You can monitor this with the following:&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 -n spinnaker get all -owide
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="exposing-your-armory-instance">Exposing your Armory instance&lt;/h2>
&lt;p>Once your Armory instance is running, you need to configure it so that it is accessible. There are two main parts to this:&lt;/p>
&lt;ol>
&lt;li>Expose the &lt;code>spin-deck&lt;/code> and &lt;code>spin-gate&lt;/code> services so that they can be reached by your end users (and client services)&lt;/li>
&lt;li>Configure Armory so that it knows about the endpoints it is exposed on&lt;/li>
&lt;/ol>
&lt;p>Given a domain name (or IP address) (such as spinnaker.domain.com or 55.55.55.55), you should be able to:&lt;/p>
&lt;ul>
&lt;li>Reach the &lt;code>spin-deck&lt;/code> service at the root of the domain (&lt;code>http://spinnaker.domain.com&lt;/code> or &lt;code>http://55.55.55.55&lt;/code>)&lt;/li>
&lt;li>Reach the &lt;code>spin-gate&lt;/code> service at the root of the domain (&lt;code>http://spinnaker.domain.com/api/v1&lt;/code> or &lt;code>http://55.55.55.55/api/v1&lt;/code>)&lt;/li>
&lt;/ul>
&lt;p>You can use either &lt;code>http&lt;/code> or &lt;code>https&lt;/code>, as long as you use the same for both. Additionally, you have to configure Armory to be aware of its endpoints.&lt;/p>
&lt;p>This section assumes the following:&lt;/p>
&lt;ul>
&lt;li>You have installed the &lt;a href="https://kubernetes.github.io/ingress-nginx/deploy/#aws">NGINX Ingress Controller&lt;/a> in the EKS cluster&lt;/li>
&lt;li>You can set up a DNS CNAME Record pointing at the AWS Load Balancer in front of your NGINX Ingress Controller&lt;/li>
&lt;/ul>
&lt;h2 id="set-up-an-ingress-for-spin-deck-and-spin-gate">Set up an Ingress for &lt;code>spin-deck&lt;/code> and &lt;code>spin-gate&lt;/code>&lt;/h2>
&lt;p>First, determine a DNS name that you can use for Armory, and set up a CNAME pointing that DNS name at your AWS Load Balancer. For example:&lt;/p>
&lt;ul>
&lt;li>NGINX Ingress Controller has created an NLB at &lt;code>abcd1234abcd1234abcd1234abcd1234-1234567812345678.elb.us-east-1.amazonaws.com&lt;/code>&lt;/li>
&lt;li>Desired domain name for Armory is &lt;code>spinnaker.domain.com&lt;/code>&lt;/li>
&lt;li>Create a CNAME DNS Record pointing &lt;code>spinnaker.domain.com&lt;/code> at &lt;code>abcd1234abcd1234abcd1234abcd1234-1234567812345678.elb.us-east-1.amazonaws.com&lt;/code> (you may also use an ALIAS Record in Route 53)&lt;/li>
&lt;/ul>
&lt;p>Then, create a Kubernetes Ingress to expose &lt;code>spin-deck&lt;/code> and &lt;code>spin-gate&lt;/code>. Create a file called &lt;code>spin-ingress.yml&lt;/code> with the following content:&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>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">apiVersion&lt;/span>: extensions/v1beta1
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">kind&lt;/span>: Ingress
&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>: spin-ingress
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">namespace&lt;/span>: spinnaker
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">labels&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">app&lt;/span>: spin
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">cluster&lt;/span>: spin-ingress
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">annotations&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">kubernetes.io/ingress.class&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;nginx&amp;#34;&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">rules&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">host&lt;/span>: spinnaker.domain.com &lt;span style="color:#6272a4"># Make sure to update this field&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">http&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">paths&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">backend&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">serviceName&lt;/span>: spin-deck
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">servicePort&lt;/span>: &lt;span style="color:#bd93f9">9000&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">path&lt;/span>: /
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">backend&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">serviceName&lt;/span>: spin-gate
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">servicePort&lt;/span>: &lt;span style="color:#bd93f9">8084&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">path&lt;/span>: /api/v1
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;em>&lt;strong>Make sure the host field is updated with the correct DNS record.&lt;/strong>&lt;/em>&lt;/p>
&lt;p>Apply the ingress file you just created:&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 -n spinnaker apply -f spin-ingress.yml
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="configure-armory-to-be-aware-of-its-endpoints">Configure Armory to be aware of its endpoints&lt;/h2>
&lt;p>Update the spec.spinnakerConfig.config.security section of &lt;code>manifests/spinnaker/SpinnakerService.yaml&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">spec&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">spinnakerConfig&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"># ... more configuration&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">security&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">uiSecurity&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">overrideBaseUrl&lt;/span>: http://spinnaker.domain.com &lt;span style="color:#6272a4"># Replace this with the IP address or DNS that points to our nginx ingress instance&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">apiSecurity&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">overrideBaseUrl&lt;/span>: http://spinnaker.domain.com/api/v1 &lt;span style="color:#6272a4"># Replace this with the IP address or DNS that points to our nginx ingress instance&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6272a4"># ... more configuration&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;em>&lt;strong>Make sure to specify &lt;code>http&lt;/code> or &lt;code>https&lt;/code> according to your environment&lt;/strong>&lt;/em>&lt;/p>
&lt;p>Apply the changes:&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 -f manifests/spinnaker/SpinnakerService.yaml
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>If you encounter an error, delete and recreate the SpinnakerService.&lt;/p>
&lt;h2 id="configure-tls-certificates">Configure TLS certificates&lt;/h2>
&lt;p>Configuring TLS certificates for ingresses is environment-specific. In general, you want to do the following:&lt;/p>
&lt;ul>
&lt;li>Add certificate(s) so that our ingress controller can use them&lt;/li>
&lt;li>Configure the ingress(es) so that NGINX (or the load balancer in front of NGINX, or your alternative ingress controller) terminates TLS using the certificate(s)&lt;/li>
&lt;li>Update Spinnaker to be aware of the new TLS endpoints, by replacing &lt;code>http&lt;/code> by &lt;code>https&lt;/code> to override the base URLs in the previous section.&lt;/li>
&lt;/ul>
&lt;h2 id="next-steps">Next steps&lt;/h2>
&lt;p>Now that Armory is running, here are potential next steps:&lt;/p>
&lt;ul>
&lt;li>Configure certificates to secure our cluster (see &lt;a href="#configuring-tls-certificates">this section&lt;/a> for notes on this)&lt;/li>
&lt;li>Configure authentication/authorization (see the &lt;a href="https://www.spinnaker.io/setup/security/">Open Source Spinnaker documentation&lt;/a>)&lt;/li>
&lt;li>Add external Kubernetes accounts to deploy applications to (see &lt;a href="/continuous-deployment/armory-admin/kubernetes-account-add/">Creating and Adding a Kubernetes Account to Spinnaker (Deployment Target)&lt;/a>)&lt;/li>
&lt;li>Add AWS accounts to deploy applications to (see the &lt;a href="https://www.spinnaker.io/setup/install/providers/aws/">Open Source Spinnaker documentation&lt;/a>)&lt;/li>
&lt;/ul></description></item><item><title>Continuous-Deployment: Metric Stores Config</title><link>/continuous-deployment/installation/armory-operator/op-manifest-reference/metricstores/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/continuous-deployment/installation/armory-operator/op-manifest-reference/metricstores/</guid><description>
&lt;h2 id="specspinnakerconfigconfigmetricstores">spec.spinnakerConfig.config.metricStores&lt;/h2>
&lt;p>Metrics stores are used to store metrics for the various Spinnaker micro-services. These metrics are not related in any way to Canary deployments. The technologies backing both are similar, but metric stores are places to push metrics regarding Spinnaker metrics, whereas Canary metrics stores are used to pull metrics to analyze deployments. This configuration only affects the publishing of metrics against whichever metric stores you enable (it can be more than one).&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">metricStores&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">enabled&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">period&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">prometheus&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">push_gateway&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">add_source_metalabels&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">enabled&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">datadog&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">enabled&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">api_key&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">app_key&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">tags&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - tag1
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">stackdriver&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">enabled&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">credentials_path&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">project&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">instance_id&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">newrelic&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">enabled&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">insert_key&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">host&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">tags&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - tag1
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>&lt;code>enabled&lt;/code>: true or false.&lt;/li>
&lt;li>&lt;code>period&lt;/code>: Set the polling period for the monitoring daemon, e.g. 30&lt;/li>
&lt;li>&lt;code>prometheus&lt;/code>: Prometheus configuration&lt;/li>
&lt;li>&lt;code>datadog&lt;/code>: Datadog configuration&lt;/li>
&lt;li>&lt;code>stackdriver&lt;/code>: Stackdriver configuration&lt;/li>
&lt;li>&lt;code>newrelic&lt;/code>: New Relic configuration&lt;/li>
&lt;/ul>
&lt;h2 id="prometheus">Prometheus&lt;/h2>
&lt;ul>
&lt;li>&lt;code>push_gateway&lt;/code>: The endpoint the monitoring Daemon should push metrics to. If you have configured Prometheus to automatically discover all your Spinnaker services and pull metrics from them this is not required.&lt;/li>
&lt;li>&lt;code>add_source_metalabels&lt;/code>: true or false.&lt;/li>
&lt;li>&lt;code>enabled&lt;/code>: true or false.&lt;/li>
&lt;/ul>
&lt;h2 id="datadog">Datadog&lt;/h2>
&lt;ul>
&lt;li>&lt;code>enabled&lt;/code>: true or false.&lt;/li>
&lt;li>&lt;code>api_key&lt;/code>: Your datadog API key. Supports encrypted value.&lt;/li>
&lt;li>&lt;code>app_key&lt;/code>: Your datadog app key. This is only required if you want Spinnaker to push preconfigured Spinnaker dashboards to your Datadog account. Supports encrypted value.&lt;/li>
&lt;li>&lt;code>tags&lt;/code>: Your datadog custom tags. Please delimit the KVP with colons, e.g. &lt;code>app:test&lt;/code> &lt;code>env:dev&lt;/code>&lt;/li>
&lt;/ul>
&lt;h2 id="stackdriver">Stackdriver&lt;/h2>
&lt;ul>
&lt;li>&lt;code>enabled&lt;/code>: true or false.&lt;/li>
&lt;li>&lt;code>credentials_path&lt;/code>: A path to a Google JSON service account that has permission to publish metrics. File needs to be present on the machine running Spinnaker. Supports encrypted file.&lt;/li>
&lt;li>&lt;code>project&lt;/code>: The project Spinnaker&amp;rsquo;s metrics should be published to.&lt;/li>
&lt;li>&lt;code>zone&lt;/code>: The zone Spinnaker&amp;rsquo;s metrics should be associated with.&lt;/li>
&lt;li>&lt;code>instance_id&lt;/code>:&lt;/li>
&lt;/ul>
&lt;h2 id="new-relic">New Relic&lt;/h2>
&lt;ul>
&lt;li>&lt;code>enabled&lt;/code>: true or false.&lt;/li>
&lt;li>&lt;code>insert_key&lt;/code>: Your New Relic Insights insert key. Supports encrypted value.&lt;/li>
&lt;li>&lt;code>host&lt;/code>: The URL to post metric data to. In almost all cases, this is set correctly by default and should not be used.&lt;/li>
&lt;li>&lt;code>tags&lt;/code>: Your custom tags. Please delimit the KVP with colons, e.g. &lt;code>app:test&lt;/code> &lt;code>env:dev&lt;/code>&lt;/li>
&lt;/ul>
&lt;h2 id="kustomize-patch-examples">Kustomize patch examples&lt;/h2>
&lt;p>You can see examples in the &lt;code>spinnaker-kustomize-patches&lt;/code> repo&amp;rsquo;s &lt;a href="https://github.com/armory/spinnaker-kustomize-patches/tree/master/accounts/metric-stores">&lt;code>metric-stores&lt;/code> folder&lt;/a>.&lt;/p></description></item><item><title>Continuous-Deployment: Notification Config</title><link>/continuous-deployment/installation/armory-operator/op-manifest-reference/notification/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/continuous-deployment/installation/armory-operator/op-manifest-reference/notification/</guid><description>
&lt;h2 id="specspinnakerconfigconfignotifications">spec.spinnakerConfig.config.notifications&lt;/h2>
&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">notifications&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">slack&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">enabled&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">botName&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">token&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">baseUrl&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">forceUseIncomingWebhook&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">twilio&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">enabled&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">account&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">baseUrl&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">from&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">token&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">github-status&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">enabled&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">token&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">enabled&lt;/span>:
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="slack-parameters">Slack parameters&lt;/h2>
&lt;ul>
&lt;li>&lt;code>enabled&lt;/code>: true or false.&lt;/li>
&lt;li>&lt;code>botName&lt;/code>: The name of your Slack bot.&lt;/li>
&lt;li>&lt;code>token&lt;/code>: Your Slack bot token. Supports encrypted value.&lt;/li>
&lt;li>&lt;code>baseUrl&lt;/code>: Slack endpoint. Optional, only set if using a compatible API.&lt;/li>
&lt;li>&lt;code>forceUseIncomingWebhook&lt;/code>: true or false. Force usage of incoming webhooks endpoint for Slack. Optional, only set if using a compatible API.&lt;/li>
&lt;/ul>
&lt;h2 id="twilio-parameters">Twilio parameters&lt;/h2>
&lt;ul>
&lt;li>&lt;code>enabled&lt;/code>: true or false.&lt;/li>
&lt;li>&lt;code>account&lt;/code>: Your Twilio account SID.&lt;/li>
&lt;li>&lt;code>baseUrl&lt;/code>: Twilio REST API base url&lt;/li>
&lt;li>&lt;code>from&lt;/code>: The phone number from which the SMS will be sent (e.g. +1234-567-8910).&lt;/li>
&lt;li>&lt;code>token&lt;/code>: Your Twilio auth token. Supports encrypted value.&lt;/li>
&lt;/ul>
&lt;h2 id="github-status-parameters">GitHub status parameters&lt;/h2>
&lt;ul>
&lt;li>&lt;code>enabled&lt;/code>: true or false.&lt;/li>
&lt;li>&lt;code>token&lt;/code>: Your GitHub account token. Supports encrypted value.&lt;/li>
&lt;/ul>
&lt;h2 id="kustomize-patch-examples">Kustomize patch examples&lt;/h2>
&lt;p>You can see examples in the &lt;code>spinnaker-kustomize-patches&lt;/code> repo&amp;rsquo;s &lt;a href="https://github.com/armory/spinnaker-kustomize-patches/tree/master/accounts/notifications">&lt;code>notifications&lt;/code> folder&lt;/a>.&lt;/p></description></item><item><title>Continuous-Deployment: Persistent Storage Config</title><link>/continuous-deployment/installation/armory-operator/op-manifest-reference/persistent-storage/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/continuous-deployment/installation/armory-operator/op-manifest-reference/persistent-storage/</guid><description>
&lt;h2 id="specspinnakerconfigconfigpersistentstorage">spec.spinnakerConfig.config.persistentStorage&lt;/h2>
&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">persistentStorage&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">persistentStoreType&lt;/span>: s3
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">azs&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">gcs&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">oracle&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">s3&lt;/span>:
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>&lt;code>persistentStorageType&lt;/code>: one of &lt;code>azs&lt;/code>, &lt;code>gcs&lt;/code>, &lt;code>oracle&lt;/code>, &lt;code>s3&lt;/code>; the configured storage type for Spinnaker to use&lt;/li>
&lt;li>&lt;code>azs&lt;/code>: Azure persistent storage configuration&lt;/li>
&lt;li>&lt;code>gcs&lt;/code>: Google Cloud persistent storage configuration&lt;/li>
&lt;li>&lt;code>oracle&lt;/code>: Oracle persistent storage configuration&lt;/li>
&lt;li>&lt;code>s3&lt;/code>: Amazon s3 persistent storage configuration&lt;/li>
&lt;/ul>
&lt;h2 id="azure">Azure&lt;/h2>
&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">azs&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">storageAccountName&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">storageAccountKey&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">storageContainerName&lt;/span>:
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>&lt;code>storageAccountName&lt;/code>: The name of an Azure Storage Account used for Spinnaker&amp;rsquo;s persistent data.&lt;/li>
&lt;li>&lt;code>storageAccountKey&lt;/code>: The key to access the Azure Storage Account used for Spinnaker&amp;rsquo;s persistent data. Supports encrypted value.&lt;/li>
&lt;li>&lt;code>storageContainerName&lt;/code>: (Default: &lt;code>spinnaker&lt;/code>) The container name in the chosen storage account to place all of Spinnaker&amp;rsquo;s persistent data.&lt;/li>
&lt;/ul>
&lt;h2 id="gcs">GCS&lt;/h2>
&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">gcs&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">jsonPath&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">project&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">bucket&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">rootFolder&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">bucketLocation&lt;/span>:
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>&lt;code>jsonPath&lt;/code>: A path to a JSON service account with permission to read and write to the bucket to be used as a backing store. File needs to be present on the machine running Spinnaker. Supports encrypted file.&lt;/li>
&lt;li>&lt;code>project&lt;/code>: The Google Cloud Platform project you are using to host the GCS bucket as a backing store.&lt;/li>
&lt;li>&lt;code>bucket&lt;/code>: The name of a storage bucket that your specified account has access to. If not specified, a random name will be chosen. If you specify a globally unique bucket name that doesn&amp;rsquo;t exist yet, Halyard will create that bucket for you.&lt;/li>
&lt;li>&lt;code>rootFolder&lt;/code>: The root folder in the chosen bucket to place all of Spinnaker&amp;rsquo;s persistent data in.&lt;/li>
&lt;li>&lt;code>bucketLocation&lt;/code>: This is only required if the bucket you specify doesn&amp;rsquo;t exist yet. In that case, the bucket will be created in that location. See &lt;a href="https://cloud.google.com/storage/docs/managing-buckets#manage-class-location">https://cloud.google.com/storage/docs/managing-buckets#manage-class-location&lt;/a>.&lt;/li>
&lt;/ul>
&lt;h2 id="oracle">Oracle&lt;/h2>
&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">oracle&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">bucketName&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">namespace&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">compartmentId&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">region&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">userId&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">fingerprint&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">sshPrivateKeyFilePath&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">privateKeyPassphrase&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">tenancyId&lt;/span>:
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>&lt;code>bucketName&lt;/code>: The bucket name to store persistent state object in&lt;/li>
&lt;li>&lt;code>namespace&lt;/code>: The namespace the bucket and objects should be created in&lt;/li>
&lt;li>&lt;code>compartmentId&lt;/code>: Provide the OCID of the Oracle Compartment to use.&lt;/li>
&lt;li>&lt;code>region&lt;/code>: An Oracle region (e.g., us-phoenix-1)&lt;/li>
&lt;li>&lt;code>userId&lt;/code>: Provide the OCID of the Oracle User you&amp;rsquo;re authenticating as&lt;/li>
&lt;li>&lt;code>fingerprint&lt;/code>: Fingerprint of the public key&lt;/li>
&lt;li>&lt;code>sshPrivateKeyFilePath&lt;/code>: Path to the private key in PEM format. File needs to be present on the machine running Spinnaker. Supports encrypted file.&lt;/li>
&lt;li>&lt;code>privateKeyPassphrase&lt;/code>: Passphrase used for the private key, if it is encrypted. Supports encrypted value.&lt;/li>
&lt;li>&lt;code>tenancyId&lt;/code>: Provide the OCID of the Oracle Tenancy to use.&lt;/li>
&lt;/ul>
&lt;h2 id="s3">S3&lt;/h2>
&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">s3&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">bucket&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">rootFolder&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">region&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">pathStyleAccess&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">endpoint&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">accessKeyId&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">serverSideEncryption&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">secretAccessKey&lt;/span>:
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>&lt;code>bucket&lt;/code>: The name of a storage bucket that your specified account has access to. If not specified, a random name will be chosen. If you specify a globally unique bucket name that doesn&amp;rsquo;t exist yet, Operator will create that bucket for you.&lt;/li>
&lt;li>&lt;code>rootFolder&lt;/code>: The root folder in the chosen bucket to place all of Spinnaker&amp;rsquo;s persistent data in.&lt;/li>
&lt;li>&lt;code>region&lt;/code>: This is only required if the bucket you specify doesn&amp;rsquo;t exist yet. In that case, the bucket will be created in that region. See &lt;a href="http://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region">http://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region&lt;/a>.&lt;/li>
&lt;li>&lt;code>pathStyleAccess&lt;/code>: true or false; when true, use path-style to access bucket; when false, use virtual hosted-style to access bucket. See&lt;/li>
&lt;li>&lt;code>endpoint&lt;/code>: An alternate endpoint that your S3-compatible storage can be found at. This is intended for self-hosted storage services with S3-compatible APIs, e.g. Minio. If supplied, this storage type cannot be validated.&lt;/li>
&lt;li>&lt;code>accessKeyId&lt;/code>: Your AWS Access Key ID. If not provided, Halyard/Spinnaker will try to find AWS credentials as described at &lt;a href="http://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/credentials.html#credentials-default">http://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/credentials.html#credentials-default&lt;/a>&lt;/li>
&lt;li>&lt;code>serverSideEncryption&lt;/code>: Use Amazon Server-Side Encryption (&amp;lsquo;x-amz-server-side-encryption&amp;rsquo; header). Supports &amp;lsquo;AES256&amp;rsquo; (for Amazon S3-managed encryption keys, equivalent to a header value of &amp;lsquo;AES256&amp;rsquo;) and &amp;lsquo;AWSKMS&amp;rsquo; (for AWS KMS-managed encryption keys, equivalent to a header value of &amp;lsquo;aws:kms&amp;rsquo;.&lt;/li>
&lt;li>&lt;code>secretAccessKey&lt;/code>: Your AWS Secret Key. Supports encrypted value.&lt;/li>
&lt;/ul>
&lt;h2 id="kustomize-patch-examples">Kustomize patch examples&lt;/h2>
&lt;p>You can see examples in the &lt;code>spinnaker-kustomize-patches&lt;/code> repo&amp;rsquo;s &lt;a href="https://github.com/armory/spinnaker-kustomize-patches/tree/master/core/persistence">&lt;code>persistence&lt;/code> folder&lt;/a>.&lt;/p></description></item><item><title>Continuous-Deployment: Plugins Config</title><link>/continuous-deployment/installation/armory-operator/op-manifest-reference/plugins/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/continuous-deployment/installation/armory-operator/op-manifest-reference/plugins/</guid><description>
&lt;div class="alert alert-warning" role="alert">
&lt;h4 class="alert-heading">Warning&lt;/h4>
Please see Spinnaker&amp;rsquo;s &lt;a href="https://spinnaker.io/docs/guides/user/plugins-users/">Plugins User Guide&lt;/a> for a detailed explanation of plugins.
&lt;/div>
&lt;h2 id="parameters">Parameters&lt;/h2>
&lt;p>&lt;em>&lt;strong>spec.spinnakerConfig.profiles&lt;/strong>&lt;/em>&lt;/p>
&lt;p>Put configuration in the &lt;code>service&lt;/code> that the plugin extends. Only the impacted service will restart when you apply the manifest.&lt;/p>
&lt;p>Example:&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">spec&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6272a4"># spec.spinnakerConfig - This section is how to specify configuration spinnaker&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">spinnakerConfig&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6272a4"># spec.spinnakerConfig.config - This section contains the contents of a deployment found in a halconfig .deploymentConfigurations[0]&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">profiles&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">orca&lt;/span>:
&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">extensibility&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">plugins&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;lt;plugin-name&amp;gt;&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">enabled&lt;/span>: &amp;lt;true-or-false&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">version&lt;/span>: &amp;lt;version&amp;gt;
&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:#ff79c6">repositories&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;lt;repository-name&amp;gt;&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">id&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">url&lt;/span>:
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>&lt;code>plugins&lt;/code>:
&lt;ul>
&lt;li>&lt;code>&amp;lt;plugin-name&amp;gt;&lt;/code>: suggested format is creator.plugin
&lt;ul>
&lt;li>&lt;code>id&lt;/code>: plugin ID as defined in plugins.json&lt;/li>
&lt;li>&lt;code>enabled&lt;/code>: true or false&lt;/li>
&lt;li>&lt;code>version&lt;/code>: version of the plugin to use&lt;/li>
&lt;li>&lt;code>config&lt;/code>: {} - configuration for this specific plugin&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;code>repositories&lt;/code>:
&lt;ul>
&lt;li>&lt;code>&amp;lt;repository-name&amp;gt;&lt;/code>:
&lt;ul>
&lt;li>&lt;code>id&lt;/code>: same as &lt;repository-name>&lt;/li>
&lt;li>&lt;code>url&lt;/code>: URL to &lt;code>repositories.json&lt;/code> or &lt;code>plugins.json&lt;/code>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;p>See the Plugin Users Guide &lt;em>Add a plugin repository&lt;/em> &lt;a href="https://spinnaker.io/docs/guides/user/plugins-users/#add-a-plugin-repository-using-halyard">section&lt;/a> for when you can use &lt;code>plugins.json&lt;/code> instead of &lt;code>repositories.json&lt;/code>.&lt;/p>
&lt;h3 id="deck-proxy">Deck proxy&lt;/h3>
&lt;p>You need to configure a &lt;code>deck-proxy&lt;/code> in Gate if your plugin has a Deck component. Locate the &lt;code>profiles&lt;/code> section in your &lt;code>SpinnakerService.yml&lt;/code> and add the proxy information to the &lt;code>gate&lt;/code> 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-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6272a4"># spec.spinnakerConfig.profiles - This section contains the YAML of each service&amp;#39;s profile&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">profiles&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">clouddriver&lt;/span>: {} &lt;span style="color:#6272a4"># is the contents of ~/.hal/default/profiles/clouddriver.yml&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6272a4"># deck has a special key &amp;#34;settings-local.js&amp;#34; for the contents of settings-local.js&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:#6272a4"># settings-local.js - contents of ~/.hal/default/profiles/settings-local.js&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6272a4"># Use the | YAML symbol to indicate a block-style multiline string&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">settings-local.js&lt;/span>: |&lt;span style="color:#f1fa8c">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> window.spinnakerSettings.feature.kustomizeEnabled = true;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> window.spinnakerSettings.feature.artifactsRewrite = true;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">echo&lt;/span>: {} &lt;span style="color:#6272a4"># is the contents of ~/.hal/default/profiles/echo.yml&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">fiat&lt;/span>: {} &lt;span style="color:#6272a4"># is the contents of ~/.hal/default/profiles/fiat.yml&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">front50&lt;/span>: {} &lt;span style="color:#6272a4"># is the contents of ~/.hal/default/profiles/front50.yml&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">gate&lt;/span>:
&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">extensibility&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">deck-proxy&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">enabled&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">plugins&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;lt;plugin-name&amp;gt;&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">enabled&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">version&lt;/span>: &amp;lt;version&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">repositories&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;lt;repository-name&amp;gt;&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">url&lt;/span>: &amp;lt;url-to-repositories.json-or-plugins.json&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">igor&lt;/span>: {} &lt;span style="color:#6272a4"># is the contents of ~/.hal/default/profiles/igor.yml&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">kayenta&lt;/span>: {} &lt;span style="color:#6272a4"># is the contents of ~/.hal/default/profiles/kayenta.yml&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">orca&lt;/span>: {} &lt;span style="color:#6272a4"># is the contents of ~/.hal/default/profiles/orca.yml&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="example">Example&lt;/h3>
&lt;p>The example below configures the &lt;a href="https://github.com/spinnaker-plugin-examples/pf4jStagePlugin">&lt;code>pf4jStagePlugin&lt;/code>&lt;/a>. The configured repository is a &lt;code>plugins.json&lt;/code> file rather than a &lt;code>repositories.json&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">spec&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">spinnakerConfig&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6272a4"># spec.spinnakerConfig.profiles - This section contains the YAML of each service&amp;#39;s profile&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">profiles&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">gate&lt;/span>:
&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">extensibility&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">deck-proxy&lt;/span>: &lt;span style="color:#6272a4"># you need this for plugins with a Deck component&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">enabled&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">plugins&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">Armory.RandomWaitPlugin&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">enabled&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">version&lt;/span>: &lt;span style="color:#bd93f9">1.1.17&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">repositories&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">examplePluginsRepo&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">url&lt;/span>: https://raw.githubusercontent.com/spinnaker-plugin-examples/examplePluginRepository/master/plugins.json
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">orca&lt;/span>:
&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">extensibility&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">plugins&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">Armory.RandomWaitPlugin&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">enabled&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">version&lt;/span>: &lt;span style="color:#bd93f9">1.1.17&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:#ff79c6">defaultMaxWaitTime&lt;/span>: &lt;span style="color:#bd93f9">15&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">repositories&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">examplePluginsRepo&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">id&lt;/span>: examplePluginsRepo
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">url&lt;/span>: https://raw.githubusercontent.com/spinnaker-plugin-examples/examplePluginRepository/master/plugins.json
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="kustomize-patch-examples">Kustomize patch examples&lt;/h2>
&lt;p>You can see examples in the &lt;code>spinnaker-kustomize-patches&lt;/code> repo&amp;rsquo;s &lt;a href="https://github.com/armory/spinnaker-kustomize-patches/tree/master/plugins">&lt;code>plugins&lt;/code> folder&lt;/a>.&lt;/p></description></item><item><title>Continuous-Deployment: Providers Config</title><link>/continuous-deployment/installation/armory-operator/op-manifest-reference/providers/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/continuous-deployment/installation/armory-operator/op-manifest-reference/providers/</guid><description>
&lt;h2 id="specspinnakerconfigconfigproviders">spec.spinnakerConfig.config.providers&lt;/h2>
&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">providers&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">appengine&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">aws&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">ecs&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">dcos&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">dockerRegistry&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">google&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">huaweicloud&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">kubernetes&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">tencentcloud&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">oracle&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">cloudfoundry&lt;/span>:
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="app-engine">App Engine&lt;/h3>
&lt;p>&lt;strong>spec.spinnakerConfig.config.providers.appengine&lt;/strong>&lt;/p>
&lt;p>The App Engine provider is used to deploy resources to any number of App Engine applications. To get started with App Engine, visit &lt;a href="https://cloud.google.com/appengine/docs/">the App Engine docs&lt;/a>. An account in the App Engine provider refers to a single App Engine application. Spinnaker assumes that your App Engine application already exists.&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">appengine&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">enabled&lt;/span>: &lt;span style="color:#ff79c6">false&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">gcloudPath&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">accounts&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">name&lt;/span>: prod-1
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">cachingIntervalSeconds&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">environment&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">gcloudReleaseTrack&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">gitHttpsUsername&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">gitHttpsPassword&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">githubOAuthAccessToken&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">jsonPath&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">localRepositoryDirectory&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">omitServices&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">omitVersions&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">permissions&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">READ&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">WRITE&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">EXECUTE&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">CREATE&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">project&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">providerVersion&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">requiredGroupMembership&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">sshPrivateKeyFilePath&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">sshPrivateKeyPassphrase&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">sshKnownHostsFilePath&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">sshTrustUnknownHosts&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">versions&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">primaryAccount&lt;/span>:
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>&lt;code>enabled&lt;/code>:&lt;/li>
&lt;li>&lt;code>accounts&lt;/code>:&lt;/li>
&lt;li>&lt;code>gCloudPath&lt;/code>: The path to the gcloud executable on the machine running clouddriver. Ex: &lt;code>/root&lt;/code>&lt;/li>
&lt;li>&lt;code>primaryAccount&lt;/code>:&lt;/li>
&lt;/ul>
&lt;h4 id="account-parameters">Account parameters&lt;/h4>
&lt;ul>
&lt;li>&lt;code>cachingIntervalSeconds&lt;/code>: The interval in seconds at which Spinnaker will poll for updates in your AppEngine clusters.&lt;/li>
&lt;li>&lt;code>environment&lt;/code>: The environment name for the account. Many accounts can share the same environment (e.g. dev, test, prod)&lt;/li>
&lt;li>&lt;code>gcloudReleaseTrack&lt;/code>: The gcloud release track (ALPHA, BETA, or STABLE) that Spinnaker will use when deploying to App Engine.&lt;/li>
&lt;li>&lt;code>gitHttpsPassword&lt;/code>: A password to be used when connecting with a remote git repository server over HTTPS. Supports encrypted value.&lt;/li>
&lt;li>&lt;code>gitHttpsUsername&lt;/code>: A username to be used when connecting with a remote git repository server over HTTPS.&lt;/li>
&lt;li>&lt;code>githubOAuthAccessToken&lt;/code>: An OAuth token provided by Github for connecting to a git repository over HTTPS. See &lt;a href="https://help.github.com/articles/creating-an-access-token-for-command-line-use">Creating an Access Token for Command Line Use&lt;/a> for more information. Supports encrypted value.&lt;/li>
&lt;li>&lt;code>json-path&lt;/code>: The path to a JSON service account that Spinnaker will use as credentials. This is only needed if Spinnaker is not deployed on a Google Compute Engine VM, or needs permissions not afforded to the VM it is running on. See &lt;a href="https://cloud.google.com/compute/docs/access/service-accounts">Service Accounts&lt;/a> for more information.&lt;/li>
&lt;li>&lt;code>localRepositoryDirectory&lt;/code>: A local directory to be used to stage source files for App Engine deployments within Spinnaker&amp;rsquo;s Clouddriver microservice.&lt;/li>
&lt;li>&lt;code>omitServices&lt;/code>: A list of regular expressions. Any service matching one of these regexes will be ignored by Spinnaker.&lt;/li>
&lt;li>&lt;code>omitVersions&lt;/code>: A list of regular expressions. Any version matching one of these regexes will be ignored by Spinnaker.&lt;/li>
&lt;li>&lt;code>permissions&lt;/code>:
&lt;ul>
&lt;li>&lt;code>READ&lt;/code>: &lt;code>[]&lt;/code> A user must have at least one of these roles in order to view this account&amp;rsquo;s cloud resources.&lt;/li>
&lt;li>&lt;code>WRITE&lt;/code>: &lt;code>[]&lt;/code> A user must have at least one of these roles in order to make changes to this account&amp;rsquo;s cloud resources.&lt;/li>
&lt;li>&lt;code>EXECUTE&lt;/code>:&lt;/li>
&lt;li>&lt;code>CREATE&lt;/code>:&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;code>project&lt;/code>: (&lt;em>Required&lt;/em>) The Google Cloud Platform project this Spinnaker account will manage.&lt;/li>
&lt;li>&lt;code>providerVersion&lt;/code>:&lt;/li>
&lt;li>&lt;code>requiredGroupMembership&lt;/code>: (&lt;em>Default&lt;/em>: &lt;code>[]&lt;/code>) A user must be a member of at least one specified group in order to make changes to this account&amp;rsquo;s cloud resources.&lt;/li>
&lt;li>&lt;code>services&lt;/code>: A list of regular expressions. Any service matching one of these regexes will be indexed by Spinnaker.&lt;/li>
&lt;li>&lt;code>sshKnownHostsFilePath&lt;/code>: The path to a known_hosts file to be used when connecting with a remote git repository over SSH. File needs to be present on the machine running Spinnaker. Supports encrypted file.&lt;/li>
&lt;li>&lt;code>sshPrivateKeyFilePath&lt;/code>: The path to an SSH private key to be used when connecting with a remote git repository over SSH. File needs to be present on the machine running Spinnaker. Supports encrypted file.&lt;/li>
&lt;li>&lt;code>sshPrivateKeyPassphrase&lt;/code>: The passphrase to an SSH private key to be used when connecting with a remote git repository over SSH. Supports encrypted value.&lt;/li>
&lt;li>&lt;code>sshTrustUnknownHosts&lt;/code>: (&lt;em>Default&lt;/em>: &lt;code>false&lt;/code>) Enabling this flag will allow Spinnaker to connect with a remote git repository over SSH without verifying the server&amp;rsquo;s IP address against a known_hosts file.&lt;/li>
&lt;li>&lt;code>versions&lt;/code>: A list of regular expressions. Any version matching one of these regexes will be indexed by Spinnaker.&lt;/li>
&lt;/ul>
&lt;h3 id="aws">AWS&lt;/h3>
&lt;p>&lt;strong>spec.spinnakerConfig.config.providers.aws&lt;/strong>&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">aws&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">enabled&lt;/span>: &lt;span style="color:#ff79c6">false&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">accessKeyId&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">defaults&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">iamRole&lt;/span>: BaseIAMRole
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">defaultAssumeRole&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">defaultKeyPairTemplate&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">defaultRegions&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">name&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">primaryAccount&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">secretAccessKey&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">accounts&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">name&lt;/span>: aws-dev
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">accountId&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">assumeRole&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">edda&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">environment&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">defaultKeyPair&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">discovery&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">lifecycleHooks&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">defaultResult&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">heartbeatTimeout&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">lifecycleTransition&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">notificationTargetARN&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">roleARN&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">permissions&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">READ&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">WRITE&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">EXECUTE&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">CREATE&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">providerVersion&lt;/span>: V1
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">regions&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">name&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">requiredGroupMembership&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">externalId&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">bakeryDefaults&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">awsAccessKey&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">awsAssociatePublicIpAddress&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">awsSecretKey&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">awsSubnetId&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">awsVpcId&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">defaultVirtualizationType&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">baseImages&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">baseImage&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">id&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">shortDescription&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">detailedDescription&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">packageType&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">templateFile&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">virtualizationSettings&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">region&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">virtualizationType&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">instanceType&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">sourceAmi&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">sshUserName&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">winRmUserName&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">spotPrice&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">spotPriceAutoProduct&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">templateFile&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">features&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">cloudFormation&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">enabled&lt;/span>:
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>The AWS provider requires a central &amp;ldquo;Managing Account&amp;rdquo; to authenticate on behalf of other AWS accounts, or act as your sole, credential-based account.&lt;/p>
&lt;ul>
&lt;li>&lt;code>enabled&lt;/code>: whether the provider is enabled&lt;/li>
&lt;li>&lt;code>accessKeyId&lt;/code>: AWS Access Key ID; note that if you are baking AMIs via Rosco, you may also need to set the access key on the AWS bakery default options.&lt;/li>
&lt;li>&lt;code>accounts&lt;/code>: list of configured accounts&lt;/li>
&lt;li>&lt;code>bakeryDefaults&lt;/code>: configuration for Spinnaker&amp;rsquo;s image bakery.Configuration for Spinnaker&amp;rsquo;s image bakery.&lt;/li>
&lt;li>&lt;code>defaults&lt;/code>: array with single entry:
&lt;ul>
&lt;li>&lt;code>iamRole: BaseIAMRole&lt;/code>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;code>defaultKeyPairTemplate&lt;/code>: &amp;ldquo;{{name}}-keypair&amp;rdquo;&lt;/li>
&lt;li>&lt;code>defaultRegions&lt;/code>: array of &lt;code>name: &amp;lt;region-name&amp;gt;&lt;/code> items&lt;/li>
&lt;li>&lt;code>features&lt;/code>: configuration for AWS-specific features&lt;/li>
&lt;li>&lt;code>primaryAccount&lt;/code>: the account you want to be primary of the configured accounts&lt;/li>
&lt;li>&lt;code>secretAccessKey&lt;/code>: AWS Secret Key; note that if you are baking AMIs via Rosco, you may also need to set the secret key on the AWS bakery default options. Supports encrypted value.&lt;/li>
&lt;/ul>
&lt;h4 id="account-parameters-1">Account parameters&lt;/h4>
&lt;ul>
&lt;li>&lt;code>accountId&lt;/code>: (&lt;em>Required&lt;/em>) Your AWS account ID to manage. See the &lt;a href="http://docs.aws.amazon.com/IAM/latest/UserGuide/console_account-alias.html">AWS IAM User Guide&lt;/a> for more information.&lt;/li>
&lt;li>&lt;code>assumeRole&lt;/code>: (&lt;em>Required&lt;/em>) If set, will configure a credentials provider that uses AWS Security Token Service to assume the specified role. Example: &amp;ldquo;user/spinnaker&amp;rdquo; or &amp;ldquo;role/spinnakerManaged&amp;rdquo;&lt;/li>
&lt;li>&lt;code>defaultKeyPair&lt;/code>: The name of the AWS key-pair to use. See &lt;a href="http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html">http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html&lt;/a> for more information.&lt;/li>
&lt;li>&lt;code>discovery&lt;/code>: The endpoint at which your Eureka discovery system is reachable. See &lt;a href="https://github.com/Netflix/eureka">https://github.com/Netflix/eureka&lt;/a> for more information. Example: &lt;a href="http://.eureka.url.to.use:8080/eureka-server/v2">http://.eureka.url.to.use:8080/eureka-server/v2&lt;/a>. Using will make Spinnaker use AWS regions in the hostname to access discovery so that you can have discovery for multiple regions.&lt;/li>
&lt;li>&lt;code>edda&lt;/code>: The endpoint at which Edda is reachable. Edda is not a hard dependency of Spinnaker, but is helpful for reducing the request volume against AWS. See &lt;a href="https://github.com/Netflix/edda">https://github.com/Netflix/edda&lt;/a> for more information.&lt;/li>
&lt;li>&lt;code>environment&lt;/code>: The environment name for the account. Many accounts can share the same environment (e.g. dev, test, prod)&lt;/li>
&lt;li>&lt;code>lifecycleHooks&lt;/code>: Configuration for AWS Auto Scaling Lifecycle Hooks. For more information, see: &lt;a href="https://docs.aws.amazon.com/autoscaling/ec2/userguide/lifecycle-hooks.html">https://docs.aws.amazon.com/autoscaling/ec2/userguide/lifecycle-hooks.html&lt;/a>
&lt;ul>
&lt;li>&lt;code>defaultResult&lt;/code>: Defines the action the Auto Scaling group should take when the lifecycle hook timeout elapses or if an unexpected failure occurs. Acceptable values: &lt;code>CONTINUE&lt;/code>, &lt;code>ABANDON&lt;/code>.&lt;/li>
&lt;li>&lt;code>heartbeatTimeout&lt;/code>: Set the heartbeat timeout in seconds for the lifecycle hook. Instances can remain in a wait state for a finite period of time. Must be greater than or equal to 30 and less than or equal to 7200. The default is 3600 (one hour).&lt;/li>
&lt;li>&lt;code>lifecycleTransition&lt;/code>: Type of lifecycle transition. Acceptable values: &lt;code>autoscaling:EC2_INSTANCE_LAUNCHING&lt;/code>, &lt;code>autoscaling:EC2_INSTANCE_TERMINATING&lt;/code>&lt;/li>
&lt;li>&lt;code>notificationTargetARN&lt;/code>: The ARN of the notification target that Amazon EC2 Auto Scaling uses to notify you when an instance is in the transition state for the lifecycle hook. This target can be either an SQS queue or an SNS topic.&lt;/li>
&lt;li>&lt;code>roleARN&lt;/code>: The ARN of the IAM role that allows the Auto Scaling group to publish to the specified notification target, for example, an Amazon SNS topic or an Amazon SQS queue.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;code>permissions&lt;/code>:
&lt;ul>
&lt;li>&lt;code>READ&lt;/code>: &lt;code>[]&lt;/code> A user must have at least one of these roles in order to view this account&amp;rsquo;s cloud resources.&lt;/li>
&lt;li>&lt;code>WRITE&lt;/code>: &lt;code>[]&lt;/code> A user must have at least one of these roles in order to make changes to this account&amp;rsquo;s cloud resources.&lt;/li>
&lt;li>&lt;code>EXECUTE&lt;/code>: A user must have at least one of these roles in order to execute pipelines.&lt;/li>
&lt;li>&lt;code>CREATE&lt;/code>:&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;code>providerVersion&lt;/code>:&lt;/li>
&lt;li>&lt;code>regions&lt;/code>: (&lt;em>Default&lt;/em>: &lt;code>[]&lt;/code>) The AWS regions this Spinnaker account will manage.&lt;/li>
&lt;li>&lt;code>requiredGroupMemberships&lt;/code>: (Deprecated): Configure permissions instead.&lt;/li>
&lt;li>&lt;code>externalId&lt;/code>: Optional parameter used to identify and control access to AWS resources. Set this to the same value as the ExternalID parameter in the trust policy for the role you want to assume.&lt;/li>
&lt;/ul>
&lt;h4 id="bakery-parameters">Bakery parameters&lt;/h4>
&lt;ul>
&lt;li>&lt;code>awsAccessKey&lt;/code>: The default access key used to communicate with AWS.&lt;/li>
&lt;li>&lt;code>awsAssociatePublicIpAddress&lt;/code>: If using a non-default VPC, public IP addresses are not provided by default. If this is enabled, your new instance will get a Public IP.&lt;/li>
&lt;li>&lt;code>awsSecretKey&lt;/code>: The secret key used to communicate with AWS. Supports encrypted value.&lt;/li>
&lt;li>&lt;code>awsSubnetId&lt;/code>: If using VPC, the default ID of the subnet, such as subnet-12345def, where Packer will launch the EC2 instance. This field is required if you are using a non-default VPC.&lt;/li>
&lt;li>&lt;code>awsVpcId&lt;/code>: If launching into a VPC subnet, Packer needs the VPC ID in order to create a temporary security group within the VPC. Requires subnet_id to be set. If this default value is left blank, Packer will try to get the VPC ID from the subnet_id.&lt;/li>
&lt;li>&lt;code>baseImages&lt;/code>: &lt;code>[]&lt;/code>&lt;/li>
&lt;li>&lt;code>defaultVirtualizationType&lt;/code>: The default type of virtualization for the AMI you are building. This option must match the supported virtualization type of source_ami. Can be pv or hvm.&lt;/li>
&lt;li>&lt;code>templateFile&lt;/code>: This is the name of the packer template that will be used to bake images from this base image. The template file must be found in this &lt;a href="https://github.com/spinnaker/rosco/tree/master/rosco-web/config/packer">list&lt;/a>, or supplied as described in the &lt;a href="https://spinnaker.io/setup/bakery/">bakery docs&lt;/a>&lt;/li>
&lt;/ul>
&lt;h5 id="bakery-base-image-parameters">Bakery base image parameters&lt;/h5>
&lt;ul>
&lt;li>&lt;code>detailedDescription&lt;/code>: A long description to help human operators identify the image.&lt;/li>
&lt;li>&lt;code>id&lt;/code>:This is the identifier used by AWS to find this base image.&lt;/li>
&lt;li>&lt;code>shortDescription&lt;/code>:A short description to help human operators identify the image.&lt;/li>
&lt;li>&lt;code>detailedDescription&lt;/code>:A long description to help human operators identify the image.&lt;/li>
&lt;li>&lt;code>packageType&lt;/code>:This is used to help Spinnaker&amp;rsquo;s bakery download the build artifacts you supply it with. For example, specifying deb indicates that your artifacts will need to be fetched from a debian repository.&lt;/li>
&lt;li>&lt;code>templateFile&lt;/code>: The name of the Packer template that will be used to bake images from this base image. The template file must be found in this list: &lt;a href="https://github.com/spinnaker/rosco/tree/master/rosco-web/config/packer">https://github.com/spinnaker/rosco/tree/master/rosco-web/config/packer&lt;/a>, or supplied as described here: &lt;a href="https://spinnaker.io/setup/bakery/">https://spinnaker.io/setup/bakery/&lt;/a>.&lt;/li>
&lt;li>&lt;code>virtualizationSettings&lt;/code>:
&lt;ul>
&lt;li>&lt;code>region&lt;/code>:The name of the region in which to launch the EC2 instance to create the AMI.&lt;/li>
&lt;li>&lt;code>virtualizationType&lt;/code>: The type of virtualization for the AMI you are building. This option must match the supported virtualization type of sourceAmi. Acceptable values: pv, hvm.&lt;/li>
&lt;li>&lt;code>instanceType&lt;/code>: The EC2 instance type to use while building the AMI, such as t2.small.&lt;/li>
&lt;li>&lt;code>sourceAmi&lt;/code>:The source AMI whose root volume will be copied and provisioned on the currently running instance. This must be an EBS-backed AMI with a root volume snapshot that you have access to.&lt;/li>
&lt;li>&lt;code>sshUserName&lt;/code>:The username to connect to SSH with. Required if using SSH.&lt;/li>
&lt;li>&lt;code>winRmUserName&lt;/code>:The username to use to connect to WinRM.&lt;/li>
&lt;li>&lt;code>spotPrice&lt;/code>:The maximum hourly price to pay for a spot instance to create the AMI. Spot instances are a type of instance that EC2 starts when the current spot price is less than the maximum price you specify. Spot price will be updated based on available spot instance capacity and current spot instance requests. It may save you some costs. You can set this to auto for Packer to automatically discover the best spot price or to &amp;ldquo;0&amp;rdquo; to use an on demand instance (default).&lt;/li>
&lt;li>&lt;code>spotPriceAutoProduct&lt;/code>:Required if spotPrice is set to auto. This tells Packer what sort of AMI you are launching to find the best spot price. This must be one of: Linux/UNIX, SUSE Linux, Windows, Linux/UNIX (Amazon VPC), SUSE Linux (Amazon VPC), Windows (Amazon VPC).&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h4 id="features-parameters">Features parameters&lt;/h4>
&lt;ul>
&lt;li>&lt;code>cloud-formation&lt;/code>: (&lt;em>Required&lt;/em>) Enable CloudFormation support for AWS.&lt;/li>
&lt;/ul>
&lt;h3 id="azure">Azure&lt;/h3>
&lt;p>&lt;strong>spec.spinnakerConfig.config.providers.azure&lt;/strong>&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">azure&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">enabled&lt;/span>: &lt;span style="color:#ff79c6">false&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">primaryAccount&lt;/span>: azure-dev
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">accounts&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">name&lt;/span>: azure-dev
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">appKey&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">clientId&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">defaultKeyVault&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">defaultResourceGroup&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">environment&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">objectId&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">packerResourceGroup&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">packerStorageAccount&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">permissions&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">READ&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">WRITE&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">EXECUTE&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">CREATE&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">providerVersion&lt;/span>: V1
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">regions&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">name&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">requiredGroupMembership&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">subscriptionId&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">tenantId&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">useSshPublicKey&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">bakeryDefaults&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">templateFile&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">baseImages&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">baseImage&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">id&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">detailedDescription&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">packageType&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">publisher&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">offer&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">shortDescription&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">templateFile&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">sku&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">version&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">virtualizationSettings&lt;/span>: {}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>&lt;code>enabled&lt;/code>: whether the provider is enabled&lt;/li>
&lt;li>&lt;code>primaryAccount&lt;/code>: name of primary account&lt;/li>
&lt;li>&lt;code>accounts&lt;/code>: list of configured accounts&lt;/li>
&lt;li>&lt;code>bakeryDefaults&lt;/code>: configuration for Spinnaker&amp;rsquo;s image bakery&lt;/li>
&lt;/ul>
&lt;h4 id="account-parameters-2">Account parameters&lt;/h4>
&lt;ul>
&lt;li>&lt;code>appKey&lt;/code>: (&lt;em>Required&lt;/em>) The appKey (password) of your service principal. Supports encrypted value.&lt;/li>
&lt;li>&lt;code>clientId&lt;/code>: (&lt;em>Required&lt;/em>) The clientId (also called appId) of your service principal.&lt;/li>
&lt;li>&lt;code>defaultKeyVault&lt;/code>: (&lt;em>Required&lt;/em>) The name of a KeyVault that contains the user name, password, and ssh public key used to create VMs&lt;/li>
&lt;li>&lt;code>defaultResourceGroup&lt;/code>: (&lt;em>Required&lt;/em>) The default resource group to contain any non-application specific resources.&lt;/li>
&lt;li>&lt;code>environment&lt;/code>: The environment name for the account. Many accounts can share the same environment (e.g. dev, test, prod)&lt;/li>
&lt;li>&lt;code>objectId&lt;/code>: The objectId of your service principal. This is only required if using Packer to bake Windows images.&lt;/li>
&lt;li>&lt;code>packerResourceGroup&lt;/code>: The resource group to use if baking images with Packer.&lt;/li>
&lt;li>&lt;code>packerStorageAccount&lt;/code>: The storage account to use if baking images with Packer.&lt;/li>
&lt;li>&lt;code>permissions&lt;/code>:
&lt;ul>
&lt;li>&lt;code>READ&lt;/code>: &lt;code>[]&lt;/code> A user must have at least one of these roles in order to view this account&amp;rsquo;s cloud resources.&lt;/li>
&lt;li>&lt;code>WRITE&lt;/code>: &lt;code>[]&lt;/code> A user must have at least one of these roles in order to make changes to this account&amp;rsquo;s cloud resources.&lt;/li>
&lt;li>&lt;code>EXECUTE&lt;/code>:&lt;/li>
&lt;li>&lt;code>CREATE&lt;/code>:&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;code>regions&lt;/code>: The Azure regions this Spinnaker account will manage.&lt;/li>
&lt;li>&lt;code>requiredGroupMembership&lt;/code>: (Deprecated): Configure permissions instead.&lt;/li>
&lt;li>&lt;code>subscriptionId&lt;/code>: (&lt;em>Required&lt;/em>) The subscriptionId that your service principal is assigned to.&lt;/li>
&lt;li>&lt;code>tenantId&lt;/code>: (&lt;em>Required&lt;/em>) The tenantId that your service principal is assigned to.&lt;/li>
&lt;li>&lt;code>useSshPublicKey&lt;/code>: Whether to use SSH public key to provision the linux vm. The default value is true which means using the ssh public key. Setting it to false means using the password instead.&lt;/li>
&lt;/ul>
&lt;h4 id="bakery-parameters-1">Bakery parameters&lt;/h4>
&lt;ul>
&lt;li>&lt;code>templateFile&lt;/code>: his is the name of the packer template that will be used to bake images from this base image. The template file must be found in this &lt;a href="https://github.com/spinnaker/rosco/tree/master/rosco-web/config/packer">list&lt;/a>, or supplied as described in the &lt;a href="https://spinnaker.io/setup/bakery/">bakery docs&lt;/a>&lt;/li>
&lt;/ul>
&lt;h5 id="bakery-base-image-parameters-1">Bakery base image parameters&lt;/h5>
&lt;ul>
&lt;li>&lt;code>detailedDescription&lt;/code>: A long description to help human operators identify the image.&lt;/li>
&lt;li>&lt;code>offer&lt;/code>: (&lt;em>Required&lt;/em>) The offer for your base image. See &lt;a href="https://aka.ms/azspinimage">https://aka.ms/azspinimage&lt;/a> to get a list of images.&lt;/li>
&lt;li>&lt;code>packageType&lt;/code>: This is used to help Spinnaker&amp;rsquo;s bakery download the build artifacts you supply it with. For example, specifying &amp;lsquo;deb&amp;rsquo; indicates that your artifacts will need to be fetched from a debian repository.&lt;/li>
&lt;li>&lt;code>publisher&lt;/code>: (&lt;em>Required&lt;/em>) The Publisher name for your base image. See &lt;a href="https://aka.ms/azspinimage">https://aka.ms/azspinimage&lt;/a> to get a list of images.&lt;/li>
&lt;li>&lt;code>shortDescription&lt;/code>: A short description to help human operators identify the image.&lt;/li>
&lt;li>&lt;code>sku&lt;/code>: (&lt;em>Required&lt;/em>) The SKU for your base image. See &lt;a href="https://aka.ms/azspinimage">https://aka.ms/azspinimage&lt;/a> to get a list of images.&lt;/li>
&lt;li>&lt;code>templateFile&lt;/code>: This is the name of the packer template that will be used to bake images from this base image. The template file must be found in this list &lt;a href="https://github.com/spinnaker/rosco/tree/master/rosco-web/config/packer">https://github.com/spinnaker/rosco/tree/master/rosco-web/config/packer&lt;/a>, or supplied as described here: &lt;a href="https://spinnaker.io/setup/bakery/">https://spinnaker.io/setup/bakery/&lt;/a>&lt;/li>
&lt;li>&lt;code>version&lt;/code>: The version of your base image. This defaults to &amp;rsquo;latest&amp;rsquo; if not specified.&lt;/li>
&lt;/ul>
&lt;h3 id="cloud-foundry">Cloud Foundry&lt;/h3>
&lt;p>&lt;strong>spec.spinnakerConfig.config.providers.cloudfoundry&lt;/strong>&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">cloudfoundry&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">enabled&lt;/span>: &lt;span style="color:#ff79c6">false&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">accounts&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">name&lt;/span>: cf-dev
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">apiHost&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">appsManagerUrl&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">environment&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">metricsUrl&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">providerVersion&lt;/span>: V1
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">password&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">permissions&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">READ&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">WRITE&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">EXECUTE&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">CREATE&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">requiredGroupMembership&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">skipSslValidation&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">user&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">primaryAccount&lt;/span>: cf-dev
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>&lt;code>enabled&lt;/code>: whether the provider is enabled&lt;/li>
&lt;li>&lt;code>primaryAccount&lt;/code>: name of primary account&lt;/li>
&lt;li>&lt;code>accounts&lt;/code>: list of configured accounts&lt;/li>
&lt;/ul>
&lt;h4 id="account-parameters-3">Account parameters&lt;/h4>
&lt;ul>
&lt;li>&lt;code>apiHost&lt;/code>: (&lt;em>Required&lt;/em>) Host of the CloudFoundry Foundation API endpoint ie. &lt;code>api.sys.somesystem.com&lt;/code>&lt;/li>
&lt;li>&lt;code>appsManagerUrl&lt;/code>: HTTP(S) URL of the Apps Manager application for the CloudFoundry Foundation. Example: &lt;code>https://apps.sys.somesystem.com&lt;/code>&lt;/li>
&lt;li>&lt;code>environment&lt;/code>: The environment name for the account. Many accounts can share the same environment (e.g. dev, test, prod)&lt;/li>
&lt;li>&lt;code>metricsUrl&lt;/code>: HTTP(S) URL of the metrics application for the CloudFoundry Foundation. Example &lt;code>https://metrics.sys.somesystem.com&lt;/code>&lt;/li>
&lt;li>&lt;code>password&lt;/code>: (&lt;em>Required&lt;/em>) Password for the account to use on for this CloudFoundry Foundation. Supports encrypted value.&lt;/li>
&lt;li>&lt;code>permissions&lt;/code>:
&lt;ul>
&lt;li>&lt;code>READ&lt;/code>: &lt;code>[]&lt;/code> A user must have at least one of these roles in order to view this account&amp;rsquo;s cloud resources.&lt;/li>
&lt;li>&lt;code>WRITE&lt;/code>: &lt;code>[]&lt;/code> A user must have at least one of these roles in order to make changes to this account&amp;rsquo;s cloud resources.&lt;/li>
&lt;li>&lt;code>EXECUTE&lt;/code>:&lt;/li>
&lt;li>&lt;code>CREATE&lt;/code>:&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;code>requiredGroupMembership&lt;/code>: &lt;code>[]&lt;/code> (Deprecated): Configure permissions instead.&lt;/li>
&lt;li>&lt;code>skipSslValidation&lt;/code>: (&lt;em>Default&lt;/em>: &lt;code>false&lt;/code>) Skip SSL server certificate validation of the API endpoint&lt;/li>
&lt;li>&lt;code>user&lt;/code>: (&lt;em>Required&lt;/em>) User name for the account to use on for this CloudFoundry Foundation&lt;/li>
&lt;/ul>
&lt;h3 id="dcos">DC/OS&lt;/h3>
&lt;p>&lt;strong>spec.spinnakerConfig.config.providers.dcos&lt;/strong>&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">dcos&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">enabled&lt;/span>: &lt;span style="color:#ff79c6">false&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">accounts&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">name&lt;/span>: dcos-dev
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">clusters&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">name&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">password&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">serviceKeyFile&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">uid&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">dockerRegistries&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">accountName&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">namespaces&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">environment&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">permissions&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">READ&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">WRITE&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">EXECUTE&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">CREATE&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">providerVersion&lt;/span>: V1
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">requiredGroupMembership&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">clusters&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">name&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">caCertFile&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">dcosUrl&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">insecureSkipTlsVerify&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">loadBalancer&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">image&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">serviceAccountSecret&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">primaryAccount&lt;/span>:
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>&lt;code>enabled&lt;/code>: Whether the provider is enabled.&lt;/li>
&lt;li>&lt;code>accounts&lt;/code>: the list of configured accounts&lt;/li>
&lt;li>&lt;code>primaryAccount&lt;/code>: The name of the primary account.&lt;/li>
&lt;li>&lt;code>clusters&lt;/code>: the list of configured clusters&lt;/li>
&lt;/ul>
&lt;h4 id="accounts-parameters">Accounts parameters&lt;/h4>
&lt;ul>
&lt;li>&lt;code>clusters&lt;/code>: (&lt;em>Required&lt;/em>) The clusters against which this account will authenticate.
&lt;ul>
&lt;li>&lt;code>name&lt;/code>: (&lt;em>Required&lt;/em>) The name of the account.&lt;/li>
&lt;li>&lt;code>password&lt;/code>: Password for a user account. If set, &lt;code>serviceKeyFile&lt;/code> should not be set. Supports encrypted value.&lt;/li>
&lt;li>&lt;code>serviceKeyFile&lt;/code>: Path to a file containing the secret key for service account authentication. If set, &lt;code>password&lt;/code> should not be set. File needs to be present on the machine running Spinnaker. Supports encrypted file.&lt;/li>
&lt;li>&lt;code>uid&lt;/code>: (&lt;em>Required&lt;/em>) User or service account identifier.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;code>dockerRegistries&lt;/code>: &lt;code>[]&lt;/code>; (&lt;em>Required&lt;/em>) Provide the list of docker registries to use with this DC/OS account&lt;/li>
&lt;li>&lt;code>environment&lt;/code>: The environment name for the account. Many accounts can share the same environment (e.g. dev, test, prod)&lt;/li>
&lt;li>&lt;code>requiredGroupMembership&lt;/code>: (Deprecated): Configure permissions instead.&lt;/li>
&lt;li>&lt;code>serviceKeyFile&lt;/code>: Path to a file containing the secret key for service account authentication&lt;/li>
&lt;li>&lt;code>uid&lt;/code>: (&lt;em>Required&lt;/em>) User or service account identifier&lt;/li>
&lt;/ul>
&lt;h4 id="clusters-parameters">Clusters parameters&lt;/h4>
&lt;ul>
&lt;li>&lt;code>name&lt;/code>: (&lt;em>Required&lt;/em>) The name of the cluster.&lt;/li>
&lt;li>&lt;code>caCertFile&lt;/code>: Root certificate file to trust for connections to the cluster. File needs to be present on the machine running Spinnaker. Supports encrypted file.&lt;/li>
&lt;li>&lt;code>dcosUrl&lt;/code>: (&lt;em>Required&lt;/em>) URL of the endpoint for the DC/OS cluster&amp;rsquo;s admin router.&lt;/li>
&lt;li>&lt;code>insecureSkipTlsVerify&lt;/code>: If true, disables verification of certificates from the cluster (insecure).&lt;/li>
&lt;li>&lt;code>loadBalancer&lt;/code>: Configuration for a DC/OS load balancer
&lt;ul>
&lt;li>&lt;code>image&lt;/code>: Marathon-lb image to use when creating a load balancer with Spinnaker.&lt;/li>
&lt;li>&lt;code>serviceAccountSecret&lt;/code>: Name of the secret to use for allowing marathon-lb to authenticate with the cluster. Only necessary for clusters with strict or permissive security. Supports encrypted value.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h3 id="docker-registry">Docker Registry&lt;/h3>
&lt;p>&lt;strong>spec.spinnakerConfig.config.providers.dockerRegistry&lt;/strong>&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">dockerRegistry&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">enabled&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">primaryAccount&lt;/span>: dockerhub
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">accounts&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">name&lt;/span>: dockerhub
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">environment&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">requiredGroupMembership&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">providerVersion&lt;/span>: V1
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">permissions&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">READ&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">WRITE&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">EXECUTE&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">CREATE&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">address&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">username&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">password&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">passwordCommand&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">email&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">cacheIntervalSeconds&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">clientTimeoutMillis&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">cacheThreads&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">paginateSize&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">sortTagsByDate&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">trackDigests&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">insecureRegistry&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">repositories&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">passwordFile&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">dockerconfigFile&lt;/span>:
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>&lt;code>enabled&lt;/code>: Whether the provider is enabled.&lt;/li>
&lt;li>&lt;code>accounts&lt;/code>: the list of configured accounts&lt;/li>
&lt;li>&lt;code>primaryAccount&lt;/code>: The name of the primary account.&lt;/li>
&lt;/ul>
&lt;h4 id="account-parameters-4">Account parameters&lt;/h4>
&lt;ul>
&lt;li>&lt;code>name&lt;/code>: name of the account&lt;/li>
&lt;li>&lt;code>address&lt;/code>: (&lt;em>Default&lt;/em>: &lt;code>gcr.io&lt;/code>) (&lt;em>Required&lt;/em>) The registry address you want to pull and deploy images from; e.g. &lt;code>https://index.docker.io&lt;/code>&lt;/li>
&lt;li>&lt;code>cacheIntervalSeconds&lt;/code>: (&lt;em>Default&lt;/em>: &lt;code>30&lt;/code>) How many seconds elapse between polling your docker registry. Certain registries are sensitive to over-polling, and larger intervals (e.g. 10 minutes = 600 seconds) are desirable if you&amp;rsquo;re seeing rate limiting.&lt;/li>
&lt;li>&lt;code>cacheThreads&lt;/code>: (&lt;em>Default&lt;/em>: &lt;code>1&lt;/code>) How many threads to cache all provided repos on. Really only useful if you have a ton of repos.&lt;/li>
&lt;li>&lt;code>clientTimeoutMillis&lt;/code>: (&lt;em>Default&lt;/em>: &lt;code>60000&lt;/code>) Timeout time in milliseconds for this repository.&lt;/li>
&lt;li>&lt;code>email&lt;/code>: Your docker registry email (often this only needs to be well-formed, rather than be a real address)&lt;/li>
&lt;li>&lt;code>environment&lt;/code>: The environment name for the account. Many accounts can share the same environment (e.g. dev, test, prod)&lt;/li>
&lt;li>&lt;code>insecureRegistry&lt;/code>: (&lt;em>Default&lt;/em>: &lt;code>false&lt;/code>) Treat the docker registry as insecure (don&amp;rsquo;t validate the ssl cert).&lt;/li>
&lt;li>&lt;code>paginateSize&lt;/code>: (&lt;em>Default&lt;/em>: &lt;code>100&lt;/code>) Paginate size for the docker repository &lt;code>_catalog&lt;/code> endpoint.&lt;/li>
&lt;li>&lt;code>password&lt;/code>: Your docker registry password. Supports encrypted value.&lt;/li>
&lt;li>&lt;code>passwordCommand&lt;/code>: Command to retrieve docker token/password, commands must be available in environment&lt;/li>
&lt;li>&lt;code>passwordFile&lt;/code>: The path to a file containing your docker password in plaintext (not a docker/config.json file). File needs to be present on the machine running Spinnaker. Supports encrypted file.&lt;/li>
&lt;li>&lt;code>permissions&lt;/code>:
&lt;ul>
&lt;li>&lt;code>READ&lt;/code>: &lt;code>[]&lt;/code> A user must have at least one of these roles in order to view this account&amp;rsquo;s cloud resources.&lt;/li>
&lt;li>&lt;code>WRITE&lt;/code>: &lt;code>[]&lt;/code> A user must have at least one of these roles in order to make changes to this account&amp;rsquo;s cloud resources.&lt;/li>
&lt;li>&lt;code>EXECUTE&lt;/code>:&lt;/li>
&lt;li>&lt;code>CREATE&lt;/code>:&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;code>requiredGroupMembership&lt;/code>: &lt;code>[]&lt;/code> (Deprecated): Configure permissions instead.&lt;/li>
&lt;li>&lt;code>repositories&lt;/code>: (&lt;em>Default&lt;/em>: &lt;code>[]&lt;/code>) An optional list of repositories to cache images from. If not provided, Spinnaker will attempt to read accessible repositories from the registries &lt;code>_catalog&lt;/code> endpoint&lt;/li>
&lt;li>&lt;code>sortTagsByDate&lt;/code>: (&lt;em>Default&lt;/em>: &lt;code>false&lt;/code>) Sort tags by creation date.&lt;/li>
&lt;li>&lt;code>trackDigests&lt;/code>: (&lt;em>Default&lt;/em>: &lt;code>false&lt;/code>) Track digest changes. This is not recommended as it consumes a high QPM, and most registries are flaky.&lt;/li>
&lt;li>&lt;code>username&lt;/code>: Your docker registry username&lt;/li>
&lt;/ul>
&lt;h3 id="ecs">ECS&lt;/h3>
&lt;p>&lt;strong>spec.spinnakerConfig.config.providers.ecs&lt;/strong>&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">ecs&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">enabled&lt;/span>: &lt;span style="color:#ff79c6">false&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">accounts&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">name&lt;/span>: aws-dev
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">environment&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">awsAccount&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">requiredGroupMembership&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">permissions&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">READ&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">WRITE&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">EXECUTE&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">CREATE&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">providerVersion&lt;/span>: v1
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">primaryAccount&lt;/span>: aws-dev
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>&lt;code>enabled&lt;/code>: Whether the provider is enabled.&lt;/li>
&lt;li>&lt;code>accounts&lt;/code>: the list of configured accounts&lt;/li>
&lt;li>&lt;code>primaryAccount&lt;/code>: The name of the primary account.&lt;/li>
&lt;/ul>
&lt;h3 id="account-parameters-5">Account parameters&lt;/h3>
&lt;ul>
&lt;li>&lt;code>name&lt;/code>: name of the account&lt;/li>
&lt;li>&lt;code>awsAccount&lt;/code>: (&lt;em>Required&lt;/em>) Provide the name of the AWS account associated with this ECS account.See &lt;a href="https://github.com/spinnaker/clouddriver/blob/master/clouddriver-ecs/README.md">https://github.com/spinnaker/clouddriver/blob/master/clouddriver-ecs/README.md&lt;/a> for more information.&lt;/li>
&lt;li>&lt;code>environment&lt;/code>: The environment name for the account. Many accounts can share the same environment (e.g. dev, test, prod)&lt;/li>
&lt;li>&lt;code>permissions&lt;/code>:
&lt;ul>
&lt;li>&lt;code>READ&lt;/code>: &lt;code>[]&lt;/code> A user must have at least one of these roles in order to view this account&amp;rsquo;s cloud resources.&lt;/li>
&lt;li>&lt;code>WRITE&lt;/code>: &lt;code>[]&lt;/code> A user must have at least one of these roles in order to make changes to this account&amp;rsquo;s cloud resources.&lt;/li>
&lt;li>&lt;code>EXECUTE&lt;/code>:&lt;/li>
&lt;li>&lt;code>CREATE&lt;/code>:&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;code>requiredGroupMembership&lt;/code>: &lt;code>[]&lt;/code> (Deprecated): Configure permissions instead.&lt;/li>
&lt;/ul>
&lt;h3 id="google">Google&lt;/h3>
&lt;p>&lt;strong>spec.spinnakerConfig.config.providers.google&lt;/strong>&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">google&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">enabled&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">accounts&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">name&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">environment&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">requiredGroupMembership&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - readers
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">providerVersion&lt;/span>: V1
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">permissions&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">READ&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - read1
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - read2
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">WRITE&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - write1
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - write2
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">EXECUTE&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - exec1
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - exec2
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">CREATE&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - create1
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - create2
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">project&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">jsonPath&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">alphaListed&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">imageProjects&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - abc
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">consul&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">enabled&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">agentEndpoint&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">agentPort&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">datacenters&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - abc
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">userDataFile&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">regions&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - abc
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">primaryAccount&lt;/span>: google-dev
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">bakeryDefaults&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">templateFile&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">baseImages&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">baseImage&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">id&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">shortDescription&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">detailedDescription&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">packageType&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">templateFile&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">isImageFamily&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">virtualizationSettings&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">sourceImage&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">sourceImageFamily&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">zone&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">network&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">networkProjectId&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">useInternalIp&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">defaultKeyPairTemplate&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">defaultRegions&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">name&lt;/span>:
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>&lt;code>enabled&lt;/code>: Whether the provider is enabled.&lt;/li>
&lt;li>&lt;code>accounts&lt;/code>: the list of configured accounts&lt;/li>
&lt;li>&lt;code>primaryAccount&lt;/code>: The name of the primary account.&lt;/li>
&lt;li>&lt;code>bakeryDefaults&lt;/code>: configuration for Spinnaker&amp;rsquo;s image bakery&lt;/li>
&lt;/ul>
&lt;h4 id="account-parameters-6">Account parameters&lt;/h4>
&lt;ul>
&lt;li>&lt;code>name&lt;/code>: name of the account&lt;/li>
&lt;li>&lt;code>alphaListed&lt;/code>: (&lt;em>Default&lt;/em>: &lt;code>false&lt;/code>) Enable this flag if your project has access to alpha features and you want Spinnaker to take advantage of them.&lt;/li>
&lt;li>&lt;code>environment&lt;/code>: The environment name for the account. Many accounts can share the same environment (e.g. dev, test, prod)&lt;/li>
&lt;li>&lt;code>imageProjects&lt;/code>: (&lt;em>Default&lt;/em>: &lt;code>[]&lt;/code>) A list of Google Cloud Platform projects Spinnaker will be able to cache and deploy images from. When this is omitted, it defaults to the current project. Each project must have granted the IAM role &lt;code>compute.imageUser&lt;/code> to the service account associated with the json key used by this account, as well as to the &amp;lsquo;Google APIs service account&amp;rsquo; automatically created for the project being managed (should look similar to &lt;code>12345678912@cloudservices.gserviceaccount.com&lt;/code>). See &lt;a href="https://cloud.google.com/compute/docs/images/sharing-images-across-projects">Sharing Images Across Projects&lt;/a> for more information about sharing images across GCP projects.&lt;/li>
&lt;li>&lt;code>jsonPath&lt;/code>: The path to a JSON service account that Spinnaker will use as credentials. This is only needed if Spinnaker is not deployed on a Google Compute Engine VM, or needs permissions not afforded to the VM it is running on. See &lt;a href="https://cloud.google.com/compute/docs/access/service-accounts">https://cloud.google.com/compute/docs/access/service-accounts&lt;/a> for more information. File needs to be present on the machine running Spinnaker. Supports encrypted file.&lt;/li>
&lt;li>&lt;code>permissions&lt;/code>:
&lt;ul>
&lt;li>&lt;code>READ&lt;/code>: &lt;code>[]&lt;/code> A user must have at least one of these roles in order to view this account&amp;rsquo;s cloud resources.&lt;/li>
&lt;li>&lt;code>WRITE&lt;/code>: &lt;code>[]&lt;/code> A user must have at least one of these roles in order to make changes to this account&amp;rsquo;s cloud resources.&lt;/li>
&lt;li>&lt;code>EXECUTE&lt;/code>:&lt;/li>
&lt;li>&lt;code>CREATE&lt;/code>:&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;code>requiredGroupMembership&lt;/code>: &lt;code>[]&lt;/code> (Deprecated): Configure permissions instead.&lt;/li>
&lt;li>&lt;code>project&lt;/code>: (&lt;em>Required&lt;/em>) The Google Cloud Platform project this Spinnaker account will manage.&lt;/li>
&lt;li>&lt;code>readPermissions&lt;/code>: (&lt;em>Default&lt;/em>: &lt;code>[]&lt;/code>) A user must have at least one of these roles in order to view this account&amp;rsquo;s cloud resources.&lt;/li>
&lt;li>&lt;code>regions&lt;/code>: A list of regions for caching and mutating calls. This overwrites any default-regions set on the provider.&lt;/li>
&lt;li>&lt;code>userDataFile&lt;/code>: The path to user data template file. Spinnaker has the ability to inject userdata into generated instance templates. The mechanism is via a template file that is token replaced to provide some specifics about the deployment. See &lt;a href="https://github.com/spinnaker/clouddriver/blob/master/clouddriver-aws/UserData.md">https://github.com/spinnaker/clouddriver/blob/master/clouddriver-aws/UserData.md&lt;/a> for more information. File needs to be present on the machine running Spinnaker.&lt;/li>
&lt;li>&lt;code>consul&lt;/code>: Configuration for Consul.
&lt;ul>
&lt;li>&lt;code>enabled&lt;/code>: Whether Consul is enabled.&lt;/li>
&lt;li>&lt;code>agentEndpoint&lt;/code>: Reachable Consul node endpoint connected to the Consul cluster. Defaults to localhost.&lt;/li>
&lt;li>&lt;code>agentPort&lt;/code>: Port consul is running on for every agent.&lt;/li>
&lt;li>&lt;code>datacenters&lt;/code>: List of data centers to cache and keep updated.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h4 id="bakery-parameters-2">Bakery parameters&lt;/h4>
&lt;ul>
&lt;li>&lt;code>network&lt;/code>: Set the default network your images will be baked in.&lt;/li>
&lt;li>&lt;code>networkProjectId&lt;/code>: Set the default project id for the network and subnet to use for the VM baking your image.&lt;/li>
&lt;li>&lt;code>templateFile&lt;/code>: This is the name of the packer template that will be used to bake images from this base image. The template file must be found in this list &lt;a href="https://github.com/spinnaker/rosco/tree/master/rosco-web/config/packer">https://github.com/spinnaker/rosco/tree/master/rosco-web/config/packer&lt;/a>, or supplied as described here: &lt;a href="https://spinnaker.io/setup/bakery/">https://spinnaker.io/setup/bakery/&lt;/a>&lt;/li>
&lt;li>&lt;code>useInternalIp&lt;/code>: Use the internal rather than external IP of the VM baking your image.&lt;/li>
&lt;li>&lt;code>zone&lt;/code>: Set the default zone your images will be baked in.&lt;/li>
&lt;/ul>
&lt;h5 id="bakery-base-image-parameters-2">Bakery base image parameters&lt;/h5>
&lt;ul>
&lt;li>&lt;code>detailedDescription&lt;/code>: A long description to help human operators identify the image.&lt;/li>
&lt;li>&lt;code>isImageFamily&lt;/code>: (&lt;em>Default&lt;/em>: &lt;code>false&lt;/code>)&lt;/li>
&lt;li>&lt;code>packageType&lt;/code>: This is used to help Spinnaker&amp;rsquo;s bakery download the build artifacts you supply it with. For example, specifying &amp;lsquo;deb&amp;rsquo; indicates that your artifacts will need to be fetched from a debian repository.&lt;/li>
&lt;li>&lt;code>shortDescription&lt;/code>: A short description to help human operators identify the image.&lt;/li>
&lt;li>&lt;code>templateFile&lt;/code>: This is the name of the packer template that will be used to bake images from this base image. The template file must be found in this list &lt;a href="https://github.com/spinnaker/rosco/tree/master/rosco-web/config/packer">https://github.com/spinnaker/rosco/tree/master/rosco-web/config/packer&lt;/a>, or supplied as described here: &lt;a href="https://spinnaker.io/setup/bakery/">https://spinnaker.io/setup/bakery/&lt;/a>&lt;/li>
&lt;li>&lt;code>virtualizationSettings&lt;/code>:
&lt;ul>
&lt;li>&lt;code>sourceImage&lt;/code>: The source image. If both source image and source image family are set, source image will take precedence.&lt;/li>
&lt;li>&lt;code>source-image-family&lt;/code>: The source image family to create the image from. The newest, non-deprecated image is used.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h3 id="huawei-cloud">Huawei Cloud&lt;/h3>
&lt;p>&lt;strong>spec.spinnakerConfig.config.providers.huawei&lt;/strong>&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">huaweicloud&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">enabled&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">accounts&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">name&lt;/span>: huawei-dev
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">environment&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">requiredGroupMembership&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">providerVersion&lt;/span>: V1
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">permissions&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">READ&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - read1
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - read2
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">WRITE&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - write1
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - write2
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">EXECUTE&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - exec1
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - exec2
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">CREATE&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - create1
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - create2
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">accountType&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">authUrl&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">username&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">password&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">projectName&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">domainName&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">insecure&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">regions&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">primaryAccount&lt;/span>: huawei-dev
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">bakeryDefaults&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">templateFile&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">baseImages&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">baseImage&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">id&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">shortDescription&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">detailedDescription&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">packageType&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">templateFile&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">virtualizationSettings&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">region&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">instanceType&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">sourceImageId&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">sshUserName&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">eipType&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">authUrl&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">username&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">password&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">projectName&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">domainName&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">insecure&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">vpcId&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">subnetId&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">securityGroup&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">eipBandwidthSize&lt;/span>:
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>&lt;code>enabled&lt;/code>: Whether the provider is enabled.&lt;/li>
&lt;li>&lt;code>accounts&lt;/code>: the list of configured accounts&lt;/li>
&lt;li>&lt;code>primaryAccount&lt;/code>: The name of the primary account.&lt;/li>
&lt;li>&lt;code>bakeryDefaults&lt;/code>: configuration for Spinnaker&amp;rsquo;s image bakery&lt;/li>
&lt;/ul>
&lt;h4 id="account-parameters-7">Account parameters&lt;/h4>
&lt;ul>
&lt;li>&lt;code>name&lt;/code>: name of the account&lt;/li>
&lt;li>&lt;code>accountType&lt;/code>: The type of account.&lt;/li>
&lt;li>&lt;code>authUrl&lt;/code>: (&lt;em>Required&lt;/em>) The auth url of cloud.&lt;/li>
&lt;li>&lt;code>domainName&lt;/code>: (&lt;em>Required&lt;/em>) The domain name of the cloud.&lt;/li>
&lt;li>&lt;code>environment&lt;/code>: The environment name for the account. Many accounts can share the same environment (e.g. dev, test, prod)&lt;/li>
&lt;li>&lt;code>insecure&lt;/code>: (&lt;em>Default&lt;/em>: &lt;code>false&lt;/code>) Disable certificate validation on SSL connections. Needed if certificates are self signed. Default false.&lt;/li>
&lt;li>&lt;code>password&lt;/code>: (&lt;em>Required&lt;/em>) The password used to access cloud. Supports encrypted value.&lt;/li>
&lt;li>&lt;code>projectName&lt;/code>: (&lt;em>Required&lt;/em>) The name of the project within the cloud.&lt;/li>
&lt;li>&lt;code>regions&lt;/code>: (&lt;em>Default&lt;/em>: &lt;code>[]&lt;/code>) (&lt;em>Required&lt;/em>) The region(s) of the cloud.&lt;/li>
&lt;li>&lt;code>username&lt;/code>: (&lt;em>Required&lt;/em>) The username used to access cloud.&lt;/li>
&lt;li>&lt;code>permissions&lt;/code>:
&lt;ul>
&lt;li>&lt;code>READ&lt;/code>: &lt;code>[]&lt;/code> A user must have at least one of these roles in order to view this account&amp;rsquo;s cloud resources.&lt;/li>
&lt;li>&lt;code>WRITE&lt;/code>: &lt;code>[]&lt;/code> A user must have at least one of these roles in order to make changes to this account&amp;rsquo;s cloud resources.&lt;/li>
&lt;li>&lt;code>EXECUTE&lt;/code>:&lt;/li>
&lt;li>&lt;code>CREATE&lt;/code>:&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;code>requiredGroupMembership&lt;/code>: &lt;code>[]&lt;/code> (Deprecated): Configure permissions instead.&lt;/li>
&lt;/ul>
&lt;h4 id="bakery-parameters-3">Bakery parameters&lt;/h4>
&lt;ul>
&lt;li>&lt;code>authUrl&lt;/code>: (&lt;em>Required&lt;/em>) Set the default auth URL your images will be baked in.&lt;/li>
&lt;li>&lt;code>domainName&lt;/code>: (&lt;em>Required&lt;/em>) Set the default domainName your images will be baked in.&lt;/li>
&lt;li>&lt;code>eipBandwidthSize&lt;/code>: (&lt;em>Required&lt;/em>) Set the bandwidth size of EIP your images will be baked in.&lt;/li>
&lt;li>&lt;code>insecure&lt;/code>: (&lt;em>Required&lt;/em>) The security setting (true/false) for connecting to the HuaweiCloud account.&lt;/li>
&lt;li>&lt;code>password&lt;/code>: (&lt;em>Required&lt;/em>) Set the default password your images will be baked with.&lt;/li>
&lt;li>&lt;code>projectName&lt;/code>: Set the default project name your images will be baked in.&lt;/li>
&lt;li>&lt;code>domainName&lt;/code>: (&lt;em>Required&lt;/em>) Set the default project name your images will be baked in.&lt;/li>
&lt;li>&lt;code>securityGroup&lt;/code>: (&lt;em>Required&lt;/em>) Set the default security group your images will be baked in.&lt;/li>
&lt;li>&lt;code>subnetId&lt;/code>: (&lt;em>Required&lt;/em>) Set the subnet your images will be baked in.&lt;/li>
&lt;li>&lt;code>templateFile&lt;/code>: This is the name of the packer template that will be used to bake images from this base image. The template file must be found in this list &lt;a href="https://github.com/spinnaker/rosco/tree/master/rosco-web/config/packer">https://github.com/spinnaker/rosco/tree/master/rosco-web/config/packer&lt;/a>, or supplied as described here: &lt;a href="https://spinnaker.io/setup/bakery/">https://spinnaker.io/setup/bakery/&lt;/a>&lt;/li>
&lt;li>&lt;code>username&lt;/code>: (&lt;em>Required&lt;/em>) Set the default username your images will be baked with.&lt;/li>
&lt;li>&lt;code>vpcId&lt;/code>: (&lt;em>Required&lt;/em>) Set the vpc your images will be baked in.&lt;/li>
&lt;/ul>
&lt;h5 id="bakery-base-image-parameters-3">Bakery base image parameters&lt;/h5>
&lt;ul>
&lt;li>&lt;code>detailedDescription&lt;/code>: A long description to help human operators identify the image.&lt;/li>
&lt;li>&lt;code>packageType&lt;/code>: This is used to help Spinnaker&amp;rsquo;s bakery download the build artifacts you supply it with. For example, specifying &amp;lsquo;deb&amp;rsquo; indicates that your artifacts will need to be fetched from a debian repository.&lt;/li>
&lt;li>&lt;code>shortDescription&lt;/code>: A short description to help human operators identify the image.&lt;/li>
&lt;li>&lt;code>templateFile&lt;/code>: This is the name of the packer template that will be used to bake images from this base image. The template file must be found in this list &lt;a href="https://github.com/spinnaker/rosco/tree/master/rosco-web/config/packer">https://github.com/spinnaker/rosco/tree/master/rosco-web/config/packer&lt;/a>, or supplied as described here: &lt;a href="https://spinnaker.io/setup/bakery/">https://spinnaker.io/setup/bakery/&lt;/a>&lt;/li>
&lt;/ul>
&lt;h3 id="kubernetes">Kubernetes&lt;/h3>
&lt;p>&lt;strong>spec.spinnakerConfig.config.providers.kubernetes&lt;/strong>&lt;/p>
&lt;p>The Kubernetes provider is used to deploy Kubernetes resources to any number of Kubernetes clusters. Spinnaker assumes you have a Kubernetes cluster already running. If you don&amp;rsquo;t, you must configure one: &lt;a href="https://kubernetes.io/docs/setup/">https://Kubernetes.io/docs/getting-started-guides/&lt;/a>.&lt;/p>
&lt;p>Before proceeding, please visit &lt;a href="https://kubernetes.io/docs/tasks/access-application-cluster/configure-access-multiple-clusters/">https://kubernetes.io/docs/tasks/access-application-cluster/configure-access-multiple-clusters/&lt;/a> to make sure you&amp;rsquo;re familiar with the authentication terminology.&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">kubernetes&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">enabled&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">accounts&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">name&lt;/span>: spinnaker
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">context&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">cluster&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">user&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">configureImagePullSecrets&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">cacheThreads&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">namespaces&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">omitNamespaces&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">kinds&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">omitKinds&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">customResources&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">versioned&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">kubernetesKind&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">spinnakerKind&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">cachingPolicies&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">kubernetesKind&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">maxEntriesPerAgent&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">kubeconfigFile&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">kubeconfigContents&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">kubectlPath&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">kubectlRequestTimeoutSeconds&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">liveManifestCalls&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">oAuthServiceAccount&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">oAuthScopes&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">namingStrategy&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">skin&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">onlySpinnakerManaged&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">debug&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">dockerRegistries&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">accountName&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">namespaces&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">providerVersion&lt;/span>: V2
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">requiredGroupMembership&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">permissions&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">READ&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">WRITE&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">EXECUTE&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">CREATE&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">primaryAccount&lt;/span>: spinnaker
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>&lt;code>enabled&lt;/code>: Whether the provider is enabled.&lt;/li>
&lt;li>&lt;code>accounts&lt;/code>: the list of configured accounts&lt;/li>
&lt;li>&lt;code>primaryAccount&lt;/code>: The name of the primary account.&lt;/li>
&lt;/ul>
&lt;h4 id="account-parameters-8">Account parameters&lt;/h4>
&lt;p>An account in the Kubernetes provider refers to a single Kubernetes context. In Kubernetes, a context is the combination of a Kubernetes cluster and some credentials. If no context is specified, the default context in in your &lt;code>kubeconfig&lt;/code> is assumed. You must also provide a set of Docker Registries for each account. Spinnaker will automatically upload that Registry&amp;rsquo;s credentials to the specified Kubernetes cluster allowing you to deploy those images without further configuration.&lt;/p>
&lt;ul>
&lt;li>&lt;code>name&lt;/code>: spinnaker&lt;/li>
&lt;li>&lt;code>context&lt;/code>: The kubernetes context to be managed by Spinnaker. See &lt;a href="http://kubernetes.io/docs/user-guide/kubeconfig-file/#context">http://kubernetes.io/docs/user-guide/kubeconfig-file/#context&lt;/a> for more information. When no context is configured for an account the &amp;lsquo;current-context&amp;rsquo; in your kubeconfig is assumed.&lt;/li>
&lt;li>&lt;code>cluster&lt;/code>: Used with V1 provider (deprecated)&lt;/li>
&lt;li>&lt;code>user&lt;/code>: Used with V1 provider (deprecated)&lt;/li>
&lt;li>&lt;code>configureImagePullSecrets&lt;/code>: Used with V1 provider. When true, Spinnaker will create &amp;amp; manage your image pull secrets for you; when false, you will have to create and attach them to your pod specs by hand.&lt;/li>
&lt;li>&lt;code>serviceAccount&lt;/code>: When true, Spinnaker attempt to authenticate against Kubernetes using a Kubernetes service account. This only works when Halyard &amp;amp; Spinnaker are deployed in Kubernetes. Read more about service accounts here: &lt;a href="https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/">https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/&lt;/a>.&lt;/li>
&lt;li>&lt;code>cacheThreads&lt;/code>: Number of caching agents for this kubernetes account. Each agent handles a subset of the namespaces available to this account. By default, only 1 agent caches all kinds for all namespaces in the account.&lt;/li>
&lt;li>&lt;code>namespaces&lt;/code>: A list of namespaces this Spinnaker account can deploy to and will cache. When no namespaces are configured, this defaults to &amp;lsquo;all namespaces&amp;rsquo;.&lt;/li>
&lt;li>&lt;code>omitNamespaces&lt;/code>: A list of namespaces this Spinnaker account cannot deploy to or cache. This can only be set when &amp;ndash;namespaces is empty or not set.&lt;/li>
&lt;li>&lt;code>kinds&lt;/code>: (V2 Only) A list of resource kinds this Spinnaker account can deploy to and will cache. When no kinds are configured, this defaults to all kinds described in the &lt;a href="https://spinnaker.io/reference/providers/kubernetes-v2/">Kubernetes Provider&lt;/a> docs.&lt;/li>
&lt;li>&lt;code>omitKinds&lt;/code>: (V2 Only) A list of resource kinds this Spinnaker account cannot deploy to or cache. This can only be set when &amp;ndash;kinds is empty or not set.&lt;/li>
&lt;li>&lt;code>customResources&lt;/code>: (V2 Only) List of Kubernetes custom resources to managed by clouddriver and made available for use in patch and delete manifest stages.
&lt;ul>
&lt;li>&lt;code>versioned&lt;/code>: true or false&lt;/li>
&lt;li>&lt;code>kubernetesKind&lt;/code>: Fully qualified name of the Kubernetes CRD&lt;/li>
&lt;li>&lt;code>spinnakerKind&lt;/code>: One of instances, configs, serverGroups, loadBalancers, securityGroups, serverGroupManagers, unclassified&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;code>cachingPolicies&lt;/code>:
&lt;ul>
&lt;li>&lt;code>kubernetesKind&lt;/code>:&lt;/li>
&lt;li>&lt;code>maxEntriesPerAgent&lt;/code>:&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;code>kubeconfigFile&lt;/code>: The path to your kubeconfig file. By default, it will be under the Spinnaker user&amp;rsquo;s home directory in the typical .kube/config location. File needs to be present on the machine running Spinnaker. Supports encrypted file.&lt;/li>
&lt;li>&lt;code>kubeconfigContents&lt;/code>: Inline kubeconfig file contents&lt;/li>
&lt;li>&lt;code>kubectlPath&lt;/code>: Alternate path inside clouddriver pod of the kubectl binary&lt;/li>
&lt;li>&lt;code>kubectlRequestTimeoutSeconds&lt;/code>: Timeout in seconds of kubectl calls&lt;/li>
&lt;li>&lt;code>checkPermissionsOnStartup&lt;/code>: When false, clouddriver will skip the permission checks for all Kubernetes Kinds at startup. This can save a great deal of time during clouddriver startup when you have many Kubernetes accounts configured. This disables the log messages at startup about missing permissions.&lt;/li>
&lt;li>&lt;code>liveManifestCalls&lt;/code>: When true, clouddriver will query manifest status during pipeline executions using live data rather than the cache. This eliminates all time spent in the &amp;ldquo;force cache refresh&amp;rdquo; task in pipelines, greatly reducing execution time.&lt;/li>
&lt;li>&lt;code>oAuthServiceAccount&lt;/code>: File needs to be present on the machine running Spinnaker. Supports encrypted file.&lt;/li>
&lt;li>&lt;code>oAuthScopes&lt;/code>:&lt;/li>
&lt;li>&lt;code>namingStrategy&lt;/code>:&lt;/li>
&lt;li>&lt;code>skin&lt;/code>:&lt;/li>
&lt;li>&lt;code>onlySpinnakerManaged&lt;/code>: (V2 Only) When &lt;code>true&lt;/code>, Spinnaker only caches and displays applications that have been created by Spinnaker. Before placing in a &lt;code>false&lt;/code> state, you should review the Kubernetes cluster configuration. When &lt;code>false&lt;/code>, Spinnaker analyzes the cluster and automatically attempts to configure and populate applications for resources already present in Kubernetes, unless limited with &lt;code>omitNamespaces&lt;/code>. You should note the &lt;a href="https://kb.armory.io/s/article/Autogenerated-Applications-Cannot-be-Deleted-w-onlySpinnakerManaged-set-to-false">increased possibilities of misconfigured Autogenerated Application Placeholders in the deployments&lt;/a>.&lt;/li>
&lt;li>&lt;code>debug&lt;/code>: true or false&lt;/li>
&lt;li>&lt;code>dockerRegistries&lt;/code>:
&lt;ul>
&lt;li>&lt;code>accountName&lt;/code>: dockerhub&lt;/li>
&lt;li>&lt;code>namespaces&lt;/code>:&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;code>providerVersion&lt;/code>: V2&lt;/li>
&lt;li>&lt;code>permissions&lt;/code>:
&lt;ul>
&lt;li>&lt;code>READ&lt;/code>: &lt;code>[]&lt;/code> A user must have at least one of these roles in order to view this account&amp;rsquo;s cloud resources.&lt;/li>
&lt;li>&lt;code>WRITE&lt;/code>: &lt;code>[]&lt;/code> A user must have at least one of these roles in order to make changes to this account&amp;rsquo;s cloud resources.&lt;/li>
&lt;li>&lt;code>EXECUTE&lt;/code>:&lt;/li>
&lt;li>&lt;code>CREATE&lt;/code>:&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;code>requiredGroupMembership&lt;/code>: &lt;code>[]&lt;/code> (Deprecated): Configure permissions instead.&lt;/li>
&lt;/ul>
&lt;h3 id="oracle">Oracle&lt;/h3>
&lt;p>&lt;strong>spec.spinnakerConfig.config.providers.oracle&lt;/strong>&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">oracle&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">enabled&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">accounts&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">name&lt;/span>: oracle-dev
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">environment&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">requiredGroupMembership&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">providerVersion&lt;/span>: V1
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">permissions&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">READ&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - read1
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - read2
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">WRITE&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - write1
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - write2
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">EXECUTE&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - exec1
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - exec2
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">CREATE&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - create1
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - create2
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">compartmentId&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">userId&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">fingerprint&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">sshPrivateKeyFilePath&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">privateKeyPassphrase&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">tenancyId&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">region&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">primaryAccount&lt;/span>: oracle-dev
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">bakeryDefaults&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">templateFile&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">baseImages&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">baseImage&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">id&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">shortDescription&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">detailedDescription&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">packageType&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">templateFile&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">virtualizationSettings&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">baseImageId&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">sshUserName&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">availabilityDomain&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">subnetId&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">instanceShape&lt;/span>:
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h4 id="account-parameters-9">Account parameters&lt;/h4>
&lt;ul>
&lt;li>&lt;code>compartmentId&lt;/code>: (&lt;em>Required&lt;/em>) Provide the OCID of the Oracle Compartment to use.&lt;/li>
&lt;li>&lt;code>deployment&lt;/code>: If supplied, use this Halyard deployment. This will &lt;em>not&lt;/em> create a new deployment.&lt;/li>
&lt;li>&lt;code>environment&lt;/code>: The environment name for the account. Many accounts can share the same environment (e.g. dev, test, prod)&lt;/li>
&lt;li>&lt;code>fingerprint&lt;/code>: (&lt;em>Required&lt;/em>) Fingerprint of the public key&lt;/li>
&lt;li>&lt;code>privateKeyPassphrase&lt;/code>: Passphrase used for the private key, if it is encrypted.Supports encrypted value.&lt;/li>
&lt;li>&lt;code>permissions&lt;/code>:
&lt;ul>
&lt;li>&lt;code>READ&lt;/code>: &lt;code>[]&lt;/code> A user must have at least one of these roles in order to view this account&amp;rsquo;s cloud resources.&lt;/li>
&lt;li>&lt;code>WRITE&lt;/code>: &lt;code>[]&lt;/code> A user must have at least one of these roles in order to make changes to this account&amp;rsquo;s cloud resources.&lt;/li>
&lt;li>&lt;code>EXECUTE&lt;/code>:&lt;/li>
&lt;li>&lt;code>CREATE&lt;/code>:&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;code>requiredGroupMembership&lt;/code>: &lt;code>[]&lt;/code> (Deprecated): Configure permissions instead.&lt;/li>
&lt;li>&lt;code>region&lt;/code>: (&lt;em>Required&lt;/em>) An Oracle region (e.g., us-phoenix-1)&lt;/li>
&lt;li>&lt;code>sshPrivateKeyFilePath&lt;/code>: (&lt;em>Required&lt;/em>) Path to the private key in PEM format. File needs to be present on the machine running Spinnaker. Supports encrypted file.&lt;/li>
&lt;li>&lt;code>tenancyId&lt;/code>: (&lt;em>Required&lt;/em>) Provide the OCID of the Oracle Tenancy to use.&lt;/li>
&lt;li>&lt;code>userI&lt;/code>: (&lt;em>Required&lt;/em>) Provide the OCID of the Oracle User you&amp;rsquo;re authenticating as&lt;/li>
&lt;/ul>
&lt;h4 id="bakery-parameters-4">Bakery parameters&lt;/h4>
&lt;ul>
&lt;li>&lt;code>availabilityDomain&lt;/code>: (&lt;em>Required&lt;/em>) The name of the Availability Domain within which a new instance is launched and provisioned.&lt;/li>
&lt;li>&lt;code>deployment&lt;/code>: If supplied, use this Halyard deployment. This will &lt;em>not&lt;/em> create a new deployment.&lt;/li>
&lt;li>&lt;code>instanceShape&lt;/code>: (&lt;em>Required&lt;/em>) The shape for allocated to a newly created instance.&lt;/li>
&lt;li>&lt;code>subnetId&lt;/code>: (&lt;em>Required&lt;/em>) The name of the subnet within which a new instance is launched and provisioned.&lt;/li>
&lt;li>&lt;code>templateFile&lt;/code>: This is the name of the packer template that will be used to bake images from this base image. The template file must be found in this list &lt;a href="https://github.com/spinnaker/rosco/tree/master/rosco-web/config/packer">https://github.com/spinnaker/rosco/tree/master/rosco-web/config/packer&lt;/a>, or supplied as described here: &lt;a href="https://spinnaker.io/setup/bakery/">https://spinnaker.io/setup/bakery/&lt;/a>&lt;/li>
&lt;/ul>
&lt;h5 id="bakery-base-image-parameters-4">Bakery base image parameters&lt;/h5>
&lt;ul>
&lt;li>&lt;code>baseImageId&lt;/code>: (&lt;em>Required&lt;/em>) The OCID of the base image ID for the baking configuration.&lt;/li>
&lt;li>&lt;code>deployment&lt;/code>: If supplied, use this Halyard deployment. This will &lt;em>not&lt;/em> create a new deployment.&lt;/li>
&lt;li>&lt;code>detailedDescription&lt;/code>: A long description to help human operators identify the image.&lt;/li>
&lt;li>&lt;code>packageType&lt;/code>: This is used to help Spinnaker&amp;rsquo;s bakery download the build artifacts you supply it with. For example, specifying &amp;lsquo;deb&amp;rsquo; indicates that your artifacts will need to be fetched from a debian repository.&lt;/li>
&lt;li>&lt;code>shortDescription&lt;/code>: A short description to help human operators identify the image.&lt;/li>
&lt;li>&lt;code>sshUserName&lt;/code>: (&lt;em>Required&lt;/em>) The ssh username for the baking configuration.&lt;/li>
&lt;li>&lt;code>templateFile&lt;/code>: This is the name of the packer template that will be used to bake images from this base image. The template file must be found in this list &lt;a href="https://github.com/spinnaker/rosco/tree/master/rosco-web/config/packer">https://github.com/spinnaker/rosco/tree/master/rosco-web/config/packer&lt;/a>, or supplied as described here: &lt;a href="https://spinnaker.io/setup/bakery/">https://spinnaker.io/setup/bakery/&lt;/a>&lt;/li>
&lt;/ul>
&lt;h3 id="tencent-cloud">Tencent Cloud&lt;/h3>
&lt;p>&lt;strong>spec.spinnakerConfig.config.providers.tencentcloud&lt;/strong>&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">tencentcloud&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">enabled&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">accounts&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">name&lt;/span>: tencent-dev
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">environment&lt;/span>: dev
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">requiredGroupMembership&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">providerVersion&lt;/span>: V1
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">permissions&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">READ&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - read1
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - read2
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">WRITE&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - write1
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - write2
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">EXECUTE&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - exec1
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - exec2
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">CREATE&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - create1
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - create2
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">secretId&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">secretKey&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">regions&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">primaryAccount&lt;/span>: tencent-dev
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">bakeryDefaults&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">templateFile&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">baseImages&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">baseImage&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">id&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">shortDescription&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">detailedDescription&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">packageType&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">templateFile&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">virtualizationSettings&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">region&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">zone&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">instanceType&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">sourceImageId&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">sshUserName&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">secretId&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">secretKey&lt;/span>:
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>&lt;code>enabled&lt;/code>: true or false&lt;/li>
&lt;li>&lt;code>accounts&lt;/code>: account configuration list&lt;/li>
&lt;li>&lt;code>primaryAccount&lt;/code>: primary account to use&lt;/li>
&lt;li>&lt;code>bakeryDefaults&lt;/code>: image baking configuration&lt;/li>
&lt;/ul>
&lt;h4 id="account-parameters-10">Account parameters&lt;/h4>
&lt;ul>
&lt;li>&lt;code>deployment&lt;/code>: If supplied, use this Halyard deployment. This will &lt;em>not&lt;/em> create a new deployment.&lt;/li>
&lt;li>&lt;code>environment&lt;/code>: The environment name for the account. Many accounts can share the same environment (e.g. dev, test, prod)&lt;/li>
&lt;li>&lt;code>permissions&lt;/code>:
&lt;ul>
&lt;li>&lt;code>READ&lt;/code>: &lt;code>[]&lt;/code> A user must have at least one of these roles in order to view this account&amp;rsquo;s cloud resources.&lt;/li>
&lt;li>&lt;code>WRITE&lt;/code>: &lt;code>[]&lt;/code> A user must have at least one of these roles in order to make changes to this account&amp;rsquo;s cloud resources.&lt;/li>
&lt;li>&lt;code>EXECUTE&lt;/code>:&lt;/li>
&lt;li>&lt;code>CREATE&lt;/code>:&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;code>requiredGroupMembership&lt;/code>: &lt;code>[]&lt;/code> (Deprecated): Configure permissions instead.&lt;/li>
&lt;li>&lt;code>regions&lt;/code>: The Tencent CLoud regions this Spinnaker account will manage.&lt;/li>
&lt;li>&lt;code>secretId&lt;/code>: (&lt;em>Required&lt;/em>) The secret id used to access Tencent Cloud.&lt;/li>
&lt;li>&lt;code>secretKey&lt;/code>: (&lt;em>Required&lt;/em>) The secret key used to access Tencent Cloud. Supports encrypted value.&lt;/li>
&lt;/ul>
&lt;h4 id="bakery-parameters-5">Bakery parameters&lt;/h4>
&lt;ul>
&lt;li>&lt;code>secretId&lt;/code>: (&lt;em>Required&lt;/em>) The default access key used to communicate with AWS.&lt;/li>
&lt;li>&lt;code>secretKey&lt;/code>: (&lt;em>Required&lt;/em>) The secret key used to communicate with AWS. Supports encrypted value.&lt;/li>
&lt;li>&lt;code>templateFile&lt;/code>: This is the name of the packer template that will be used to bake images from this base image. The template file must be found in this list &lt;a href="https://github.com/spinnaker/rosco/tree/master/rosco-web/config/packer">https://github.com/spinnaker/rosco/tree/master/rosco-web/config/packer&lt;/a>, or supplied as described here: &lt;a href="https://spinnaker.io/setup/bakery/">https://spinnaker.io/setup/bakery/&lt;/a>&lt;/li>
&lt;/ul>
&lt;h5 id="bakery-base-image-parameters-5">Bakery base image parameters&lt;/h5>
&lt;ul>
&lt;li>&lt;code>detailedDescription&lt;/code>: A long description to help human operators identify the image.&lt;/li>
&lt;li>&lt;code>instanceType&lt;/code>: (&lt;em>Required&lt;/em>) The instance type for the baking configuration.&lt;/li>
&lt;li>&lt;code>packageType&lt;/code>: This is used to help Spinnaker&amp;rsquo;s bakery download the build artifacts you supply it with. For example, specifying &amp;lsquo;deb&amp;rsquo; indicates that your artifacts will need to be fetched from a debian repository.&lt;/li>
&lt;li>&lt;code>region&lt;/code>: (&lt;em>Required&lt;/em>) The region for the baking configuration.&lt;/li>
&lt;li>&lt;code>shortDescription&lt;/code>: A short description to help human operators identify the image.&lt;/li>
&lt;li>&lt;code>sourceImageId&lt;/code>: (&lt;em>Required&lt;/em>) The source image ID for the baking configuration.&lt;/li>
&lt;li>&lt;code>sshUserName&lt;/code>: (&lt;em>Required&lt;/em>) The ssh username for the baking configuration.&lt;/li>
&lt;li>&lt;code>templateFile&lt;/code>: This is the name of the packer template that will be used to bake images from this base image. The template file must be found in this list &lt;a href="https://github.com/spinnaker/rosco/tree/master/rosco-web/config/packer">https://github.com/spinnaker/rosco/tree/master/rosco-web/config/packer&lt;/a>, or supplied as described here: &lt;a href="https://spinnaker.io/setup/bakery/">https://spinnaker.io/setup/bakery/&lt;/a>&lt;/li>
&lt;li>&lt;code>zone&lt;/code>: (&lt;em>Required&lt;/em>) The zone for the baking configuration.&lt;/li>
&lt;/ul>
&lt;h2 id="kustomize-patch-examples">Kustomize patch examples&lt;/h2>
&lt;p>You can see examples in the &lt;code>spinnaker-kustomize-patches&lt;/code> repo&amp;rsquo;s &lt;a href="https://github.com/armory/spinnaker-kustomize-patches/tree/master/targets">&lt;code>accounts&lt;/code> folder&lt;/a>.&lt;/p></description></item><item><title>Continuous-Deployment: PubSub Config</title><link>/continuous-deployment/installation/armory-operator/op-manifest-reference/pubsub/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/continuous-deployment/installation/armory-operator/op-manifest-reference/pubsub/</guid><description>
&lt;h2 id="specspinnakerconfigconfigpubsub">spec.spinnakerConfig.config.pubsub&lt;/h2>
&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">pubsub&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">enabled&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">google&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">enabled&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">subscriptions&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">name&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">project&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">subscriptionName&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">jsonPath&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">templatePath&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">ackDeadlineSeconds&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">messageFormat&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">publishers&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">name&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">project&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">topicName&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">jsonPath&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">content&lt;/span>:
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>&lt;code>enabled&lt;/code>: true or false.&lt;/li>
&lt;li>&lt;code>google&lt;/code>:&lt;/li>
&lt;/ul>
&lt;h2 id="google">Google&lt;/h2>
&lt;ul>
&lt;li>&lt;code>enabled&lt;/code>: true or false.&lt;/li>
&lt;li>&lt;code>subscriptions&lt;/code>:
&lt;ul>
&lt;li>&lt;code>name&lt;/code>: subscription name&lt;/li>
&lt;li>&lt;code>project&lt;/code>: The name of the GCP project your subscription lives in.&lt;/li>
&lt;li>&lt;code>subscriptionName&lt;/code>: The name of the subscription to listen to. This identifier does not include the name of the project, and must already be configured for Spinnaker to work.&lt;/li>
&lt;li>&lt;code>jsonPath&lt;/code>: The path to a JSON service account that Spinnaker will use as credentials. This is only needed if Spinnaker is not deployed on a Google Compute Engine VM, or needs permissions not afforded to the VM it is running on. See &lt;a href="https://cloud.google.com/compute/docs/access/service-accounts">https://cloud.google.com/compute/docs/access/service-accounts&lt;/a> for more information. File needs to be present on the machine running Spinnaker. Supports encrypted file.&lt;/li>
&lt;li>&lt;code>templatePath&lt;/code>: A path to a jinja template that specifies how artifacts from this pubsub system are interpreted and transformed into Spinnaker artifacts. See spinnaker.io/reference/artifacts for more information. File needs to be present on the machine running Spinnaker.&lt;/li>
&lt;li>&lt;code>ackDeadlineSeconds&lt;/code>: Time in seconds before an outstanding message is considered unacknowledged and is re-sent. Configurable in your Google Cloud Pubsub subscription. See the docs here`: &lt;a href="https://cloud.google.com/pubsub/docs/subscriber">https://cloud.google.com/pubsub/docs/subscriber&lt;/a>&lt;/li>
&lt;li>&lt;code>messageFormat&lt;/code>: One of &amp;lsquo;GCB&amp;rsquo;, &amp;lsquo;GCS&amp;rsquo;, &amp;lsquo;GCR&amp;rsquo;, or &amp;lsquo;CUSTOM&amp;rsquo;. This can be used to help Spinnaker translate the contents of the Pub/Sub message into Spinnaker artifacts.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;code>publishers&lt;/code>:
&lt;ul>
&lt;li>&lt;code>name&lt;/code>: name of publisher
&lt;ul>
&lt;li>&lt;code>project&lt;/code>:&lt;/li>
&lt;li>&lt;code>topicName&lt;/code>:&lt;/li>
&lt;li>&lt;code>jsonPath&lt;/code>: File needs to be present on the machine running Spinnaker. Supports encrypted file.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h2 id="kustomize-patch-examples">Kustomize patch examples&lt;/h2>
&lt;p>You can see examples in the &lt;code>spinnaker-kustomize-patches&lt;/code> repo&amp;rsquo;s &lt;a href="https://github.com/armory/spinnaker-kustomize-patches/tree/master/accounts/pubsub">&lt;code>pubsub&lt;/code> folder&lt;/a>.&lt;/p></description></item><item><title>Continuous-Deployment: Repository Config</title><link>/continuous-deployment/installation/armory-operator/op-manifest-reference/repository/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/continuous-deployment/installation/armory-operator/op-manifest-reference/repository/</guid><description>
&lt;h2 id="specspinnakerconfigconfigrepository">spec.spinnakerConfig.config.repository&lt;/h2>
&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">repository&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">artifactory&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">enabled&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">searches&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">name&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">baseUrl&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">permissions&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">READ&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">WRITE&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">repo&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">groupId&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">repoType&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">username&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">password&lt;/span>:
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="artifactory">Artifactory&lt;/h2>
&lt;ul>
&lt;li>&lt;code>enabled&lt;/code>: true or false.&lt;/li>
&lt;li>&lt;code>searches&lt;/code>:
&lt;ul>
&lt;li>
&lt;ul>
&lt;li>&lt;code>name&lt;/code>: The name of the account&lt;/li>
&lt;li>&lt;code>baseUrl&lt;/code>: The base url your artifactory search is reachable at.&lt;/li>
&lt;li>&lt;code>permissions&lt;/code>:
&lt;ul>
&lt;li>READ: [] A user must have at least one of these roles in order to view this account’s cloud resources.&lt;/li>
&lt;li>WRITE: [] A user must have at least one of these roles in order to make changes to this account’s cloud resources.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;code>repo&lt;/code>: The repo in your artifactory to be searched.&lt;/li>
&lt;li>&lt;code>groupId&lt;/code>: The group id in your artifactory to be searched.&lt;/li>
&lt;li>&lt;code>repoType&lt;/code>: The package type of repo in your artifactory to be searched: maven (default).&lt;/li>
&lt;li>&lt;code>username&lt;/code>: The username of the artifactory user to authenticate as.&lt;/li>
&lt;li>&lt;code>password&lt;/code>: The password of the artifactory user to authenticate as. Supports encrypted value.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul></description></item><item><title>Continuous-Deployment: Security Config</title><link>/continuous-deployment/installation/armory-operator/op-manifest-reference/security/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/continuous-deployment/installation/armory-operator/op-manifest-reference/security/</guid><description>
&lt;h2 id="specspinnakerconfigconfigsecurity">spec.spinnakerConfig.config.security&lt;/h2>
&lt;p>Configure Spinnaker&amp;rsquo;s security. This includes external SSL, authentication mechanisms, and authorization policies.&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">security&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">apiSecurity&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">uiSecurity&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">authn&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">authz&lt;/span>:
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>&lt;code>apiSecurity&lt;/code>&lt;/li>
&lt;li>&lt;code>uiSecurity&lt;/code>&lt;/li>
&lt;li>&lt;code>authn&lt;/code>&lt;/li>
&lt;li>&lt;code>authz&lt;/code>&lt;/li>
&lt;/ul>
&lt;h2 id="api">API&lt;/h2>
&lt;p>&lt;strong>spec.spinnakerConfig.config.security.apiSecurity&lt;/strong>&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">apiSecurity&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">ssl&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">enabled&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">keyAlias&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">keyStore&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">keyStoreType&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">keyStorePassword&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">trustStore&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">trustStoreType&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">trustStorePassword&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">clientAuth&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">overrideBaseUrl&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">corsAccessPattern&lt;/span>:
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>&lt;code>ssl&lt;/code>:&lt;/li>
&lt;li>&lt;code>overrideBaseUrl&lt;/code>: If you are accessing the API server remotely, provide the full base URL (including protocol) of whatever proxy or load balancer is fronting the API requests.&lt;/li>
&lt;li>&lt;code>corsAccessPattern&lt;/code>: &lt;code>^.*$&lt;/code> If you have authentication enabled, are accessing Spinnaker remotely, and are logging in from sources other than the UI, provide a regex matching all URLs authentication redirects may come from.&lt;/li>
&lt;/ul>
&lt;h3 id="ssl-parameters">SSL parameters&lt;/h3>
&lt;ul>
&lt;li>&lt;code>enabled&lt;/code>: true or false.&lt;/li>
&lt;li>&lt;code>keyAlias&lt;/code>: Name of your keystore entry as generated with your keytool.&lt;/li>
&lt;li>&lt;code>keyStore&lt;/code>: Path to the keystore holding your security certificates. File needs to be present on the machine running Spinnaker. Supports encrypted file.&lt;/li>
&lt;li>&lt;code>keyStoreType&lt;/code>: The type of your keystore. Examples include JKS, and PKCS12.&lt;/li>
&lt;li>&lt;code>keyStorePassword&lt;/code>: The password to unlock your keystore. Due to a limitation in Tomcat, this must match your key&amp;rsquo;s password in the keystore. Supports encrypted value.&lt;/li>
&lt;li>&lt;code>trustStore&lt;/code>: Path to the truststore holding your trusted certificates. File needs to be present on the machine running Spinnaker. Supports encrypted file.&lt;/li>
&lt;li>&lt;code>trustStoreType&lt;/code>: The type of your truststore. Examples include JKS, and PKCS12.&lt;/li>
&lt;li>&lt;code>trustStorePassword&lt;/code>: The password to unlock your truststore. Supports encrypted value.&lt;/li>
&lt;li>&lt;code>clientAuth&lt;/code>: Declare &lt;code>WANT&lt;/code> when client auth is wanted but not mandatory or &lt;code>NEED&lt;/code> when client auth is mandatory.&lt;/li>
&lt;/ul>
&lt;h2 id="authentication">Authentication&lt;/h2>
&lt;p>&lt;strong>spec.spinnakerConfig.config.security.authn&lt;/strong>&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">authn&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">oauth2&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">saml&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">ldap&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">x509&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">iap&lt;/span>:
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>&lt;code>enabled&lt;/code>: true or false.&lt;/li>
&lt;li>&lt;code>oauth2&lt;/code>:&lt;/li>
&lt;li>&lt;code>saml&lt;/code>:&lt;/li>
&lt;li>&lt;code>ldap&lt;/code>:&lt;/li>
&lt;li>&lt;code>x509&lt;/code>:&lt;/li>
&lt;li>&lt;code>iap&lt;/code>&lt;/li>
&lt;/ul>
&lt;h3 id="oauth2">OAUTH2&lt;/h3>
&lt;p>&lt;strong>spec.spinnakerConfig.config.security.authn.oauth2&lt;/strong>&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">oauth2&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">enabled&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">client&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">clientId&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">clientSecret&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">accessTokenUri&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">userAuthorizationUri&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">clientAuthenticationScheme&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">scope&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">preEstablishedRedirectUri&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">useCurrentUri&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">userInfoRequirements&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">resource&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">userInfoUri&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">userInfoMapping&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">email&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">firstName&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">lastName&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">username&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">provider&lt;/span>:
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>&lt;code>enabled&lt;/code>: true or false.&lt;/li>
&lt;li>&lt;code>client&lt;/code>:
&lt;ul>
&lt;li>&lt;code>clientId&lt;/code>: The OAuth client ID you have configured with your OAuth provider.&lt;/li>
&lt;li>&lt;code>clientSecret&lt;/code>: The OAuth client secret you have configured with your OAuth provider. Supports encrypted value.&lt;/li>
&lt;li>&lt;code>accessTokenUri&lt;/code>: The access token uri for your OAuth provider.&lt;/li>
&lt;li>&lt;code>userAuthorizationUri&lt;/code>: The user authorization uri for your OAuth provider.&lt;/li>
&lt;li>&lt;code>clientAuthenticationScheme&lt;/code>: The client authentication scheme for your OAuth provider.&lt;/li>
&lt;li>&lt;code>scope&lt;/code>: The scope for your OAuth provider, e.g. &lt;code>user:email&lt;/code>&lt;/li>
&lt;li>&lt;code>preEstablishedRedirectUri&lt;/code>: The externally accessible URL for Gate. For use with load balancers that do any kind of address manipulation for Gate traffic, such as an SSL terminating load balancer.&lt;/li>
&lt;li>&lt;code>useCurrentUri&lt;/code>: false&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;code>userInfoRequirements&lt;/code>: {} The map of requirements the userInfo request must have. This is used to restrict user login to specific domains or having a specific attribute. Use equal signs between key and value, and additional key/value pairs need to repeat the flag. Example: &amp;lsquo;&amp;ndash;user-info-requirements foo=bar &amp;ndash;userInfoRequirements baz=qux&amp;rsquo;.&lt;/li>
&lt;li>&lt;code>resource&lt;/code>:
&lt;ul>
&lt;li>&lt;code>userInfoUri&lt;/code>: The user info uri for your OAuth provider.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;code>userInfoMapping&lt;/code>:
&lt;ul>
&lt;li>&lt;code>email&lt;/code>: The email field returned from your OAuth provider.&lt;/li>
&lt;li>&lt;code>firstName&lt;/code>: The first name field returned from your OAuth provider.&lt;/li>
&lt;li>&lt;code>lastName&lt;/code>: The last name field returned from your OAuth provider.&lt;/li>
&lt;li>&lt;code>username&lt;/code>: The username field returned from your OAuth provider.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;code>provider&lt;/code>: One of &lt;code>azure&lt;/code>, &lt;code>github&lt;/code>, &lt;code>oracle&lt;/code>, &lt;code>other&lt;/code>, &lt;code>google&lt;/code>&lt;/li>
&lt;/ul>
&lt;h3 id="saml">SAML&lt;/h3>
&lt;p>&lt;strong>spec.spinnakerConfig.config.security.authn.saml&lt;/strong>&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">saml&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">enabled&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">metadataLocal&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">metadataRemote&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">issuerId&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">keyStore&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">keyStorePassword&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">keyStoreAliasName&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">serviceAddress&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">userAttributeMapping&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">firstName&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">lastName&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">roles&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">lastName&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">username&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">email&lt;/span>:
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>&lt;code>enabled&lt;/code>: true or false.&lt;/li>
&lt;li>&lt;code>metadataLocal&lt;/code>: The address to your identity provider&amp;rsquo;s metadata XML file. File needs to be present on the machine running Spinnaker. Supports encrypted file.&lt;/li>
&lt;li>&lt;code>metadataRemote&lt;/code>: The address to your identity provider&amp;rsquo;s metadata XML file. This is a URL.&lt;/li>
&lt;li>&lt;code>issuerId&lt;/code>: The identity of the Spinnaker application registered with the SAML provider.&lt;/li>
&lt;li>&lt;code>keyStore&lt;/code>: Path to the keystore that contains this server&amp;rsquo;s private key. This key is used to cryptographically sign SAML AuthNRequest objects. File needs to be present on the machine running Spinnaker. Supports encrypted file.&lt;/li>
&lt;li>&lt;code>keyStorePassword&lt;/code>: The password used to access the file specified in &amp;ndash;keystore. Supports encrypted value.&lt;/li>
&lt;li>&lt;code>keyStoreAliasName&lt;/code>: The name of the alias under which this server&amp;rsquo;s private key is stored in the &amp;ndash;keystore file.&lt;/li>
&lt;li>&lt;code>serviceAddress&lt;/code>: The address of the Gate server that will be accesible by the SAML identity provider. This should be the full URL, including port, e.g. &lt;a href="https://gate.org.com:8084/">https://gate.org.com:8084/&lt;/a>. If deployed behind a load balancer, this would be the load balancer&amp;rsquo;s address.&lt;/li>
&lt;li>&lt;code>userAttributeMapping&lt;/code>:
&lt;ul>
&lt;li>&lt;code>firstName&lt;/code>: The first name field returned from your SAML provider.&lt;/li>
&lt;li>&lt;code>lastName&lt;/code>: The last name field returned from your SAML provider.&lt;/li>
&lt;li>&lt;code>roles&lt;/code>: The roles field returned from your SAML provider.&lt;/li>
&lt;li>&lt;code>lastName&lt;/code>: The last name field returned from your SAML provider.&lt;/li>
&lt;li>&lt;code>username&lt;/code>: aThe username field returned from your SAML provider.&lt;/li>
&lt;li>&lt;code>email&lt;/code>: The email field returned from your SAML provider.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h3 id="ldap">LDAP&lt;/h3>
&lt;p>&lt;strong>spec.spinnakerConfig.config.security.authn.ldap&lt;/strong>&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">ldap&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">enabled&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">url&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">userDnPattern&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">userSearchBase&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">userSearchFilter&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">managerDn&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">managerPassword&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">groupSearchBase&lt;/span>:
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>&lt;code>enabled&lt;/code>: true or false.&lt;/li>
&lt;li>&lt;code>url&lt;/code>: ldap:// or ldaps:// url of the LDAP server&lt;/li>
&lt;li>&lt;code>userDnPattern&lt;/code>: The pattern for finding a user&amp;rsquo;s DN using simple pattern matching. For example, if your LDAP server has the URL ldap://mysite.com/dc=spinnaker,dc=org, and you have the pattern &amp;lsquo;uid={0},ou=members&amp;rsquo;, &amp;lsquo;me&amp;rsquo; will map to a DN uid=me,ou=members,dc=spinnaker,dc=org. If no match is found, will try to find the user using user-search-filter, if set.&lt;/li>
&lt;li>&lt;code>userSearchBase&lt;/code>: The part of the directory tree under which user searches should be performed. If user-search-base isn&amp;rsquo;t supplied, the search will be performed from the root.&lt;/li>
&lt;li>&lt;code>userSearchFilter&lt;/code>: The filter to use when searching for a user&amp;rsquo;s DN. Will search either from user-search-base (if specified) or root for entires matching the filter, then attempt to bind as that user with the login password. For example, the filter &amp;lsquo;uid={0}&amp;rsquo; would apply to any user where uid matched the user&amp;rsquo;s login name. If &amp;ndash;user-dn-pattern is also specified, will attempt to find a match using the specified pattern first, before searching with the specified search filter if no match is found from the pattern.&lt;/li>
&lt;li>&lt;code>managerDn&lt;/code>: An LDAP manager user is required for binding to the LDAP server for the user authentication process. This property refers to the DN of that entry. I.e. this is not the user which will be authenticated when logging into DHIS2, rather the user which binds to the LDAP server in order to do the authentication.&lt;/li>
&lt;li>&lt;code>managerPassword&lt;/code>: The password for the LDAP manager user.&lt;/li>
&lt;li>&lt;code>groupSearchBase&lt;/code>: The part of the directory tree under which group searches should be performed.&lt;/li>
&lt;/ul>
&lt;h3 id="x509">x509&lt;/h3>
&lt;p>&lt;strong>spec.spinnakerConfig.config.security.authn.x509&lt;/strong>&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">x509&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">enabled&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">roleOid&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">subjectPrincipalRegex&lt;/span>:
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>&lt;code>enabled&lt;/code>: true or false.&lt;/li>
&lt;li>&lt;code>roleOid&lt;/code>: The OID that encodes roles that the user specified in the x509 certificate belongs to&lt;/li>
&lt;li>&lt;code>subjectPrincipalRegex&lt;/code>: &lt;code>EMAILADDRESS=(.*?)(?:,|$)&lt;/code> The regex used to parse the subject principal name embedded in the x509 certificate if necessary&lt;/li>
&lt;/ul>
&lt;h3 id="iap">IAP&lt;/h3>
&lt;p>&lt;strong>spec.spinnakerConfig.config.security.authn.iap&lt;/strong>&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">iap&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">enabled&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">jwtHeader&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">issuerId&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">audience&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">iapVerifyKeyUrl&lt;/span>:
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>&lt;code>enabled&lt;/code>: true or false.&lt;/li>
&lt;li>&lt;code>jwtHeader&lt;/code>: The HTTP request header that contains the JWT token.&lt;/li>
&lt;li>&lt;code>issuerId&lt;/code>: The Issuer from the ID token payload.&lt;/li>
&lt;li>&lt;code>audience&lt;/code>: The Audience from the ID token payload. You can retrieve this field from the &lt;a href="https://cloud.google.com/iap/docs/signed-headers-howto#verify_the_id_token_header">IAP console&lt;/a>.&lt;/li>
&lt;li>&lt;code>iapVerifyKeyUrl&lt;/code>: The URL containing the Cloud IAP public keys in JWK format.&lt;/li>
&lt;/ul>
&lt;h2 id="authorization">Authorization&lt;/h2>
&lt;p>&lt;strong>spec.spinnakerConfig.config.security.authz&lt;/strong>&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">authz&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">enabled&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">groupMembership&lt;/span>:
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>&lt;code>enabled&lt;/code>: true or false.&lt;/li>
&lt;li>&lt;code>groupMembership&lt;/code>:&lt;/li>
&lt;/ul>
&lt;h3 id="group-membership">Group Membership&lt;/h3>
&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">groupMembership&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">service&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">google&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">roleProviderType&lt;/span>: GOOGLE
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">credentialPath&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">adminUsername&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">domain&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">github&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">roleProviderType&lt;/span>: GITHUB
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">baseUrl&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">accessToken&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">organization&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">file&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">roleProviderType&lt;/span>: FILE
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">path&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">ldap&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">roleProviderType&lt;/span>: LDAP
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">url&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">managerDn&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">managerPassword&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">userDnPattern&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">userSearchBase&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">groupSearchBase&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">userSearchFilter&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">groupSearchFilter&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">groupRoleAttributes&lt;/span>:
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>&lt;code>service&lt;/code>: One of &lt;code>EXTERNAL&lt;/code>, &lt;code>FILE&lt;/code>, &lt;code>GOOGLE&lt;/code>, &lt;code>GITHUB&lt;/code>, &lt;code>LDAP&lt;/code>&lt;/li>
&lt;li>&lt;code>google&lt;/code>:
&lt;ul>
&lt;li>&lt;code>roleProviderType&lt;/code>: &lt;code>GOOGLE&lt;/code>&lt;/li>
&lt;li>&lt;code>credentialPath&lt;/code>: A path to a valid json service account that can authenticate against the Google role provider. File needs to be present on the machine running Spinnaker. Supports encrypted file.&lt;/li>
&lt;li>&lt;code>adminUsername&lt;/code>: Your role provider&amp;rsquo;s admin username e.g. &lt;a href="mailto:admin@myorg.net">admin@myorg.net&lt;/a>&lt;/li>
&lt;li>&lt;code>domain&lt;/code>: The domain your role provider is configured for e.g. myorg.net.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;code>github&lt;/code>:
&lt;ul>
&lt;li>&lt;code>roleProviderType&lt;/code>: &lt;code>GITHUB&lt;/code>&lt;/li>
&lt;li>&lt;code>baseUrl&lt;/code>: Used if using GitHub enterprise some other non github.com GitHub installation.&lt;/li>
&lt;li>&lt;code>accessToken&lt;/code>: A personal access token of an account with access to your organization&amp;rsquo;s GitHub Teams structure. Supports encrypted value.&lt;/li>
&lt;li>&lt;code>organization&lt;/code>: The GitHub organization under which to query for GitHub Teams.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;code>file&lt;/code>:
&lt;ul>
&lt;li>&lt;code>roleProviderType&lt;/code>: &lt;code>FILE&lt;/code>&lt;/li>
&lt;li>&lt;code>path&lt;/code>: A path to a file describing the roles of each user.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;code>ldap&lt;/code>:
&lt;ul>
&lt;li>&lt;code>roleProviderType&lt;/code>: &lt;code>LDAP&lt;/code>&lt;/li>
&lt;li>&lt;code>url&lt;/code>: ldap:// or ldaps:// URL of the LDAP server&lt;/li>
&lt;li>&lt;code>managerDn&lt;/code>: The manager user&amp;rsquo;s distinguished name (principal) to use for querying ldap groups.&lt;/li>
&lt;li>&lt;code>managerPassword&lt;/code>: The manager user&amp;rsquo;s password to use for querying ldap groups. Supports encrypted value.&lt;/li>
&lt;li>&lt;code>userDnPattern&lt;/code>: The pattern for finding a user&amp;rsquo;s DN using simple pattern matching. For example, if your LDAP server has the URL ldap://mysite.com/dc=spinnaker,dc=org, and you have the pattern &amp;lsquo;uid={0},ou=members&amp;rsquo;, &amp;lsquo;me&amp;rsquo; will map to a DN uid=me,ou=members,dc=spinnaker,dc=org. If no match is found, will try to find the user using &amp;ndash;user-search-filter, if set.&lt;/li>
&lt;li>&lt;code>userSearchBase&lt;/code>: The part of the directory tree under which user searches should be performed. If &amp;ndash;user-search-base isn&amp;rsquo;t supplied, the search will be performed from the root.&lt;/li>
&lt;li>&lt;code>groupSearchBase&lt;/code>: The part of the directory tree under which group searches should be performed.&lt;/li>
&lt;li>&lt;code>userSearchFilter&lt;/code>: The filter to use when searching for a user&amp;rsquo;s DN. Will search either from &amp;ndash;user-search-base (if specified) or root for entires matching the filter.&lt;/li>
&lt;li>&lt;code>groupSearchFilter&lt;/code>: The filter which is used to search for group membership. The default is &lt;code>uniqueMember={0}&lt;/code>, corresponding to the groupOfUniqueMembers LDAP class. In this case, the substituted parameter is the full distinguished name of the user. The parameter &amp;lsquo;{1}&amp;rsquo; can be used if you want to filter on the login name.&lt;/li>
&lt;li>&lt;code>groupRoleAttributes&lt;/code>: The attribute which contains the name of the authority defined by the group entry. Defaults to &lt;code>cn&lt;/code>.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h2 id="ui">UI&lt;/h2>
&lt;p>&lt;strong>spec.spinnakerConfig.config.security.uiSecurity&lt;/strong>&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">uiSecurity&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">ssl&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">overrideBaseUrl&lt;/span>:
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>&lt;code>overrideBaseUrl&lt;/code>: If you are accessing the UI server remotely, provide the full base URL (including protocol) of whatever proxy or load balancer is fronting the UI requests.&lt;/li>
&lt;li>&lt;code>ssl&lt;/code>:&lt;/li>
&lt;/ul>
&lt;h3 id="ssl">SSL&lt;/h3>
&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">uiSecurity&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">ssl&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">enabled&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">sslCertificateFile&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">sslCertificateKeyFile&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">sslCertificatePassphrase&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">sslCACertificateFile&lt;/span>:
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>&lt;code>enabled&lt;/code>: true or false.&lt;/li>
&lt;li>&lt;code>sslCertificateFile&lt;/code>: Path to your .crt file. File needs to be present on the machine running Spinnaker. Supports encrypted file.&lt;/li>
&lt;li>&lt;code>sslCertificateKeyFile&lt;/code>: Path to your .key file. File needs to be present on the machine running Spinnaker. Supports encrypted file.&lt;/li>
&lt;li>&lt;code>sslCertificatePassphrase&lt;/code>: The passphrase needed to unlock your SSL certificate. This will be provided to Apache on startup. Supports encrypted value.&lt;/li>
&lt;li>&lt;code>sslCACertificateFile&lt;/code>: Path to the .crt file for the CA that issued your SSL certificate. This is only needed for localgitdeployments that serve the UI using webpack dev server. File needs to be present on the machine running Spinnaker. Supports encrypted file.&lt;/li>
&lt;/ul>
&lt;h2 id="kustomize-patch-examples">Kustomize patch examples&lt;/h2>
&lt;p>You can see examples in the &lt;code>spinnaker-kustomize-patches&lt;/code> repo&amp;rsquo;s &lt;a href="https://github.com/armory/spinnaker-kustomize-patches/tree/master/security">&lt;code>security&lt;/code> folder&lt;/a>.&lt;/p></description></item><item><title>Continuous-Deployment: Stats Config</title><link>/continuous-deployment/installation/armory-operator/op-manifest-reference/stats/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/continuous-deployment/installation/armory-operator/op-manifest-reference/stats/</guid><description>
&lt;h2 id="specspinnakerconfigconfigstats">spec.spinnakerConfig.config.stats&lt;/h2>
&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">stats&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">enabled&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">endpoint&lt;/span>: &lt;span style="color:#6272a4"># Set the endpoint for stats metrics.&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>&lt;code>enabled&lt;/code>: true or false.&lt;/li>
&lt;li>&lt;code>endpoint&lt;/code>: Set the endpoint for stats metrics, such as &lt;code>https://stats.spinnaker.io&lt;/code>&lt;/li>
&lt;/ul></description></item><item><title>Continuous-Deployment: Webhook Config</title><link>/continuous-deployment/installation/armory-operator/op-manifest-reference/op-webhook/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/continuous-deployment/installation/armory-operator/op-manifest-reference/op-webhook/</guid><description>
&lt;h2 id="specspinnakerconfigconfigwebhook">spec.spinnakerConfig.config.webhook&lt;/h2>
&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">webhook&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">trust&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">enabled&lt;/span>: &lt;span style="color:#ff79c6">false&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">trustStore&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">trustStorePassword&lt;/span>:
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>&lt;code>trust&lt;/code>:
&lt;ul>
&lt;li>&lt;code>enabled&lt;/code>: false&lt;/li>
&lt;li>&lt;code>trustStore&lt;/code>: The path to a key store in JKS format containing certification authorities that should be trusted by webhook stages. File needs to be present on the machine running Spinnaker.&lt;/li>
&lt;li>&lt;code>trustStorePassword&lt;/code>: The password for the supplied trustStore.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul></description></item><item><title>Continuous-Deployment: Install Spinnaker on Lightweight Kubernetes using Minnaker</title><link>/continuous-deployment/installation/minnaker/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/continuous-deployment/installation/minnaker/</guid><description>
&lt;h2 id="install-spinnaker-in-10-minutes-using-minnaker">Install Spinnaker in 10 minutes using Minnaker&lt;/h2>
&lt;p>Armory Minnaker is an easy to use installation script that leverages the power of &lt;strong>Kubernetes&lt;/strong> with the simplicity of a &lt;em>Virtual Machine&lt;/em>. Minnaker makes it easy to install Spinnaker and lets you scale your deployment into a medium to large deployment down the road.&lt;/p>
&lt;p>The Kubernetes environment that gets installed on your behalf is based on &lt;a href="https://k3s.io/">Rancher&amp;rsquo;s K3s&lt;/a>. You do not need to know how to set up Kubernetes. Minnaker takes care of the hard parts for you, allowing you to get Spinnaker up and running in under 10 minutes.&lt;/p>
&lt;p>Watch &lt;em>Spinnaker in 10 minutes or less with Project Minnaker&lt;/em> for a demo of using Minnaker to install Spinnaker on cloud platforms as well as VMWare Fusion running locally.&lt;/p>
&lt;iframe width="560" height="315" src="https://www.youtube.com/embed/jg8vJEzcuAA" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen>&lt;/iframe>
&lt;h3 id="prerequisites-for-running-minnaker">Prerequisites for running Minnaker&lt;/h3>
&lt;p>Your VM should have 4 vCPUs, 16G of memory and 30G of HDD space.&lt;/p>
&lt;h3 id="getting-started">Getting started&lt;/h3>
&lt;p>Check out the &lt;a href="https://github.com/armory/minnaker">GitHub project&lt;/a> for more information. After you install Minnaker, use the &lt;a href="/continuous-deployment/installation/guide/quickstart/armory-spinnaker-quickstart-1/">AWS Quick Start&lt;/a> to learn how to configure Armory to deploy to AWS.&lt;/p></description></item><item><title>Continuous-Deployment: Configure Armory Continuous Deployment Using Kustomize</title><link>/continuous-deployment/installation/armory-operator/op-config-kustomize/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/continuous-deployment/installation/armory-operator/op-config-kustomize/</guid><description>
&lt;blockquote>
&lt;p>This guide is for both the Armory Operator and the Spinnaker Operator. Armory Continuous Deployment and Spinnaker configuration is the same except for features only in Armory Continuous Deployment. Those features are marked &lt;img src="/images/proprietary.svg" alt="Proprietary">.&lt;/p>
&lt;/blockquote>
&lt;h2 id="why-use-kustomize-patches-for-spinnaker-configuration">Why use Kustomize patches for Spinnaker configuration&lt;/h2>
&lt;p>Even though you can configure Armory Continuous Deployment or Spinnaker in a single manifest file, the advantage of using &lt;a href="https://kustomize.io/">Kustomize&lt;/a> patch files is readability, consistency across environments, and maintainability.&lt;/p>
&lt;h2 id="how-kustomize-works">How Kustomize works&lt;/h2>
&lt;p>Kustomize uses patch files to build a deployment file by overwriting sections of the &lt;code>spinnakerservice.yml&lt;/code> manifest file. You declare your patch files in a &lt;code>kustomization.yml&lt;/code> file, which &lt;code>kubectl&lt;/code> and Kustomize and use to build the Armory Continuous Deployment or Spinnaker manifest file.&lt;/p>
&lt;p>You can put each manifest config section in its own file. For example, if you create a &lt;code>profiles-patch.yml&lt;/code> patch with configuration for various services, you are telling Kustomize to overwrite the &lt;code>profiles&lt;/code> section of the &lt;code>spinnakerservice.yml&lt;/code> manifest with the contents of &lt;code>profiles-patch.yml&lt;/code>. Kustomize is flexible, though, so you could instead create a separate patch file for each service (&lt;code>profiles-clouddriver-patch.yml&lt;/code>, &lt;code>profiles-gate-patch.yml&lt;/code>, &lt;code>profiles-deck-patch.yml&lt;/code>, etc.), and then declare those patches in the &lt;code>kustomization.yml&lt;/code> file.&lt;/p>
&lt;p>Kustomize is part of &lt;code>kubectl&lt;/code>, so you do not need to install Kustomize locally to build and verify your manifest file. You can run &lt;code>kubectl kustomize &amp;lt;path-to-kustomization.yml&amp;gt;&lt;/code>. This prints out the contents of the manifest file that Kustomize builds using your &lt;code>kustomization.yml&lt;/code> file.&lt;/p>
&lt;blockquote>
&lt;p>&lt;code>kubectl&lt;/code> versions up to and including v1.20 come bundled with Kustomize v2.0.3. &lt;code>kubectl&lt;/code> 1.21 comes bundled with Kustomize v4.0.5. Using Kustomize patches has been tested with &lt;code>kubectl&lt;/code> v1.19.x. and standalone Kustomize v2 and v3. You may see a &lt;code>panic&lt;/code> error if you use the &lt;code>spinnaker-kustomize-patches&lt;/code> repo with Kustomize v4.0+ or &lt;code>kubectl&lt;/code> v1.21+.&lt;/p>
&lt;/blockquote>
&lt;h2 id="kustomize-resources">Kustomize resources&lt;/h2>
&lt;p>You should familiarize yourself with Kustomize before you create patch files to configure Armory Continuous Deployment.&lt;/p>
&lt;ul>
&lt;li>Kustomize &lt;a href="https://kubectl.docs.kubernetes.io/references/kustomize/glossary/">Glossary&lt;/a>&lt;/li>
&lt;li>Kustomize &lt;a href="https://kubectl.docs.kubernetes.io/guides/introduction/kustomize/">introduction&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://kubectl.docs.kubernetes.io/references/kustomize/kustomization/">Kustomization file overview&lt;/a>&lt;/li>
&lt;/ul>
&lt;h2 id="kubernetes-requirements">Kubernetes requirements&lt;/h2>
&lt;ul>
&lt;li>You are familiar with &lt;a href="https://kubernetes.io/docs/concepts/extend-kubernetes/operator/">Kubernetes Operators&lt;/a>, which use custom resources to manage applications and their components.&lt;/li>
&lt;li>You understand the concept of &lt;a href="https://kubernetes.io/docs/concepts/cluster-administration/manage-deployment/">managing Kubernetes resources using manifests&lt;/a>.&lt;/li>
&lt;li>You have reviewed and met the Armory Continuous Deployment &lt;a href="/continuous-deployment/installation/system-requirements/">system requirements&lt;/a>.&lt;/li>
&lt;/ul>
&lt;h2 id="spinnaker-kustomize-patches-repo">Spinnaker Kustomize patches 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="configure-armory-continuous-deployment">Configure Armory Continuous Deployment&lt;/h2>
&lt;p>Follow these steps to configure Armory Continuous Deployment:&lt;/p>
&lt;ol>
&lt;li>&lt;a href="#choose-a-kustomization-file">Choose a &lt;code>kustomization.yml&lt;/code> file&lt;/a>.&lt;/li>
&lt;li>(Optional) If you are deploying open source Spinnaker, &lt;a href="#change-the-apiversion">change the &lt;code>apiVersion&lt;/code> in each patch file&lt;/a>.&lt;/li>
&lt;li>&lt;a href="#set-the-spinnaker-version">Set the Armory Continuous Deployment (or Spinnaker) version&lt;/a>.&lt;/li>
&lt;li>&lt;a href="#verify-resources">Verify the content of each resource file&lt;/a>.&lt;/li>
&lt;li>&lt;a href="#verify-patches">Verify the configuration contents of each patch file&lt;/a>.&lt;/li>
&lt;/ol>
&lt;h3 id="choose-a-kustomization-file">Choose a &lt;code>kustomization&lt;/code> file&lt;/h3>
&lt;p>Before you begin configuring Armory Continuous Deployment, you need to choose or create a
&lt;code>kustomization.yml&lt;/code> file. The &lt;code>kustomization.yml&lt;/code> specifies the namespace for
Armory Continuous Deployment, a list of Kubernetes resources, and a list of patch files to
merge into the &lt;code>spinnakerservice.yml&lt;/code> manifest file. For example, the
&lt;code>recipes/kustomization-minimum.yml&lt;/code> file contains the following:&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">#-----------------------------------------------------------------------------------------------------------------------&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6272a4"># Minimum Starting Point recipe&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6272a4">#&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6272a4"># Self contained Spinnaker installation with no external dependencies and no additional configuration needed.&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6272a4"># This is intended as a starting point for any kubernetes cluster.&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6272a4"># Not for production use.&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6272a4">#&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6272a4"># Features:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6272a4"># - One Kubernetes account (Spinnaker&amp;#39;s own cluster) for deployment targets&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6272a4"># - Spinnaker authentication disabled&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6272a4"># - Self hosted minio as a persistent storage&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6272a4"># - Self hosted redis backend for caching and temporal storage of services&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6272a4">#-----------------------------------------------------------------------------------------------------------------------&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">apiVersion&lt;/span>: kustomize.config.k8s.io/v1beta1
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">kind&lt;/span>: Kustomization
&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">namespace&lt;/span>: spinnaker
&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">components&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - core/base
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - core/persistence/in-cluster
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - targets/kubernetes/default
&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">patchesStrategicMerge&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - core/patches/version.yml
&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">transformers&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - utilities/unique-service-account.yml
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;ul>
&lt;li>
&lt;p>The &lt;code>components&lt;/code>
&lt;a href="https://kubectl.docs.kubernetes.io/guides/config_management/components/">section&lt;/a>
contains paths to directories that define collections of Kubernetes
resources, such as: in-cluster Spinnaker persistence with Minio, Kubernetes
Service Account and patches to enable the cluster in Spinnaker.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>The &lt;code>patchesStrategicMerge&lt;/code>
&lt;a href="https://kubectl.docs.kubernetes.io/references/kustomize/kustomization/patchesstrategicmerge/">section&lt;/a>
contains links to files that contain partial resource
definitions. Kustomize uses these patch files to overwrite sections of
components or resources, such as the &lt;code>SpinnakerService&lt;/code> definition.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>&lt;code>spinnaker-kustomize-patches/kustomization.yml&lt;/code> is a symlink that points to
&lt;code>spinnaker-kustomize-patches/recipes/kustomization-all.yml&lt;/code>. There are
multiple &lt;code>kustomization&lt;/code> examples in the &lt;code>recipes&lt;/code> directory. Choose the one
that most closely resembles your use case and link to it. Alternately, you can
delete the symlink, move your desired Kustomization file from &lt;code>recipes&lt;/code> to the
top-level directory, and rename the file to &lt;code>kustomization.yml&lt;/code>.&lt;/p>
&lt;div class="alert alert-warning" role="alert">
&lt;h4 class="alert-heading">Warning&lt;/h4>
If you are in an air-gapped environment and are using MinIO to host the Armory
Continuous Deployment BOM, remove &lt;code>core/persistence/in-cluster/minio.yml&lt;/code> from the list of resources to
prevent the accidental deletion of the bucket when calling &lt;code>kubectl delete -k .&lt;/code>.
&lt;/div>
&lt;h3 id="choose-open-source-spinnaker">Choose Open Source Spinnaker&lt;/h3>
&lt;blockquote>
&lt;p>This step is required only if you are deploying open source Spinnaker.&lt;/p>
&lt;/blockquote>
&lt;p>Add the following patch 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">patches&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">target&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">kind&lt;/span>: SpinnakerService
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">path&lt;/span>: utilities/switch-to-oss.yml
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="set-the-armory-continuous-deployment-version">Set the Armory Continuous Deployment version&lt;/h3>
&lt;p>In &lt;code>spinnaker-kustomize-patches/core/patches/version.yml&lt;/code>, set the &lt;a href="/continuous-deployment/release-notes/rn-armory-spinnaker/">Armory
CD version&lt;/a> or &lt;a href="https://spinnaker.io/community/releases/versions/">Spinnaker
version&lt;/a> that you want to
deploy, such as &lt;code>2.34&lt;/code> (Armory Continuous Deployment) or
&lt;code>1.25.3&lt;/code> (Spinnaker).&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;/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">kind&lt;/span>: SpinnakerService
&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
&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">spinnakerConfig&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:#ff79c6">version&lt;/span>: &lt;span style="color:#bd93f9">2.34&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>
&lt;h3 id="verify-resources">Verify resources&lt;/h3>
&lt;p>Read each file linked to from your chosen &lt;code>kustomization.yml&lt;/code> file section to
make sure that the Kubernetes resource as configured works with your
environment.&lt;/p>
&lt;h3 id="verify-patches">Verify patches&lt;/h3>
&lt;p>Read each file linked to in the &lt;code>patchesStrategicMerge&lt;/code> section. You may need to update each patch configuration with values specific to you and your environment. For example, the &lt;code>kustomization-quickstart.yml&lt;/code> file described in the &lt;a href="#choose-a-kustomization-file">Choose a &lt;code>kustomization&lt;/code> file&lt;/a> section links to &lt;code>accounts/docker/patch-dockerhub.yml&lt;/code>. You need to update that patch file with your own DockerHub credentials.&lt;/p>
&lt;p>Explore the patches in various folders to see if there are any that you want to use. Remember to list additional patches in the &lt;code>patchesStrategicMerge&lt;/code> section of your &lt;code>kustomization.yml&lt;/code> file.&lt;/p>
&lt;h3 id="secrets">Secrets&lt;/h3>
&lt;p>If you want to store Spinnaker secrets in Kubernetes, we recommend using
&lt;a href="https://kubernetes.io/docs/tasks/configmap-secret/managing-secret-using-kustomize/">Kustomize
generators&lt;/a>.&lt;/p>
&lt;h2 id="deploy-armory-continuous-deployment">Deploy Armory Continuous Deployment&lt;/h2>
&lt;p>Once you have configured your patch files, you can deploy Armory Continuous Deployment.&lt;/p>
&lt;ol>
&lt;li>
&lt;p>Create the &lt;code>spinnaker&lt;/code> namespace:&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 create ns spinnaker
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>If you want to use a different namespace, you must update the &lt;code>namespace&lt;/code> value in your &lt;code>kustomization.yml&lt;/code> file.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>(Optional) Verify the Kustomize build output:&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 kustomize &amp;lt;path-to-kustomization.yml&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>This prints out the contents of the manifest file that Kustomize built based on your &lt;code>kustomization.yml&lt;/code> file.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Apply the manifest:&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>kubectl apply -k &amp;lt;path-to-kustomization.yml&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>Watch the install progress and see the pods being created:&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 -n spinnaker get spinsvc spinnaker -w
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;/ol>
&lt;h2 id="help-resources">Help resources&lt;/h2>
&lt;ul>
&lt;li>Armory Operator and Armory Continuous Deployment: 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;/li>
&lt;li>Spinnaker Operator and Spinnaker: &lt;a href="https://join.slack.com/t/spinnakerteam/shared_invite/zt-7juwxmx0-nQ4Ud4pJcbuPykX3SXwQrg">Spinnaker Slack&lt;/a> &lt;code>#kubernetes-operator&lt;/code> channel.&lt;/li>
&lt;/ul>
&lt;h2 id="whats-next">What&amp;rsquo;s next&lt;/h2>
&lt;ul>
&lt;li>See the &lt;a href="/continuous-deployment/installation/armory-operator/op-manifest-reference/">Manifest Reference&lt;/a> for configuration options by section.&lt;/li>
&lt;li>Learn how to &lt;a href="/continuous-deployment/installation/armory-operator/op-manage-spinnaker/">manage&lt;/a> your Spinnaker instance.&lt;/li>
&lt;li>See the &lt;a href="/continuous-deployment/installation/armory-operator/op-troubleshooting/"}>Errors and Troubleshooting&lt;/a> guide if you encounter issues.&lt;/li>
&lt;/ul></description></item><item><title>Continuous-Deployment: Install Armory Continuous Deployment in Amazon Web Services (AWS)</title><link>/continuous-deployment/installation/guide/install-on-aws/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/continuous-deployment/installation/guide/install-on-aws/</guid><description>
&lt;blockquote>
&lt;p>Armory Continuous Deployment (Armory CD) requires a license. For more information, contact &lt;a href="https://www.armory.io/contact-us/">Armory&lt;/a>.&lt;/p>
&lt;/blockquote>
&lt;h2 id="overview-of-installing-armory-in-aws">Overview of installing Armory in AWS&lt;/h2>
&lt;ul>
&lt;li>A running &lt;a href="https://docs.aws.amazon.com/eks/latest/userguide/what-is-eks.html">AWS EKS&lt;/a> cluster.&lt;/li>
&lt;li>An &lt;a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html">Amazon S3 (Simple Storage Service) bucket&lt;/a>. You can use an existing one or create a new one.&lt;/li>
&lt;li>An NGINX Ingress controller in your EKS cluster.&lt;/li>
&lt;/ul>
&lt;p>This document currently does not fully cover the following (see &lt;a href="#next-steps">Next Steps&lt;/a> for some links to achieve these)&lt;/p>
&lt;ul>
&lt;li>TLS Encryption&lt;/li>
&lt;li>Authentication/Authorization&lt;/li>
&lt;li>Add K8s accounts to deploy to&lt;/li>
&lt;li>Add cloud accounts to deploy to&lt;/li>
&lt;/ul>
&lt;h2 id="aws-resources">AWS Resources&lt;/h2>
&lt;p>Before you install Armory on AWS, it is essential that you familiarize yourself with &lt;a href="/continuous-deployment/cloud-resources/resources-aws/">relevant AWS services&lt;/a>.&lt;/p>
&lt;h2 id="before-you-begin">Before you begin&lt;/h2>
&lt;ul>
&lt;li>You have reviewed and met the Armory Continuous Deployment &lt;a href="/continuous-deployment/installation/system-requirements/">system requirements&lt;/a>.&lt;/li>
&lt;li>You have a running EKS and can access the Kubernetes API. Either your user/role created the EKS cluster or your user/role has been added to the &lt;code>aws-auth&lt;/code> configmap in the EKS cluster. See the &lt;a href="https://docs.aws.amazon.com/eks/latest/userguide/add-user-role.html">AWS documentation&lt;/a> for more details.&lt;/li>
&lt;li>You have access to an S3 bucket or access to create an S3 bucket.&lt;/li>
&lt;li>You have access to an IAM role or user with access to the S3 bucket or can create an IAM role or user with access to the S3 bucket.&lt;/li>
&lt;/ul>
&lt;p>This document is written with the following workflow in mind:&lt;/p>
&lt;ul>
&lt;li>You have a machine (referred to as the &lt;code>workstation machine&lt;/code> in this document) configured to use the &lt;code>aws&lt;/code> CLI tool and a recent version of &lt;code>kubectl&lt;/code> tool&lt;/li>
&lt;li>You have a machine (referred to as the &lt;code>Halyard machine&lt;/code> in this document) with the Docker daemon installed, and can run Docker containers on it&lt;/li>
&lt;li>You can transfer files created on the &lt;code>workstation machine&lt;/code> to the &lt;code>Halyard machine&lt;/code> (to a directory mounted on a running Docker container)&lt;/li>
&lt;li>These two machines can be the same machine&lt;/li>
&lt;/ul>
&lt;p>Furthermore:&lt;/p>
&lt;p>On the &lt;code>Halyard machine&lt;/code>:&lt;/p>
&lt;ul>
&lt;li>
&lt;p>Halyard (the tool used to install and manage Armory) is run in a Docker container on the &lt;code>Halyard machine&lt;/code>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>The Halyard container on the &lt;code>Halyard machine&lt;/code> will be configured with the following volume mounts, which should be persisted or preserved to manage your Armory cluster&lt;/p>
&lt;ul>
&lt;li>&lt;code>.hal&lt;/code> directory (mounted to &lt;code>/home/spinnaker/.hal&lt;/code>) - stores all Halyard Armory configurations in a &lt;code>.hal/config&lt;/code> YAML file and assorted subdirectories&lt;/li>
&lt;li>&lt;code>.secret&lt;/code> directory (mounted to &lt;code>/home/spinnaker/.secret&lt;/code>) stores all external secret keys and files used by Halyard&lt;/li>
&lt;li>&lt;code>resources&lt;/code> directory (mounted to &lt;code>/home/spinnaker/resources&lt;/code>) stores all Kubernetes manifests and other resources that help create Kubernetes resources&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>You will create &lt;code>kubeconfig&lt;/code> files that will be added to the &lt;code>.secret&lt;/code> directory&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>Note: If you are not using the Halyard Docker container, but sure to install &lt;code>kubectl&lt;/code> before you install Halyard. Otherwise you will have to restart the Halyard daemon in order for &lt;code>hal&lt;/code> to find &lt;code>kubectl&lt;/code> in your &lt;code>$PATH&lt;/code>. Execute &lt;code>hal shutdown&lt;/code> and then any &lt;code>hal&lt;/code> command to start the daemon.&lt;/p>
&lt;p>On the &lt;code>workstation machine&lt;/code>:&lt;/p>
&lt;ul>
&lt;li>
&lt;p>If using EKS, you can use the &lt;code>aws&lt;/code> CLI tool to interact with the AWS API and configure/communicate with the following:&lt;/p>
&lt;ul>
&lt;li>EKS clusters (or, alternately, have a EKS cluster already built)&lt;/li>
&lt;li>S3 buckets (or, alternately, have an S3 bucket already built)&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>You have the &lt;code>kubectl&lt;/code> (Kubernetes CLI tool) installed and are able to use it to interact with your Kubernetes cluster&lt;/p>
&lt;/li>
&lt;li>
&lt;p>You have a persistent working directory in which to work in. One option here is &lt;code>~/aws-spinnaker&lt;/code>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>You will create AWS resources, such as service accounts, that will be permanently associated with your Armory cluster&lt;/p>
&lt;/li>
&lt;/ul>
&lt;h2 id="installation-summary">Installation summary&lt;/h2>
&lt;p>In order to install Armory, this document covers the following:&lt;/p>
&lt;ul>
&lt;li>
&lt;p>Generating a &lt;code>kubeconfig&lt;/code> file, which is a Kubernetes credential file that Halyard and Armory will use to communicate with the Kubernetes cluster where Armory will be installed&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Creating an S3 bucket for Armory to store persistent configuration in&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Creating an IAM user that Armory will use to access the S3 bucket&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Running the Halyard daemon in a Docker container&lt;/p>
&lt;ul>
&lt;li>Persistent configuration directories from the workstation/host will be mounted into the container&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>Running the &lt;code>hal&lt;/code> client interactively in the same Docker container, to:&lt;/p>
&lt;ul>
&lt;li>Build out the halconfig YAML file (&lt;code>.hal/config&lt;/code>)&lt;/li>
&lt;li>Configure Armory/Halyard to use &lt;code>kubeconfig&lt;/code> to install Armory&lt;/li>
&lt;li>Configure Armory with the IAM credentials and bucket information&lt;/li>
&lt;li>Turn on other recommended settings (artifacts and http artifact provider)&lt;/li>
&lt;li>Install Armory&lt;/li>
&lt;li>Expose Armory&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h2 id="connect-to-the-kubernetes-cluster">Connect to the Kubernetes cluster&lt;/h2>
&lt;p>Armory needs a credential to talk to Kubernetes, so you must create a service account in your Kubernetes cluster.&lt;/p>
&lt;h3 id="connecting-to-an-eks-cluster">Connecting to an EKS cluster&lt;/h3>
&lt;p>If you&amp;rsquo;re using an EKS cluster, you must be able to connect to the EKS cluster. This assumes you have already configured the &lt;code>aws&lt;/code> CLI with credentials and a default region / availability zone (see installation directions &lt;a href="https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html">here&lt;/a> and configuration directions &lt;a href="https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html">here&lt;/a>)&lt;/p>
&lt;ol>
&lt;li>
&lt;p>Create the local working directory on your workstation. For the purposes of this document, we will be using &lt;code>~/aws-spinnaker&lt;/code>, but this can be any persistent directory on any Linux or OSX machine.&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>mkdir ~/aws-spinnaker
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8be9fd;font-style:italic">cd&lt;/span> ~/aws-spinnaker
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>If you have access to the role that created the EKS cluster, you can create a kubeconfig with access to your Kubernetes cluster with this command:&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 eks update-kubeconfig --name &amp;lt;EKS_CLUSTER_NAME&amp;gt; --kubeconfig kubeconfig-aws
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>From here, you can validate access to the cluster with this command:&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 --kubeconfig kubeconfig-aws get namespaces
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;/ol>
&lt;h3 id="connecting-to-other-kubernetes-clusters">Connecting to other Kubernetes clusters&lt;/h3>
&lt;p>If you&amp;rsquo;ve stood up Kubernetes on AWS with KOPS or another Kubernetes tool, ensure that you can communicate with your Kubernetes cluster with kubectl.&lt;/p>
&lt;p>Then, copy your &lt;code>kubeconfig&lt;/code> file (this is typically located in &lt;code>~/.kube/config&lt;/code>) to your working 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>cp ~/.kube/config ~/aws-spinnaker/kubeconfig-aws
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="create-a-kubeconfig-file-for-halyardarmory">Create a &lt;code>kubeconfig&lt;/code> file for Halyard/Armory&lt;/h2>
&lt;p>Armory will be installed in its own namespace in your EKS or AWS-hosted Kubernetes cluster. For the purposes of this document, we will be installing Armory in the &lt;code>spinnaker-system&lt;/code> namespace; you&amp;rsquo;re welcome to use a different namespace for this.&lt;/p>
&lt;p>We&amp;rsquo;re going to create the following:&lt;/p>
&lt;ul>
&lt;li>A namespace called &lt;code>spinnaker-system&lt;/code> to install Armory in&lt;/li>
&lt;li>A service account for that namespace&lt;/li>
&lt;li>A role and rolebinding in that namespace, granting permissions to the service account&lt;/li>
&lt;li>A kubeconfig containing credentials for the service account&lt;/li>
&lt;/ul>
&lt;p>This document uses the Armory &lt;code>spinnaker-tools&lt;/code> Go CLI (available on &lt;a href="https://github.com/armory/spinnaker-tools">Github&lt;/a>) to create many of these resources. There are separate instructions to perform these steps manually.&lt;/p>
&lt;p>Halyard uses this Kubeconfig file to create the Kubernetes deployment objects that create the microservices that compose Armory. This same Kubeconfig is passed to Armory so that Armory can see and manage its own resources.&lt;/p>
&lt;ol>
&lt;li>
&lt;p>Obtain the &lt;code>spinnaker-tools&lt;/code> CLI tool. Go to &lt;a href="https://github.com/armory/spinnaker-tools/releases">https://github.com/armory/spinnaker-tools/releases&lt;/a>, and download the latest release for your operating system (OSX and Linux available). You can also use curl:&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:#6272a4"># If you&amp;#39;re not already in the directory&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8be9fd;font-style:italic">cd&lt;/span> ~/aws-spinnaker
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6272a4"># If you&amp;#39;re on Linux instead of OSX, use this URL instead:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6272a4"># https://github.com/armory/spinnaker-tools/releases/download/0.0.6/spinnaker-tools-linux&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>curl -L https://github.com/armory/spinnaker-tools/releases/download/0.0.6/spinnaker-tools-darwin -o spinnaker-tools
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>chmod +x spinnaker-tools
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>Run the tool. Feel free to substitute other values for the parameters:&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:#6272a4"># The &amp;#39;aws eks update-kubeconfig&amp;#39; command from above will create/update this file&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8be9fd;font-style:italic">SOURCE_KUBECONFIG&lt;/span>&lt;span style="color:#ff79c6">=&lt;/span>kubeconfig-aws
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6272a4"># Get the name of the context created by the aws tool)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8be9fd;font-style:italic">CONTEXT&lt;/span>&lt;span style="color:#ff79c6">=&lt;/span>&lt;span style="color:#ff79c6">$(&lt;/span>kubectl --kubeconfig &lt;span style="color:#f1fa8c">${&lt;/span>&lt;span style="color:#8be9fd;font-style:italic">SOURCE_KUBECONFIG&lt;/span>&lt;span style="color:#f1fa8c">}&lt;/span> config current-context&lt;span style="color:#ff79c6">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8be9fd;font-style:italic">DEST_KUBECONFIG&lt;/span>&lt;span style="color:#ff79c6">=&lt;/span>kubeconfig-spinnaker-system-sa
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8be9fd;font-style:italic">SPINNAKER_NAMESPACE&lt;/span>&lt;span style="color:#ff79c6">=&lt;/span>spinnaker-system
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8be9fd;font-style:italic">SPINNAKER_SERVICE_ACCOUNT_NAME&lt;/span>&lt;span style="color:#ff79c6">=&lt;/span>spinnaker-service-account
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>./spinnaker-tools create-service-account &lt;span style="color:#f1fa8c">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c">&lt;/span> --kubeconfig &lt;span style="color:#f1fa8c">${&lt;/span>&lt;span style="color:#8be9fd;font-style:italic">SOURCE_KUBECONFIG&lt;/span>&lt;span style="color:#f1fa8c">}&lt;/span> &lt;span style="color:#f1fa8c">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c">&lt;/span> --context &lt;span style="color:#f1fa8c">${&lt;/span>&lt;span style="color:#8be9fd;font-style:italic">CONTEXT&lt;/span>&lt;span style="color:#f1fa8c">}&lt;/span> &lt;span style="color:#f1fa8c">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c">&lt;/span> --output &lt;span style="color:#f1fa8c">${&lt;/span>&lt;span style="color:#8be9fd;font-style:italic">DEST_KUBECONFIG&lt;/span>&lt;span style="color:#f1fa8c">}&lt;/span> &lt;span style="color:#f1fa8c">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c">&lt;/span> --namespace &lt;span style="color:#f1fa8c">${&lt;/span>&lt;span style="color:#8be9fd;font-style:italic">SPINNAKER_NAMESPACE&lt;/span>&lt;span style="color:#f1fa8c">}&lt;/span> &lt;span style="color:#f1fa8c">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c">&lt;/span> --service-account-name &lt;span style="color:#f1fa8c">${&lt;/span>&lt;span style="color:#8be9fd;font-style:italic">SPINNAKER_SERVICE_ACCOUNT_NAME&lt;/span>&lt;span style="color:#f1fa8c">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;/ol>
&lt;p>You should be left with a file called &lt;code>kubeconfig-spinnaker-system-sa&lt;/code> (or something similar, if you&amp;rsquo;re using a different namespace for spinnaker)&lt;/p>
&lt;h2 id="create-the-s3-bucket-and-credentials">Create the S3 bucket and credentials&lt;/h2>
&lt;p>If you do not yet have an S3 bucket, create the S3 bucket:&lt;/p>
&lt;ol>
&lt;li>
&lt;p>Log into the AWS Console (web UI)&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Navigate to the S3 Console (Click on &amp;ldquo;Services&amp;rdquo; at the top, and then on &amp;ldquo;S3&amp;rdquo; under &amp;ldquo;Storage&amp;rdquo;)&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Click on &amp;ldquo;Create Bucket&amp;rdquo;&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Specify a globally unique name for this bucket, in your AWS region of choice, following your organization&amp;rsquo;s naming convention (if applicable). For this document, we will use, &lt;code>spinnaker-jq6cqvmpro&lt;/code>.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Click &amp;ldquo;Next&amp;rdquo;&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Select the following two checkboxes:&lt;/p>
&lt;ul>
&lt;li>Keep all versions of an object in the same bucket&lt;/li>
&lt;li>Automatically encrypt objects when they are stored in S3&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>Click &amp;ldquo;Next&amp;rdquo;&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Do not add any additional permissions, unless specified by your organization. Click &amp;ldquo;Next&amp;rdquo;&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Click &amp;ldquo;Create bucket&amp;rdquo;&lt;/p>
&lt;/li>
&lt;/ol>
&lt;p>Armory (the &lt;code>front50&lt;/code> service, specifically) will need access to your newly-created bucket. There are a number of ways to achieve this. This document describes two mechanisms to do this.&lt;/p>
&lt;p>By default, Armory will store all Armory information in a folder called &lt;code>front50&lt;/code> in your bucket. You can optionally specify a different directory (for example, if you&amp;rsquo;re using a pre-existing or shared S3 bucket).&lt;/p>
&lt;h3 id="create-an-iam-user-using-an-inline-policy">Create an IAM user using an inline policy&lt;/h3>
&lt;p>You can create an IAM user with credentials, and provide that to Armory via Halyard&lt;/p>
&lt;ol>
&lt;li>Log into the AWS Console (Web UI)&lt;/li>
&lt;li>Navigate to the IAM Console (Click on &amp;ldquo;Services&amp;rdquo; at the top, and then on &amp;ldquo;IAM&amp;rdquo; under &amp;ldquo;Security, Identity, &amp;amp; Compliance&amp;rdquo;)&lt;/li>
&lt;li>Click on &amp;ldquo;Users&amp;rdquo; on the left&lt;/li>
&lt;li>Click on &amp;ldquo;Add user&amp;rdquo;&lt;/li>
&lt;li>Give your user a distinct name, per your organization&amp;rsquo;s naming conventions. For this document, we will use &lt;code>s3-spinnaker-jq6cqvmpro&lt;/code>&lt;/li>
&lt;li>Click on &amp;ldquo;Programmatic access&amp;rdquo;&lt;/li>
&lt;li>We will not be adding a distinct policy to this user. Click on &amp;ldquo;Next: Tags&amp;rdquo;. &lt;em>You may receive a warning about how there are no policies attached to this user - this warning can be ignored.&lt;/em>&lt;/li>
&lt;li>Optionally, add tags, then click on &amp;ldquo;Next: Review&amp;rdquo;&lt;/li>
&lt;li>Click &amp;ldquo;Create user&amp;rdquo;&lt;/li>
&lt;li>Save the Access Key ID and Secret Access Key - these will be used later, during Halyard configuration&lt;/li>
&lt;li>Click &amp;ldquo;Close&amp;rdquo;&lt;/li>
&lt;/ol>
&lt;p>Then, add an inline policy to your IAM user:&lt;/p>
&lt;ol>
&lt;li>
&lt;p>Click on your newly-created IAM user&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Click on &amp;ldquo;Add inline policy&amp;rdquo; (on the right)&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Click on the &amp;ldquo;JSON&amp;rdquo; tab&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Add this text (replace &lt;code>s3-spinnaker-jq6cqvmpro&lt;/code> with the name of your bucket)&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-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;Version&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;2012-10-17&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;Statement&amp;#34;&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">&amp;#34;Effect&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;Allow&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;Action&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;s3:*&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;Resource&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f1fa8c">&amp;#34;arn:aws:s3:::spinnaker-jq6cqvmpro&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f1fa8c">&amp;#34;arn:aws:s3:::spinnaker-jq6cqvmpro/*&amp;#34;&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>&lt;/span>&lt;span style="display:flex;">&lt;span> ]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>Click on &amp;ldquo;Review Policy&amp;rdquo;&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Give your inline policy some name. For example &lt;code>s3-spinnaker-jq6cqvmpro&lt;/code>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Click &amp;ldquo;Create Policy&amp;rdquo;&lt;/p>
&lt;/li>
&lt;/ol>
&lt;h2 id="create-an-iam-policy-attached-to-the-kubernetes-nodes-using-an-inline-policy">Create an IAM policy attached to the Kubernetes nodes using an inline policy&lt;/h2>
&lt;p>Alternately, you can attach an IAM policy to the role attached to your Kubernetes nodes.&lt;/p>
&lt;ol>
&lt;li>
&lt;p>Log into the AWS Console (Web UI)&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Navigate to EC2 (Click on &amp;ldquo;Services&amp;rdquo; at the top, and then on &amp;ldquo;EC2&amp;rdquo; under &amp;ldquo;Compute&amp;rdquo;)&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Click on one of your Kubernetes nodes&lt;/p>
&lt;/li>
&lt;li>
&lt;p>In the bottom section, look for &amp;ldquo;IAM role&amp;rdquo; and click on the role&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Click on &amp;ldquo;Add inline policy&amp;rdquo; (on the right)&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Click on the &amp;ldquo;JSON&amp;rdquo; tab&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Add this text (replace &lt;code>s3-spinnaker-jq6cqvmpro&lt;/code> with the name of your bucket)&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-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;Version&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;2012-10-17&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;Statement&amp;#34;&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">&amp;#34;Effect&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;Allow&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;Action&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;s3:*&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;Resource&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f1fa8c">&amp;#34;arn:aws:s3:::spinnaker-jq6cqvmpro&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f1fa8c">&amp;#34;arn:aws:s3:::spinnaker-jq6cqvmpro/*&amp;#34;&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>&lt;/span>&lt;span style="display:flex;">&lt;span> ]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>Click on &amp;ldquo;Review Policy&amp;rdquo;&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Give your inline policy some name. For example &lt;code>s3-spinnaker-jq6cqvmpro&lt;/code>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Click &amp;ldquo;Create Policy&amp;rdquo;&lt;/p>
&lt;/li>
&lt;/ol>
&lt;h2 id="stage-files-on-the-halyard-machine">Stage files on the Halyard machine&lt;/h2>
&lt;p>On the Halyard machine, choose a local working directory for Halyard. In it, we will create two folders:&lt;/p>
&lt;ul>
&lt;li>&lt;code>WORKING_DIRECTORY/.hal&lt;/code>&lt;/li>
&lt;li>&lt;code>WORKING_DIRECTORY/.secret&lt;/code>&lt;/li>
&lt;li>&lt;code>WORKING_DIRECTORY/resources&lt;/code>&lt;/li>
&lt;/ul>
&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:#6272a4"># Feel free to use some other directory for this; make sure it is a persistent directory.&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6272a4"># Also, make sure this directory doesn&amp;#39;t live on an NFS mount, as that can cause issues&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8be9fd;font-style:italic">WORKING_DIRECTORY&lt;/span>&lt;span style="color:#ff79c6">=&lt;/span>~/aws-spinnaker/
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>mkdir -p &lt;span style="color:#f1fa8c">${&lt;/span>&lt;span style="color:#8be9fd;font-style:italic">WORKING_DIRECTORY&lt;/span>&lt;span style="color:#f1fa8c">}&lt;/span>/.hal
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>mkdir -p &lt;span style="color:#f1fa8c">${&lt;/span>&lt;span style="color:#8be9fd;font-style:italic">WORKING_DIRECTORY&lt;/span>&lt;span style="color:#f1fa8c">}&lt;/span>/.secret
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>mkdir -p &lt;span style="color:#f1fa8c">${&lt;/span>&lt;span style="color:#8be9fd;font-style:italic">WORKING_DIRECTORY&lt;/span>&lt;span style="color:#f1fa8c">}&lt;/span>/resources
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>You should have one files:&lt;/p>
&lt;ul>
&lt;li>A kubeconfig file (&lt;code>kubeconfig-spinnaker-system-sa&lt;/code>) with the credentials for a service account in your EKS cluster&lt;/li>
&lt;/ul>
&lt;p>Copy it into &lt;code>.secret&lt;/code> so it is available to your Halyard docker container:&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>cp kubeconfig-spinnaker-system-sa &lt;span style="color:#f1fa8c">${&lt;/span>&lt;span style="color:#8be9fd;font-style:italic">WORKING_DIRECTORY&lt;/span>&lt;span style="color:#f1fa8c">}&lt;/span>/.secret
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="start-the-halyard-container">Start the Halyard container&lt;/h2>
&lt;p>On the &lt;code>Halyard machine&lt;/code>, start the Halyard container .&lt;/p>
&lt;p>&lt;em>If you want to install open source Spinnaker instead, use &lt;code>gcr.io/spinnaker-marketplace/halyard:stable&lt;/code> for the Docker Halyard image reference in substitution of &lt;code>armory/halyard-armory:&amp;lt;image_version&amp;gt;&lt;/code> in the commands below&lt;/em>&lt;/p>
&lt;blockquote>
&lt;p>Before you execute the command below, you need to set permissions on the host (local) directories mapped to the Docker container. These directories must allow for modification from within the container. The &lt;code>~/.hal&lt;/code> folder within
the &lt;em>host (local) system directory&lt;/em> needs write permissions (&lt;code>chmod 777 ~/.hal&lt;/code>), or you will encounter issues when attempting to execute a &lt;code>hal deploy apply&lt;/code> from within the container.&lt;/p>
&lt;/blockquote>
&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>docker run --name armory-halyard -it --rm &lt;span style="color:#f1fa8c">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c">&lt;/span> -v &lt;span style="color:#f1fa8c">${&lt;/span>&lt;span style="color:#8be9fd;font-style:italic">WORKING_DIRECTORY&lt;/span>&lt;span style="color:#f1fa8c">}&lt;/span>/.hal:/home/spinnaker/.hal &lt;span style="color:#f1fa8c">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c">&lt;/span> -v &lt;span style="color:#f1fa8c">${&lt;/span>&lt;span style="color:#8be9fd;font-style:italic">WORKING_DIRECTORY&lt;/span>&lt;span style="color:#f1fa8c">}&lt;/span>/.secret:/home/spinnaker/.secret &lt;span style="color:#f1fa8c">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c">&lt;/span> -v &lt;span style="color:#f1fa8c">${&lt;/span>&lt;span style="color:#8be9fd;font-style:italic">WORKING_DIRECTORY&lt;/span>&lt;span style="color:#f1fa8c">}&lt;/span>/resources:/home/spinnaker/resources &lt;span style="color:#f1fa8c">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c">&lt;/span> armory/halyard-armory:1.12.1
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>The installer expects to find your kubeconfig named &lt;code>config&lt;/code> in
the &lt;code>.kube&lt;/code> directory you map below. If you&amp;rsquo;ve named your config something
else, you need to rename or symlink the file accordingly.&lt;/p>
&lt;h2 id="enter-the-halyard-container">Enter the Halyard container&lt;/h2>
&lt;p>From a separate terminal session on your &lt;code>docker machine&lt;/code>, create a second bash/shell session on the Docker container:&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>docker &lt;span style="color:#8be9fd;font-style:italic">exec&lt;/span> -it armory-halyard bash
&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:#6272a4"># Also, once in the container, you can run these commands for a friendlier environment to:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6272a4"># - prompt with information&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6272a4"># - alias for ls&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6272a4"># - cd to the home directory&lt;/span>
&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">PS1&lt;/span>&lt;span style="color:#ff79c6">=&lt;/span>&lt;span style="color:#f1fa8c">&amp;#34;\h:\w \u\$ &amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8be9fd;font-style:italic">alias&lt;/span> &lt;span style="color:#8be9fd;font-style:italic">ll&lt;/span>&lt;span style="color:#ff79c6">=&lt;/span>&lt;span style="color:#f1fa8c">&amp;#39;ls -alh&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8be9fd;font-style:italic">cd&lt;/span> ~
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="add-the-kubeconfig-and-cloud-provider-to-armory-via-halyard">Add the kubeconfig and cloud provider to Armory (via Halyard)&lt;/h2>
&lt;p>From the &lt;code>docker exec&lt;/code> separate terminal session, add (re-export) the relevant environment variables&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:#6272a4">###### Use the same values as the start of the document&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6272a4"># Enter the namespace that you want to install Armory in. This should have been created in the previous step.&lt;/span>
&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">NAMESPACE&lt;/span>&lt;span style="color:#ff79c6">=&lt;/span>&lt;span style="color:#f1fa8c">&amp;#34;spinnaker-system&amp;#34;&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:#6272a4"># Enter the name you want Armory to use to identify the cloud provider account&lt;/span>
&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">ACCOUNT_NAME&lt;/span>&lt;span style="color:#ff79c6">=&lt;/span>&lt;span style="color:#f1fa8c">&amp;#34;spinnaker&amp;#34;&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:#6272a4"># Update this with the full path to your kubeconfig inside the container)&lt;/span>
&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">KUBECONFIG_FULL&lt;/span>&lt;span style="color:#ff79c6">=&lt;/span>/home/spinnaker/.secret/kubeconfig-spinnaker-system-sa
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Use the Halyard &lt;code>hal&lt;/code> command line tool to add a Kubernetes account using your minified kubeconfig&lt;/p>
&lt;p>Configure the kubeconfig:&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:#6272a4"># Enable the Kubernetes cloud provider&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>hal config provider kubernetes &lt;span style="color:#8be9fd;font-style:italic">enable&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Note: If you get an &lt;code>AccessDenied&lt;/code> error, change permissions on the host machine&amp;rsquo;s &lt;code>.hal&lt;/code> folder to allow read/write access by the Halyard container. Example: &lt;code>chmod 777 ~/.hal&lt;/code>.&lt;/p>
&lt;p>Next, configure the account:&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:#6272a4"># Add account&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>hal config provider kubernetes account add &lt;span style="color:#f1fa8c">${&lt;/span>&lt;span style="color:#8be9fd;font-style:italic">ACCOUNT_NAME&lt;/span>&lt;span style="color:#f1fa8c">}&lt;/span> &lt;span style="color:#f1fa8c">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c">&lt;/span> --provider-version v2 &lt;span style="color:#f1fa8c">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c">&lt;/span> --kubeconfig-file &lt;span style="color:#f1fa8c">${&lt;/span>&lt;span style="color:#8be9fd;font-style:italic">KUBECONFIG_FULL&lt;/span>&lt;span style="color:#f1fa8c">}&lt;/span> &lt;span style="color:#f1fa8c">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c">&lt;/span> --only-spinnaker-managed &lt;span style="color:#8be9fd;font-style:italic">true&lt;/span> &lt;span style="color:#f1fa8c">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c">&lt;/span> --namespaces &lt;span style="color:#f1fa8c">${&lt;/span>&lt;span style="color:#8be9fd;font-style:italic">NAMESPACE&lt;/span>&lt;span style="color:#f1fa8c">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="configure-armory-to-install-in-kubernetes">Configure Armory to install in Kubernetes&lt;/h2>
&lt;p>&lt;strong>Important: This will by default limit your Armory to deploying to the&lt;/strong> namespace specified. If you want to be able to deploy to other namespaces, &lt;strong>either add a second cloud provider target or remove the &lt;code>--namespaces&lt;/code> flag.&lt;/strong>&lt;/p>
&lt;p>Use the Halyard &lt;code>hal&lt;/code> command line tool to configure Halyard to install Armory in your Kubernetes cluster&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 config deploy edit &lt;span style="color:#f1fa8c">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c">&lt;/span> --type distributed &lt;span style="color:#f1fa8c">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c">&lt;/span> --account-name &lt;span style="color:#f1fa8c">${&lt;/span>&lt;span style="color:#8be9fd;font-style:italic">ACCOUNT_NAME&lt;/span>&lt;span style="color:#f1fa8c">}&lt;/span> &lt;span style="color:#f1fa8c">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c">&lt;/span> --location &lt;span style="color:#f1fa8c">${&lt;/span>&lt;span style="color:#8be9fd;font-style:italic">NAMESPACE&lt;/span>&lt;span style="color:#f1fa8c">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="enable-artifacts">Enable Artifacts&lt;/h2>
&lt;p>Within Armory, &amp;lsquo;artifacts&amp;rsquo; are consumable references to items that live outside of Armory, such as a file in a git repository or a file in an S3 bucket. The Artifacts feature must be explicitly turned on.&lt;/p>
&lt;p>Enable the &amp;ldquo;Artifacts&amp;rdquo; feature and the &amp;ldquo;http&amp;rdquo; artifact provider:&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:#6272a4"># Enable artifacts&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>hal config features edit --artifacts &lt;span style="color:#8be9fd;font-style:italic">true&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>hal config artifact http &lt;span style="color:#8be9fd;font-style:italic">enable&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>(In order to add specific types of artifacts, there are further configuration items that must be completed. For now, it is sufficient to just turn on the artifacts feature with the http artifact provider. This will allow Armory to retrieve files via unauthenticated http.)&lt;/p>
&lt;h2 id="configure-armory-to-use-your-s3-bucket">Configure Armory to use your S3 bucket&lt;/h2>
&lt;p>Use the Halyard &lt;code>hal&lt;/code> command line tool to configure Halyard to configure Armory to use your S3 bucket&lt;/p>
&lt;h3 id="if-you-are-using-an-iam-user">If you are using an IAM user&lt;/h3>
&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:#6272a4"># Update these with the information from the bucket that you created&lt;/span>
&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">BUCKET_NAME&lt;/span>&lt;span style="color:#ff79c6">=&lt;/span>spinnaker-jq6cqvmpro
&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">REGION&lt;/span>&lt;span style="color:#ff79c6">=&lt;/span>us-west-2
&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">ACCESS_KEY_ID&lt;/span>&lt;span style="color:#ff79c6">=&lt;/span>&amp;lt;access-key&amp;gt;
&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:#6272a4"># This will prompt for the secret key&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>hal config storage s3 edit &lt;span style="color:#f1fa8c">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c">&lt;/span> --bucket &lt;span style="color:#f1fa8c">${&lt;/span>&lt;span style="color:#8be9fd;font-style:italic">BUCKET_NAME&lt;/span>&lt;span style="color:#f1fa8c">}&lt;/span> &lt;span style="color:#f1fa8c">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c">&lt;/span> --access-key-id &lt;span style="color:#f1fa8c">${&lt;/span>&lt;span style="color:#8be9fd;font-style:italic">ACCESS_KEY_ID&lt;/span>&lt;span style="color:#f1fa8c">}&lt;/span> &lt;span style="color:#f1fa8c">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c">&lt;/span> --secret-access-key &lt;span style="color:#f1fa8c">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c">&lt;/span> --region &lt;span style="color:#f1fa8c">${&lt;/span>&lt;span style="color:#8be9fd;font-style:italic">REGION&lt;/span>&lt;span style="color:#f1fa8c">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>hal config storage edit --type s3
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="if-you-are-using-the-iam-instance-roles">If you are using the IAM instance roles&lt;/h3>
&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:#6272a4"># Update these with the information from the bucket that you created&lt;/span>
&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">BUCKET_NAME&lt;/span>&lt;span style="color:#ff79c6">=&lt;/span>spinnaker-jq6cqvmpro
&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">REGION&lt;/span>&lt;span style="color:#ff79c6">=&lt;/span>us-west-2
&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:#6272a4"># This will prompt for the secret key&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>hal config storage s3 edit &lt;span style="color:#f1fa8c">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c">&lt;/span> --bucket &lt;span style="color:#f1fa8c">${&lt;/span>&lt;span style="color:#8be9fd;font-style:italic">BUCKET_NAME&lt;/span>&lt;span style="color:#f1fa8c">}&lt;/span> &lt;span style="color:#f1fa8c">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c">&lt;/span> --region &lt;span style="color:#f1fa8c">${&lt;/span>&lt;span style="color:#8be9fd;font-style:italic">REGION&lt;/span>&lt;span style="color:#f1fa8c">}&lt;/span> &lt;span style="color:#f1fa8c">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c">&lt;/span> --no-validate
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>hal config storage edit --type s3
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="if-you-want-to-use-a-specific-folder-in-the-bucket">If you want to use a specific folder in the bucket&lt;/h3>
&lt;p>By default, Halyard will configure Armory to use the folder &lt;code>front50&lt;/code> in your S3 bucket. You can configure it to use a different folder with this command:&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">ROOT_FOLDER&lt;/span>&lt;span style="color:#ff79c6">=&lt;/span>not_front50
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>hal config storage s3 edit --root-folder &lt;span style="color:#f1fa8c">${&lt;/span>&lt;span style="color:#8be9fd;font-style:italic">ROOT_FOLDER&lt;/span>&lt;span style="color:#f1fa8c">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="choose-the-armory-version">Choose the Armory version&lt;/h2>
&lt;p>Before Halyard will install Armory, you should specify the version of Armory you want to use.&lt;/p>
&lt;p>You can get a list of available versions of spinnaker with this command:&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 list
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;em>If you are installing Armory, you will get a version that starts with &lt;code>2.x.x&lt;/code>&lt;/em>&lt;/p>
&lt;p>&lt;em>If you are installing open source Spinnaker and using &lt;code>gcr.io/spinnaker-marketplace/halyard:stable&lt;/code>, you will get a version that starts with &lt;code>1.x.x&lt;/code>&lt;/em>&lt;/p>
&lt;p>And then you can select the version with this:&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:#6272a4"># Replace with version of choice:&lt;/span>
&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">VERSION&lt;/span>&lt;span style="color:#ff79c6">=&lt;/span>&lt;span style="color:#ff79c6">$(&lt;/span>hal version latest -q&lt;span style="color:#ff79c6">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>hal config version edit --version &lt;span style="color:#8be9fd;font-style:italic">$VERSION&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="install-armory">Install Armory&lt;/h2>
&lt;p>Now that your Halconfig is completely configured for the initial Armory deployment, you can tell Halyard to actually install Armory:&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 deploy apply
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Once this is complete, congratulations! Armory Continuous Deployment is installed. Now, we have to access and expose it.&lt;/p>
&lt;h2 id="connect-to-armory-continuous-deployment-using-kubectl-port-forward">Connect to Armory Continuous Deployment using &lt;code>kubectl port-forward&lt;/code>&lt;/h2>
&lt;p>If you have kubectl on a local machine with access to your Kubernetes cluster, you can test connecting to it with the following:&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">NAMESPACE&lt;/span>&lt;span style="color:#ff79c6">=&lt;/span>spinnaker-system
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8be9fd;font-style:italic">DECK_POD&lt;/span>&lt;span style="color:#ff79c6">=&lt;/span>&lt;span style="color:#ff79c6">$(&lt;/span>kubectl -n &lt;span style="color:#f1fa8c">${&lt;/span>&lt;span style="color:#8be9fd;font-style:italic">NAMESPACE&lt;/span>&lt;span style="color:#f1fa8c">}&lt;/span> get pod -l &lt;span style="color:#8be9fd;font-style:italic">cluster&lt;/span>&lt;span style="color:#ff79c6">=&lt;/span>spin-deck -ojsonpath&lt;span style="color:#ff79c6">=&lt;/span>&lt;span style="color:#f1fa8c">&amp;#39;{.items[0].metadata.name}&amp;#39;&lt;/span>&lt;span style="color:#ff79c6">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8be9fd;font-style:italic">GATE_POD&lt;/span>&lt;span style="color:#ff79c6">=&lt;/span>&lt;span style="color:#ff79c6">$(&lt;/span>kubectl -n &lt;span style="color:#f1fa8c">${&lt;/span>&lt;span style="color:#8be9fd;font-style:italic">NAMESPACE&lt;/span>&lt;span style="color:#f1fa8c">}&lt;/span> get pod -l &lt;span style="color:#8be9fd;font-style:italic">cluster&lt;/span>&lt;span style="color:#ff79c6">=&lt;/span>spin-gate -ojsonpath&lt;span style="color:#ff79c6">=&lt;/span>&lt;span style="color:#f1fa8c">&amp;#39;{.items[0].metadata.name}&amp;#39;&lt;/span>&lt;span style="color:#ff79c6">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>kubectl -n &lt;span style="color:#f1fa8c">${&lt;/span>&lt;span style="color:#8be9fd;font-style:italic">NAMESPACE&lt;/span>&lt;span style="color:#f1fa8c">}&lt;/span> port-forward &lt;span style="color:#f1fa8c">${&lt;/span>&lt;span style="color:#8be9fd;font-style:italic">DECK_POD&lt;/span>&lt;span style="color:#f1fa8c">}&lt;/span> &lt;span style="color:#bd93f9">9000&lt;/span> &amp;amp;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>kubectl -n &lt;span style="color:#f1fa8c">${&lt;/span>&lt;span style="color:#8be9fd;font-style:italic">NAMESPACE&lt;/span>&lt;span style="color:#f1fa8c">}&lt;/span> port-forward &lt;span style="color:#f1fa8c">${&lt;/span>&lt;span style="color:#8be9fd;font-style:italic">GATE_POD&lt;/span>&lt;span style="color:#f1fa8c">}&lt;/span> &lt;span style="color:#bd93f9">8084&lt;/span> &amp;amp;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Then, you can access Armory at &lt;a href="http://localhost:9000">http://localhost:9000&lt;/a>&lt;/p>
&lt;p>(If you are doing this on a remote machine, this will not work because your browser attempts to access localhost on your local workstation rather than on the remote machine where the port is forwarded)&lt;/p>
&lt;p>&lt;strong>Note:&lt;/strong> Even if the &lt;code>hal deploy apply&lt;/code> command returns successfully, the
installation may not be complete yet. This is especially the case with
distributed Kubernetes installs. If you see errors such as &lt;code>Connection refused&lt;/code>,
the containers may not be available yet. You can either wait
or check the status of all of the containers using the command for your cloud provider
(such as &lt;code>kubectl get pods --namespace spinnaker&lt;/code>).&lt;/p>
&lt;h2 id="install-the-nginx-ingress-controller">Install the NGINX ingress controller&lt;/h2>
&lt;p>In order to expose Armory to end users, you have perform the following actions:&lt;/p>
&lt;ul>
&lt;li>Expose the spin-deck (UI) Kubernetes service on some URL endpoint&lt;/li>
&lt;li>Expose the spin-gate (API) Kubernetes service on some URL endpoint&lt;/li>
&lt;li>Update Armory (via Halyard) to be aware of the new endpoints&lt;/li>
&lt;/ul>
&lt;p>We&amp;rsquo;re going to install the NGINX ingress controller on AWS (this uses the Layer 4 ELB, as indicated in the NGINX ingress controller &lt;a href="https://github.com/kubernetes/ingress-nginx/blob/master/docs/deploy/index.md#aws">documentation&lt;/a> - you can use other NGINX ingress controller configurations such as the Layer 7 load balancer per your organization&amp;rsquo;s ingress policy.)&lt;/p>
&lt;p>(Both of these are configurable with Armory, but the NGINX ingress controller is also generally much more configurable)&lt;/p>
&lt;p>From the &lt;code>workstation machine&lt;/code> (where &lt;code>kubectl&lt;/code> is installed):&lt;/p>
&lt;p>Install the NGINX ingress controller components:&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 --kubeconfig kubeconfig-aws apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/static/provider/aws/deploy.yaml
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Install the NGINX ingress controller AWS-specific 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 --kubeconfig kubeconfig-aws apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/static/provider/aws/service-l4.yaml
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>kubectl --kubeconfig kubeconfig-aws apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/static/provider/aws/patch-configmap-l4.yaml
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="set-up-the-ingress-for-spin-deck-and-spin-gate">Set up the Ingress for &lt;code>spin-deck&lt;/code> and &lt;code>spin-gate&lt;/code>&lt;/h2>
&lt;p>Identify the URLs you will use to expose Armory&amp;rsquo;s UI and API.&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:#6272a4"># Replace with actual values&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8be9fd;font-style:italic">SPIN_DECK_ENDPOINT&lt;/span>&lt;span style="color:#ff79c6">=&lt;/span>spinnaker.some-url.com
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8be9fd;font-style:italic">SPIN_GATE_ENDPOINT&lt;/span>&lt;span style="color:#ff79c6">=&lt;/span>api.some-url.com
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8be9fd;font-style:italic">NAMESPACE&lt;/span>&lt;span style="color:#ff79c6">=&lt;/span>spinnaker-system
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Create a Kubernetes Ingress manifest to expose spin-deck and spin-gate (change your hosts and namespace accordingly):&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>tee spin-ingress.yaml &lt;span style="color:#f1fa8c">&amp;lt;&amp;lt;-&amp;#39;EOF&amp;#39;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c">apiVersion: extensions/v1beta1
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c">kind: Ingress
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c">metadata:
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> name: spinnaker-nginx-ingress
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> namespace: NAMESPACE
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> labels:
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> app: spin
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> cluster: spin-ingress
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> annotations:
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> kubernetes.io/ingress.class: &amp;#34;nginx&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c">spec:
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> rules:
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> - host: SPIN_DECK_ENDPOINT
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> http:
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> paths:
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> - backend:
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> serviceName: spin-deck
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> servicePort: 9000
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> path: /
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> - host: SPIN_GATE_ENDPOINT
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> http:
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> paths:
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> - backend:
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> serviceName: spin-gate
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> servicePort: 8084
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> path: /
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c">EOF&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>sed -i.bak &lt;span style="color:#f1fa8c">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c">&lt;/span> -e &lt;span style="color:#f1fa8c">&amp;#34;s|NAMESPACE|&lt;/span>&lt;span style="color:#f1fa8c">${&lt;/span>&lt;span style="color:#8be9fd;font-style:italic">NAMESPACE&lt;/span>&lt;span style="color:#f1fa8c">}&lt;/span>&lt;span style="color:#f1fa8c">|g&amp;#34;&lt;/span> &lt;span style="color:#f1fa8c">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c">&lt;/span> -e &lt;span style="color:#f1fa8c">&amp;#34;s|SPIN_DECK_ENDPOINT|&lt;/span>&lt;span style="color:#f1fa8c">${&lt;/span>&lt;span style="color:#8be9fd;font-style:italic">SPIN_DECK_ENDPOINT&lt;/span>&lt;span style="color:#f1fa8c">}&lt;/span>&lt;span style="color:#f1fa8c">|g&amp;#34;&lt;/span> &lt;span style="color:#f1fa8c">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c">&lt;/span> -e &lt;span style="color:#f1fa8c">&amp;#34;s|SPIN_GATE_ENDPOINT|&lt;/span>&lt;span style="color:#f1fa8c">${&lt;/span>&lt;span style="color:#8be9fd;font-style:italic">SPIN_GATE_ENDPOINT&lt;/span>&lt;span style="color:#f1fa8c">}&lt;/span>&lt;span style="color:#f1fa8c">|g&amp;#34;&lt;/span> &lt;span style="color:#f1fa8c">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c">&lt;/span> spin-ingress.yaml
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Create the Ingress&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 -f spin-ingress.yaml
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="configure-armory-to-be-aware-of-its-endpoints">Configure Armory to be aware of its endpoints&lt;/h2>
&lt;p>Armory must be aware of its endpoints to work properly.&lt;/p>
&lt;p>This should be done from the halyard container:&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">SPIN_DECK_ENDPOINT&lt;/span>&lt;span style="color:#ff79c6">=&lt;/span>spinnaker.some-url.com
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8be9fd;font-style:italic">SPIN_GATE_ENDPOINT&lt;/span>&lt;span style="color:#ff79c6">=&lt;/span>api.some-url.com
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8be9fd;font-style:italic">SPIN_DECK_URL&lt;/span>&lt;span style="color:#ff79c6">=&lt;/span>http://&lt;span style="color:#f1fa8c">${&lt;/span>&lt;span style="color:#8be9fd;font-style:italic">SPIN_DECK_ENDPOINT&lt;/span>&lt;span style="color:#f1fa8c">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8be9fd;font-style:italic">SPIN_GATE_URL&lt;/span>&lt;span style="color:#ff79c6">=&lt;/span>http://&lt;span style="color:#f1fa8c">${&lt;/span>&lt;span style="color:#8be9fd;font-style:italic">SPIN_GATE_ENDPOINT&lt;/span>&lt;span style="color:#f1fa8c">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>hal config security ui edit --override-base-url &lt;span style="color:#f1fa8c">${&lt;/span>&lt;span style="color:#8be9fd;font-style:italic">SPIN_DECK_URL&lt;/span>&lt;span style="color:#f1fa8c">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>hal config security api edit --override-base-url &lt;span style="color:#f1fa8c">${&lt;/span>&lt;span style="color:#8be9fd;font-style:italic">SPIN_GATE_URL&lt;/span>&lt;span style="color:#f1fa8c">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>hal deploy apply
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="set-up-dns">Set up DNS&lt;/h2>
&lt;p>Once the ingress is up (this may take some time), you can get the IP address for the ingress:&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 describe -n spinnaker-system ingress spinnaker-nginx-ingress
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Name: spinnaker-nginx-ingress
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Namespace: spinnaker-system
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Address: 35.233.216.189
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Default backend: default-http-backend:80 &lt;span style="color:#ff79c6">(&lt;/span>10.36.2.7:8080&lt;span style="color:#ff79c6">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Rules:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Host Path Backends
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ---- ---- --------
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> spinnaker.some-url.com
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> / spin-deck:9000 &lt;span style="color:#ff79c6">(&lt;/span>&amp;lt;none&amp;gt;&lt;span style="color:#ff79c6">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> api.some-url.com
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> / spin-gate:8084 &lt;span style="color:#ff79c6">(&lt;/span>&amp;lt;none&amp;gt;&lt;span style="color:#ff79c6">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Annotations:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> kubectl.kubernetes.io/last-applied-configuration: &lt;span style="color:#ff79c6">{&lt;/span>&lt;span style="color:#f1fa8c">&amp;#34;apiVersion&amp;#34;&lt;/span>:&lt;span style="color:#f1fa8c">&amp;#34;extensions/v1beta1&amp;#34;&lt;/span>,&lt;span style="color:#f1fa8c">&amp;#34;kind&amp;#34;&lt;/span>:&lt;span style="color:#f1fa8c">&amp;#34;Ingress&amp;#34;&lt;/span>,&lt;span style="color:#f1fa8c">&amp;#34;metadata&amp;#34;&lt;/span>:&lt;span style="color:#ff79c6">{&lt;/span>&lt;span style="color:#f1fa8c">&amp;#34;annotations&amp;#34;&lt;/span>:&lt;span style="color:#ff79c6">{&lt;/span>&lt;span style="color:#f1fa8c">&amp;#34;kubernetes.io/ingress.class&amp;#34;&lt;/span>:&lt;span style="color:#f1fa8c">&amp;#34;nginx&amp;#34;&lt;/span>&lt;span style="color:#ff79c6">}&lt;/span>,&lt;span style="color:#f1fa8c">&amp;#34;name&amp;#34;&lt;/span>:&lt;span style="color:#f1fa8c">&amp;#34;spinnaker-nginx-ingress&amp;#34;&lt;/span>,&lt;span style="color:#f1fa8c">&amp;#34;namespace&amp;#34;&lt;/span>:&lt;span style="color:#f1fa8c">&amp;#34;spinnaker&amp;#34;&lt;/span>&lt;span style="color:#ff79c6">}&lt;/span>,&lt;span style="color:#f1fa8c">&amp;#34;spec&amp;#34;&lt;/span>:&lt;span style="color:#ff79c6">{&lt;/span>&lt;span style="color:#f1fa8c">&amp;#34;rules&amp;#34;&lt;/span>:&lt;span style="color:#ff79c6">[{&lt;/span>&lt;span style="color:#f1fa8c">&amp;#34;host&amp;#34;&lt;/span>:&lt;span style="color:#f1fa8c">&amp;#34;spinnaker.some-url.com&amp;#34;&lt;/span>,&lt;span style="color:#f1fa8c">&amp;#34;http&amp;#34;&lt;/span>:&lt;span style="color:#ff79c6">{&lt;/span>&lt;span style="color:#f1fa8c">&amp;#34;paths&amp;#34;&lt;/span>:&lt;span style="color:#ff79c6">[{&lt;/span>&lt;span style="color:#f1fa8c">&amp;#34;backend&amp;#34;&lt;/span>:&lt;span style="color:#ff79c6">{&lt;/span>&lt;span style="color:#f1fa8c">&amp;#34;serviceName&amp;#34;&lt;/span>:&lt;span style="color:#f1fa8c">&amp;#34;spin-deck&amp;#34;&lt;/span>,&lt;span style="color:#f1fa8c">&amp;#34;servicePort&amp;#34;&lt;/span>:9000&lt;span style="color:#ff79c6">}&lt;/span>,&lt;span style="color:#f1fa8c">&amp;#34;path&amp;#34;&lt;/span>:&lt;span style="color:#f1fa8c">&amp;#34;/&amp;#34;&lt;/span>&lt;span style="color:#ff79c6">}]}}&lt;/span>,&lt;span style="color:#ff79c6">{&lt;/span>&lt;span style="color:#f1fa8c">&amp;#34;host&amp;#34;&lt;/span>:&lt;span style="color:#f1fa8c">&amp;#34;api.some-url.com&amp;#34;&lt;/span>,&lt;span style="color:#f1fa8c">&amp;#34;http&amp;#34;&lt;/span>:&lt;span style="color:#ff79c6">{&lt;/span>&lt;span style="color:#f1fa8c">&amp;#34;paths&amp;#34;&lt;/span>:&lt;span style="color:#ff79c6">[{&lt;/span>&lt;span style="color:#f1fa8c">&amp;#34;backend&amp;#34;&lt;/span>:&lt;span style="color:#ff79c6">{&lt;/span>&lt;span style="color:#f1fa8c">&amp;#34;serviceName&amp;#34;&lt;/span>:&lt;span style="color:#f1fa8c">&amp;#34;spin-gate&amp;#34;&lt;/span>,&lt;span style="color:#f1fa8c">&amp;#34;servicePort&amp;#34;&lt;/span>:8084&lt;span style="color:#ff79c6">}&lt;/span>,&lt;span style="color:#f1fa8c">&amp;#34;path&amp;#34;&lt;/span>:&lt;span style="color:#f1fa8c">&amp;#34;/&amp;#34;&lt;/span>&lt;span style="color:#ff79c6">}]}}]}}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> kubernetes.io/ingress.class: nginx
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Events:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Type Reason Age From Message
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ---- ------ ---- ---- -------
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Normal CREATE 28s nginx-ingress-controller Ingress spinnaker/spinnaker-nginx-ingress
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Normal UPDATE 20s nginx-ingress-controller Ingress spinnaker/spinnaker-nginx-ingress
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Set up DNS so that your two URLs point to the IP address for the ingress (in the above, configure &lt;code>spinnaker.some-url.com&lt;/code> and &lt;code>api.some-url.com&lt;/code> to point to &lt;code>35.233.216.189&lt;/code>). This can be done via whatever your organization uses for DNS.&lt;/p>
&lt;h2 id="configuring-tls-certificates">Configuring TLS certificates&lt;/h2>
&lt;p>Configuration of TLS certificates for ingresses is often very organization-specific. In general, you would want to do the following:&lt;/p>
&lt;ul>
&lt;li>Add certificate(s) so that your ingress controller can use them&lt;/li>
&lt;li>Configure the ingress(es) so that NGINX (or your ingress) terminates TLS using the certificate(s)&lt;/li>
&lt;li>Update Armory to be aware of the new TLS endpoints (note &lt;code>https&lt;/code> instead of &lt;code>http&lt;/code>)&lt;/li>
&lt;/ul>
&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">SPIN_DECK_ENDPOINT&lt;/span>&lt;span style="color:#ff79c6">=&lt;/span>spinnaker.some-url.com
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8be9fd;font-style:italic">SPIN_GATE_ENDPOINT&lt;/span>&lt;span style="color:#ff79c6">=&lt;/span>api.some-url.com
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8be9fd;font-style:italic">SPIN_DECK_URL&lt;/span>&lt;span style="color:#ff79c6">=&lt;/span>https://&lt;span style="color:#f1fa8c">${&lt;/span>&lt;span style="color:#8be9fd;font-style:italic">SPIN_DECK_ENDPOINT&lt;/span>&lt;span style="color:#f1fa8c">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8be9fd;font-style:italic">SPIN_GATE_URL&lt;/span>&lt;span style="color:#ff79c6">=&lt;/span>https://&lt;span style="color:#f1fa8c">${&lt;/span>&lt;span style="color:#8be9fd;font-style:italic">SPIN_GATE_ENDPOINT&lt;/span>&lt;span style="color:#f1fa8c">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>hal config security ui edit --override-base-url &lt;span style="color:#f1fa8c">${&lt;/span>&lt;span style="color:#8be9fd;font-style:italic">SPIN_DECK_URL&lt;/span>&lt;span style="color:#f1fa8c">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>hal config security api edit --override-base-url &lt;span style="color:#f1fa8c">${&lt;/span>&lt;span style="color:#8be9fd;font-style:italic">SPIN_GATE_URL&lt;/span>&lt;span style="color:#f1fa8c">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>hal deploy apply
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="next-steps">Next steps&lt;/h2>
&lt;p>Now that you have Armory up and running, here are some of the next things you may want to do:&lt;/p>
&lt;ul>
&lt;li>Configuration of certificates to secure your cluster (see &lt;a href="#configuring-tls-certificates">this section&lt;/a> for notes on this)&lt;/li>
&lt;li>Configuration of Authentication/Authorization (see the &lt;a href="https://www.spinnaker.io/setup/security/">Open Source Spinnaker documentation&lt;/a>)&lt;/li>
&lt;li>Add Kubernetes accounts to deploy applications to (see &lt;a href="/continuous-deployment/armory-admin/kubernetes-account-add/">Creating and Adding a Kubernetes Account to Armory as a Deployment Target&lt;/a>)&lt;/li>
&lt;li>Add GCP accounts to deploy applications to (see the &lt;a href="https://www.spinnaker.io/setup/install/providers/gce/">Open Source Spinnaker documentation&lt;/a>)&lt;/li>
&lt;li>Add AWS accounts to deploy applications to (see the &lt;a href="https://www.spinnaker.io/setup/install/providers/aws/">Open Source Spinnaker documentation&lt;/a>)&lt;/li>
&lt;/ul></description></item><item><title>Continuous-Deployment: Spinnaker Nomenclature and Naming Conventions</title><link>/continuous-deployment/overview/naming-conventions/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/continuous-deployment/overview/naming-conventions/</guid><description>
&lt;h2 id="nomenclature">Nomenclature&lt;/h2>
&lt;h3 id="application">Application&lt;/h3>
&lt;p>An application inside Spinnaker represents what you would typically find in a single code repository - and in many cases, an application maps directly to a microservice.&lt;/p>
&lt;figure>
&lt;img src="/images/overview/application.png"/>
&lt;/figure>
&lt;h3 id="cluster">Cluster&lt;/h3>
&lt;p>A server group is a regional view of servers, whereas a cluster is a world-wide view of server groups.&lt;/p>
&lt;figure>
&lt;img src="/images/overview/cluster.png"/>
&lt;/figure>
&lt;h3 id="execution">Execution&lt;/h3>
&lt;p>When a pipeline runs, the end result is called an execution.&lt;/p>
&lt;figure>
&lt;img src="/images/overview/execution.png"/>
&lt;/figure>
&lt;h3 id="pipeline">Pipeline&lt;/h3>
&lt;p>A pipeline in Spinnaker is a series of stages linked together that can be executed serially or in parallel. All pipelines are defined in the context of an application. A typical pipeline will contain stages for “creating images”, “testing”, and “deploying”. The process of “creating images” is also commonly referred to as a “bake”.&lt;/p>
&lt;figure>
&lt;img src="/images/overview/pipeline.png"/>
&lt;/figure>
&lt;h3 id="project">Project&lt;/h3>
&lt;p>A project inside Spinnaker is a logical grouping of applications. For example, we might create a project called “Spinnaker” and its applications would be “Deck”, “Orca”, “Clouddriver”, etc. Spinnaker provides a helpful dashboard view for each project to visualize its applications and status of each application contained within it.&lt;/p>
&lt;figure>
&lt;img src="/images/overview/project-dashboard.png"/>
&lt;/figure>
&lt;h3 id="server-group">Server Group&lt;/h3>
&lt;p>From an Amazon Web Service (AWS) point of view, a server group is represented by an auto-scaling group (ASGs). All applications that are deployed by Spinnaker are deployed to server groups.&lt;/p>
&lt;figure>
&lt;img src="images/overview/cluster.png"/>
&lt;/figure>
&lt;h3 id="stage">Stage&lt;/h3>
&lt;p>Within a pipeline, the tasks that pipeline performs are called stages.&lt;/p>
&lt;figure>
&lt;img src="/images/overview/pipeline.png"/>
&lt;/figure>
&lt;h3 id="trigger">Trigger&lt;/h3>
&lt;p>A trigger is the entry point to a pipeline.&lt;/p>
&lt;figure>
&lt;img src="/images/overview/trigger.png"/>
&lt;/figure>
&lt;h2 id="spinnaker-naming-conventions">Spinnaker Naming Conventions&lt;/h2>
&lt;p>Spinnaker has very specific naming conventions that help it identify resources in your cloud account.&lt;/p>
&lt;p>Clusters and server groups follow the convention &lt;code>application_name-stack-detail-infrastructure_version&lt;/code>&lt;/p>
&lt;h3 id="application-1">Application&lt;/h3>
&lt;p>The &amp;lsquo;Name&amp;rsquo; is the name of your application in Spinnaker.&lt;/p>
&lt;h3 id="stack">Stack&lt;/h3>
&lt;p>You can think of a &amp;lsquo;Stack&amp;rsquo; as a tag you give to anything that you want to be integrated together. Environments are usually a good example of something you would tag with a Stack. If you have an app that has an ELB, a Cache, and an ASG, usually you would want to run integration tests on your staging environment separately from your production environment. In that case, you would give the staging ELB, Cache, and ASG all the “staging” stack, while prod ELB, Cache, and ASG would be the “prod” stack.&lt;/p>
&lt;p>Note that Stack names are defined by the user in the Spinnaker configuration User Interface (UI).&lt;/p>
&lt;h3 id="detail">Detail&lt;/h3>
&lt;p>Detail is also user-defined and can be any additional piece of information you want to label your cluster and server group with.&lt;/p>
&lt;h3 id="infrastructure-version">Infrastructure Version&lt;/h3>
&lt;p>The infrastructure&amp;rsquo;s version number; such as v011, v012, etc. This is automatically appended and is not user defined.&lt;/p>
&lt;p>In AWS, Spinnaker will name your ASGs and Launch Configurations according to the naming convention mentioned above (ie. “armoryspinnaker-prod-polling-v015”).&lt;/p>
&lt;figure>
&lt;img src="/images/Image-2017-03-24-at-3.10.53-PM.png"/>
&lt;/figure>
&lt;p>Please note that if your user definition includes a hyphen, it will disrupt the naming convention.&lt;/p></description></item><item><title>Continuous-Deployment: Deploy and manage a Spinnaker Application with Quick Spin</title><link>/continuous-deployment/try/quickstart-quick-spin/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/continuous-deployment/try/quickstart-quick-spin/</guid><description>
&lt;h2 id="learning-objectives">Learning objectives&lt;/h2>
&lt;p>This tutorial demonstrates how to:&lt;/p>
&lt;ul>
&lt;li>Create a Spinnaker application&lt;/li>
&lt;li>Deploy and manage a Spinnaker pipeline for your application&lt;/li>
&lt;li>Deploy updates to the application&lt;/li>
&lt;li>Monitor the health of your application&lt;/li>
&lt;/ul>
&lt;h2 id="before-you-begin">Before you begin&lt;/h2>
&lt;p>Before you begin make sure you have installed Quick Spin and have an active instance running on &lt;code>locahost:9000&lt;/code> as described in &lt;a href="/continuous-deployment/try/instructions/"}>Instructions for Trying Armory Continuous Deployment Self-Hosted&lt;/a>.&lt;/p>
&lt;ul>
&lt;li>Make sure you have installed Quick Spin and have an active instance running on &lt;code>locahost:9000&lt;/code>. See &lt;a href="/continuous-deployment/try/instructions/"}>Instructions for Trying Armory Continuous Deployment Self-Hosted&lt;/a>.&lt;/li>
&lt;li>You have an active GitHub account.&lt;/li>
&lt;li>You have Javascript enabled in your favorite code editor.&lt;/li>
&lt;/ul>
&lt;h2 id="create-a-minikube-or-kind-cluster">Create a minikube or kind cluster&lt;/h2>
&lt;p>(Refer to topic explaining how to create these types of K8s)&lt;/p>
&lt;h2 id="run-the-spinnaker-prep-pipeline">Run the Spinnaker prep pipeline&lt;/h2>
&lt;h2 id="fork-the-tutorial-repository">Fork the tutorial repository:&lt;/h2>
&lt;ol>
&lt;li>Navigate to:
&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-fallback" data-lang="fallback">&lt;span style="display:flex;">&lt;span>https://github.com/arnab-datta/counter-app
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>Create a fork to your personal GitHub account.&lt;/li>
&lt;li>(Optional) Clone the fork.&lt;/li>
&lt;/ol>
&lt;h2 id="create-an-application">Create an application&lt;/h2>
&lt;ol>
&lt;li>Navigate to the running Quick Spin instance:
&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-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>http://localhost:9000
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>Select Create Application.&lt;/li>
&lt;li>&lt;/li>
&lt;/ol>
&lt;h2 id="update-the-application">Update the application&lt;/h2>
&lt;h2 id="monitor-the-pipeline">Monitor the pipeline&lt;/h2>
&lt;h2 id="tear-down-an-environment">Tear down an environment&lt;/h2>
&lt;h2 id="next-steps">Next steps&lt;/h2></description></item><item><title>Continuous-Deployment: Spinnaker™ Architecture</title><link>/continuous-deployment/overview/architecture/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/continuous-deployment/overview/architecture/</guid><description>
&lt;h2 id="armory-continuous-deployment-architecture">Armory Continuous Deployment architecture&lt;/h2>
&lt;p>Armory Continuous Deployment is an enterprise version of open source &lt;a href="https://spinnaker.io/">Spinnaker&lt;/a>. It is composed of several microservices for resiliency and follows the single-responsibility principle. It allows for faster iteration on each individual component and a more pluggable architecture for custom components. See the open source Spinnaker &lt;a href="https://spinnaker.io/docs/reference/architecture/microservices-overview/#system-dependencies">microservices overview&lt;/a> for port mappings and a table of service interdependencies.&lt;/p>
&lt;figure>
&lt;img src="/images/overview/SpinnakerArchitecture.png"/>
&lt;/figure>
&lt;h2 id="armory-continuous-deployment-microservices">Armory Continuous Deployment microservices&lt;/h2>
&lt;h3 id="clouddriver">Clouddriver&lt;/h3>
&lt;p>Clouddriver is a core component of Armory Continuous Deployment and facilitates the interaction between a given cloud provider such as AWS, GCP or Kubernetes. There is a common interface that is used so that additional cloud providers can be added.&lt;/p>
&lt;h3 id="deck">Deck&lt;/h3>
&lt;p>Deck is the UI for interactive and visualizing the state of cloud resources. It depends on Gate to interact with the cloud providers.&lt;/p>
&lt;h3 id="echo">Echo&lt;/h3>
&lt;p>Echo is the service for Spinnaker which manages notifications, alerts and scheduled pipelines (Cron). It can also propagate these events out to other REST endpoints such as an Elastic Search, Splunk&amp;rsquo;s HTTP Event Collector or a custom event collector/processor.&lt;/p>
&lt;h3 id="fiat">Fiat&lt;/h3>
&lt;p>Fiat is the microservice responsible for authorization (authz) for the other microservices. By default, it is not enabled, so users are able to perform any action in Armory Continuous Deployment.&lt;/p>
&lt;h3 id="front50">Front50&lt;/h3>
&lt;p>Front50 is the persistent datastore for Spinnaker. Most notabily pipelines, configurations, and jobs.&lt;/p>
&lt;h3 id="gate">Gate&lt;/h3>
&lt;p>Gate is the front-end API that is exposed to the users of your Spinnaker instance. It also manages authentication and authorization for sub-service APIs and resources with Spinnaker. All communication between the UI and the back-end services happen through Gate. You can find a list of the endpoints available through Swagger: &lt;code>http://${GATE_HOST}:8084/swagger-ui.html&lt;/code>&lt;/p>
&lt;h3 id="igor">Igor&lt;/h3>
&lt;p>Igor is a wrapper API which communicates with Jenkins. It is responsible for kicking-off jobs and reporting the state of running or completing jobs.&lt;/p>
&lt;h3 id="kayenta">Kayenta&lt;/h3>
&lt;p>Kayenta is Spinnaker&amp;rsquo;s canary analysis service, integrating with 3rd party monitoring services such as Datadog or Prometheus.&lt;/p>
&lt;h3 id="orca">Orca&lt;/h3>
&lt;p>Orca is responsible for the orchestration of pipelines, stages, and tasks within Armory Continuous Deployment. Orca acts as the &amp;ldquo;traffic cop&amp;rdquo; within Armory Continuous Deployment making sure that sub-services, their executions and states are passed along correctly.&lt;/p>
&lt;p>The smallest atomic unit within Orca is a task - stages are composed of tasks and pipelines are composed of stages.&lt;/p>
&lt;h3 id="rosco">Rosco&lt;/h3>
&lt;p>Rosco is the &amp;ldquo;bakery&amp;rdquo; service. It is a wrapper around Hashicorp&amp;rsquo;s Packer command line tool which bakes images for AWS, GCP, Docker, Azure, and &lt;a href="https://www.packer.io/docs/builders">other builders&lt;/a>.&lt;/p>
&lt;h2 id="armory-continuous-deployment-proprietary-microservices">Armory Continuous Deployment proprietary microservices&lt;/h2>
&lt;p>&lt;img src="/images/proprietary.svg" alt="Proprietary">&lt;/p>
&lt;h3 id="armory-scale-agent-for-spinnaker-and-kubernetes">Armory Scale Agent for Spinnaker and Kubernetes&lt;/h3>
&lt;p>The &lt;a href="/plugins/scale-agent/"}>Scale Agent for Spinnaker and Kubernetes&lt;/a> is a lightweight, scalable service that monitors your Kubernetes infrastructure and streams changes back to the Clouddriver service.&lt;/p>
&lt;h3 id="dinghy">Dinghy&lt;/h3>
&lt;p>&lt;a href="/plugins/pipelines-as-code/">Dinghy&lt;/a> is the microservice used to manage Pipelines-as-Code. It supports two main capabilities:&lt;/p>
&lt;ul>
&lt;li>Automatically synchronizing pipeline definitions from an external Github or BitBucket repository to Armory.&lt;/li>
&lt;li>Creating a library of pipeline modules (components) that can be templatized and used in Dinghy-managed pipeline definitions.&lt;/li>
&lt;/ul>
&lt;h3 id="policy-engine">Policy Engine&lt;/h3>
&lt;p>The &lt;a href="/plugins/policy-engine/">Armory Policy Engine&lt;/a> is designed to allow enterprises more complete control of their software delivery process by providing them with the hooks necessary to perform more extensive verification of their pipelines and processes in Spinnaker. This policy engine is backed by Open Policy Agent(OPA) and uses input style documents to perform validation of pipelines during save time and runtime&lt;/p>
&lt;h3 id="terraformer">Terraformer&lt;/h3>
&lt;p>&lt;a href="/continuous-deployment/armory-admin/terraform-enable-integration/">Terraformer&lt;/a> is the microservice behind Armory&amp;rsquo;s Terraform Integration. It allows Armory to natively use your infrastructure-as-code Terraform scripts as part of a deployment pipeline.&lt;/p>
&lt;h2 id="installation-and-management">Installation and management&lt;/h2>
&lt;p>&lt;img src="/images/proprietary.svg" alt="Proprietary">&lt;/p>
&lt;h3 id="armory-operator">Armory Operator&lt;/h3>
&lt;p>The &lt;a href="/continuous-deployment/installation/armory-operator/">Armory Operator&lt;/a> is a Kubernetes Operator that makes it easy to install, deploy, and upgrade Armory Continuous Deployment.&lt;/p></description></item><item><title>Continuous-Deployment: Configure Armory Continuous Deployment Using a Manifest File</title><link>/continuous-deployment/installation/armory-operator/op-config-manifest/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/continuous-deployment/installation/armory-operator/op-config-manifest/</guid><description>
&lt;blockquote>
&lt;p>This guide is for both the Armory Operator and the Spinnaker Operator. Armory Continuous Deployment and Spinnaker configuration is the same except for features only in Armory Continuous Deployment. Those features are marked &lt;img src="/images/proprietary.svg" alt="Proprietary">.&lt;/p>
&lt;/blockquote>
&lt;h2 id="before-you-begin">Before you begin&lt;/h2>
&lt;ul>
&lt;li>This guide assumes you want to expand the manifest file used in the Quickstart.&lt;/li>
&lt;li>You know how to deploy Armory Continuous Deployment using a Kubernetes manifest file. See the Quickstart&amp;rsquo;s &lt;a href="/continuous-deployment/installation/armory-operator/op-quickstart/#single-manifest-file-option">Single manifest file section&lt;/a>.&lt;/li>
&lt;/ul>
&lt;h2 id="kubernetes-manifest-file">Kubernetes manifest file&lt;/h2>
&lt;p>The structure of the manifest file is the same whether you are using the Armory Operator or the Spinnaker Operator. The value of certain keys, though, depends on whether you are deploying Armory Continuous Deployment or Spinnaker. The following snippet is the first several lines from a &lt;code>spinnakerservice.yml&lt;/code> manifest that deploys Armory Continuous Deployment.&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="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"> 1
&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"> 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="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;/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; background-color:#3d3f4a">&lt;span>&lt;span style="color:#ff79c6">apiVersion&lt;/span>: spinnaker.armory.io/v1alpha2
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">kind&lt;/span>: SpinnakerService
&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
&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">spinnakerConfig&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; background-color:#3d3f4a">&lt;span> &lt;span style="color:#ff79c6">version&lt;/span>: &amp;lt;version&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">persistentStorage&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">persistentStoreType&lt;/span>: s3
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">s3&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">bucket&lt;/span>: &amp;lt;s3-bucket-name&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">rootFolder&lt;/span>: front50&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>
&lt;ul>
&lt;li>Line 1: &lt;code>apiVersion&lt;/code> is the CRD version of the &lt;code>SpinnakerService&lt;/code> custom resource.
&lt;ul>
&lt;li>If you are deploying Armory Continuous Deployment, the value is &lt;code>spinnaker.armory.io/v1alpha2&lt;/code>; if you change this value, the Armory Operator won&amp;rsquo;t process the manifest file.&lt;/li>
&lt;li>If you are deploying Spinnaker, the value is &lt;code>spinnaker.io/v1alpha2&lt;/code>; if you change this value, the Spinnaker Operator won&amp;rsquo;t process the manifest file.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Line 8: &lt;code>spec.spinnakerConfig.config.version&lt;/code>
&lt;ul>
&lt;li>If you are using the Armory Operator, this is the &lt;a href="/continuous-deployment/release-notes/rn-armory-spinnaker/">version of Armory Continuous Deployment&lt;/a> you want to deploy; for example, 2.34.&lt;/li>
&lt;li>If you are using the Spinnaker Operator, this is the &lt;a href="https://spinnaker.io/community/releases/versions/">version of Spinnaker&lt;/a> you want to deploy; for example, &lt;code>1.25&lt;/code>.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;details>&lt;summary>Expand to see a skeleton manifest file&lt;/summary>
&lt;p>This file is from the public &lt;code>armory/spinnaker-operator&lt;/code> &lt;a href="https://github.com/armory/spinnaker-operator/blob/master/deploy/spinnaker/complete/spinnakerservice.yml">repo&lt;/a>. You use this file to configure and deploy Spinnaker. Note that the &lt;code>apiVersion&lt;/code> is the SpinnakerService CRD used by the Spinnaker Operator.&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">apiVersion&lt;/span>: spinnaker.io/v1alpha2
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">kind&lt;/span>: SpinnakerService
&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
&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:#6272a4"># spec.spinnakerConfig - This section is how to specify configuration spinnaker&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">spinnakerConfig&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6272a4"># spec.spinnakerConfig.config - This section contains the contents of a deployment found in a halconfig .deploymentConfigurations[0]&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:#ff79c6">version&lt;/span>: &lt;span style="color:#bd93f9">1.28.1&lt;/span> &lt;span style="color:#6272a4"># the version of Spinnaker to be deployed&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">persistentStorage&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">persistentStoreType&lt;/span>: s3
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">s3&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">bucket&lt;/span>: &amp;lt;change-me&amp;gt; &lt;span style="color:#6272a4"># Change to a unique name. Spinnaker stores application and pipeline definitions here&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">rootFolder&lt;/span>: front50
&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:#6272a4"># spec.spinnakerConfig.profiles - This section contains the YAML of each service&amp;#39;s profile&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">profiles&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">clouddriver&lt;/span>: {} &lt;span style="color:#6272a4"># is the contents of ~/.hal/default/profiles/clouddriver.yml&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6272a4"># deck has a special key &amp;#34;settings-local.js&amp;#34; for the contents of settings-local.js&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:#6272a4"># settings-local.js - contents of ~/.hal/default/profiles/settings-local.js&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6272a4"># Use the | YAML symbol to indicate a block-style multiline string&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">settings-local.js&lt;/span>: |&lt;span style="color:#f1fa8c">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> &lt;/span> window.spinnakerSettings.feature.kustomizeEnabled = true;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">echo&lt;/span>: {} &lt;span style="color:#6272a4"># is the contents of ~/.hal/default/profiles/echo.yml&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">fiat&lt;/span>: {} &lt;span style="color:#6272a4"># is the contents of ~/.hal/default/profiles/fiat.yml&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">front50&lt;/span>: {} &lt;span style="color:#6272a4"># is the contents of ~/.hal/default/profiles/front50.yml&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">gate&lt;/span>: {} &lt;span style="color:#6272a4"># is the contents of ~/.hal/default/profiles/gate.yml&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">igor&lt;/span>: {} &lt;span style="color:#6272a4"># is the contents of ~/.hal/default/profiles/igor.yml&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">kayenta&lt;/span>: {} &lt;span style="color:#6272a4"># is the contents of ~/.hal/default/profiles/kayenta.yml&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">orca&lt;/span>: {} &lt;span style="color:#6272a4"># is the contents of ~/.hal/default/profiles/orca.yml&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">rosco&lt;/span>: {} &lt;span style="color:#6272a4"># is the contents of ~/.hal/default/profiles/rosco.yml&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:#6272a4"># spec.spinnakerConfig.service-settings - This section contains the YAML of the service&amp;#39;s service-setting&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6272a4"># see https://www.spinnaker.io/reference/halyard/custom/#tweakable-service-settings for available settings&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">service-settings&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">deck&lt;/span>: {}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">echo&lt;/span>: {}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">fiat&lt;/span>: {}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">front50&lt;/span>: {}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">gate&lt;/span>: {}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">igor&lt;/span>: {}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">kayenta&lt;/span>: {}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">orca&lt;/span>: {}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">rosco&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:#6272a4"># spec.spinnakerConfig.files - This section allows you to include any other raw string files not handle above.&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6272a4"># The KEY is the filepath and filename of where it should be placed&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6272a4"># - Files here will be placed into ~/.hal/default/ on halyard&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6272a4"># - __ is used in place of / for the path separator&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6272a4"># The VALUE is the contents of the file.&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6272a4"># - Use the | YAML symbol to indicate a block-style multiline string&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6272a4"># - We currently only support string files&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6272a4"># - NOTE: Kubernetes has a manifest size limitation of 1MB&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">files&lt;/span>: {}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6272a4"># profiles__rosco__packer__example-packer-config.json: |&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6272a4"># {&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6272a4"># &amp;#34;packerSetting&amp;#34;: &amp;#34;someValue&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6272a4"># }&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6272a4"># profiles__rosco__packer__my_custom_script.sh: |&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6272a4"># #!/bin/bash -e&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6272a4"># echo &amp;#34;hello world!&amp;#34;&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:#6272a4"># spec.expose - This section defines how Spinnaker should be publicly exposed&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">expose&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">type: service # Kubernetes LoadBalancer type (service/ingress), note&lt;/span>: only &amp;#34;service&amp;#34; is supported for now
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">service&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">type&lt;/span>: LoadBalancer
&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:#6272a4"># annotations to be set on Kubernetes LoadBalancer type&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6272a4"># they will only apply to spin-gate, spin-gate-x509, or spin-deck&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">annotations&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">service.beta.kubernetes.io/aws-load-balancer-backend-protocol&lt;/span>: http
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6272a4"># uncomment the line below to provide an AWS SSL certificate to terminate SSL at the LoadBalancer&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6272a4">#service.beta.kubernetes.io/aws-load-balancer-ssl-cert: arn:aws:acm:us-west-2:9999999:certificate/abc-123-abc&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:#6272a4"># provide an override to the exposing KubernetesService&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">overrides&lt;/span>: {}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6272a4"># Provided below is the example config for the Gate-X509 configuration&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6272a4"># deck:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6272a4"># annotations:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6272a4"># service.beta.kubernetes.io/aws-load-balancer-ssl-cert: arn:aws:acm:us-west-2:9999999:certificate/abc-123-abc&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6272a4"># service.beta.kubernetes.io/aws-load-balancer-backend-protocol: http&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6272a4"># gate:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6272a4"># annotations:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6272a4"># service.beta.kubernetes.io/aws-load-balancer-ssl-cert: arn:aws:acm:us-west-2:9999999:certificate/abc-123-abc&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6272a4"># service.beta.kubernetes.io/aws-load-balancer-backend-protocol: https # X509 requires https from LoadBalancer -&amp;gt; Gate&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6272a4"># gate-x509:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6272a4"># annotations:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6272a4"># service.beta.kubernetes.io/aws-load-balancer-backend-protocol: tcp&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6272a4"># service.beta.kubernetes.io/aws-load-balancer-ssl-cert: null&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6272a4"># publicPort: 443&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">validation&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:#6272a4"># Patching of generated service or deployment by Spinnaker service.&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6272a4"># Like in Kustomize, several patch types are supported. See&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6272a4"># https://github.com/armory/spinnaker-operator/blob/master/doc/options.md#speckustomize&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">kustomize&lt;/span>: {}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6272a4"># An example to change Gate&amp;#39;s image name using a strategic merge patch&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6272a4"># gate:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6272a4"># deployment:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6272a4"># patchesStrategicMerge:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6272a4"># - |&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6272a4"># spec:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6272a4"># template:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6272a4"># spec:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6272a4"># containers:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6272a4"># - name: gate&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6272a4"># image: gate:1.0.0&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;/details>
&lt;h2 id="manifest-sections">Manifest sections&lt;/h2>
&lt;h3 id="metadataname">metadata.name&lt;/h3>
&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">apiVersion: apiVersion&lt;/span>: spinnaker.armory.io/v1alpha2
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">kind&lt;/span>: SpinnakerService
&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
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;code>metadata.name&lt;/code> is the name of your Armory Continuous Deployment service. Use this name to view, edit, or delete Armory Continuous Deployment. The following example uses the name &lt;code>prod&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>$ kubectl get spinsvc prod
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Note that you can use &lt;code>spinsvc&lt;/code> for brevity. You can also use &lt;code>spinnakerservices.spinnaker.armory.io&lt;/code> (Armory Continuous Deployment) or &lt;code>spinnakerservices.spinnaker.io&lt;/code> (Spinnaker).&lt;/p>
&lt;h3 id="specspinnakerconfig">spec.spinnakerConfig&lt;/h3>
&lt;p>Contains the same information as the &lt;code>deploymentConfigurations&lt;/code> entry in a Halyard configuration.&lt;/p>
&lt;p>For example, given the following &lt;code>~/.hal/config&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">currentDeployment&lt;/span>: default
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">deploymentConfigurations&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>- &lt;span style="color:#ff79c6">name&lt;/span>: default
&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.17.1&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">persistentStorage&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">persistentStoreType&lt;/span>: s3
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">s3&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">bucket&lt;/span>: mybucket
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">rootFolder&lt;/span>: front50
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>The equivalent of that Halyard configuration is the following &lt;code>spec.spinnakerConfig&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">apiVersion: apiVersion&lt;/span>: spinnaker.armory.io/v1alpha2
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">kind&lt;/span>: SpinnakerService
&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
&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">spinnakerConfig&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:#ff79c6">version&lt;/span>: &lt;span style="color:#bd93f9">2.17.1&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">persistentStorage&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">persistentStoreType&lt;/span>: s3
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">s3&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">bucket&lt;/span>: mybucket
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">rootFolder&lt;/span>: front50
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;code>spec.spinnakerConfig.config&lt;/code> contains the following sections:&lt;/p>
&lt;ul>
&lt;li>&lt;a href="/continuous-deployment/installation/armory-operator/op-manifest-reference/armory/">armory&lt;/a> &lt;img src="/images/proprietary.svg" alt="Proprietary">&lt;/li>
&lt;li>&lt;a href="/continuous-deployment/installation/armory-operator/op-manifest-reference/artifact/">artifact&lt;/a>&lt;/li>
&lt;li>&lt;a href="/continuous-deployment/installation/armory-operator/op-manifest-reference/canary-op-config/">canary&lt;/a>&lt;/li>
&lt;li>&lt;a href="/continuous-deployment/installation/armory-operator/op-manifest-reference/ci/">ci&lt;/a>&lt;/li>
&lt;li>&lt;a href="/continuous-deployment/installation/armory-operator/op-manifest-reference/deploy/">deploymentEnvironment&lt;/a>&lt;/li>
&lt;li>&lt;a href="/continuous-deployment/installation/armory-operator/op-manifest-reference/features/">features&lt;/a>&lt;/li>
&lt;li>&lt;a href="/continuous-deployment/installation/armory-operator/op-manifest-reference/metricstores/">metricStores&lt;/a>&lt;/li>
&lt;li>&lt;a href="/continuous-deployment/installation/armory-operator/op-manifest-reference/notification/">notification&lt;/a>&lt;/li>
&lt;li>&lt;a href="/continuous-deployment/installation/armory-operator/op-manifest-reference/persistent-storage/">persistentStorage&lt;/a>&lt;/li>
&lt;li>&lt;a href="/plugins/">plugins&lt;/a>&lt;/li>
&lt;li>&lt;a href="/continuous-deployment/installation/armory-operator/op-manifest-reference/providers/">providers&lt;/a>&lt;/li>
&lt;li>&lt;a href="/continuous-deployment/installation/armory-operator/op-manifest-reference/pubsub/">pubsub&lt;/a>&lt;/li>
&lt;li>&lt;a href="/continuous-deployment/installation/armory-operator/op-manifest-reference/repository/">repository&lt;/a>&lt;/li>
&lt;li>&lt;a href="/continuous-deployment/installation/armory-operator/op-manifest-reference/security/">security&lt;/a>&lt;/li>
&lt;li>&lt;a href="/continuous-deployment/installation/armory-operator/op-manifest-reference/stats/">stats&lt;/a>&lt;/li>
&lt;li>&lt;a href="/continuous-deployment/installation/armory-operator/op-manifest-reference/op-webhook/">webhook&lt;/a>&lt;/li>
&lt;/ul>
&lt;h3 id="specspinnakerconfigprofiles">spec.spinnakerConfig.profiles&lt;/h3>
&lt;p>Configuration for each service profile. This is the equivalent of &lt;code>~/.hal/default/profiles/&amp;lt;service&amp;gt;-local.yml&lt;/code>. For example the following &lt;code>profile&lt;/code> is for Gate:&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">spec&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">spinnakerConfig&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>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">profiles&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">gate&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">default&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">apiPort&lt;/span>: &lt;span style="color:#bd93f9">8085&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Note that for Deck, the profile is a string under the key &lt;code>settings-local.js&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">spec&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">spinnakerConfig&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>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">profiles&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">settings-local.js&lt;/span>: |&lt;span style="color:#f1fa8c">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> &lt;/span> window.spinnakerSettings.feature.artifactsRewrite = true;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="specspinnakerconfigservice-settings">spec.spinnakerConfig.service-settings&lt;/h3>
&lt;p>Settings for each service. This is the equivalent of &lt;code>~/.hal/default/service-settings/&amp;lt;service&amp;gt;.yml&lt;/code>. For example the following settings are for Clouddriver:&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">spec&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">spinnakerConfig&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>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">service-settings&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">kubernetes&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">serviceAccountName&lt;/span>: spin-sa
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="specspinnakerconfigfiles">spec.spinnakerConfig.files&lt;/h3>
&lt;p>Contents of any local files that should be added to the services. For example to reference the contents of a kubeconfig 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">spec&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">spinnakerConfig&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:#ff79c6">providers&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">kubernetes&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">enabled&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">accounts&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">name&lt;/span>: cluster-1
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">kubeconfigFile&lt;/span>: cluster1-kubeconfig
&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">files&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">cluster1-kubeconfig&lt;/span>: |&lt;span style="color:#f1fa8c">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> &lt;/span> &amp;lt;FILE CONTENTS HERE&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>A double underscore (&lt;code>__&lt;/code>) in the file name is translated to a path separator (&lt;code>/&lt;/code>). For example to add custom packer templates:&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">files&lt;/span>: {}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">profiles__rosco__packer__example-packer-config.json&lt;/span>: |&lt;span style="color:#f1fa8c">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> {
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> &amp;#34;packerSetting&amp;#34;: &amp;#34;someValue&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> }&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">profiles__rosco__packer__my_custom_script.sh&lt;/span>: |&lt;span style="color:#f1fa8c">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> #!/bin/bash -e
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> echo &amp;#34;hello world!&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="specexpose">spec.expose&lt;/h3>
&lt;p>Optional. Controls how Armory Continuous Deploymentgets exposed. If you omit it, no load balancer gets created. If this section gets removed, the Load Balancer does not get deleted.&lt;/p>
&lt;p>Use the following configurations:&lt;/p>
&lt;ul>
&lt;li>&lt;code>spec.expose.type&lt;/code>: How Armory Continuous Deploymentgets exposed. Currently, only &lt;code>service&lt;/code> is supported, which uses Kubernetes services to expose Spinnaker.&lt;/li>
&lt;li>&lt;code>spec.expose.service&lt;/code>: Service configuration&lt;/li>
&lt;li>&lt;code>spec.expose.service.type&lt;/code>: Should match a valid Kubernetes service type (i.e. &lt;code>LoadBalancer&lt;/code>, &lt;code>NodePort&lt;/code>, or &lt;code>ClusterIP&lt;/code>).&lt;/li>
&lt;li>&lt;code>spec.expose.service.annotations&lt;/code>: Map containing annotations to be added to Gate (API) and Deck (UI) services.&lt;/li>
&lt;li>&lt;code>spec.expose.service.overrides&lt;/code>: Map with key for overriding the service type and specifying extra annotations: Armory Continuous Deploymentservice name (Gate or Deck) and value. By default, all services receive the same annotations. You can override annotations for a Deck (UI) or Gate (API) services.&lt;/li>
&lt;/ul>
&lt;h3 id="specvalidation">spec.validation&lt;/h3>
&lt;p>&lt;strong>Currently these configurations are experimental. By default, the Operator always validates Kubernetes accounts when applying a SpinnakerService manifest.&lt;/strong>&lt;/p>
&lt;p>Validation options that apply to all validations that Operator performs:&lt;/p>
&lt;ul>
&lt;li>&lt;code>spec.validation.failOnError&lt;/code>: Boolean. Defaults to true. If false, the validation runs and the results are logged, but the service is always considered valid.&lt;/li>
&lt;li>&lt;code>spec.validation.failFast&lt;/code>: Boolean. Defaults to false. If true, validation stops at the first error.&lt;/li>
&lt;li>&lt;code>spec.validation.frequencySeconds&lt;/code>: Optional. Integer. Define a grace period before a validation runs again. For example, if you specify a value of &lt;code>120&lt;/code> and edit the &lt;code>SpinnakerService&lt;/code> without changing an account within a 120 second window, the validation on that account does not run again.&lt;/li>
&lt;/ul>
&lt;p>Additionally, the following settings are specific to Kubernetes, Docker, AWS, AWS S3, CI tools, metric stores, persistent storage, or notification systems:&lt;/p>
&lt;ul>
&lt;li>&lt;code>spec.validation.providers.kubernetes&lt;/code>&lt;/li>
&lt;li>&lt;code>spec.validation.providers.docker&lt;/code>&lt;/li>
&lt;li>&lt;code>spec.validation.providers.aws&lt;/code>&lt;/li>
&lt;li>&lt;code>spec.validation.providers.s3&lt;/code>&lt;/li>
&lt;li>&lt;code>spec.validation.providers.ci&lt;/code>&lt;/li>
&lt;li>&lt;code>spec.validation.providers.metricStores&lt;/code>&lt;/li>
&lt;li>&lt;code>spec.validation.providers.persistentStorage&lt;/code>&lt;/li>
&lt;li>&lt;code>spec.validation.providers.notifications&lt;/code>&lt;/li>
&lt;/ul>
&lt;p>Supported settings are &lt;code>enabled&lt;/code> (set to false to turn off validations), &lt;code>failOnError&lt;/code>, and &lt;code>frequencySeconds&lt;/code>.&lt;/p>
&lt;p>The following example disables all Kubernetes account validations:&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">spec&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">validation&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">providers&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">kubernetes&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">enabled&lt;/span>: &lt;span style="color:#ff79c6">false&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="specaccounts">spec.accounts&lt;/h3>
&lt;p>Support for &lt;code>SpinnakerAccount&lt;/code> CRD (&lt;strong>Experimental&lt;/strong>):&lt;/p>
&lt;ul>
&lt;li>&lt;code>spec.accounts.enabled&lt;/code>: Boolean. Defaults to false. If true, the &lt;code>SpinnakerService&lt;/code> uses all &lt;code>SpinnakerAccount&lt;/code> objects enabled.&lt;/li>
&lt;li>&lt;code>spec.accounts.dynamic&lt;/code> (experimental): Boolean. Defaults to false. If true, &lt;code>SpinnakerAccount&lt;/code> objects are available to Armory Continuous Deployment as the account is applied (without redeploying any service).&lt;/li>
&lt;/ul>
&lt;h2 id="example-manifests-for-exposing-armory-continuous-deployment">Example Manifests for exposing Armory Continuous Deployment&lt;/h2>
&lt;h3 id="load-balancer-services">Load balancer Services&lt;/h3>
&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">spec&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">expose&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">type&lt;/span>: service
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">service&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">type&lt;/span>: LoadBalancer
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">annotations&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;service.beta.kubernetes.io/aws-load-balancer-backend-protocol&amp;#34;: &lt;/span>&lt;span style="color:#f1fa8c">&amp;#34;http&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;service.beta.kubernetes.io/aws-load-balancer-ssl-ports&amp;#34;: &lt;/span>&lt;span style="color:#f1fa8c">&amp;#34;80,443&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;service.beta.kubernetes.io/aws-load-balancer-ssl-cert&amp;#34;: &lt;/span>&lt;span style="color:#f1fa8c">&amp;#34;arn:aws:acm:us-west-2:xxxxxxxxxxxx:certificate/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>The preceding manifest generates these two services:&lt;/p>
&lt;p>&lt;em>spin-deck&lt;/em>&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">apiVersion&lt;/span>: v1
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">kind&lt;/span>: Service
&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">annotations&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">service.beta.kubernetes.io/aws-load-balancer-backend-protocol&lt;/span>: http
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">service.beta.kubernetes.io/aws-load-balancer-ssl-ports&lt;/span>: &lt;span style="color:#bd93f9">80&lt;/span>,&lt;span style="color:#bd93f9">443&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> service.beta.kubernetes.io/aws-load-balancer-ssl-cert&amp;#34;: arn:aws:acm:us-west-2:xxxxxxxxxxxx:certificate/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">labels&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">app&lt;/span>: spin
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">cluster&lt;/span>: spin-deck
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">name&lt;/span>: spin-deck
&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">ports&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">name&lt;/span>: deck-tcp
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">nodePort&lt;/span>: xxxxx
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">port&lt;/span>: &lt;span style="color:#bd93f9">9000&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">protocol&lt;/span>: TCP
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">targetPort&lt;/span>: &lt;span style="color:#bd93f9">9000&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">selector&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">app&lt;/span>: spin
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">cluster&lt;/span>: spin-deck
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">sessionAffinity&lt;/span>: None
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">type&lt;/span>: LoadBalancer
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;em>spin-gate&lt;/em>&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">apiVersion&lt;/span>: v1
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">kind&lt;/span>: Service
&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">annotations&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">service.beta.kubernetes.io/aws-load-balancer-backend-protocol&lt;/span>: http
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">service.beta.kubernetes.io/aws-load-balancer-ssl-ports&lt;/span>: &lt;span style="color:#bd93f9">80&lt;/span>,&lt;span style="color:#bd93f9">443&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> service.beta.kubernetes.io/aws-load-balancer-ssl-cert&amp;#34;: arn:aws:acm:us-west-2:xxxxxxxxxxxx:certificate/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">labels&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">app&lt;/span>: spin
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">cluster&lt;/span>: spin-gate
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">name&lt;/span>: spin-gate
&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">ports&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">name&lt;/span>: gate-tcp
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">nodePort&lt;/span>: xxxxx
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">port&lt;/span>: &lt;span style="color:#bd93f9">8084&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">protocol&lt;/span>: TCP
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">targetPort&lt;/span>: &lt;span style="color:#bd93f9">8084&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">selector&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">app&lt;/span>: spin
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">cluster&lt;/span>: spin-gate
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">sessionAffinity&lt;/span>: None
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">type&lt;/span>: LoadBalancer
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="different-service-types-for-deck-ui-and-gate-api">Different service types for Deck (UI) and Gate (API)&lt;/h3>
&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">spec&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">expose&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">type&lt;/span>: service
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">service&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">type&lt;/span>: LoadBalancer
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">annotations&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;service.beta.kubernetes.io/aws-load-balancer-backend-protocol&amp;#34;: &lt;/span>&lt;span style="color:#f1fa8c">&amp;#34;http&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;service.beta.kubernetes.io/aws-load-balancer-ssl-ports&amp;#34;: &lt;/span>&lt;span style="color:#f1fa8c">&amp;#34;80,443&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;service.beta.kubernetes.io/aws-load-balancer-ssl-cert&amp;#34;: &lt;/span>&lt;span style="color:#f1fa8c">&amp;#34;arn:aws:acm:us-west-2:xxxxxxxxxxxx:certificate/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">overrides&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">gate&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">type&lt;/span>: NodePort
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>The preceding manifest generates these two services:&lt;/p>
&lt;p>&lt;em>spin-deck&lt;/em>&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">apiVersion&lt;/span>: v1
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">kind&lt;/span>: Service
&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">annotations&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">service.beta.kubernetes.io/aws-load-balancer-backend-protocol&lt;/span>: http
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">service.beta.kubernetes.io/aws-load-balancer-ssl-ports&lt;/span>: &lt;span style="color:#bd93f9">80&lt;/span>,&lt;span style="color:#bd93f9">443&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> service.beta.kubernetes.io/aws-load-balancer-ssl-cert&amp;#34;: arn:aws:acm:us-west-2:xxxxxxxxxxxx:certificate/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">labels&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">app&lt;/span>: spin
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">cluster&lt;/span>: spin-deck
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">name&lt;/span>: spin-deck
&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">ports&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">name&lt;/span>: deck-tcp
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">nodePort&lt;/span>: xxxxx
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">port&lt;/span>: &lt;span style="color:#bd93f9">9000&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">protocol&lt;/span>: TCP
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">targetPort&lt;/span>: &lt;span style="color:#bd93f9">9000&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">selector&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">app&lt;/span>: spin
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">cluster&lt;/span>: spin-deck
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">sessionAffinity&lt;/span>: None
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">type&lt;/span>: LoadBalancer
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;em>spin-gate&lt;/em>&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">apiVersion&lt;/span>: v1
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">kind&lt;/span>: Service
&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">annotations&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">service.beta.kubernetes.io/aws-load-balancer-backend-protocol&lt;/span>: http
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">service.beta.kubernetes.io/aws-load-balancer-ssl-ports&lt;/span>: &lt;span style="color:#bd93f9">80&lt;/span>,&lt;span style="color:#bd93f9">443&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> service.beta.kubernetes.io/aws-load-balancer-ssl-cert&amp;#34;: arn:aws:acm:us-west-2:xxxxxxxxxxxx:certificate/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">labels&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">app&lt;/span>: spin
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">cluster&lt;/span>: spin-gate
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">name&lt;/span>: spin-gate
&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">ports&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">name&lt;/span>: gate-tcp
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">nodePort&lt;/span>: xxxxx
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">port&lt;/span>: &lt;span style="color:#bd93f9">8084&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">protocol&lt;/span>: TCP
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">targetPort&lt;/span>: &lt;span style="color:#bd93f9">8084&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">selector&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">app&lt;/span>: spin
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">cluster&lt;/span>: spin-gate
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">sessionAffinity&lt;/span>: None
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">type&lt;/span>: NodePort
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="different-annotations-for-deck-ui-and-gate-api">Different annotations for Deck (UI) and Gate (API)&lt;/h3>
&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">spec&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">expose&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">type&lt;/span>: service
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">service&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">type&lt;/span>: LoadBalancer
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">annotations&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;service.beta.kubernetes.io/aws-load-balancer-backend-protocol&amp;#34;: &lt;/span>&lt;span style="color:#f1fa8c">&amp;#34;http&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;service.beta.kubernetes.io/aws-load-balancer-ssl-ports&amp;#34;: &lt;/span>&lt;span style="color:#f1fa8c">&amp;#34;80,443&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;service.beta.kubernetes.io/aws-load-balancer-ssl-cert&amp;#34;: &lt;/span>&lt;span style="color:#f1fa8c">&amp;#34;arn:aws:acm:us-west-2:xxxxxxxxxxxx:certificate/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">overrides&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">gate&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">annotations&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;service.beta.kubernetes.io/aws-load-balancer-internal&amp;#34;: &lt;/span>&lt;span style="color:#f1fa8c">&amp;#34;true&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>The preceding manifest file generates these two services:&lt;/p>
&lt;p>&lt;em>spin-deck&lt;/em>&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">apiVersion&lt;/span>: v1
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">kind&lt;/span>: Service
&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">annotations&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">service.beta.kubernetes.io/aws-load-balancer-backend-protocol&lt;/span>: http
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">service.beta.kubernetes.io/aws-load-balancer-ssl-ports&lt;/span>: &lt;span style="color:#bd93f9">80&lt;/span>,&lt;span style="color:#bd93f9">443&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> service.beta.kubernetes.io/aws-load-balancer-ssl-cert&amp;#34;: arn:aws:acm:us-west-2:xxxxxxxxxxxx:certificate/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">labels&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">app&lt;/span>: spin
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">cluster&lt;/span>: spin-deck
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">name&lt;/span>: spin-deck
&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">ports&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">name&lt;/span>: deck-tcp
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">nodePort&lt;/span>: xxxxx
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">port&lt;/span>: &lt;span style="color:#bd93f9">9000&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">protocol&lt;/span>: TCP
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">targetPort&lt;/span>: &lt;span style="color:#bd93f9">9000&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">selector&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">app&lt;/span>: spin
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">cluster&lt;/span>: spin-deck
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">sessionAffinity&lt;/span>: None
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">type&lt;/span>: LoadBalancer
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;em>spin-gate&lt;/em>&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">apiVersion&lt;/span>: v1
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">kind&lt;/span>: Service
&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">annotations&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">service.beta.kubernetes.io/aws-load-balancer-backend-protocol&lt;/span>: http
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">service.beta.kubernetes.io/aws-load-balancer-ssl-ports&lt;/span>: &lt;span style="color:#bd93f9">80&lt;/span>,&lt;span style="color:#bd93f9">443&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> service.beta.kubernetes.io/aws-load-balancer-ssl-cert&amp;#34;: arn:aws:acm:us-west-2:xxxxxxxxxxxx:certificate/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">service.beta.kubernetes.io/aws-load-balancer-internal&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">labels&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">app&lt;/span>: spin
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">cluster&lt;/span>: spin-gate
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">name&lt;/span>: spin-gate
&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">ports&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">name&lt;/span>: gate-tcp
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">nodePort&lt;/span>: xxxxx
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">port&lt;/span>: &lt;span style="color:#bd93f9">8084&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">protocol&lt;/span>: TCP
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">targetPort&lt;/span>: &lt;span style="color:#bd93f9">8084&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">selector&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">app&lt;/span>: spin
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">cluster&lt;/span>: spin-gate
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">sessionAffinity&lt;/span>: None
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">type&lt;/span>: Loadbalancer
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="x509">X509&lt;/h2>
&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">spec&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:#ff79c6">profiles&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">gate&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">default&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">apiPort&lt;/span>: &lt;span style="color:#bd93f9">8085&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">expose&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">type&lt;/span>: service
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">service&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">type&lt;/span>: LoadBalancer
&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">annotations&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">service.beta.kubernetes.io/aws-load-balancer-backend-protocol&lt;/span>: http
&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">overrides&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6272a4"># Provided below is the example config for the Gate-X509 configuration&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">annotations&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">service.beta.kubernetes.io/aws-load-balancer-ssl-cert&lt;/span>: arn:aws:acm:us-west-2:9999999:certificate/abc-123-abc
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">service.beta.kubernetes.io/aws-load-balancer-backend-protocol&lt;/span>: http
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">gate&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">annotations&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">service.beta.kubernetes.io/aws-load-balancer-ssl-cert&lt;/span>: arn:aws:acm:us-west-2:9999999:certificate/abc-123-abc
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">service.beta.kubernetes.io/aws-load-balancer-backend-protocol&lt;/span>: https &lt;span style="color:#6272a4"># X509 requires https from LoadBalancer -&amp;gt; Gate&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">gate-x509&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">annotations&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">service.beta.kubernetes.io/aws-load-balancer-backend-protocol&lt;/span>: tcp
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">service.beta.kubernetes.io/aws-load-balancer-ssl-cert&lt;/span>: &lt;span style="color:#ff79c6">null&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">publicPort&lt;/span>: &lt;span style="color:#bd93f9">443&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="help-resources">Help resources&lt;/h2>
&lt;ul>
&lt;li>Armory Operator and Armory Continuous Deployment: 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;/li>
&lt;li>Spinnaker Operator and Spinnaker: &lt;a href="https://join.slack.com/t/spinnakerteam/shared_invite/zt-7juwxmx0-nQ4Ud4pJcbuPykX3SXwQrg">Spinnaker Slack&lt;/a> &lt;code>#kubernetes-operator&lt;/code> channel.&lt;/li>
&lt;/ul>
&lt;h2 id="whats-next">What&amp;rsquo;s next&lt;/h2>
&lt;ul>
&lt;li>See the &lt;a href="/continuous-deployment/installation/armory-operator/op-manifest-reference/">Manifest Reference&lt;/a> for configuration options by section.&lt;/li>
&lt;li>Configure Kubernetes accounts using the &lt;a href="/continuous-deployment/installation/armory-operator/op-spin-account-crd/"}>Spinnaker Accounts CRD&lt;/a> (Experimental)&lt;/li>
&lt;li>See advanced configuration using Kustomize in the &lt;a href="/continuous-deployment/installation/armory-operator/op-config-kustomize/"}>Configure Armory Continuous Deployment Using Kustomize&lt;/a> guide.&lt;/li>
&lt;/ul></description></item><item><title>Continuous-Deployment: Configure Hashicorp's Vault for Kubernetes Auth</title><link>/continuous-deployment/armory-admin/secrets/vault-k8s-configuration/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/continuous-deployment/armory-admin/secrets/vault-k8s-configuration/</guid><description>
&lt;blockquote>
&lt;p>Configuration of Vault for the Kubernetes auth method requires configuring both Vault and Kubernetes.&lt;/p>
&lt;/blockquote>
&lt;h2 id="configure-kubernetes">Configure Kubernetes&lt;/h2>
&lt;p>Create a Kubernetes Service Account.&lt;/p>
&lt;p>&lt;strong>vault-auth-service-account.yml&lt;/strong>&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>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">apiVersion&lt;/span>: rbac.authorization.k8s.io/v1beta1
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">kind&lt;/span>: ClusterRoleBinding
&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>: role-tokenreview-binding
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">namespace&lt;/span>: default
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">roleRef&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">apiGroup&lt;/span>: rbac.authorization.k8s.io
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">kind&lt;/span>: ClusterRole
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">name&lt;/span>: system:auth-delegator
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">subjects&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>- &lt;span style="color:#ff79c6">kind&lt;/span>: ServiceAccount
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">name&lt;/span>: vault-auth
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">namespace&lt;/span>: default
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&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:#6272a4"># Create a service account, &amp;#39;vault-auth&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>$ kubectl -n default create serviceaccount vault-auth
&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:#6272a4"># Update the &amp;#39;vault-auth&amp;#39; service account&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>$ kubectl -n default apply --filename vault-auth-service-account.yml
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="configure-vault">Configure Vault&lt;/h2>
&lt;blockquote>
&lt;p>This guide assumes that &lt;a href="https://www.vaultproject.io/api/secret/kv/kv-v1.html">Key/Value version 1&lt;/a> secret engine is enabled at &lt;code>secret/&lt;/code>.&lt;/p>
&lt;/blockquote>
&lt;p>Create a read-only policy &lt;code>spinnaker-kv-ro&lt;/code> in Vault.&lt;/p>
&lt;p>&lt;strong>spinnaker-kv-ro.hcl&lt;/strong>&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-hcl" data-lang="hcl">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6272a4"># For K/V v1 secrets engine
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6272a4">&lt;/span>&lt;span style="color:#ff79c6">path&lt;/span> &lt;span style="color:#f1fa8c">&amp;#34;secret/spinnaker/*&amp;#34;&lt;/span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> capabilities &lt;span style="color:#ff79c6">=&lt;/span> [&lt;span style="color:#f1fa8c">&amp;#34;read&amp;#34;, &amp;#34;list&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}&lt;span style="color:#6272a4">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6272a4"># For K/V v2 secrets engine
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6272a4">&lt;/span>&lt;span style="color:#ff79c6">path&lt;/span> &lt;span style="color:#f1fa8c">&amp;#34;secret/data/spinnaker/*&amp;#34;&lt;/span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> capabilities &lt;span style="color:#ff79c6">=&lt;/span> [&lt;span style="color:#f1fa8c">&amp;#34;read&amp;#34;, &amp;#34;list&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&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>$ vault policy write spinnaker-kv-ro spinnaker-kv-ro.hcl
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Set environment variables required for Vault configuration.&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:#6272a4"># Set VAULT_SA_NAME to the service account you created earlier&lt;/span>
&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">VAULT_SA_NAME&lt;/span>&lt;span style="color:#ff79c6">=&lt;/span>&lt;span style="color:#ff79c6">$(&lt;/span>kubectl -n default get sa vault-auth -o &lt;span style="color:#8be9fd;font-style:italic">jsonpath&lt;/span>&lt;span style="color:#ff79c6">=&lt;/span>&lt;span style="color:#f1fa8c">&amp;#34;{.secrets[*][&amp;#39;name&amp;#39;]}&amp;#34;&lt;/span>&lt;span style="color:#ff79c6">)&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:#6272a4"># Set SA_JWT_TOKEN value to the service account JWT used to access the TokenReview API&lt;/span>
&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">SA_JWT_TOKEN&lt;/span>&lt;span style="color:#ff79c6">=&lt;/span>&lt;span style="color:#ff79c6">$(&lt;/span>kubectl -n default get secret &lt;span style="color:#8be9fd;font-style:italic">$VAULT_SA_NAME&lt;/span> -o &lt;span style="color:#8be9fd;font-style:italic">jsonpath&lt;/span>&lt;span style="color:#ff79c6">=&lt;/span>&lt;span style="color:#f1fa8c">&amp;#34;{.data.token}&amp;#34;&lt;/span> | base64 --decode; &lt;span style="color:#8be9fd;font-style:italic">echo&lt;/span>&lt;span style="color:#ff79c6">)&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:#6272a4"># Set SA_CA_CRT to the PEM encoded CA cert used to talk to Kubernetes API&lt;/span>
&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">SA_CA_CRT&lt;/span>&lt;span style="color:#ff79c6">=&lt;/span>&lt;span style="color:#ff79c6">$(&lt;/span>kubectl -n default get secret &lt;span style="color:#8be9fd;font-style:italic">$VAULT_SA_NAME&lt;/span> -o &lt;span style="color:#8be9fd;font-style:italic">jsonpath&lt;/span>&lt;span style="color:#ff79c6">=&lt;/span>&lt;span style="color:#f1fa8c">&amp;#34;{.data[&amp;#39;ca\.crt&amp;#39;]}&amp;#34;&lt;/span> | base64 --decode; &lt;span style="color:#8be9fd;font-style:italic">echo&lt;/span>&lt;span style="color:#ff79c6">)&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:#6272a4"># Look in your cloud provider console for this value&lt;/span>
&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">K8S_HOST&lt;/span>&lt;span style="color:#ff79c6">=&lt;/span>&amp;lt;https://your_API_server_endpoint&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;div class="alert alert-info" role="alert">
&lt;h4 class="alert-heading">NOTE on TTL and Token Renewal&lt;/h4>
&lt;p>The Kubernetes Vault Auth Secrets Engine does not currently support token renewal. As such the &lt;code>spinnaker&lt;/code> role created below provides a &lt;code>TTL&lt;/code> of &lt;code>two months&lt;/code>.&lt;/p>
&lt;p>&lt;strong>Note&lt;/strong> By default, Vault has a max_ttl parameter set to &lt;code>768h0m0s&lt;/code> - that&amp;rsquo;s 32 days. If you want to set the &lt;code>TTL&lt;/code> to a higher value, you need to modify this parameter.&lt;/p>
&lt;p>&lt;strong>Important:&lt;/strong> Spinnaker must be redeployed sometime during the defined &lt;code>TTL&lt;/code> window &amp;ndash; Armory recommends this be done by updating to a new version of Spinnaker and running &lt;code>kubectl -n &amp;lt;spinnaker namespace&amp;gt; apply -f &amp;lt;SpinnakerService manifest&amp;gt;&lt;/code>.&lt;/p>
&lt;/div>
&lt;p>Next, configure Vault&amp;rsquo;s Kubernetes auth method.&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:#6272a4"># Enable the Kubernetes auth method at the default path (&amp;#34;kubernetes&amp;#34;)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>$ vault auth &lt;span style="color:#8be9fd;font-style:italic">enable&lt;/span> kubernetes
&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:#6272a4"># Tell Vault how to communicate with the Kubernetes cluster&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>$ vault write auth/kubernetes/config &lt;span style="color:#f1fa8c">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c">&lt;/span> &lt;span style="color:#8be9fd;font-style:italic">token_reviewer_jwt&lt;/span>&lt;span style="color:#ff79c6">=&lt;/span>&lt;span style="color:#f1fa8c">&amp;#34;&lt;/span>&lt;span style="color:#8be9fd;font-style:italic">$SA_JWT_TOKEN&lt;/span>&lt;span style="color:#f1fa8c">&amp;#34;&lt;/span> &lt;span style="color:#f1fa8c">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c">&lt;/span> &lt;span style="color:#8be9fd;font-style:italic">kubernetes_host&lt;/span>&lt;span style="color:#ff79c6">=&lt;/span>&lt;span style="color:#f1fa8c">&amp;#34;&lt;/span>&lt;span style="color:#8be9fd;font-style:italic">$K8S_HOST&lt;/span>&lt;span style="color:#f1fa8c">&amp;#34;&lt;/span> &lt;span style="color:#f1fa8c">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c">&lt;/span> &lt;span style="color:#8be9fd;font-style:italic">kubernetes_ca_cert&lt;/span>&lt;span style="color:#ff79c6">=&lt;/span>&lt;span style="color:#f1fa8c">&amp;#34;&lt;/span>&lt;span style="color:#8be9fd;font-style:italic">$SA_CA_CRT&lt;/span>&lt;span style="color:#f1fa8c">&amp;#34;&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:#6272a4"># Create a role named, &amp;#39;spinnaker&amp;#39; to map Kubernetes Service Account to&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#6272a4"># Vault policies and default token TTL&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>$ vault write auth/kubernetes/role/spinnaker &lt;span style="color:#f1fa8c">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c">&lt;/span> &lt;span style="color:#8be9fd;font-style:italic">bound_service_account_names&lt;/span>&lt;span style="color:#ff79c6">=&lt;/span>default &lt;span style="color:#f1fa8c">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c">&lt;/span> &lt;span style="color:#8be9fd;font-style:italic">bound_service_account_namespaces&lt;/span>&lt;span style="color:#ff79c6">=&lt;/span>&lt;span style="color:#f1fa8c">&amp;#39;*&amp;#39;&lt;/span> &lt;span style="color:#f1fa8c">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c">&lt;/span> &lt;span style="color:#8be9fd;font-style:italic">policies&lt;/span>&lt;span style="color:#ff79c6">=&lt;/span>spinnaker-kv-ro &lt;span style="color:#f1fa8c">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c">&lt;/span> &lt;span style="color:#8be9fd;font-style:italic">ttl&lt;/span>&lt;span style="color:#ff79c6">=&lt;/span>1440h
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="verify-configuration">Verify Configuration&lt;/h2>
&lt;p>It is time verify that the Kubernetes auth method has been properly configured.&lt;/p>
&lt;p>Deploy Armory&amp;rsquo;s &lt;a href="https://github.com/armory/troubleshooting-toolbox/blob/master/docker-debugging-tools/Dockerfile">debug container&lt;/a> into your cluster &amp;ndash; this container has the Vault cli pre-installed.&lt;/p>
&lt;blockquote>
&lt;p>This should be deployed into the same namespace as your Spinnaker installation.&lt;/p>
&lt;/blockquote>
&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 -f https://raw.githubusercontent.com/armory/troubleshooting-toolbox/master/docker-debugging-tools/deployment.yml
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;code>exec&lt;/code> into the 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>&lt;span style="color:#8be9fd;font-style:italic">POD_NAME&lt;/span>&lt;span style="color:#ff79c6">=&lt;/span>&lt;span style="color:#ff79c6">$(&lt;/span>kubectl get pod -l &lt;span style="color:#8be9fd;font-style:italic">app&lt;/span>&lt;span style="color:#ff79c6">=&lt;/span>debugging-tools -o go-template --template &lt;span style="color:#f1fa8c">&amp;#39;{{range .items}}{{.metadata.name}}{{&amp;#34;\n&amp;#34;}}{{end}}&amp;#39;&lt;/span> --sort-by&lt;span style="color:#ff79c6">=&lt;/span>&lt;span style="color:#f1fa8c">&amp;#34;.status.startTime&amp;#34;&lt;/span> | tail -n 1&lt;span style="color:#ff79c6">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>kubectl &lt;span style="color:#8be9fd;font-style:italic">exec&lt;/span> -it &lt;span style="color:#8be9fd;font-style:italic">$POD_NAME&lt;/span> bash
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Test the auth method.&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">VAULT_ADDR&lt;/span>&lt;span style="color:#ff79c6">=&lt;/span>&lt;span style="color:#f1fa8c">&amp;#39;http://your.vault.address:port&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8be9fd;font-style:italic">SA_TOKEN&lt;/span>&lt;span style="color:#ff79c6">=&lt;/span>&lt;span style="color:#ff79c6">$(&lt;/span>cat /var/run/secrets/kubernetes.io/serviceaccount/token&lt;span style="color:#ff79c6">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>vault write auth/kubernetes/login &lt;span style="color:#8be9fd;font-style:italic">role&lt;/span>&lt;span style="color:#ff79c6">=&lt;/span>spinnaker &lt;span style="color:#8be9fd;font-style:italic">jwt&lt;/span>&lt;span style="color:#ff79c6">=&lt;/span>&lt;span style="color:#8be9fd;font-style:italic">$SA_TOKEN&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>This command should return output like the following&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>Key Value
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>--- -----
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>token s.bKSSrYOcETCADGvGxhbDaaaD
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>token_accessor 0ybx2CEPZqxBEwFk8jUPkBk7
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>token_duration 24h
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>token_renewable &lt;span style="color:#8be9fd;font-style:italic">true&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>token_policies &lt;span style="color:#ff79c6">[&lt;/span>&lt;span style="color:#f1fa8c">&amp;#34;default&amp;#34;&lt;/span> &lt;span style="color:#f1fa8c">&amp;#34;spinnaker-kv-ro&amp;#34;&lt;/span>&lt;span style="color:#ff79c6">]&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>identity_policies &lt;span style="color:#ff79c6">[]&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>policies &lt;span style="color:#ff79c6">[&lt;/span>&lt;span style="color:#f1fa8c">&amp;#34;default&amp;#34;&lt;/span> &lt;span style="color:#f1fa8c">&amp;#34;spinnaker-kv-ro&amp;#34;&lt;/span>&lt;span style="color:#ff79c6">]&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>token_meta_role spinnaker
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>token_meta_service_account_name default
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>token_meta_service_account_namespace default
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>token_meta_service_account_secret_name default-token-h9knn
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>token_meta_service_account_uid 13cee6Dbc-0bc2-11e9-9fd2-0a32f8e530cc
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Using the token from the output above allows for the following:&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>vault login s.bKSSrYOcETCADGvGxhbDaaaD
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Once logged in you should be able to read secrets:&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>vault kv get secret/spinnaker/test
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>As a reminder, the policy we created provides RO access &lt;em>only&lt;/em> so you will need to have written the secret using a separate authenticated client.&lt;/p></description></item><item><title>Continuous-Deployment: Store Spinnaker Secrets in HashiCorp Vault</title><link>/continuous-deployment/armory-admin/secrets/secrets-vault/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/continuous-deployment/armory-admin/secrets/secrets-vault/</guid><description>
&lt;p>&lt;img src="/images/proprietary.svg" alt="Proprietary">&lt;/p>
&lt;blockquote>
&lt;p>In this example, you use the default KV secret engine called &lt;code>secret&lt;/code> and store GitHub credentials, a kubeconfig file, and a Java keystore for SAML SSO.&lt;/p>
&lt;/blockquote>
&lt;h2 id="authentication-with-vault-servers">Authentication with Vault servers&lt;/h2>
&lt;p>We currently support two methods of authentication with Vault servers.&lt;/p>
&lt;h3 id="1-kubernetes-service-account-recommended">1. Kubernetes service account (recommended)&lt;/h3>
&lt;p>You&amp;rsquo;ll need to configure Vault to authenticate with Kubernetes per our &lt;a href="/continuous-deployment/armory-admin/secrets/vault-k8s-configuration/">Vault Configuration Guide&lt;/a> or HashiCorp&amp;rsquo;s &lt;a href="https://www.vaultproject.io/docs/auth/kubernetes.html#configuration">documentation&lt;/a>.&lt;/p>
&lt;p>Note: If multiple clusters need to access the same Vault server, you&amp;rsquo;ll need to use the &lt;a href="https://www.vaultproject.io/docs/commands/auth/enable.html#usage">-path flag&lt;/a> and give each cluster a different path name. This becomes &lt;code>&amp;lt;cluster auth path&amp;gt;&lt;/code> in the example below. If using just one cluster, you can use the default &lt;code>vault auth enable kubernetes&lt;/code> command, in which case your path will be &lt;code>kubernetes&lt;/code>.&lt;/p>
&lt;p>After configuring authentication on the Vault side, use the following configuration to enable Vault secrets in Spinnaker:&lt;/p>
&lt;p>Add the following snippet to the &lt;code>SpinnakerService&lt;/code> manifest:&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">apiVersion&lt;/span>: spinnaker.armory.io/v1alpha2
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">kind&lt;/span>: SpinnakerService
&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
&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">spinnakerConfig&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:#ff79c6">armory&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">secrets&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">vault&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">enabled&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">authMethod&lt;/span>: KUBERNETES &lt;span style="color:#6272a4"># Method used to authenticate with the Vault endpoint. Must be either KUBERNETES for Kubernetes service account auth or TOKEN for Vault token auth. The TOKEN method will require a VAULT_TOKEN environment variable set for Operator and the services. &lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">url&lt;/span>: &amp;lt;Vault server URL&amp;gt;:&amp;lt;port, if required&amp;gt; &lt;span style="color:#6272a4"># URL of the Vault endpoint from Spinnaker services.&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">role&lt;/span>: &amp;lt;Vault role&amp;gt; &lt;span style="color:#6272a4"># (Applies to KUBERNETES authentication method) Name of the role against which the login is being attempted.&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6272a4"># path: &amp;lt;k8s cluster path&amp;gt; (Optional; default: kubernetes) Applies to KUBERNETES authentication method) Path of the kubernetes authentication backend mount. Default is &amp;#34;kubernetes&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="2-token-authentication">2. Token authentication&lt;/h3>
&lt;p>This method is not recommended, but it is supported if you choose to use it. Armory recommends this for testing and development purposes only. For token authentication, you need to have a &lt;code>VAULT_TOKEN&lt;/code> environment variable set in the Halyard container of the Operator pod as well as each of the services.&lt;/p>
&lt;p>Use the following configuration to enable Vault secrets using token auth:&lt;/p>
&lt;p>Add the following snippet to the &lt;code>SpinnakerService&lt;/code> manifest:&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">apiVersion&lt;/span>: spinnaker.armory.io/v1alpha2
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">kind&lt;/span>: SpinnakerService
&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
&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">spinnakerConfig&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:#ff79c6">armory&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">secrets&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">vault&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">enabled&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">authMethod&lt;/span>: TOKEN &lt;span style="color:#6272a4"># Method used to authenticate with the Vault endpoint. Must be either KUBERNETES for Kubernetes service account auth or TOKEN for Vault token auth. The TOKEN method will require a VAULT_TOKEN environment variable set for Operator and the services. &lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">url&lt;/span>: &amp;lt;Vault server URL&amp;gt;:&amp;lt;port if required&amp;gt; &lt;span style="color:#6272a4"># URL of the Vault endpoint from Spinnaker services.&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="configuring-the-operator-to-use-vault-secrets">Configuring the Operator to use Vault secrets&lt;/h2>
&lt;p>If you are using the Armory Operator, set up a &lt;a href="/continuous-deployment/installation/armory-operator/op-advanced-config/">custom Halyard configuration&lt;/a> with this content:&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">secrets&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">vault&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">enabled&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">url&lt;/span>: &amp;lt;Vault server URL&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">authMethod&lt;/span>: KUBERNETES
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">role&lt;/span>: &amp;lt;Vault role&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">path&lt;/span>: &amp;lt;k8s cluster path&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Once you&amp;rsquo;ve mounted your &lt;code>ConfigMap&lt;/code> to the &lt;code>spinnaker-operator&lt;/code> deployment, it restarts the Halyard container with your Vault config.&lt;/p>
&lt;h2 id="storing-secrets">Storing secrets&lt;/h2>
&lt;p>To store a file, simply prepend the file path with &lt;code>@&lt;/code>. It accepts relative paths but cannot resolve &lt;code>~&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>vault kv put secret/spinnaker/kubernetes &lt;span style="color:#8be9fd;font-style:italic">config&lt;/span>&lt;span style="color:#ff79c6">=&lt;/span>@path/to/kube/config
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>The command above stores a single key-value pair at the &lt;code>secret/spinnaker/kubernetes&lt;/code> path. &lt;strong>Any updates to that path will replace the existing values even if using a different key!&lt;/strong> In order to store multiple secrets at the same path, it must be done in a single command, like so:&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>vault kv put secret/spinnaker/github &lt;span style="color:#8be9fd;font-style:italic">password&lt;/span>&lt;span style="color:#ff79c6">=&lt;/span>&amp;lt;password&amp;gt; &lt;span style="color:#8be9fd;font-style:italic">token&lt;/span>&lt;span style="color:#ff79c6">=&lt;/span>&amp;lt;token&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Otherwise, just store different secrets at different paths, like we&amp;rsquo;re doing in these examples.&lt;/p>
&lt;p>Make sure to base64 encode any binary files:&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>base64 -i saml.jks -o saml.b64
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>vault kv put secret/spinnaker/saml &lt;span style="color:#8be9fd;font-style:italic">base64keystore&lt;/span>&lt;span style="color:#ff79c6">=&lt;/span>@saml.b64
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="referencing-secrets">Referencing secrets&lt;/h2>
&lt;p>Now that secrets are safely stored in Vault, reference them in config files with the following syntax:&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>encrypted:vault!e:&amp;lt;secret engine&amp;gt;!p:&amp;lt;path to secret&amp;gt;!k:&amp;lt;key&amp;gt;!b:&amp;lt;is base64 encoded?&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="parameters">Parameters&lt;/h3>
&lt;p>Parameters can be provided in any order.&lt;/p>
&lt;ul>
&lt;li>&lt;code>!&lt;/code>: &lt;strong>required&lt;/strong> is used as a delimiter between parameters&lt;/li>
&lt;li>&lt;code>e&lt;/code>: &lt;strong>required&lt;/strong> Vault&amp;rsquo;s Secret Engine.&lt;/li>
&lt;li>&lt;code>p&lt;/code>: &lt;strong>required&lt;/strong> Path to your secret, ex: &lt;code>spinnaker/github&lt;/code>&lt;/li>
&lt;li>&lt;code>k&lt;/code>: &lt;strong>required&lt;/strong> Key of the secret.&lt;/li>
&lt;li>&lt;code>b&lt;/code>: &lt;strong>optional&lt;/strong> If the value is a base64 encoded value or file, set this to &lt;code>true&lt;/code>&lt;/li>
&lt;/ul>
&lt;p>Example of how it&amp;rsquo;s used in your YAML configs&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-yml" data-lang="yml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">github&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">password&lt;/span>: encrypted:vault!e:secret!p:spinnaker/github!k:password
&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">kubernetes&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">kubeconfigFile&lt;/span>: encrypted:vault!e:secret!p:spinnaker/kubernetes!k:config
&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">gate&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">javaKeyStoreBinary&lt;/span>: encrypted:vault!e:secret!p:spinnaker/saml!k:base64keystore!b:true
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div></description></item><item><title>Continuous-Deployment: Upgrade Spinnaker to Armory Continuous Deployment</title><link>/continuous-deployment/installation/guide/upgrade-oss-to-armory/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/continuous-deployment/installation/guide/upgrade-oss-to-armory/</guid><description>
&lt;blockquote>
&lt;p>Armory Continuous Deployment (Armory CD) requires a license. For more information, contact &lt;a href="https://www.armory.io/contact-us/">Armory&lt;/a>.&lt;/p>
&lt;/blockquote>
&lt;h2 id="overview-of-upgrading-spinnaker-to-armory-continuous-deployment">Overview of upgrading Spinnaker to Armory Continuous Deployment&lt;/h2>
&lt;p>Armory Continuous Deployment for Spinnaker is installed with Armory-extended Halyard, very similarly to the way Open Source Spinnaker&lt;sup>TM&lt;/sup> is installed with Open Source Halyard. These are the key differences:&lt;/p>
&lt;ul>
&lt;li>Armory-extended Halyard installs Armory&amp;rsquo;s enterprise distribution of Spinnaker; Open Source Halyard installs Open Source Spinnaker.&lt;/li>
&lt;li>Armory versions are one major version ahead of Open Source. For example, Armory 2.18.x maps to Open Source Spinnaker 1.18.x.&lt;/li>
&lt;li>Armory has an extra subcommand block &lt;code>hal armory&lt;/code> (mapping to an &lt;code>armory&lt;/code> block in your &lt;code>.hal/config&lt;/code>), which controls Armory-specific features.&lt;/li>
&lt;/ul>
&lt;p>This guide differentiates between the two by referring to them as Armory and open source Spinnaker, respectively.&lt;/p>
&lt;p>If you are currently on open source Spinnaker and interested in upgrading to Armory, you can easily upgrade if you used Halyard to install your Spinnaker cluster.&lt;/p>
&lt;p>This guide assumes the following:&lt;/p>
&lt;ul>
&lt;li>Spinnaker is currently running in Kubernetes&lt;/li>
&lt;li>Spinnaker is configured with some form of persistent storage (Minio, S3, GCS, or AZS)&lt;/li>
&lt;li>Spinnaker was installed with Halyard in one of these forms:
&lt;ul>
&lt;li>Halyard is running locally on a workstation&lt;/li>
&lt;li>Halyard is running in a Docker container in Docker daemon (in Linux, Windows, or OSX)&lt;/li>
&lt;li>Halyard is running in a Kubernetes pod&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;p>Depending on where Halyard is currently running, the detailed installation instructions will be slightly different, but the high level process is the same:&lt;/p>
&lt;ol>
&lt;li>Start Armory-extended Halyard in a Docker container with your open source Halyard configuration directories available to Armory Halyard.&lt;/li>
&lt;li>Enter the Armory-extended Halyard container.&lt;/li>
&lt;li>Update the Spinnaker version to use an Armory version. Recall that Armory versions are ahead of open source Spinnaker by one major version.&lt;/li>
&lt;li>Apply your changes.&lt;/li>
&lt;/ol>
&lt;h2 id="halyard-running-locally-on-a-workstation">Halyard running locally on a workstation&lt;/h2>
&lt;p>If Halyard is running locally on your workstation, then perform the following steps:&lt;/p>
&lt;ol>
&lt;li>
&lt;p>Make copies of any directores used by Halyard. These include&lt;code>~.hal&lt;/code> and &lt;code>~.kube&lt;/code> and potentially &lt;code>~/.aws&lt;/code>, &lt;code>~/.config/gcloud&lt;/code>, &lt;code>~/.azure&lt;/code>). &lt;em>You can mount these directly into Halyard, but it may be safer to operate on copies.&lt;/em>&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>mkdir -p ~/armory/.config
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>cp -rpv ~/.hal ~/armory/
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>cp -rpv ~/.aws ~/armory/
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>cp -rpv ~/.kube ~/armory/
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>cp -rpv ~/.azure ~/armory/
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>cp -rpv ~/.config/gcloud ~/armory/.config
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Omit any directories that do not apply to you. For example, if you do not use Azure, omit it.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Start Halyard as a Docker container in daemon mode, with your directories mounted in (add/remove volume mounts as applicable):&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>docker run --name armory-halyard --rm &lt;span style="color:#f1fa8c">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c">&lt;/span> -v &lt;span style="color:#f1fa8c">${&lt;/span>&lt;span style="color:#8be9fd;font-style:italic">HOME&lt;/span>&lt;span style="color:#f1fa8c">}&lt;/span>/armory/.hal:/home/spinnaker/.hal &lt;span style="color:#f1fa8c">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c">&lt;/span> -v &lt;span style="color:#f1fa8c">${&lt;/span>&lt;span style="color:#8be9fd;font-style:italic">HOME&lt;/span>&lt;span style="color:#f1fa8c">}&lt;/span>/armory/.kube:/home/spinnaker/.kube &lt;span style="color:#f1fa8c">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c">&lt;/span> -v &lt;span style="color:#f1fa8c">${&lt;/span>&lt;span style="color:#8be9fd;font-style:italic">HOME&lt;/span>&lt;span style="color:#f1fa8c">}&lt;/span>/armory/.aws:/home/spinnaker/.aws &lt;span style="color:#f1fa8c">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c">&lt;/span> -v &lt;span style="color:#f1fa8c">${&lt;/span>&lt;span style="color:#8be9fd;font-style:italic">HOME&lt;/span>&lt;span style="color:#f1fa8c">}&lt;/span>/armory/.azure:/home/spinnaker/.azure &lt;span style="color:#f1fa8c">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c">&lt;/span> -v &lt;span style="color:#f1fa8c">${&lt;/span>&lt;span style="color:#8be9fd;font-style:italic">HOME&lt;/span>&lt;span style="color:#f1fa8c">}&lt;/span>/armory/.config:/home/spinnaker/.config &lt;span style="color:#f1fa8c">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c">&lt;/span> -d &lt;span style="color:#f1fa8c">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c">&lt;/span> -u &lt;span style="color:#ff79c6">$(&lt;/span>id -u&lt;span style="color:#ff79c6">)&lt;/span> &lt;span style="color:#f1fa8c">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c">&lt;/span> index.docker.io/armory/halyard-armory:1.12.1
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Omit any directories that do not apply to you. For example, if you do not use Azure, omit it.&lt;/p>
&lt;p>&lt;em>The above specifies that Halyard will run as your local user id. Depending on how your Halyard daemon was initially run and what user id owns the various Halyard directories, you may need to specify some other user. For example, if user &lt;code>1000&lt;/code> owns the .hal directory, replace &amp;ldquo;&lt;code>-u $(id -u)&lt;/code>&amp;rdquo; with &amp;ldquo;&lt;code>-u 1000&lt;/code>&amp;rdquo;&lt;/em>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Exec into the Halyard container&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>docker &lt;span style="color:#8be9fd;font-style:italic">exec&lt;/span> -it armory-halyard bash
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>Update the version of Spinnaker&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 config version edit --version &lt;span style="color:#ff79c6">$(&lt;/span>hal version latest -q&lt;span style="color:#ff79c6">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>This will use the latest stable version; If you want to use a different version, use &lt;code>hal version list&lt;/code> to get a list of available versions. Then, run &lt;code>hal config version edit --version X.X.X&lt;/code> to specify a version.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Apply your changes&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 deploy apply
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;/ol>
&lt;h2 id="halyard-running-in-a-docker-container-in-docker-daemon">Halyard running in a Docker container in Docker daemon&lt;/h2>
&lt;p>If Halyard is already running in a Docker container in your Docker daemon, you can do an in-place upgrade.&lt;/p>
&lt;ol>
&lt;li>
&lt;p>First, do a backup of your existing Halyard configuration. Exec into the Docker container, then run &lt;code>hal backup create&lt;/code>.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Stop the Halyard docker container, and re-start it with the Armory-extended Halyard image (&lt;code>index.docker.io/armory/halyard-armory:1.12.1&lt;/code>) instead of the open source Halyard image (&lt;code>gcr.io/spinnaker-marketplace/halyard:stable&lt;/code>). Also, change the user id for Armory-extended Halyard to be &lt;code>1000&lt;/code>. For example, if you run the previous Docker image (open source Halyard) like this:&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>docker run --name halyard --rm &lt;span style="color:#f1fa8c">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c">&lt;/span> -v &lt;span style="color:#f1fa8c">${&lt;/span>&lt;span style="color:#8be9fd;font-style:italic">HOME&lt;/span>&lt;span style="color:#f1fa8c">}&lt;/span>/armory/.hal:/home/spinnaker/.hal &lt;span style="color:#f1fa8c">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c">&lt;/span> -v &lt;span style="color:#f1fa8c">${&lt;/span>&lt;span style="color:#8be9fd;font-style:italic">HOME&lt;/span>&lt;span style="color:#f1fa8c">}&lt;/span>/armory/.kube:/home/spinnaker/.kube &lt;span style="color:#f1fa8c">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c">&lt;/span> -d &lt;span style="color:#f1fa8c">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c">&lt;/span> gcr.io/spinnaker-marketplace/halyard:stable
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Then run Armory-extended Halyard like this:&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>docker run --name armory-halyard --rm &lt;span style="color:#f1fa8c">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c">&lt;/span> -v &lt;span style="color:#f1fa8c">${&lt;/span>&lt;span style="color:#8be9fd;font-style:italic">HOME&lt;/span>&lt;span style="color:#f1fa8c">}&lt;/span>/armory/.hal:/home/spinnaker/.hal &lt;span style="color:#f1fa8c">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c">&lt;/span> -v &lt;span style="color:#f1fa8c">${&lt;/span>&lt;span style="color:#8be9fd;font-style:italic">HOME&lt;/span>&lt;span style="color:#f1fa8c">}&lt;/span>/armory/.kube:/home/spinnaker/.kube &lt;span style="color:#f1fa8c">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c">&lt;/span> -d &lt;span style="color:#f1fa8c">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c">&lt;/span> index.docker.io/armory/halyard-armory:1.12.1
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Note the different Docker image and different container name.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Exec into the Halyard container:&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>docker &lt;span style="color:#8be9fd;font-style:italic">exec&lt;/span> -it armory-halyard bash
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>Update the version of Spinnaker:&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 config version edit --version &lt;span style="color:#ff79c6">$(&lt;/span>hal version latest -q&lt;span style="color:#ff79c6">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>This will use the latest stable version. If you want to use a different version, use &lt;code>hal version list&lt;/code> to get a list of available versions, and then &lt;code>hal config version edit --version X.X.X&lt;/code> to specify a specific version.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Apply your changes&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 deploy apply
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;/ol>
&lt;h2 id="halyard-running-in-a-kubernetes-pod">Halyard running in a Kubernetes pod&lt;/h2>
&lt;p>If Halyard is running in your Kubernetes cluster, either as a Kubernetes Deployment or a Kubernetes StatefulSet, then you can do an in-place upgrade:&lt;/p>
&lt;ol>
&lt;li>
&lt;p>First, update the image for your Halyard Deployment / StatefulSet from the open source Halyard image (&lt;code>gcr.io/spinnaker-marketplace/halyard:stable&lt;/code>) to the Armory-extended Halyard image (&lt;code>index.docker.io/armory/halyard-armory:1.12.1&lt;/code>)&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Wait for the pod to start up.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Exec into your Kubernetes pod (insert your namespace and pod name, accordingly):&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> -it spinnaker bash
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>Update the version of Spinnaker:&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 config version edit --version &lt;span style="color:#ff79c6">$(&lt;/span>hal version latest -q&lt;span style="color:#ff79c6">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>This will use the latest stable version. If you want to use a different version, use &lt;code>hal version list&lt;/code> to get a list of available versions, and then &lt;code>hal config version edit --version X.X.X&lt;/code> to specify a specific version.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Apply your changes:&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 deploy apply
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;/ol>
&lt;h2 id="revert-back-to-spinnaker">Revert back to Spinnaker&lt;/h2>
&lt;p>If you want to go back to open source Spinnaker, you can repeat the same process as above with open source Halyard. Specifically, replace the Armory-extended Halyard image with the open source Halyard image, update Spinnaker version (from 2.x to 1.x), and run &lt;code>hal deploy apply&lt;/code>&lt;/p>
&lt;h2 id="troubleshooting">Troubleshooting&lt;/h2>
&lt;p>Depending on what version of Halyard / Armory-extended Halyard you&amp;rsquo;re moving to/from, there may be some fields in your Halyard configuration that are present in one version but not the other. You&amp;rsquo;ll see an &lt;code>Unrecognized field&lt;/code> error like this:&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 deploy apply
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>- Get current deployment
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Failure
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Problems in Global:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>! ERROR Could not translate your halconfig: Unrecognized field
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f1fa8c">&amp;#34;nodeSelectors&amp;#34;&lt;/span> &lt;span style="color:#ff79c6">(&lt;/span>class
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> com.netflix.spinnaker.halyard.config.model.v1.node.DeploymentEnvironment&lt;span style="color:#ff79c6">)&lt;/span>, not
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> marked as ignorable &lt;span style="color:#ff79c6">(&lt;/span>&lt;span style="color:#bd93f9">14&lt;/span> known properties: &lt;span style="color:#f1fa8c">&amp;#34;size&amp;#34;&lt;/span>, &lt;span style="color:#f1fa8c">&amp;#34;initContainers&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f1fa8c">&amp;#34;updateVersions&amp;#34;&lt;/span>, &lt;span style="color:#f1fa8c">&amp;#34;consul&amp;#34;&lt;/span>, &lt;span style="color:#f1fa8c">&amp;#34;customSizing&amp;#34;&lt;/span>, &lt;span style="color:#f1fa8c">&amp;#34;vault&amp;#34;&lt;/span>, &lt;span style="color:#f1fa8c">&amp;#34;gitConfig&amp;#34;&lt;/span>, &lt;span style="color:#f1fa8c">&amp;#34;location&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f1fa8c">&amp;#34;sidecars&amp;#34;&lt;/span>, &lt;span style="color:#f1fa8c">&amp;#34;haServices&amp;#34;&lt;/span>, &lt;span style="color:#f1fa8c">&amp;#34;accountName&amp;#34;&lt;/span>, &lt;span style="color:#f1fa8c">&amp;#34;type&amp;#34;&lt;/span>, &lt;span style="color:#f1fa8c">&amp;#34;hostAliases&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f1fa8c">&amp;#34;bootstrapOnly&amp;#34;&lt;/span>&lt;span style="color:#ff79c6">])&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>at &lt;span style="color:#ff79c6">[&lt;/span>Source: N/A; line: -1, column: -1&lt;span style="color:#ff79c6">]&lt;/span> &lt;span style="color:#ff79c6">(&lt;/span>through reference chain:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> io.armory.halyard.config.model.v1.node.ArmoryHalconfig&lt;span style="color:#ff79c6">[&lt;/span>&lt;span style="color:#f1fa8c">&amp;#34;deploymentConfigurations&amp;#34;&lt;/span>&lt;span style="color:#ff79c6">]&lt;/span>-&amp;gt;java.util.ArrayList&lt;span style="color:#ff79c6">[&lt;/span>0&lt;span style="color:#ff79c6">]&lt;/span>-&amp;gt;com.netflix.spinnaker.halyard.config.model.v1.node.ArmoryDeploymentConfiguration&lt;span style="color:#ff79c6">[&lt;/span>&lt;span style="color:#f1fa8c">&amp;#34;deploymentEnvironment&amp;#34;&lt;/span>&lt;span style="color:#ff79c6">]&lt;/span>-&amp;gt;com.netflix.spinnaker.halyard.config.model.v1.node.DeploymentEnvironment&lt;span style="color:#ff79c6">[&lt;/span>&lt;span style="color:#f1fa8c">&amp;#34;nodeSelectors&amp;#34;&lt;/span>&lt;span style="color:#ff79c6">])&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>- Failed to get deployment name.
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>If you see the above error, go to the &lt;code>/home/spinnaker/.hal/config&lt;/code> file in your Halyard container, search for the offending field, and remove the yaml block (comment it out or completely remove it).&lt;/p>
&lt;p>For example, in the above case, find the &lt;code>deploymentEnvironment.nodeSelectors field&lt;/code>, and remove it. Repeat as necessary.&lt;/p></description></item><item><title>Continuous-Deployment: Manage Armory Continuous Deployment using the Operator</title><link>/continuous-deployment/installation/armory-operator/op-manage-spinnaker/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/continuous-deployment/installation/armory-operator/op-manage-spinnaker/</guid><description>
&lt;blockquote>
&lt;p>This guide is for both the Armory Operator and the Spinnaker Operator. Armory Continuous Deployment and Spinnaker configuration is the same except for features only in Armory Continuous Deployment. Those features are marked &lt;img src="/images/proprietary.svg" alt="Proprietary">.&lt;/p>
&lt;/blockquote>
&lt;h2 id="kubernetes-tools">Kubernetes tools&lt;/h2>
&lt;p>You use &lt;a href="https://kubernetes.io/docs/reference/kubectl/">&lt;code>kubectl&lt;/code>&lt;/a> to manage the Armory Continuous Deployment or Spinnaker lifecycle like you do with other applications deployed to Kubernetes. For example:&lt;/p>
&lt;p>&lt;strong>List instances&lt;/strong>&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 get spinnakerservice --all-namespaces
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;strong>Describe instances&lt;/strong>&lt;/p>
&lt;p>You can use &lt;code>spinsvc&lt;/code> instead of &lt;code>spinnakerservice&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>kubectl -n &amp;lt;namespace&amp;gt; describe spinsvc spinnaker
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Consult the &lt;code>kubectl&lt;/code> &lt;a href="https://kubernetes.io/docs/reference/kubectl/">docs&lt;/a> for a list of commands.&lt;/p>
&lt;h2 id="deploy-armory-continuous-deployment">Deploy Armory Continuous Deployment&lt;/h2>
&lt;ul class="nav nav-tabs justify-content-end" id="tabs-1" role="tablist">
&lt;li class="nav-item">
&lt;button class="nav-link active"
id="tabs-01-00-tab" data-bs-toggle="tab" data-bs-target="#tabs-01-00" role="tab"
aria-controls="tabs-01-00" aria-selected="true">
Manifest
&lt;/button>
&lt;/li>&lt;li class="nav-item">
&lt;button class="nav-link"
id="tabs-01-01-tab" data-bs-toggle="tab" data-bs-target="#tabs-01-01" role="tab"
aria-controls="tabs-01-01" aria-selected="false">
Kustomize
&lt;/button>
&lt;/li>
&lt;/ul>
&lt;div class="tab-content" id="tabs-1-content">
&lt;div class="tab-body tab-pane fade show active"
id="tabs-01-00" role="tabpanel" aria-labelled-by="tabs-01-00-tab" tabindex="1">
&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 -n &amp;lt;namespace&amp;gt; apply -f &amp;lt;path-to-manifest-file&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;/div>
&lt;div class="tab-body tab-pane fade"
id="tabs-01-01" role="tabpanel" aria-labelled-by="tabs-01-01-tab" tabindex="1">
&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>kubctl -n &amp;lt;namespace&amp;gt; apply -k &amp;lt;path-to-kustomize-directory&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;/div>
&lt;/div>
&lt;p>You can watch the installation progress by executing:&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 -n &amp;lt;namespace&amp;gt; get spinsvc spinnaker -w
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>You can verify pod status by executing:&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 -n &amp;lt;namespace&amp;gt; get pods
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="upgrade-armory-continuous-deployment">Upgrade Armory Continuous Deployment&lt;/h2>
&lt;ul class="nav nav-tabs justify-content-end" id="tabs-2" role="tablist">
&lt;li class="nav-item">
&lt;button class="nav-link active"
id="tabs-02-00-tab" data-bs-toggle="tab" data-bs-target="#tabs-02-00" role="tab"
aria-controls="tabs-02-00" aria-selected="true">
Manifest
&lt;/button>
&lt;/li>&lt;li class="nav-item">
&lt;button class="nav-link"
id="tabs-02-01-tab" data-bs-toggle="tab" data-bs-target="#tabs-02-01" role="tab"
aria-controls="tabs-02-01" aria-selected="false">
Kustomize
&lt;/button>
&lt;/li>
&lt;/ul>
&lt;div class="tab-content" id="tabs-2-content">
&lt;div class="tab-body tab-pane fade show active"
id="tabs-02-00" role="tabpanel" aria-labelled-by="tabs-02-00-tab" tabindex="2">
&lt;p>Change the &lt;code>version&lt;/code> field in your manifest file to the target version for the upgrade:&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>kind: SpinnakerService
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>metadata:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> name: spinnaker
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>spec:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> spinnakerConfig:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> config:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> version: &amp;lt;version&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Apply the updated manifest:&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 -n &amp;lt;namespace&amp;gt; apply -f &amp;lt;path-to-manifest-file&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;/div>
&lt;div class="tab-body tab-pane fade"
id="tabs-02-01" role="tabpanel" aria-labelled-by="tabs-02-01-tab" tabindex="2">
&lt;p>Change the &lt;code>version&lt;/code> field in your Kustomize patch to the target version for the upgrade.&lt;/p>
&lt;p>Apply the update:&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>kubctl -n &amp;lt;namespace&amp;gt; apply -k &amp;lt;path-to-kustomize-directory&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;/div>
&lt;/div>
&lt;p>You can view the upgraded services starting up by executing &lt;code>describe&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>kubectl -n &amp;lt;namespace&amp;gt; describe spinsvc spinnaker
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Verify the upgraded version of Spinnaker:&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 -n &amp;lt;namespace&amp;gt; get spinsvc
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>The command returns information similar to the following:&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-fallback" data-lang="fallback">&lt;span style="display:flex;">&lt;span>NAME VERSION
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>spinnaker 2.20.2
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;code>VERSION&lt;/code> should reflect the target version for your upgrade.&lt;/p>
&lt;h2 id="rollback-armory-continuous-deployment">Rollback Armory Continuous Deployment&lt;/h2>
&lt;ul class="nav nav-tabs justify-content-end" id="tabs-3" role="tablist">
&lt;li class="nav-item">
&lt;button class="nav-link active"
id="tabs-03-00-tab" data-bs-toggle="tab" data-bs-target="#tabs-03-00" role="tab"
aria-controls="tabs-03-00" aria-selected="true">
Manifest
&lt;/button>
&lt;/li>&lt;li class="nav-item">
&lt;button class="nav-link"
id="tabs-03-01-tab" data-bs-toggle="tab" data-bs-target="#tabs-03-01" role="tab"
aria-controls="tabs-03-01" aria-selected="false">
Kustomize
&lt;/button>
&lt;/li>
&lt;/ul>
&lt;div class="tab-content" id="tabs-3-content">
&lt;div class="tab-body tab-pane fade show active"
id="tabs-03-00" role="tabpanel" aria-labelled-by="tabs-03-00-tab" tabindex="3">
&lt;p>Change the &lt;code>version&lt;/code> field in your manifest file to the target version for the rollback:&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>kind: SpinnakerService
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>metadata:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> name: spinnaker
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>spec:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> spinnakerConfig:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> config:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> version: &amp;lt;version&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Apply the updated manifest:&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 -n &amp;lt;namespace&amp;gt; apply -f &amp;lt;path-to-manifest-file&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;/div>
&lt;div class="tab-body tab-pane fade"
id="tabs-03-01" role="tabpanel" aria-labelled-by="tabs-03-01-tab" tabindex="3">
&lt;p>Change the &lt;code>version&lt;/code> field in your Kustomize patch to the target version for the rollback.&lt;/p>
&lt;p>Apply the update:&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>kubctl -n &amp;lt;namespace&amp;gt; apply -k &amp;lt;path-to-kustomize-directory&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;/div>
&lt;/div>
&lt;p>You can view the rolled back services starting up by executing &lt;code>describe&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>kubectl -n &amp;lt;namespace&amp;gt; describe spinsvc spinnaker
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Verify the rolled back version of Spinnaker:&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 -n &amp;lt;namespace&amp;gt; get spinsvc
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>The command returns information similar to the following:&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-fallback" data-lang="fallback">&lt;span style="display:flex;">&lt;span>NAME VERSION
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>spinnaker 2.27.2
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;code>VERSION&lt;/code> should reflect the target version for your rollback.&lt;/p>
&lt;h2 id="delete-armory-continuous-deployment">Delete Armory Continuous Deployment&lt;/h2>
&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 -n &amp;lt;namespace&amp;gt; delete spinnakerservice spinnaker
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="help-resources">Help resources&lt;/h2>
&lt;ul>
&lt;li>Armory Operator and Armory Continuous Deployment: 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;/li>
&lt;li>Spinnaker Operator and Spinnaker: &lt;a href="https://join.slack.com/t/spinnakerteam/shared_invite/zt-7juwxmx0-nQ4Ud4pJcbuPykX3SXwQrg">Spinnaker Slack&lt;/a> &lt;code>#kubernetes-operator&lt;/code> channel.&lt;/li>
&lt;/ul>
&lt;h2 id="whats-next">What&amp;rsquo;s next&lt;/h2>
&lt;ul>
&lt;li>See the &lt;a href="/continuous-deployment/installation/armory-operator/op-troubleshooting/"}>Errors and Troubleshooting&lt;/a> guide if you encounter issues.&lt;/li>
&lt;/ul></description></item><item><title>Continuous-Deployment: Migrate from Halyard to the Operator</title><link>/continuous-deployment/installation/armory-operator/hal-op-migration/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/continuous-deployment/installation/armory-operator/hal-op-migration/</guid><description>
&lt;blockquote>
&lt;p>This guide is for both the Armory Operator and the Spinnaker Operator. Armory Continuous Deployment and Spinnaker configuration is the same except for features only in Armory Continuous Deployment. Those features are marked &lt;img src="/images/proprietary.svg" alt="Proprietary">.&lt;/p>
&lt;/blockquote>
&lt;h2 id="before-you-begin">Before you begin&lt;/h2>
&lt;p>You need to decide if you want to overwrite the current Halyard deployment of Armory Continuous Deployment or create a test instance.&lt;/p>
&lt;p>If you choose to overwrite your current instance, you need to take downtime to clean up the namespace that the Halyard-deployed Armory Continuous Deployment is in so Operator can deploy Armory Continuous Deployment without collision.&lt;/p>
&lt;p>Alternately, you can use Operator to deploy Armory Continuous Deployment to a different namespace to test out the migration. You need to create a separate data store as well as separate Gate and Deck URLs for your test instance of Armory Continuous Deployment. Once you&amp;rsquo;ve verified that Operator has deployed your test configuration as you expected, decommission the Halyard-deployed instance of Armory Continuous Deployment. Change the data store config and URLs in the manifest that Operator used to deploy your test instance to match what your decommissioned instance used. Then redeploy.&lt;/p>
&lt;p>The second method is preferred as it allows you to test everything before decommissioning Armory Continuous Deployment that you deployed using Halyard.&lt;/p>
&lt;h2 id="migrate-to-operator">Migrate to Operator&lt;/h2>
&lt;p>This guide assumes you want to deploy Armory Continuous Deployment using a single &lt;code>SpinnakerSerivce.yml&lt;/code> manifest file rather than Kustomize patches.&lt;/p>
&lt;p>The migration process from Halyard to Operator can be completed in 7 steps:&lt;/p>
&lt;ol>
&lt;li>
&lt;p>&lt;a href="/continuous-deployment/installation/armory-operator/op-quickstart/">Install the Operator&lt;/a>.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Export configuration.&lt;/p>
&lt;p>Copy the desired profile&amp;rsquo;s content from the &lt;code>config&lt;/code> file&lt;/p>
&lt;p>For example, if you want to migrate the &lt;code>default&lt;/code> hal profile, use the following &lt;code>SpinnakerService&lt;/code> manifest structure:&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">currentDeployment&lt;/span>: default
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">deploymentConfigurations&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>- &lt;span style="color:#ff79c6">name&lt;/span>: default
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &amp;lt;CONTENT&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Add &lt;code>&amp;lt;CONTENT&amp;gt;&lt;/code> in the &lt;code>spec.spinnakerConfig.config&lt;/code> section in the &lt;code>SpinnakerService&lt;/code> manifest as follows:&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">spec&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">spinnakerConfig&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> &amp;lt;&amp;lt;CONTENT&amp;gt;&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Note: &lt;code>config&lt;/code> is under &lt;code>~/.hal&lt;/code>&lt;/p>
&lt;p>You can see more details in &lt;a href="/continuous-deployment/installation/armory-operator/op-config-manifest/#specspinnakerconfig">&lt;code>spec.spinnakerConfig.config&lt;/code>&lt;/a>.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Export Armory Continuous Deployment profiles.&lt;/p>
&lt;p>If you have configured Armory Continuous Deployment profiles, you need to migrate these profiles to the &lt;code>SpinnakerService&lt;/code> manifest.&lt;/p>
&lt;p>First, identify the current profiles under &lt;code>~/.hal/default/profiles&lt;/code>.&lt;/p>
&lt;p>For each file, create an entry under &lt;code>spec.spinnakerConfig.profiles&lt;/code>.&lt;/p>
&lt;p>For example, you have the following profile:&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>$ ls -a ~/.hal/default/profiles | sort
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>echo-local.yml
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Create a new entry with the name of the file without &lt;code>-local.yaml&lt;/code> as follows:&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">spec&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">spinnakerConfig&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">profiles&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">echo&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &amp;lt;CONTENT&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>You can see more details in &lt;a href="/continuous-deployment/installation/armory-operator/op-config-manifest/#specspinnakerconfigprofiles">&lt;code>spec.spinnakerConfig.profiles&lt;/code>&lt;/a>.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Export Armory Continuous Deployment settings.&lt;/p>
&lt;p>If you configured Armory settings, you need to migrate these settings to the &lt;code>SpinnakerService&lt;/code> manifest also.&lt;/p>
&lt;p>First, identify the current settings under &lt;code>~/.hal/default/service-settings&lt;/code>.&lt;/p>
&lt;p>For each file, create an entry under &lt;code>spec.spinnakerConfig.service-settings&lt;/code>.&lt;/p>
&lt;p>For example, you have the following settings:&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>$ ls -a ~/.hal/default/service-settings | sort
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>echo.yml
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Create a new entry with the name of the file without &lt;code>.yaml&lt;/code> as follows:&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">spec&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">spinnakerConfig&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">service-settings&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">echo&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &amp;lt;CONTENT&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>You can see more details in &lt;a href="/continuous-deployment/installation/armory-operator/op-config-manifest/#specspinnakerconfigservice-settings">spec.spinnakerConfig.service-settings&lt;/a>.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Export local file references.&lt;/p>
&lt;p>If you have references to local files in any part of the config, like &lt;code>kubeconfigFile&lt;/code>, service account JSON files or others, you need to migrate these files to the &lt;code>SpinnakerService&lt;/code> manifest.&lt;/p>
&lt;p>For each file, create an entry under &lt;code>spec.spinnakerConfig.files&lt;/code>.&lt;/p>
&lt;p>For example, you have a Kubernetes account configured like this:&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">kubernetes&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">enabled&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">accounts&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">name&lt;/span>: prod
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">requiredGroupMembership&lt;/span>: []
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">providerVersion&lt;/span>: V2
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">permissions&lt;/span>: {}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">dockerRegistries&lt;/span>: []
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">configureImagePullSecrets&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">cacheThreads&lt;/span>: &lt;span style="color:#bd93f9">1&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">namespaces&lt;/span>: []
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">omitNamespaces&lt;/span>: []
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">kinds&lt;/span>: []
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">omitKinds&lt;/span>: []
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">customResources&lt;/span>: []
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">cachingPolicies&lt;/span>: []
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">oAuthScopes&lt;/span>: []
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">onlySpinnakerManaged&lt;/span>: &lt;span style="color:#ff79c6">false&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">kubeconfigFile&lt;/span>: /home/spinnaker/.hal/secrets/kubeconfig-prod
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">primaryAccount&lt;/span>: prod
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>The &lt;code>kubeconfigFile&lt;/code> field is a reference to a physical file on the machine running Halyard. You need to create a new entry in &lt;code>files&lt;/code> section like this:&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">spec&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">spinnakerConfig&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">files&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">kubeconfig-prod&lt;/span>: |&lt;span style="color:#f1fa8c">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> &lt;/span> &amp;lt;CONTENT&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Then replace the path in the config to match the key in the &lt;code>files&lt;/code> 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-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">kubernetes&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">enabled&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">accounts&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">name&lt;/span>: prod
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">requiredGroupMembership&lt;/span>: []
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">providerVersion&lt;/span>: V2
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">permissions&lt;/span>: {}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">dockerRegistries&lt;/span>: []
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">configureImagePullSecrets&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">cacheThreads&lt;/span>: &lt;span style="color:#bd93f9">1&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">namespaces&lt;/span>: []
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">omitNamespaces&lt;/span>: []
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">kinds&lt;/span>: []
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">omitKinds&lt;/span>: []
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">customResources&lt;/span>: []
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">cachingPolicies&lt;/span>: []
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">oAuthScopes&lt;/span>: []
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">onlySpinnakerManaged&lt;/span>: &lt;span style="color:#ff79c6">false&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">kubeconfigFile&lt;/span>: kubeconfig-prod &lt;span style="color:#6272a4"># File name must match &amp;#34;files&amp;#34; key&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">primaryAccount&lt;/span>: prod
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>You can see more details in &lt;a href="/continuous-deployment/installation/armory-operator/op-config-manifest/#specspinnakerconfigfiles">spec.spinnakerConfig.files&lt;/a>.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Export Packer template files (if used).&lt;/p>
&lt;p>If you are using custom Packer templates for baking images, you need to migrate these files to the &lt;code>SpinnakerService&lt;/code> manifest.&lt;/p>
&lt;p>First, identify the current templates under &lt;code>~/.hal/default/profiles/rosco/packer&lt;/code>.&lt;/p>
&lt;p>For each file, create an entry under &lt;code>spec.spinnakerConfig.files&lt;/code>.&lt;/p>
&lt;p>For example, you have the following &lt;code>example-packer-config&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-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>$ tree -v ~/.hal/default/profiles
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>├── echo-local.yml
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>└── rosco
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> └── packer
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> └── example-packer-config.json
&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:#bd93f9">2&lt;/span> directories, &lt;span style="color:#bd93f9">2&lt;/span> files
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>You need to create a new entry with the name of the file following these instructions:&lt;/p>
&lt;ul>
&lt;li>For each file, list the folder name starting with &lt;code>profiles&lt;/code>, followed by double underscores (&lt;code>__&lt;/code>) and at the very end the name of the file.&lt;/li>
&lt;/ul>
&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">spec&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">spinnakerConfig&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">files&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">profiles__rosco__packer__example-packer-config.json&lt;/span>: |&lt;span style="color:#f1fa8c">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> &lt;/span> &amp;lt;CONTENT&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>You can see more details in &lt;a href="/continuous-deployment/installation/armory-operator/op-config-manifest/#specspinnakerconfigfiles">&lt;code>spec.spinnakerConfig.files&lt;/code>&lt;/a>.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Validate your Armory configuration if you plan to run the Operator in cluster mode:&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 -n &amp;lt;namespace&amp;gt; apply -f &amp;lt;spinnaker service manifest&amp;gt; --dry-run&lt;span style="color:#ff79c6">=&lt;/span>server
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>The validation service throws an error when something is wrong with your manifest.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Apply your SpinnakerService:&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 -n &amp;lt;namespace&amp;gt; apply -f &amp;lt;spinnaker service&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;/ol>
&lt;h2 id="help-resources">Help resources&lt;/h2>
&lt;ul>
&lt;li>Armory Operator and Armory Continuous Deployment: 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;/li>
&lt;li>Spinnaker Operator and Spinnaker: &lt;a href="https://join.slack.com/t/spinnakerteam/shared_invite/zt-7juwxmx0-nQ4Ud4pJcbuPykX3SXwQrg">Spinnaker Slack&lt;/a> &lt;code>#kubernetes-operator&lt;/code> channel.&lt;/li>
&lt;/ul></description></item><item><title>Continuous-Deployment: Permissions in Spinnaker</title><link>/continuous-deployment/overview/fiat-permissions-overview/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/continuous-deployment/overview/fiat-permissions-overview/</guid><description>
&lt;h2 id="overview-of-fiat">Overview of Fiat&lt;/h2>
&lt;p>Fiat is the microservice in Spinnaker responsible for authorization (authz) for the other Spinnaker services. By default, it is not enabled, so users are able to perform any action in Spinnaker. This page describes how Fiat interacts with the following Spinnaker services:&lt;/p>
&lt;ul>
&lt;li>Clouddriver for account permission&lt;/li>
&lt;li>Front50 for application permissions&lt;/li>
&lt;li>Igor for build services permissions&lt;/li>
&lt;/ul>
&lt;p>When Fiat is enabled, users start with no permissions and must be explicitly granted permissions.&lt;/p>
&lt;p>For a deeper dive into how authz works for Spinnaker, see &lt;a href="https://www.spinnaker.io/setup/security/authorization">Authorization&lt;/a>. Much of Spinnaker&amp;rsquo;s configuration is done through your Halconfig, which can be found in &lt;code>~/.hal/config&lt;/code>.&lt;/p>
&lt;h2 id="requirements">Requirements&lt;/h2>
&lt;p>To use Fiat, you need an external identity provider. Create the user roles and maintain them in the identity provider. Fiat controls what permissions are mapped to roles.&lt;/p>
&lt;p>Fiat supports the following identity providers:&lt;/p>
&lt;ul>
&lt;li>SAML groups (includes OAuth ONLY with OIDC)&lt;/li>
&lt;li>LDAP&lt;/li>
&lt;li>GitHub teams&lt;/li>
&lt;li>Google Groups&lt;/li>
&lt;/ul>
&lt;p>In all these methods, users are referenced by a userId, which is determined by the authentication method of your choice.&lt;/p>
&lt;h2 id="clouddriver-accounts">Clouddriver accounts&lt;/h2>
&lt;p>Clouddriver is the Spinnaker service that interacts with the various providers. When Fiat is enabled, account permissions for Clouddriver determine whether a role or group can perform the following actions:&lt;/p>
&lt;ul>
&lt;li>&lt;code>READ&lt;/code> - See objects in a given cloud account.&lt;/li>
&lt;li>&lt;code>WRITE&lt;/code> - Deploy objects to a given account.&lt;/li>
&lt;/ul>
&lt;p>Note that for AWS, a role/group needs both read and write access to deploy an AMI from the AWS account that Rosco uses to build AMIs.&lt;/p>
&lt;h2 id="front50-accounts">Front50 accounts&lt;/h2>
&lt;p>Front50 is the Spinnaker service that acts as the system of record for all the other Spinnaker services. In other words, all metadata for things such as applications and pipelines are stored in and served by Front50. Control access to Front50 by creating service accounts. This can be done through a series of &lt;a href="https://www.spinnaker.io/setup/security/authorization/service-accounts/">cURL commands&lt;/a>.&lt;/p>
&lt;p>Service accounts are used to delegate authority to a pipeline to perform actions in Spinnaker. Users with ALL the roles defined in a service account can grant a pipeline &amp;ldquo;Run as&amp;rdquo; permission. The service accounts you create should map to roles/groups in your identity provider. Additionally, all pipelines configured to run off of a trigger must also be configured with &amp;ldquo;Run as&amp;rdquo; permission, or they will fail.&lt;/p>
&lt;p>Armory recommends that you map one service account for each role/group in the identity provider that will be accessing Spinnaker. This prevents privilege escalation and makes it easier to figure out which roles/group ran which pipeline.&lt;/p>
&lt;h2 id="example-roles">Example roles&lt;/h2>
&lt;p>The rest of this explanation uses the following example roles to illustrate how Fiat works:&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;code>fiat-admin&lt;/code>&lt;/p>
&lt;ul>
&lt;li>Administrator for all of Spinnaker. Can do anything implicitly.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>&lt;code>admin&lt;/code>&lt;/p>
&lt;ul>
&lt;li>Administrator. Can do anything for all apps. Can read and execute build/ci jobs.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>&lt;code>dev&lt;/code>&lt;/p>
&lt;ul>
&lt;li>Full control of pipeline definition for app1 &amp;amp; app2&lt;/li>
&lt;li>Can deploy to &lt;code>dev-infra&lt;/code>&lt;/li>
&lt;li>Can see &lt;code>qa-infra&lt;/code>&lt;/li>
&lt;li>Can attach a build/ci trigger to a pipeline definition&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>&lt;code>qa&lt;/code>&lt;/p>
&lt;ul>
&lt;li>Full control of pipeline definition for app1 &amp;amp; app3&lt;/li>
&lt;li>Can deploy to &lt;code>qa-infra&lt;/code>&lt;/li>
&lt;li>Can see &lt;code>dev-infra&lt;/code>&lt;/li>
&lt;li>Can attach a build/ci trigger to pipeline definitions&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>&lt;code>ops&lt;/code>&lt;/p>
&lt;ul>
&lt;li>Can deploy to all accounts but cannot change the pipeline definitions. Can read and execute build/ci jobs.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;p>Note that roles, as far as Fiat is concerned, are case insensitive. This means that &lt;code>admin&lt;/code> is equivalent to &lt;code>Admin&lt;/code>, &lt;code>ADMIN&lt;/code>, or any other permutation.&lt;/p>
&lt;h2 id="mapping-exercise">Mapping exercise&lt;/h2>
&lt;p>Answer the following questions to figure out how to map roles and permissions in your deployment:&lt;/p>
&lt;ul>
&lt;li>Which roles/groups have READ and/or WRITE access to which Clouddriver accounts&lt;/li>
&lt;li>Which roles/groups have READ, WRITE, EXECUTE access to each Spinnaker Application&lt;/li>
&lt;li>Which roles/groups have READ and/or WRITE/EXECUTE access to which CI/Build accounts&lt;/li>
&lt;/ul>
&lt;p>The following image shows an example result of this exercise based on the user roles described in &lt;a href="#example-roles">Example Roles&lt;/a>:&lt;/p>
&lt;figure>
&lt;img src="/images/fiat_overview_role_matrix.png"/>
&lt;/figure>
&lt;h2 id="example-configurations">Example Configurations&lt;/h2>
&lt;p>The following sections describe some of the roles from the role matrix example in the &lt;a href="#mapping-exercise">Mapping exercise&lt;/a>.&lt;/p>
&lt;h2 id="superuser">Superuser&lt;/h2>
&lt;p>&lt;code>fiat-admin&lt;/code> is the superuser and has permissions across your whole Spinnaker deployment.&lt;/p>
&lt;p>The configuration for &lt;code>fiat-admin&lt;/code> in the &lt;code>fiat-local.yml&lt;/code> file looks like the following snippet:&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">admin&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">roles&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - fiat-admin
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="infrastructure">Infrastructure&lt;/h2>
&lt;p>&lt;code>dev-infra&lt;/code> is one of the potential deployment targets (pictured in (&lt;a href="#mapping-exercise">Mapping exercise&lt;/a>).&lt;/p>
&lt;p>The Halconfig snippet for configuring access to &lt;code>dev-infra&lt;/code> based on our mapping exercise looks similar to the following:&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">accounts&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>- &lt;span style="color:#ff79c6">name&lt;/span>: dev-infra
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">permissions&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">READ&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - admin
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - dev
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - qa
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - ops
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">WRITE&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - admin
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - dev
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - ops
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Based on which roles have what access to other infrastructure accounts, the configuration looks different.&lt;/p>
&lt;p>Note that &lt;code>fiat-admin&lt;/code> does not need to be explicitly granted permissions. Every other user role must be granted permissions explicitly.&lt;/p>
&lt;p>For information about how to configure permissions for Clouddriver accounts, see &lt;a href="https://www.spinnaker.io/setup/security/authorization/##accounts">Accounts&lt;/a>.&lt;/p>
&lt;h2 id="continuous-integration-system">Continuous integration system&lt;/h2>
&lt;p>&lt;code>build1&lt;/code> is a Jenkins deployment used for CI in this example. The Halconfig for controlling access to &lt;code>build1&lt;/code> looks similar to the following snippet:&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">ci&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">jenkins&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">enabled&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">masters&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">name&lt;/span>: build1
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">permissions&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">READ&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - admin
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - dev
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - qa
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - ops
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">WRITE&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - admin
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - ops
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="applications">Applications&lt;/h2>
&lt;p>&lt;code>app1&lt;/code> is one of the applications that needs to be deployed. Configuring permissions for an application is done in Deck, Spinnaker&amp;rsquo;s UI, when you create or edit an application:&lt;/p>
&lt;figure>
&lt;img src="/images/fiat_overview_app1_perms.png"/>
&lt;/figure>
&lt;p>&lt;code>app2&lt;/code>, &lt;code>app3&lt;/code>, and &lt;code>app4&lt;/code> will look slightly different since they have different permissions based on the mapping exercise.&lt;/p>
&lt;p>For information about how to configure permissions for applications, see &lt;a href="https://www.spinnaker.io/setup/security/authorization/##applications">Applications&lt;/a>.&lt;/p>
&lt;h2 id="applying-changes">Applying changes&lt;/h2>
&lt;p>Whenever you make a change to permissions that involves modifying your Halconfig, run &lt;code>hal deploy apply&lt;/code> to apply your changes to the Spinnaker deployment. Some permission changes do not require this, such as adding a service account.&lt;/p>
&lt;h2 id="verifying-permissions">Verifying permissions&lt;/h2>
&lt;p>You can verify what permissions are assigned to a role at any time.&lt;/p>
&lt;h2 id="admin-permissions">Admin permissions&lt;/h2>
&lt;p>Check &lt;code>fiat-local.yml&lt;/code> to see who is assigned an &lt;code>admin&lt;/code> role.&lt;/p>
&lt;h2 id="permissions-in-halconfig">Permissions in Halconfig&lt;/h2>
&lt;p>In your Halconfig, you can verify several sets of permissions.&lt;/p>
&lt;p>For example, search for &lt;code>ci&lt;/code> to find the continuous integration section. Look for the &lt;code>permissions&lt;/code> key and examine the &lt;code>READ&lt;/code> and &lt;code>WRITE&lt;/code> subkeys. All the user roles that have read or write permission for the CI system are listed here. The same thing can be done for Clouddriver accounts.&lt;/p>
&lt;h2 id="permissions-for-apps">Permissions for apps&lt;/h2>
&lt;p>Check the permissions for all applications in Spinnaker with a REST API call to Gate.&lt;/p>
&lt;p>&lt;strong>Headers&lt;/strong>&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Header&lt;/th>
&lt;th>Information&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>Request URL&lt;/td>
&lt;td>&lt;code>$GATE_URL/applications&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Request Method&lt;/td>
&lt;td>&lt;code>GET&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>content-type&lt;/td>
&lt;td>&lt;code>application/json;charset=UTF-8&lt;/code>&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>The API call returns information about the apps. Refer to the &lt;code>name&lt;/code> and &lt;code>permissions&lt;/code> sections to find your applications and the corresponding permissions:&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-json" data-lang="json">&lt;span style="display:flex;">&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">&amp;#34;name&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;app2&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;permissions&amp;#34;&lt;/span>: {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;EXECUTE&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f1fa8c">&amp;#34;admin&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f1fa8c">&amp;#34;dev&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f1fa8c">&amp;#34;ops&amp;#34;&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">&amp;#34;READ&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f1fa8c">&amp;#34;admin&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f1fa8c">&amp;#34;dev&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f1fa8c">&amp;#34;ops&amp;#34;&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">&amp;#34;WRITE&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f1fa8c">&amp;#34;admin&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f1fa8c">&amp;#34;dev&amp;#34;&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>&lt;/span>&lt;span style="display:flex;">&lt;span> ...
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="permissions-for-spinnaker-service-accounts">Permissions for Spinnaker service accounts&lt;/h2>
&lt;p>Verifying the permissions for service accounts requires access to the Front50 and Fiat pods.&lt;/p>
&lt;p>List all the service accounts with the following command (from the Front50 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>&lt;span style="color:#8be9fd;font-style:italic">export&lt;/span> &lt;span style="color:#8be9fd;font-style:italic">FRONT50&lt;/span>&lt;span style="color:#ff79c6">=&lt;/span>http://spin-front50:8080
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>curl -s &lt;span style="color:#8be9fd;font-style:italic">$FRONT50&lt;/span>/serviceAccounts
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Check user or service account permissions for all of Spinnaker (from the Fiat 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>&lt;span style="color:#8be9fd;font-style:italic">export&lt;/span> &lt;span style="color:#8be9fd;font-style:italic">FIAT&lt;/span>&lt;span style="color:#ff79c6">=&lt;/span>http://spin-fiat:7003
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>curl -s &lt;span style="color:#8be9fd;font-style:italic">$FIAT&lt;/span>/authorize/&lt;span style="color:#8be9fd;font-style:italic">$user&lt;/span>-or-service-account
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>The command returns JSON that lists the following information:&lt;/p>
&lt;ul>
&lt;li>Roles the user/service account is part of&lt;/li>
&lt;li>Spinnaker applications the user/service account has access to&lt;/li>
&lt;li>Clouddriver accounts the user/service account has access to&lt;/li>
&lt;li>Build services the user/service account has access to&lt;/li>
&lt;/ul>
&lt;h2 id="pub-sub-and-webhooks">Pub Sub and Webhooks&lt;/h2>
&lt;p>Fiat does not support Pub Sub triggers or authenticating webhooks with group permissions.&lt;/p>
&lt;h2 id="permissions-for-clouddriver-accounts">Permissions for Clouddriver accounts&lt;/h2>
&lt;p>Check Clouddriver&amp;rsquo;s current runtime context with a REST API call to Gate.&lt;/p>
&lt;p>&lt;strong>Headers&lt;/strong>&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Header&lt;/th>
&lt;th>Information&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>Request URL&lt;/td>
&lt;td>&lt;code>$GATE_URL/credentials&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Request Method&lt;/td>
&lt;td>&lt;code>GET&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>content-type&lt;/td>
&lt;td>&lt;code>application/json;charset=UTF-8&lt;/code>&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>The API call returns JSON that lists the Clouddriver accounts.&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-json" data-lang="json">&lt;span style="display:flex;">&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">&amp;#34;name&amp;#34;&lt;/span>: &amp;lt;account-name&amp;gt;,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;type&amp;#34;&lt;/span>: &amp;lt;account-type&amp;gt;,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;providerVersion&amp;#34;&lt;/span>: &amp;lt;version&amp;gt;,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;requiredGroupMembership&amp;#34;&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>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;skin&amp;#34;&lt;/span>: &amp;lt;version&amp;gt;,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;permissions&amp;#34;&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>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;authorized&amp;#34;&lt;/span>: &amp;lt;&lt;span style="color:#ff79c6">true&lt;/span>-or-&lt;span style="color:#ff79c6">false&lt;/span>&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&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">&amp;#34;name&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;my-docker-registry&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;type&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;dockerRegistry&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;providerVersion&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;v1&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;requiredGroupMembership&amp;#34;&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>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;skin&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;v1&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;permissions&amp;#34;&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>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;authorized&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;true&amp;#34;&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>&lt;/span>&lt;/code>&lt;/pre>&lt;/div></description></item><item><title>Continuous-Deployment: Load Balancers in Spinnaker</title><link>/continuous-deployment/overview/load-balancers/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/continuous-deployment/overview/load-balancers/</guid><description>
&lt;h2 id="what-is-a-load-balancer">What is a load balancer?&lt;/h2>
&lt;p>A load balancer is associated with an ingress protocol and port range. It balances traffic among instances in its server groups. Optionally, you can enable health checks for a load balancer, with flexibility to define health criteria and specify the health check endpoint.&lt;/p>
&lt;h2 id="requirements">Requirements&lt;/h2>
&lt;ul>
&lt;li>Before you create a load balancer, your Security Group will already need to exist.&lt;/li>
&lt;/ul>
&lt;h2 id="create-a-load-balancer">Create a load balancer&lt;/h2>
&lt;p>Step 1: After you select your Application, click on the Load Balancers tab.&lt;/p>
&lt;p>Step 2: Click the &amp;ldquo;Create Load Balancer&amp;rdquo; button.&lt;/p>
&lt;figure>
&lt;img src="/images/overview/create-load-balancer.png"/>
&lt;/figure>
&lt;p>Step 3: The Stack and Detail should be kept in mind when creating the pipeline because the pipeline&amp;rsquo;s deployment of server group should be using the same Stack and Detail.&lt;/p>
&lt;h2 id="delete-a-load-balancer">Delete a load balancer&lt;/h2>
&lt;p>Note: You can only delete Load Balancers if they do not have any instances attached to them.&lt;/p>
&lt;p>Step 1: Go to your Load Balancers in your Applications.&lt;/p>
&lt;p>Step 2: Select a Load Balancer, then to the right a column with the Load Balancer&amp;rsquo;s details should appear. Select the drop down menu and press &amp;ldquo;Delete&amp;rdquo;.&lt;/p>
&lt;figure>
&lt;img src="/images/overview/delete-load-balancer.png"/>
&lt;/figure></description></item><item><title>Continuous-Deployment: Your First Application in Spinnaker</title><link>/continuous-deployment/overview/your-first-application/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/continuous-deployment/overview/your-first-application/</guid><description>
&lt;h2 id="what-is-an-application-in-spinnaker">What is an application in Spinnaker?&lt;/h2>
&lt;p>Spinnaker™ is organized around the concept of applications. An application in Spinnaker is a collection of clusters, which in turn are collections of server groups. The application also includes firewalls and load balancers.&lt;/p>
&lt;p>An application represents the service which you are going to deploy using Spinnaker, all configuration for that service, and all the infrastructure on which it will run.&lt;/p>
&lt;h2 id="the-spinnaker-landing-page">The Spinnaker landing page&lt;/h2>
&lt;p>When you first log in to Spinnaker, the landing page should look like this:&lt;/p>
&lt;figure>
&lt;img src="/images/overview/your-first-application/default-view-top.png"/>
&lt;/figure>
&lt;p>The navigation bar at the top allows you to access Projects, Applications, and
Infrastructure. The search bar allows you to search through your Infrastructure.
(this search bar will find everything in all of your AWS Infrastructure)&lt;/p>
&lt;p>Spinnaker should scan all of your infrastructure and create applications for
anything that it finds. If you enter an application this way that was not
configured by Spinnaker, it should state that the application has not been
configured.&lt;/p>
&lt;p>Note: The naming convention that you have been using is not necessarily the same one that Spinnaker uses, but accessing your applications through Spinnaker should allow you to configure it to your preferences.
Remember that Spinnaker considers an application to be anything you would put into a single code repository.&lt;/p>
&lt;h2 id="making-an-application">Making an application&lt;/h2>
&lt;ol>
&lt;li>
&lt;p>Enter Applications from your Navigation bar.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Click the “Create Application” button:&lt;/p>
&lt;figure>
&lt;img src="/images/overview/your-first-application/create-application.png"/>
&lt;/figure>
&lt;/li>
&lt;li>
&lt;p>Fill out the pop-up form with desired user definitions.&lt;/p>
&lt;figure>
&lt;img src="/images/overview/your-first-application/new-application-modal.png"/>
&lt;/figure>
&lt;ul>
&lt;li>The name of the application cannot have hyphens. Using a hyphen in the application name interferes with the naming convention. This applies to all types of applications except for those that use the Kubernetes V2 provider to deploy.&lt;/li>
&lt;li>When you create an application in Spinnaker, consider it to be anything you would put into a single code repository.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>After you fill out the form you should see this:&lt;/p>
&lt;figure>
&lt;img src="/images/overview/your-first-application/new-application.png"/>
&lt;/figure>
&lt;/li>
&lt;li>
&lt;p>If you wish to modify the settings for the application, click “Config” for configurations.&lt;/p>
&lt;/li>
&lt;/ol>
&lt;p>Note that by now you should have created an application, but as you have not created a pipeline and executed it, nothing should show up yet.&lt;/p>
&lt;h2 id="deleting-an-application">Deleting an application&lt;/h2>
&lt;p>Go to your application, click on “Config” and scroll all the way down. There will be a prompt to confirm if you would like to delete your application.&lt;/p>
&lt;figure>
&lt;img src="/images/overview/your-first-application/delete-application.png"/>
&lt;/figure></description></item><item><title>Continuous-Deployment: Your First Pipeline in Spinnaker</title><link>/continuous-deployment/overview/your-first-pipeline/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/continuous-deployment/overview/your-first-pipeline/</guid><description>
&lt;h2 id="what-is-a-pipeline-in-spinnaker">What is a pipeline in Spinnaker?&lt;/h2>
&lt;p>The pipeline is the key deployment management construct in Spinnaker™. It consists of a sequence of actions, known as stages. You can pass parameters from stage to stage along the pipeline.&lt;/p>
&lt;p>You can start a pipeline manually, or you can configure it to be automatically triggered by an event, such as a Jenkins job completing, a new Docker image appearing in your registry, a CRON schedule, or a stage in another pipeline.&lt;/p>
&lt;h2 id="before-you-begin">Before you begin&lt;/h2>
&lt;p>This page assumes your application stack includes:&lt;/p>
&lt;ul>
&lt;li>A Jenkins Master configured by your administrator&lt;/li>
&lt;li>A Jenkins job that archives a Debian package&lt;/li>
&lt;li>A security group within AWS with appropriate permissions&lt;/li>
&lt;li>A &lt;a href="/continuous-deployment/overview/load-balancers/">Load Balancer&lt;/a>&lt;/li>
&lt;/ul>
&lt;h2 id="how-to-create-a-pipeline">How to create a pipeline&lt;/h2>
&lt;p>This example creates a pipeline that takes the Debian package produced by a Jenkins job and uses it to create an &lt;a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AMIs.html">Amazon Machine Image (AMI)&lt;/a> before deploying that image to a server group.&lt;/p>
&lt;ol>
&lt;li>
&lt;p>After selecting your Application, click the Pipelines category.&lt;/p>
&lt;figure>
&lt;img src="/images/overview/your-first-pipeline/empty-pipelines.png"/>
&lt;/figure>
&lt;/li>
&lt;li>
&lt;p>On this page, click &lt;strong>Configure a new pipeline&lt;/strong>.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Provide a name for your new pipeline and click &lt;strong>&lt;i class="fas fa-check-circle">&lt;/i>
Create&lt;/strong>.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>On the Pipeline page you should see:&lt;/p>
&lt;ul>
&lt;li>A visual representation of your pipeline and its stages (you should only have configurations at the beginning)&lt;/li>
&lt;li>Execution Options&lt;/li>
&lt;li>Automated Triggers&lt;/li>
&lt;li>Parameters&lt;/li>
&lt;li>Notifications&lt;/li>
&lt;li>Description&lt;/li>
&lt;/ul>
&lt;figure>
&lt;img src="/images/overview/your-first-pipeline/first-pipeline-view.png"/>
&lt;/figure>
&lt;/li>
&lt;/ol>
&lt;h3 id="add-a-trigger">Add a trigger&lt;/h3>
&lt;ol>
&lt;li>
&lt;p>Define how your pipeline is triggered. Scroll down to the &lt;strong>Automated Triggers&lt;/strong> section and click &lt;strong>&lt;i class="fas fa-plus-circle">&lt;/i>
Add Trigger&lt;/strong>. This section enables you to select a &lt;strong>Type&lt;/strong>:&lt;/p>
&lt;figure>
&lt;img src="/images/overview/your-first-pipeline/automated-trigger-types.png"/>
&lt;/figure>
&lt;/li>
&lt;li>
&lt;p>For this example, select Jenkins. By adding a trigger, you are defining how your pipeline is initialized.&lt;/p>
&lt;figure>
&lt;img src="/images/overview/your-first-pipeline/jenkins-trigger.png"/>
&lt;/figure>
&lt;p>&lt;strong>Note:&lt;/strong> &lt;strong>Property File&lt;/strong> is an important topic that will be covered in a &lt;a href="/continuous-deployment/spinnaker-user-guides/working-with-jenkins/#property-file">separate guide&lt;/a>.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Before you test your pipeline, you may want to consider enabling or disabling the trigger via the checkbox at the bottom.&lt;/p>
&lt;/li>
&lt;/ol>
&lt;h3 id="add-a-bake-stage">Add a Bake stage&lt;/h3>
&lt;ol>
&lt;li>
&lt;p>Now add your first stage: Baking an AMI. Click the &lt;strong>&lt;i class="fas fa-plus-circle">&lt;/i>
Add stage&lt;/strong> button in the visual representations section:&lt;/p>
&lt;figure>
&lt;img src="/images/overview/your-first-pipeline/pipeline-config-only.png"/>
&lt;/figure>
&lt;/li>
&lt;li>
&lt;p>Select &lt;strong>Bake&lt;/strong> from the &lt;strong>Types&lt;/strong> drop down list.&lt;/p>
&lt;figure>
&lt;img src="/images/overview/your-first-pipeline/add-bake-stage.png"/>
&lt;/figure>
&lt;/li>
&lt;li>
&lt;p>If you have multiple providers configured, select &lt;strong>Amazon&lt;/strong> from the &lt;strong>Provider&lt;/strong> drop down list. Next select the region or regions you want to bake in. In the &lt;strong>Package&lt;/strong> field, enter the name of the package that your Jenkins job archived.&lt;/p>
&lt;ul>
&lt;li>The package name should not include any version numbers. For example, if your build produces a deb file named “myapp_1.27-h343”, you would enter “myapp” here.&lt;/li>
&lt;li>If you configure your own Base AMI under the Advanced Options, the Base OS configuration is ignored.&lt;/li>
&lt;/ul>
&lt;figure>
&lt;img src="/images/overview/your-first-pipeline/bake-ami-config.png"/>
&lt;/figure>
&lt;/li>
&lt;/ol>
&lt;h3 id="add-a-deploy-stage">Add a Deploy stage&lt;/h3>
&lt;ol>
&lt;li>
&lt;p>Now add a Deploy stage by clicking &lt;strong>&lt;i class="fas fa-plus-circle">&lt;/i>
Add stage&lt;/strong> again. Select &lt;strong>Deploy&lt;/strong> In the &lt;strong>Type&lt;/strong> drop down list. Deploy’s configuration settings should pop up on the screen.&lt;/p>
&lt;figure>
&lt;img src="/images/overview/your-first-pipeline/add-deploy-stage.png"/>
&lt;/figure>
&lt;p>&lt;strong>Note:&lt;/strong> If you want to reorganize the order that the stages execute in the pipeline, you can add or remove precursor stages in the &lt;strong>Depends On&lt;/strong> field.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>In the &lt;strong>Deploy Configuration&lt;/strong> section, click on the “Add server group” button. Pick your provider, if more than one is configured. This example uses AWS.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Because this is a new application, do not choose to copy a configuration from a template. Press the &lt;strong>Continue without a template&lt;/strong> button.&lt;/p>
&lt;figure>
&lt;img src="/images/overview/your-first-pipeline/continue-without-template.png"/>
&lt;/figure>
&lt;/li>
&lt;li>
&lt;p>It&amp;rsquo;s important to set up the correct Deploy Strategy for your use case. Use the Highlander strategy for this example, which will ensure that only one server group for your application exists at a time.&lt;/p>
&lt;figure>
&lt;img src="/images/overview/your-first-pipeline/deploy-strategy.png"/>
&lt;/figure>
&lt;/li>
&lt;li>
&lt;p>In the &lt;strong>Load Balancers&lt;/strong> section, select the load balancer you created before you began this tutorial.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Select a security group that you are comfortable with, which will define the access rights to your resource.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Select Instance Type as Micro Utility, then set the size as “small”.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>For Capacity, select how many instances you want in your server group. For our example, we will set it at 1.&lt;/p>
&lt;figure>
&lt;img src="/images/overview/your-first-pipeline/deploy-capacity.png"/>
&lt;/figure>
&lt;/li>
&lt;li>
&lt;p>Click “add”. You will be brought back to your Application and see a new Deploy Configuration. Press “Save Changes” at the bottom right of your window.&lt;/p>
&lt;figure>
&lt;img src="/images/overview/your-first-pipeline/new-deployment-overview.png"/>
&lt;/figure>
&lt;/li>
&lt;/ol>
&lt;h2 id="execute-the-pipeline">Execute the Pipeline&lt;/h2>
&lt;ol>
&lt;li>
&lt;p>Click on the Pipelines option. You should see your new pipeline. Click on &lt;strong>&lt;i class="fas fa-play">&lt;/i>
Start Manual Execution&lt;/strong>.&lt;/p>
&lt;figure>
&lt;img src="/images/overview/your-first-pipeline/start-manual-execution.png"/>
&lt;/figure>
&lt;/li>
&lt;li>
&lt;p>You will be able to select a Build for your Jenkins job from a drop down menu. By default, Spinnaker will not recreate an AMI unless the underlying package has changed. If you would like to force it, you may use the checkbox for “Rebake”.&lt;/p>
&lt;figure>
&lt;img src="/images/overview/your-first-pipeline/select-build.png"/>
&lt;/figure>
&lt;/li>
&lt;li>
&lt;p>Press “Run”, and you should see a progress bar where blue represents running and green represents complete. Gray represents not ran or canceled, which is not in our example picture.&lt;/p>
&lt;figure>
&lt;img src="/images/overview/your-first-pipeline/job-in-progress.png"/>
&lt;/figure>
&lt;p>If your pipeline does not succeed, refer to one of the troubleshooting sections in the &lt;a href="/continuous-deployment/spinnaker-user-guides/spin-pipelines/#troubleshooting">pipelines&lt;/a>, &lt;a href="/continuous-deployment/spinnaker-user-guides/aws-guides/aws-baking-images/#troubleshooting">baking&lt;/a>, or &lt;a href="/continuous-deployment/spinnaker-user-guides/aws-guides/aws-deploy/#common-errors-and-troubleshooting">deploying&lt;/a> guides.&lt;/p>
&lt;/li>
&lt;/ol>
&lt;blockquote>
&lt;p>Note: Always remember to save your changes by clicking the button in the bottom right of the window.&lt;/p>
&lt;/blockquote></description></item><item><title>Continuous-Deployment: Manage Operator</title><link>/continuous-deployment/installation/armory-operator/op-manage-operator/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/continuous-deployment/installation/armory-operator/op-manage-operator/</guid><description>
&lt;blockquote>
&lt;p>This guide is for both the Armory Operator and the Spinnaker Operator. Armory Continuous Deployment and Spinnaker configuration is the same except for features only in Armory Continuous Deployment. Those features are marked &lt;img src="/images/proprietary.svg" alt="Proprietary">.&lt;/p>
&lt;/blockquote>
&lt;h2 id="upgrade-the-operator">Upgrade the Operator&lt;/h2>
&lt;blockquote>
&lt;p>Do not manually change Docker image tags in your existing manifest files. Operator computes the compatible Halyard version, so manually updating image tags is an &lt;strong>unsupported&lt;/strong> upgrade method and may cause issues.&lt;/p>
&lt;/blockquote>
&lt;p>Use the &lt;code>kubectl replace&lt;/code> command to replace your Operator deployment. See the &lt;code>kubectl replace&lt;/code> &lt;a href="https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands#replace">docs&lt;/a> for an explanation of this command.&lt;/p>
&lt;ol>
&lt;li>
&lt;p>Download the Operator version you want to upgrade to:&lt;/p>
&lt;p>&lt;strong>Armory Operator&lt;/strong>&lt;/p>
&lt;p>In the following command, replace &lt;code>&amp;lt;version&amp;gt;&lt;/code> with the specific version or &amp;ldquo;latest&amp;rdquo; for the most recent version.&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/download/&amp;lt;version&amp;gt;/manifests.tgz | tar -xz&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;strong>Spinnaker Operator&lt;/strong>&lt;/p>
&lt;p>In the following command, replace &lt;code>&amp;lt;version&amp;gt;&lt;/code> with the specific version or &amp;ldquo;latest&amp;rdquo; for the most recent version.&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/spinnaker-operator/releases/download/&amp;lt;version&amp;gt;/manifests.tgz | tar -xz&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>Update CRDs across the cluster:&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 replace -f deploy/crds/
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>Update the Operator:&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 -n spinnaker-operator replace -f deploy/operator/cluster
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;/ol>
&lt;h2 id="uninstall-the-operator">Uninstall the Operator&lt;/h2>
&lt;p>Uninstalling the Operator involves deleting its deployment and &lt;code>SpinnakerService&lt;/code> CRD. When you delete the Operator CRD, Kubernetes deletes any installation created by Operator. This occurs because the CRD is set as the owner of the resources, so they get garbage collected.&lt;/p>
&lt;p>You can remove this ownership relationship so that Armory Continuous Deployment is not
deleted when deleting the Operator by &lt;a href="#remove-operator-ownership-of-spinnaker-resources">removing Operator ownership of
resources&lt;/a>.&lt;/p>
&lt;h3 id="remove-operator-ownership-of-armory-continuous-deployment-resources">Remove Operator ownership of Armory Continuous Deployment resources&lt;/h3>
&lt;p>Run the following script to remove ownership of Armory resources, where &lt;code>NAMESPACE&lt;/code> is the namespace where Armory Continuous Deployment is installed:&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:#ff79c6">#! /usr/bin/env bash
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">&lt;/span>&lt;span style="color:#8be9fd;font-style:italic">NAMESPACE&lt;/span>&lt;span style="color:#ff79c6">=&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">for&lt;/span> rtype in deployment service
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">do&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">for&lt;/span> r in &lt;span style="color:#ff79c6">$(&lt;/span>kubectl -n &lt;span style="color:#8be9fd;font-style:italic">$NAMESPACE&lt;/span> get &lt;span style="color:#8be9fd;font-style:italic">$rtype&lt;/span> --selector&lt;span style="color:#ff79c6">=&lt;/span>&lt;span style="color:#8be9fd;font-style:italic">app&lt;/span>&lt;span style="color:#ff79c6">=&lt;/span>spin -o &lt;span style="color:#8be9fd;font-style:italic">jsonpath&lt;/span>&lt;span style="color:#ff79c6">=&lt;/span>&lt;span style="color:#f1fa8c">&amp;#39;{.items[*].metadata.name}&amp;#39;&lt;/span>&lt;span style="color:#ff79c6">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">do&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> kubectl -n &lt;span style="color:#8be9fd;font-style:italic">$NAMESPACE&lt;/span> patch &lt;span style="color:#8be9fd;font-style:italic">$rtype&lt;/span> &lt;span style="color:#8be9fd;font-style:italic">$r&lt;/span> --type json -p&lt;span style="color:#ff79c6">=&lt;/span>&lt;span style="color:#f1fa8c">&amp;#39;[{&amp;#34;op&amp;#34;: &amp;#34;remove&amp;#34;, &amp;#34;path&amp;#34;: &amp;#34;/metadata/ownerReferences&amp;#34;}]&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">done&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">done&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>After the script completes, delete the Operator and its CRDs from the Kubernetes cluster:&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 delete -n &amp;lt;namespace&amp;gt; -f deploy/operator/&amp;lt;installation type&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>kubectl delete -f deploy/crds/
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="help-resources">Help resources&lt;/h2>
&lt;ul>
&lt;li>Armory Operator and Armory Continuous Deployment: 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;/li>
&lt;li>Spinnaker Operator and Spinnaker: &lt;a href="https://join.slack.com/t/spinnakerteam/shared_invite/zt-7juwxmx0-nQ4Ud4pJcbuPykX3SXwQrg">Spinnaker Slack&lt;/a> &lt;code>#kubernetes-operator&lt;/code> channel.&lt;/li>
&lt;/ul></description></item><item><title>Continuous-Deployment: Secrets in Kubernetes</title><link>/continuous-deployment/armory-admin/secrets/secrets-kubernetes/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/continuous-deployment/armory-admin/secrets/secrets-kubernetes/</guid><description>
&lt;blockquote>
&lt;p>Note: Storing Spinnaker secrets in a Kubernetes secret is only supported if you&amp;rsquo;re using the Operator to deploy and manage Spinnaker. Additionally, you cannot encrypt configuration secrets for the UI (Deck) using the Kubernetes secret engine.&lt;/p>
&lt;/blockquote>
&lt;h2 id="creating-a-kubernetes-secret-for-spinnaker-to-use">Creating a Kubernetes secret for Spinnaker to use&lt;/h2>
&lt;p>This example uses a Kubernetes secret to store GitHub credentials and a kubeconfig file.&lt;/p>
&lt;p>Spinnaker&lt;sup>TM&lt;/sup> can read secrets only within its own namespace. It cannot access Kubernetes secrets stored in a different namespace. In this document, assume that Spinnaker lives in the namespace &lt;code>spinnaker&lt;/code>.&lt;/p>
&lt;p>You can store files as well as individual text values in Kubernetes secrets to be referenced by Spinnaker. To create the secret you can use this command, assuming you have a file named &lt;code>kubeconfig-prod&lt;/code> where you are running the command:&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 -n spinnaker create secret generic spin-secrets &lt;span style="color:#f1fa8c">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c">&lt;/span> --from-file&lt;span style="color:#ff79c6">=&lt;/span>kubeconfig-prod &lt;span style="color:#f1fa8c">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c">&lt;/span> --from-literal&lt;span style="color:#ff79c6">=&lt;/span>github-token&lt;span style="color:#ff79c6">=&lt;/span>aaaaaabbbbbbbbccccccccc
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>The command will create a secret named &lt;code>spin-secrets&lt;/code> in the &lt;code>spinnaker&lt;/code> namespace, having two keys: one is a kubeconfig file with key &lt;code>kubeconfig-prod&lt;/code> , and the other is a text value for a GitHub token with key &lt;code>github-token&lt;/code>.&lt;/p>
&lt;p>Kustomize also has a secret generator, so you can automatically deploy secrets using Kustomize along with the &lt;code>SpinnakerService&lt;/code> manifest. This is a &lt;code>kustomization.yml&lt;/code> file that creates the same secret as above:&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">apiVersion&lt;/span>: kustomize.config.k8s.io/v1beta1
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">kind&lt;/span>: Kustomization
&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">secretGenerator&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">name&lt;/span>: spin-secrets
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">files&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - kubeconfig-prod
&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> - github-token=aaaaaabbbbbbbbccccccccc
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>For more information on how to create secrets in Kubernetes refer to the &lt;a href="https://kubernetes.io/docs/concepts/configuration/secret/#creating-your-own-secrets">official Kubernetes docs&lt;/a> or the &lt;a href="https://github.com/kubernetes-sigs/kustomize/blob/master/examples/secretGeneratorPlugin.md">Kustomize docs&lt;/a>.&lt;/p>
&lt;h2 id="referencing-secrets">Referencing secrets&lt;/h2>
&lt;p>You reference secret values in your config with the following format:&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>encrypted:k8s!n:&amp;lt;secret name&amp;gt;!k:&amp;lt;secret key&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Similarly you can reference secret files:&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>encryptedFile:k8s!n:&amp;lt;secret name&amp;gt;!k:&amp;lt;secret key&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>For example, to reference the GitHub token:&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>encrypted:k8s!n:spin-secrets!k:github-token
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>And to reference the content of our kubeconfig 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>encryptedFile:k8s!n:spin-secrets!k:kubeconfig-prod
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div></description></item><item><title>Continuous-Deployment: Secrets with Google Cloud Storage</title><link>/continuous-deployment/armory-admin/secrets/secrets-gcs/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/continuous-deployment/armory-admin/secrets/secrets-gcs/</guid><description>
&lt;blockquote>
&lt;p>This example uses a bucket (&lt;code>mybucket&lt;/code>) to store GitHub credentials and a kubeconfig file.&lt;/p>
&lt;/blockquote>
&lt;h2 id="authorize-spinnaker-to-access-the-gcs-bucket">Authorize Spinnaker to access the GCS bucket&lt;/h2>
&lt;p>Since you&amp;rsquo;re storing sensitive information, make sure to protect the bucket by restricting access and &lt;a href="https://cloud.google.com/storage/docs/encryption/">enabling encryption&lt;/a>.&lt;/p>
&lt;p>Remember to run the Operator deployment and Spinnaker services with permissions to read that content.&lt;/p>
&lt;h2 id="storing-secrets">Storing secrets&lt;/h2>
&lt;p>Store your GitHub credentials in &lt;code>mybucket/spinnaker-secrets.yml&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">github&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">password&lt;/span>: &amp;lt;PASSWORD&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">token&lt;/span>: &amp;lt;TOKEN&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;strong>Note&lt;/strong>: You can store the password under different keys than &lt;code>github.password&lt;/code> and &lt;code>github.token&lt;/code>. To do so, change how you reference the secret.&lt;/p>
&lt;h2 id="referencing-secrets">Referencing secrets&lt;/h2>
&lt;p>Now that secrets are securely stored in the bucket, you reference them in your config files with the following format:&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>encrypted:gcs!b:&amp;lt;bucket&amp;gt;!f:&amp;lt;path to file&amp;gt;!k:&amp;lt;optional yaml key&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>For example, to reference &lt;code>github.password&lt;/code> from the file above, use:&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>encrypted:gcs!b:mybucket!f:spinnaker-secrets.yml!k:github.password
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>To reference the content of our kubeconfig 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>encrypted:gcs!f:mykubeconfig!b:mybucket
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div></description></item><item><title>Continuous-Deployment: Secrets with S3</title><link>/continuous-deployment/armory-admin/secrets/secrets-s3/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/continuous-deployment/armory-admin/secrets/secrets-s3/</guid><description>
&lt;blockquote>
&lt;p>See the S3 &lt;a href="https://docs.aws.amazon.com/AmazonS3/latest/gsg/GetStartedWithS3.html">Getting Started Guide&lt;/a> for more information on encryption in S3.
This example uses a bucket (&lt;code>mybucket&lt;/code>) in the &lt;code>us-west-2&lt;/code> region to store GitHub credentials and a kubeconfig file. You reference the bucket by its URL &lt;code>mybucket.us-west-2.amazonaws.com&lt;/code>.&lt;/p>
&lt;/blockquote>
&lt;h2 id="authorize-spinnaker-to-access-the-s3-bucket">Authorize Spinnaker to access the S3 bucket&lt;/h2>
&lt;p>Since you&amp;rsquo;re storing sensitive information, make sure to protect the bucket by restricting access and &lt;a href="https://docs.aws.amazon.com/AmazonS3/latest/user-guide/default-bucket-encryption.html">enabling encryption&lt;/a>.&lt;/p>
&lt;p>Remember to run the Operator and Spinnaker&lt;sup>TM&lt;/sup> services with IAM roles that allow them to read the keys stored in the AWS S3 Bucket.&lt;/p>
&lt;h2 id="storing-secrets">Storing secrets&lt;/h2>
&lt;h3 id="storing-credentials">Storing credentials&lt;/h3>
&lt;p>Store your GitHub credentials in &lt;code>mybucket/spinnaker-secrets.yml&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">github&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">password&lt;/span>: &amp;lt;PASSWORD&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">token&lt;/span>: &amp;lt;TOKEN&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Note: &lt;em>You could choose to store the password under different keys than &lt;code>github.password&lt;/code> and &lt;code>github.token&lt;/code>. You’d just need to change how to reference the secret further down.&lt;/em>&lt;/p>
&lt;h3 id="storing-sensitive-files">Storing sensitive files&lt;/h3>
&lt;p>Some Spinnaker configuration uses information stored as files. For example, upload the &lt;code>kubeconfig&lt;/code> file of your Kubernetes account directly to &lt;code>mybucket/mykubeconfig&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>aws s3 cp /path/to/mykubeconfig s3://mybucket/mykubeconfig
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="referencing-secrets">Referencing secrets&lt;/h2>
&lt;p>Now that secrets are safely stored in the bucket, you reference them from your config files with the following format. The S3 specific parameters (&lt;code>r:&amp;lt;region&amp;gt;&lt;/code>, &lt;code>b:&amp;lt;bucket&amp;gt;&lt;/code>, etc) can be in any order:&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>encrypted:s3!r:&amp;lt;region&amp;gt;!b:&amp;lt;bucket&amp;gt;!f:&amp;lt;path to file&amp;gt;!k:&amp;lt;optional yaml key&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>For example, to reference &lt;code>github.password&lt;/code> from the file above, we&amp;rsquo;ll use:&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>encrypted:s3!r:us-west-2!b:mybucket!f:spinnaker-secrets.yml!k:github.password
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>And to reference the content of our kubeconfig 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>encryptedFile:s3!r:us-west-2!b:mybucket!f:mykubeconfig
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div></description></item><item><title>Continuous-Deployment: Spinnaker Accounts CRD</title><link>/continuous-deployment/installation/armory-operator/op-spin-account-crd/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/continuous-deployment/installation/armory-operator/op-spin-account-crd/</guid><description>
&lt;div class="alert alert-warning" role="alert">
&lt;h4 class="alert-heading">Experimental&lt;/h4>
The information below is written for an experimental feature. Reach out to Armory if you are interested in using this! Your feedback will help shape the development of this feature.
&lt;br>&lt;br>
&lt;b>Do not use this experimental feature in a production instance of Armory Continuous Deployment.
&lt;/b>
&lt;/div>
&lt;h2 id="spinnakeracount-custom-resource-definition-overview">&lt;code>SpinnakerAcount&lt;/code> Custom Resource Definition overview&lt;/h2>
&lt;p>The Operator comes with a &lt;code>SpinnakerAccount&lt;/code> Custom Resource for managing Kubernetes accounts that you want to use with Spinnaker. This &lt;code>SpinnakerAccount&lt;/code> resource enables defining and managing Kubernetes accounts outside of Spinnaker&amp;rsquo;s manifest file. You create a separate manifest for each Kubernetes account and &lt;code>kubectl apply&lt;/code> each manifest. &lt;code>kubectl&lt;/code> delegates to the Operator, which then processes the manifest into the requisite configuration and adds the account to Armory Continuous Deployment or Spinnaker.&lt;/p>
&lt;p>For example, you have a pipeline that provisions a Kubernetes
cluster with Terraform. If you want that new cluster to be available, you can
create a &lt;code>SpinnakerAccount&lt;/code> of type &lt;code>Kubernetes&lt;/code> in Spinnaker&amp;rsquo;s namespace.&lt;/p>
&lt;h2 id="format">Format&lt;/h2>
&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">apiVersion&lt;/span>: spinnaker.io/v1alpha2
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">kind&lt;/span>: SpinnakerAccount
&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>: account-inline
&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">type&lt;/span>: &amp;lt;Account type&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">enabled&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">permissions&lt;/span>: {} &lt;span style="color:#6272a4"># List of permissions - see below&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">settings&lt;/span>: {} &lt;span style="color:#6272a4"># Settings see below&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="metadataname">&lt;code>metadata.name&lt;/code>&lt;/h3>
&lt;p>This is the name of the &lt;code>SpinnakerAccount&lt;/code>. It needs to be unique across all accounts - not just type of account as in Spinnaker.&lt;/p>
&lt;h3 id="spectype">&lt;code>spec.type&lt;/code>&lt;/h3>
&lt;p>Account type. See below for current support:&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Account type&lt;/th>
&lt;th>Status&lt;/th>
&lt;th>Notes&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;code>Kubernetes&lt;/code>&lt;/td>
&lt;td>alpha&lt;/td>
&lt;td>Only the Spinnaker Kubernetes V2 provider is supported&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h3 id="specenabled">&lt;code>spec.enabled&lt;/code>&lt;/h3>
&lt;p>Determines if the account is enabled. If not enabled, &lt;code>SpinnakerService&lt;/code> doesn&amp;rsquo;t use it.&lt;/p>
&lt;h3 id="specpermissions">&lt;code>spec.permissions&lt;/code>&lt;/h3>
&lt;p>Map of authorizations similar to most accounts in Spinnaker.&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">spec&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">permissions&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">READ&lt;/span>: [&lt;span style="color:#f1fa8c">&amp;#39;role1&amp;#39;&lt;/span>, &lt;span style="color:#f1fa8c">&amp;#39;role2&amp;#39;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">WRITE&lt;/span>: [&lt;span style="color:#f1fa8c">&amp;#39;role1&amp;#39;&lt;/span>, &lt;span style="color:#f1fa8c">&amp;#39;role3&amp;#39;&lt;/span>]
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="specsettings">&lt;code>spec.settings&lt;/code>&lt;/h3>
&lt;p>Map of settings that are supported by Halyard. For instance:&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">spec&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">type&lt;/span>: Kubernetes
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">settings&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">cacheThreads&lt;/span>: &lt;span style="color:#bd93f9">2&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">omitKinds&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - podPreset
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="speckubernetes">&lt;code>spec.kubernetes&lt;/code>&lt;/h3>
&lt;p>Auth options for Kubernetes account type. Pick only one of the options below:&lt;/p>
&lt;h4 id="speckuberneteskubeconfigfile">&lt;code>spec.kubernetes.kubeconfigFile&lt;/code>&lt;/h4>
&lt;p>References a file loaded either out of band to Clouddriver or (more likely) stored in a secret.&lt;/p>
&lt;h4 id="speckuberneteskubeconfigsecret">&lt;code>spec.kubernetes.kubeconfigSecret&lt;/code>&lt;/h4>
&lt;p>Reference to a Kubernetes secret in the same namespace that contains the kubeconfig 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">spec&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">type&lt;/span>: Kubernetes
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">kubernetes&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">kubeconfigSecret&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">name&lt;/span>: my-secret
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">key&lt;/span>: account1-kubeconfig
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h4 id="speckuberneteskubeconfig">&lt;code>spec.kubernetes.kubeconfig&lt;/code>&lt;/h4>
&lt;p>You can also inline the kubeconfig file if it does not contain secrets:&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">spec&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">type&lt;/span>: Kubernetes
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">kubernetes&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">kubeconfig&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">apiVersion&lt;/span>: v1
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">kind&lt;/span>: Config
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">clusters&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">cluster&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">certificate-authority-data&lt;/span>: LS0t...
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">server&lt;/span>: https://mycluster.url
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">name&lt;/span>: my-cluster
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">contexts&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">context&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">cluster&lt;/span>: my-cluster
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">user&lt;/span>: my-user
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">name&lt;/span>: my-context
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">current-context&lt;/span>: my-context
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">preferences&lt;/span>: {}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">users&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">name&lt;/span>: my-user
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">user&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">exec&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">apiVersion&lt;/span>: client.authentication.k8s.io/v1alpha1
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">args&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - token
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - -i
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - my-eks-cluster
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">command&lt;/span>: aws-iam-authenticator
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="help-resources">Help resources&lt;/h2>
&lt;ul>
&lt;li>Armory Operator and Armory Continuous Deployment: 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;/li>
&lt;li>Spinnaker Operator and Spinnaker: &lt;a href="https://join.slack.com/t/spinnakerteam/shared_invite/zt-7juwxmx0-nQ4Ud4pJcbuPykX3SXwQrg">Spinnaker Slack&lt;/a> &lt;code>#kubernetes-operator&lt;/code> channel.&lt;/li>
&lt;/ul></description></item><item><title>Continuous-Deployment: Advanced Operator Configuration</title><link>/continuous-deployment/installation/armory-operator/op-advanced-config/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/continuous-deployment/installation/armory-operator/op-advanced-config/</guid><description>
&lt;blockquote>
&lt;p>This guide is for both the Armory Operator and the Spinnaker Operator. Armory Continuous Deployment and Spinnaker configuration is the same except for features only in Armory Continuous Deployment. Those features are marked &lt;img src="/images/proprietary.svg" alt="Proprietary">.&lt;/p>
&lt;/blockquote>
&lt;h2 id="custom-halyard-configuration">Custom Halyard configuration&lt;/h2>
&lt;p>To override Halyard&amp;rsquo;s configuration, create a Kubernetes &lt;a href="https://kubernetes.io/docs/concepts/configuration/configmap/">ConfigMap&lt;/a> with the configuration changes you need. For example, if you&amp;rsquo;re using &lt;a href="/continuous-deployment/armory-admin/secrets/secrets-vault/">secrets management with Vault&lt;/a>(&lt;img src="/images/proprietary.svg" alt="Proprietary">), Halyard and Operator containers need your Vault configuration:&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">apiVersion&lt;/span>: v1
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">kind&lt;/span>: ConfigMap
&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>: halyard-custom-config
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">data&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">halyard-local.yml&lt;/span>: |&lt;span style="color:#f1fa8c">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> secrets:
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> vault:
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> enabled: true
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> url: &amp;lt;URL of vault server&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> path: &amp;lt;cluster path&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> role: &amp;lt;k8s role&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> authMethod: KUBERNETES&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Then, you can mount it in the Operator deployment and make it available to the Halyard and Operator containers:&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">apiVersion&lt;/span>: extensions/v1beta1
&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>&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>&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>: halconfig-volume
&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>&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>: halconfig-volume
&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>: halyard-custom-config
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">name&lt;/span>: halconfig-volume
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="patching-runtime-resources-with-kustomize">Patching Runtime Resources with Kustomize&lt;/h2>
&lt;p>Your Kubernetes cluster may require additional sidecars or configuration
present when managing Spinnaker resources. In these situations, the Armory
Operator provides the ability to patch resources during reconciliation. These
patches are executed via an embedded Kustomize instance in the Operator, and
requires no additional installation on the user&amp;rsquo;s part. You can apply Kustomize
patches at two levels of specificity:&lt;/p>
&lt;ul>
&lt;li>Spinnaker as a whole&lt;/li>
&lt;li>Individual services within Spinnaker&lt;/li>
&lt;/ul>
&lt;p>Additionally, you may make changes to the following resources generated by
the Operator:&lt;/p>
&lt;ul>
&lt;li>&lt;code>Deployment&lt;/code> manifests&lt;/li>
&lt;li>&lt;code>Service&lt;/code> manifests&lt;/li>
&lt;/ul>
&lt;p>For example, to ensure that a &lt;code>ConfigMap&lt;/code> is present on all Spinnaker services,
you would add the following configuration block to your &lt;code>SpinnakerService&lt;/code>
config:&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="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"> 5
&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"> 6
&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"> 7
&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"> 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="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="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;/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>: spinnaker.armory.io/v1alpha2
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">kind&lt;/span>: SpinnakerService
&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
&lt;/span>&lt;/span>&lt;span style="display:flex; background-color:#3d3f4a">&lt;span>&lt;span style="color:#ff79c6">spec&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex; background-color:#3d3f4a">&lt;span> &lt;span style="color:#ff79c6">kustomize&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex; background-color:#3d3f4a">&lt;span> &lt;span style="color:#ff79c6">spinnaker&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex; background-color:#3d3f4a">&lt;span> &lt;span style="color:#ff79c6">deployment&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex; background-color:#3d3f4a">&lt;span> &lt;span style="color:#ff79c6">patchesJson6902&lt;/span>: |&lt;span style="color:#f1fa8c">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> - op: add
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> path: /spec/template/spec/volumes/-
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> value:
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> name: custom-volume
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> configMap:
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> name: custom-volume
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> - op: add
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> path: /spec/template/spec/containers/0/volumeMounts/-
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> value:
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> mountPath: /opt/spinnaker/config/foo
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> type: configMap
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> name: custom-volume&lt;/span> &lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>
&lt;p>The previous configuration sample indicates how to specify patches in the
&lt;a href="https://kubectl.docs.kubernetes.io/references/kustomize/kustomization/patchesjson6902/">&lt;code>patchesJson6902&lt;/code>
format&lt;/a>,
that mounts a &lt;code>ConfigMap&lt;/code> called &lt;code>custom-volume&lt;/code> into the
&lt;code>/opt/spinnaker/config/foo&lt;/code> namespace.&lt;/p>
&lt;p>When you no longer need the patches, you can remove them from the Operator
config and they will be removed on next reconciliation for your cluster.&lt;/p>
&lt;h2 id="help-resources">Help resources&lt;/h2>
&lt;ul>
&lt;li>Armory Operator and Armory Continuous Deployment: 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;/li>
&lt;li>Spinnaker Operator and Spinnaker: &lt;a href="https://join.slack.com/t/spinnakerteam/shared_invite/zt-7juwxmx0-nQ4Ud4pJcbuPykX3SXwQrg">Spinnaker Slack&lt;/a> &lt;code>#kubernetes-operator&lt;/code> channel.&lt;/li>
&lt;/ul></description></item><item><title>Continuous-Deployment: Errors and Troubleshooting</title><link>/continuous-deployment/installation/armory-operator/op-troubleshooting/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/continuous-deployment/installation/armory-operator/op-troubleshooting/</guid><description>
&lt;h2 id="reconciler-error">Reconciler error&lt;/h2>
&lt;p>You may see this error even though Operator successfully applies your manifest.
This error may be normal depending on the frequency of the error. Controllers work with a local cache that can be out of sync. The issue should resolve itself via repeated synchronization. One error may be fine since it&amp;rsquo;s in the design of the reconciler. Too many means something is wrong.&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-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;level&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;error&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;ts&amp;#34;&lt;/span>: &lt;span style="color:#bd93f9">1592879777.6785922&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;logger&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;controller-runtime.controller&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;msg&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;Reconciler error&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;controller&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;spinnakerservice-controller&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;request&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;spinnaker-migration/spinnaker&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;error&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;Operation cannot be fulfilled on spinnakerservices.spinnaker.armory.io
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> \&amp;#34;spinnaker\&amp;#34;: the object has been modified; please apply your changes to the latest version and try again&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;stacktrace&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;github.com/go-logr/zapr.(*zapLogger).Error
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> /opt/spinnaker-operator/build/vendor/github.com/go-logr/zapr/zapr.go:128
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> sigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller).reconcileHandler
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> /opt/spinnaker-operator/build/vendor/sigs.k8s.io/controller-runtime/pkg/internal/controller/controller.go:218
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> sigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller).processNextWorkItem
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> /opt/spinnaker-operator/build/vendor/sigs.k8s.io/controller-runtime/pkg/internal/controller/controller.go:192
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> sigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller).worker
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> /opt/spinnaker-operator/build/vendor/sigs.k8s.io/controller-runtime/pkg/internal/controller/controller.go:171
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> k8s.io/apimachinery/pkg/util/wait.JitterUntil.func1
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> /opt/spinnaker-operator/build/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:152
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> k8s.io/apimachinery/pkg/util/wait.JitterUntil
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> /opt/spinnaker-operator/build/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:153
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> k8s.io/apimachinery/pkg/util/wait.Until
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> /opt/spinnaker-operator/build/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:88&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="kustomize-panic-error">Kustomize &lt;code>panic&lt;/code> error&lt;/h2>
&lt;p>If you installed Kustomize standalone, Kustomize v4.0+ &lt;code>kustomize build&lt;/code> throws a &lt;code>panic&lt;/code> error when it tries to parse and build using the patch files in the &lt;code>spinnaker-kustomize-patches&lt;/code> repo. For example:&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>panic: runtime error: index out of range &lt;span style="color:#ff79c6">[&lt;/span>145&lt;span style="color:#ff79c6">]&lt;/span> with length &lt;span style="color:#bd93f9">145&lt;/span> &lt;span style="color:#ff79c6">[&lt;/span>recovered&lt;span style="color:#ff79c6">]&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> panic: runtime error: index out of range &lt;span style="color:#ff79c6">[&lt;/span>145&lt;span style="color:#ff79c6">]&lt;/span> with length &lt;span style="color:#bd93f9">145&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Starting with &lt;code>kubectl&lt;/code> v1.21 , the bundled Kustomize version is v4.0.5, so if you execute &lt;code>kubectl kustomize .&lt;/code>, you also see this error.&lt;/p>
&lt;p>Solution:&lt;/p>
&lt;ul>
&lt;li>Downgrade standalone Kustomize to v3.8.10.&lt;/li>
&lt;li>Downgrade to &lt;code>kubectl&lt;/code> v1.19.&lt;/li>
&lt;/ul>
&lt;h2 id="help-resources">Help resources&lt;/h2>
&lt;ul>
&lt;li>Armory Operator: 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;/li>
&lt;li>Spinnaker Operator: &lt;a href="https://join.slack.com/t/spinnakerteam/shared_invite/zt-7juwxmx0-nQ4Ud4pJcbuPykX3SXwQrg">Spinnaker Slack&lt;/a> &lt;code>#kubernetes-operator&lt;/code> channel.&lt;/li>
&lt;/ul></description></item><item><title>Continuous-Deployment: Spinnaker Glossary</title><link>/continuous-deployment/overview/glossary/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/continuous-deployment/overview/glossary/</guid><description>
&lt;h2 id="amazon-web-services">Amazon Web Services&lt;/h2>
&lt;p>Amazon Web Services (AWS) is a cloud services provider from Amazon that offers computing power, database storage, content delivery and additional functionalities to businesses that operate in the cloud. For Spinnaker purposes, think of AWS as a data center but instead of being physical servers it is in the cloud.&lt;/p>
&lt;h2 id="amazon-machine-images">Amazon Machine Images&lt;/h2>
&lt;p>Amazon Machine Images (AMIs) are predetermined &amp;rsquo;templates&amp;rsquo; for instances that can be used to launch an instance of a virtual server. They generally include the configurations for the instance (Operating System, application server, applications), the permissions and Secrets that control which AWS accounts can access the instances, and a block device mapping that specifies the volumes to attach to the instance when it is launched.&lt;/p>
&lt;h2 id="application">Application&lt;/h2>
&lt;p>An &lt;a href="/continuous-deployment/spinnaker-user-guides/application-screen/">application&lt;/a> inside Spinnaker™ represents what you would typically find in a single &lt;a href="#Code-Repository">code repository&lt;/a> - and in many cases, an application maps directly to a microservice.&lt;/p>
&lt;h2 id="auto-scaling-group">Auto-Scaling Group&lt;/h2>
&lt;p>An auto-scaling group (ASG) contains a collection of &lt;a href="#elastic_compute_cloud">EC2&lt;/a> instances that share similar characteristics and are treated as a logical grouping for the purposes of instance scaling and management.&lt;/p>
&lt;h2 id="authorization">Authorization&lt;/h2>
&lt;p>Authorization (Auth) is the level of access to APIs that a user, application or role has within your &lt;a href="#Amazon_Web_Services">AWS&lt;/a> account. This is usually configured by your administrator.&lt;/p>
&lt;h2 id="baking">Baking&lt;/h2>
&lt;p>The term &amp;lsquo;&lt;a href="/continuous-deployment/spinnaker-user-guides/aws-guides/aws-baking-images/">Baking&lt;/a>&amp;rsquo; is used within Spinnaker to refer to the process of creating machine images, usually with &lt;a href="#Amazon_Machine_Images">AMIs&lt;/a>.&lt;/p>
&lt;h2 id="cloud">Cloud&lt;/h2>
&lt;p>Short for cloud computing, the cloud as we refer to it is internet-based computing that provides processing resources (e.g.; database storage, networks, servers, applications) on demand to devices connected to the internet.&lt;/p>
&lt;h2 id="clouddriver">Clouddriver&lt;/h2>
&lt;p>A sub-service within Spinnaker. See the &lt;a href="https://www.spinnaker.io/reference/architecture/">Spinnaker Architecture&lt;/a> for more information.&lt;/p>
&lt;h2 id="cluster">Cluster&lt;/h2>
&lt;p>A server group is a regional view of servers, whereas a cluster is a world-wide view of server groups.&lt;/p>
&lt;h2 id="code-repository">Code repository&lt;/h2>
&lt;p>A source code repository is a private or public storage location for file archive and web hosting, used for source codes of software or web pages.&lt;/p>
&lt;h2 id="continuous-delivery">Continuous Delivery&lt;/h2>
&lt;p>Continuous Delivery (CD) is an engineering approach for DevOps teams to produce software in short cycles: building, testing, and releasing software at a fast and frequent pace in order to iterate as quickly as possible.&lt;/p>
&lt;h2 id="continuous-integration">Continuous Integration&lt;/h2>
&lt;p>Continuous Integration (CI) is a development practice where software developers merge their separate changes and updates to a main source code repository - usually multiple times a day.&lt;/p>
&lt;h2 id="deck">Deck&lt;/h2>
&lt;p>A sub-service within Spinnaker. See the &lt;a href="https://www.spinnaker.io/reference/architecture/">Spinnaker Architecture&lt;/a> for more information.&lt;/p>
&lt;h2 id="debian-package">Debian package&lt;/h2>
&lt;p>Debian packages (deb) are two tar archives contained in standard Unix ar archives - one holds the control information and the other contains the data used for installation.&lt;/p>
&lt;h2 id="detail">Detail&lt;/h2>
&lt;p>For cluster and server group configurations, &amp;lsquo;Detail&amp;rsquo; is usually any additional piece of user-defined information you want to label your cluster and server group(s) with.&lt;/p>
&lt;h2 id="echo">Echo&lt;/h2>
&lt;p>A sub-service within Spinnaker. See the &lt;a href="https://www.spinnaker.io/reference/architecture/">Spinnaker Architecture&lt;/a> for more information.&lt;/p>
&lt;h2 id="elastic-compute-cloud">Elastic Compute Cloud&lt;/h2>
&lt;p>Elastic Compute Cloud (EC2) is part of the AWS cloud platform, a &amp;ldquo;pay as you go&amp;rdquo; virtual computer renting system that contains preconfigured software and applications requested by the user.&lt;/p>
&lt;h2 id="execution">Execution&lt;/h2>
&lt;p>When a pipeline runs, the end result is called an execution.&lt;/p>
&lt;h2 id="gate">Gate&lt;/h2>
&lt;p>A sub-service within Spinnaker. See the &lt;a href="https://www.spinnaker.io/reference/architecture/">Spinnaker Architecture&lt;/a> for more information.&lt;/p>
&lt;h2 id="igor">Igor&lt;/h2>
&lt;p>A sub-service within Spinnaker. See the &lt;a href="https://www.spinnaker.io/reference/architecture/">Spinnaker Architecture&lt;/a> for more information.&lt;/p>
&lt;h2 id="infrastructure-version">Infrastructure version&lt;/h2>
&lt;p>The infrastructure&amp;rsquo;s version number; such as v011, v012, etc. This is automatically appended and is not user defined.&lt;/p>
&lt;p>In AWS, Spinnaker will name your ASGs and Launch Configurations according to the naming convention mentioned above (ie. &amp;ldquo;armoryspinnaker-prod-polling-v015&amp;rdquo;).&lt;/p>
&lt;p>Please note that if your user definition includes a hyphen, it will disrupt the naming convention.&lt;/p>
&lt;h4 id="jenkins">Jenkins&lt;/h4>
&lt;p>&lt;a href="/continuous-deployment/spinnaker-user-guides/working-with-jenkins/">Jenkins&lt;/a> is an open source automation server that can package applications for distribution. Spinnaker pipelines can be [triggered]trigger) from a build on Jenkins.&lt;/p>
&lt;h4 id="load-balancer">Load balancer&lt;/h4>
&lt;p>For Spinnaker&amp;rsquo;s purposes, a &lt;a href="/continuous-deployment/overview/load-balancers/">load balancer&lt;/a> is a service that automatically distributes incoming traffic across all instances. The one most commonly used within AWS is the Elastic Load Balancer (ELB).&lt;/p>
&lt;h4 id="orca">Orca&lt;/h4>
&lt;p>A sub-service within Spinnaker. See the &lt;a href="https://www.spinnaker.io/reference/architecture/">Spinnaker Architecture&lt;/a> for more information.&lt;/p>
&lt;h4 id="pipeline">Pipeline&lt;/h4>
&lt;p>A pipeline in Spinnaker is a series of stages linked together that can be executed serially or in parallel. All pipelines are defined in the context of an application. A typical pipeline will contain stages for &amp;ldquo;creating images&amp;rdquo;, &amp;ldquo;testing&amp;rdquo;, and &amp;ldquo;deploying&amp;rdquo;. The process of &amp;ldquo;creating images&amp;rdquo; is also commonly referred to as a &amp;ldquo;bake&amp;rdquo;.&lt;/p>
&lt;p>Learn to create &lt;a href="/continuous-deployment/overview/your-first-pipeline/">your first pipeline here&lt;/a>.&lt;/p>
&lt;h4 id="project">Project&lt;/h4>
&lt;p>A project inside Spinnaker is a logical grouping of applications. For example, we might create a project called &amp;ldquo;Spinnaker&amp;rdquo; and its applications would be &amp;ldquo;Deck&amp;rdquo;, &amp;ldquo;Orca&amp;rdquo;, &amp;ldquo;Clouddriver&amp;rdquo;, etc. Spinnaker provides a helpful dashboard view using Deck for each project to visualize its applications and status of each application contained within it.&lt;/p>
&lt;h4 id="rosco">Rosco&lt;/h4>
&lt;p>A sub-service within Spinnaker. See the &lt;a href="https://www.spinnaker.io/reference/architecture/">Spinnaker Architecture&lt;/a> for more information.&lt;/p>
&lt;h4 id="scale-server-group">Scale server group&lt;/h4>
&lt;p>Reduce the total number of server groups remaining in the cluster.&lt;/p>
&lt;h4 id="server-group">Server group&lt;/h4>
&lt;p>From an Amazon Web Service (AWS) point of view, a server group is represented by an auto-scaling group (ASGs). All applications that are deployed by Spinnaker are deployed to server groups.&lt;/p>
&lt;h4 id="shrink-server-group">Shrink server group&lt;/h4>
&lt;p>Reduce the number of instances in a particular server group.&lt;/p>
&lt;h4 id="stack">Stack&lt;/h4>
&lt;p>You can think of a &amp;lsquo;Stack&amp;rsquo; as a tag you give to anything that you want to be integrated together. Environments are usually a good example of something you would tag with a Stack. If you have an app that has an ELB, a Cache, and an &lt;a href="#auto-scaling-group">ASG&lt;/a>, usually you would want to run integration tests on your staging environment separately from your production environment. In that case, you would give the staging ELB, Cache, and ASG all the &amp;ldquo;staging&amp;rdquo; stack, while prod ELB, Cache, and ASG would be the &amp;ldquo;prod&amp;rdquo; stack.&lt;/p>
&lt;p>Note that Stack names are defined by the user in the Spinnaker configuration User Interface (UI).&lt;/p>
&lt;h4 id="stage">Stage&lt;/h4>
&lt;p>Within a pipeline, the tasks that pipeline performs are called stages.&lt;/p>
&lt;h4 id="trigger">Trigger&lt;/h4>
&lt;p>A trigger is the entry point to a &lt;a href="#pipeline">pipeline&lt;/a> - when a pipeline is triggered, it attempts to &lt;a href="#execution">execute&lt;/a>.&lt;/p></description></item><item><title>Continuous-Deployment: v2.36.9 Armory Continuous Deployment Release (Spinnaker™ v1.36.1)</title><link>/continuous-deployment/release-notes/rn-armory-spinnaker/armoryspinnaker_v2-36-9/</link><pubDate>Wed, 01 Apr 2026 00:00:00 +0000</pubDate><guid>/continuous-deployment/release-notes/rn-armory-spinnaker/armoryspinnaker_v2-36-9/</guid><description>
&lt;!--
MAKE SURE TO ADD 'LTS' OR 'FEATURE' TO THE TITLE TO INDICATE RELEASE CATEGORY.
FOR EXAMPLE, "Armory Continuous Deployment Release LTS" or "Armory Continuous Deployment Release Feature" so users know release category and support time period
-->
&lt;h2 id="2026-04-01-release-notes">2026-04-01 release notes&lt;/h2>
&lt;blockquote>
&lt;p>Note: If you experience production issues after upgrading Armory Continuous Deployment, roll back to a previous working version and report issues to &lt;a href="http://go.armory.io/support">http://go.armory.io/support&lt;/a>.&lt;/p>
&lt;/blockquote>
&lt;h2 id="required-armory-operator-version">Required Armory Operator version&lt;/h2>
&lt;div class="alert alert-warning" role="alert">
&lt;h4 class="alert-heading">Important&lt;/h4>
&lt;a href="/continuous-deployment/installation/armory-operator/">Armory Operator&lt;/a> has been deprecated and is considered EOL. Please migrate to the &lt;a href="/continuous-deployment/spinnaker-user-guides/armory-operator-to-kustomize-migration/">Kustomize&lt;/a> method of deployment.
&lt;/div>
&lt;p>To install, upgrade, or configure Armory CD 2.36.9, use Armory Operator 1.8.6 or later.&lt;/p>
&lt;h2 id="security">Security&lt;/h2>
&lt;p>Armory scans the codebase as we develop and release software. Contact your Armory account representative for information about this release.&lt;/p>
&lt;h2 id="breaking-changes">Breaking changes&lt;/h2>
&lt;!-- Copy/paste from the previous version if there are recent ones. We can drop breaking changes after 3 minor versions. Add new ones from OSS and Armory. -->
&lt;p>The following configuration properties have been restructured:&lt;/p>
&lt;p>Previous Configuration:&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">tasks&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">days-of-execution-history&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">number-of-old-pipeline-executions-to-include&lt;/span>:
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>New configuration format&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">tasks&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">controller&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">days-of-execution-history&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">number-of-old-pipeline-executions-to-include&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">optimize-execution-retrieval&lt;/span>: &amp;lt;boolean&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">max-execution-retrieval-threads&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">max-number-of-pipeline-executions-to-process&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">execution-retrieval-timeout-seconds&lt;/span>:
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>These changes improve query performance and execution retrieval efficiency, particularly for large-scale pipeline applications.&lt;/p>
&lt;p>&lt;a href="#performance-improvements-for-sql-backend">Performance Improvements for SQL Backend&lt;/a>&lt;/p>
&lt;h2 id="known-issues">Known issues&lt;/h2>
&lt;!-- Copy/paste known issues from the previous version if they're not fixed. Add new ones from OSS and Armory. If there aren't any issues, state that so readers don't think we forgot to fill out this section. -->
&lt;h3 id="echo-filter-enabled-pipelines-feature">Echo Filter enabled pipelines feature&lt;/h3>
&lt;p>Spinnaker OSS Version 1.31.0 introduced a feature to filter pipelines from front50, that was disabled by default.
Version 1.35.0 enabled it by default, which is not recommended and can cause issues with automated triggers.
In Armory CD 2.36.2 we recommend to explicitly disable this feature by setting the following configuration:&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-fallback" data-lang="fallback">&lt;span style="display:flex;">&lt;span>apiVersion: spinnaker.armory.io/v1alpha2
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>kind: SpinnakerService
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>metadata:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> name: spinnaker
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>spec:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> spinnakerConfig:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> profiles:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> echo:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> pipelineCache:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> filterFront50Pipelines: false
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="highlighted-updates">Highlighted updates&lt;/h2>
&lt;h3 id="clouddriver-redis-scheduler-configuration-validation">Clouddriver: Redis scheduler configuration validation&lt;/h3>
&lt;p>Clouddriver now validates Redis scheduler configuration keys more strictly at startup:&lt;/p>
&lt;ul>
&lt;li>Legacy scalar &lt;code>redis.scheduler&lt;/code> is rejected.&lt;/li>
&lt;li>Legacy &lt;code>redis.parallelism&lt;/code> is rejected.&lt;/li>
&lt;li>Use nested keys under &lt;code>redis.scheduler.*&lt;/code>.&lt;/li>
&lt;/ul>
&lt;p>Before:&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">redis&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">scheduler&lt;/span>: default
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">parallelism&lt;/span>: -&lt;span style="color:#bd93f9">1&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>After:&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">redis&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">scheduler&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">enabled&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">type&lt;/span>: default
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">parallelism&lt;/span>: -&lt;span style="color:#bd93f9">1&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>If &lt;code>redis.scheduler.type&lt;/code> is missing or blank, Clouddriver defaults to &lt;code>default&lt;/code> for compatibility.&lt;/p>
&lt;h3 id="security-hardening-url-restriction-validation-for-artifacts-and-webhooks">Security hardening: URL restriction validation for artifacts and webhooks&lt;/h3>
&lt;p>This release includes fixes that improve validation around user-supplied Git repository inputs used by GitRepo artifacts.&lt;/p>
&lt;p>This release tightens URL host validation for artifact accounts and Orca webhook URL restrictions:&lt;/p>
&lt;ul>
&lt;li>Validation now uses parsed host handling (&lt;code>HttpUrl.host()&lt;/code>) instead of authority fallback parsing.&lt;/li>
&lt;li>This prevents authority/userinfo patterns from bypassing hostname checks.&lt;/li>
&lt;li>URL handling for underscore hostnames and IPv6 input is stricter and more predictable.&lt;/li>
&lt;/ul>
&lt;p>If you use uncommon URL formats (for example userinfo segments, unbracketed IPv6 literals, or underscore-based hosts), test those paths after upgrade.&lt;/p>
&lt;h3 id="clouddriver-sql-cache-sharding-aware-unknown-agent-cleanup">Clouddriver SQL cache: sharding-aware unknown-agent cleanup&lt;/h3>
&lt;p>&lt;code>SqlUnknownAgentCleanupAgent&lt;/code> now respects shard ownership and includes additional safety controls to avoid cross-pod or startup-race cleanup behavior in SQL cache environments.&lt;/p>
&lt;p>Key updates:&lt;/p>
&lt;ul>
&lt;li>The cleanup agent remains opt-in and disabled by default.&lt;/li>
&lt;li>The cleanup agent is only created when &lt;code>sql.read-only=false&lt;/code>.&lt;/li>
&lt;li>Cleanup skips when sharding state is uninitialized or misconfigured.&lt;/li>
&lt;li>New controls include &lt;code>minRecordAgeSeconds&lt;/code>, &lt;code>dryRun&lt;/code>, and &lt;code>excludedDataTypes&lt;/code>.&lt;/li>
&lt;/ul>
&lt;p>Configuration:&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">sql&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">unknown-agent-cleanup-agent&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">enabled&lt;/span>: &lt;span style="color:#ff79c6">false&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">pollIntervalSeconds&lt;/span>: &lt;span style="color:#bd93f9">120&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">timeoutSeconds&lt;/span>: &lt;span style="color:#bd93f9">60&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">minRecordAgeSeconds&lt;/span>: &lt;span style="color:#bd93f9">300&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">deleteBatchSize&lt;/span>: &lt;span style="color:#bd93f9">100&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">dryRun&lt;/span>: &lt;span style="color:#ff79c6">false&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">excludedDataTypes&lt;/span>: []
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h4 id="ha-deployment-guidance">HA deployment guidance&lt;/h4>
&lt;p>In HA mode, enable &lt;code>sql.unknown-agent-cleanup-agent.enabled: true&lt;/code> only on Clouddriver caching pods.&lt;/p>
&lt;p>For caching pods:&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">sql&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">unknown-agent-cleanup-agent&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">enabled&lt;/span>: &lt;span style="color:#ff79c6">true&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>For all non-caching Clouddriver pods:&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">sql&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">unknown-agent-cleanup-agent&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">enabled&lt;/span>: &lt;span style="color:#ff79c6">false&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="clouddriver-cache-sharding-pluggable-strategy-and-key-extraction">Clouddriver cache sharding: pluggable strategy and key extraction&lt;/h3>
&lt;p>Cache sharding now supports pluggable strategies and key extractors for Redis and SQL sharding observers:&lt;/p>
&lt;ul>
&lt;li>&lt;code>strategy: modulo&lt;/code> (default, preserves legacy ownership mapping)&lt;/li>
&lt;li>&lt;code>strategy: canonical-modulo&lt;/code> (canonical positive modulo)&lt;/li>
&lt;li>&lt;code>strategy: jump&lt;/code> (jump consistent hash, less key movement during scale events)&lt;/li>
&lt;li>&lt;code>sharding-key: account | region | agent&lt;/code>&lt;/li>
&lt;/ul>
&lt;p>Defaults remain &lt;code>strategy: modulo&lt;/code> and &lt;code>sharding-key: account&lt;/code>, so existing behavior is preserved unless you opt in to a different strategy/key.&lt;/p>
&lt;p>Configuration:&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">cache-sharding&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">strategy&lt;/span>: modulo
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">sharding-key&lt;/span>: account
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">replica-ttl-seconds&lt;/span>: &lt;span style="color:#bd93f9">60&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">heartbeat-interval-seconds&lt;/span>: &lt;span style="color:#bd93f9">30&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;code>SqlCachingPodsObserver&lt;/code> also resets to a fail-open state on heartbeat/topology refresh failure to avoid stale routing decisions.&lt;/p>
&lt;h3 id="clouddriver-redis-priority-scheduler-opt-in">Clouddriver: Redis Priority Scheduler (opt-in)&lt;/h3>
&lt;p>A new Redis-based &lt;code>priority&lt;/code> scheduler is available for Clouddriver caching agents.&lt;/p>
&lt;p>Key points:&lt;/p>
&lt;ul>
&lt;li>Uses Redis sorted sets and Lua scripts for atomic scheduling transitions.&lt;/li>
&lt;li>Adds cleanup services (zombie/orphan), circuit breakers, and richer scheduler observability.&lt;/li>
&lt;li>Requires Redis 6.2+ (&lt;code>ZMSCORE&lt;/code>).&lt;/li>
&lt;/ul>
&lt;p>Enablement:&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">redis&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">scheduler&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">enabled&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">type&lt;/span>: priority
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">agent&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">max-concurrent-agents&lt;/span>: &lt;span style="color:#bd93f9">100&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Migration notes:&lt;/p>
&lt;ul>
&lt;li>Legacy scalar &lt;code>redis.scheduler&lt;/code> and legacy &lt;code>redis.parallelism&lt;/code> are rejected.&lt;/li>
&lt;li>&lt;code>redis.scheduler.parallelism&lt;/code> is ignored in &lt;code>priority&lt;/code> mode.&lt;/li>
&lt;li>Use &lt;code>redis.agent.max-concurrent-agents&lt;/code> to control concurrency for &lt;code>priority&lt;/code> mode.&lt;/li>
&lt;li>&lt;code>redis.agent.disabledAgents&lt;/code> is ignored in &lt;code>priority&lt;/code> mode; use &lt;code>redis.agent.disabled-pattern&lt;/code>.&lt;/li>
&lt;/ul>
&lt;h3 id="aws-jdbc-driver-update">AWS JDBC Driver Update&lt;/h3>
&lt;p>The AWS JDBC driver has been updated from the deprecated aws-mysql-jdbc driver (version 1.0.0) to the &lt;a href="https://github.com/aws/aws-advanced-jdbc-wrapper">AWS Advanced JDBC Wrapper&lt;/a>.&lt;/p>
&lt;p>This update adds support for IAM authentication with AWS Aurora Global Database endpoints. The previous driver did not support global database endpoint format (&lt;code>*.global.rds.amazonaws.com&lt;/code>) when using IAM authentication, resulting in the error:&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-fallback" data-lang="fallback">&lt;span style="display:flex;">&lt;span>java.sql.SQLException: Unsupported AWS hostname &amp;#39;&amp;lt;hostname&amp;gt;.global.rds.amazonaws.com&amp;#39;.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Amazon domain name in format *.AWS-Region.rds.amazonaws.com is expected
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;strong>Note:&lt;/strong> Standard database connections (without IAM authentication) continue to work as before and do not require any configuration changes.&lt;/p>
&lt;p>&lt;strong>Affected services:&lt;/strong> Front50, Orca, Clouddriver, Fiat&lt;/p>
&lt;h4 id="configuration-for-iam-authentication-with-aurora-global-database">Configuration for IAM Authentication with Aurora Global Database&lt;/h4>
&lt;p>If you are using IAM authentication and want to connect to Aurora Global Database endpoints, update your JDBC connection string:&lt;/p>
&lt;p>&lt;strong>New JDBC URL format:&lt;/strong>&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-fallback" data-lang="fallback">&lt;span style="display:flex;">&lt;span>jdbc:aws-wrapper:mysql://&amp;lt;GLOBAL_ENDPOINT&amp;gt;:&amp;lt;PORT&amp;gt;/&amp;lt;DATABASE&amp;gt;?wrapperPlugins=iam&amp;amp;globalClusterInstanceHostPatterns=?.&amp;lt;CLUSTER_IDENTIFIER&amp;gt;.&amp;lt;REGION1&amp;gt;.rds.amazonaws.com,?.&amp;lt;CLUSTER_IDENTIFIER&amp;gt;.&amp;lt;REGION2&amp;gt;.rds.amazonaws.com&amp;amp;iamRegion=&amp;lt;CURRENT_REGION&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;strong>Example:&lt;/strong> If your Aurora Global Database has:&lt;/p>
&lt;ul>
&lt;li>Global endpoint: &lt;code>mydb-global.global-xxxxx.global.rds.amazonaws.com&lt;/code>&lt;/li>
&lt;li>Primary (us-west-2): &lt;code>mydb.cluster-abc123.us-west-2.rds.amazonaws.com&lt;/code>&lt;/li>
&lt;li>Secondary (us-east-1): &lt;code>mydb.cluster-abc123.us-east-1.rds.amazonaws.com&lt;/code>&lt;/li>
&lt;/ul>
&lt;p>Configure the JDBC URL as:&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-fallback" data-lang="fallback">&lt;span style="display:flex;">&lt;span>jdbc:aws-wrapper:mysql://mydb-global.global-xxxxx.global.rds.amazonaws.com:3306/front50?wrapperPlugins=iam&amp;amp;globalClusterInstanceHostPatterns=?.cluster-abc123.us-west-2.rds.amazonaws.com,?.cluster-abc123.us-east-1.rds.amazonaws.com&amp;amp;iamRegion=us-west-2
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="observability-plugin-update">Observability Plugin Update&lt;/h3>
&lt;p>The Armory Observability plugin has been updated to version 1.6.1 to resolve compatibility issues with the new AWS JDBC wrapper.&lt;/p>
&lt;h3 id="security-enhancement-url-filteringrestriction-capabilities-on-artifact-accounts">Security enhancement: Url Filtering/Restriction capabilities on Artifact accounts&lt;/h3>
&lt;p>Starting in Armory Continuous Deployment 2.36.6, we have enabled to capability to filter/restrict urls that can be accessed per artifact accounts.
This feature provides a safeguard around user input of remote urls when artifact accounts are in used in the context of a pipeline execution.&lt;/p>
&lt;p>An example configuration can be found below which can be added per artifact account (http, github, helm):&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">artifacts&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">http&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">enabled&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">accounts&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">name&lt;/span>: http_account
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">urlRestrictions&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">allowedDomains&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - mydomain.com
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - raw.github.com
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - api.github.com
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">rejectLocalhost&lt;/span>: &lt;span style="color:#ff79c6">true&lt;/span> &lt;span style="color:#6272a4">#default value&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">rejectLinkLocal&lt;/span>: &lt;span style="color:#ff79c6">true&lt;/span> &lt;span style="color:#6272a4">#default value&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">rejectVerbatimIps&lt;/span>: &lt;span style="color:#ff79c6">true&lt;/span> &lt;span style="color:#6272a4">#default value&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">rejectedIps&lt;/span>: [] &lt;span style="color:#6272a4">#default value&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>By default the configuration blocks any local CIDR ranges (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16), localhost, link local and raw IPs.
For full configuration details please refer to this &lt;a href="https://github.com/spinnaker/spinnaker/blob/main/clouddriver/clouddriver-artifacts/src/main/java/com/netflix/spinnaker/clouddriver/artifacts/config/HttpUrlRestrictions.java">configuration class&lt;/a>&lt;/p>
&lt;h3 id="armory-continuous-deployment-2362-onwards-docker-images-now-based-on-ubuntu">Armory Continuous Deployment 2.36.2 onwards Docker images now based on Ubuntu&lt;/h3>
&lt;p>The Armory Continuous Deployment 2.36.2 Docker images have been updated to use Ubuntu as the base image, replacing the previous Alpine base.
This change enhances compatibility with various libraries and tools, improving overall stability and performance.
Additionally, the new images now include all the necessary dependencies for authentication on a Kebreros server.&lt;/p>
&lt;h3 id="pipeline-reference-feature-is-now-able-to-lazy-load-the-pipeline-reference-pipelines">Pipeline Reference feature is now able to Lazy load the pipeline reference pipelines&lt;/h3>
&lt;p>In Spinnaker OSS release 1.35.0 Orca introduced a feature flag to reduce the execution size in nested pipelines by
converting PipelineTrigger to PipelineRefTrigger:
&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="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;/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>: spinnaker.armory.io/v1alpha2
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">kind&lt;/span>: SpinnakerService
&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
&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">spinnakerConfig&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">profiles&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">orca&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">executionRepository&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">sql&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">enabled&lt;/span>: &lt;span style="color:#ff79c6">true&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex; background-color:#3d3f4a">&lt;span> &lt;span style="color:#ff79c6">pipelineRef&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">true&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;/p>
&lt;p>When enabled, child pipeline execution ids are stored in sql instead of the entire child pipeline execution context.&lt;/p>
&lt;p>In Armory CD 2.36.2 this functionality is now extended to make the in-memory representation of the pipelines aware of the pipeline reference
and to not load in-memory a full representation of the pipeline context. To enable this feature in Deck add the following in &lt;code>settings-local.js&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="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="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">12
&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>: spinnaker.armory.io/v1alpha2
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">kind&lt;/span>: SpinnakerService
&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
&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">spinnakerConfig&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">profiles&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">settings-local.js&lt;/span>: |&lt;span style="color:#f1fa8c">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> ...
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex; background-color:#3d3f4a">&lt;span>&lt;span style="color:#f1fa8c"> window.spinnakerSettings.feature.pipelineRefEnabled = true;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> ...&lt;/span> &lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>
&lt;p>&lt;em>Orca &lt;a href="https://github.com/spinnaker/orca/pull/4842">PR 4842&lt;/a>&lt;/em>
&lt;em>Deck &lt;a href="https://github.com/spinnaker/deck/pull/10164">PR 10164&lt;/a>&lt;/em>&lt;/p>
&lt;h3 id="new-pipeline-stage-configuration-backoffperiodms">New pipeline stage configuration &lt;code>backOffPeriodMs&lt;/code>&lt;/h3>
&lt;p>A new configuration option &lt;code>backOffPeriodMs&lt;/code> has been added to the pipeline stage configuration. This option allows users
to specify a back-off period in milliseconds for stages that may need to retry operations after a failure. Before this,
pipeline authors had no control over the backoff period. It came from either spinnaker configuration properties or
implementations of RetryableTask.getDynamicBackoffPeriod.&lt;/p>
&lt;p>Additionally, the following configuration options have been added that allow admins to specify globablly the backoff period:
&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="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;/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>: spinnaker.armory.io/v1alpha2
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">kind&lt;/span>: SpinnakerService
&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
&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">spinnakerConfig&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">profiles&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">orca&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex; background-color:#3d3f4a">&lt;span> &lt;span style="color:#ff79c6">tasks.global.backOffPeriod&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex; background-color:#3d3f4a">&lt;span> &lt;span style="color:#ff79c6">tasks.&amp;lt;cloud provider&amp;gt;.backOffPeriod&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex; background-color:#3d3f4a">&lt;span> tasks.&amp;lt;cloud provider&amp;gt;.&amp;lt;account name&amp;gt;.backOffPeriod:&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;/p>
&lt;p>&lt;em>Orca &lt;a href="https://github.com/spinnaker/orca/pull/4841">PR 4841&lt;/a>&lt;/em>&lt;/p>
&lt;h3 id="java-upgrades">Java upgrades&lt;/h3>
&lt;p>Java 17 is now the default source and target. Java 11 support has been removed entirely. Please note you may need to add the following JAVA_OPTS options: &lt;code>--add-exports=java.base/sun.security.x509=ALL-UNNAMED --add-exports=java.base/sun.security.pkcs=ALL-UNNAMED --add-exports=java.base/sun.security.rsa=ALL-UNNAMED&lt;/code> to clouddriver if using GCP accounts due to credentials parsing of certificates. These can set in the &lt;a href="https://spinnaker.io/docs/reference/halyard/custom/#custom-service-settings">service-settings config&lt;/a> . These configs are likely to be added to the defaults in all future releases&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="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;/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>: spinnaker.armory.io/v1alpha2
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">kind&lt;/span>: SpinnakerService
&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
&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">spinnakerConfig&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">service-settings&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">env&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex; background-color:#3d3f4a">&lt;span> &lt;span style="color:#ff79c6">JAVA_OPTS&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;--add-exports=java.base/sun.security.x509=ALL-UNNAMED --add-exports=java.base/sun.security.pkcs=ALL-UNNAMED --add-exports=java.base/sun.security.rsa=ALL-UNNAMED&amp;#34;&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>
&lt;h3 id="performance-improvements-for-pipeline-executions">Performance Improvements for Pipeline Executions&lt;/h3>
&lt;p>This release includes several optimizations to improve pipeline execution times, particularly for complex pipeline structures.&lt;/p>
&lt;p>Key Improvements&lt;/p>
&lt;ol>
&lt;li>Memorize the &lt;code>anyUpstreamStagesFailed&lt;/code> extension function to improve time complexity from exponential to linear&lt;/li>
&lt;li>Optimize &lt;code>getAncestorsImpl&lt;/code> to reduce time complexity by a factor of N, where N is the number of stages in a pipeline&lt;/li>
&lt;li>Optimize &lt;code>StartStageHandler&lt;/code> to only call withAuth (which calls getAncestorsImpl) when&lt;/li>
&lt;/ol>
&lt;p>These enhancements significantly reduce pipeline execution time, with the most notable gains observed in dense pipeline graphs. For example, in the &lt;code>ComplexPipeline.kt&lt;/code> test scenario, execution time improved from not completing at all to approximately &lt;code>160ms&lt;/code>.&lt;/p>
&lt;p>&lt;em>&lt;a href="https://github.com/spinnaker/orca/pull/4824">PR 4824&lt;/a>&lt;/em>&lt;/p>
&lt;h3 id="performance-improvements-for-sql-backend">Performance Improvements for SQL Backend&lt;/h3>
&lt;p>This release enhances the performance of SQL-backed pipeline queries by optimizing database operations, particularly for the API call:&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-fallback" data-lang="fallback">&lt;span style="display:flex;">&lt;span>/applications/{application}/pipelines?expand=false&amp;amp;limit=2
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>which is frequently initiated by Deck and forwarded through Gate to Orca.&lt;/p>
&lt;p>Key Improvements&lt;/p>
&lt;ul>
&lt;li>Improved Query Efficiency: Optimized the retrieval of pipeline execution data, significantly reducing database query times.&lt;/li>
&lt;li>Refactored &lt;code>TaskController&lt;/code>: Externalized configuration properties to allow better flexibility and tuning.&lt;/li>
&lt;li>Enhanced &lt;code>getPipelinesForApplication()&lt;/code>
&lt;ul>
&lt;li>Limits the number of pipeline config IDs queried.&lt;/li>
&lt;li>Processes multiple pipeline config IDs simultaneously.&lt;/li>
&lt;li>Introduces multi-threading to handle batches efficiently.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;p>&lt;em>&lt;a href="https://github.com/spinnaker/orca/pull/4804">PR 4804&lt;/a>&lt;/em>&lt;/p>
&lt;h3 id="feature-read-connection-pool-for-sql-execution-repository">Feature: Read Connection Pool for SQL Execution Repository&lt;/h3>
&lt;p>This release introduces support for a dedicated read connection pool for specific read-only database queries in &lt;code>SqlExecutionRepository&lt;/code>&lt;/p>
&lt;p>Key Improvements&lt;/p>
&lt;ol>
&lt;li>New &amp;ldquo;read&amp;rdquo; Connection Pool: Allows read operations to be routed to a separate connection pool.&lt;/li>
&lt;li>Configurable Read Pool: Users can define an additional read connection pool in the SQL configuration.&lt;/li>
&lt;li>Ensures Data Consistency: Some read queries still rely on recently written data and are not yet converted to use a read replica due to potential replication lag.&lt;/li>
&lt;/ol>
&lt;p>Configuration Example&lt;/p>
&lt;p>To enable the read connection pool, add the following configuration:&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">sql&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">connectionPools&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">default&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &amp;lt;...&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">read&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">jdbcUrl&lt;/span>: jdbc:...
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">user&lt;/span>: orca_service
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">password&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">connectionTimeoutMs&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">validationTimeoutMs&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">maxPoolSize&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">minIdle&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">maxLifetimeMs&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">idleTimeoutMs&lt;/span>:
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;em>&lt;a href="https://github.com/spinnaker/orca/pull/4803">PR 4803&lt;/a>&lt;/em>&lt;/p>
&lt;h3 id="enhanced-pipeline-batch-update-feature">Enhanced pipeline batch update feature&lt;/h3>
&lt;h4 id="gate">Gate&lt;/h4>
&lt;p>Adds a new enpdoint, &lt;code>POST /pipelines/bulksave&lt;/code>, which can take a list of pipeline configurations to save. The endpoint will return a response that indicates how many of the saves were successful, how many failed, and what the failures are. The structure 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-fallback" data-lang="fallback">&lt;span style="display:flex;">&lt;span>[
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &amp;#34;successful_pipelines_count&amp;#34; : &amp;lt;int&amp;gt;,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &amp;#34;successful_pipelines&amp;#34; : &amp;lt;List&amp;lt;String&amp;gt;&amp;gt;,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &amp;#34;failed_pipelines_count&amp;#34; : &amp;lt;int&amp;gt;,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &amp;#34;failed_pipelines&amp;#34; : &amp;lt;List&amp;lt;Map&amp;lt;String, Object&amp;gt;&amp;gt;&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>]
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>There are a few config knobs which control some bulk save functionality. The gate endpoint invokes an orca asynchronous process to manage saving the pipelines and polls until the orca operations are complete.&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">controller&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">pipeline&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">bulksave&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6272a4"># the max number of times gate will poll orca to check for task status&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">max-polls-for-task-completion&lt;/span>: &amp;lt;int&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6272a4"># the interval at which gate will poll orca.&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">taskCompletionCheckIntervalMs&lt;/span>: &amp;lt;int&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h4 id="orca">Orca&lt;/h4>
&lt;p>Updates Orca&amp;rsquo;s SavePipelineTask to support bulk saves using the updated functionality in the front50 bulk save endpoint.&lt;/p>
&lt;p>With &lt;a href="https://github.com/spinnaker/orca/pull/4781">Orca PR 4781&lt;/a>, keys from the stage context&amp;rsquo;s outputs section can now be removed (there by reducing the context size significantly). At present the following tasks support this feature:&lt;/p>
&lt;ul>
&lt;li>PromoteManifestKatoOutputsTask&lt;/li>
&lt;li>WaitOnJobCompletionTask&lt;/li>
&lt;li>ResolveDeploySourceManifestTask&lt;/li>
&lt;li>BindProducedArtifactsTask&lt;/li>
&lt;/ul>
&lt;p>The &lt;a href="https://github.com/spinnaker/orca/pull/4788">Orca PR 4788&lt;/a> introduced a new CheckIfApplicationExists task that is added to various pipeline stages to check if the application defined in the pipeline stage context is known to front50 and/or clouddriver. The following config knobs are provided so that all of these stages can be individually configured to not perform this check if needed. Default value is set to false for all of them.&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="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;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">15
&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">16
&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">17
&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">18
&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">19
&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">20
&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">21
&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">22
&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">23
&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">24
&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">25
&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">26
&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">27
&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">28
&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">apiVersion&lt;/span>: spinnaker.armory.io/v1alpha2
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">kind&lt;/span>: SpinnakerService
&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
&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">spinnakerConfig&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">profiles&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">orca&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex; background-color:#3d3f4a">&lt;span> &lt;span style="color:#ff79c6">tasks&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex; background-color:#3d3f4a">&lt;span> &lt;span style="color:#ff79c6">clouddriver&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex; background-color:#3d3f4a">&lt;span> &lt;span style="color:#ff79c6">promoteManifestKatoOutputsTask&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex; background-color:#3d3f4a">&lt;span> &lt;span style="color:#ff79c6">excludeKeysFromOutputs&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex; background-color:#3d3f4a">&lt;span> - outputs.createdArtifacts
&lt;/span>&lt;/span>&lt;span style="display:flex; background-color:#3d3f4a">&lt;span> - outputs.manifests
&lt;/span>&lt;/span>&lt;span style="display:flex; background-color:#3d3f4a">&lt;span> - outputs.boundArtifacts
&lt;/span>&lt;/span>&lt;span style="display:flex; background-color:#3d3f4a">&lt;span> &lt;span style="color:#ff79c6">waitOnJobCompletionTask&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex; background-color:#3d3f4a">&lt;span> &lt;span style="color:#ff79c6">excludeKeysFromOutputs&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex; background-color:#3d3f4a">&lt;span> - jobStatus
&lt;/span>&lt;/span>&lt;span style="display:flex; background-color:#3d3f4a">&lt;span> - completionDetails
&lt;/span>&lt;/span>&lt;span style="display:flex; background-color:#3d3f4a">&lt;span> &lt;span style="color:#ff79c6">resolveDeploySourceManifestTask&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex; background-color:#3d3f4a">&lt;span> &lt;span style="color:#ff79c6">excludeKeysFromOutputs&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex; background-color:#3d3f4a">&lt;span> - manifests
&lt;/span>&lt;/span>&lt;span style="display:flex; background-color:#3d3f4a">&lt;span> - requiredArtifacts
&lt;/span>&lt;/span>&lt;span style="display:flex; background-color:#3d3f4a">&lt;span> - optionalArtifacts
&lt;/span>&lt;/span>&lt;span style="display:flex; background-color:#3d3f4a">&lt;span> &lt;span style="color:#ff79c6">core&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex; background-color:#3d3f4a">&lt;span> &lt;span style="color:#ff79c6">bindProducedArtifactsTask&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex; background-color:#3d3f4a">&lt;span> &lt;span style="color:#ff79c6">excludeKeysFromOutputs&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex; background-color:#3d3f4a">&lt;span> - artifacts&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>
&lt;p>Separate config knobs are also provided at the AbstractCheckIfApplicationExistsTask level to determine if clouddriver needs to be queried for the application or not. It is by default set to true, so it is an opt-out capability. the config property 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-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">tasks&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">checkIfApplicationExistsTask&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">checkClouddriver&lt;/span>: &lt;span style="color:#ff79c6">false&lt;/span> &lt;span style="color:#6272a4"># default is true&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>This feature runs in audit mode by default which means if checkIfApplicationExistsTask finds no application, a warning message is logged. But when audit mode is disabled through the following property, pipelines fail if application is not found:&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">tasks&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">checkIfApplicationExistsTask&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">auditModeEnabled&lt;/span>: &lt;span style="color:#ff79c6">false&lt;/span> &lt;span style="color:#6272a4"># default is true&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h4 id="front50">Front50&lt;/h4>
&lt;p>Batch update operation in front50 is now atomic. Deserialization issues are addressed.
Configurable controls are added to decide whether cache should be refreshed while checking for duplicate pipelines:&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="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;/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>: spinnaker.armory.io/v1alpha2
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">kind&lt;/span>: SpinnakerService
&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
&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">spinnakerConfig&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">profiles&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">front50&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex; background-color:#3d3f4a">&lt;span> &lt;span style="color:#ff79c6">controller&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex; background-color:#3d3f4a">&lt;span> &lt;span style="color:#ff79c6">pipeline&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex; background-color:#3d3f4a">&lt;span> &lt;span style="color:#ff79c6">save&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex; background-color:#3d3f4a">&lt;span> &lt;span style="color:#ff79c6">refreshCacheOnDuplicatesCheck&lt;/span>: &lt;span style="color:#ff79c6">false&lt;/span> // default is true&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>
&lt;p>Batch update call now responds with a status of succeeded and failed pipelines info. The response will be a map containing information in the following format:&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-fallback" data-lang="fallback">&lt;span style="display:flex;">&lt;span>[
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &amp;#34;successful_pipelines_count&amp;#34; : &amp;lt;int&amp;gt;,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &amp;#34;successful_pipelines&amp;#34; : &amp;lt;List&amp;lt;String&amp;gt;&amp;gt;,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &amp;#34;failed_pipelines_count&amp;#34; : &amp;lt;int&amp;gt;,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &amp;#34;failed_pipelines&amp;#34; : &amp;lt;List&amp;lt;Map&amp;lt;String, Object&amp;gt;&amp;gt;&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>]
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Here the value for &lt;code>successful_pipelines&lt;/code> is the list of successful pipeline names whereas the value for &lt;code>failed_pipelines&lt;/code> is the list of failed pipelines expressed as maps.&lt;/p>
&lt;!--
Each item category (such as UI) under here should be an h3 (###). List the following info that service owners should be able to provide:
- Major changes or new features we want to call out for Armory and OSS. Changes should be grouped under end user understandable sections. For example, instead of Deck, use UI. Instead of Fiat, use Permissions.
- Fixes to any known issues from previous versions that we have in release notes. These can all be grouped under a Fixed issues H3.
-->
&lt;h3 id="spinnaker-community-contributions">Spinnaker community contributions&lt;/h3>
&lt;p>Armory CD 2.36.9 tracks the latest published upstream &lt;code>1.36.x&lt;/code> patch line.&lt;/p>
&lt;p>Upstream references:&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://www.spinnaker.io/changelogs/1.36.1-changelog/">Spinnaker v1.36.1&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://www.spinnaker.io/changelogs/1.36.2-changelog/">Spinnaker v1.36.2&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://www.spinnaker.io/changelogs/1.36.3-changelog/">Spinnaker v1.36.3&lt;/a>&lt;/li>
&lt;/ul>
&lt;p>Notable upstream changes:&lt;/p>
&lt;ul>
&lt;li>Clouddriver: improved ECS target-group health evaluation and several AWS/GCP reliability fixes.&lt;/li>
&lt;li>Gate/Echo: SAML signing behavior fix and duplicate manual-judgment notification fix.&lt;/li>
&lt;li>Clouddriver (Google): async operation retry/status polling to prevent progressing pipeline tasks before cloud operations settle.&lt;/li>
&lt;li>Clouddriver (GitRepo artifacts): validation fixes around user input and repository URL handling (backports &lt;a href="https://github.com/spinnaker/spinnaker/pull/7542">#7542&lt;/a>, &lt;a href="https://github.com/spinnaker/spinnaker/pull/7564">#7564&lt;/a>).&lt;/li>
&lt;/ul>
&lt;h2 id="detailed-updates">Detailed updates&lt;/h2>
&lt;h3 id="bill-of-materials-bom">Bill Of Materials (BOM)&lt;/h3>
&lt;details>&lt;summary>Expand to see the BOM&lt;/summary>
&lt;pre class="highlight">
&lt;code>
version: 2.36.9
timestamp: 2026-04-01
services:
clouddriver:
version: 2.36.9
commit: 6deeb3c2a0f57149a595698ba3f2b83a2be8e36f
deck:
version: 2.36.9
commit: 54a2aada8cb187554536daeb8b8b2858714d1afe
dinghy:
version: 2.36.9
commit: d36fdf5b496b18212275686d4c9069d72c9dbeb1
echo:
version: 2.36.9
commit: 9ff1559a08ed6851c036ff1f51bde20e1eb36248
fiat:
version: 2.36.9
commit: e77853e0322014f3b3f8911d9d6f2431830c192c
front50:
version: 2.36.9
commit: 5f8f39172e88b3abe49bab28e2fcb786b8653bf0
gate:
version: 2.36.9
commit: f99a459232f70e19a719a1962f7c6fcee9218750
igor:
version: 2.36.9
commit: 30cab7aaabdfe08c05c37146ab644555cf413513
kayenta:
version: 2.36.9
commit: 2ce818eed3873004412758a0f731cf8420df8594
orca:
version: 2.36.9
commit: 178d4b576e7b8136c42e0baa108cbf2730f6cec8
rosco:
version: 2.36.9
commit: 8e35f1c3560b3b8f7de6fc4a35718b4aee98a47c
terraformer:
version: 2.36.9
commit: 8453d42107fda5f0c315c8459f523e9182805832
monitoring-daemon:
version: 2.26.0
monitoring-third-party:
version: 2.26.0
dependencies:
redis:
version: 2:2.8.4-2
artifactSources:
dockerRegistry: docker.io/armory
&lt;/code>
&lt;/pre>
&lt;/details>
&lt;h3 id="armory">Armory&lt;/h3>
&lt;h4 id="armory-clouddriver---23682369">Armory Clouddriver - 2.36.8&amp;hellip;2.36.9&lt;/h4>
&lt;ul>
&lt;li>fix(validation): Fixes some validation around user inputs (upstream &lt;a href="https://github.com/spinnaker/spinnaker/pull/7542">#7542&lt;/a>)&lt;/li>
&lt;li>fix(gitrepo): Fix git repo with some odd character combinations (upstream &lt;a href="https://github.com/spinnaker/spinnaker/pull/7564">#7564&lt;/a>)&lt;/li>
&lt;/ul>
&lt;h4 id="armory-fiat---23682369">Armory Fiat - 2.36.8&amp;hellip;2.36.9&lt;/h4>
&lt;h4 id="armory-front50---23682369">Armory Front50 - 2.36.8&amp;hellip;2.36.9&lt;/h4>
&lt;h4 id="armory-orca---23682369">Armory Orca - 2.36.8&amp;hellip;2.36.9&lt;/h4>
&lt;h4 id="armory-igor---23682369">Armory Igor - 2.36.8&amp;hellip;2.36.9&lt;/h4>
&lt;h4 id="terraformer---23682369">Terraformer™ - 2.36.8&amp;hellip;2.36.9&lt;/h4>
&lt;h4 id="armory-rosco---23682369">Armory Rosco - 2.36.8&amp;hellip;2.36.9&lt;/h4>
&lt;h4 id="armory-gate---23682369">Armory Gate - 2.36.8&amp;hellip;2.36.9&lt;/h4>
&lt;h4 id="armory-echo---23682369">Armory Echo - 2.36.8&amp;hellip;2.36.9&lt;/h4>
&lt;h4 id="armory-deck---23682369">Armory Deck - 2.36.8&amp;hellip;2.36.9&lt;/h4>
&lt;h4 id="armory-kayenta---23682369">Armory Kayenta - 2.36.8&amp;hellip;2.36.9&lt;/h4>
&lt;h4 id="dinghy---23682369">Dinghy™ - 2.36.8&amp;hellip;2.36.9&lt;/h4>
&lt;h3 id="spinnaker">Spinnaker&lt;/h3>
&lt;h4 id="spinnaker-igor---1361">Spinnaker Igor - 1.36.1&lt;/h4>
&lt;h4 id="spinnaker-rosco---1361">Spinnaker Rosco - 1.36.1&lt;/h4>
&lt;h4 id="spinnaker-gate---1361">Spinnaker Gate - 1.36.1&lt;/h4>
&lt;h4 id="spinnaker-echo---1361">Spinnaker Echo - 1.36.1&lt;/h4>
&lt;h4 id="spinnaker-deck---1361">Spinnaker Deck - 1.36.1&lt;/h4>
&lt;h4 id="spinnaker-orca---1361">Spinnaker Orca - 1.36.1&lt;/h4>
&lt;h4 id="spinnaker-kayenta---1361">Spinnaker Kayenta - 1.36.1&lt;/h4>
&lt;h4 id="spinnaker-front50---1361">Spinnaker Front50 - 1.36.1&lt;/h4>
&lt;h4 id="spinnaker-clouddriver---1361">Spinnaker Clouddriver - 1.36.1&lt;/h4>
&lt;h4 id="spinnaker-fiat---1361">Spinnaker Fiat - 1.36.1&lt;/h4></description></item><item><title>Continuous-Deployment: v2.36.8 Armory Continuous Deployment Release (Spinnaker™ v1.36.1)</title><link>/continuous-deployment/release-notes/rn-armory-spinnaker/armoryspinnaker_v2-36-8/</link><pubDate>Thu, 05 Mar 2026 00:00:00 +0000</pubDate><guid>/continuous-deployment/release-notes/rn-armory-spinnaker/armoryspinnaker_v2-36-8/</guid><description>
&lt;!--
MAKE SURE TO ADD 'LTS' OR 'FEATURE' TO THE TITLE TO INDICATE RELEASE CATEGORY.
FOR EXAMPLE, "Armory Continuous Deployment Release LTS" or "Armory Continuous Deployment Release Feature" so users know release category and support time period
-->
&lt;h2 id="2026-03-05-release-notes">2026-03-05 release notes&lt;/h2>
&lt;blockquote>
&lt;p>Note: If you experience production issues after upgrading Armory Continuous Deployment, roll back to a previous working version and report issues to &lt;a href="http://go.armory.io/support">http://go.armory.io/support&lt;/a>.&lt;/p>
&lt;/blockquote>
&lt;h2 id="required-armory-operator-version">Required Armory Operator version&lt;/h2>
&lt;div class="alert alert-warning" role="alert">
&lt;h4 class="alert-heading">Important&lt;/h4>
&lt;a href="/continuous-deployment/installation/armory-operator/">Armory Operator&lt;/a> has been deprecated and is considered EOL. Please migrate to the &lt;a href="/continuous-deployment/spinnaker-user-guides/armory-operator-to-kustomize-migration/">Kustomize&lt;/a> method of deployment.
&lt;/div>
&lt;p>To install, upgrade, or configure Armory CD 2.36.8, use Armory Operator 1.8.6 or later.&lt;/p>
&lt;h2 id="security">Security&lt;/h2>
&lt;p>Armory scans the codebase as we develop and release software. Contact your Armory account representative for information about CVE scans for this release.&lt;/p>
&lt;h2 id="breaking-changes">Breaking changes&lt;/h2>
&lt;!-- Copy/paste from the previous version if there are recent ones. We can drop breaking changes after 3 minor versions. Add new ones from OSS and Armory. -->
&lt;p>The following configuration properties have been restructured:&lt;/p>
&lt;p>Previous Configuration:&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">tasks&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">days-of-execution-history&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">number-of-old-pipeline-executions-to-include&lt;/span>:
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>New configuration format&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">tasks&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">controller&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">days-of-execution-history&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">number-of-old-pipeline-executions-to-include&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">optimize-execution-retrieval&lt;/span>: &amp;lt;boolean&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">max-execution-retrieval-threads&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">max-number-of-pipeline-executions-to-process&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">execution-retrieval-timeout-seconds&lt;/span>:
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>These changes improve query performance and execution retrieval efficiency, particularly for large-scale pipeline applications.&lt;/p>
&lt;p>&lt;a href="#performance-improvements-for-sql-backend">Performance Improvements for SQL Backend&lt;/a>&lt;/p>
&lt;h2 id="known-issues">Known issues&lt;/h2>
&lt;!-- Copy/paste known issues from the previous version if they're not fixed. Add new ones from OSS and Armory. If there aren't any issues, state that so readers don't think we forgot to fill out this section. -->
&lt;h3 id="echo-filter-enabled-pipelines-feature">Echo Filter enabled pipelines feature&lt;/h3>
&lt;p>Spinnaker OSS Version 1.31.0 introduced a feature to filter pipelines from front50, that was disabled by default.
Version 1.35.0 enabled it by default, which is not recommended and can cause issues with automated triggers.
In Armory CD 2.36.2 we recommend to explicitly disable this feature by setting the following configuration:&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-fallback" data-lang="fallback">&lt;span style="display:flex;">&lt;span>apiVersion: spinnaker.armory.io/v1alpha2
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>kind: SpinnakerService
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>metadata:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> name: spinnaker
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>spec:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> spinnakerConfig:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> profiles:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> echo:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> pipelineCache:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> filterFront50Pipelines: false
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="highlighted-updates">Highlighted updates&lt;/h2>
&lt;h3 id="clouddriver-redis-scheduler-configuration-validation">Clouddriver: Redis scheduler configuration validation&lt;/h3>
&lt;p>Clouddriver now validates Redis scheduler configuration keys more strictly at startup:&lt;/p>
&lt;ul>
&lt;li>Legacy scalar &lt;code>redis.scheduler&lt;/code> is rejected.&lt;/li>
&lt;li>Legacy &lt;code>redis.parallelism&lt;/code> is rejected.&lt;/li>
&lt;li>Use nested keys under &lt;code>redis.scheduler.*&lt;/code>.&lt;/li>
&lt;/ul>
&lt;p>Before:&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">redis&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">scheduler&lt;/span>: default
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">parallelism&lt;/span>: -&lt;span style="color:#bd93f9">1&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>After:&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">redis&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">scheduler&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">enabled&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">type&lt;/span>: default
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">parallelism&lt;/span>: -&lt;span style="color:#bd93f9">1&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>If &lt;code>redis.scheduler.type&lt;/code> is missing or blank, Clouddriver defaults to &lt;code>default&lt;/code> for compatibility.&lt;/p>
&lt;h3 id="security-hardening-url-restriction-validation-for-artifacts-and-webhooks">Security hardening: URL restriction validation for artifacts and webhooks&lt;/h3>
&lt;p>This release tightens URL host validation for artifact accounts and Orca webhook URL restrictions:&lt;/p>
&lt;ul>
&lt;li>Validation now uses parsed host handling (&lt;code>HttpUrl.host()&lt;/code>) instead of authority fallback parsing.&lt;/li>
&lt;li>This prevents authority/userinfo patterns from bypassing hostname checks.&lt;/li>
&lt;li>URL handling for underscore hostnames and IPv6 input is stricter and more predictable.&lt;/li>
&lt;/ul>
&lt;p>If you use uncommon URL formats (for example userinfo segments, unbracketed IPv6 literals, or underscore-based hosts), test those paths after upgrade.&lt;/p>
&lt;h3 id="clouddriver-sql-cache-sharding-aware-unknown-agent-cleanup">Clouddriver SQL cache: sharding-aware unknown-agent cleanup&lt;/h3>
&lt;p>&lt;code>SqlUnknownAgentCleanupAgent&lt;/code> now respects shard ownership and includes additional safety controls to avoid cross-pod or startup-race cleanup behavior in SQL cache environments.&lt;/p>
&lt;p>Key updates:&lt;/p>
&lt;ul>
&lt;li>The cleanup agent remains opt-in and disabled by default.&lt;/li>
&lt;li>The cleanup agent is only created when &lt;code>sql.read-only=false&lt;/code>.&lt;/li>
&lt;li>Cleanup skips when sharding state is uninitialized or misconfigured.&lt;/li>
&lt;li>New controls include &lt;code>minRecordAgeSeconds&lt;/code>, &lt;code>dryRun&lt;/code>, and &lt;code>excludedDataTypes&lt;/code>.&lt;/li>
&lt;/ul>
&lt;p>Configuration:&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">sql&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">unknown-agent-cleanup-agent&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">enabled&lt;/span>: &lt;span style="color:#ff79c6">false&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">pollIntervalSeconds&lt;/span>: &lt;span style="color:#bd93f9">120&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">timeoutSeconds&lt;/span>: &lt;span style="color:#bd93f9">60&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">minRecordAgeSeconds&lt;/span>: &lt;span style="color:#bd93f9">300&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">deleteBatchSize&lt;/span>: &lt;span style="color:#bd93f9">100&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">dryRun&lt;/span>: &lt;span style="color:#ff79c6">false&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">excludedDataTypes&lt;/span>: []
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h4 id="ha-deployment-guidance">HA deployment guidance&lt;/h4>
&lt;p>In HA mode, enable &lt;code>sql.unknown-agent-cleanup-agent.enabled: true&lt;/code> only on Clouddriver caching pods.&lt;/p>
&lt;p>For caching pods:&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">sql&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">unknown-agent-cleanup-agent&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">enabled&lt;/span>: &lt;span style="color:#ff79c6">true&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>For all non-caching Clouddriver pods:&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">sql&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">unknown-agent-cleanup-agent&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">enabled&lt;/span>: &lt;span style="color:#ff79c6">false&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="clouddriver-cache-sharding-pluggable-strategy-and-key-extraction">Clouddriver cache sharding: pluggable strategy and key extraction&lt;/h3>
&lt;p>Cache sharding now supports pluggable strategies and key extractors for Redis and SQL sharding observers:&lt;/p>
&lt;ul>
&lt;li>&lt;code>strategy: modulo&lt;/code> (default, preserves legacy ownership mapping)&lt;/li>
&lt;li>&lt;code>strategy: canonical-modulo&lt;/code> (canonical positive modulo)&lt;/li>
&lt;li>&lt;code>strategy: jump&lt;/code> (jump consistent hash, less key movement during scale events)&lt;/li>
&lt;li>&lt;code>sharding-key: account | region | agent&lt;/code>&lt;/li>
&lt;/ul>
&lt;p>Defaults remain &lt;code>strategy: modulo&lt;/code> and &lt;code>sharding-key: account&lt;/code>, so existing behavior is preserved unless you opt in to a different strategy/key.&lt;/p>
&lt;p>Configuration:&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">cache-sharding&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">strategy&lt;/span>: modulo
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">sharding-key&lt;/span>: account
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">replica-ttl-seconds&lt;/span>: &lt;span style="color:#bd93f9">60&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">heartbeat-interval-seconds&lt;/span>: &lt;span style="color:#bd93f9">30&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;code>SqlCachingPodsObserver&lt;/code> also resets to a fail-open state on heartbeat/topology refresh failure to avoid stale routing decisions.&lt;/p>
&lt;h3 id="clouddriver-redis-priority-scheduler-opt-in">Clouddriver: Redis Priority Scheduler (opt-in)&lt;/h3>
&lt;p>A new Redis-based &lt;code>priority&lt;/code> scheduler is available for Clouddriver caching agents.&lt;/p>
&lt;p>Key points:&lt;/p>
&lt;ul>
&lt;li>Uses Redis sorted sets and Lua scripts for atomic scheduling transitions.&lt;/li>
&lt;li>Adds cleanup services (zombie/orphan), circuit breakers, and richer scheduler observability.&lt;/li>
&lt;li>Requires Redis 6.2+ (&lt;code>ZMSCORE&lt;/code>).&lt;/li>
&lt;/ul>
&lt;p>Enablement:&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">redis&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">scheduler&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">enabled&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">type&lt;/span>: priority
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">agent&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">max-concurrent-agents&lt;/span>: &lt;span style="color:#bd93f9">100&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Migration notes:&lt;/p>
&lt;ul>
&lt;li>Legacy scalar &lt;code>redis.scheduler&lt;/code> and legacy &lt;code>redis.parallelism&lt;/code> are rejected.&lt;/li>
&lt;li>&lt;code>redis.scheduler.parallelism&lt;/code> is ignored in &lt;code>priority&lt;/code> mode.&lt;/li>
&lt;li>Use &lt;code>redis.agent.max-concurrent-agents&lt;/code> to control concurrency for &lt;code>priority&lt;/code> mode.&lt;/li>
&lt;li>&lt;code>redis.agent.disabledAgents&lt;/code> is ignored in &lt;code>priority&lt;/code> mode; use &lt;code>redis.agent.disabled-pattern&lt;/code>.&lt;/li>
&lt;/ul>
&lt;h3 id="aws-jdbc-driver-update">AWS JDBC Driver Update&lt;/h3>
&lt;p>The AWS JDBC driver has been updated from the deprecated aws-mysql-jdbc driver (version 1.0.0) to the &lt;a href="https://github.com/aws/aws-advanced-jdbc-wrapper">AWS Advanced JDBC Wrapper&lt;/a>.&lt;/p>
&lt;p>This update adds support for IAM authentication with AWS Aurora Global Database endpoints. The previous driver did not support global database endpoint format (&lt;code>*.global.rds.amazonaws.com&lt;/code>) when using IAM authentication, resulting in the error:&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-fallback" data-lang="fallback">&lt;span style="display:flex;">&lt;span>java.sql.SQLException: Unsupported AWS hostname &amp;#39;&amp;lt;hostname&amp;gt;.global.rds.amazonaws.com&amp;#39;.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Amazon domain name in format *.AWS-Region.rds.amazonaws.com is expected
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;strong>Note:&lt;/strong> Standard database connections (without IAM authentication) continue to work as before and do not require any configuration changes.&lt;/p>
&lt;p>&lt;strong>Affected services:&lt;/strong> Front50, Orca, Clouddriver, Fiat&lt;/p>
&lt;h4 id="configuration-for-iam-authentication-with-aurora-global-database">Configuration for IAM Authentication with Aurora Global Database&lt;/h4>
&lt;p>If you are using IAM authentication and want to connect to Aurora Global Database endpoints, update your JDBC connection string:&lt;/p>
&lt;p>&lt;strong>New JDBC URL format:&lt;/strong>&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-fallback" data-lang="fallback">&lt;span style="display:flex;">&lt;span>jdbc:aws-wrapper:mysql://&amp;lt;GLOBAL_ENDPOINT&amp;gt;:&amp;lt;PORT&amp;gt;/&amp;lt;DATABASE&amp;gt;?wrapperPlugins=iam&amp;amp;globalClusterInstanceHostPatterns=?.&amp;lt;CLUSTER_IDENTIFIER&amp;gt;.&amp;lt;REGION1&amp;gt;.rds.amazonaws.com,?.&amp;lt;CLUSTER_IDENTIFIER&amp;gt;.&amp;lt;REGION2&amp;gt;.rds.amazonaws.com&amp;amp;iamRegion=&amp;lt;CURRENT_REGION&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;strong>Example:&lt;/strong> If your Aurora Global Database has:&lt;/p>
&lt;ul>
&lt;li>Global endpoint: &lt;code>mydb-global.global-xxxxx.global.rds.amazonaws.com&lt;/code>&lt;/li>
&lt;li>Primary (us-west-2): &lt;code>mydb.cluster-abc123.us-west-2.rds.amazonaws.com&lt;/code>&lt;/li>
&lt;li>Secondary (us-east-1): &lt;code>mydb.cluster-abc123.us-east-1.rds.amazonaws.com&lt;/code>&lt;/li>
&lt;/ul>
&lt;p>Configure the JDBC URL as:&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-fallback" data-lang="fallback">&lt;span style="display:flex;">&lt;span>jdbc:aws-wrapper:mysql://mydb-global.global-xxxxx.global.rds.amazonaws.com:3306/front50?wrapperPlugins=iam&amp;amp;globalClusterInstanceHostPatterns=?.cluster-abc123.us-west-2.rds.amazonaws.com,?.cluster-abc123.us-east-1.rds.amazonaws.com&amp;amp;iamRegion=us-west-2
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="observability-plugin-update">Observability Plugin Update&lt;/h3>
&lt;p>The Armory Observability plugin has been updated to version 1.6.1 to resolve compatibility issues with the new AWS JDBC wrapper.&lt;/p>
&lt;h3 id="security-enhancement-url-filteringrestriction-capabilities-on-artifact-accounts">Security enhancement: Url Filtering/Restriction capabilities on Artifact accounts&lt;/h3>
&lt;p>Starting in Armory Continuous Deployment 2.36.6, we have enabled to capability to filter/restrict urls that can be accessed per artifact accounts.
This feature provides a safeguard around user input of remote urls when artifact accounts are in used in the context of a pipeline execution.&lt;/p>
&lt;p>An example configuration can be found below which can be added per artifact account (http, github, helm):&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">artifacts&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">http&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">enabled&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">accounts&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">name&lt;/span>: http_account
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">urlRestrictions&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">allowedDomains&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - mydomain.com
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - raw.github.com
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - api.github.com
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">rejectLocalhost&lt;/span>: &lt;span style="color:#ff79c6">true&lt;/span> &lt;span style="color:#6272a4">#default value&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">rejectLinkLocal&lt;/span>: &lt;span style="color:#ff79c6">true&lt;/span> &lt;span style="color:#6272a4">#default value&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">rejectVerbatimIps&lt;/span>: &lt;span style="color:#ff79c6">true&lt;/span> &lt;span style="color:#6272a4">#default value&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">rejectedIps&lt;/span>: [] &lt;span style="color:#6272a4">#default value&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>By default the configuration blocks any local CIDR ranges (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16), localhost, link local and raw IPs.
For full configuration details please refer to this &lt;a href="https://github.com/spinnaker/spinnaker/blob/main/clouddriver/clouddriver-artifacts/src/main/java/com/netflix/spinnaker/clouddriver/artifacts/config/HttpUrlRestrictions.java">configuration class&lt;/a>&lt;/p>
&lt;h3 id="armory-continuous-deployment-2362-onwards-docker-images-now-based-on-ubuntu">Armory Continuous Deployment 2.36.2 onwards Docker images now based on Ubuntu&lt;/h3>
&lt;p>The Armory Continuous Deployment 2.36.2 Docker images have been updated to use Ubuntu as the base image, replacing the previous Alpine base.
This change enhances compatibility with various libraries and tools, improving overall stability and performance.
Additionally, the new images now include all the necessary dependencies for authentication on a Kebreros server.&lt;/p>
&lt;h3 id="pipeline-reference-feature-is-now-able-to-lazy-load-the-pipeline-reference-pipelines">Pipeline Reference feature is now able to Lazy load the pipeline reference pipelines&lt;/h3>
&lt;p>In Spinnaker OSS release 1.35.0 Orca introduced a feature flag to reduce the execution size in nested pipelines by
converting PipelineTrigger to PipelineRefTrigger:
&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="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;/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>: spinnaker.armory.io/v1alpha2
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">kind&lt;/span>: SpinnakerService
&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
&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">spinnakerConfig&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">profiles&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">orca&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">executionRepository&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">sql&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">enabled&lt;/span>: &lt;span style="color:#ff79c6">true&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex; background-color:#3d3f4a">&lt;span> &lt;span style="color:#ff79c6">pipelineRef&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">true&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;/p>
&lt;p>When enabled, child pipeline execution ids are stored in sql instead of the entire child pipeline execution context.&lt;/p>
&lt;p>In Armory CD 2.36.2 this functionality is now extended to make the in-memory representation of the pipelines aware of the pipeline reference
and to not load in-memory a full representation of the pipeline context. To enable this feature in Deck add the following in &lt;code>settings-local.js&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="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="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">12
&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>: spinnaker.armory.io/v1alpha2
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">kind&lt;/span>: SpinnakerService
&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
&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">spinnakerConfig&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">profiles&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">settings-local.js&lt;/span>: |&lt;span style="color:#f1fa8c">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> ...
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex; background-color:#3d3f4a">&lt;span>&lt;span style="color:#f1fa8c"> window.spinnakerSettings.feature.pipelineRefEnabled = true;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> ...&lt;/span> &lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>
&lt;p>&lt;em>Orca &lt;a href="https://github.com/spinnaker/orca/pull/4842">PR 4842&lt;/a>&lt;/em>
&lt;em>Deck &lt;a href="https://github.com/spinnaker/deck/pull/10164">PR 10164&lt;/a>&lt;/em>&lt;/p>
&lt;h3 id="new-pipeline-stage-configuration-backoffperiodms">New pipeline stage configuration &lt;code>backOffPeriodMs&lt;/code>&lt;/h3>
&lt;p>A new configuration option &lt;code>backOffPeriodMs&lt;/code> has been added to the pipeline stage configuration. This option allows users
to specify a back-off period in milliseconds for stages that may need to retry operations after a failure. Before this,
pipeline authors had no control over the backoff period. It came from either spinnaker configuration properties or
implementations of RetryableTask.getDynamicBackoffPeriod.&lt;/p>
&lt;p>Additionally, the following configuration options have been added that allow admins to specify globablly the backoff period:
&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="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;/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>: spinnaker.armory.io/v1alpha2
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">kind&lt;/span>: SpinnakerService
&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
&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">spinnakerConfig&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">profiles&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">orca&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex; background-color:#3d3f4a">&lt;span> &lt;span style="color:#ff79c6">tasks.global.backOffPeriod&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex; background-color:#3d3f4a">&lt;span> &lt;span style="color:#ff79c6">tasks.&amp;lt;cloud provider&amp;gt;.backOffPeriod&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex; background-color:#3d3f4a">&lt;span> tasks.&amp;lt;cloud provider&amp;gt;.&amp;lt;account name&amp;gt;.backOffPeriod:&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;/p>
&lt;p>&lt;em>Orca &lt;a href="https://github.com/spinnaker/orca/pull/4841">PR 4841&lt;/a>&lt;/em>&lt;/p>
&lt;h3 id="java-upgrades">Java upgrades&lt;/h3>
&lt;p>Java 17 is now the default source and target. Java 11 support has been removed entirely. Please note you may need to add the following JAVA_OPTS options: &lt;code>--add-exports=java.base/sun.security.x509=ALL-UNNAMED --add-exports=java.base/sun.security.pkcs=ALL-UNNAMED --add-exports=java.base/sun.security.rsa=ALL-UNNAMED&lt;/code> to clouddriver if using GCP accounts due to credentials parsing of certificates. These can set in the &lt;a href="https://spinnaker.io/docs/reference/halyard/custom/#custom-service-settings">service-settings config&lt;/a> . These configs are likely to be added to the defaults in all future releases&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="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;/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>: spinnaker.armory.io/v1alpha2
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">kind&lt;/span>: SpinnakerService
&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
&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">spinnakerConfig&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">service-settings&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">env&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex; background-color:#3d3f4a">&lt;span> &lt;span style="color:#ff79c6">JAVA_OPTS&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;--add-exports=java.base/sun.security.x509=ALL-UNNAMED --add-exports=java.base/sun.security.pkcs=ALL-UNNAMED --add-exports=java.base/sun.security.rsa=ALL-UNNAMED&amp;#34;&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>
&lt;h3 id="performance-improvements-for-pipeline-executions">Performance Improvements for Pipeline Executions&lt;/h3>
&lt;p>This release includes several optimizations to improve pipeline execution times, particularly for complex pipeline structures.&lt;/p>
&lt;p>Key Improvements&lt;/p>
&lt;ol>
&lt;li>Memorize the &lt;code>anyUpstreamStagesFailed&lt;/code> extension function to improve time complexity from exponential to linear&lt;/li>
&lt;li>Optimize &lt;code>getAncestorsImpl&lt;/code> to reduce time complexity by a factor of N, where N is the number of stages in a pipeline&lt;/li>
&lt;li>Optimize &lt;code>StartStageHandler&lt;/code> to only call withAuth (which calls getAncestorsImpl) when&lt;/li>
&lt;/ol>
&lt;p>These enhancements significantly reduce pipeline execution time, with the most notable gains observed in dense pipeline graphs. For example, in the &lt;code>ComplexPipeline.kt&lt;/code> test scenario, execution time improved from not completing at all to approximately &lt;code>160ms&lt;/code>.&lt;/p>
&lt;p>&lt;em>&lt;a href="https://github.com/spinnaker/orca/pull/4824">PR 4824&lt;/a>&lt;/em>&lt;/p>
&lt;h3 id="performance-improvements-for-sql-backend">Performance Improvements for SQL Backend&lt;/h3>
&lt;p>This release enhances the performance of SQL-backed pipeline queries by optimizing database operations, particularly for the API call:&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-fallback" data-lang="fallback">&lt;span style="display:flex;">&lt;span>/applications/{application}/pipelines?expand=false&amp;amp;limit=2
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>which is frequently initiated by Deck and forwarded through Gate to Orca.&lt;/p>
&lt;p>Key Improvements&lt;/p>
&lt;ul>
&lt;li>Improved Query Efficiency: Optimized the retrieval of pipeline execution data, significantly reducing database query times.&lt;/li>
&lt;li>Refactored &lt;code>TaskController&lt;/code>: Externalized configuration properties to allow better flexibility and tuning.&lt;/li>
&lt;li>Enhanced &lt;code>getPipelinesForApplication()&lt;/code>
&lt;ul>
&lt;li>Limits the number of pipeline config IDs queried.&lt;/li>
&lt;li>Processes multiple pipeline config IDs simultaneously.&lt;/li>
&lt;li>Introduces multi-threading to handle batches efficiently.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;p>&lt;em>&lt;a href="https://github.com/spinnaker/orca/pull/4804">PR 4804&lt;/a>&lt;/em>&lt;/p>
&lt;h3 id="feature-read-connection-pool-for-sql-execution-repository">Feature: Read Connection Pool for SQL Execution Repository&lt;/h3>
&lt;p>This release introduces support for a dedicated read connection pool for specific read-only database queries in &lt;code>SqlExecutionRepository&lt;/code>&lt;/p>
&lt;p>Key Improvements&lt;/p>
&lt;ol>
&lt;li>New &amp;ldquo;read&amp;rdquo; Connection Pool: Allows read operations to be routed to a separate connection pool.&lt;/li>
&lt;li>Configurable Read Pool: Users can define an additional read connection pool in the SQL configuration.&lt;/li>
&lt;li>Ensures Data Consistency: Some read queries still rely on recently written data and are not yet converted to use a read replica due to potential replication lag.&lt;/li>
&lt;/ol>
&lt;p>Configuration Example&lt;/p>
&lt;p>To enable the read connection pool, add the following configuration:&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">sql&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">connectionPools&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">default&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &amp;lt;...&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">read&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">jdbcUrl&lt;/span>: jdbc:...
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">user&lt;/span>: orca_service
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">password&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">connectionTimeoutMs&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">validationTimeoutMs&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">maxPoolSize&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">minIdle&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">maxLifetimeMs&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">idleTimeoutMs&lt;/span>:
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;em>&lt;a href="https://github.com/spinnaker/orca/pull/4803">PR 4803&lt;/a>&lt;/em>&lt;/p>
&lt;h3 id="enhanced-pipeline-batch-update-feature">Enhanced pipeline batch update feature&lt;/h3>
&lt;h4 id="gate">Gate&lt;/h4>
&lt;p>Adds a new enpdoint, &lt;code>POST /pipelines/bulksave&lt;/code>, which can take a list of pipeline configurations to save. The endpoint will return a response that indicates how many of the saves were successful, how many failed, and what the failures are. The structure 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-fallback" data-lang="fallback">&lt;span style="display:flex;">&lt;span>[
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &amp;#34;successful_pipelines_count&amp;#34; : &amp;lt;int&amp;gt;,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &amp;#34;successful_pipelines&amp;#34; : &amp;lt;List&amp;lt;String&amp;gt;&amp;gt;,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &amp;#34;failed_pipelines_count&amp;#34; : &amp;lt;int&amp;gt;,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &amp;#34;failed_pipelines&amp;#34; : &amp;lt;List&amp;lt;Map&amp;lt;String, Object&amp;gt;&amp;gt;&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>]
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>There are a few config knobs which control some bulk save functionality. The gate endpoint invokes an orca asynchronous process to manage saving the pipelines and polls until the orca operations are complete.&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">controller&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">pipeline&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">bulksave&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6272a4"># the max number of times gate will poll orca to check for task status&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">max-polls-for-task-completion&lt;/span>: &amp;lt;int&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6272a4"># the interval at which gate will poll orca.&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">taskCompletionCheckIntervalMs&lt;/span>: &amp;lt;int&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h4 id="orca">Orca&lt;/h4>
&lt;p>Updates Orca&amp;rsquo;s SavePipelineTask to support bulk saves using the updated functionality in the front50 bulk save endpoint.&lt;/p>
&lt;p>With &lt;a href="https://github.com/spinnaker/orca/pull/4781">Orca PR 4781&lt;/a>, keys from the stage context&amp;rsquo;s outputs section can now be removed (there by reducing the context size significantly). At present the following tasks support this feature:&lt;/p>
&lt;ul>
&lt;li>PromoteManifestKatoOutputsTask&lt;/li>
&lt;li>WaitOnJobCompletionTask&lt;/li>
&lt;li>ResolveDeploySourceManifestTask&lt;/li>
&lt;li>BindProducedArtifactsTask&lt;/li>
&lt;/ul>
&lt;p>The &lt;a href="https://github.com/spinnaker/orca/pull/4788">Orca PR 4788&lt;/a> introduced a new CheckIfApplicationExists task that is added to various pipeline stages to check if the application defined in the pipeline stage context is known to front50 and/or clouddriver. The following config knobs are provided so that all of these stages can be individually configured to not perform this check if needed. Default value is set to false for all of them.&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="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;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">15
&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">16
&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">17
&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">18
&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">19
&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">20
&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">21
&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">22
&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">23
&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">24
&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">25
&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">26
&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">27
&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">28
&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">apiVersion&lt;/span>: spinnaker.armory.io/v1alpha2
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">kind&lt;/span>: SpinnakerService
&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
&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">spinnakerConfig&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">profiles&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">orca&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex; background-color:#3d3f4a">&lt;span> &lt;span style="color:#ff79c6">tasks&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex; background-color:#3d3f4a">&lt;span> &lt;span style="color:#ff79c6">clouddriver&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex; background-color:#3d3f4a">&lt;span> &lt;span style="color:#ff79c6">promoteManifestKatoOutputsTask&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex; background-color:#3d3f4a">&lt;span> &lt;span style="color:#ff79c6">excludeKeysFromOutputs&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex; background-color:#3d3f4a">&lt;span> - outputs.createdArtifacts
&lt;/span>&lt;/span>&lt;span style="display:flex; background-color:#3d3f4a">&lt;span> - outputs.manifests
&lt;/span>&lt;/span>&lt;span style="display:flex; background-color:#3d3f4a">&lt;span> - outputs.boundArtifacts
&lt;/span>&lt;/span>&lt;span style="display:flex; background-color:#3d3f4a">&lt;span> &lt;span style="color:#ff79c6">waitOnJobCompletionTask&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex; background-color:#3d3f4a">&lt;span> &lt;span style="color:#ff79c6">excludeKeysFromOutputs&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex; background-color:#3d3f4a">&lt;span> - jobStatus
&lt;/span>&lt;/span>&lt;span style="display:flex; background-color:#3d3f4a">&lt;span> - completionDetails
&lt;/span>&lt;/span>&lt;span style="display:flex; background-color:#3d3f4a">&lt;span> &lt;span style="color:#ff79c6">resolveDeploySourceManifestTask&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex; background-color:#3d3f4a">&lt;span> &lt;span style="color:#ff79c6">excludeKeysFromOutputs&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex; background-color:#3d3f4a">&lt;span> - manifests
&lt;/span>&lt;/span>&lt;span style="display:flex; background-color:#3d3f4a">&lt;span> - requiredArtifacts
&lt;/span>&lt;/span>&lt;span style="display:flex; background-color:#3d3f4a">&lt;span> - optionalArtifacts
&lt;/span>&lt;/span>&lt;span style="display:flex; background-color:#3d3f4a">&lt;span> &lt;span style="color:#ff79c6">core&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex; background-color:#3d3f4a">&lt;span> &lt;span style="color:#ff79c6">bindProducedArtifactsTask&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex; background-color:#3d3f4a">&lt;span> &lt;span style="color:#ff79c6">excludeKeysFromOutputs&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex; background-color:#3d3f4a">&lt;span> - artifacts&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>
&lt;p>Separate config knobs are also provided at the AbstractCheckIfApplicationExistsTask level to determine if clouddriver needs to be queried for the application or not. It is by default set to true, so it is an opt-out capability. the config property 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-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">tasks&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">checkIfApplicationExistsTask&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">checkClouddriver&lt;/span>: &lt;span style="color:#ff79c6">false&lt;/span> &lt;span style="color:#6272a4"># default is true&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>This feature runs in audit mode by default which means if checkIfApplicationExistsTask finds no application, a warning message is logged. But when audit mode is disabled through the following property, pipelines fail if application is not found:&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">tasks&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">checkIfApplicationExistsTask&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">auditModeEnabled&lt;/span>: &lt;span style="color:#ff79c6">false&lt;/span> &lt;span style="color:#6272a4"># default is true&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h4 id="front50">Front50&lt;/h4>
&lt;p>Batch update operation in front50 is now atomic. Deserialization issues are addressed.
Configurable controls are added to decide whether cache should be refreshed while checking for duplicate pipelines:&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="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;/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>: spinnaker.armory.io/v1alpha2
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">kind&lt;/span>: SpinnakerService
&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
&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">spinnakerConfig&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">profiles&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">front50&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex; background-color:#3d3f4a">&lt;span> &lt;span style="color:#ff79c6">controller&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex; background-color:#3d3f4a">&lt;span> &lt;span style="color:#ff79c6">pipeline&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex; background-color:#3d3f4a">&lt;span> &lt;span style="color:#ff79c6">save&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex; background-color:#3d3f4a">&lt;span> &lt;span style="color:#ff79c6">refreshCacheOnDuplicatesCheck&lt;/span>: &lt;span style="color:#ff79c6">false&lt;/span> // default is true&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>
&lt;p>Batch update call now responds with a status of succeeded and failed pipelines info. The response will be a map containing information in the following format:&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-fallback" data-lang="fallback">&lt;span style="display:flex;">&lt;span>[
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &amp;#34;successful_pipelines_count&amp;#34; : &amp;lt;int&amp;gt;,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &amp;#34;successful_pipelines&amp;#34; : &amp;lt;List&amp;lt;String&amp;gt;&amp;gt;,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &amp;#34;failed_pipelines_count&amp;#34; : &amp;lt;int&amp;gt;,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &amp;#34;failed_pipelines&amp;#34; : &amp;lt;List&amp;lt;Map&amp;lt;String, Object&amp;gt;&amp;gt;&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>]
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Here the value for &lt;code>successful_pipelines&lt;/code> is the list of successful pipeline names whereas the value for &lt;code>failed_pipelines&lt;/code> is the list of failed pipelines expressed as maps.&lt;/p>
&lt;!--
Each item category (such as UI) under here should be an h3 (###). List the following info that service owners should be able to provide:
- Major changes or new features we want to call out for Armory and OSS. Changes should be grouped under end user understandable sections. For example, instead of Deck, use UI. Instead of Fiat, use Permissions.
- Fixes to any known issues from previous versions that we have in release notes. These can all be grouped under a Fixed issues H3.
-->
&lt;h3 id="spinnaker-community-contributions">Spinnaker community contributions&lt;/h3>
&lt;p>Armory CD 2.36.8 tracks the latest published upstream &lt;code>1.36.x&lt;/code> patch line.&lt;/p>
&lt;p>Upstream references:&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://www.spinnaker.io/changelogs/1.36.1-changelog/">Spinnaker v1.36.1&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://www.spinnaker.io/changelogs/1.36.2-changelog/">Spinnaker v1.36.2&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://www.spinnaker.io/changelogs/1.36.3-changelog/">Spinnaker v1.36.3&lt;/a>&lt;/li>
&lt;/ul>
&lt;p>Notable upstream changes:&lt;/p>
&lt;ul>
&lt;li>Clouddriver: improved ECS target-group health evaluation and several AWS/GCP reliability fixes.&lt;/li>
&lt;li>Gate/Echo: SAML signing behavior fix and duplicate manual-judgment notification fix.&lt;/li>
&lt;li>Clouddriver (Google): async operation retry/status polling to prevent progressing pipeline tasks before cloud operations settle.&lt;/li>
&lt;/ul>
&lt;h2 id="detailed-updates">Detailed updates&lt;/h2>
&lt;h3 id="bill-of-materials-bom">Bill Of Materials (BOM)&lt;/h3>
&lt;details>&lt;summary>Expand to see the BOM&lt;/summary>
&lt;pre class="highlight">
&lt;code>
version: 2.36.8
timestamp: 2026-03-05
services:
clouddriver:
version: 2.36.8
commit: 9238966167d0036449c1cf1610d4e40d30a59a95
deck:
version: 2.36.8
commit: 54a2aada8cb187554536daeb8b8b2858714d1afe
dinghy:
version: 2.36.8
commit: d36fdf5b496b18212275686d4c9069d72c9dbeb1
echo:
version: 2.36.8
commit: c7a79f742083c508cd28330814925e8f3906d067
fiat:
version: 2.36.8
commit: e77853e0322014f3b3f8911d9d6f2431830c192c
front50:
version: 2.36.8
commit: 5f8f39172e88b3abe49bab28e2fcb786b8653bf0
gate:
version: 2.36.8
commit: f99a459232f70e19a719a1962f7c6fcee9218750
igor:
version: 2.36.8
commit: 30cab7aaabdfe08c05c37146ab644555cf413513
kayenta:
version: 2.36.8
commit: 2ce818eed3873004412758a0f731cf8420df8594
orca:
version: 2.36.8
commit: 178d4b576e7b8136c42e0baa108cbf2730f6cec8
rosco:
version: 2.36.8
commit: 8e35f1c3560b3b8f7de6fc4a35718b4aee98a47c
terraformer:
version: 2.36.8
commit: 8453d42107fda5f0c315c8459f523e9182805832
monitoring-daemon:
version: 2.26.0
monitoring-third-party:
version: 2.26.0
dependencies:
redis:
version: 2:2.8.4-2
artifactSources:
dockerRegistry: docker.io/armory
&lt;/code>
&lt;/pre>
&lt;/details>
&lt;h3 id="armory">Armory&lt;/h3>
&lt;h4 id="armory-clouddriver---23672368">Armory Clouddriver - 2.36.7&amp;hellip;2.36.8&lt;/h4>
&lt;ul>
&lt;li>fix(validation): URL validation hardening on underscore/authority handling (upstream &lt;a href="https://github.com/spinnaker/spinnaker/pull/7428">#7428&lt;/a>)&lt;/li>
&lt;li>fix(cats-sql): make &lt;code>SqlUnknownAgentCleanupAgent&lt;/code> sharding-aware (upstream &lt;a href="https://github.com/spinnaker/spinnaker/pull/7431">#7431&lt;/a>)&lt;/li>
&lt;li>refactor(sharding): pluggable sharding strategy for caching pods (upstream &lt;a href="https://github.com/spinnaker/spinnaker/pull/7432">#7432&lt;/a>)&lt;/li>
&lt;li>feat(scheduler): add Redis priority scheduler (upstream &lt;a href="https://github.com/spinnaker/spinnaker/pull/7433">#7433&lt;/a>)&lt;/li>
&lt;/ul>
&lt;h4 id="armory-fiat---23672368">Armory Fiat - 2.36.7&amp;hellip;2.36.8&lt;/h4>
&lt;h4 id="armory-front50---23672368">Armory Front50 - 2.36.7&amp;hellip;2.36.8&lt;/h4>
&lt;h4 id="armory-orca---23672368">Armory Orca - 2.36.7&amp;hellip;2.36.8&lt;/h4>
&lt;ul>
&lt;li>fix(validation): URL restriction parsing/validation alignment for webhook restrictions (upstream &lt;a href="https://github.com/spinnaker/spinnaker/pull/7428">#7428&lt;/a>)&lt;/li>
&lt;/ul>
&lt;h4 id="armory-igor---23672368">Armory Igor - 2.36.7&amp;hellip;2.36.8&lt;/h4>
&lt;h4 id="terraformer---23672368">Terraformer™ - 2.36.7&amp;hellip;2.36.8&lt;/h4>
&lt;h4 id="armory-rosco---23672368">Armory Rosco - 2.36.7&amp;hellip;2.36.8&lt;/h4>
&lt;h4 id="armory-gate---23672368">Armory Gate - 2.36.7&amp;hellip;2.36.8&lt;/h4>
&lt;h4 id="armory-echo---23672368">Armory Echo - 2.36.7&amp;hellip;2.36.8&lt;/h4>
&lt;h4 id="armory-deck---23672368">Armory Deck - 2.36.7&amp;hellip;2.36.8&lt;/h4>
&lt;h4 id="armory-kayenta---23672368">Armory Kayenta - 2.36.7&amp;hellip;2.36.8&lt;/h4>
&lt;h4 id="dinghy---23672368">Dinghy™ - 2.36.7&amp;hellip;2.36.8&lt;/h4>
&lt;h3 id="spinnaker">Spinnaker&lt;/h3>
&lt;h4 id="spinnaker-igor---1361">Spinnaker Igor - 1.36.1&lt;/h4>
&lt;h4 id="spinnaker-rosco---1361">Spinnaker Rosco - 1.36.1&lt;/h4>
&lt;h4 id="spinnaker-gate---1361">Spinnaker Gate - 1.36.1&lt;/h4>
&lt;h4 id="spinnaker-echo---1361">Spinnaker Echo - 1.36.1&lt;/h4>
&lt;h4 id="spinnaker-deck---1361">Spinnaker Deck - 1.36.1&lt;/h4>
&lt;h4 id="spinnaker-orca---1361">Spinnaker Orca - 1.36.1&lt;/h4>
&lt;h4 id="spinnaker-kayenta---1361">Spinnaker Kayenta - 1.36.1&lt;/h4>
&lt;h4 id="spinnaker-front50---1361">Spinnaker Front50 - 1.36.1&lt;/h4>
&lt;h4 id="spinnaker-clouddriver---1361">Spinnaker Clouddriver - 1.36.1&lt;/h4>
&lt;h4 id="spinnaker-fiat---1361">Spinnaker Fiat - 1.36.1&lt;/h4></description></item></channel></rss>