<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Spinnaker – Managed Delivery</title>
    <link>https://deploy-preview-629--spinnaker-io.netlify.app/docs/guides/user/managed-delivery/</link>
    <description>Recent content in Managed Delivery on Spinnaker</description>
    <generator>Hugo -- gohugo.io</generator>
    
	  <atom:link href="https://deploy-preview-629--spinnaker-io.netlify.app/docs/guides/user/managed-delivery/index.xml" rel="self" type="application/rss+xml" />
    
    
      
        
      
    
    
    <item>
      <title>Docs: Managed Delivery Overview</title>
      <link>https://deploy-preview-629--spinnaker-io.netlify.app/docs/guides/user/managed-delivery/managed-delivery-overview/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://deploy-preview-629--spinnaker-io.netlify.app/docs/guides/user/managed-delivery/managed-delivery-overview/</guid>
      <description>
        
        
        &lt;h2 id=&#34;what-is-managed-delivery&#34;&gt;What is Managed Delivery?&lt;/h2&gt;
&lt;p&gt;Managed Delivery is an initiative with two key goals.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Provide native means for Spinnaker users to declaratively manage software delivery.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;With a &lt;em&gt;declarative&lt;/em&gt; model, users describe the desired end-state of a deployed application. Spinnaker continually
calculates how this desired state maps to cloud resources. When desired state diverges from actual cloud state,
Spinnaker figures out how to safely bring the deployed state in-line with the desired.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;This is in stark contrast to the &lt;em&gt;imperative&lt;/em&gt; pipeline model, which requires users to define every step of
their delivery flow. Pipelines remain a powerful first class feature of Spinnaker that will offer greater
flexibility than Managed Delivery for the foreseeable future. However, we feel the declarative approach is
preferable for most delivery flows. Good pipeline design requires a depth of Spinnaker and cloud knowledge,
while system failures impacting pipeline execution may leave environments in a transitional state without
an automatic path back to normalcy. A declarative model solves both issues.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Provide Spinnaker Operators with powerful new means to raise the level of operational abstraction offered to their users.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;By informing how declarative models are resolved, operators can centrally maintain delivery best practices
and automate change propagation without knowledge of how product teams have customized delivery pipelines.&lt;/li&gt;
&lt;li&gt;Examples range from offloading decision making about the regions a service should deploy into, to providing
means to rapidly redeploy thousands of services running in hundreds of AWS accounts in order to address an OS
level security vulnerability.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;contributing&#34;&gt;Contributing&lt;/h2&gt;
&lt;p&gt;If you are interested in contributing, the Managed Delivery initiative is under the auspices of the

&lt;a href=&#34;https://github.com/spinnaker/governance/blob/master/sig-spinnaker-as-code/README.md&#34; target=&#34;_blank&#34;&gt;Spinnaker-as-Code SIG&lt;/a&gt;
&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>Docs: Getting Started</title>
      <link>https://deploy-preview-629--spinnaker-io.netlify.app/docs/guides/user/managed-delivery/getting-started/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://deploy-preview-629--spinnaker-io.netlify.app/docs/guides/user/managed-delivery/getting-started/</guid>
      <description>
        
        
        &lt;p&gt;This means that we support only EC2 and Titus, and that we have limited feature and UI support.
This guide walks through onboarding to Managed Delivery assuming that you are using EC2 or Titus.&lt;/p&gt;
&lt;h2 id=&#34;intro&#34;&gt;Intro&lt;/h2&gt;
&lt;p&gt;To get started with Managed Delivery you&amp;rsquo;ll need an idea of what infrastructure you want to manage.
You can pick a new piece of infrastructure that you want to create (a new load balancer, for example) or migrate an existing piece of infrastructure (an existing cluster, for example).&lt;/p&gt;
&lt;p&gt;We recommend creating a new security group to test things out.
This guide will walk you through creating a new managed security group.&lt;/p&gt;
&lt;p&gt;Here are the steps you&amp;rsquo;ll complete:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;First, you&amp;rsquo;ll create a YAML file to store your delivery config in.&lt;/li&gt;
&lt;li&gt;Then, you&amp;rsquo;ll set up a Spinnaker pipeline to submit that YAML file to Spinnaker.&lt;/li&gt;
&lt;li&gt;Finally, you&amp;rsquo;ll watch Spinnaker take actions to make your resource exist.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;background&#34;&gt;Background&lt;/h2&gt;
&lt;p&gt;Right now, most users manage infrastructure resources in the Spinnaker UI.
These resources are security groups, load balancers, and clusters.
To create these resources you manually define them by clicking the &lt;code&gt;create&lt;/code&gt; button in the Spinnaker UI.&lt;/p&gt;
&lt;p&gt;Managed Delivery changes this interaction.
To define resources that Spinnaker manages, you&amp;rsquo;ll create a YAML-based &amp;ldquo;delivery config&amp;rdquo; file specifying the desired state of your infrastructure resources.
&amp;ldquo;Desired state&amp;rdquo; is a new concept in Spinnaker that means you&amp;rsquo;re specifying &lt;strong&gt;what&lt;/strong&gt; you want your infrastructure to always look like, regardless of &lt;strong&gt;how&lt;/strong&gt; Spinnaker decides to make it look that way.
In practice, this desired state will often look like the configuration options you&amp;rsquo;re used to defining through the Spinnaker UI.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;To learn more about delivery configs, check out the Delivery Configs 
&lt;a href=&#34;https://deploy-preview-629--spinnaker-io.netlify.app/docs/guides/user/managed-delivery/delivery-configs&#34;&gt;docs&lt;/a&gt;
&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Once you create a YAML delivery config, you&amp;rsquo;ll need to tell Spinnaker to manage it.
This is done by submitting the file to Spinnaker&amp;rsquo;s API.
You can submit a delivery config from your local machine, but that&amp;rsquo;s not very traceable or repeatable.&lt;/p&gt;
&lt;p&gt;We recommend checking delivery configs into your git repository in a &lt;code&gt;.spinnaker/&lt;/code&gt; directory at the base level of your repository.
In order to get Spinnaker to pick up your configuration (and monitor for changes) you should create a git-triggered pipeline that submits those files to Spinnaker.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;An important note&lt;/strong&gt;: Spinnaker is the source of truth for desired state of resources.
You must submit your YAML files to Spinnaker every time they change.&lt;/p&gt;
&lt;p&gt;All the instructions for this flow are captured in this doc.&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s get started!&lt;/p&gt;
&lt;h2 id=&#34;prerequisites&#34;&gt;Prerequisites&lt;/h2&gt;
&lt;p&gt;Spinnaker takes a lot of actions on your behalf, and we do that by using the permissions of a service account.
Make sure you have one set up before you continue.&lt;/p&gt;
&lt;h2 id=&#34;create-your-first-resource&#34;&gt;Create Your First Resource&lt;/h2&gt;
&lt;p&gt;We&amp;rsquo;re going to create a test security group.
The new security group will be called &lt;code&gt;YOUR_APP-md&lt;/code&gt;.
For example, if the app that you&amp;rsquo;re using is &lt;code&gt;keeldemo&lt;/code&gt; then the security group will be &lt;code&gt;keeldemo-md&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;We&amp;rsquo;re going to base this security group on your existing application security group.
If you want to, locate your application security group in the Spinnaker UI and inspect the rules you have on it.
This security group is usually auto-created for you and is identical to the name of your app.&lt;/p&gt;
&lt;p&gt;To create a resource definition based on this security group, we&amp;rsquo;re going to use the Spinnaker API to export your existing application security group to a YAML definition
(Note: this will have UI support in the future).&lt;/p&gt;
&lt;p&gt;The base URL for exporting a security group is:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;/managed/resources/export/aws/AWS_ACCOUNT_NAME/securitygroup/APP_NAME_OR_SG_NAME?serviceAccount=SERVICE_ACCOUNT
&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;Replace &lt;code&gt;AWS_ACCOUNT_NAME&lt;/code&gt; with the account your app is in. You can check the 
&lt;a href=&#34;https://deploy-preview-629--spinnaker-io.netlify.app/reference/api/docs.html#api-Credentialscontroller-getAccountsUsingGET&#34;&gt;credentials&lt;/a&gt;

endpoint in Spinnaker API for a list of valid account names.&lt;/li&gt;
&lt;li&gt;Replace &lt;code&gt;APP_NAME_OR_SG_NAME&lt;/code&gt; with either the name of your application or the name of the
security group you want to export. You probably have a security group with the same name as
your app, which is the one you should use here.&lt;/li&gt;
&lt;li&gt;Replace &lt;code&gt;SERVICE_ACCOUNT&lt;/code&gt; with the same service account you created or found in the

&lt;a href=&#34;#prerequisites&#34;&gt;prerequisites&lt;/a&gt;
 step.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you&amp;rsquo;ve gotten all the information right a resource configuration will show up. See the 
&lt;a href=&#34;https://deploy-preview-629--spinnaker-io.netlify.app/guides/user/managed-delivery/api#export-an-existing-resource&#34;&gt;API&lt;/a&gt;

