<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title>Operator Guides on Spinnaker</title>
		<link>https://deploy-preview-637--spinnaker-io.netlify.app/docs/guides/operator/</link>
		<description>Recent content in Operator Guides on Spinnaker</description>
		<generator>Hugo</generator>
		<language>en</language>
		
		
		
		
			<atom:link href="https://deploy-preview-637--spinnaker-io.netlify.app/docs/guides/operator/index.xml" rel="self" type="application/rss+xml" />
			<item>
				<title>Custom CAs for Webhooks</title>
				<link>https://deploy-preview-637--spinnaker-io.netlify.app/docs/guides/operator/webhook-custom-trust-store/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://deploy-preview-637--spinnaker-io.netlify.app/docs/guides/operator/webhook-custom-trust-store/</guid>
				<description>&lt;h2 id=&#34;overview&#34;&gt;Overview&lt;/h2&gt;&#xA;&lt;p&gt;&#xA;&lt;a href=&#34;https://deploy-preview-637--spinnaker-io.netlify.app/docs/reference/pipeline/stages/#webhook&#34;&gt;Webhook stages&lt;/a&gt;&#xA; enable Spinnaker to make&#xA;HTTP(S) calls to external web services. If the configured webhook URL has the&#xA;&lt;code&gt;https://&lt;/code&gt; scheme, Spinnaker will use TLS to communicate with the external&#xA;server. Spinnaker will attempt to validate the certificate presented by the&#xA;server by building a chain of trust back to a trusted certification authority&#xA;(CA) and will refuse to connect if the certificate cannot be validated.&lt;/p&gt;&#xA;&lt;p&gt;By default Spinnaker uses the trust store provided by the JVM as its source of&#xA;trusted CAs. The default behavior is sufficient for webhooks to public-facing&#xA;servers where it is possible to build a chain of trust back to a root CA.&#xA;Internal servers, however, may have certificates issued by a company-specific CA&#xA;that is not trusted by a root CA. Webhooks to these servers over &lt;code&gt;https://&lt;/code&gt; will&#xA;fail using the default configuration.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Custom Job Stages</title>
				<link>https://deploy-preview-637--spinnaker-io.netlify.app/docs/guides/operator/custom-job-stages/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://deploy-preview-637--spinnaker-io.netlify.app/docs/guides/operator/custom-job-stages/</guid>
				<description>&lt;p&gt;For users of Kubernetes or Titus, Custom Job Stages offer a native solution for enhancing Spinnaker&amp;rsquo;s functionality with the power of containers. Custom Job Stages enable operators to extend Spinnaker without having to maintain a custom build of Orca.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;Note: Custom Job stages are only supported for the Kubernetes and Titus providers.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;how-it-works&#34;&gt;How it works&lt;/h2&gt;&#xA;&lt;p&gt;At its core, Custom Job Stages use the &#xA;&lt;a href=&#34;https://deploy-preview-637--spinnaker-io.netlify.app/docs/reference/pipeline/stages/#run-job&#34;&gt;Run Job stage&lt;/a&gt;&#xA; to start a Task (Titus) or Job (Kubernetes) to perform some type of work. These jobs are defined as configuration for Orca and registered when the application starts. When used in a pipeline, Orca takes this configuration, generates a Run Job stage and then executes it. To support a more native experience, we provide configuration options for things like stage name, description and parameters so that this stage feels less like a Run Job stage and more like an out of the box stage.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Custom Webhook Stages</title>
				<link>https://deploy-preview-637--spinnaker-io.netlify.app/docs/guides/operator/custom-webhook-stages/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://deploy-preview-637--spinnaker-io.netlify.app/docs/guides/operator/custom-webhook-stages/</guid>
				<description>&lt;p&gt;Custom webhook stages provide a simple, yet powerful, way of adding custom stages to Spinnaker. These stages are typically used to make quick API calls to an external system as part of a pipeline. Instead of extending the various components through code, users can simply add configuration to Orca for these stages. They appear in the UI as if they were a native stage.&lt;/p&gt;&#xA;&lt;h2 id=&#34;creating-a-custom-webhook-stage&#34;&gt;Creating a Custom Webhook Stage&lt;/h2&gt;&#xA;&lt;p&gt;To set up a custom webhook stage, you&amp;rsquo;ll need to modify the &lt;code&gt;orca-local.yml&lt;/code&gt; configuration file. The &lt;code&gt;webhook.preconfigured&lt;/code&gt; property allows you to define multiple webhook stages. Here&amp;rsquo;s an example configuration:&lt;/p&gt;</description>
			</item>
			<item>
				<title>Echo: Cassandra to In-Memory</title>
				<link>https://deploy-preview-637--spinnaker-io.netlify.app/docs/guides/operator/echo-cassandra-to-in-memory/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://deploy-preview-637--spinnaker-io.netlify.app/docs/guides/operator/echo-cassandra-to-in-memory/</guid>
				<description>&lt;p&gt;Echo&amp;rsquo;s scheduler can be run completely in-memory. On startup or redeploy, echo will check cron schedules to see if it needs to retroactively execute any missed triggers. This migration only requires configuration changes.&lt;/p&gt;&#xA;&lt;h2 id=&#34;1-disable-cassandra-in-echoyml&#34;&gt;1. Disable Cassandra in echo.yml&lt;/h2&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;spinnaker:&#xA;  cassandra:&#xA;    enabled: false&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;2-enable-in-memory-backend-in-echoyml&#34;&gt;2. Enable in-memory backend in echo.yml&lt;/h2&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;spinnaker:&#xA;  inMemory:&#xA;    enabled: true&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;3-enable-the-scheduler-compensation-job-in-echoyml&#34;&gt;3. Enable the scheduler compensation job in echo.yml&lt;/h2&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;scheduler:&#xA;  compensationJob:&#xA;    enabled: true&#xA;    windowMs: 1800000 # optional&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;The &lt;code&gt;windowMs&lt;/code&gt; property dictates how far in the past echo will look to find missed schedules. By default this is 30 minutes.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Front50: Cassandra to Object Store (S3, Azure, or GCS)</title>
				<link>https://deploy-preview-637--spinnaker-io.netlify.app/docs/guides/operator/front50-cassandra-to-obj-store/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://deploy-preview-637--spinnaker-io.netlify.app/docs/guides/operator/front50-cassandra-to-obj-store/</guid>
				<description>&lt;p&gt;Cassandra is no longer an actively maintained or supported persistence store.&lt;/p&gt;&#xA;&lt;p&gt;A migration to S3, GCS, or AZS is &lt;strong&gt;recommended&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;1-create-a-bucket-and-folder&#34;&gt;1. Create a bucket and folder&lt;/h2&gt;&#xA;&lt;p&gt;Make up a bucket name (or account name if using Azure) that is consistent with the naming policies for the underlying storage service. For purposes of this document, we&amp;rsquo;ll pick ${USER}-spinnaker since many storage services (including Amazon S3, Google GCS, and Azure AZS) require globally unique names.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Front50: Cassandra to Redis</title>
				<link>https://deploy-preview-637--spinnaker-io.netlify.app/docs/guides/operator/front50-cassandra-to-redis/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://deploy-preview-637--spinnaker-io.netlify.app/docs/guides/operator/front50-cassandra-to-redis/</guid>
				<description>&lt;h2 id=&#34;1-install-redis&#34;&gt;1. Install Redis&lt;/h2&gt;&#xA;&lt;h2 id=&#34;2-disable-cassandra-in-front50yml&#34;&gt;2. Disable Cassandra in front50.yml&lt;/h2&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;cassandra:&#xA;  enabled: false&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;3-enable-redis-in-front50yml&#34;&gt;3. Enable Redis in front50.yml&lt;/h2&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;spinnaker:&#xA;  redis:&#xA;    enabled: true&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;4-export-existing-applications-pipelines-strategies-notifications-and-projects&#34;&gt;4. Export existing applications, pipelines, strategies, notifications and projects&lt;/h2&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#!/bin/sh&#xA;&#xA;rm applications.json&#xA;curl http://FRONT50_HOSTNAME:FRONT50_PORT/global/applications | json_pp &amp;gt; applications.json&#xA;&#xA;rm pipelines.json&#xA;curl http://FRONT50_HOSTNAME:FRONT50_PORT/pipelines | json_pp &amp;gt; pipelines.json&#xA;&#xA;rm strategies.json&#xA;curl http://FRONT50_HOSTNAME:FRONT50_PORT/strategies | json_pp &amp;gt; strategies.json&#xA;&#xA;rm notifications.json&#xA;curl http://FRONT50_HOSTNAME:FRONT50_PORT/notifications | json_pp &amp;gt; notifications.json&#xA;&#xA;rm projects.json&#xA;curl http://FRONT50_HOSTNAME:FRONT50_PORT/v2/projects | json_pp | jq &amp;#39;._embedded.projects&amp;#39; &amp;gt; projects.json&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;5-deploy-new-front50&#34;&gt;5. Deploy new Front50&lt;/h2&gt;&#xA;&lt;h2 id=&#34;6-import-applications-pipelines-strategies-notifications-and-projects&#34;&gt;6. Import applications, pipelines, strategies, notifications and projects&lt;/h2&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#!/bin/sh&#xA;&#xA;curl -X POST -H &amp;#34;Content-type: application/json&amp;#34; --data-binary @&amp;#34;notifications.json&amp;#34; http://FRONT50_HOSTNAME:FRONT50_PORT/notifications/batchUpdate&#xA;curl -X POST -H &amp;#34;Content-type: application/json&amp;#34; --data-binary @&amp;#34;strategies.json&amp;#34; http://FRONT50_HOSTNAME:FRONT50_PORT/strategies/batchUpdate&#xA;curl -X POST -H &amp;#34;Content-type: application/json&amp;#34; --data-binary @&amp;#34;pipelines.json&amp;#34; http://FRONT50_HOSTNAME:FRONT50_PORT/pipelines/batchUpdate&#xA;curl -X POST -H &amp;#34;Content-type: application/json&amp;#34; --data-binary @&amp;#34;applications.json&amp;#34; http://FRONT50_HOSTNAME:FRONT50_PORT/global/applications/batchUpdate&#xA;curl -X POST -H &amp;#34;Content-type: application/json&amp;#34; --data-binary @&amp;#34;projects.json&amp;#34; http://FRONT50_HOSTNAME:FRONT50_PORT/v2/projects/batchUpdate&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
			</item>
			<item>
				<title>Hiding Stages</title>
				<link>https://deploy-preview-637--spinnaker-io.netlify.app/docs/guides/operator/hiding-stages/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://deploy-preview-637--spinnaker-io.netlify.app/docs/guides/operator/hiding-stages/</guid>
				<description>&lt;p&gt;Stages that are not provider-specific will be available by default. To hide specific stages&#xA;from end-users, set the &lt;code&gt;hiddenStages&lt;/code&gt; property in Deck&amp;rsquo;s &#xA;&lt;a href=&#34;https://github.com/spinnaker/spinnaker/blob/main/spinnaker-kustomize/overlays/config/files/settings-local.js&#34; target=&#34;_blank&#34;&gt;settings-local.js&lt;/a&gt;&#xA;&#xA;to a list of the keys of stages you wish to hide. For example, to hide the Gremlin and Travis&#xA;stages, include the following in &lt;code&gt;settings-local.js&lt;/code&gt;:&lt;/p&gt;&#xA;&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;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-js&#34; data-lang=&#34;js&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#204a87&#34;&gt;window&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;spinnakerSettings&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;hiddenStages&lt;/span&gt; &lt;span style=&#34;color:#ce5c00;font-weight:bold&#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;#39;gremlin&amp;#39;&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;#39;travis&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;];&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
			</item>
			<item>
				<title>Orca: Redis to SQL Migration</title>
				<link>https://deploy-preview-637--spinnaker-io.netlify.app/docs/guides/operator/orca-redis-to-sql/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://deploy-preview-637--spinnaker-io.netlify.app/docs/guides/operator/orca-redis-to-sql/</guid>
				<description>&lt;p&gt;If you are not migrating an existing Orca deployment, refer to &#xA;&lt;a href=&#34;https://deploy-preview-637--spinnaker-io.netlify.app/docs/setup/productionize/persistence/orca-sql/&#34;&gt;Orca SQL Setup&lt;/a&gt;&#xA; instead.&lt;/p&gt;&#xA;&lt;h2 id=&#34;migrate-from-redis-to-sql&#34;&gt;Migrate from Redis to SQL&lt;/h2&gt;&#xA;&lt;p&gt;Migrating without downtime from Redis to SQL is a three-step process:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;a href=&#34;#enable-dualexecutionrepository&#34;&gt;Deploy Orca with the &lt;code&gt;DualExecutionRepository&lt;/code&gt; writing to both Redis and SQL.&lt;/a&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;a href=&#34;#deploy-a-migration-cluster&#34;&gt;Deploy a new Orca cluster with migrators enabled and queue processing disabled.&lt;/a&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;a href=&#34;#disable-dualexecutionrepository&#34;&gt;Once all executions have been migrated, delete migration cluster and disable &lt;code&gt;DualExecutionRepository&lt;/code&gt;.&lt;/a&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;When &lt;code&gt;DualExecutionRepository&lt;/code&gt; is running, writes will be routed to either Redis&#xA;or SQL. Executions will only be migrated to SQL once they&amp;rsquo;ve completed (either&#xA;successfully or terminally): This keeps the migration story simple. As such, the&#xA;migration agents will need to run for awhile. At Netflix, we ran the migration&#xA;cluster for two weeks, as we had long pipeline executions due to canaries. You&#xA;may only need to run the migration cluster for an hour.&lt;/p&gt;</description>
			</item>
	</channel>
</rss>
