<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Armory Docs – Dynamic Accounts Tasks</title><link>/plugins/scale-agent/tasks/dynamic-accounts/</link><description>Recent content in Dynamic Accounts Tasks on Armory Docs</description><generator>Hugo -- gohugo.io</generator><atom:link href="/plugins/scale-agent/tasks/dynamic-accounts/index.xml" rel="self" type="application/rss+xml"/><item><title>Plugins: Enable and Configure Dynamic Accounts in the Armory Scale Agent</title><link>/plugins/scale-agent/tasks/dynamic-accounts/enable/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/plugins/scale-agent/tasks/dynamic-accounts/enable/</guid><description>
&lt;h2 id="before-you-begin">Before you begin&lt;/h2>
&lt;ul>
&lt;li>
&lt;p>You are familiar with &lt;a href="/plugins/scale-agent/concepts/dynamic-accounts/"}>Dynamic Accounts Architecture and Features&lt;/a>.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>The following Dynamic Accounts features use Clouddriver Account Management:&lt;/p>
&lt;ul>
&lt;li>Automatic account migration&lt;/li>
&lt;li>Clouddriver Account Management API request interception&lt;/li>
&lt;/ul>
&lt;p>Clouddriver Account Management is not enabled by default in Spinnaker or Armory Continuous Deployment. See Spinnaker&amp;rsquo;s &lt;a href="https://spinnaker.io/docs/setup/other_config/accounts/">Clouddriver Account Management&lt;/a> page for how to enable the feature.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;h2 id="scale-agent-plugin">Scale Agent plugin&lt;/h2>
&lt;blockquote>
&lt;p>Dynamic Accounts is enabled by default starting with plugin versions v0.11.21/0.10.69/0.9.85.&lt;/p>
&lt;/blockquote>
&lt;p>If you are using a prior version of the plugin, you should enable Dynamic Accounts by setting &lt;code>kubesvc.dynamicAccounts.enabled: true&lt;/code> in your plugin configuration. For example:&lt;/p>
&lt;div class="highlight">&lt;div style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;display:grid;">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;display:grid;">&lt;code>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 1
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 2
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 3
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 4
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 5
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 6
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 7
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 8
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 9
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">10
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">11
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">12
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">13
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">14
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">15
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">16
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">17
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">18
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">19
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">20
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">21
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">22
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">23
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">24
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">25
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">26
&lt;/span>&lt;span style="background-color:#3d3f4a">&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">27
&lt;/span>&lt;/span>&lt;span style="background-color:#3d3f4a">&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">28
&lt;/span>&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">29
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">30
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">31
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">32
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">33
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">34
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">35
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;display:grid;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>spec:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> spinnakerConfig:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> profiles:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> clouddriver:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> spinnaker:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> extensibility:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> repositories:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> armory-agent-k8s-spinplug-releases:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> enabled: &lt;span style="color:#8be9fd;font-style:italic">true&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> url: https://raw.githubusercontent.com/armory-io/agent-k8s-spinplug-releases/master/repositories.json
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> plugins:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Armory.Kubesvc:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> enabled: &lt;span style="color:#8be9fd;font-style:italic">true&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> version: 0.11.26 &lt;span style="color:#6272a4"># Replace with a version compatible with your Armory CD version&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> armory.kubesvc:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> enabled: &lt;span style="color:#8be9fd;font-style:italic">true&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#6272a4"># Plugin config&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> kubesvc:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> cluster: kubernetes
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> cluster-kubernetes:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> kubeconfigFile: &amp;lt;path-to-file&amp;gt; &lt;span style="color:#6272a4"># (Optional; default: null)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> verifySsl: &amp;lt;true|false&amp;gt; &lt;span style="color:#6272a4"># Optional; default: true)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> namespace: &amp;lt;string&amp;gt; &lt;span style="color:#6272a4"># (Optional; default: null)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> httpPortName: &amp;lt;string&amp;gt; &lt;span style="color:#6272a4"># (Optional; default: http)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> clouddriverServiceNamePrefix: &amp;lt;string&amp;gt; &lt;span style="color:#6272a4"># (Optional; default: spin-clouddriver)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex; background-color:#3d3f4a">&lt;span> dynamicAccounts:
&lt;/span>&lt;/span>&lt;span style="display:flex; background-color:#3d3f4a">&lt;span> enabled: &amp;lt;true|false&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> maxRetries: &amp;lt;int&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> retryFrequencySeconds: &amp;lt;int&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> interceptor: &lt;span style="color:#6272a4"># requires Clouddriver Account Management be enabled in Spinnaker/Armory Continuous Deployment&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> enabled: &amp;lt;true|false&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> scanBatchSize: &amp;lt;int&amp;gt; &lt;span style="color:#6272a4"># (Optional) # requires Clouddriver Account Management be enabled in Spinnaker/Armory Continuous Deployment&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> scanFrequencySeconds: &amp;lt;int&amp;gt; &lt;span style="color:#6272a4"># (Optional) # requires Clouddriver Account Management be enabled in Spinnaker/Armory Continuous Deployment&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> namePatterns: &lt;span style="color:#ff79c6">[&lt;/span>&lt;span style="color:#f1fa8c">&amp;#39;^account1.*&amp;#39;&lt;/span>,&lt;span style="color:#f1fa8c">&amp;#39;^.*account2.*&amp;#39;&lt;/span>&lt;span style="color:#ff79c6">]&lt;/span> &lt;span style="color:#6272a4"># (Optional) # requires Clouddriver Account Management be enabled in Spinnaker/Armory Continuous Deployment&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>
&lt;p>&lt;code>dynamicAccounts&lt;/code>:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>enabled&lt;/strong>: (Optional) default: false; set to &lt;code>true&lt;/code> to enable the Dynamic Accounts feature&lt;/li>
&lt;li>&lt;strong>maxRetries&lt;/strong>: (Optional) default: 3; the number of times to retry adding an account that fails the first time&lt;/li>
&lt;li>&lt;strong>retryFrequencySeconds&lt;/strong>: (Optional) default: 5; the number of seconds to wait between trying to add a FAILED account&lt;/li>
&lt;/ul>
&lt;p>The remaining optional attributes in the &lt;code>dynamicAccounts&lt;/code> section are for configuring automatic migration of Clouddriver accounts to the Scale Agent. These options are discussed in detail in &lt;a href="/plugins/scale-agent/tasks/dynamic-accounts/migrate-accounts/"}>Migrate Clouddriver Kubernetes Accounts to the Armory Scale Agent&lt;/a>.&lt;/p>
&lt;p>If you want to use the &lt;a href="/plugins/scale-agent/concepts/dynamic-accounts/#intercept-clouddriver-account-management-api-requests">interceptor&lt;/a> feature to intercept requests sent to Clouddriver&amp;rsquo;s &lt;code>/credentials&lt;/code> endpoint, add:&lt;/p>
&lt;div class="highlight">&lt;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">dynamicAccounts&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">interceptor&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">enabled&lt;/span>: &lt;span style="color:#ff79c6">true&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Alternately, you can enable the &lt;a href="/plugins/scale-agent/concepts/dynamic-accounts/#migrate-accounts-using-automatic-scanning">autoscan for new Clouddriver accounts&lt;/a> feature by configuring the following:&lt;/p>
&lt;ul>
&lt;li>&lt;code>scanBatchSize&lt;/code>: &lt;int>&lt;/li>
&lt;li>&lt;code>scanFrequencySeconds&lt;/code>: &lt;int>&lt;/li>
&lt;li>&lt;code>namePatterns&lt;/code>: [&amp;rsquo;^account1.*&amp;rsquo;,&amp;rsquo;^.&lt;em>account2.&lt;/em>']&lt;/li>
&lt;/ul>
&lt;p>For example:&lt;/p>
&lt;div class="highlight">&lt;div style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;display:grid;">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;display:grid;">&lt;code>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">1
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">2
&lt;/span>&lt;span style="background-color:#3d3f4a">&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">3
&lt;/span>&lt;/span>&lt;span style="background-color:#3d3f4a">&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">4
&lt;/span>&lt;/span>&lt;span style="background-color:#3d3f4a">&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">5
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;display:grid;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>dynamicAccounts:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> enabled: &lt;span style="color:#8be9fd;font-style:italic">true&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex; background-color:#3d3f4a">&lt;span> scanBatchSize: &lt;span style="color:#bd93f9">15&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex; background-color:#3d3f4a">&lt;span> scanFrequencySeconds: &lt;span style="color:#bd93f9">120&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex; background-color:#3d3f4a">&lt;span> namePatterns: &lt;span style="color:#ff79c6">[&lt;/span>&lt;span style="color:#f1fa8c">&amp;#39;^account1.*&amp;#39;&lt;/span>,&lt;span style="color:#f1fa8c">&amp;#39;^.*account2.*&amp;#39;&lt;/span>&lt;span style="color:#ff79c6">]&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>
&lt;h3 id="access-the-api">Access the API&lt;/h3>
&lt;p>The Dynamic Accounts REST API provides endpoints to create, delete, get, migrate, and update Kubernetes accounts. You can&amp;rsquo;t access these endpoints through Gate. You should have &lt;code>kubectl&lt;/code> access to your Spinnaker cluster and &lt;code>port-forward&lt;/code> to be able to call the API.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>kubectl port-forward deployment/spin-clouddriver 7002:7002 -n spinnaker
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>You can then access endpoints via &lt;code>http://localhost:7002&lt;/code>.&lt;/p>
&lt;h2 id="scale-agent-service">Scale Agent service&lt;/h2>
&lt;p>The Dynamic Accounts API is enabled by default in the Scale Agent Service:&lt;/p>
&lt;div class="highlight">&lt;div style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;display:grid;">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;display:grid;">&lt;code>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 1
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 2
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 3
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 4
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 5
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 6
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 7
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 8
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 9
&lt;/span>&lt;span style="background-color:#3d3f4a">&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">10
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;display:grid;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>apiVersion: v1
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>kind: ConfigMap
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>metadata:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> name: armory-agent-config
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> namespace: spin-agent
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>data:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> armory-agent.yml: |
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> server:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> port: &lt;span style="color:#bd93f9">8082&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex; background-color:#3d3f4a">&lt;span> dynamicAccountsEnabled: &lt;span style="color:#8be9fd;font-style:italic">true&lt;/span> &lt;span style="color:#6272a4"># (Optional; default: true)&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>
&lt;p>You can disable dynamic accounts features by setting &lt;code>dynamicAccountsEnabled&lt;/code> to &lt;code>false&lt;/code>.&lt;/p>
&lt;h2 id="whats-next">What&amp;rsquo;s next&lt;/h2>
&lt;ol>
&lt;li>&lt;a href="/plugins/scale-agent/tasks/dynamic-accounts/migrate-accounts/"}>Migrate Clouddriver Kubernetes Accounts to the Armory Scale Agent&lt;/a>&lt;/li>
&lt;li>&lt;a href="/plugins/scale-agent/tasks/dynamic-accounts/manage-accounts/"}>Manage Kubernetes Accounts in the Armory Scale Agent&lt;/a>&lt;/li>
&lt;/ol></description></item><item><title>Plugins: Manage Kubernetes Accounts in the Armory Scale Agent</title><link>/plugins/scale-agent/tasks/dynamic-accounts/manage-accounts/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/plugins/scale-agent/tasks/dynamic-accounts/manage-accounts/</guid><description>
&lt;h2 id="manage-accounts-overview">Manage accounts overview&lt;/h2>
&lt;p>The Dynamic Accounts REST API provides endpoints to create, delete, get, migrate, and update Kubernetes accounts. You can&amp;rsquo;t access these endpoints through Gate. You should have &lt;code>kubectl&lt;/code> access to your Spinnaker cluster and &lt;code>port-forward&lt;/code> to be able to call the API.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>kubectl port-forward deployment/spin-clouddriver 7002:7002 -n spinnaker
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>You can then access endpoints via &lt;code>http://localhost:7002&lt;/code>.&lt;/p>
&lt;p>See &lt;a href="/plugins/scale-agent/tasks/dynamic-accounts/migrate-accounts/"}>Migrate Clouddriver Kubernetes Accounts to the Armory Scale Agent&lt;/a> for details on how to manually or automatically migrate accounts from Clouddriver to the Scale Agent using the Dynamic Accounts API.&lt;/p>
&lt;h2 id="create-accounts">Create accounts&lt;/h2>
&lt;p>Like migrating accounts, creating new accounts is a two-step process:&lt;/p>
&lt;ol>
&lt;li>POST new account data; this adds the new accounts in an INACTIVE state&lt;/li>
&lt;li>PATCH to change state to ACTIVE and begin using the account.&lt;/li>
&lt;/ol>
&lt;h3 id="provision-accounts">Provision accounts&lt;/h3>
&lt;p>&lt;strong>Endpoint&lt;/strong>: POST&amp;lt;Account[]&amp;gt; &lt;code>/armory/accounts/dynamic&lt;/code>&lt;/p>
&lt;p>&lt;strong>Request body&lt;/strong>:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">&amp;#34;name&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;&amp;lt;account-name&amp;gt;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">&amp;#34;zoneId&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;&amp;lt;zone-id&amp;gt;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">&amp;#34;kubeconfigContents&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;encryptedFile:k8s!n:kubeconfig-t!k:config!ns:spinnaker&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Required fields:&lt;/p>
&lt;ul>
&lt;li>&lt;code>name&lt;/code>: the account name&lt;/li>
&lt;/ul>
&lt;p>and &lt;strong>one&lt;/strong> of the following:&lt;/p>
&lt;ul>
&lt;li>&lt;code>kubeconfigContents&lt;/code>: encrypted contents of the &lt;code>kubeconfig&lt;/code> file&lt;/li>
&lt;li>&lt;code>kubeconfigFile&lt;/code>: Path to the &lt;code>kubeconfig&lt;/code> file if not using &lt;code>serviceAccount&lt;/code>.&lt;/li>
&lt;li>&lt;code>serviceAccount&lt;/code>: true or false; if true, use the current service account to call to the current API server. In this mode, you don’t need to provide a &lt;code>kubeconfig&lt;/code> file.&lt;/li>
&lt;/ul>
&lt;p>Optional fields:&lt;/p>
&lt;ul>
&lt;li>&lt;code>zoneId&lt;/code>: (Optional) the &lt;code>zoneId&lt;/code> for the targeted Agent service, which is by default deploymentName_namespace. This can optionally be supplied during the activation step.&lt;/li>
&lt;li>You can include any &lt;code>kubernetes.accounts[]&lt;/code> attribute from the Scale Agent service &lt;a href="/plugins/scale-agent/reference/config/service-options/#configuration-options">config options list&lt;/a>.&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Example&lt;/strong>:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span> curl --request POST &lt;span style="color:#f1fa8c">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c">&lt;/span> --url http://clouddriver:7002/armory/accounts &lt;span style="color:#f1fa8c">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c">&lt;/span> --header &lt;span style="color:#f1fa8c">&amp;#39;Content-Type: application/json&amp;#39;&lt;/span> &lt;span style="color:#f1fa8c">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c">&lt;/span> --data &lt;span style="color:#f1fa8c">&amp;#39;[
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> {
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> &amp;#34;name&amp;#34;: &amp;#34;account-01&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> },
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> {
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> &amp;#34;name&amp;#34;: &amp;#34;account-02&amp;#34;,
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> &amp;#34;zoneId&amp;#34;: &amp;#34;agent-1_namespace1&amp;#34;,
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> &amp;#34;kubeconfigFile&amp;#34;: &amp;#34;encryptedFile:k8s!n:kubeconfig!k:config!ns:spinnaker&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> }
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> ]&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;p>&lt;strong>Response&lt;/strong>:&lt;/p>
&lt;ul>
&lt;li>202 Accepted: &lt;code>[] empty array&lt;/code>&lt;/li>
&lt;li>409 Conflict: &lt;code>[] array containing already migrated accounts&lt;/code> (still processes valid ones)&lt;/li>
&lt;li>400 Bad Request: in case the account array is empty&lt;/li>
&lt;li>501 Not Implemented: if the Dynamic Accounts feature isn&amp;rsquo;t enabled&lt;/li>
&lt;/ul>
&lt;h3 id="activate-accounts">Activate accounts&lt;/h3>
&lt;p>&lt;strong>Endpoint&lt;/strong>: PATCH&amp;lt;Account[]&amp;gt; &lt;code>/armory/accounts/dynamic&lt;/code>&lt;/p>
&lt;p>&lt;strong>Request body&lt;/strong>:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>[
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;name&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;&amp;lt;account-name&amp;gt;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;state&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;&amp;lt;INACTIVE | FAILED&amp;gt;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;zoneId&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;&amp;lt;zone-id&amp;gt;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;kubeconfigFile&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;&amp;lt;encrypted-kubeconfig&amp;gt;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>]
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Required fields:&lt;/p>
&lt;ul>
&lt;li>&lt;code>name&lt;/code>: the account name&lt;/li>
&lt;li>&lt;code>state&lt;/code>: the account state; valid values are INACTIVE or FAILED.&lt;/li>
&lt;/ul>
&lt;p>and &lt;strong>one&lt;/strong> of the following: &lt;code>kubeconfigContents&lt;/code>, &lt;code>kubeconfigFile&lt;/code>, or &lt;code>serviceAccount&lt;/code> (whichever one you used in the POST request).&lt;/p>
&lt;p>&lt;code>zoneId&lt;/code> is optional if you included one in the provision step.&lt;/p>
&lt;p>&lt;strong>Example&lt;/strong>:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>curl --request PATCH &lt;span style="color:#f1fa8c">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c">&lt;/span> --url http://localhost:7002/armory/accounts &lt;span style="color:#f1fa8c">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c">&lt;/span> --header &lt;span style="color:#f1fa8c">&amp;#39;Content-Type: application/json&amp;#39;&lt;/span> &lt;span style="color:#f1fa8c">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c">&lt;/span> --data &lt;span style="color:#f1fa8c">&amp;#39;[
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> {
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> &amp;#34;name&amp;#34;: &amp;#34;account-01&amp;#34;,
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> &amp;#34;state&amp;#34;: &amp;#34;ACTIVE&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> },
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> {
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> &amp;#34;name&amp;#34;: &amp;#34;account-02&amp;#34;,
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> &amp;#34;state&amp;#34;: &amp;#34;ACTIVE&amp;#34;,
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> &amp;#34;zoneId&amp;#34;: &amp;#34;agent-1_namespace1&amp;#34;,
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> &amp;#34;kubeconfigFile&amp;#34;: &amp;#34;encryptedFile:k8s!n:kubeconfig!k:config!ns:spinnaker&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> }
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c">]&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;p>&lt;strong>Response&lt;/strong>:&lt;/p>
&lt;ul>
&lt;li>202 Accepted&lt;/li>
&lt;li>501 Not Implemented: if the Dynamic Accounts feature isn&amp;rsquo;t enabled&lt;/li>
&lt;/ul>
&lt;h2 id="deactivate-accounts">Deactivate accounts&lt;/h2>
&lt;p>This action changes the state to INACTIVE and instructs the Scale Agent service to stop watching the account(s).&lt;/p>
&lt;p>&lt;strong>Endpoint&lt;/strong>: PATCH &amp;lt;Account[]&amp;gt; &lt;code>/armory/accounts&lt;/code>&lt;/p>
&lt;p>&lt;strong>Request body&lt;/strong>:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>[
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;name&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;&amp;lt;account-name&amp;gt;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;state&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;INACTIVE&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> },
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;name&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;&amp;lt;account-name&amp;gt;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;state&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;INACTIVE&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>]
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;strong>Example&lt;/strong>:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>curl --request PATCH &lt;span style="color:#f1fa8c">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c">&lt;/span> --url http://localhost:7002/armory/accounts &lt;span style="color:#f1fa8c">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c">&lt;/span> --header &lt;span style="color:#f1fa8c">&amp;#39;Content-Type: application/json&amp;#39;&lt;/span> &lt;span style="color:#f1fa8c">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c">&lt;/span> --data &lt;span style="color:#f1fa8c">&amp;#39;[
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> {
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> &amp;#34;name&amp;#34;: &amp;#34;account-01&amp;#34;,
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> &amp;#34;state&amp;#34;: &amp;#34;INACTIVE&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> },
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> {
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> &amp;#34;name&amp;#34;: &amp;#34;account-02&amp;#34;,
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> &amp;#34;state&amp;#34;: &amp;#34;INACTIVE&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> }
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c">]&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;strong>Response&lt;/strong>:&lt;/p>
&lt;ul>
&lt;li>202 Accepted - no body.&lt;/li>
&lt;li>501 Not Implemented: if the Dynamic Accounts feature isn&amp;rsquo;t enabled&lt;/li>
&lt;/ul>
&lt;h2 id="delete-accounts">Delete accounts&lt;/h2>
&lt;p>This action removes the account from the Scale Agent service that watches it. Then the plugin removes the account from the &lt;code>clouddriver.kubesvc_accounts&lt;/code> table.&lt;/p>
&lt;blockquote>
&lt;p>Account must be of type &lt;strong>dynamic&lt;/strong> in &lt;code>clouddriver.kubesvc_accounts&lt;/code>.&lt;/p>
&lt;/blockquote>
&lt;p>&lt;strong>Endpoint&lt;/strong>: DELETE &amp;lt;string[]&amp;gt; &lt;code>/armory/accounts&lt;/code>&lt;/p>
&lt;p>&lt;strong>Request body&lt;/strong>:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>[&lt;span style="color:#f1fa8c">&amp;#34;account-01&amp;#34;&lt;/span>,&lt;span style="color:#f1fa8c">&amp;#34;account-02&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;strong>Example&lt;/strong>:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>curl --request DELETE &lt;span style="color:#f1fa8c">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c">&lt;/span> --url http://localhost:7002/armory/accounts &lt;span style="color:#f1fa8c">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c">&lt;/span> --header &lt;span style="color:#f1fa8c">&amp;#39;Content-Type: application/json&amp;#39;&lt;/span> &lt;span style="color:#f1fa8c">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c">&lt;/span> --data &lt;span style="color:#f1fa8c">&amp;#39;[&amp;#34;account-01&amp;#34;,&amp;#34;account-02&amp;#34;]&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;strong>Response:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>202 Accepted - no body.&lt;/li>
&lt;li>501 Not Implemented: if the Dynamic Accounts feature isn&amp;rsquo;t enabled&lt;/li>
&lt;/ul>
&lt;h2 id="get-an-account">Get an account&lt;/h2>
&lt;p>Use this to fetch the status and definition of an account.&lt;/p>
&lt;p>&lt;strong>Endpoint&lt;/strong>: GET &lt;code>/agents/kubernetes/accounts/{account-name}&lt;/code>&lt;/p>
&lt;p>&lt;strong>Example&lt;/strong>:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>curl --request GET &lt;span style="color:#f1fa8c">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c">&lt;/span> --url http://localhost:7002/agents/kubernetes/accounts/account-01
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;strong>Response&lt;/strong>:&lt;/p>
&lt;ul>
&lt;li>200 Accepted: &lt;code>{name:..., kubeconfigContents:..., ... } account object found&lt;/code> or empty object if none.&lt;/li>
&lt;li>501 Not Implemented: if the Dynamic Accounts feature isn&amp;rsquo;t enabled&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Example response&lt;/strong>:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;name&amp;#34;&lt;/span>:&lt;span style="color:#f1fa8c">&amp;#34;my-account-1&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;type&amp;#34;&lt;/span>:&lt;span style="color:#f1fa8c">&amp;#34;kubernetes&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;source&amp;#34;&lt;/span>:&lt;span style="color:#f1fa8c">&amp;#34;clouddriver&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;config&amp;#34;&lt;/span>:{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> },
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;zoneId&amp;#34;&lt;/span>:&lt;span style="color:#f1fa8c">&amp;#34;agent-private-network-1&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;agents&amp;#34;&lt;/span>:{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;agentId&amp;#34;&lt;/span>:&lt;span style="color:#f1fa8c">&amp;#34;agent-private-network-1-54865d798c-cpqgm&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;caching&amp;#34;&lt;/span>:&lt;span style="color:#ff79c6">true&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> },
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;agentId&amp;#34;&lt;/span>:&lt;span style="color:#f1fa8c">&amp;#34;agent-private-network-1-54865d798c-tdfvw&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;caching&amp;#34;&lt;/span>:&lt;span style="color:#ff79c6">false&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> },
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f1fa8c">&amp;#34;status&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;ACTIVE&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f1fa8c">&amp;#34;lastAssignmentMsg&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;successfully assigned to Agent agent-private-network-1-54865d798c-tdfvw for executing operations&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="update-a-single-account">Update a single account&lt;/h2>
&lt;p>Updating an account is similar to &lt;a href="#create-accounts">creating a new one&lt;/a>. The API detects it by its name and performs the update. If the account is already ACTIVE, the plugin immediately propagates the changes to the corresponding Scale Agent services.&lt;/p>
&lt;p>&lt;strong>Endpoint&lt;/strong>: PUT &lt;Account> &lt;code>/armory/accounts/dynamic&lt;/code>&lt;/p>
&lt;p>&lt;strong>Request body&lt;/strong>:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">&amp;#34;name&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;&amp;lt;account-name&amp;gt;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">&amp;#34;type&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;kubernetes&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">&amp;#34;kubeconfigFile&amp;#34;&lt;/span>:&lt;span style="color:#f1fa8c">&amp;#34;encryptedFile:k8s!n:kubeconfig-t!k:config!ns:spinnaker&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">&amp;#34;kubeconfigAgent&amp;#34;&lt;/span>:&lt;span style="color:#f1fa8c">&amp;#34;encryptedFile:k8s!n:kubeconfig-agent!k:config!ns:spinnaker&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Required fields:&lt;/p>
&lt;ul>
&lt;li>&lt;code>name&lt;/code>: the account name&lt;/li>
&lt;/ul>
&lt;p>Optional fields:&lt;/p>
&lt;ul>
&lt;li>&lt;code>kubeconfigAgent&lt;/code>: you only need to include this if the account is in an &lt;strong>ACTIVE&lt;/strong> state and if the target Scale Agent service needs a &lt;strong>different kubeconfig from the original one.&lt;/strong>&lt;/li>
&lt;li>You can include any &lt;code>kubernetes.accounts[]&lt;/code> attribute from the Scale Agent service &lt;a href="/plugins/scale-agent/reference/config/service-options/#configuration-options">config options list&lt;/a>.&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Example&lt;/strong>:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>curl --request PUT &lt;span style="color:#f1fa8c">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c">&lt;/span> --url http://localhost:7002/armory/accounts/dynamic &lt;span style="color:#f1fa8c">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c">&lt;/span> --header &lt;span style="color:#f1fa8c">&amp;#39;Content-Type: application/json&amp;#39;&lt;/span> &lt;span style="color:#f1fa8c">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c">&lt;/span> --data &lt;span style="color:#f1fa8c">&amp;#39;{
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c">&amp;#34;name&amp;#34;: &amp;#34;demo-acc-02&amp;#34;,
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c">&amp;#34;type&amp;#34;: &amp;#34;kubernetes&amp;#34;,
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c">&amp;#34;kubeconfigContents&amp;#34;:&amp;#34;encryptedFile:k8s!n:kubeconfig-t!k:config!ns:spinnaker&amp;#34;,
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c">&amp;#34;metrics&amp;#34;: false,
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c">&amp;#34;kinds&amp;#34;: [],
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c">&amp;#34;omitKinds&amp;#34;: [],
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c">&amp;#34;onlyNamespacedResources&amp;#34;: false,
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c">&amp;#34;namespaces&amp;#34;: [
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> &amp;#34;dev&amp;#34;,
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> &amp;#34;spinnaker&amp;#34;,
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> &amp;#34;default&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c">]
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c">}&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;strong>Response&lt;/strong>:&lt;/p>
&lt;ul>
&lt;li>202 Accepted: &lt;code>[] empty array&lt;/code>&lt;/li>
&lt;li>400 Bad Request: in case the request is empty or body is an array.&lt;/li>
&lt;li>501 Not Implemented: if the Dynamic Accounts feature isn&amp;rsquo;t enabled&lt;/li>
&lt;/ul>
&lt;h2 id="whats-next">What&amp;rsquo;s next&lt;/h2>
&lt;ol>
&lt;li>&lt;a href="/plugins/scale-agent/tasks/dynamic-accounts/migrate-accounts/"}>Migrate Clouddriver Kubernetes Accounts to the Armory Scale Agent&lt;/a>&lt;/li>
&lt;/ol></description></item><item><title>Plugins: Migrate Clouddriver Kubernetes Accounts to the Armory Scale Agent</title><link>/plugins/scale-agent/tasks/dynamic-accounts/migrate-accounts/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/plugins/scale-agent/tasks/dynamic-accounts/migrate-accounts/</guid><description>
&lt;h2 id="migration-overview">Migration overview&lt;/h2>
&lt;p>The Dynamic Accounts REST API provides endpoints to create, delete, get, migrate, and update Kubernetes accounts. You can&amp;rsquo;t access these endpoints through Gate. You should have &lt;code>kubectl&lt;/code> access to your Spinnaker cluster and &lt;code>port-forward&lt;/code> to be able to call the API.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>kubectl port-forward deployment/spin-clouddriver 7002:7002 -n spinnaker
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>You can then access endpoints via &lt;code>http://localhost:7002&lt;/code>.&lt;/p>
&lt;h2 id="before-you-begin">Before you begin&lt;/h2>
&lt;ul>
&lt;li>Familiarize yourself with &lt;a href="/plugins/scale-agent/concepts/dynamic-accounts/"}>Dynamic Accounts Architecture and Features&lt;/a>.&lt;/li>
&lt;li>&lt;a href="/plugins/scale-agent/tasks/dynamic-accounts/enable/">Enable the Dynamic Accounts feature&lt;/a> in the Scale Agent plugin.&lt;/li>
&lt;li>You know how to fetch account data from Clouddriver.&lt;/li>
&lt;li>The accounts you want to migrate must exist in a Clouddriver credential definition source such as &lt;code>clouddriver-local.yaml&lt;/code> or the &lt;code>clouddriver.accounts&lt;/code> table.&lt;/li>
&lt;/ul>
&lt;h2 id="manual-migration">Manual migration&lt;/h2>
&lt;p>Manually migrating Clouddriver accounts is a two-step process:&lt;/p>
&lt;ol>
&lt;li>
&lt;p>Migrate accounts using &lt;code>POST&amp;lt;Account[]&amp;gt; /armory/accounts&lt;/code>&lt;/p>
&lt;p>This fetches the specified accounts from a Clouddriver credential source and adds them to the Scale Agent (&lt;code>clouddriver.kubesvc_accounts&lt;/code>) with an INACTIVE state.&lt;/p>
&lt;p>Request data array format:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>[
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;name&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;&amp;lt;account-name&amp;gt;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;zoneId&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;&amp;lt;zone-id&amp;gt;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;kubeconfigFile&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;&amp;lt;encrypted-kubeconfig&amp;gt;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>]
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>&lt;code>name&lt;/code>: (Required) the account&amp;rsquo;s name&lt;/li>
&lt;li>&lt;code>zoneId&lt;/code>: (Optional) the &lt;code>zoneId&lt;/code> for the targeted Agent service, which is by default deploymentName_namespace. This can optionally be supplied during the activation step.&lt;/li>
&lt;li>&lt;code>kubeconfigFile&lt;/code>: (Optional) the secret token for the &lt;code>kubeconfig&lt;/code> path or file. This should be in [encrypted secret format](&lt;a href="https://spinnaker.io/docs/reference/halyard/secrets/%5D(https://spinnaker.io/docs/reference/halyard/secrets/);">https://spinnaker.io/docs/reference/halyard/secrets/](https://spinnaker.io/docs/reference/halyard/secrets/);&lt;/a> for example, &lt;code>encryptedFile:k8s!n:kubeconfig!k:config!ns:spinnaker&lt;/code>. &lt;strong>&lt;code>kubeconfigFile&lt;/code> is optional only if the native account&amp;rsquo;s &lt;code>kubeconfig&lt;/code> works for the targeted Agent service; otherwise you need to supply this parameter with a working value&lt;/strong>.&lt;/li>
&lt;/ul>
&lt;p>Example:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span> curl --request POST &lt;span style="color:#f1fa8c">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c">&lt;/span> --url http://clouddriver:7002/armory/accounts &lt;span style="color:#f1fa8c">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c">&lt;/span> --header &lt;span style="color:#f1fa8c">&amp;#39;Content-Type: application/json&amp;#39;&lt;/span> &lt;span style="color:#f1fa8c">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c">&lt;/span> --data &lt;span style="color:#f1fa8c">&amp;#39;[
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> {
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> &amp;#34;name&amp;#34;: &amp;#34;account-01&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> },
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> {
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> &amp;#34;name&amp;#34;: &amp;#34;account-02&amp;#34;,
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> &amp;#34;zoneId&amp;#34;: &amp;#34;agent-1_namespace1&amp;#34;,
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> &amp;#34;kubeconfigFile&amp;#34;: &amp;#34;encryptedFile:k8s!n:kubeconfig!k:config!ns:spinnaker&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> }
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> ]&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;p>Responses:&lt;/p>
&lt;ul>
&lt;li>202 Accepted: &lt;code>[] empty array&lt;/code>&lt;/li>
&lt;li>409 Conflict: &lt;code>[] array containing already migrated accounts&lt;/code> (still processes valid ones)&lt;/li>
&lt;li>400 Bad Request: the account array is empty&lt;/li>
&lt;li>5501 Not Implemented: if the Dynamic Accounts feature isn&amp;rsquo;t enabled&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>Activate the migrated accounts using &lt;code>PATCH &amp;lt;Account[]&amp;gt; /armory/accounts&lt;/code>&lt;/p>
&lt;p>This activates the specified accounts in the Scale Agent (changed state to ACTIVE in &lt;code>clouddriver.kubesvc_accounts&lt;/code>) and sends the account data to the associated Scale Agent service. Each account must meet the following criteria:&lt;/p>
&lt;ul>
&lt;li>Have a valid JSON object in the &lt;code>definition&lt;/code> column of the &lt;code>clouddriver.kubesvc_accounts&lt;/code> table&lt;/li>
&lt;li>Be in an INACTIVE or FAILED state&lt;/li>
&lt;li>Have an existing connection to a Scale Agent service running in a cluster&lt;/li>
&lt;/ul>
&lt;p>Request data array format:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>[
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;name&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;&amp;lt;account-name&amp;gt;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;state&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;&amp;lt;INACTIVE | FAILED&amp;gt;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;zoneId&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;&amp;lt;zone-id&amp;gt;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;kubeconfigFile&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;&amp;lt;encrypted-kubeconfig&amp;gt;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>]
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>
&lt;p>&lt;code>name&lt;/code>: (Required) the account&amp;rsquo;s name&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;code>state&lt;/code>: (Required) the account state; valid values are INACTIVE or FAILED.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;code>zoneId&lt;/code>: (Optional) the &lt;code>zoneId&lt;/code> for the targeted Agent service, which is by default deploymentName_namespace. This is not needed if you supplied this value in the previous step.&lt;/p>
&lt;p>If you do not include a &lt;code>zoneId&lt;/code>, Clouddriver sends the request to every other Clouddriver instance that has a connected Scale Agent service. Each Clouddriver instance subsequently sends the request to all of its connected Agents in an attempt to find one that can process the request. This is resource intensive, so be sure to include a &lt;code>zoneId&lt;/code>.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;code>kubeconfigFile&lt;/code>: (Optional) the secret token for the &lt;code>kubeconfig&lt;/code> path or file. This should be in [encrypted secret format](&lt;a href="https://spinnaker.io/docs/reference/halyard/secrets/%5D(https://spinnaker.io/docs/reference/halyard/secrets/);">https://spinnaker.io/docs/reference/halyard/secrets/](https://spinnaker.io/docs/reference/halyard/secrets/);&lt;/a> for example, &lt;code>encryptedFile:k8s!n:kubeconfig!k:config!ns:spinnaker&lt;/code>.&lt;/p>
&lt;p>&lt;code>kubeconfigFile&lt;/code> is optional only if you supplied this value in the previous step or the native account&amp;rsquo;s &lt;code>kubeconfig&lt;/code> works for the targeted Agent service.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>Example:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>curl --request PATCH &lt;span style="color:#f1fa8c">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c">&lt;/span> --url http://localhost:7002/armory/accounts &lt;span style="color:#f1fa8c">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c">&lt;/span> --header &lt;span style="color:#f1fa8c">&amp;#39;Content-Type: application/json&amp;#39;&lt;/span> &lt;span style="color:#f1fa8c">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c">&lt;/span> --data &lt;span style="color:#f1fa8c">&amp;#39;[
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> {
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> &amp;#34;name&amp;#34;: &amp;#34;account-01&amp;#34;,
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> &amp;#34;state&amp;#34;: &amp;#34;ACTIVE&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> },
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> {
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> &amp;#34;name&amp;#34;: &amp;#34;account-02&amp;#34;,
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> &amp;#34;state&amp;#34;: &amp;#34;ACTIVE&amp;#34;,
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> &amp;#34;zoneId&amp;#34;: &amp;#34;agent-1_namespace1&amp;#34;,
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> &amp;#34;kubeconfigFile&amp;#34;: &amp;#34;encryptedFile:k8s!n:kubeconfig!k:config!ns:spinnaker&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> }
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c">]&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;p>Response:&lt;/p>
&lt;ul>
&lt;li>202 Accepted&lt;/li>
&lt;li>501 Not Implemented: if the Dynamic Accounts feature isn&amp;rsquo;t enabled&lt;/li>
&lt;/ul>
&lt;p>The account state changes to FAILED if the Scale Agent plugin is not able to connect to the target Scale Agent service. The plugin does not inform you of the operation results. Check for an ACTIVE account state in the &lt;code>clouddriver.kubesvc_accounts&lt;/code> table by querying the database directly or by calling &lt;code>/agents/kubernetes/accounts/{accountName}&lt;/code>.&lt;/p>
&lt;/li>
&lt;/ol>
&lt;h2 id="automatic-migration">Automatic migration&lt;/h2>
&lt;blockquote>
&lt;p>This feature requires you to &lt;a href="https://spinnaker.io/docs/setup/other_config/accounts/#enabling-account-management">enable the Clouddriver Account Management feature&lt;/a> in Spinnaker.&lt;/p>
&lt;/blockquote>
&lt;h3 id="scan-for-new-accounts">Scan for new accounts&lt;/h3>
&lt;p>The Scale Agent can automatically migrate accounts and set them to &lt;code>ACTIVE&lt;/code> when you enable the automatic scanning mechanism in the plugin configuration.&lt;/p>
&lt;p>Add the following to your plugin 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">kubesvc&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">dynamicAccounts&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">scanBatchSize&lt;/span>: &amp;lt;int&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">scanFrequencySeconds&lt;/span>: &amp;lt;int&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">namePatterns&lt;/span>: [&lt;span style="color:#f1fa8c">&amp;#39;^account1.*&amp;#39;&lt;/span>,&lt;span style="color:#f1fa8c">&amp;#39;^.*account2.*&amp;#39;&lt;/span>]
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>This feature is enabled when &lt;code>namePatterns&lt;/code> has at least one value. The Scale Agent uses the account name pattern to identify accounts for migration. Autoscanning minimizes the manual effort and eliminates the &lt;code>add&lt;/code> and &lt;code>migrate&lt;/code> steps when the &lt;code>namePatterns&lt;/code> flag is set to match a specified account naming pattern.&lt;/p>
&lt;h3 id="intercept-clouddriver-account-creation-request">Intercept Clouddriver account creation request&lt;/h3>
&lt;p>When you enable this option, the Scale Agent plugin intercepts any new account creation request that is sent to Clouddriver&amp;rsquo;s &lt;code>credentials&lt;/code> endpoint (&lt;code>POST &amp;lt;GATE_URL&amp;gt;/credentials&lt;/code>). The Scale Agent plugin automatically migrates the new account and sets the account state to ACTIVE.&lt;/p>
&lt;p>Add the following to your plugin 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">kubesvc&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">dynamicAccounts&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">interceptor&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;h2 id="whats-next">What&amp;rsquo;s next&lt;/h2>
&lt;ol>
&lt;li>&lt;a href="/plugins/scale-agent/tasks/dynamic-accounts/manage-accounts/"}>Manage Kubernetes Accounts in the Armory Scale Agent&lt;/a>}&lt;/li>
&lt;/ol></description></item></channel></rss>