docs for more information on usage.&lt;/p&gt;
&lt;h2 id=&#34;save-your-resource-in-your-git-repository&#34;&gt;Save Your Resource In Your Git Repository&lt;/h2&gt;
&lt;p&gt;The next step in managing a resource is to check it into a git repository.
Create a &lt;code&gt;.spinnaker/&lt;/code&gt; directory in the git repository of your application.
This should be at the top level of your repo.
In this directory, create a file called &lt;code&gt;spinnaker.yml&lt;/code&gt; (your delivery config) and paste in this skeleton delivery config:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;a-manifest-name&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# change me&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;application&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;yourapp&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# change me&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;artifacts&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;[]&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;environments&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;- &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;testing&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# this is a fine default but you can change it&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;constraints&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;[]&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;notifications&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;[]&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;resources&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;[]&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Be sure to change the manifest &lt;em&gt;name&lt;/em&gt; (a human readable name) and the &lt;em&gt;application&lt;/em&gt; to your app.
You can also change the environment name.&lt;/p&gt;
&lt;p&gt;Next, we will add the security group to the list of resources.&lt;/p&gt;
&lt;p&gt;Paste in the YAML output you got from the export endpoint in the previous step into the list of resources.
It&amp;rsquo;ll look something like this:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;a-manifest-name&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;application&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;yourapp&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;artifacts&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;[]&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;environments&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;- &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;testing&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;constraints&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;[]&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;notifications&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;[]&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;resources&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# you can add more resources here, this is a list&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;- &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;apiVersion&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;ec2.spinnaker.netflix.com/v1&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;kind&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;security-group&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# ... the other info here from the security group you just exported&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Next, modify the resource you just added to have a new name!
Edit the &lt;code&gt;moniker&lt;/code&gt; section of the resource you just pasted:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#000&#34;&gt;...&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;moniker&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;app&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;YOUR_APP_NAME&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;stack&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;md&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;...&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This will name your security group &lt;code&gt;YOUR_APP_NAME-md&lt;/code&gt;.
For example, my sample security group for my app &lt;code&gt;keeldemo&lt;/code&gt; will have a moniker section like:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#000&#34;&gt;...&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;moniker&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;app&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;keeldemo&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;stack&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;md&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;...&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;which will name the security group &lt;code&gt;keeldemo-md&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;:stop_sign: &lt;strong&gt;STOP! Don&amp;rsquo;t commit your delivery config yet! Just save it locally.&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&#34;repository-permissions&#34;&gt;Repository Permissions&lt;/h2&gt;
&lt;p&gt;Make sure your git repository is accessible by Spinnaker.&lt;/p&gt;
&lt;h2 id=&#34;setting-up-resource-submission&#34;&gt;Setting Up Resource Submission&lt;/h2&gt;
&lt;p&gt;Since Spinnaker is the source of truth (and not Git) you need to submit your managed resource configuration to Spinnaker every time there are changes.
There&amp;rsquo;s a Spinnaker stage for this!
See the docs on 
&lt;a href=&#34;https://deploy-preview-629--spinnaker-io.netlify.app/docs/guides/user/managed-delivery/git-based-workflows/&#34;&gt;Git-based-workflows&lt;/a&gt;
 for detailed instructions.&lt;/p&gt;
&lt;h2 id=&#34;testing-out-resource-submission&#34;&gt;Testing Out Resource Submission&lt;/h2&gt;
&lt;p&gt;Now that you have a pipeline in your application that&amp;rsquo;s triggered off of a git commit to your repository, you can commit your first resource configuration file.
Commit the file you created earlier (&lt;code&gt;.spinnaker/spinnaker.yml&lt;/code&gt;) and push it to the master branch of your repository.&lt;/p&gt;
&lt;h2 id=&#34;iterating-on-managed-configurations&#34;&gt;Iterating on Managed Configurations&lt;/h2&gt;
&lt;p&gt;It&amp;rsquo;s hard to get YAML right every time.
We have an endpoint where you can check if your YAML is right and see if there is a diff between your desired state (in your YAML) and the current state of the resource.&lt;/p&gt;
&lt;p&gt;In the swagger api view of your Spinnaker instance, scroll to the &lt;code&gt;managed-controller&lt;/code&gt; and find the &lt;code&gt;/managed/delivery-configs/diff&lt;/code&gt; endpoint.&lt;/p&gt;
&lt;p&gt;Paste in your delivery config YAML file, choose &lt;code&gt;application/x-yaml&lt;/code&gt; for the content type, and hit &lt;code&gt;execute&lt;/code&gt;.
If the resource YAML has an invalid format, you&amp;rsquo;ll get an error back with the reason why.
If the resource YAML is correct, you&amp;rsquo;ll see some information about whether or not there is a diff, and what that diff is.&lt;/p&gt;
&lt;p&gt;For more help with this endpoint, see the the 
&lt;a href=&#34;https://deploy-preview-629--spinnaker-io.netlify.app/docs/guides/user/managed-delivery/api/#validating-yaml&#34;&gt;API&lt;/a&gt;
 doc.&lt;/p&gt;
