<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Armory Docs – Policy Engine Packages</title><link>/plugins/policy-engine/use/packages/</link><description>Recent content in Policy Engine Packages on Armory Docs</description><generator>Hugo -- gohugo.io</generator><atom:link href="/plugins/policy-engine/use/packages/index.xml" rel="self" type="application/rss+xml"/><item><title>Plugins: opa.pipelines</title><link>/plugins/policy-engine/use/packages/opa.pipelines/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/plugins/policy-engine/use/packages/opa.pipelines/</guid><description>
&lt;h2 id="example-payload">Example Payload&lt;/h2>
&lt;details>&lt;summary>Click to expand&lt;/summary>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;input&amp;#34;&lt;/span>: {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;pipeline&amp;#34;&lt;/span>: {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;application&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;hostname&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;expectedArtifacts&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;defaultArtifact&amp;#34;&lt;/span>: {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;artifactAccount&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;myUsername&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;4aa85178-0618-46c4-b530-6883d393656d&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;name&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;manifests/deploy-spinnaker.yaml&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;reference&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;Https://api.github.com/repos/myUsername/hostname/contents/manifests/deploy-spinnaker.yaml&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;type&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;github/file&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;version&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;master&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> },
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;displayName&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;hostname-deploy&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;0cf98032-1b0f-48db-9314-09c69293b3a6&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;matchArtifact&amp;#34;&lt;/span>: {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;artifactAccount&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;myUsername&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;customKind&amp;#34;&lt;/span>: &lt;span style="color:#ff79c6">true&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;3f72ed8e-cb95-454f-9119-2323682121ff&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;name&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;manifests/deploy-spinnaker.yaml&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;type&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;github/file&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> },
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;useDefaultArtifact&amp;#34;&lt;/span>: &lt;span style="color:#ff79c6">true&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;usePriorArtifact&amp;#34;&lt;/span>: &lt;span style="color:#ff79c6">false&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> },
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;defaultArtifact&amp;#34;&lt;/span>: {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;artifactAccount&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;myUsername&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;e79162ab-69cb-4ff7-acf4-a8f2875ef8ef&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;name&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;manifests/service-spinnaker.yaml&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;reference&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;Https://api.github.com/repos/myUsername/hostname/contents/manifests/service-spinnaker.yaml&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;type&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;github/file&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> },
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;displayName&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;service-hostname&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;425d20a8-2942-4902-8d2b-277769a1492c&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;matchArtifact&amp;#34;&lt;/span>: {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;artifactAccount&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;myUsername&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;customKind&amp;#34;&lt;/span>: &lt;span style="color:#ff79c6">true&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;d7ac7eca-0131-4d54-ab8f-880ff0041e4f&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;name&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;manifests/service-spinnaker&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;type&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;github/file&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> },
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;useDefaultArtifact&amp;#34;&lt;/span>: &lt;span style="color:#ff79c6">true&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;usePriorArtifact&amp;#34;&lt;/span>: &lt;span style="color:#ff79c6">false&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;7db1e350-dedb-4dc1-9976-e71f97b5f132&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;index&amp;#34;&lt;/span>: &lt;span style="color:#bd93f9">0&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;keepWaitingPipelines&amp;#34;&lt;/span>: &lt;span style="color:#ff79c6">false&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;lastModifiedBy&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;myUsername&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;limitConcurrent&amp;#34;&lt;/span>: &lt;span style="color:#ff79c6">true&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;name&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;scale deployments&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;parameterConfig&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;default&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;description&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;hasOptions&amp;#34;&lt;/span>: &lt;span style="color:#ff79c6">false&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;label&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;name&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;replicas&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;options&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;value&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;pinned&amp;#34;&lt;/span>: &lt;span style="color:#ff79c6">false&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;required&amp;#34;&lt;/span>: &lt;span style="color:#ff79c6">false&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> },
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;default&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;staging&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;description&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;hasOptions&amp;#34;&lt;/span>: &lt;span style="color:#ff79c6">false&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;label&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;name&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;namespace&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;options&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;value&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;pinned&amp;#34;&lt;/span>: &lt;span style="color:#ff79c6">false&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;required&amp;#34;&lt;/span>: &lt;span style="color:#ff79c6">true&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;spelEvaluator&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;v4&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;stages&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;account&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;spinnaker&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;cloudProvider&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;kubernetes&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;manifestArtifactId&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;0cf98032-1b0f-48db-9314-09c69293b3a6&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;moniker&amp;#34;&lt;/span>: {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;app&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;hostname&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> },
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;name&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;Deploy (Manifest) g&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;refId&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;2&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;requisiteStageRefIds&amp;#34;&lt;/span>: [],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;skipExpressionEvaluation&amp;#34;&lt;/span>: &lt;span style="color:#ff79c6">false&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;source&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;artifact&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;trafficManagement&amp;#34;&lt;/span>: {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;enabled&amp;#34;&lt;/span>: &lt;span style="color:#ff79c6">false&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;options&amp;#34;&lt;/span>: {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;enableTraffic&amp;#34;&lt;/span>: &lt;span style="color:#ff79c6">false&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;services&amp;#34;&lt;/span>: []
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> },
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;type&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;deployManifest&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> },
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;account&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;spinnaker&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;cloudProvider&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;kubernetes&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;manifestArtifactId&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;425d20a8-2942-4902-8d2b-277769a1492c&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;moniker&amp;#34;&lt;/span>: {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;app&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;hostname&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> },
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;name&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;Deploy service (Manifest)&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;refId&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;3&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;requisiteStageRefIds&amp;#34;&lt;/span>: [],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;skipExpressionEvaluation&amp;#34;&lt;/span>: &lt;span style="color:#ff79c6">false&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;source&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;artifact&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;trafficManagement&amp;#34;&lt;/span>: {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;enabled&amp;#34;&lt;/span>: &lt;span style="color:#ff79c6">false&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;options&amp;#34;&lt;/span>: {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;enableTraffic&amp;#34;&lt;/span>: &lt;span style="color:#ff79c6">false&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;services&amp;#34;&lt;/span>: []
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> },
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;type&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;deployManifest&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> },
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;completeOtherBranchesThenFail&amp;#34;&lt;/span>: &lt;span style="color:#ff79c6">false&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;continuePipeline&amp;#34;&lt;/span>: &lt;span style="color:#ff79c6">true&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;failPipeline&amp;#34;&lt;/span>: &lt;span style="color:#ff79c6">false&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;instructions&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;is the new service working?&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;judgmentInputs&amp;#34;&lt;/span>: [],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;name&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;Manual Judgment&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;notifications&amp;#34;&lt;/span>: [],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;refId&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;4&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;requisiteStageRefIds&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f1fa8c">&amp;#34;2&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f1fa8c">&amp;#34;3&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;stageTimeoutMs&amp;#34;&lt;/span>: &lt;span style="color:#bd93f9">60000&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;type&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;manualJudgment&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> },
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;account&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;spinnaker&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;app&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;hostname&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;cloudProvider&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;kubernetes&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;location&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;staging&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;manifestName&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;deployment hostname&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;mode&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;static&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;name&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;Scale (Manifest)&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;refId&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;5&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;replicas&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;10&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;requisiteStageRefIds&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f1fa8c">&amp;#34;4&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;type&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;scaleManifest&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;triggers&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;branch&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;master&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;enabled&amp;#34;&lt;/span>: &lt;span style="color:#ff79c6">true&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;expectedArtifactIds&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f1fa8c">&amp;#34;0cf98032-1b0f-48db-9314-09c69293b3a6&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f1fa8c">&amp;#34;425d20a8-2942-4902-8d2b-277769a1492c&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;project&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;myUsername&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;secret&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;spinnaker&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;slug&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;hostname&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;source&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;github&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;type&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;git&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;updateTs&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;1620677311000&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/details>
&lt;h2 id="manual-approval-by-role">Manual approval by role&lt;/h2>
&lt;p>Requires a manual approval by the &lt;code>qa&lt;/code> role, and a manual approval by the &lt;code>infosec&lt;/code> role happen earlier in a pipeline than any deployment to a production account. Production accounts must have been loaded into the OPA data document in an array named &lt;code>production_accounts&lt;/code>:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-go" data-lang="go">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">package&lt;/span> opa.pipelines
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>deny[&lt;span style="color:#f1fa8c">&amp;#34;production deploy stage must follow approval by &amp;#39;qa&amp;#39; and &amp;#39;infosec&amp;#39;&amp;#34;&lt;/span>] {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> some j
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> stage &lt;span style="color:#ff79c6">:=&lt;/span>input.pipeline.stages[j]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> stage.&lt;span style="color:#8be9fd;font-style:italic">type&lt;/span>&lt;span style="color:#ff79c6">==&lt;/span>&lt;span style="color:#f1fa8c">&amp;#34;deployManifest&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> stage.account&lt;span style="color:#ff79c6">==&lt;/span>data.production_accounts[_]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#50fa7b">lacksEarlierApprovalBy&lt;/span>([&lt;span style="color:#f1fa8c">&amp;#34;qa&amp;#34;&lt;/span>,&lt;span style="color:#f1fa8c">&amp;#34;infosec&amp;#34;&lt;/span>][_],j)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>stage_graph[idx] = edges { #converts stage graph into the structure rego needs
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> input.pipeline.stages[idx]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> edges &lt;span style="color:#ff79c6">:=&lt;/span> {neighbor | input.pipeline.stages[neighbor].refId &lt;span style="color:#ff79c6">==&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> input.pipeline.stages[idx].requisiteStageRefIds[_]}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#50fa7b">hasEarlierApprovalBy&lt;/span>(role, idx){
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> stage &lt;span style="color:#ff79c6">:=&lt;/span> input.pipeline.stages[i]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> stage.&lt;span style="color:#8be9fd;font-style:italic">type&lt;/span>&lt;span style="color:#ff79c6">==&lt;/span>&lt;span style="color:#f1fa8c">&amp;#34;manualJudgment&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> stage.selectedStageRoles[&lt;span style="color:#bd93f9">0&lt;/span>]&lt;span style="color:#ff79c6">==&lt;/span>role; &lt;span style="color:#50fa7b">count&lt;/span>(stage.selectedStageRoles)&lt;span style="color:#ff79c6">==&lt;/span>&lt;span style="color:#bd93f9">1&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> reachable &lt;span style="color:#ff79c6">:=&lt;/span> graph.&lt;span style="color:#50fa7b">reachable&lt;/span>(stage_graph, {idx})[_]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> reachable &lt;span style="color:#ff79c6">==&lt;/span>i
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#50fa7b">lacksEarlierApprovalBy&lt;/span>(role,idx) {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> not &lt;span style="color:#50fa7b">hasEarlierApprovalBy&lt;/span>(role,idx)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="allow-list-for-target-namespaces">Allow list for target namespaces&lt;/h2>
&lt;p>Only allows applications to deploy to namespaces that are on an allow list.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-go" data-lang="go">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">package&lt;/span> opa.pipelines
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>allowedNamespaces&lt;span style="color:#ff79c6">:=&lt;/span>[{&lt;span style="color:#f1fa8c">&amp;#34;app&amp;#34;&lt;/span>:&lt;span style="color:#f1fa8c">&amp;#34;app1&amp;#34;&lt;/span>,&lt;span style="color:#f1fa8c">&amp;#34;ns&amp;#34;&lt;/span>: [&lt;span style="color:#f1fa8c">&amp;#34;ns1&amp;#34;&lt;/span>,&lt;span style="color:#f1fa8c">&amp;#34;ns2&amp;#34;&lt;/span>]},
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> {&lt;span style="color:#f1fa8c">&amp;#34;app&amp;#34;&lt;/span>:&lt;span style="color:#f1fa8c">&amp;#34;app2&amp;#34;&lt;/span>, &lt;span style="color:#f1fa8c">&amp;#34;ns&amp;#34;&lt;/span>:[&lt;span style="color:#f1fa8c">&amp;#34;ns3&amp;#34;&lt;/span>]}]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>deny[&lt;span style="color:#f1fa8c">&amp;#34;Stage deploys to a namespace to which this application lacks access&amp;#34;&lt;/span>]{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ns &lt;span style="color:#ff79c6">:=&lt;/span>object.&lt;span style="color:#50fa7b">get&lt;/span>(input.stage.context.manifests[_].metadata,&lt;span style="color:#f1fa8c">&amp;#34;namespace&amp;#34;&lt;/span>,&lt;span style="color:#f1fa8c">&amp;#34;default&amp;#34;&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> application &lt;span style="color:#ff79c6">:=&lt;/span> input.pipeline.application
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> not &lt;span style="color:#50fa7b">canDeploy&lt;/span>(ns, application)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#50fa7b">canDeploy&lt;/span>(namespace, application){
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> some i
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> allowedNamespaces[i].app&lt;span style="color:#ff79c6">==&lt;/span>application
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> allowedNamespaces[i].ns[_]&lt;span style="color:#ff79c6">==&lt;/span>namespace
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="deployment-window">Deployment window&lt;/h2>
&lt;p>The policy prevents a user from saving a pipeline that deploys to production accounts unless the first stage of the pipeline specifies a schedule that prevents it from starting executions between 2pm and 7pm Pacific Standard Time (PST).&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-go" data-lang="go">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">package&lt;/span> opa.pipelines
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>productionAccounts&lt;span style="color:#ff79c6">:=&lt;/span>[&lt;span style="color:#f1fa8c">&amp;#34;spinnaker&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>deny [&lt;span style="color:#f1fa8c">&amp;#34;Your first stage must configure a blackout window that prevents an execution from starting between 2pm and 7pm PST.&amp;#34;&lt;/span>] {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span># Restrict to just one app in my demo environment
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>some i
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span># Check whether or not this stage is at the beginning of the pipeline by verifying &lt;span style="color:#ff79c6">if&lt;/span> it it depends on a stage
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#50fa7b">count&lt;/span>(input.pipeline.stages[i].requisiteStageRefIds)&lt;span style="color:#ff79c6">==&lt;/span>&lt;span style="color:#bd93f9">0&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> input.pipeline.stages[_].account&lt;span style="color:#ff79c6">==&lt;/span>productionAccounts[_]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> executionWindow &lt;span style="color:#ff79c6">:=&lt;/span> object.&lt;span style="color:#50fa7b">get&lt;/span>(input.pipeline.stages[i],&lt;span style="color:#f1fa8c">&amp;#34;restrictedExecutionWindow&amp;#34;&lt;/span>,null)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> # If no execution windoe is defined, or &lt;span style="color:#ff79c6">if&lt;/span> a prohibited one is defined, then prevent execution.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#50fa7b">any&lt;/span>([executionWindow &lt;span style="color:#ff79c6">==&lt;/span>null,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#50fa7b">isExecutionProhibitedDuringWindow&lt;/span>(executionWindow)])
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span># Prevent the stage from executing between &lt;span style="color:#bd93f9">2&lt;/span>PM&lt;span style="color:#ff79c6">/&lt;/span>&lt;span style="color:#bd93f9">14&lt;/span>:&lt;span style="color:#bd93f9">00&lt;/span> and &lt;span style="color:#bd93f9">7&lt;/span>PM&lt;span style="color:#ff79c6">/&lt;/span>&lt;span style="color:#bd93f9">19&lt;/span>:&lt;span style="color:#bd93f9">00&lt;/span> PST by defining a window of time when deployments are allowed
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#50fa7b">isExecutionProhibitedDuringWindow&lt;/span>(window){
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> some i
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> # Window overlaps the start of the blackout window.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> window.whitelist[i].startHour&amp;lt;&lt;span style="color:#bd93f9">13&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> window.whitelist[i].endHour&amp;gt;&lt;span style="color:#bd93f9">13&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> some i
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> # Window overlaps the end of the blackout window.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> window.whitelist[i].startHour&amp;lt;&lt;span style="color:#bd93f9">19&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> window.whitelist[i].endHour&amp;gt;&lt;span style="color:#bd93f9">19&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }{ # Window overlaps the start of the blackout window starting on a prior day.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> window.whitelist[i].endHour&amp;lt;window.whitelist[i].startHour
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> window.whitelist[i].endHour&amp;gt;&lt;span style="color:#bd93f9">13&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }{ # Window overlaps the start of the blackout window starting on a prior day.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> window.whitelist[i].endHour&amp;lt;window.whitelist[i].startHour
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> window.whitelist[i].startHour&amp;lt;&lt;span style="color:#bd93f9">19&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#50fa7b">count&lt;/span>(window.whitelist)&lt;span style="color:#ff79c6">==&lt;/span>&lt;span style="color:#bd93f9">0&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="keys">Keys&lt;/h2>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align:left">Key&lt;/th>
&lt;th style="text-align:left">Type&lt;/th>
&lt;th style="text-align:left">Description&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align:left">&lt;code>input.pipeline.application&lt;/code>&lt;/td>
&lt;td style="text-align:left">&lt;code>string&lt;/code>&lt;/td>
&lt;td style="text-align:left">The name of the Spinnaker application to which this pipeline belongs.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>input.pipeline.expectedArtifacts[]&lt;/code>&lt;/td>
&lt;td style="text-align:left">&lt;code>[array]&lt;/code>&lt;/td>
&lt;td style="text-align:left">See &lt;a href="/plugins/policy-engine/use/packages/common-objects/artifacts/">artifacts&lt;/a> for more information.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>input.pipeline.id&lt;/code>&lt;/td>
&lt;td style="text-align:left">&lt;code>string&lt;/code>&lt;/td>
&lt;td style="text-align:left">The unique ID of the pipeline&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>input.pipeline.index&lt;/code>&lt;/td>
&lt;td style="text-align:left">&lt;code>number&lt;/code>&lt;/td>
&lt;td style="text-align:left">&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>input.pipeline.keepWaitingPipelines&lt;/code>&lt;/td>
&lt;td style="text-align:left">&lt;code>boolean&lt;/code>&lt;/td>
&lt;td style="text-align:left">If false and concurrent pipeline execution is disabled, then the pipelines in the waiting queue gets canceled when the next execution starts.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>input.pipeline.lastModifiedBy&lt;/code>&lt;/td>
&lt;td style="text-align:left">&lt;code>string&lt;/code>&lt;/td>
&lt;td style="text-align:left">The ID of the user that last modified the pipeline.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>input.pipeline.limitConcurrent&lt;/code>&lt;/td>
&lt;td style="text-align:left">&lt;code>boolean&lt;/code>&lt;/td>
&lt;td style="text-align:left">True if only 1 concurrent execution of this pipeline is allowed.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>input.pipeline.name&lt;/code>&lt;/td>
&lt;td style="text-align:left">&lt;code>string&lt;/code>&lt;/td>
&lt;td style="text-align:left">The name of this pipeline.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>input.pipeline.parameterConfig[].default&lt;/code>&lt;/td>
&lt;td style="text-align:left">&lt;code>string&lt;/code>&lt;/td>
&lt;td style="text-align:left">The default value associated with this parameter.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>input.pipeline.parameterConfig[].description&lt;/code>&lt;/td>
&lt;td style="text-align:left">&lt;code>string&lt;/code>&lt;/td>
&lt;td style="text-align:left">(Optional): If supplied, is displayed to users as a tooltip when triggering the pipeline manually. You can include HTML in this field.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>input.pipeline.parameterConfig[].hasOptions&lt;/code>&lt;/td>
&lt;td style="text-align:left">&lt;code>boolean&lt;/code>&lt;/td>
&lt;td style="text-align:left">True if the &lt;strong>Show Options&lt;/strong> checkbox in the parameter is checked.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>input.pipeline.parameterConfig[].label&lt;/code>&lt;/td>
&lt;td style="text-align:left">&lt;code>string&lt;/code>&lt;/td>
&lt;td style="text-align:left">The display name of the parameter.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>input.pipeline.parameterConfig[].name&lt;/code>&lt;/td>
&lt;td style="text-align:left">&lt;code>string&lt;/code>&lt;/td>
&lt;td style="text-align:left">The parameter name that can be used in SpEL.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>input.pipeline.parameterConfig[].options[].value&lt;/code>&lt;/td>
&lt;td style="text-align:left">&lt;code>string&lt;/code>&lt;/td>
&lt;td style="text-align:left">The value for this option in a multi-option parameter.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>input.pipeline.parameterConfig[].pinned&lt;/code>&lt;/td>
&lt;td style="text-align:left">&lt;code>boolean&lt;/code>&lt;/td>
&lt;td style="text-align:left">(Optional): If checked, this parameter is always shown in a pipeline execution view, otherwise it’ll be collapsed by default.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>input.pipeline.parameterConfig[].required&lt;/code>&lt;/td>
&lt;td style="text-align:left">&lt;code>boolean&lt;/code>&lt;/td>
&lt;td style="text-align:left">True if this is this a required parameter.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>input.pipeline.spelEvaluator&lt;/code>&lt;/td>
&lt;td style="text-align:left">&lt;code>string&lt;/code>&lt;/td>
&lt;td style="text-align:left">Which version of the Spring Expression Language (SpEL) is being used to evaluate the SpEL expression.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>input.pipeline.stages[].account&lt;/code>&lt;/td>
&lt;td style="text-align:left">&lt;code>string&lt;/code>&lt;/td>
&lt;td style="text-align:left">The account the stage deploys to. Applies to the following stage types: &lt;code>deployManifest&lt;/code>, &lt;code>scaleManifest&lt;/code>, &lt;code>deploy&lt;/code>.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>input.pipeline.stages[].app&lt;/code>&lt;/td>
&lt;td style="text-align:left">&lt;code>string&lt;/code>&lt;/td>
&lt;td style="text-align:left">The name of the application being deployed. Use &lt;code>input.body.application&lt;/code> instead. Applies to the following stage types: &lt;code>deployManifest&lt;/code>, &lt;code>scaleManifest&lt;/code>.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>input.pipeline.stages[].cloudProvider&lt;/code>&lt;/td>
&lt;td style="text-align:left">&lt;code>string&lt;/code>&lt;/td>
&lt;td style="text-align:left">Which specific cloud provider is being used. Applies to the following stage types: &lt;code>deployManifest&lt;/code>, &lt;code>scaleManifest&lt;/code>, and &lt;code>deploy&lt;/code>.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>input.pipeline.stages[].completeOtherBranchesThenFail&lt;/code>&lt;/td>
&lt;td style="text-align:left">&lt;code>boolean&lt;/code>&lt;/td>
&lt;td style="text-align:left">Prevents any stages that depend on this stage from running, but allows other branches of the pipeline to run. The pipeline is marked as failed once complete. Available for all stages.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>input.pipeline.stages[].continuePipeline&lt;/code>&lt;/td>
&lt;td style="text-align:left">&lt;code>boolean&lt;/code>&lt;/td>
&lt;td style="text-align:left">Continues execution of downstream stages, marking this stage as failed/continuing. Available for all stages.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>input.pipeline.stages[].failPipeline&lt;/code>&lt;/td>
&lt;td style="text-align:left">&lt;code>boolean&lt;/code>&lt;/td>
&lt;td style="text-align:left">Immediately halts execution of all running stages and fails the entire execution if this stage fails. Available for all stages.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>input.pipeline.stages[].instructions&lt;/code>&lt;/td>
&lt;td style="text-align:left">&lt;code>string&lt;/code>&lt;/td>
&lt;td style="text-align:left">Only available on the &lt;code>manual Judgement&lt;/code> stage.&lt;br/> Instructions are shown to the user when making a manual judgment.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>input.pipeline.stages[].location&lt;/code>&lt;/td>
&lt;td style="text-align:left">&lt;code>string&lt;/code>&lt;/td>
&lt;td style="text-align:left">Only available on the &lt;code>scale manifest&lt;/code> stage.&lt;br/> The namespace to scale the manifest in.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>input.pipeline.stages[].manifestArtifactId&lt;/code>&lt;/td>
&lt;td style="text-align:left">&lt;code>string&lt;/code>&lt;/td>
&lt;td style="text-align:left">Only available on the &lt;code>deploy manifest&lt;/code> stage.&lt;br/> The artifact ID to deploy.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>input.pipeline.stages[].manifestName&lt;/code>&lt;/td>
&lt;td style="text-align:left">&lt;code>string&lt;/code>&lt;/td>
&lt;td style="text-align:left">Only available on the &lt;code>scale manifest&lt;/code> stage.&lt;br/> The name of the manifest to scale.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>input.pipeline.stages[].mode&lt;/code>&lt;/td>
&lt;td style="text-align:left">&lt;code>string&lt;/code>&lt;/td>
&lt;td style="text-align:left">Only available on the &lt;code>scale manifest&lt;/code> stage.&lt;br/> Determines whether the stage uses a static or a dynamic selector.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>input.pipeline.stages[].moniker.app&lt;/code>&lt;/td>
&lt;td style="text-align:left">&lt;code>string&lt;/code>&lt;/td>
&lt;td style="text-align:left">The application being deployed.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>input.pipeline.stages[].name&lt;/code>&lt;/td>
&lt;td style="text-align:left">&lt;code>string&lt;/code>&lt;/td>
&lt;td style="text-align:left">The name of the stage.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>input.pipeline.stages[].refId&lt;/code>&lt;/td>
&lt;td style="text-align:left">&lt;code>string&lt;/code>&lt;/td>
&lt;td style="text-align:left">The unique ID for the stage in the stage graph.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>input.pipeline.stages[].replicas&lt;/code>&lt;/td>
&lt;td style="text-align:left">&lt;code>string&lt;/code>&lt;/td>
&lt;td style="text-align:left">Only applicable to the &lt;code>scale manifest&lt;/code> stage.&lt;br/> How many pods should be running after the scaling action.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>input.pipeline.stages[].requisiteStageRefIds.[]&lt;/code>&lt;/td>
&lt;td style="text-align:left">&lt;code>string&lt;/code>&lt;/td>
&lt;td style="text-align:left">The unique IDs of other stages that must complete before this stage.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>input.pipeline.stages[].skipExpressionEvaluation&lt;/code>&lt;/td>
&lt;td style="text-align:left">&lt;code>boolean&lt;/code>&lt;/td>
&lt;td style="text-align:left">If true then SpEL is not evaluated in artifacts referenced by the stage.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>input.pipeline.stages[].source&lt;/code>&lt;/td>
&lt;td style="text-align:left">&lt;code>string&lt;/code>&lt;/td>
&lt;td style="text-align:left">Only applicable to the &lt;code>deploy manifest&lt;/code> stage.&lt;br/> Specifies whether the manifest should be read from an artifact, or provided as text in the pipeline definition.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>input.pipeline.stages[].stageTimeoutMs&lt;/code>&lt;/td>
&lt;td style="text-align:left">&lt;code>number&lt;/code>&lt;/td>
&lt;td style="text-align:left">Only applicable to the &lt;code>manual judgement&lt;/code> stage.&lt;br/> Specifies how long the user has to provide a judgement.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>input.pipeline.stages[].trafficManagement.enabled&lt;/code>&lt;/td>
&lt;td style="text-align:left">&lt;code>boolean&lt;/code>&lt;/td>
&lt;td style="text-align:left">Only applicable to the &lt;code>deploy manifest&lt;/code> stage.&lt;br/> Allow Spinnaker to associate each ReplicaSet deployed in this stage with one or more Services, and manage traffic based on your selected rollout strategy options.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>input.pipeline.stages[].trafficManagement.options.enableTraffic&lt;/code>&lt;/td>
&lt;td style="text-align:left">&lt;code>boolean&lt;/code>&lt;/td>
&lt;td style="text-align:left">Only applicable to the &lt;code>deploy manifest&lt;/code> stage.&lt;br/> Sends client requests to new pods when traffic management is enabled.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>input.pipeline.stages[].type&lt;/code>&lt;/td>
&lt;td style="text-align:left">&lt;code>string&lt;/code>&lt;/td>
&lt;td style="text-align:left">The type of the stage.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>input.pipeline.updateTs&lt;/code>&lt;/td>
&lt;td style="text-align:left">&lt;code>string&lt;/code>&lt;/td>
&lt;td style="text-align:left">The timestamp of the pipeline&amp;rsquo;s last modification.&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h3 id="inputpipelinetrigger">input.pipeline.trigger&lt;/h3>
&lt;p>See &lt;a href="/plugins/policy-engine/use/packages/common-objects/input.pipeline.trigger/">input.pipeline.trigger&lt;/a> for more information.&lt;/p></description></item><item><title>Plugins: spinnaker.deployment</title><link>/plugins/policy-engine/use/packages/spinnaker.deployment/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/plugins/policy-engine/use/packages/spinnaker.deployment/</guid><description/></item><item><title>Plugins: spinnaker.execution</title><link>/plugins/policy-engine/use/packages/spinnaker.execution/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/plugins/policy-engine/use/packages/spinnaker.execution/</guid><description/></item><item><title>Plugins: spinnaker.http.authz</title><link>/plugins/policy-engine/use/packages/spinnaker.http.authz/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/plugins/policy-engine/use/packages/spinnaker.http.authz/</guid><description>
&lt;p>This policy allows you to write policies on Spinnakers core APIs. This allows restricting many actions from the UI, or from custom API clients. Many paths in &lt;code>http.authz&lt;/code> have dedicated packages written for them, and in such cases it is reccomended to write your package against the dedicated package rather than &lt;code>spinnaker.http.authz&lt;/code>. &lt;code>spinnaker.http.authz&lt;/code> is available because it grants the ability to write policy on almost any UI event within spinnaker.&lt;/p>
&lt;p>The following paths in &lt;code>spinnaker.http.authz&lt;/code> all contain the same keys:&lt;/p>
&lt;ul>
&lt;li>&lt;code>applications&lt;/code>&lt;/li>
&lt;li>&lt;code>applications.&amp;lt;app&amp;gt;&lt;/code>&lt;/li>
&lt;li>&lt;code>projects&lt;/code>&lt;/li>
&lt;li>&lt;code>v2/canaryConfig&lt;/code>&lt;/li>
&lt;/ul>
&lt;p>Other paths contain additional keys/data that can be used when writing policies.&lt;/p>
&lt;h2 id="example-payload">Example Payload&lt;/h2>
&lt;details>&lt;summary>Click to expand&lt;/summary>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;input&amp;#34;&lt;/span>: {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;method&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;GET&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;path&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f1fa8c">&amp;#34;applications&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;user&amp;#34;&lt;/span>: {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;isAdmin&amp;#34;&lt;/span>: &lt;span style="color:#ff79c6">false&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;roles&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;name&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;armory-io&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;source&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;GITHUB_TEAMS&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> },
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;name&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;productmanagers&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;source&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;GITHUB_TEAMS&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;username&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;myUserName&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/details>
&lt;h2 id="example-policy">Example Policy&lt;/h2>
&lt;p>This policy simply grants all users access to all APIs. It is a good policy to enable on &lt;code>spinnaker.http.authz&lt;/code> if you do not need a more complicated policy.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-go" data-lang="go">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">package&lt;/span> spinnaker.http.authz
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">default&lt;/span> allow = &lt;span style="color:#ff79c6">true&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>allow {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> input.user.isAdmin &lt;span style="color:#ff79c6">==&lt;/span> &lt;span style="color:#ff79c6">true&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="special-considerations">Special considerations&lt;/h2>
&lt;p>Unlike most other packages, when writing policies against &lt;code>spinnaker.http.authz&lt;/code> you must return a single boolean value named &lt;code>allow&lt;/code>. If &lt;code>allow&lt;/code> is &lt;code>false&lt;/code> then access is denied.&lt;/p>
&lt;p>A second optional parameter named &lt;code>message&lt;/code> can be passed back, and set to a string. If &lt;code>message&lt;/code> is returned and &lt;code>allow&lt;/code> is false, then the given message is returned to the API call, and in many cases displayed to the user if the UI made the API call.&lt;/p>
&lt;h2 id="keys">Keys&lt;/h2>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align:left">Key&lt;/th>
&lt;th>Type&lt;/th>
&lt;th>Description&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align:left">&lt;code>input.method&lt;/code>&lt;/td>
&lt;td>&lt;code>string&lt;/code>&lt;/td>
&lt;td>The HTTP method being used to call the API.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>input.path[]&lt;/code>&lt;/td>
&lt;td>&lt;code>string&lt;/code>&lt;/td>
&lt;td>This array corresponds to the subpath of the API being invoked.&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h3 id="inputuser">input.user&lt;/h3>
&lt;p>This object provides information about the user performing the action. This can be used to restrict actions by role. See &lt;a href="/plugins/policy-engine/use/packages/common-objects/input.user/">input.user&lt;/a> for more information.&lt;/p>
&lt;hr/>
&lt;p>Other objects are listed below:&lt;/p></description></item><item><title>Plugins: spinnaker.ui.entitlements.isFeatureEnabled</title><link>/plugins/policy-engine/use/packages/spinnaker.ui.entitlements.isfeatureenabled/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/plugins/policy-engine/use/packages/spinnaker.ui.entitlements.isfeatureenabled/</guid><description>
&lt;blockquote>
&lt;p>&lt;strong>Note:&lt;/strong> This package is only available if you are running policy engine version 0.1.2 or later.&lt;/p>
&lt;/blockquote>
&lt;p>When hiding an element from the UI via this package, Armory reccomends also disabling it in &lt;code>spinnaker.http.authz&lt;/code>, which will prevent the same users from invoking it via API. &lt;code>spinnaker.http.authz&lt;/code> can access the same fields as this package, but also contains more keys.&lt;/p>
&lt;p>Note: this package only allows hiding functionality entirely. If you instead want to conditionally disable features based off property&amp;rsquo;s pased to them, that can often be done in the &lt;code>spinnaker.http.authz&lt;/code> package.&lt;/p>
&lt;h2 id="example-payload">Example Payload&lt;/h2>
&lt;details>&lt;summary>Click to expand&lt;/summary>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;input&amp;#34;&lt;/span>: {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;body&amp;#34;&lt;/span>: {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;job&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;type&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;createApplication&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> },
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;method&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;POST&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;path&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f1fa8c">&amp;#34;tasks&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;user&amp;#34;&lt;/span>: {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;isAdmin&amp;#34;&lt;/span>: &lt;span style="color:#ff79c6">false&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;roles&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;name&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;armory-io&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;source&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;GITHUB_TEAMS&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> },
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;name&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;productmanagers&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;source&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;GITHUB_TEAMS&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">&amp;#34;username&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;myUserName&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/details>
&lt;h2 id="example-policy">Example Policy&lt;/h2>
&lt;p>Disables the &lt;strong>Configure Application&lt;/strong>, &lt;strong>Create Application&lt;/strong>, and &lt;strong>Create Project&lt;/strong> buttons in the UI for non-admin users unless they have a particular role.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-go" data-lang="go">&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">package&lt;/span> spinnaker.ui.entitlements.isFeatureEnabled
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">default&lt;/span> message=&lt;span style="color:#f1fa8c">&amp;#34;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> allow = message&lt;span style="color:#ff79c6">==&lt;/span>&lt;span style="color:#f1fa8c">&amp;#34;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> message = &lt;span style="color:#f1fa8c">&amp;#34;Your role lacks permissions to update application configuration&amp;#34;&lt;/span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#50fa7b">createsTaskOfType&lt;/span>([&lt;span style="color:#f1fa8c">&amp;#34;updateApplication&amp;#34;&lt;/span>,&lt;span style="color:#f1fa8c">&amp;#34;createApplication&amp;#34;&lt;/span>][_])
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> input.user.isAdmin&lt;span style="color:#ff79c6">!=&lt;/span>&lt;span style="color:#ff79c6">true&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> not &lt;span style="color:#50fa7b">hasRole&lt;/span>(&lt;span style="color:#f1fa8c">&amp;#34;applicationAdmins&amp;#34;&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> message = &lt;span style="color:#f1fa8c">&amp;#34;Your role lacks permissions to create projects&amp;#34;&lt;/span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#50fa7b">createsTaskOfType&lt;/span>(&lt;span style="color:#f1fa8c">&amp;#34;upsertProject&amp;#34;&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> input.user.isAdmin&lt;span style="color:#ff79c6">!=&lt;/span>&lt;span style="color:#ff79c6">true&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> not &lt;span style="color:#50fa7b">hasRole&lt;/span>(&lt;span style="color:#f1fa8c">&amp;#34;projectAdmin&amp;#34;&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#50fa7b">hasRole&lt;/span>(role){
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> input.user.roles[_].name=role
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#50fa7b">createsTaskOfType&lt;/span>(tasktype){
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> input.method=&lt;span style="color:#f1fa8c">&amp;#34;POST&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> input.path=[&lt;span style="color:#f1fa8c">&amp;#34;tasks&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> input.body.job[_].&lt;span style="color:#8be9fd;font-style:italic">type&lt;/span>=tasktype
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="keys">Keys&lt;/h2>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Key&lt;/th>
&lt;th>Type&lt;/th>
&lt;th>Description&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;code>input.body.job[].type&lt;/code>&lt;/td>
&lt;td>&lt;code>string&lt;/code>&lt;/td>
&lt;td>Only available if &lt;code>input.path=[tasks].&lt;/code> Contains the type of the task being performed.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>input.method&lt;/code>&lt;/td>
&lt;td>&lt;code>string&lt;/code>&lt;/td>
&lt;td>The method of the API call for which we are hiding UI elements. This is &amp;lsquo;HTTP Get&amp;rsquo; to hide the projects UI.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>input.path[]&lt;/code>&lt;/td>
&lt;td>&lt;code>string&lt;/code>&lt;/td>
&lt;td>The path to the API call that UI elements are hiden for. This is &amp;ldquo;Projects&amp;rdquo;.&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h3 id="inputuser">input.user&lt;/h3>
&lt;p>This object provides information about the user performing the action. This can be used to restrict actions by role. See &lt;a href="/plugins/policy-engine/use/packages/common-objects/input.user/">input.user&lt;/a> for more information.&lt;/p>
&lt;h2 id="supported-ui-elements">Supported UI Elements&lt;/h2>
&lt;p>The following table provides a summary of the values to check in the policy to enable/disable different UI elements.&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>UI Element&lt;/th>
&lt;th>input.path.&lt;/th>
&lt;th>input.method&lt;/th>
&lt;th>input.body.job[].type&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>Create Application Button&lt;/td>
&lt;td>&lt;code>[&amp;quot;tasks&amp;quot;]&lt;/code>&lt;/td>
&lt;td>POST&lt;/td>
&lt;td>createApplication&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Application Configuration Button&lt;/td>
&lt;td>&lt;code>[&amp;quot;tasks&amp;quot;]&lt;/code>&lt;/td>
&lt;td>POST&lt;/td>
&lt;td>updateApplication&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Create Project Button&lt;/td>
&lt;td>&lt;code>[&amp;quot;tasks&amp;quot;]&lt;/code>&lt;/td>
&lt;td>POST&lt;/td>
&lt;td>upsertProject&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Project Configuration Button&lt;/td>
&lt;td>&lt;code>[&amp;quot;projects&amp;quot;]&lt;/code>&lt;/td>
&lt;td>GET&lt;/td>
&lt;td>n/a&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table></description></item><item><title>Plugins: Common Objects</title><link>/plugins/policy-engine/use/packages/common-objects/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/plugins/policy-engine/use/packages/common-objects/</guid><description/></item></channel></rss>