<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Armory Docs – Get Started with Terraform Integration</title><link>/plugins/terraform/install/</link><description>Recent content in Get Started with Terraform Integration on Armory Docs</description><generator>Hugo -- gohugo.io</generator><atom:link href="/plugins/terraform/install/index.xml" rel="self" type="application/rss+xml"/><item><title>Plugins: Enable the Terraform Integration Stage in Armory Continuous Deployment</title><link>/plugins/terraform/install/armory-cd/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/plugins/terraform/install/armory-cd/</guid><description>
&lt;p>&lt;img src="/images/proprietary.svg" alt="Proprietary">&lt;/p>
&lt;h2 id="overview-of-enabling-terraform-integration">Overview of enabling Terraform Integration&lt;/h2>
&lt;p>Enabling the Terraform Integration stage consists of these steps:&lt;/p>
&lt;ol>
&lt;li>&lt;a href="#configure-armory-cd">Configure Armory CD&lt;/a>&lt;/li>
&lt;li>&lt;a href="#enable-terraform-integration">Enable Terraform Integration&lt;/a>&lt;/li>
&lt;li>&lt;a href="#apply-the-update">Apply the update&lt;/a>&lt;/li>
&lt;/ol>
&lt;h3 id="compatibility">Compatibility&lt;/h3>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align:left">Spinnaker Version&lt;/th>
&lt;th style="text-align:left">Terraform Integration Service Version&lt;/th>
&lt;th style="text-align:left">Terraform Integration Plugin Version&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align:left">1.30.x&lt;/td>
&lt;td style="text-align:left">2.30&lt;/td>
&lt;td style="text-align:left">0.0.2&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">1.29.x&lt;/td>
&lt;td style="text-align:left">2.28&lt;/td>
&lt;td style="text-align:left">0.0.1&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">1.28.x&lt;/td>
&lt;td style="text-align:left">2.28&lt;/td>
&lt;td style="text-align:left">0.0.1&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h2 id="before-you-begin">Before you begin&lt;/h2>
&lt;ul>
&lt;li>You have read the &lt;a href="/plugins/terraform/">Terraform Integration Overview&lt;/a>.&lt;/li>
&lt;li>You are running Armory Continuous Deployment.&lt;/li>
&lt;li>You manage your instance using the Armory Operator.&lt;/li>
&lt;/ul>
&lt;p>Terraform Integration is a built-in feature of Armory CD.&lt;/p>
&lt;p>If you are running open source Spinnaker, see the &lt;a href="/plugins/terraform/#installation-paths">Terraform Integration Overview&lt;/a> for installation paths based on whether you are using Halyard or the Spinnaker Operator.&lt;/p>
&lt;p>&lt;strong>Terraform Integration requirements&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>Basic auth credentials for the Git repository where your store your Terraform scripts. The Terraform Integration plugin needs access to credentials to download directories that house your Terraform templates.
&lt;ul>
&lt;li>You can configure your Git repo with any of the following:
&lt;ul>
&lt;li>A Personal Access Token (potentially associated with a service account).&lt;/li>
&lt;li>SSH protocol in the form of an SSH key or an SSH key file&lt;/li>
&lt;li>Basic auth in the form of a user and password, or a user-password file&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>A source for Terraform Input Variable files (&lt;code>tfvar&lt;/code>) or a backend config. You must have a separate artifact provider that can pull your &lt;code>tfvar&lt;/code> file(s). The Terraform Integration plugin supports the following artifact providers for &lt;code>tfvar&lt;/code> files and backend configs:
&lt;ul>
&lt;li>GitHub&lt;/li>
&lt;li>BitBucket&lt;/li>
&lt;li>HTTP artifact&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>A dedicated external Redis instance
&lt;ul>
&lt;li>Armory requires configuring a dedicated external Redis instance for production usage of the Terraform Integration plugin. This is to ensure that you do not encounter scaling or stability issues in production.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h2 id="configure-armory-cd">Configure Armory CD&lt;/h2>
&lt;h3 id="configure-redis">Configure Redis&lt;/h3>
&lt;p>Terraform Integration uses Redis to store Terraform logs and plans.&lt;/p>
&lt;blockquote>
&lt;p>You can only configure the Terraform Integration feature to use a password with the default Redis user.&lt;/p>
&lt;/blockquote>
&lt;p>Configure Redis settings in your Armory CD configuration and then apply your changes.&lt;/p>
&lt;ul class="nav nav-tabs justify-content-end" id="tabs-5" role="tablist">
&lt;li class="nav-item">
&lt;button class="nav-link active"
id="tabs-05-00-tab" data-bs-toggle="tab" data-bs-target="#tabs-05-00" role="tab"
aria-controls="tabs-05-00" aria-selected="true">
spinnaker-kustomize-patches
&lt;/button>
&lt;/li>&lt;li class="nav-item">
&lt;button class="nav-link"
id="tabs-05-01-tab" data-bs-toggle="tab" data-bs-target="#tabs-05-01" role="tab"
aria-controls="tabs-05-01" aria-selected="false">
spinnakerservice.yml
&lt;/button>
&lt;/li>
&lt;/ul>
&lt;div class="tab-content" id="tabs-5-content">
&lt;div class="tab-body tab-pane fade show active"
id="tabs-05-00" role="tabpanel" aria-labelled-by="tabs-05-00-tab" tabindex="5">
&lt;p>You need to modify &lt;code>spinnaker-kustomize-patches/armory/features/patch-terraformer.yml&lt;/code>. Add Redis configuration in the &lt;code>profiles&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">profiles&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">baseUrl&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;&amp;lt;your-redis-url&amp;gt;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">password&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;&amp;lt;your-redis-password&amp;gt;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;/div>
&lt;div class="tab-body tab-pane fade"
id="tabs-05-01" role="tabpanel" aria-labelled-by="tabs-05-01-tab" tabindex="5">
&lt;div class="highlight">&lt;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">terraformer&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">baseUrl&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;&amp;lt;your-redis-url&amp;gt;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">password&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;&amp;lt;your-redis-password&amp;gt;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;/div>
&lt;/div>
&lt;h3 id="configure-your-artifact-account">Configure your artifact account&lt;/h3>
&lt;p>The Terraform Integration uses the following artifact accounts:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Git Repo&lt;/strong> - To fetch the repo housing your main Terraform files.&lt;/li>
&lt;li>&lt;strong>GitHub, BitBucket or HTTP&lt;/strong> - &lt;em>Optional&lt;/em>. To fetch single files such as var-files or backend config files.&lt;/li>
&lt;/ul>
&lt;p>Spinnaker uses the Git Repo Artifact Provider to download the repo containing your main Terraform templates. For more configuration options, see &lt;a href="https://spinnaker.io/setup/artifacts/gitrepo/">Configure a Git Repo Artifact Account&lt;/a>.&lt;/p>
&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">
spinnaker-kustomize-patches
&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">
spinnakerservice.yml
&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>You need to modify &lt;code>spinnaker-kustomize-patches/armory/features/patch-terraformer.yml&lt;/code>. Configure artifacts in the &lt;code>spec.spinnakerConfig.config.artifacts&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">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">terraform&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">artifacts&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">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>: gitrepo
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">username&lt;/span>: &amp;lt;username&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">token&lt;/span>: &amp;lt;git-token&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6272a4"># password:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6272a4"># tokenFile: &lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6272a4"># usernamePasswordFile: &lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6272a4"># sshPrivateKeyFilePath:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6272a4"># sshPrivateKeyPassphrase:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6272a4"># sshKnownHostsFilePath: &lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6272a4"># sshTrustUnknownHosts: &lt;/span>
&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;div class="highlight">&lt;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">clouddriver&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">gitRepo&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>: gitrepo
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">token&lt;/span>: &amp;lt;your-personal-access-token&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;/div>
&lt;/div>
&lt;h3 id="configure-additional-repos">Configure additional repos&lt;/h3>
&lt;p>You need to modify &lt;code>spinnaker-kustomize-patches/armory/features/patch-terraformer.yml&lt;/code>. Configure additional artifacts in the &lt;code>spec.spinnakerConfig.config.artifacts&lt;/code> section.&lt;/p>
&lt;blockquote>
&lt;p>This step is optional.&lt;/p>
&lt;/blockquote>
&lt;ul class="nav nav-tabs justify-content-end" id="tabs-0" role="tablist">
&lt;li class="nav-item">
&lt;button class="nav-link disabled"
id="tabs-00-00-tab" data-bs-toggle="tab" data-bs-target="#tabs-00-00" role="tab"
aria-controls="tabs-00-00" aria-selected="false">
&lt;strong>Configure Optional Repos&lt;/strong>:
&lt;/button>
&lt;/li>&lt;li class="nav-item">
&lt;button class="nav-link active"
id="tabs-00-01-tab" data-bs-toggle="tab" data-bs-target="#tabs-00-01" role="tab"
aria-controls="tabs-00-01" aria-selected="true">
GitHub
&lt;/button>
&lt;/li>&lt;li class="nav-item">
&lt;button class="nav-link"
id="tabs-00-02-tab" data-bs-toggle="tab" data-bs-target="#tabs-00-02" role="tab"
aria-controls="tabs-00-02" aria-selected="false">
Bitbucket
&lt;/button>
&lt;/li>
&lt;/ul>
&lt;div class="tab-content" id="tabs-0-content">
&lt;div class="tab-body tab-pane fade"
id="tabs-00-00" role="tabpanel" aria-labelled-by="tabs-00-00-tab" tabindex="0">
&lt;/div>
&lt;div class="tab-body tab-pane fade show active"
id="tabs-00-01" role="tabpanel" aria-labelled-by="tabs-00-01-tab" tabindex="0">
&lt;p>These &lt;em>optional&lt;/em> steps describe how to configure GitHub as an artifact provider for the Terraform Integration.&lt;/p>
&lt;p>Spinnaker uses the Github Artifact Provider to download any referenced &lt;code>tfvar&lt;/code> files.&lt;/p>
&lt;p>Configure your GitHub artifact:&lt;/p>
&lt;div class="highlight">&lt;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">artifacts&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">accounts&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">name&lt;/span>: &amp;lt;github-for-terraform&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">token&lt;/span>: &amp;lt;your-github-personal-access-token&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;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>&lt;code>name&lt;/code>: the name for this account; replace &lt;code>github-for-terraform&lt;/code> with a unique identifier for the artifact account.&lt;/li>
&lt;li>&lt;code>token&lt;/code>: GitHub personal access token; this field supports &amp;ldquo;encrypted&amp;rdquo; field references.&lt;/li>
&lt;/ul>
&lt;/div>
&lt;div class="tab-body tab-pane fade"
id="tabs-00-02" role="tabpanel" aria-labelled-by="tabs-00-02-tab" tabindex="0">
&lt;p>Spinnaker uses the BitBucket Artifact Provider to download any referenced &lt;code>tfvar&lt;/code> files, so it must be configured with the BitBucket token to pull these 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>&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">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">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>: &amp;lt;bitbucket-for-terraform&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">username&lt;/span>: &amp;lt;your-bitbucket-username&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">password&lt;/span>: &amp;lt;your-bitbucket-password&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>&lt;code>name&lt;/code>: the name for this account; replace &lt;code>&amp;lt;bitbucket-for-terraform&amp;gt;&lt;/code> with a unique identifier for the artifact account.&lt;/li>
&lt;li>&lt;code>username&lt;/code>: Your Bitbucket username.&lt;/li>
&lt;li>&lt;code>password&lt;/code>: Your Bitbucket password; this field supports &amp;ldquo;encrypted&amp;rdquo; field references.&lt;/li>
&lt;/ul>
&lt;/div>
&lt;/div>
&lt;h2 id="enable-terraform-integration">Enable Terraform Integration&lt;/h2>
&lt;ul class="nav nav-tabs justify-content-end" id="tabs-8" role="tablist">
&lt;li class="nav-item">
&lt;button class="nav-link active"
id="tabs-08-00-tab" data-bs-toggle="tab" data-bs-target="#tabs-08-00" role="tab"
aria-controls="tabs-08-00" aria-selected="true">
spinnaker-kustomize-patches
&lt;/button>
&lt;/li>&lt;li class="nav-item">
&lt;button class="nav-link"
id="tabs-08-01-tab" data-bs-toggle="tab" data-bs-target="#tabs-08-01" role="tab"
aria-controls="tabs-08-01" aria-selected="false">
spinnakerservice.yml
&lt;/button>
&lt;/li>
&lt;/ul>
&lt;div class="tab-content" id="tabs-8-content">
&lt;div class="tab-body tab-pane fade show active"
id="tabs-08-00" role="tabpanel" aria-labelled-by="tabs-08-00-tab" tabindex="8">
&lt;p>You need to modify your Kustomization recipe to include &lt;code>patch-terraformer.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">patchesStrategicMerge&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - armory/features/patch-terraformer.yml
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;/div>
&lt;div class="tab-body tab-pane fade"
id="tabs-08-01" role="tabpanel" aria-labelled-by="tabs-08-01-tab" tabindex="8">
&lt;p>Add &lt;code>enabled: true&lt;/code> to your &lt;code>terraform&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">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">terraform&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;/div>
&lt;/div>
&lt;h2 id="apply-the-update">Apply the update&lt;/h2>
&lt;p>After you finish your Terraform Integration configuration, apply your changes. Confirm that the Terraform Integration service (Terraformer) is deployed with your Armory CD deployment:&lt;/p>
&lt;div class="highlight">&lt;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 pods -n &amp;lt;your-spinnaker-namespace&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>In the command output, look for a line 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-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>spin-terraformer-d4334g795-sv4vz 2/2 Running &lt;span style="color:#bd93f9">0&lt;/span> 0d
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="whats-next">What&amp;rsquo;s next&lt;/h2>
&lt;ul>
&lt;li>&lt;a href="/plugins/terraform/install/configure/">Configure Terraform Integration optional features&lt;/a>&lt;/li>
&lt;li>&lt;a href="/plugins/terraform/use/">Use the Terraform Integration stage&lt;/a>&lt;/li>
&lt;/ul></description></item><item><title>Plugins: Install Terraform Integration in Spinnaker (Spinnaker Operator)</title><link>/plugins/terraform/install/spinnaker-operator/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/plugins/terraform/install/spinnaker-operator/</guid><description>
&lt;h2 id="overview-of-installing-terraform-integration">Overview of installing Terraform Integration&lt;/h2>
&lt;p>In this guide, you use the Kustomize files in the &lt;a href="https://github.com/armory/spinnaker-kustomize-patches">&lt;code>spinnaker-kustomize-patches&lt;/code> repo&lt;/a> to install the plugin. You do need to update the contents of some files.&lt;/p>
&lt;ol>
&lt;li>&lt;a href="#configure-spinnaker">Configure Spinnaker&lt;/a>&lt;/li>
&lt;li>&lt;a href="#get-the-terraform-integration-installation-files">Get the Terraform Integration installation files&lt;/a>&lt;/li>
&lt;li>&lt;a href="#configure-the-service">Configure the service&lt;/a>&lt;/li>
&lt;li>&lt;a href="#configure-the-plugin">Configure the plugin&lt;/a>&lt;/li>
&lt;li>&lt;a href="#deploy-terraform-integration">Deploy Terraform Integration&lt;/a>&lt;/li>
&lt;/ol>
&lt;h3 id="compatibility">Compatibility&lt;/h3>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align:left">Spinnaker Version&lt;/th>
&lt;th style="text-align:left">Terraform Integration Service Version&lt;/th>
&lt;th style="text-align:left">Terraform Integration Plugin Version&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align:left">1.30.x&lt;/td>
&lt;td style="text-align:left">2.30&lt;/td>
&lt;td style="text-align:left">0.0.2&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">1.29.x&lt;/td>
&lt;td style="text-align:left">2.28&lt;/td>
&lt;td style="text-align:left">0.0.1&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">1.28.x&lt;/td>
&lt;td style="text-align:left">2.28&lt;/td>
&lt;td style="text-align:left">0.0.1&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h2 id="before-you-begin">Before you begin&lt;/h2>
&lt;p>You have read the &lt;a href="/plugins/terraform/">Terraform Integration Overview&lt;/a>.&lt;/p>
&lt;p>&lt;strong>Spinnaker requirements&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>You are running open source Spinnaker.&lt;/li>
&lt;li>You manage your instance using the Spinnaker Operator and the &lt;code>spinnaker-kustomize-patches&lt;/code> &lt;a href="https://github.com/armory/spinnaker-kustomize-patches">repo&lt;/a>. If you are using Halyard, see &lt;a href="/plugins/terraform/install/spinnaker-halyard/"}>Install Terraform Integration in Spinnaker (Halyard)&lt;/a>.&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Terraform Integration requirements&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>Basic auth credentials for the Git repository where your store your Terraform scripts. The Terraform Integration plugin needs access to credentials to download directories that house your Terraform templates.
&lt;ul>
&lt;li>You can configure your Git repo with any of the following:
&lt;ul>
&lt;li>A Personal Access Token (potentially associated with a service account).&lt;/li>
&lt;li>SSH protocol in the form of an SSH key or an SSH key file&lt;/li>
&lt;li>Basic auth in the form of a user and password, or a user-password file&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>A source for Terraform Input Variable files (&lt;code>tfvar&lt;/code>) or a backend config. You must have a separate artifact provider that can pull your &lt;code>tfvar&lt;/code> file(s). The Terraform Integration plugin supports the following artifact providers for &lt;code>tfvar&lt;/code> files and backend configs:
&lt;ul>
&lt;li>GitHub&lt;/li>
&lt;li>BitBucket&lt;/li>
&lt;li>HTTP artifact&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>A dedicated external Redis instance
&lt;ul>
&lt;li>Armory requires configuring a dedicated external Redis instance for production usage of the Terraform Integration plugin. This is to ensure that you do not encounter scaling or stability issues in production.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h2 id="configure-spinnaker">Configure Spinnaker&lt;/h2>
&lt;h3 id="configure-redis">Configure Redis&lt;/h3>
&lt;p>Terraform Integration uses Redis to store Terraform logs and plans.&lt;/p>
&lt;blockquote>
&lt;p>You can only configure the Terraform Integration feature to use a password with the default Redis user.&lt;/p>
&lt;/blockquote>
&lt;p>Configure Redis settings in your configuration and then apply.&lt;/p>
&lt;div class="highlight">&lt;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">terraformer&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">baseUrl&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;redis://spin-redis:6379&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">password&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;password&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;h3 id="configure-your-artifact-account">Configure your artifact account&lt;/h3>
&lt;p>The Terraform Integration uses the following artifact accounts:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Git Repo&lt;/strong> - To fetch the repo housing your main Terraform files.&lt;/li>
&lt;li>&lt;strong>GitHub, BitBucket or HTTP&lt;/strong> - &lt;em>Optional&lt;/em>. To fetch single files such as var-files or backend config files.&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Configure the Git Repo artifact&lt;/strong>&lt;/p>
&lt;p>Spinnaker uses the Git Repo Artifact Provider to download the repo containing your main Terraform templates.&lt;/p>
&lt;p>Edit your configuration to add 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">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">clouddriver&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">gitRepo&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>: gitrepo
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">token&lt;/span>: &amp;lt;your-personal-access-token&amp;gt; &lt;span style="color:#6272a4"># personal access token&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>For more configuration options, see &lt;a href="https://spinnaker.io/setup/artifacts/gitrepo/">Configure a Git Repo Artifact Account&lt;/a>.&lt;/p>
&lt;h3 id="configure-additional-repos">Configure additional repos&lt;/h3>
&lt;blockquote>
&lt;p>This step is optional.&lt;/p>
&lt;/blockquote>
&lt;ul class="nav nav-tabs justify-content-end" id="tabs-0" role="tablist">
&lt;li class="nav-item">
&lt;button class="nav-link disabled"
id="tabs-00-00-tab" data-bs-toggle="tab" data-bs-target="#tabs-00-00" role="tab"
aria-controls="tabs-00-00" aria-selected="false">
&lt;strong>Configure Optional Repos&lt;/strong>:
&lt;/button>
&lt;/li>&lt;li class="nav-item">
&lt;button class="nav-link active"
id="tabs-00-01-tab" data-bs-toggle="tab" data-bs-target="#tabs-00-01" role="tab"
aria-controls="tabs-00-01" aria-selected="true">
GitHub
&lt;/button>
&lt;/li>&lt;li class="nav-item">
&lt;button class="nav-link"
id="tabs-00-02-tab" data-bs-toggle="tab" data-bs-target="#tabs-00-02" role="tab"
aria-controls="tabs-00-02" aria-selected="false">
Bitbucket
&lt;/button>
&lt;/li>
&lt;/ul>
&lt;div class="tab-content" id="tabs-0-content">
&lt;div class="tab-body tab-pane fade"
id="tabs-00-00" role="tabpanel" aria-labelled-by="tabs-00-00-tab" tabindex="0">
&lt;/div>
&lt;div class="tab-body tab-pane fade show active"
id="tabs-00-01" role="tabpanel" aria-labelled-by="tabs-00-01-tab" tabindex="0">
&lt;p>These &lt;em>optional&lt;/em> steps describe how to configure GitHub as an artifact provider for the Terraform Integration.&lt;/p>
&lt;p>Spinnaker uses the Github Artifact Provider to download any referenced &lt;code>tfvar&lt;/code> files.&lt;/p>
&lt;p>Configure your GitHub artifact:&lt;/p>
&lt;div class="highlight">&lt;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">artifacts&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">accounts&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">name&lt;/span>: &amp;lt;github-for-terraform&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">token&lt;/span>: &amp;lt;your-github-personal-access-token&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;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>&lt;code>name&lt;/code>: the name for this account; replace &lt;code>github-for-terraform&lt;/code> with a unique identifier for the artifact account.&lt;/li>
&lt;li>&lt;code>token&lt;/code>: GitHub personal access token; this field supports &amp;ldquo;encrypted&amp;rdquo; field references.&lt;/li>
&lt;/ul>
&lt;/div>
&lt;div class="tab-body tab-pane fade"
id="tabs-00-02" role="tabpanel" aria-labelled-by="tabs-00-02-tab" tabindex="0">
&lt;p>Spinnaker uses the BitBucket Artifact Provider to download any referenced &lt;code>tfvar&lt;/code> files, so it must be configured with the BitBucket token to pull these 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>&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">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">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>: &amp;lt;bitbucket-for-terraform&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">username&lt;/span>: &amp;lt;your-bitbucket-username&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">password&lt;/span>: &amp;lt;your-bitbucket-password&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>&lt;code>name&lt;/code>: the name for this account; replace &lt;code>&amp;lt;bitbucket-for-terraform&amp;gt;&lt;/code> with a unique identifier for the artifact account.&lt;/li>
&lt;li>&lt;code>username&lt;/code>: Your Bitbucket username.&lt;/li>
&lt;li>&lt;code>password&lt;/code>: Your Bitbucket password; this field supports &amp;ldquo;encrypted&amp;rdquo; field references.&lt;/li>
&lt;/ul>
&lt;/div>
&lt;/div>
&lt;h2 id="get-the-terraform-integration-installation-files">Get the Terraform Integration installation files&lt;/h2>
&lt;p>You can find the Terraform Integration service and plugin files in the &lt;code>spinnaker-kustomize-patches&lt;/code> repo&amp;rsquo;s &lt;code>plugins/oss/terraformer&lt;/code> directory.&lt;/p>
&lt;ul>
&lt;li>&lt;code>kustomization.yml&lt;/code>: Kustomize build file&lt;/li>
&lt;li>&lt;code>deployment.yml&lt;/code>: &lt;code>spin-terraformer&lt;/code> Deployment manifest&lt;/li>
&lt;li>&lt;code>service.yml&lt;/code>: &lt;code>spin-terraformer&lt;/code> Service manifest&lt;/li>
&lt;li>&lt;code>terraformer-plugin-config.yml&lt;/code>: plugin installation&lt;/li>
&lt;li>&lt;code>terraformer.yml&lt;/code>: config file&lt;/li>
&lt;li>&lt;code>terraformer-local.yml&lt;/code>: config file for &lt;a href="/plugins/terraform/install/configure/#named-profiles">Named Profiles&lt;/a>&lt;/li>
&lt;li>&lt;code>spinnaker.yml&lt;/code>: Spinnaker service mapping&lt;/li>
&lt;li>&lt;code>versions&lt;/code> directory: contains version-specific values that Kustomize inserts into the manifest during generation&lt;/li>
&lt;/ul>
&lt;p>The &lt;code>spinnaker-kustomize-patches/recipes&lt;/code> directory contains the example &lt;code>kustomization-oss-terraformer.yml&lt;/code> recipe. You can use that recipe or copy the entries to your recipe. This guide uses the &lt;code>kustomization-oss-terraformer.yml&lt;/code> recipe for examples.&lt;/p>
&lt;h2 id="configure-the-service">Configure the service&lt;/h2>
&lt;p>Make sure the service version is compatible with your Spinnaker version.&lt;/p>
&lt;p>You specify the version in the &lt;code>patchesStrategicMerge&lt;/code> section of &lt;code>plugins/oss/terraformer/kustomization.yml&lt;/code>. You can find supported versions in the &lt;code>plugins/oss/terraformer/versions&lt;/code> directory. For example, if you are running Spinnaker 1.27.x, replace &lt;code>./versions/v-1.28.yml&lt;/code> with &lt;code>./versions/v-1.27.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">patchesStrategicMerge&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - ./pac-plugin-config.yml
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - ./versions/v-1.28.yml
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="configure-the-plugin">Configure the plugin&lt;/h2>
&lt;p>In &lt;code>terraformer-plugin-config.yml&lt;/code>, make sure the &lt;code>version&lt;/code> number is compatible with your Spinnaker 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>&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.Terraformer&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:#ff79c6">&amp;amp;pluginversion&lt;/span> &lt;span style="color:#bd93f9">0.0.1&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>For example, if you want to use plugin version 0.0.2, your &lt;code>version&lt;/code> value would be &lt;code>&amp;amp;pluginversion 0.0.2&lt;/code>.&lt;/p>
&lt;h2 id="deploy-terraform-integration">Deploy Terraform Integration&lt;/h2>
&lt;p>This step deploys the Terraformer service and installs the plugin. If you want to see the generated manifest before you deploy, execute &lt;code>kubectl kustomize&lt;/code>.&lt;/p>
&lt;p>Apply the updates to your Kustomization 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>kubectl apply -k &amp;lt;kustomization-directory-path&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="whats-next">What&amp;rsquo;s next&lt;/h2>
&lt;ul>
&lt;li>&lt;a href="/plugins/terraform/install/configure/">Configure Terraform Integration optional features&lt;/a>&lt;/li>
&lt;li>&lt;a href="/plugins/terraform/use/">Use the Terraform Integration stage&lt;/a>&lt;/li>
&lt;/ul></description></item><item><title>Plugins: Install Terraform Integration in Spinnaker (Halyard)</title><link>/plugins/terraform/install/spinnaker-halyard/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/plugins/terraform/install/spinnaker-halyard/</guid><description>
&lt;h2 id="overview-of-installing-terraform-integration">Overview of installing Terraform Integration&lt;/h2>
&lt;p>Installing the Terraform Integration plugin consists of these steps:&lt;/p>
&lt;ol>
&lt;li>&lt;a href="#configure-spinnaker">Configure Spinnaker&lt;/a>: Redis, &lt;code>gitrepo&lt;/code> artifact, and optional repos&lt;/li>
&lt;li>&lt;a href="#install-the-service">Install the service&lt;/a>: Kubernetes manifests&lt;/li>
&lt;li>&lt;a href="#install-the-plugin">Install the plugin&lt;/a>: Local config files&lt;/li>
&lt;/ol>
&lt;h3 id="compatibility">Compatibility&lt;/h3>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align:left">Spinnaker Version&lt;/th>
&lt;th style="text-align:left">Terraform Integration Service Version&lt;/th>
&lt;th style="text-align:left">Terraform Integration Plugin Version&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align:left">1.30.x&lt;/td>
&lt;td style="text-align:left">2.30&lt;/td>
&lt;td style="text-align:left">0.0.2&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">1.29.x&lt;/td>
&lt;td style="text-align:left">2.28&lt;/td>
&lt;td style="text-align:left">0.0.1&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">1.28.x&lt;/td>
&lt;td style="text-align:left">2.28&lt;/td>
&lt;td style="text-align:left">0.0.1&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h2 id="before-you-begin">Before you begin&lt;/h2>
&lt;p>You have read the &lt;a href="/plugins/terraform/">Terraform Integration Overview&lt;/a>.&lt;/p>
&lt;p>&lt;strong>Spinnaker requirements&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>You are running open source Spinnaker.&lt;/li>
&lt;li>You manage your instance using Halyard. If you are using the Spinnaker Operator, see &lt;a href="/plugins/terraform/install/spinnaker-operator/"}>Install Terraform Integration in Spinnaker (Spinnaker Operator)&lt;/a>&lt;/li>
&lt;/ul>
&lt;div class="alert alert-warning" role="alert">
&lt;h4 class="alert-heading">Warning&lt;/h4>
The examples in this guide are for a vanilla Spinnaker installation. You may need to adjust them for your environment.
&lt;/div>
&lt;p>&lt;strong>Terraform Integration requirements&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>Basic auth credentials for the Git repository where your store your Terraform scripts. The Terraform Integration plugin needs access to credentials to download directories that house your Terraform templates.
&lt;ul>
&lt;li>You can configure your Git repo with any of the following:
&lt;ul>
&lt;li>A Personal Access Token (potentially associated with a service account).&lt;/li>
&lt;li>SSH protocol in the form of an SSH key or an SSH key file&lt;/li>
&lt;li>Basic auth in the form of a user and password, or a user-password file&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>A source for Terraform Input Variable files (&lt;code>tfvar&lt;/code>) or a backend config. You must have a separate artifact provider that can pull your &lt;code>tfvar&lt;/code> file(s). The Terraform Integration plugin supports the following artifact providers for &lt;code>tfvar&lt;/code> files and backend configs:
&lt;ul>
&lt;li>GitHub&lt;/li>
&lt;li>BitBucket&lt;/li>
&lt;li>HTTP artifact&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>A dedicated external Redis instance
&lt;ul>
&lt;li>Armory requires configuring a dedicated external Redis instance for production usage of the Terraform Integration plugin. This is to ensure that you do not encounter scaling or stability issues in production.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h2 id="configure-spinnaker">Configure Spinnaker&lt;/h2>
&lt;h3 id="configure-redis">Configure Redis&lt;/h3>
&lt;p>Terraform Integration uses Redis to store Terraform logs and plans.&lt;/p>
&lt;blockquote>
&lt;p>You can only configure the Terraform Integration feature to use a password with the default Redis user.&lt;/p>
&lt;/blockquote>
&lt;p>Configure Redis settings in your configuration and then apply.&lt;/p>
&lt;div class="highlight">&lt;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">terraformer&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">baseUrl&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;redis://spin-redis:6379&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">password&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;password&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;h3 id="configure-your-artifact-account">Configure your artifact account&lt;/h3>
&lt;p>The Terraform Integration uses the following artifact accounts:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Git Repo&lt;/strong> - To fetch the repo housing your main Terraform files.&lt;/li>
&lt;li>&lt;strong>GitHub, BitBucket or HTTP&lt;/strong> - &lt;em>Optional&lt;/em>. To fetch single files such as var-files or backend config files.&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Configure the Git Repo artifact&lt;/strong>&lt;/p>
&lt;p>Spinnaker uses the Git Repo Artifact Provider to download the repo containing your main Terraform templates.&lt;/p>
&lt;p>Edit your configuration to add 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">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">clouddriver&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">gitRepo&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>: gitrepo
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">token&lt;/span>: &amp;lt;your-personal-access-token&amp;gt; &lt;span style="color:#6272a4"># personal access token&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>For more configuration options, see &lt;a href="https://spinnaker.io/setup/artifacts/gitrepo/">Configure a Git Repo Artifact Account&lt;/a>.&lt;/p>
&lt;h3 id="configure-additional-repos">Configure additional repos&lt;/h3>
&lt;blockquote>
&lt;p>This step is optional.&lt;/p>
&lt;/blockquote>
&lt;ul class="nav nav-tabs justify-content-end" id="tabs-0" role="tablist">
&lt;li class="nav-item">
&lt;button class="nav-link disabled"
id="tabs-00-00-tab" data-bs-toggle="tab" data-bs-target="#tabs-00-00" role="tab"
aria-controls="tabs-00-00" aria-selected="false">
&lt;strong>Configure Optional Repos&lt;/strong>:
&lt;/button>
&lt;/li>&lt;li class="nav-item">
&lt;button class="nav-link active"
id="tabs-00-01-tab" data-bs-toggle="tab" data-bs-target="#tabs-00-01" role="tab"
aria-controls="tabs-00-01" aria-selected="true">
GitHub
&lt;/button>
&lt;/li>&lt;li class="nav-item">
&lt;button class="nav-link"
id="tabs-00-02-tab" data-bs-toggle="tab" data-bs-target="#tabs-00-02" role="tab"
aria-controls="tabs-00-02" aria-selected="false">
Bitbucket
&lt;/button>
&lt;/li>
&lt;/ul>
&lt;div class="tab-content" id="tabs-0-content">
&lt;div class="tab-body tab-pane fade"
id="tabs-00-00" role="tabpanel" aria-labelled-by="tabs-00-00-tab" tabindex="0">
&lt;/div>
&lt;div class="tab-body tab-pane fade show active"
id="tabs-00-01" role="tabpanel" aria-labelled-by="tabs-00-01-tab" tabindex="0">
&lt;p>These &lt;em>optional&lt;/em> steps describe how to configure GitHub as an artifact provider for the Terraform Integration.&lt;/p>
&lt;p>Spinnaker uses the Github Artifact Provider to download any referenced &lt;code>tfvar&lt;/code> files.&lt;/p>
&lt;p>Configure your GitHub artifact:&lt;/p>
&lt;div class="highlight">&lt;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">artifacts&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">accounts&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">name&lt;/span>: &amp;lt;github-for-terraform&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">token&lt;/span>: &amp;lt;your-github-personal-access-token&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;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>&lt;code>name&lt;/code>: the name for this account; replace &lt;code>github-for-terraform&lt;/code> with a unique identifier for the artifact account.&lt;/li>
&lt;li>&lt;code>token&lt;/code>: GitHub personal access token; this field supports &amp;ldquo;encrypted&amp;rdquo; field references.&lt;/li>
&lt;/ul>
&lt;/div>
&lt;div class="tab-body tab-pane fade"
id="tabs-00-02" role="tabpanel" aria-labelled-by="tabs-00-02-tab" tabindex="0">
&lt;p>Spinnaker uses the BitBucket Artifact Provider to download any referenced &lt;code>tfvar&lt;/code> files, so it must be configured with the BitBucket token to pull these 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>&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">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">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>: &amp;lt;bitbucket-for-terraform&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">username&lt;/span>: &amp;lt;your-bitbucket-username&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">password&lt;/span>: &amp;lt;your-bitbucket-password&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>&lt;code>name&lt;/code>: the name for this account; replace &lt;code>&amp;lt;bitbucket-for-terraform&amp;gt;&lt;/code> with a unique identifier for the artifact account.&lt;/li>
&lt;li>&lt;code>username&lt;/code>: Your Bitbucket username.&lt;/li>
&lt;li>&lt;code>password&lt;/code>: Your Bitbucket password; this field supports &amp;ldquo;encrypted&amp;rdquo; field references.&lt;/li>
&lt;/ul>
&lt;/div>
&lt;/div>
&lt;h2 id="install-the-service">Install the service&lt;/h2>
&lt;h3 id="configure-kubernetes-permissions">Configure Kubernetes permissions&lt;/h3>
&lt;p>The following manifest creates a ServiceAccount, ClusterRole, and ClusterRoleBinding. Apply the manifest in your &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-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>: ServiceAccount
&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>: terraformer-sa
&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">apiVersion&lt;/span>: rbac.authorization.k8s.io/v1
&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">metadata&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">name&lt;/span>: terraformer-cluster-role
&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 style="color:#ff79c6">apiGroups&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - extensions
&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> - ingresses
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - ingresses/status
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">verbs&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - get
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - list
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - watch
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - create
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - update
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - patch
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - delete
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>- &lt;span style="color:#ff79c6">apiGroups&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - networking.k8s.io
&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> - ingresses
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - ingresses/status
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">verbs&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - get
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - list
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - watch
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - create
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - update
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - patch
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - delete
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>- &lt;span style="color:#ff79c6">apiGroups&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 style="color:#ff79c6">resources&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - pods
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - endpoints
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">verbs&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - get
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - list
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - watch
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - create
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - update
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - patch
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - delete
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>- &lt;span style="color:#ff79c6">apiGroups&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 style="color:#ff79c6">resources&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> - services/finalizers
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - events
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - configmaps
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - secrets
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - namespaces
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - jobs
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">verbs&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - create
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - get
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - list
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - update
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - watch
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - patch
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - delete
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>- &lt;span style="color:#ff79c6">apiGroups&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - batch
&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> - jobs
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">verbs&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - create
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - get
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - list
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - update
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - watch
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - patch
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>- &lt;span style="color:#ff79c6">apiGroups&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - apps
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - extensions
&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> - deployments
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - deployments/finalizers
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - deployments/scale
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - daemonsets
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - replicasets
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - statefulsets
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">verbs&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - create
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - get
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - list
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - update
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - watch
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - patch
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - delete
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>- &lt;span style="color:#ff79c6">apiGroups&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - monitoring.coreos.com
&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> - servicemonitors
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">verbs&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - get
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - create
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>- &lt;span style="color:#ff79c6">apiGroups&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - spinnaker.armory.io
&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> - &lt;span style="color:#f1fa8c">&amp;#39;*&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - spinnakerservices
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">verbs&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - create
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - get
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - list
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - update
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - watch
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - patch
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>- &lt;span style="color:#ff79c6">apiGroups&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - admissionregistration.k8s.io
&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> - validatingwebhookconfigurations
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">verbs&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#f1fa8c">&amp;#39;*&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:#ff79c6">apiVersion&lt;/span>: rbac.authorization.k8s.io/v1
&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>: terraformer-cluster-role-binding
&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>: terraformer-cluster-role
&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>: terraformer-sa
&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;/code>&lt;/pre>&lt;/div>
&lt;h3 id="configure-the-service">Configure the service&lt;/h3>
&lt;p>Create a ConfigMap to contain your Terraformer Integration service configuration. Be sure to check the &lt;code>spinnaker.yml&lt;/code> entry in the &lt;code>data&lt;/code> section to ensure the values match your Spinnaker installation.&lt;/p>
&lt;div class="highlight">&lt;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>: spin-terraformer-config
&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">data&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">terraformer.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"> clouddriver:
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> baseUrl: ${services.clouddriver.baseUrl}
&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"> executor:
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> scrapeLogsIntervalSecs: 5
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> workers: 3
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> git:
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> enabled: false
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> redis:
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> baseUrl: ${services.redis.baseUrl}
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> enabled: ${services.redis.enabled}
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> server:
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> host: ${services.terraformer.host}
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> port: ${services.terraformer.port}
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> spectator:
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> applicationName: ${spring.application.name}
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> webEndpoint:
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> enabled: false
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> spinnaker:
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> extensibility:
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> plugins: {}
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> plugins-root-path: /opt/terraformer/plugins
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> repositories: {}
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> strict-plugin-loading: false&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">spinnaker.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"> global.spinnaker.timezone: America/Los_Angeles
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> services:
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> clouddriver:
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> baseUrl: http://spin-clouddriver:7002
&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"> host: 0.0.0.0
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> port: 7002
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> clouddriverCaching:
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> baseUrl: http://spin-clouddriver-caching:7002
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> enabled: false
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> host: 0.0.0.0
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> port: 7002
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> clouddriverRo:
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> baseUrl: http://spin-clouddriver-ro:7002
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> enabled: false
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> host: 0.0.0.0
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> port: 7002
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> clouddriverRoDeck:
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> baseUrl: http://spin-clouddriver-ro-deck:7002
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> enabled: false
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> host: 0.0.0.0
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> port: 7002
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> clouddriverRw:
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> baseUrl: http://spin-clouddriver-rw:7002
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> enabled: false
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> host: 0.0.0.0
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> port: 7002
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> deck:
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> baseUrl: http://localhost:9000
&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"> host: 0.0.0.0
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> port: 9000
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> dinghy:
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> baseUrl: http://spin-dinghy:8081
&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"> host: 0.0.0.0
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> port: 8081
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> echo:
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> baseUrl: http://spin-echo:8089
&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"> host: 0.0.0.0
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> port: 8089
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> echoScheduler:
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> baseUrl: http://spin-echo-scheduler:8089
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> enabled: false
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> host: 0.0.0.0
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> port: 8089
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> echoWorker:
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> baseUrl: http://spin-echo-worker:8089
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> enabled: false
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> host: 0.0.0.0
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> port: 8089
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> fiat:
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> baseUrl: http://spin-fiat:7003
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> enabled: false
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> host: 0.0.0.0
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> port: 7003
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> front50:
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> baseUrl: http://spin-front50:8080
&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"> host: 0.0.0.0
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> port: 8080
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> gate:
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> baseUrl: http://localhost:8084
&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"> host: 0.0.0.0
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> port: 8084
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> igor:
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> baseUrl: http://spin-igor:8088
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> enabled: false
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> host: 0.0.0.0
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> port: 8088
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> kayenta:
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> baseUrl: http://spin-kayenta:8090
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> enabled: false
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> host: 0.0.0.0
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> port: 8090
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> monitoringDaemon:
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> baseUrl: http://spin-monitoring-daemon:8008
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> enabled: false
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> host: 0.0.0.0
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> port: 8008
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> orca:
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> baseUrl: http://spin-orca:8083
&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"> host: 0.0.0.0
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> port: 8083
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> redis:
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> baseUrl: redis://spin-redis:6379
&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"> host: 0.0.0.0
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> port: 6379
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> rosco:
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> baseUrl: http://spin-rosco:8087
&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"> host: 0.0.0.0
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> port: 8087
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> terraformer:
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> baseUrl: http://spin-terraformer:7088
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> enabled: false
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> host: 0.0.0.0
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> port: 7088&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;h3 id="deploy-the-service">Deploy the service&lt;/h3>
&lt;p>Replace &lt;code>&amp;lt;version&amp;gt;&lt;/code> with the Terraform Integration service version &lt;a href="#compatibility">compatible&lt;/a> with your Spinnaker 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-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">name&lt;/span>: spin-terraformer
&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-terraformer
&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">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-terraformer
&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>: http
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">port&lt;/span>: &lt;span style="color:#bd93f9">7088&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">7088&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">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>: spin-terraformer
&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">deployment.kubernetes.io/revision&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;1&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">moniker.spinnaker.io/application&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#39;&amp;#34;spin&amp;#34;&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">moniker.spinnaker.io/cluster&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#39;&amp;#34;terraformer&amp;#34;&amp;#39;&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">app.kubernetes.io/managed-by&lt;/span>: armory
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">app.kubernetes.io/name&lt;/span>: terraformer
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">app.kubernetes.io/part-of&lt;/span>: spinnaker
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">app.kubernetes.io/version&lt;/span>: &amp;lt;version&amp;gt; &lt;span style="color:#6272a4"># CHANGE&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">cluster&lt;/span>: spin-terraformer
&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">progressDeadlineSeconds&lt;/span>: &lt;span style="color:#bd93f9">600&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">1&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">revisionHistoryLimit&lt;/span>: &lt;span style="color:#bd93f9">10&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">app&lt;/span>: spin
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">cluster&lt;/span>: spin-terraformer
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">strategy&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">rollingUpdate&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">maxSurge&lt;/span>: &lt;span style="color:#bd93f9">25&lt;/span>%
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">maxUnavailable&lt;/span>: &lt;span style="color:#bd93f9">25&lt;/span>%
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">type&lt;/span>: RollingUpdate
&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">app&lt;/span>: spin
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">app.kubernetes.io/managed-by&lt;/span>: armory
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">app.kubernetes.io/name&lt;/span>: terraformer
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">app.kubernetes.io/part-of&lt;/span>: spinnaker
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">app.kubernetes.io/version&lt;/span>: &amp;lt;version&amp;gt; &lt;span style="color:#6272a4"># CHANGE&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">cluster&lt;/span>: spin-terraformer
&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">affinity&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">env&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">name&lt;/span>: SPRING_PROFILES_ACTIVE
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">value&lt;/span>: local
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">image&lt;/span>: docker.io/armory/terraformer
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">imagePullPolicy&lt;/span>: IfNotPresent
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">lifecycle&lt;/span>: {}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">name&lt;/span>: terraformer
&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">7088&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">readinessProbe&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">command&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - wget
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - --&lt;span style="color:#ff79c6">no&lt;/span>-check-certificate
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - --spider
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - -q
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - http://localhost:7088/health
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">failureThreshold&lt;/span>: &lt;span style="color:#bd93f9">3&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">periodSeconds&lt;/span>: &lt;span style="color:#bd93f9">10&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">successThreshold&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">timeoutSeconds&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">resources&lt;/span>: {}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">terminationMessagePath&lt;/span>: /dev/termination-log
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">terminationMessagePolicy&lt;/span>: File
&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
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">name&lt;/span>: spin-terraformer-config-file
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">dnsPolicy&lt;/span>: ClusterFirst
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">restartPolicy&lt;/span>: Always
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">schedulerName&lt;/span>: default-scheduler
&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">fsGroup&lt;/span>: &lt;span style="color:#bd93f9">1000&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">runAsUser&lt;/span>: &lt;span style="color:#bd93f9">1000&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">terminationGracePeriodSeconds&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">volumes&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">name&lt;/span>: spin-terraformer-config-file
&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">secretName&lt;/span>: spin-terraformer-config-file
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;p>Apply the ConfigMap and Deployment manifests in your &lt;code>spinnaker&lt;/code> namespace.&lt;/p>
&lt;h2 id="install-the-plugin">Install the plugin&lt;/h2>
&lt;div class="alert alert-warning" role="alert">
&lt;h4 class="alert-heading">A note about installing plugins in Spinnaker&lt;/h4>
When Halyard adds a plugin to a Spinnaker installation, it adds the plugin repository information to all services, not just the ones the plugin is for. This means that when you restart Spinnaker, each service restarts, downloads the plugin, and checks if an extension exists for that service. Each service restarting is not ideal for large Spinnaker installations due to service restart times. Clouddriver can take an hour or more to restart if you have many accounts configured.
&lt;/div>
&lt;p>The Terraform plugin extends Deck, Gate, and Orca. To avoid every Spinnaker service restarting and downloading the plugin, do not add the plugin using Halyard. Instead, follow the local config installation method, in which you configure the plugin in each extended service’s local profile.&lt;/p>
&lt;p>Replace &lt;code>&amp;lt;version&amp;gt;&lt;/code> with the plugin version [that&amp;rsquo;s compatible with your Spinnaker instance].&lt;/p>
&lt;ol>
&lt;li>
&lt;p>Add the following to &lt;code>gate-local.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">proxies&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">id&lt;/span>: terraform
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">uri&lt;/span>: http://spin-terraformer:7088
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">methods&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - GET
&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">terraformer&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">baseUrl&lt;/span>: http://spin-terraformer:7088
&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.Terraformer&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">terraformer&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>: https://raw.githubusercontent.com/armory-plugins/pluginRepository/master/repositories.json
&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">Armory.Terraformer&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;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>Add the following to &lt;code>orca-local.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">services&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">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">baseUrl&lt;/span>: http://spin-terraformer:7088
&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.Terraformer&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">terraformer&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>: https://raw.githubusercontent.com/armory-plugins/pluginRepository/master/repositories.json
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>Save your files and apply your changes by running &lt;code>hal deploy apply&lt;/code>.&lt;/p>
&lt;/li>
&lt;/ol>
&lt;h2 id="whats-next">What&amp;rsquo;s next&lt;/h2>
&lt;ul>
&lt;li>&lt;a href="/plugins/terraform/install/configure/">Configure Terraform Integration optional features&lt;/a>&lt;/li>
&lt;li>&lt;a href="/plugins/terraform/use/">Use the Terraform Integration stage&lt;/a>&lt;/li>
&lt;/ul></description></item><item><title>Plugins: Configure Terraform Integration Optional Features</title><link>/plugins/terraform/install/configure/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/plugins/terraform/install/configure/</guid><description>
&lt;h2 id="where-to-configure-the-terraform-integration-service">Where to configure the Terraform Integration service&lt;/h2>
&lt;ul>
&lt;li>Spinnaker (Spinnaker Operator): &lt;code>spinnaker-kustomize-patches/plugins/oss/pipelines-as-code/terraformer.yml&lt;/code>; use &lt;code>spinnaker-kustomize-patches/plugins/oss/pipelines-as-code/terraformer-local.yml&lt;/code> for &lt;a href="#named-profiles">Named Profiles&lt;/a>&lt;/li>
&lt;li>Spinnaker (Halyard): &lt;code>terraformer.yml&lt;/code> section of your ConfigMap; create a new &lt;code>terraformer-local.yml&lt;/code> section to configure &lt;a href="#named-profiles">Named Profiles&lt;/a>&lt;/li>
&lt;li>Armory CD: &lt;code>spinnaker-kustomize-patches/armory/features/patch-terraformer.yml&lt;/code>&lt;/li>
&lt;/ul>
&lt;h2 id="cloud-provider">Cloud provider&lt;/h2>
&lt;p>Terraform Integration is cloud provider agnostic. Terraform commands execute against the terraform binary. All methods of configuring authentication are supported as per Terraform&amp;rsquo;s compatibility and capabilities.&lt;/p>
&lt;p>You can also configure a &lt;a href="#named-profiles">Named Profile&lt;/a> that grants access to resources such as AWS.&lt;/p>
&lt;h2 id="logging-and-metrics">Logging and metrics&lt;/h2>
&lt;blockquote>
&lt;p>If the logging URL is not responsive, Terraform Integration may not process deploys until the URL can be reached.&lt;/p>
&lt;/blockquote>
&lt;p>You can enable logging and metrics for Prometheus by adding the following configuration to the &lt;code>spec.spinnakerConfig.profiles.terraformer.logging.remote&lt;/code> block in your &lt;code>SpinnakerService&lt;/code> manifest:&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">
Spinnaker
&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">
Armory CD
&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;p>Add the following to your &lt;code>terraformer.yml&lt;/code> config:&lt;/p>
&lt;div class="highlight">&lt;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">logging&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">remote&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>: &amp;lt;TheLoggingEndPoint&amp;gt; &lt;span style="color:#6272a4"># For example, https://debug.armory.io&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.2.3&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">customerId&lt;/span>: someCustomer123 &lt;span style="color:#6272a4"># Your Armory Customer ID&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">metrics&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">frequency&lt;/span>: &amp;lt;Seconds&amp;gt; &lt;span style="color:#6272a4"># Replace with an integer value for seconds based on how frequently you want metrics to be scraped&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">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">commonTags&lt;/span>: &lt;span style="color:#6272a4"># The following tags are examples. Use tags that are relevant for your environment&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6272a4"># env: dev&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6272a4"># nf_app: exampleApp&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6272a4"># nf_region: us-west-1&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&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;div class="highlight">&lt;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">terraformer&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">remote&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>: &amp;lt;TheLoggingEndPoint&amp;gt; &lt;span style="color:#6272a4"># For example, https://debug.armory.io&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.2.3&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">customerId&lt;/span>: someCustomer123 &lt;span style="color:#6272a4"># Your Armory Customer ID&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">metrics&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">frequency&lt;/span>: &amp;lt;Seconds&amp;gt; &lt;span style="color:#6272a4"># Replace with an integer value for seconds based on how frequently you want metrics to be scraped&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">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">commonTags&lt;/span>: &lt;span style="color:#6272a4"># The following tags are examples. Use tags that are relevant for your environment&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6272a4"># env: dev&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6272a4"># nf_app: exampleApp&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6272a4"># nf_region: us-west-1&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;/div>
&lt;/div>
&lt;h2 id="named-profiles">Named Profiles&lt;/h2>
&lt;p>When creating pipelines, a Named Profile gives you the ability to reference certain kinds of external sources, such as a private remote repository. The supported credentials are described in &lt;a href="#types-of-credentials">Types of credentials&lt;/a>.&lt;/p>
&lt;h3 id="configure-a-named-profile">Configure a Named Profile&lt;/h3>
&lt;p>Configure profiles that you can select when creating a Terraform Integration stage.&lt;/p>
&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">
Spinnaker (Operator)
&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">
Spinnaker (Halyard)
&lt;/button>
&lt;/li>&lt;li class="nav-item">
&lt;button class="nav-link"
id="tabs-01-02-tab" data-bs-toggle="tab" data-bs-target="#tabs-01-02" role="tab"
aria-controls="tabs-01-02" aria-selected="false">
Armory CD
&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;p>Add profiles to the &lt;code>terraformer-local.yml&lt;/code> file. The following example adds a profile named &lt;code>pixel-git&lt;/code> for an SSH key secured in Vault. You can find additional profile examples at &lt;a href="#types-of-credentials">Types of credentials&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-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>- &lt;span style="color:#ff79c6">name&lt;/span>: pixel-git &lt;span style="color:#6272a4"># Unique profile name displayed in Deck&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">variables&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">kind&lt;/span>: git-ssh
&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">sshPrivateKey&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;/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;p>Add profiles to the &lt;code>terraformer-local.yml&lt;/code> section of your ConfigMap. The following example adds a profile named &lt;code>pixel-git&lt;/code> for an SSH key secured in Vault. You can find additional profile examples at &lt;a href="#types-of-credentials">Types of credentials&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-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>: spin-terraformer-config
&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">data&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> terraformer-local.yml |
&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">name&lt;/span>: pixel-git &lt;span style="color:#6272a4"># Unique profile name displayed in Deck&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">variables&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">kind&lt;/span>: git-ssh
&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">sshPrivateKey&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;/div>
&lt;div class="tab-body tab-pane fade"
id="tabs-01-02" role="tabpanel" aria-labelled-by="tabs-01-02-tab" tabindex="1">
&lt;p>Add profiles to the &lt;code>spec.spinnakerConfig.profiles.terraformer.profiles&lt;/code> section. The following example adds a profile named &lt;code>pixel-git&lt;/code> for an SSH key secured in Vault. You can find additional profile examples at &lt;a href="#types-of-credentials">Types of credentials&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-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>- &lt;span style="color:#ff79c6">name&lt;/span>: pixel-git &lt;span style="color:#6272a4"># Unique profile name displayed in Deck&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">variables&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">kind&lt;/span>: git-ssh
&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">sshPrivateKey&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;/div>
&lt;/div>
&lt;p>Keep in mind:&lt;/p>
&lt;ol>
&lt;li>
&lt;p>When you create or edit a Terraform Integration stage in the UI, you can select the profile &lt;code>pixel-git&lt;/code> from a dropdown.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>When adding profiles:&lt;/p>
&lt;ul>
&lt;li>
&lt;p>You can add multiple profiles under the &lt;code>profiles&lt;/code> section.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>As a best practice, do not commit plain text secrets to &lt;code>spec.spinnakerConfig.profiles.terraformer&lt;/code>. Instead, use a &lt;a href="/continuous-deployment/armory-admin/secrets/">secret store&lt;/a>: &lt;a href="/continuous-deployment/armory-admin/secrets/secrets-vault/">Vault&lt;/a>, an &lt;a href="/continuous-deployment/armory-admin/secrets/secrets-s3/">encrypted S3 bucket&lt;/a>, an &lt;a href="/continuous-deployment/armory-admin/secrets/secrets-aws-sm/">AWS Secrets Manager&lt;/a>, or an &lt;a href="/continuous-deployment/armory-admin/secrets/secrets-gcs/">encrypted GCS bucket&lt;/a>.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>For SSH keys, each profile supports only one option parameter at a time. This means that you can use a private key file (&lt;code>sshPrivateKeyFilePath&lt;/code>) or the key (&lt;code>sshPrivateKey&lt;/code>) as the option. To use the key file path, use &lt;code>sshPrivateKeyFilePath&lt;/code> for the option and provide the path to the key file. You can also encrypt the path using a secret store such as Vault. The following &lt;code>option&lt;/code> example uses &lt;code>sshPrivateKeyFilePath&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">options&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">sshPrivateKeyFilePath&lt;/span>: encryptedFile:&amp;lt;secret_store&amp;gt;!e:...
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>For more information, see the documentation for your secret store.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ol>
&lt;h3 id="add-authz-to-named-profiles">Add authz to Named Profiles&lt;/h3>
&lt;p>Armory recommends that you enable authorization for your Named Profiles to provide more granular control and give App Developers better guardrails. When you configure authz for Named Profiles, you need to explicitly grant permission to the roles you want to have access to the profile. Users who do not have permission to use a certain Named Profile do not see it as an option in the UI. Also, any stage that uses a Named Profile that a user is not authorized for fails.&lt;/p>
&lt;div class="alert alert-warning" role="alert">
&lt;h4 class="alert-heading">Note&lt;/h4>
Before you start, make sure you enable Fiat. For more information about Fiat, see &lt;a href="/continuous-deployment/overview/fiat-permissions-overview/">Fiat Overview&lt;/a> and &lt;a href="https://spinnaker.io/setup/security/authorization/">Authorization (RBAC)&lt;/a>.
&lt;/div>
&lt;p>This example does the following:&lt;/p>
&lt;ul>
&lt;li>Grants access to the resources and accounts that you need, such as permissions to deploy to AWS via FIAT in Cloud&lt;/li>
&lt;li>Enables FIAT authz to work with Terraformer&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">profiles&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">profiles&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">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">baseUrl&lt;/span>: https://spin-fiat:7003 &lt;span style="color:#6272a4"># ${services.fiat.baseUrl}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="types-of-credentials">Types of credentials&lt;/h3>
&lt;p>The Terraform integration supports multiple types of credentials for Named Profiles:&lt;/p>
&lt;ul>
&lt;li>AWS&lt;/li>
&lt;li>SSH&lt;/li>
&lt;li>Static&lt;/li>
&lt;li>Terraform remote backend&lt;/li>
&lt;/ul>
&lt;p>If you’re not using AWS, you should configure one of the other credential types in your Named Profile.&lt;/p>
&lt;p>&lt;strong>AWS&lt;/strong>&lt;/p>
&lt;p>Use the &lt;code>aws&lt;/code> credential type to provide authentication to AWS. There are two methods you can use to provide authentication - by defining a static key pair or a role that should be assumed before a Terraform action is executed.&lt;/p>
&lt;p>For defining a static key pair, supply an &lt;code>accessKeyId&lt;/code> and a &lt;code>secretAccessKey&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">name&lt;/span>: devops &lt;span style="color:#6272a4"># Unique name for the profile. Shows up in Deck.&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">variables&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">kind&lt;/span>: aws &lt;span style="color:#6272a4"># Type of credential&lt;/span>
&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">accessKeyId&lt;/span>: AKIAIOWQXTLW36DV7IEA
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">secretAccessKey&lt;/span>: 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
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>For assuming a role instead of defining a static set of credentials, supply the ARN of the role to assume:&lt;/p>
&lt;div class="highlight">&lt;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>: devops &lt;span style="color:#6272a4"># Unique name for the profile. Shows up in Deck.&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">variables&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">kind&lt;/span>: aws &lt;span style="color:#6272a4"># Type of credential&lt;/span>
&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">assumeRole&lt;/span>: arn:aws:iam::012345567:role/roleAssume
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;em>When assuming a role, if &lt;code>accessKeyId&lt;/code> and &lt;code>secretAccessKey&lt;/code> are supplied, the Terraform integration uses these credentials to assume the role. Otherwise, the environment gets used for authentication, such as a machine role or a shared credentials file.&lt;/em>&lt;/p>
&lt;p>&lt;strong>SSH Key&lt;/strong>&lt;/p>
&lt;p>Use the &lt;code>git-ssh&lt;/code> credential kind to provide authentication to private Git repositories used as modules within your Terraform actions. The supplied SSH key will be available to Terraform for the duration of your execution, allowing it to fetch any modules it needs:&lt;/p>
&lt;div class="highlight">&lt;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>: pixel-git &lt;span style="color:#6272a4"># Unique name for the profile. Shows up in Deck.&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">variables&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">kind&lt;/span>: git-ssh &lt;span style="color:#6272a4"># Type of credential&lt;/span>
&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">sshPrivateKey&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;p>&lt;strong>Static&lt;/strong>&lt;/p>
&lt;p>Use the &lt;code>static&lt;/code> credential kind to provide any arbitrary key/value pair that isn&amp;rsquo;t supported by any of the other credential kinds. For example, if you want all users of the &lt;code>devops&lt;/code> profile to execute against the &lt;code>AWS_REGION=us-west-2&lt;/code>, use the following &lt;code>static&lt;/code> credential 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">name&lt;/span>: devops &lt;span style="color:#6272a4"># Unique name for the profile. Shows up in Deck.&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">variables&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">kind&lt;/span>: static &lt;span style="color:#6272a4"># Type of credential&lt;/span>
&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">name&lt;/span>: AWS_REGION
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">value&lt;/span>: us-west-2
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;strong>Terraform remote backend&lt;/strong>&lt;/p>
&lt;p>Use the &lt;code>tfc&lt;/code> credential kind to provide authentication to remote Terraform backends.&lt;/p>
&lt;div class="highlight">&lt;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>: milton-tfc &lt;span style="color:#6272a4"># Unique name for the profile. Shows up in Deck.&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">variables&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">kind&lt;/span>: tfc
&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">domain&lt;/span>: app.terraform.io &lt;span style="color:#6272a4"># or Terraform Enterprise URL&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">token&lt;/span>: &amp;lt;authentication-token&amp;gt; &lt;span style="color:#6272a4"># Replace with your token&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="remote-backends">Remote backends&lt;/h2>
&lt;p>The Terraform Integration feature supports using remote backends provided by Terraform Cloud and Terraform Enterprise.&lt;/p>
&lt;p>When using remote backends, keep the following in mind:&lt;/p>
&lt;ul>
&lt;li>The Terraform stage must use the same Terraform version that your Terraform Cloud/Enterprise workspace is configured to run.&lt;/li>
&lt;li>The minimum supported Terraform version is 0.12.0.&lt;/li>
&lt;li>In the Terraform Cloud/Enterprise UI, the type of &lt;code>plan&lt;/code> action that the Terraform Integration stage performs is a &amp;ldquo;speculative plan.&amp;rdquo; For more information, see &lt;a href="https://www.terraform.io/docs/cloud/run/index.html#speculative-plans">Speculative Plans&lt;/a> in the Terraform docs.&lt;/li>
&lt;li>You cannot save and apply a plan file.&lt;/li>
&lt;/ul>
&lt;h4 id="enable-remote-backend-support">Enable remote backend support&lt;/h4>
&lt;p>You can use remote backends by configuring the Terraform Integration stage with the following parameters:&lt;/p>
&lt;ul>
&lt;li>A Terraform version that is 0.12.0 or later and matches the version that your Terraform Cloud/Enterprise runs.&lt;/li>
&lt;li>Reference a remote backend in your Terraform code.&lt;/li>
&lt;/ul>
&lt;p>To enable support, add the following config to your &lt;code>terraformer-local.yml&lt;/code> file in the &lt;code>.hal/default/profiles&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>terraform:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> remoteBackendSupport: &lt;span style="color:#8be9fd;font-style:italic">true&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="retries">Retries&lt;/h2>
&lt;p>The Terraformer service can retry connections if it fails to fetch artifacts from Clouddriver. Configure the retry behavior in your &lt;code>terraformer-local.yml&lt;/code> file by adding 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:#6272a4"># terraformer-local.yml&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">retry&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">minWait&lt;/span>: 4s &lt;span style="color:#6272a4"># must be a duration, such as 4s for 4 seconds&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">maxWait&lt;/span>: 8s &lt;span style="color:#6272a4"># must be a duration, such as 8s for 8 seconds&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">maxRetries&lt;/span>: &lt;span style="color:#bd93f9">5&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>The preceding example enables retries and sets the minimum wait between attempts to 4 seconds, the maximum wait between attempts to 8s, and the maximum number of retries to 5.&lt;/p>
&lt;h2 id="whats-next">What&amp;rsquo;s next&lt;/h2>
&lt;ul>
&lt;li>&lt;a href="/plugins/terraform/use/">Use the Terraform Integration stage&lt;/a>&lt;/li>
&lt;/ul></description></item></channel></rss>