&lt;h2 id=&#34;is-anything-happening&#34;&gt;Is Anything Happening?&lt;/h2&gt;
&lt;p&gt;You can see the actions Spinnaker is taking on your behalf in the &lt;code&gt;Tasks&lt;/code&gt; view for your app.&lt;/p&gt;
&lt;p&gt;If you navigate to &lt;code&gt;Security Groups&lt;/code&gt; you should be able to see a small flag on the resource that will show you it&amp;rsquo;s being manged.
If you click on a managed resource you will see the available managed actions.&lt;/p&gt;
&lt;p&gt;Under the actions you can click to see the resource definition that Spinnaker has for that resource.
You can also see the history of that resource.
The history view shows every diff Spinnaker has seen, and every action taken to resolve that diff.&lt;/p&gt;
&lt;h2 id=&#34;find-your-resource-id&#34;&gt;Find Your Resource ID&lt;/h2&gt;
&lt;p&gt;For some API calls you need the resource ID.
You can find this by clicking on the resource in the UI, and then clicking on &lt;code&gt;Resource Actions&lt;/code&gt; -&amp;gt; &lt;code&gt;Raw Source&lt;/code&gt; (right side on the panel that pops out).
The ID will be in the the &lt;code&gt;metadata&lt;/code&gt; section and will be human readable, like &lt;code&gt;ec2:cluster:test:keeldemo-main&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&#34;pausing-management&#34;&gt;Pausing Management&lt;/h2&gt;
&lt;p&gt;Sometimes you need to take a break.
Maybe there&amp;rsquo;s a problem you&amp;rsquo;re trying to diagnose and you need Spinnaker to stop taking actions on a resource.
Maybe there&amp;rsquo;s a bug and it&amp;rsquo;s preventing you from using Spinnaker to manage resources.
That&amp;rsquo;s ok! It&amp;rsquo;s easy to pause management.&lt;/p&gt;
&lt;p&gt;Navigate to your application in Spinnaker and click on the &lt;code&gt;CONFIG&lt;/code&gt; tab in the top right.
If you have 1 or more managed resources, a section will appear called &lt;code&gt;Managed Resources&lt;/code&gt;.
That section contains a pause/resume button which you can use to stop and start management of your Resources.&lt;/p&gt;
&lt;h2 id=&#34;cleaning-up--opting-out&#34;&gt;Cleaning Up / Opting Out&lt;/h2&gt;
&lt;p&gt;If you don&amp;rsquo;t want Spinnaker to manage your resource declaratively anymore you can delete the declarative config from Spinnaker:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;DELETE /managed/delivery-configs/&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;{&lt;/span&gt;deliveryConfigName&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This endpoint is available in the Swagger UI as well.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;This will not delete the underlying infrastructure that was previously in your delivery config. It will only delete the managed definition and stop Spinnaker from taking action.&lt;/strong&gt;
Use the Spinnaker UI to delete any resources you created.&lt;/p&gt;
&lt;h2 id=&#34;next-steps&#34;&gt;Next Steps&lt;/h2&gt;
&lt;p&gt;Hooray!
You created your first managed resource.
If you&amp;rsquo;d like, you can follow these same steps to create clusters, load balancers, and security groups for your application.
You can add resources to the environment you&amp;rsquo;ve created by added them to the list of resources.&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>Docs: API</title>
      <link>https://deploy-preview-629--spinnaker-io.netlify.app/docs/guides/user/managed-delivery/api/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://deploy-preview-629--spinnaker-io.netlify.app/docs/guides/user/managed-delivery/api/</guid>
      <description>
        
        
        &lt;p&gt;The endpoints for managed delivery are located in the &lt;code&gt;managed-controller&lt;/code&gt;.
The endpoints are easily accessible from the swagger api page of your Spinnaker instance.&lt;/p&gt;
&lt;p&gt;This doc provides samples for how to use the endpoints.&lt;/p&gt;
&lt;h3 id=&#34;export-an-existing-resource&#34;&gt;Export an Existing Resource&lt;/h3&gt;
&lt;p&gt;The export endpoint (under the &amp;ldquo;managed-controller&amp;rdquo;) allows you to take an existing resource and export it to a yaml config.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;GET /managed/resources/export/{cloudProvider}/{account}/{type}/{name}?serviceAccount=yourServiceAccount@company.com&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;These definitions can be stored in your git repo.&lt;/p&gt;
&lt;h3 id=&#34;validating-yaml&#34;&gt;Validating yaml&lt;/h3&gt;
&lt;p&gt;The ad-hoc diff endpoint allows you to see if a resource config is valid, and to see the difference between config (desired state) and reality.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;POST /managed/resources/diff -d &amp;quot;{YOUR_RESOURCE_CONFIG}&amp;quot;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;If the resource configuration is valid you&amp;rsquo;ll see information returned about the resource, like whether or not there is a diff, what the diff is, and what the resource name will be.
If the resource configuration is invalid you&amp;rsquo;ll see an error and some text indicating what is wrong about the schema.&lt;/p&gt;
&lt;h3 id=&#34;viewing-a-resource&#34;&gt;Viewing a Resource&lt;/h3&gt;
&lt;p&gt;The UI will show a flag on each resource that is declaratively managed.
If you click on the resource, you can view its definition (raw source)&lt;/p&gt;
&lt;p&gt;If you&amp;rsquo;d rather hit the api directly, you can refer to the UI for the resource name, or the logs for the publish stage.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;GET /managed/resources/&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;{&lt;/span&gt;name&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;viewing-a-resource-history&#34;&gt;Viewing a Resource History&lt;/h3&gt;
&lt;p&gt;Spinnaker will take actions to make sure that your resource matches what you&amp;rsquo;ve defined.
To view those actions in a list you can hit the &lt;code&gt;history&lt;/code&gt; endpoint:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;GET /history/&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;{&lt;/span&gt;name&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This endpoint shows you why an action was taken on a resource, and what that action was.
Soon there will be a nicer UI for this.&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>Docs: Managed Delivery Artifacts</title>
      <link>https://deploy-preview-629--spinnaker-io.netlify.app/docs/guides/user/managed-delivery/artifacts/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://deploy-preview-629--spinnaker-io.netlify.app/docs/guides/user/managed-delivery/artifacts/</guid>
      <description>
        
        
        &lt;p&gt;Managed Delivery supports two types of delivery artifacts: &lt;strong&gt;debians&lt;/strong&gt; and &lt;strong&gt;Docker images&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Delivery artifacts are meant to provide Spinnaker information about:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Where to locate the &lt;em&gt;available versions&lt;/em&gt; of an artifact you care about&lt;/li&gt;
&lt;li&gt;How to choose the &lt;em&gt;latest version&lt;/em&gt; from a list of versions&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Spinnaker needs this information to make decisions about when and how to roll out new versions as they become available. Artifacts are defined with name, type, and version strategy information.&lt;/p&gt;
&lt;h2 id=&#34;debians&#34;&gt;Debians&lt;/h2&gt;
&lt;p&gt;** Warning: this is Netflix specific. Interested in contributing? Reach out to us in the #sig-spinnaker-as-code slack channel. **&lt;/p&gt;
&lt;p&gt;All debians at Neflix are named and compared in the same way.
For example, a debian might look like this:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;# package name is keel
keel_0.353.0-h290.ae13adb_all.deb
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;We compare the semantic version located after the &lt;code&gt;packagename_&lt;/code&gt; (&lt;code&gt;keel_&lt;/code&gt; in this example) and before the &lt;code&gt;-h&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Debians have status information on them. A debian can have any of these statuses:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;snapshot&lt;/li&gt;
&lt;li&gt;candidate&lt;/li&gt;
&lt;li&gt;release&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;which are parsed from the semantic version of the debian.&lt;/p&gt;
&lt;p&gt;To define a debian artifact for use with your delivery config, you&amp;rsquo;ll do something like this:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;artifacts&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;- &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;keeldemo&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;type&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;deb&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;statuses&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;[&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;RELEASE&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;]&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# This is optional&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;reference&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;my-debian-artifact&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# optional human-readable reference to be used elsewhere in the config, defaults to artifact name&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;If you provide status information, you limit the possible artifacts that can be deployed to your environment.
This is useful if you have a test environment that only snapshots should be deployed to, or a prod environment that only release artifacts should be deployed to.&lt;/p&gt;
&lt;p&gt;Status information is optional. If you leave it out, versions with &lt;em&gt;any&lt;/em&gt; status will be considered eligible for deployment into your environment.&lt;/p&gt;
&lt;h2 id=&#34;docker-images&#34;&gt;Docker Images&lt;/h2&gt;
&lt;p&gt;Docker versioning is denoted by the tag value.
At Netflix, there are two main ways versions are structured:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;# branch-jenkinsJob.commitSha
master-h5.5a52206

# semver-jenkinsJob.commitSha
v1.12.1-h1159.b839a00
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;basic-configuration&#34;&gt;Basic Configuration&lt;/h3&gt;
&lt;p&gt;In order to support the different ways of doing versioning, docker artifacts have some more config options.
The basic structure is like this:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;artifacts&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;- &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;emburns/spin-titus-demo&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;type&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;docker&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;reference&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;my-docker-artifact&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# optional human-readable reference to be used elsewhere in the config, defaults to artifact name&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;tagVersionStrategy&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;branch-job-commit-by-job&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Note that just like with pipelines, we don&amp;rsquo;t support using a constantly updated &lt;code&gt;latest&lt;/code&gt; tag.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The key difference here is the &lt;code&gt;tagVersionStrategy&lt;/code&gt; field, which indicates how we should sort a list of tags to choose the most recent software version.&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;tagVersionStrategy&lt;/code&gt; Options:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;increasing-tag&lt;/code&gt;: your tags are all integers, and we should choose the highest integer as the latest&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;semver-tag&lt;/code&gt;: your tags are a single semantic version (with or without a &lt;code&gt;v&lt;/code&gt; prefix), and we should choose the largest semantic version&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;branch-job-commit-by-job&lt;/code&gt;: your tags are of the format &amp;ldquo;branch-jenkinsJob.commitSha&amp;rdquo; (like &lt;code&gt;master-h5.5a52206&lt;/code&gt;), and we should choose the latest based on the highest jenkins job number (&lt;code&gt;h5&lt;/code&gt; in this example)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;semver-job-commit-by-job&lt;/code&gt;: your tags are of the format &amp;ldquo;semver-jenkinsJob.commitSha&amp;rdquo; (like &lt;code&gt;v1.12.1-h1159.b839a00&lt;/code&gt;), and we should choose the latest based on the highest jenkins job number (&lt;code&gt;h1159&lt;/code&gt; in this example)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;semver-job-commit-by-semver&lt;/code&gt;: your tags are of the format &amp;ldquo;semver-jenkinsJob.commitSha&amp;rdquo; (like &lt;code&gt;v1.12.1-h1159.b839a00&lt;/code&gt;), and we should choose the latest based on the largest semver (&lt;code&gt;v1.12.1&lt;/code&gt; in this example)&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;advanced-configuration&#34;&gt;Advanced Configuration&lt;/h3&gt;
&lt;p&gt;If none of these work for you, you can provide your own regex to capture something to compare (using a 
&lt;a href=&#34;https://www.regular-expressions.info/refcapture.html&#34; target=&#34;_blank&#34;&gt;capture group&lt;/a&gt;
).
You must create a regex that parses valid tags and captures a string from them which can be compared &lt;em&gt;either&lt;/em&gt; as an increasing number or a semantic version.
The capture group must only capture one thing (you can&amp;rsquo;t have multiple capture groups).&lt;/p&gt;
&lt;p&gt;For example, let&amp;rsquo;s say your tags look like &lt;code&gt;master-h5.5a52206&lt;/code&gt; and we didn&amp;rsquo;t have a built in strategy for this style.
You&amp;rsquo;d define an artifact like this:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;artifacts&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;- &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;emburns/spin-titus-demo&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;type&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;docker&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;reference&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;my-docker-artifact&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# optional human-readable reference to be used elsewhere in the config, defaults to artifact name&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;tagVersionStrategy&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;increasing-tag&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;captureGroupRegex&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;^master-h(\d+).*$&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The regex capture group (the parens in the regex expression) indicates that out of the string tag we should grab any numbers after the &lt;code&gt;h&lt;/code&gt; and before the &lt;code&gt;.&lt;/code&gt;.
The version strategy indicates that we will take the result of the capture group and compare it as an increasing number.&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>Docs: Delivery Configs</title>
      <link>https://deploy-preview-629--spinnaker-io.netlify.app/docs/guides/user/managed-delivery/delivery-configs/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://deploy-preview-629--spinnaker-io.netlify.app/docs/guides/user/managed-delivery/delivery-configs/</guid>
      <description>
        
        
        &lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Prerequisite:&lt;/strong&gt; read and complete the 
&lt;a href=&#34;https://deploy-preview-629--spinnaker-io.netlify.app/docs/guides/user/managed-delivery/getting-started/&#34;&gt;Getting Started&lt;/a&gt;
 document!&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;what-is-a-delivery-config&#34;&gt;What is a Delivery Config?&lt;/h2&gt;
&lt;p&gt;A &lt;strong&gt;delivery config&lt;/strong&gt; allows you to group resources together in a single file (e.g. &lt;code&gt;spinnaker.yml&lt;/code&gt;) and specify how these resources work together to promote an &lt;strong&gt;artifact&lt;/strong&gt; between &lt;strong&gt;environments&lt;/strong&gt;.&lt;/p&gt;
&lt;h3 id=&#34;artifacts&#34;&gt;Artifacts&lt;/h3&gt;
&lt;p&gt;An artifact represents the package or docker image that you want to promote in your delivery flow.
For example, if you develop the package &lt;code&gt;keeldemo&lt;/code&gt; (which is built into a debian) and that is the only package that runs in your application, you&amp;rsquo;d have the following artifact section:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;artifacts&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;- &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;keeldemo&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;type&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;deb&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;reference&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;my-artifact  &lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# optional human-readable reference to be used elsewhere in the config, defaults to artifact name&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;vmOptions&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;               &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# only required for Debian artifacts, this information is used to determine how to bake a virtual machine image&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;baseOs&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;bionic-classic&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# the base operating system for the virtual machine image&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;regions&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;               &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# the regions to bake the image in (this should at least correspond to the regions you will deploy to)&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;- &lt;span style=&#34;color:#000&#34;&gt;us-west-2&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;- &lt;span style=&#34;color:#000&#34;&gt;us-east-1&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;baseLabel&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;RELEASE    &lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# the operating system label, optional and defaults to &amp;#34;RELEASE&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;storeType&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;EBS        &lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# the storage type for the virtual machine image, optional and defaults to &amp;#34;EBS&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;You can have multiple artifacts in your delivery config.
We will watch for new versions of every artifact you define.
In order to deploy a cluster that is running an artifact you&amp;rsquo;ll need to use it within a resource (in an &lt;strong&gt;Environment&lt;/strong&gt;).&lt;/p&gt;
&lt;p&gt;&lt;em&gt;For detailed artifact information, please refer to the 
&lt;a href=&#34;https://deploy-preview-629--spinnaker-io.netlify.app/docs/guides/user/managed-delivery/artifacts/&#34;&gt;Artifacts&lt;/a&gt;
 page.&lt;/em&gt;&lt;/p&gt;
&lt;h3 id=&#34;environments&#34;&gt;Environments&lt;/h3&gt;
&lt;p&gt;An environment represents all the infrastructure and instructions that are needed to run your package.
For example, we usually see environments like &lt;code&gt;dev&lt;/code&gt;, &lt;code&gt;testing&lt;/code&gt;, &lt;code&gt;staging&lt;/code&gt;, &lt;code&gt;integration&lt;/code&gt;, and &lt;code&gt;production&lt;/code&gt;.
Each of these potentially have different resources, but are likely pretty homogeneous.&lt;/p&gt;
&lt;p&gt;A simple and supported workflow looks like this:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Every build of your package should be deployed into your &lt;code&gt;testing&lt;/code&gt; environment.
This environment might have a lower capacity, and a load balancer that only allows your team to access the running application.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Once your build has been deployed to &lt;code&gt;testing&lt;/code&gt; and has come up as healthy, it should be promoted to your next environment (called &lt;code&gt;staging&lt;/code&gt;).
Staging has a different capacity than &lt;code&gt;testing&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;(Coming soon&amp;hellip;)  Each build that has been healthy in staging is a candidate for &lt;code&gt;production&lt;/code&gt;.
Before deploying to &lt;code&gt;production&lt;/code&gt; you must manually approve each version.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 id=&#34;defining-an-environment&#34;&gt;Defining an Environment&lt;/h4&gt;
&lt;p&gt;An environment is made up of a list of declarative infrastructure resources (like the resource you created in the 
&lt;a href=&#34;https://deploy-preview-629--spinnaker-io.netlify.app/docs/guides/user/managed-delivery/getting-started/&#34;&gt;getting started guide&lt;/a&gt;
).
An environment is configured as follows:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;environments&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;- &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;testing&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;resources&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;- &lt;span style=&#34;color:#000&#34;&gt;&amp;lt;full resource definition&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;- &lt;span style=&#34;color:#000&#34;&gt;&amp;lt;another resource definition&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;That&amp;rsquo;s all the config you need for a simple environment.&lt;/p&gt;
&lt;h4 id=&#34;environment-notifications&#34;&gt;Environment Notifications&lt;/h4&gt;
&lt;p&gt;You can add environment level notifications.
They apply to all resources in the environment.
The config looks like:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;environments&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;- &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;testing&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;resources&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# omitted for brevity&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;notifications&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;- &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;type&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;slack&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;address&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;#managed-delivery&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;frequency&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;verbose&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;There are several &lt;code&gt;frequency&lt;/code&gt; options:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;verbose&lt;/code&gt;: notification on task starting, completing, failing&lt;/li&gt;
&lt;li&gt;&lt;code&gt;normal&lt;/code&gt;: notification on task completing or failing&lt;/li&gt;
&lt;li&gt;&lt;code&gt;quiet&lt;/code&gt;: notification only for failure&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;There are two &lt;code&gt;type&lt;/code&gt; options:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;email&lt;/code&gt;: the address is the email address to send to&lt;/li&gt;
&lt;li&gt;&lt;code&gt;slack&lt;/code&gt;: the address is the slack channel to send to (the spinnakerbot must be in the channel for you to receive notifications)&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;environment-constraints&#34;&gt;Environment Constraints&lt;/h4&gt;
&lt;p&gt;Constraints control how an artifact progresses through environments.&lt;/p&gt;
&lt;p&gt;The config looks like:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;environments&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;- &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;staging&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;resources&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# omitted for brevity&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;notifications&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# omitted for brevity&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;constraints&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;- &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;type&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;depends-on&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;environment&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;testing&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This constraint definition says that an artifact must have been deployed successfully into the &lt;code&gt;testing&lt;/code&gt; environment before it can be deployed into the &lt;code&gt;staging&lt;/code&gt; environment.&lt;/p&gt;
&lt;p&gt;A growing set of constraints are available, see 
&lt;a href=&#34;https://deploy-preview-629--spinnaker-io.netlify.app/docs/guides/user/managed-delivery/environment-constraints&#34;&gt;Environment Constraints&lt;/a&gt;

for more information.&lt;/p&gt;
&lt;h2 id=&#34;creating-a-delivery-config&#34;&gt;Creating a delivery config&lt;/h2&gt;
&lt;p&gt;Let&amp;rsquo;s pull it all together! Delivery configs must be stored in a file called &lt;code&gt;spinnaker.yml&lt;/code&gt;.
The rough structure is:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;sample-delivery-config&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;application&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;keeldemo&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;artifacts&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;- &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;keeldemo&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;type&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;deb&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;reference&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;my-artifact&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;vmOptions&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# details omitted for brevity&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;environments&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;- &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;testing&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;notifications&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# omitted for brevity&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;constraints&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;[]&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;resources&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# details omitted for brevity&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;- &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;kind&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;ec2/cluster@v1&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# details&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;- &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;kind&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;ec2/classic-load-balancer@v1&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# details&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;- &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;staging&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;notifications&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# omitted for brevity&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;constraints&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;- &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;type&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;depends-on&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;environment&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;testing&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;resources&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# details omitted for brevity&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;- &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;kind&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;ec2/cluster@v1&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# details&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;- &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;kind&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;ec2/classic-load-balancer@v1&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# details&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This shortened delivery config shows how to promote a debian artifact through two environments.&lt;/p&gt;
&lt;p&gt;Note that the first environment has no constraints.&lt;/p&gt;
&lt;h2 id=&#34;example&#34;&gt;Example&lt;/h2&gt;
&lt;p&gt;TODO eb: add an example&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>Docs: Environment Constraints</title>
      <link>https://deploy-preview-629--spinnaker-io.netlify.app/docs/guides/user/managed-delivery/environment-constraints/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://deploy-preview-629--spinnaker-io.netlify.app/docs/guides/user/managed-delivery/environment-constraints/</guid>
      <description>
        
        
        &lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Prerequisite:&lt;/strong&gt; understand the environment concept offered by 
&lt;a href=&#34;https://deploy-preview-629--spinnaker-io.netlify.app/docs/guides/user/managed-delivery/delivery-configs/#environments&#34;&gt;Delivery Configs&lt;/a&gt;
&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;what-is-an-environment-constraint&#34;&gt;What is an Environment Constraint?&lt;/h2&gt;
&lt;p&gt;Environment constraints control how an artifact version flows through environments. A constraint can
be as simple as ensuring an artifact isn&amp;rsquo;t promoted into &lt;code&gt;Environment B&lt;/code&gt; unless it has successfully deployed into
&lt;code&gt;Environment A&lt;/code&gt;. Constraints can also specify that an artifact needs to have a canary evaluated by Kayenta before
it can be deployed into an environment, while also defining how the canary should be deployed and evaluated.&lt;/p&gt;
&lt;h2 id=&#34;defining-constraints&#34;&gt;Defining Constraints&lt;/h2&gt;
&lt;p&gt;Every environment defined in a Delivery Config supports a top-level &lt;code&gt;constraints&lt;/code&gt; list property.&lt;/p&gt;
&lt;p&gt;The following example ensures that artifact versions are only promoted into the &lt;code&gt;staging&lt;/code&gt; environment after
successful deployment to the &lt;code&gt;test&lt;/code&gt; environment, and only if the current time is within the days Monday thru
Thursday and the hours of 8am and 4pm.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;environments&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;- &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;staging&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;resources&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# omitted for brevity&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;notifications&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# omitted for brevity&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;constraints&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;- &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;type&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;depends-on&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;environment&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;testing&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;- &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;type&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;allowed-times&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;windows&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;- &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;days&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;Monday-Thursday&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;hours&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;8-16&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;constraint-types-and-ordering&#34;&gt;Constraint Types and Ordering&lt;/h2&gt;
&lt;p&gt;Constraints are currently bucketed into stateless and stateful types. Stateless constraints can always be fully
evaluated in a single pass and do not interact with users or external systems. The current stateless constraint
types are &lt;code&gt;depends-on&lt;/code&gt; and &lt;code&gt;allowed-times&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Stateless constraints are always evaluated first, and must be satisfied before any stateful constraints are
evaluated. Stateful constraints are a powerful construct, with the ability to mutate cloud state during their
evaluation. Examples include deploying a new artifact version into an environment for the sake of canary
analysis, or launching a smoke-test pipeline against a prior environment, gating promotion on its success.&lt;/p&gt;
&lt;p&gt;This implicit ordering by type ensures that a pipeline constraint gating promotion to a production environment
on smoke-tests run against a prior environment will only invoke the test pipeline after the artifact version
under evaluation is deployed to the prior environment.&lt;/p&gt;
&lt;p&gt;All stateful constraints can be manually overridden, such as when a canary failure is deemed to be expected
for a given change, or a false alarm. When an environment defines multiple constraints, all must pass before a
new artifact is promoted into the environment.&lt;/p&gt;
&lt;h2 id=&#34;available-constraints&#34;&gt;Available Constraints&lt;/h2&gt;
&lt;h3 id=&#34;depends-on&#34;&gt;Depends On&lt;/h3&gt;
&lt;p&gt;The &lt;code&gt;depends-on&lt;/code&gt; constraint ensures that an artifact version will not deploy into the environment it is
attached to, unless it has successfully deployed into the dependent environment.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Parameters&lt;/strong&gt;
&lt;code&gt;environment&lt;/code&gt;: The name of the dependent environment. It must be defined within the same delivery config as
the target environment containing the constraint.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Example&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;constraints&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;- &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;type&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;depends-on&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;environment&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;testing&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;allowed-times&#34;&gt;Allowed Times&lt;/h3&gt;
&lt;p&gt;The &lt;code&gt;allowed-times&lt;/code&gt; constraints provides a time based gate on promotion into an environment. It can be used to
ensure promotion to an environment only occurs during business hours, or quiet times.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Parameters&lt;/strong&gt;
&lt;code&gt;windows&lt;/code&gt;: A list of time windows; multiple windows can be specified on a single constraint. The constraint is
satisfied if the current time matches any single window.
&lt;code&gt;tz&lt;/code&gt;: &lt;em&gt;Optional&lt;/em&gt; The timezone to evaluate the constraint in. This is optional, by default the timezone specified via
the &lt;code&gt;default.time-zone&lt;/code&gt; spring configuration property is used, not the JVM or OS timezone. If your organization
operates in a single timezone, this property should likely be set that timezone.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Window Parameters&lt;/strong&gt;
&lt;code&gt;hours&lt;/code&gt;: Supports ranges (i.e. &lt;code&gt;10-20&lt;/code&gt;) and comma separated lists (i.e. &lt;code&gt;5,6,7,8&lt;/code&gt;) or a combination
of the two.
&lt;code&gt;days&lt;/code&gt;: Supports aliases (&lt;code&gt;weekdays&lt;/code&gt; and &lt;code&gt;weekends&lt;/code&gt;), as well as ranges and comma separated lists of
days in their java standard (&lt;code&gt;java.util.Calendar&lt;/code&gt;) short (&lt;code&gt;mon-thu&lt;/code&gt;) or full (&lt;code&gt;monday-thursday&lt;/code&gt;) names.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Example&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;constraints&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;- &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;type&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;allowed-times&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;windows&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;- &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;days&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;Monday-Wednesday,Friday&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;        &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;hours&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;8-16&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;- &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;days&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;Thursday&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;        &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;hours&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;14-16&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This allows artifacts to deploy into the environment between 8am-4pm on Monday, Tuesday, Wednesday, and Friday or
between 2-4pm on Thursday.&lt;/p&gt;
&lt;h3 id=&#34;manual-judgement&#34;&gt;Manual Judgement&lt;/h3&gt;
&lt;p&gt;The &lt;code&gt;manual-judgement&lt;/code&gt; constraint prevents an artifact from deploying to an environment without explicit
approval via an external API client. UI support for approving or rejecting judgements as well as an
interactive slack bot are under development but direct use of Spinnaker&amp;rsquo;s REST API is currently required to
answer a manual judgement. See 
&lt;a href=&#34;#interacting-with-and-overriding-constraints&#34;&gt;Interacting with and Overriding Constraints&lt;/a&gt;

for details.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Parameters&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;timeout&lt;/code&gt;: &lt;em&gt;(Optional)&lt;/em&gt;; Type: &lt;code&gt;Duration&lt;/code&gt;; Default Value: &lt;code&gt;PT1W&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;If judgement is not provided within this time (starting when the constraint is initially evaluated for a
given environment and artifact version), it is considered rejected.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Example&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;constraints&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;- &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;type&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;manual-judgement&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;pipeline&#34;&gt;Pipeline&lt;/h3&gt;
&lt;p&gt;The &lt;code&gt;pipeline&lt;/code&gt; constraint launches a pipeline, optionally passing along constraint provided trigger
parameters. The pipeline execution is periodically monitored and the constraint status derived from
the final status of the execution.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Parameters&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;pipelineId&lt;/code&gt;: Type: &lt;code&gt;String&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;The configuration id of the pipeline to be executed during constraint evaluation. If unknown,
edit the given pipeline from the Spinnaker UI. From the edit configuration view, the &lt;code&gt;pipelineId&lt;/code&gt; is the
final part of the URL. The pipeline can be a part of any application, but must be runnable via
the service account defined in the target environment&amp;rsquo;s delivery config.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;retries&lt;/code&gt;: &lt;em&gt;(Optional)&lt;/em&gt;; Type: &lt;code&gt;Integer&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;If set, pipeline failures will be retried up-to this many times if pipeline
execution goes terminal for any reason. The constraint evaluation will fail once retries are exhausted.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;parameters&lt;/code&gt;: &lt;em&gt;(Optional)&lt;/em&gt;; Type: &lt;code&gt;Map&amp;lt;String, Object&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;If set, the contents of this map are passed as trigger parameters when executing the pipeline. Expressions
are not currently supported.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;timeout&lt;/code&gt;: &lt;em&gt;(Optional)&lt;/em&gt;; Type: &lt;code&gt;Duration&lt;/code&gt;; Default Value: &lt;code&gt;PT2H&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;If the pipeline execution does not complete within this time, it is considered a failure.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Example&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;constraints&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;- &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;type&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;pipeline&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;pipelineId&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;fn0rd5d1-6217-4fcf-aa3d-ce7f59af9cac&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;retries&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;parameters&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;foo&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;bar&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;canary&#34;&gt;Canary&lt;/h3&gt;
&lt;p&gt;The &lt;code&gt;canary&lt;/code&gt; constraint supports deploying experiment and control clusters across multiple regions within
the target environment. Experiment/control cluster health is evaluated via Kayenta and the clusters
removed once evaluation is complete. By default, a multi-region constraint must pass in all regions
for the constraint to pass but this behavior is configurable.&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;canary&lt;/code&gt; constraint currently only supports EC2. Keel configuration properties may need to be set
depending on how Kayenta accesses time-series data and persists state.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;System Configuration Properties&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;defaults.constraint.canary.metrics-account&lt;/code&gt;: &lt;em&gt;Default Value: atlas-global.prod&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Unless your time series data is stored in Netflix Atlas, this should be set to the equivalent value used
with the Orca Kayenta stage.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;defaults.constraint.canary.storage-account&lt;/code&gt;: &lt;em&gt;Default Value: s3-objects&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;This should be set to the value of Kayenta&amp;rsquo;s &lt;code&gt;default-storage-account&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Parameters&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;canaryConfigId&lt;/code&gt;: Type: &lt;code&gt;String&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;The configuration id of the canary rules used for evaluation. If unknown, select a specific
configuration from Spinnaker&amp;rsquo;s Canary Config UI. The &lt;code&gt;canaryConfigId&lt;/code&gt; is the final segment of the resulting url.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;beginAnalysisAfter&lt;/code&gt;: &lt;em&gt;(Optional)&lt;/em&gt;; Type: &lt;code&gt;Duration&lt;/code&gt;; Default Value: &lt;code&gt;PT10M&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;After the deployment of canary clusters completes, Spinnaker will wait this amount of time before launching the
first Kayenta analysis. This allows for the filtering or inclusion of service warmup behavior in the analysis.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;canaryAnalysisInterval&lt;/code&gt;: &lt;em&gt;(Optional)&lt;/em&gt;; Type: &lt;code&gt;Duration&lt;/code&gt;; Default Value: &lt;code&gt;PT30M&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;After the completion of any &lt;code&gt;beginAnalysisAfter&lt;/code&gt; delay, Kayenta analysis are launched at this recurring interval,
until post-&lt;code&gt;beginAnalysisAfter&lt;/code&gt; runtime exceeds the &lt;code&gt;lifetime&lt;/code&gt; parameter.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;lifetime&lt;/code&gt;: &lt;em&gt;(Optional)&lt;/em&gt;; Type: &lt;code&gt;Duration&lt;/code&gt;; Default Value: &lt;code&gt;PT30M&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Maximum runtime for the canary, exempting deployment times and any initial delay configured via &lt;code&gt;beginAnalysisAfter&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;cleanupDelay&lt;/code&gt;: &lt;em&gt;(Optional)&lt;/em&gt;; Type: &lt;code&gt;Duration&lt;/code&gt;; Default Value: &lt;code&gt;0&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;When a canary fails due to a failing Kayenta score, Spinnaker will wait this amount of time before deleting canary
clusters. Useful if engineers desire an opportunity to manually inspect instances involved in the failure.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;marginalScore&lt;/code&gt;: Type: &lt;code&gt;Integer&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;If Kayenta generates a canary score below the &lt;code&gt;marginalScore&lt;/code&gt;, it is considered an immediate failure.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;passScore&lt;/code&gt;: Type: &lt;code&gt;Integer&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;If Kayenta generates a final canary score &amp;gt;= &lt;code&gt;passScore&lt;/code&gt;, the constraint will pass.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;regions&lt;/code&gt;: Type: &lt;code&gt;Set&amp;lt;String&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Each region will get its own independently deployed and analyzed control/experiment pair.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;capacity&lt;/code&gt;: Type: &lt;code&gt;Integer&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Control and experiment clusters have their min/max/desired pinned to this value.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;source&lt;/code&gt;: Type: &lt;code&gt;CanarySource&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Defined in yaml as a &lt;code&gt;Map&amp;lt;String, String&amp;gt;&lt;/code&gt; with the following properties:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;account&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cloudProvider&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cluster&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This should refer to an active cluster in the target environment deployed in
all of the regions the constraint is configured to run canaries in. Control/experiment clusters are configured
based on the source cluster (i.e. account, subnet, instance type, firewall rules).&lt;/p&gt;
&lt;p&gt;&lt;code&gt;minSuccessfulRegions&lt;/code&gt;: &lt;em&gt;(Optional)&lt;/em&gt;; Type: &lt;code&gt;Integer&lt;/code&gt;; Default Value: &lt;code&gt;0&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;If set to &amp;gt;0 on a multi-region canary, the constraint will pass if Kayenta analysis passes in this many regions.
I.e. if set to 2 on a constraint that defines a 3-region canary, the failure of a single region is ignored.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;failureCancelsRunningRegions&lt;/code&gt;: &lt;em&gt;(Optional)&lt;/em&gt;; Type: &lt;code&gt;Boolean&lt;/code&gt;; Default Value: &lt;code&gt;true&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;If true, the failure of any region
that violates the &lt;code&gt;minSuccessfulRegions&lt;/code&gt; parameter triggers the immediate cancellation of any canaries still
running in other regions.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;metricsAccount&lt;/code&gt;: &lt;em&gt;(Optional)&lt;/em&gt;; Type: &lt;code&gt;String&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;If set, overrides the &lt;code&gt;defaults.constraint.canary.metrics-account&lt;/code&gt; property.
This may be required in environments with multiple TSD instances.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;storageAccount&lt;/code&gt;: &lt;em&gt;(Optional)&lt;/em&gt;; Type: &lt;code&gt;String&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;If set, overrides the &lt;code&gt;defaults.constraint.canary.storage-account&lt;/code&gt; property. Not typically required.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Example&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;constraints&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;- &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;type&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;canary&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;canaryConfigId&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;fn0rd5d1-6217-4fcf-aa3d-ce7f59af9cac&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;beginAnalysisAfter&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;PT3M&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;canaryAnalysisInterval&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;PT10M&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;lifetime&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;PT90M&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;marginalScore&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;75&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;passScore&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;90&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;capacity&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;2&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;source&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;account&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;appaccount&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;cloudProvider&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;aws&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;cluster&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;app-prod&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;regions&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;- &lt;span style=&#34;color:#000&#34;&gt;us-east-1&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;- &lt;span style=&#34;color:#000&#34;&gt;us-west-2&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;- &lt;span style=&#34;color:#000&#34;&gt;eu-west-1&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;minSuccessfulRegions&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;2&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;interacting-with-and-overriding-constraints&#34;&gt;Interacting with and Overriding Constraints&lt;/h2&gt;
&lt;p&gt;Apart from the 
&lt;a href=&#34;#depends-on&#34;&gt;depends-on&lt;/a&gt;
 constraint, all constraint types either expect interaction from a user
(in the case of 
&lt;a href=&#34;#manual-judgement&#34;&gt;manual-judgement&lt;/a&gt;
) or can have their automated judgements overruled by a
user.&lt;/p&gt;
&lt;h3 id=&#34;approving-or-rejecting-manual-judgement-constraints-from-slack&#34;&gt;Approving or rejecting Manual Judgement constraints from Slack&lt;/h3&gt;
&lt;p&gt;If your operator has configured 
&lt;a href=&#34;https://api.slack.com/start/overview&#34; target=&#34;_blank&#34;&gt;Slack app&lt;/a&gt;
 integration with Spinnaker, then a
very convenient way to approve managed deployments gated by a Manual Judgement constraint is to use interactive Slack
notifications.&lt;/p&gt;
&lt;p&gt;All you need to do is 
&lt;a href=&#34;https://deploy-preview-629--spinnaker-io.netlify.app/docs/guides/user/managed-delivery/delivery-configs/#environment-notifications&#34;&gt;set up Slack notifications&lt;/a&gt;
 in your delivery config, which will enable interactive notifications
to a Slack channel of your choice, where you can simply click a button to approve or reject the deployment of the
artifact into the environment.&lt;/p&gt;
&lt;p&gt;Consider the following simplified delivery config:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;myspinapp&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;application&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;myspinapp&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;serviceAccount&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;myteam@mycompany.com&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;artifacts&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;- &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;myspinapp&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;type&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;deb&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;environments&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;- &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;test&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;constraints&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;- &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;type&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;manual-judgement&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;notifications&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;- &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;type&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;slack&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;address&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;#myteam&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;frequency&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;verbose&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;resources&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;- &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;apiVersion&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;bakery.spinnaker.netflix.com/v1&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;kind&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;image&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;spec&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;artifactName&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;myspinapp&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;baseLabel&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;RELEASE&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;baseOs&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;xenial&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;regions&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;- &lt;span style=&#34;color:#000&#34;&gt;us-east-1&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;storeType&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;EBS&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;application&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;myspinapp  &lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;- &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;apiVersion&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;ec2.spinnaker.netflix.com/v1&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;kind&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;cluster&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;spec&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;moniker&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;        &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;app&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;myspinapp&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;imageProvider&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;        &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;deliveryArtifact&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;          &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;myspinapp&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;          &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;type&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;deb&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;locations&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;        &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;account&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;test&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;        &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;regions&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;        &lt;/span&gt;- &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;us-east-1&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Upon evaluating whether a new Debian artifact for &lt;code&gt;myspinapp&lt;/code&gt; should be deployed into the &lt;code&gt;test&lt;/code&gt; environment,
Spinnaker will gate the deployment on the &lt;code&gt;manual-judgement&lt;/code&gt; constraint and send a notification that looks like
the following to the &lt;code&gt;#myteam&lt;/code&gt; Slack channel.
&lt;figure&gt;&lt;img src=&#34;./md-manual-judgment-notification.png&#34;/&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;Once a user in the channel clicks on the &lt;code&gt;Approve&lt;/code&gt; button, the notification changes to reflect the approval:
&lt;figure&gt;&lt;img src=&#34;./md-manual-judgment-approved.png&#34;/&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;:warning: Note that the &lt;code&gt;frequency&lt;/code&gt; setting for notifications does not affect this behavior &amp;ndash; interactive
notifications will always be sent unless your operator has chosen to disable this feature entirely on your
company&amp;rsquo;s instance of Spinnaker.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;apis-to-interact-with-constraints&#34;&gt;APIs to interact with constraints&lt;/h3&gt;
&lt;p&gt;In addition to Slack integration, the following API endpoints are currently available to interact with constraints.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Note: we limit to one delivery config per app, so these APIs currently use app name.&lt;/em&gt;&lt;/p&gt;
&lt;h4 id=&#34;reading-status-of-pending-and-recent-constraints&#34;&gt;Reading status of pending and recent constraints&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;GET&lt;/code&gt;&lt;/strong&gt; &lt;code&gt;https://gate/managed/application/{application}/environment/{environment-name}/constraints?limit=20&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Returns: &lt;code&gt;List&amp;lt;ConstraintState&amp;gt;&lt;/code&gt; consisting of:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;  String deliveryConfigName;
  String environmentName;
  String artifactVersion;
  String type;
  String status;
  Instant createdAt;
  String judgedBy;
  Instant judgedAt;
  String comment;
  Map&amp;lt;String, Object&amp;gt; attributes;
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;setting-or-overriding-constraint-state&#34;&gt;Setting or Overriding Constraint State&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;POST&lt;/code&gt;&lt;/strong&gt; &lt;code&gt;https://gate/managed/application/{application}/environment/{environment-name}/constraint&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;POST&lt;/code&gt; Body:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;#34;type&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;canary&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;#34;artifactVersion&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;  &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;fnord-1.2.3&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;#34;status&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;OVERRIDE_PASS&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;#34;comment&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;overriding false positive kayenta failure&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Valid &lt;code&gt;status&lt;/code&gt; values: &lt;code&gt;PENDING&lt;/code&gt;, &lt;code&gt;PASS&lt;/code&gt;, &lt;code&gt;FAIL&lt;/code&gt;, &lt;code&gt;OVERRIDE_PASS&lt;/code&gt;, &lt;code&gt;OVERRIDE_FAIL&lt;/code&gt;&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>Docs: Git-Based Workflows</title>
      <link>https://deploy-preview-629--spinnaker-io.netlify.app/docs/guides/user/managed-delivery/git-based-workflows/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://deploy-preview-629--spinnaker-io.netlify.app/docs/guides/user/managed-delivery/git-based-workflows/</guid>
      <description>
        
        
        &lt;p&gt;Spinnaker supports git-based workflows to create and update Managed Delivery configurations.
This allows you to keep your Managed Delivery configuration in code and follow all the usual
best practices like code review and approvals before a change is introduced to your managed
resources, environments or deployments.&lt;/p&gt;
&lt;p&gt;Git support is currently achieved via a pipeline configured with a

&lt;a href=&#34;https://deploy-preview-629--spinnaker-io.netlify.app/docs/guides/user/pipeline/triggers/&#34;&gt;trigger&lt;/a&gt;
 that can provide source repository
information (such as a Git trigger) and containing a single &lt;code&gt;Import Delivery Config&lt;/code&gt; stage.
This stage will retrieve a Delivery Config manifest from the repository associated with your
pipeline&amp;rsquo;s trigger, then save (or update) it in Spinnaker so it will automatically monitor
and manage the resources, environments and deployments described in the manifest.&lt;/p&gt;
&lt;p&gt;Here&amp;rsquo;s what it looks like in the UI:
&lt;figure&gt;&lt;img src=&#34;./import-delivery-config.png&#34;/&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;Configuration is very straightforward: your Spinnaker operator will have configured a default
&amp;ldquo;base path&amp;rdquo; under which to look for manifest files in your source code repos (&lt;code&gt;.spinnaker&lt;/code&gt;,
in this example) and you only need to specify the name of the manifest file if it&amp;rsquo;s not the
default shown in the placeholder text (&lt;code&gt;spinnaker.yml&lt;/code&gt;, in the example).&lt;/p&gt;
&lt;p&gt;Eventually, we might add support for direct monitoring of git commit events to Managed Delivery
so that you don&amp;rsquo;t even need a pipeline, but for now, this is the way to do it.&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>Docs: Mark an Artifact as Bad</title>
      <link>https://deploy-preview-629--spinnaker-io.netlify.app/docs/guides/user/managed-delivery/marking-as-bad/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://deploy-preview-629--spinnaker-io.netlify.app/docs/guides/user/managed-delivery/marking-as-bad/</guid>
      <description>
        
        
        &lt;p&gt;You can mark a version of an artifact in an environment as bad to ensure that that version never gets deployed to the environment.
If you mark an artifact as bad in the first in a series of environments (linked together by &lt;code&gt;depends-on&lt;/code&gt; constraints) that version of the artifact will never be promoted into the later environments.&lt;/p&gt;
&lt;h3 id=&#34;marking-via-the-api&#34;&gt;Marking via the API&lt;/h3&gt;
&lt;p&gt;To mark the artifact via the API you&amp;rsquo;ll need the application name, the name of the environment, the reference for your artifact (defined in your delivery config, defaulted to the artifact name), and the version that is bad.
The request needs to have a body that contains 
&lt;a href=&#34;https://github.com/spinnaker/gate/blob/master/gate-core/src/main/groovy/com/netflix/spinnaker/gate/model/manageddelivery/EnvironmentArtifactVeto.java&#34; target=&#34;_blank&#34;&gt;this information&lt;/a&gt;
.
Here&amp;rsquo;s an example:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;POST /managed/application/{application}/veto&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;with body:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;#34;targetEnvironment&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;test&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;#34;reference&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;my-artifact&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;#34;version&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;master-h10.62bbbd6&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
      </description>
    </item>
    
    <item>
      <title>Docs: Pin an Environment</title>
      <link>https://deploy-preview-629--spinnaker-io.netlify.app/docs/guides/user/managed-delivery/pinning/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://deploy-preview-629--spinnaker-io.netlify.app/docs/guides/user/managed-delivery/pinning/</guid>
      <description>
        
        
        &lt;p&gt;You can pin an environment to a specific artifact version to ensure that all resources in the environment stay on that version.
Until the pin is removed, that environment won&amp;rsquo;t change to a new version of the artifact.&lt;/p&gt;
&lt;h3 id=&#34;pinning-via-the-api&#34;&gt;Pinning via the API&lt;/h3&gt;
&lt;p&gt;To create a pin via the API you&amp;rsquo;ll need the application name, the name of the environment you want to pin, the reference for your artifact (defined in your delivery config, defaulted to the artifact name), and the version you&amp;rsquo;d like to pin to.
The request needs to have a body that contains 
&lt;a href=&#34;https://github.com/spinnaker/gate/blob/master/gate-core/src/main/groovy/com/netflix/spinnaker/gate/model/manageddelivery/EnvironmentArtifactPin.java&#34; target=&#34;_blank&#34;&gt;this information&lt;/a&gt;
.
Here&amp;rsquo;s an example:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;POST /managed/application/{application}/pin&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;with body:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;#34;targetEnvironment&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;test&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;#34;reference&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;my-artifact&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;#34;version&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;master-h10.62bbbd6&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;removing-an-environment-pin-via-the-api&#34;&gt;Removing an environment pin via the API&lt;/h3&gt;
&lt;p&gt;To remove all pins from an environment, use:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;DELETE /managed/application/{application}/pin/{targetEnvironment}&lt;/code&gt;&lt;/p&gt;
&lt;h3 id=&#34;removing-a-specific-pin-via-the-api&#34;&gt;Removing a specific pin via the API&lt;/h3&gt;
&lt;p&gt;You may want to remove a specific pin from an environment. To do that, you&amp;rsquo;ll hit make a request like:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;DELETE /managed/application/{application}/pin&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;with body:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;#34;targetEnvironment&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;test&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;#34;reference&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;my-artifact&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;#34;version&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;master-h10.62bbbd6&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
      </description>
    </item>
    
    <item>
      <title>Docs: Resource Status</title>
      <link>https://deploy-preview-629--spinnaker-io.netlify.app/docs/guides/user/managed-delivery/resource-status/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://deploy-preview-629--spinnaker-io.netlify.app/docs/guides/user/managed-delivery/resource-status/</guid>
      <description>
        
        
        &lt;blockquote&gt;
&lt;p&gt;If you&amp;rsquo;re not sure what a managed resource is, check out our 
&lt;a href=&#34;https://deploy-preview-629--spinnaker-io.netlify.app/docs/guides/user/managed-delivery/managed-delivery-overview&#34;&gt;Overview of Managed Delivery&lt;/a&gt;
 first.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;overview&#34;&gt;Overview&lt;/h2&gt;
&lt;p&gt;Managed resources always have a &lt;strong&gt;status&lt;/strong&gt;, which describes the current state of the resource from Spinnaker&amp;rsquo;s perspective. A resource&amp;rsquo;s status can help you quickly answer questions like:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Is Spinnaker taking automatic action on this resource right now?&lt;/li&gt;
&lt;li&gt;Does the actual state of this resource match the declarative configuration I gave to Spinnaker?&lt;/li&gt;
&lt;li&gt;Is something wrong with this resource?&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;how-to-find-a-resources-status&#34;&gt;How to find a resource&amp;rsquo;s status&lt;/h2&gt;
&lt;h3 id=&#34;ui&#34;&gt;UI&lt;/h3&gt;
&lt;p&gt;On the Infrastructure views (Clusters, Load Balancers, Firewalls), you&amp;rsquo;ll see a color-coded &amp;ldquo;M&amp;rdquo; logo attached to any resources that are managed by Spinnaker. Hovering over the logo reveals additional context about the current status and what it means.&lt;/p&gt;
&lt;p&gt;Example on a cluster:
&lt;figure&gt;&lt;img src=&#34;./cluster-resource-status-ui.png&#34;/&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 id=&#34;api&#34;&gt;API&lt;/h3&gt;
&lt;p&gt;Find the 
&lt;a href=&#34;https://deploy-preview-629--spinnaker-io.netlify.app/docs/guides/user/managed-delivery/getting-started/#find-your-resource-id&#34;&gt;ID of a resource&lt;/a&gt;
 and call the &lt;code&gt;/managed/resources/&amp;lt;resourceId&amp;gt;/status&lt;/code&gt; endpoint.&lt;/p&gt;
&lt;p&gt;Example request:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;curl -X GET --header &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;X-SPINNAKER-USER: &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;${&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;SPINNAKER_USER&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;${&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;SPIN_URL&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;/&amp;lt;resourceId&amp;gt;/status&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Example response:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;{&lt;/span&gt; &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;#34;status&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;HAPPY&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;status-reference&#34;&gt;Status Reference&lt;/h2&gt;
&lt;h3 id=&#34;created&#34;&gt;Created&lt;/h3&gt;
&lt;figure&gt;&lt;img src=&#34;./resource-status-created.png&#34;/&gt;
&lt;/figure&gt;

&lt;p&gt;When a resource has this status, it means Spinnaker has just received the resource’s declarative configuration and hasn&amp;rsquo;t taken any action yet.&lt;/p&gt;
&lt;p&gt;If the actual state of the resource matches the declarative configuration, the resource will transition to the 
&lt;a href=&#34;https://deploy-preview-629--spinnaker-io.netlify.app/docs/guides/user/managed-delivery/resource-status/#happy&#34;&gt;Happy&lt;/a&gt;
 status the next time Spinnaker checks it.&lt;/p&gt;
&lt;p&gt;If Spinnaker detects a drift from the declarative configuration in the future, the resource will change status to 
&lt;a href=&#34;https://deploy-preview-629--spinnaker-io.netlify.app/docs/guides/user/managed-delivery/resource-status/#diff&#34;&gt;Diff&lt;/a&gt;
. Once Spinnaker starts taking automatic action to correct the drift, the status will change to 
&lt;a href=&#34;https://deploy-preview-629--spinnaker-io.netlify.app/docs/guides/user/managed-delivery/resource-status/#actuating&#34;&gt;Actuating&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;While Spinnaker is managing a resource, manual changes made via the UI or the API will be automatically reversed (&amp;ldquo;stomped&amp;rdquo;) in favor of the declarative configuration.&lt;/p&gt;
&lt;h3 id=&#34;diff&#34;&gt;Diff&lt;/h3&gt;
&lt;figure&gt;&lt;img src=&#34;./resource-status-diff.png&#34;/&gt;
&lt;/figure&gt;

&lt;p&gt;When a resource has this status, it means Spinnaker detected a drift from the declarative configuration but hasn&amp;rsquo;t taken any action yet.&lt;/p&gt;
&lt;p&gt;Once Spinnaker starts taking automatic action to correct the drift, the status  changes to 
&lt;a href=&#34;https://deploy-preview-629--spinnaker-io.netlify.app/docs/guides/user/managed-delivery/resource-status/#actuating&#34;&gt;Actuating&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;While Spinnaker is managing a resource, manual changes made via the UI or the API are automatically reversed (&amp;ldquo;stomped&amp;rdquo;) in favor of the declarative configuration.&lt;/p&gt;
&lt;h3 id=&#34;actuating&#34;&gt;Actuating&lt;/h3&gt;
&lt;figure&gt;&lt;img src=&#34;./resource-status-actuating.png&#34;/&gt;
&lt;/figure&gt;

&lt;p&gt;When a resource has this status, it means Spinnaker detected a drift from the declarative configuration and automatic action is in progress to resolve it. You can click on &amp;ldquo;History&amp;rdquo; to see details about the detected drift and the specific tasks Spinnaker launched, along with whether they succeeded or failed.&lt;/p&gt;
&lt;p&gt;If automatic actions successfully resolve the drift, the status will change to 
&lt;a href=&#34;https://deploy-preview-629--spinnaker-io.netlify.app/docs/guides/user/managed-delivery/resource-status/#happy&#34;&gt;Happy&lt;/a&gt;
. If automatic actions don&amp;rsquo;t help to resolve the drift, the status will change to 
&lt;a href=&#34;https://deploy-preview-629--spinnaker-io.netlify.app/docs/guides/user/managed-delivery/resource-status/#unhappy&#34;&gt;Unhappy&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;While Spinnaker is managing a resource, manual changes made via the UI or the API will be automatically reversed (&amp;ldquo;stomped&amp;rdquo;) in favor of the declarative configuration.&lt;/p&gt;
&lt;h3 id=&#34;happy&#34;&gt;Happy&lt;/h3&gt;
&lt;figure&gt;&lt;img src=&#34;./resource-status-happy.png&#34;/&gt;
&lt;/figure&gt;

&lt;p&gt;When a resource has this status, all is well and the actual state of the resource matches its declarative configuration.&lt;/p&gt;
&lt;p&gt;If Spinnaker detects a drift from the declarative configuration in the future, the resource status will change to 
&lt;a href=&#34;https://deploy-preview-629--spinnaker-io.netlify.app/docs/guides/user/managed-delivery/resource-status/#diff&#34;&gt;Diff&lt;/a&gt;
. Once Spinnaker starts taking automatic action to correct the drift, the status will change to 
&lt;a href=&#34;https://deploy-preview-629--spinnaker-io.netlify.app/docs/guides/user/managed-delivery/resource-status/#actuating&#34;&gt;Actuating&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;While Spinnaker is managing a resource, manual changes made via the UI or the API will be automatically reversed (&amp;ldquo;stomped&amp;rdquo;) in favor of the declarative configuration.&lt;/p&gt;
&lt;h3 id=&#34;unhappy&#34;&gt;Unhappy&lt;/h3&gt;
&lt;figure&gt;&lt;img src=&#34;./resource-status-unhappy.png&#34;/&gt;
&lt;/figure&gt;

&lt;p&gt;When a resource has this status, it means Spinnaker detected a drift from the declarative configuration but hasn&amp;rsquo;t been able to resolve it through automatic actions. This might mean that the actions Spinnaker has taken are failing, or something else is preventing the actions from having their desired effect.&lt;/p&gt;
&lt;p&gt;While a resource is Unhappy, Spinnaker will continue trying to resolve the drift and may eventually succeed. If it does, the resource will transition to the 
&lt;a href=&#34;https://deploy-preview-629--spinnaker-io.netlify.app/docs/guides/user/managed-delivery/resource-status/#happy&#34;&gt;Happy&lt;/a&gt;
 status.&lt;/p&gt;
&lt;p&gt;You can click on &amp;ldquo;History&amp;rdquo; to see the detected drift along with actions Spinnaker is taking. If you decide manual intervention is needed to remedy any issues you might discover, you can temporarily pause management by clicking &amp;ldquo;Pause management of this resource&amp;rdquo; or by pausing the entire application on the Config view for your app.&lt;/p&gt;
&lt;h3 id=&#34;paused&#34;&gt;Paused&lt;/h3&gt;
&lt;figure&gt;&lt;img src=&#34;./resource-status-paused.png&#34;/&gt;
&lt;/figure&gt;

&lt;p&gt;When a resource has this status, it means Spinnaker is configured to continuously manage the resource but you&amp;rsquo;ve chosen to temporarily pause management. While management is paused Spinnaker won&amp;rsquo;t check for drift from the declarative configuration, and it won&amp;rsquo;t take any automatic actions. Depending on whether you&amp;rsquo;ve paused the specific resource or the entire application, you can either click &amp;ldquo;Resume management of this resource&amp;rdquo; or go to the Config view in your app to resume management.&lt;/p&gt;
&lt;p&gt;When you resume management the status will change to 
&lt;a href=&#34;https://deploy-preview-629--spinnaker-io.netlify.app/docs/guides/user/managed-delivery/resource-status/#resumed&#34;&gt;Resumed&lt;/a&gt;
.&lt;/p&gt;
&lt;h3 id=&#34;resumed&#34;&gt;Resumed&lt;/h3&gt;
&lt;figure&gt;&lt;img src=&#34;./resource-status-resumed.png&#34;/&gt;
&lt;/figure&gt;

&lt;p&gt;When a resource has this status, it means management was just resumed after being temporarily paused and Spinnaker hasn&amp;rsquo;t checked for drift from the declarative configuration yet.&lt;/p&gt;
&lt;p&gt;If a drift is detected, the status will change to 
&lt;a href=&#34;https://deploy-preview-629--spinnaker-io.netlify.app/docs/guides/user/managed-delivery/resource-status/#diff&#34;&gt;Diff&lt;/a&gt;
. If no drift is detected, the status will change to 
&lt;a href=&#34;https://deploy-preview-629--spinnaker-io.netlify.app/docs/guides/user/managed-delivery/resource-status/#unhappy&#34;&gt;Happy&lt;/a&gt;
.&lt;/p&gt;
&lt;h3 id=&#34;currently-unresolvable&#34;&gt;Currently unresolvable&lt;/h3&gt;
&lt;figure&gt;&lt;img src=&#34;./resource-status-currently-unresolvable.png&#34;/&gt;
&lt;/figure&gt;

&lt;p&gt;When a resource has this status, it means something Spinnaker requires to properly manage the resource is either not ready yet or temporarily experiencing disruption. Automatic action won&amp;rsquo;t be taken while in this status, but it doesn&amp;rsquo;t necessarily mean something is broken. Some examples of things that might lead to a resource entering this status:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A downstream system (like a container registry or cloud provider) temporarily rate limiting or experiencing availability issues&lt;/li&gt;
&lt;li&gt;A required part of the resource&amp;rsquo;s desired state (like a VM image) not being available yet&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you see this status and want to investigate the cause, you can click &amp;ldquo;History&amp;rdquo; to view additional details and understand what else was happening when the issue began. While you may decide to take some action as a result of this status, it&amp;rsquo;s unlikely the issue requires manual intervention. Once the issue is resolved the resource will transition to whatever status is applicable at the time based on its desired state.&lt;/p&gt;
&lt;h3 id=&#34;error&#34;&gt;Error&lt;/h3&gt;
&lt;figure&gt;&lt;img src=&#34;./resource-status-error.png&#34;/&gt;
&lt;/figure&gt;

&lt;p&gt;When a resource has this status, it means something went wrong while trying to check the resource for drift from its declarative configuration. Because something went wrong, Spinnaker can&amp;rsquo;t take automatic actions and drift from the declarative configuration won&amp;rsquo;t be resolved (until something changes). Some examples of problems that might lead to an error status:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A problem retrieving or processing information about the current state of the resource&lt;/li&gt;
&lt;li&gt;A problem with the declarative configuration (invalid settings, etc.)&lt;/li&gt;
&lt;li&gt;A bug or issue with Spinnaker itself&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;After an error, Spinnaker will continue trying to check the resource and may eventually succeed. If it does, the resource will transition to whatever status is applicable at that time.&lt;/p&gt;
&lt;p&gt;If you see this status, it&amp;rsquo;s probably best to investigate the current state of the resource manually and double check that nothing is broken. You can start by clicking &amp;ldquo;History&amp;rdquo; to see the details of the error and what else was happening when the error occurred. If you decide manual intervention is needed to remedy any issues you might discover, you can temporarily pause management by clicking &amp;ldquo;Pause management of this resource&amp;rdquo;.&lt;/p&gt;
&lt;h3 id=&#34;unknown&#34;&gt;Unknown&lt;/h3&gt;
&lt;figure&gt;&lt;img src=&#34;./resource-status-unknown.png&#34;/&gt;
&lt;/figure&gt;

&lt;p&gt;When a resource has this status, it means Spinnaker was unable to determine the current status for some reason. Because the status is unknown, it&amp;rsquo;s tough to tell by the status alone whether something is &lt;em&gt;wrong&lt;/em&gt;, or just unexpected.&lt;/p&gt;
&lt;p&gt;After encountering this status, Spinnaker will continue trying to check the resource for its status and may eventually succeed. If it does, the resource will transition to whatever status is applicable at that time.&lt;/p&gt;
&lt;p&gt;If you see this status, it&amp;rsquo;s probably best to investigate the current state of the resource manually and double check that nothing is broken. You can start by clicking &amp;ldquo;History&amp;rdquo; to see details about what&amp;rsquo;s been happening with the resource recently. If you decide manual intervention is needed to remedy any issues you might discover, you can temporarily pause management by clicking &amp;ldquo;Pause management of this resource&amp;rdquo;.&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>Docs: Managed Delivery FAQ</title>
      <link>https://deploy-preview-629--spinnaker-io.netlify.app/docs/guides/user/managed-delivery/faq/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://deploy-preview-629--spinnaker-io.netlify.app/docs/guides/user/managed-delivery/faq/</guid>
      <description>
        
        
        &lt;h3 id=&#34;what-is-happening&#34;&gt;What is happening?&lt;/h3&gt;
&lt;p&gt;Spinnaker is managing this resource.
That means that the state of this resource is controlled using a declarative config submitted to Spinnaker.&lt;/p&gt;
&lt;h3 id=&#34;can-i-make-changes-in-the-ui-to-this-resource&#34;&gt;Can I make changes in the UI to this resource?&lt;/h3&gt;
&lt;p&gt;Nope.
Well, you can, but they will be almost immediately stomped to return to the declared state.&lt;/p&gt;
&lt;h3 id=&#34;who-is-the-source-of-truth-for-that-declared-state&#34;&gt;Who is the source of truth for that declared state?&lt;/h3&gt;
&lt;p&gt;Spinnaker is.&lt;/p&gt;
&lt;h3 id=&#34;then-why-do-i-have-code-checked-into-a-repo&#34;&gt;Then why do I have code checked into a repo?&lt;/h3&gt;
&lt;p&gt;To help you keep your resources in a known good state.
You must publish these resource configs to Spinnaker every time they change in order for that change to be reflected in Spinnaker.&lt;/p&gt;
&lt;h3 id=&#34;what-if-i-want-to-stop-managing-this-resource-declaratively&#34;&gt;What if I want to stop managing this resource declaratively?&lt;/h3&gt;
&lt;p&gt;Send us a &lt;code&gt;DELETE&lt;/code&gt; for the config of this resource.
We will stop managing the resource, and you can make changes like normal.
The infrastructure will not be deleted.&lt;/p&gt;
&lt;h3 id=&#34;where-are-the-getting-started-docs&#34;&gt;Where are the getting started docs?&lt;/h3&gt;
&lt;p&gt;They&amp;rsquo;re at 
&lt;a href=&#34;https://deploy-preview-629--spinnaker-io.netlify.app/docs/guides/user/managed-delivery/getting-started&#34;&gt;/docs/reference/managed-delivery/getting-started&lt;/a&gt;
.&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>Docs: CI Features</title>
      <link>https://deploy-preview-629--spinnaker-io.netlify.app/docs/guides/user/managed-delivery/ci-features/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://deploy-preview-629--spinnaker-io.netlify.app/docs/guides/user/managed-delivery/ci-features/</guid>
      <description>
        
        
        &lt;p&gt;One of the goals of Managed Delivery is to show you the journey of your code, from commit to deployment,
in an easy, consistent way.
In order to enable this experience, we created an integration between Managed Delivery and the Continuous Integration (CI) provider, which is described below.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Note: in order to take advantage of this feature, your Spinnaker operator/administrator will have to configure a CI provider which matches your company&amp;rsquo;s setup.
They can look for available open-source or commercial Spinnaker CI providers, or even develop their own. See the developer guide on 
&lt;a href=&#34;https://deploy-preview-629--spinnaker-io.netlify.app/docs/guides/developer/extending/integrate-your-ci/&#34;&gt;CI integration&lt;/a&gt;
.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;artifact-metadata&#34;&gt;Artifact metadata&lt;/h2&gt;
&lt;p&gt;Detailed metadata (like commit message, author, timestamp) is visible in the Environments view in the UI, by clicking on an artifact version.&lt;/p&gt;
&lt;p&gt;Here&amp;rsquo;s what it looks like in the UI:
&lt;figure&gt;&lt;img src=&#34;artifact-metadata.png&#34;/&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 id=&#34;see-code-changes-between-deployments&#34;&gt;See code changes between deployments&lt;/h2&gt;
&lt;p&gt;Now that we have git metadata for each artifact, we can easily figure out the code differences between each version.
We added the &lt;code&gt;See changes&lt;/code&gt; button in the UI, for each environment, which looks like this:
&lt;figure&gt;&lt;img src=&#34;see-changes.png&#34;/&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;In Slack notifications:
&lt;figure&gt;&lt;img src=&#34;slack-see-changes.png&#34;/&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 id=&#34;surface-build-information-in-the-ui&#34;&gt;Surface build information in the UI&lt;/h2&gt;
&lt;figure&gt;&lt;img src=&#34;build-info.png&#34;/&gt;
&lt;/figure&gt;

&lt;p&gt;A new section called &amp;ldquo;Pre-deployment&amp;rdquo; is now available in the UI. This section will surface pre-deployment steps like baking (for Debian packages only) or building.
By clicking on &amp;ldquo;See details&amp;rdquo;, you&amp;rsquo;ll be taken to the viewing CI details (see below), or a CI job log which can be provided as a part of the CI integration.&lt;/p&gt;
&lt;h2 id=&#34;viewing-ci-details-in-spinnaker&#34;&gt;Viewing CI details in Spinnaker&lt;/h2&gt;
&lt;p&gt;We recently added the option to see CI details in Spinnaker, in a new &amp;ldquo;Builds&amp;rdquo; tab.
It looks like this:
&lt;figure&gt;&lt;img src=&#34;ci-view.png&#34;/&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;This is a new tab that can be accessed from the main Spinnaker UI.&lt;/p&gt;

      </description>
    </item>
    
  </channel>
</rss>
