diff --git a/stable/spinnaker/.helmignore b/stable/spinnaker/.helmignore
new file mode 100644
index 0000000000..f0c1319444
--- /dev/null
+++ b/stable/spinnaker/.helmignore
@@ -0,0 +1,21 @@
+# Patterns to ignore when building packages.
+# This supports shell glob matching, relative path matching, and
+# negation (prefixed with !). Only one pattern per line.
+.DS_Store
+# Common VCS dirs
+.git/
+.gitignore
+.bzr/
+.bzrignore
+.hg/
+.hgignore
+.svn/
+# Common backup files
+*.swp
+*.bak
+*.tmp
+*~
+# Various IDEs
+.project
+.idea/
+*.tmproj
diff --git a/stable/spinnaker/Chart.yaml b/stable/spinnaker/Chart.yaml
new file mode 100644
index 0000000000..23442dcb3e
--- /dev/null
+++ b/stable/spinnaker/Chart.yaml
@@ -0,0 +1,11 @@
+apiVersion: v1
+description: A Helm chart for Kubernetes
+name: spinnaker
+version: 0.1.0
+home: http://spinnaker.io/
+sources:
+- https://github.com/spinnaker
+- https://github.com/viglesiasce/images
+maintainers:
+- name: Vic Iglesias
+ email: viglesias@google.com
diff --git a/stable/spinnaker/README.md b/stable/spinnaker/README.md
new file mode 100644
index 0000000000..ef62adeb05
--- /dev/null
+++ b/stable/spinnaker/README.md
@@ -0,0 +1,35 @@
+# Spinnaker Chart
+
+[Spinnaker](http://spinnaker.io/) is a resilient service mesh for cloud native apps
+
+## Chart Details
+This chart will provision a fully functional and fully featured Spinnaker installation
+that can deploy and manage applications in the cluster that it is deployed to.
+
+Redis and Minio are used as the stores for Spinnaker state.
+
+For more information on Spinnaker and its capabilities, see it's [documentation](http://www.spinnaker.io/docs).
+
+## Installing the Chart
+
+To install the chart with the release name `my-release`:
+
+```bash
+$ helm install --name my-release stable/spinnaker
+```
+
+Note that this chart pulls in many different Docker images so can take a while to fully install.
+
+## Configuration
+
+Configurable values are documented in the `values.yaml`.
+
+Specify each parameter using the `--set key=value[,key=value]` argument to `helm install`.
+
+Alternatively, a YAML file that specifies the values for the parameters can be provided while installing the chart. For example,
+
+```bash
+$ helm install --name my-release -f values.yaml stable/spinnaker
+```
+
+> **Tip**: You can use the default [values.yaml](values.yaml)
diff --git a/stable/spinnaker/config/clouddriver.yml b/stable/spinnaker/config/clouddriver.yml
new file mode 100644
index 0000000000..bf1e205475
--- /dev/null
+++ b/stable/spinnaker/config/clouddriver.yml
@@ -0,0 +1,83 @@
+server:
+ port: ${services.clouddriver.port:7002}
+ address: ${services.clouddriver.host:localhost}
+
+redis:
+ connection: ${services.redis.connection:redis://localhost:6379}
+
+udf:
+ # Controls whether UserDataProviders are used to populate user data of new
+ # server groups. If false, user data is copied over from ancestor server
+ # groups on both CopyLastAsgAtomicOperation and
+ # ModifyAsgLaunchConfigurationOperation (only if no user data is provided
+ # on the given request).
+ enabled: ${services.clouddriver.aws.udf.enabled:true}
+
+default:
+ account:
+ env: ${providers.aws.primaryCredentials.name}
+
+aws:
+ # AWS Credentials are passed either as environment variables or through
+ # a standard AWS file $HOME/.aws/credentials
+ # See providers.aws.primaryCredentials in spinnaker.yml for more
+ # info on setting environment variables.
+ enabled: ${providers.aws.enabled:false}
+ defaults:
+ iamRole: ${provider.aws.defaultIAMRole:BaseIAMRole}
+ defaultRegions:
+ - name: ${providers.aws.defaultRegion:us-east-1}
+ defaultFront50Template: ${services.front50.baseUrl}
+ defaultKeyPairTemplate: ${providers.aws.defaultKeyPairTemplate}
+
+azure:
+ enabled: ${providers.azure.enabled:false}
+
+ accounts:
+ - name: ${providers.azure.primaryCredentials.name}
+ clientId: ${providers.azure.primaryCredentials.clientId}
+ appKey: ${providers.azure.primaryCredentials.appKey}
+ tenantId: ${providers.azure.primaryCredentials.tenantId}
+ subscriptionId: ${providers.azure.primaryCredentials.subscriptionId}
+
+google:
+ enabled: ${providers.google.enabled:false}
+
+ accounts:
+ - name: ${providers.google.primaryCredentials.name}
+ project: ${providers.google.primaryCredentials.project}
+ jsonPath: ${providers.google.primaryCredentials.jsonPath}
+
+cf:
+ enabled: ${providers.cf.enabled:false}
+
+ accounts:
+ - name: ${providers.cf.primaryCredentials.name}
+ api: ${providers.cf.primaryCredentials.api}
+ console: ${providers.cf.primaryCredentials.console}
+ org: ${providers.cf.defaultOrg}
+ space: ${providers.cf.defaultSpace}
+ username: ${providers.cf.account.name:}
+ password: ${providers.cf.account.password:}
+
+kubernetes:
+ enabled: ${providers.kubernetes.enabled:false}
+ accounts:
+ - name: ${providers.kubernetes.primaryCredentials.name}
+ serviceAccount: true
+ dockerRegistries:
+ - accountName: ${providers.kubernetes.primaryCredentials.dockerRegistryAccount}
+
+dockerRegistry:
+ enabled: ${providers.dockerRegistry.enabled:false}
+ accounts:
+ - name: ${providers.dockerRegistry.primaryCredentials.name}
+ address: ${providers.dockerRegistry.primaryCredentials.address}
+ username: ${providers.dockerRegistry.primaryCredentials.username:}
+ passwordFile: ${providers.dockerRegistry.primaryCredentials.passwordFile:}
+ repositories:
+ - ${providers.dockerRegistry.primaryCredentials.repository}
+
+credentials:
+ primaryAccountTypes: ${providers.aws.primaryCredentials.name}, ${providers.google.primaryCredentials.name}, ${providers.cf.primaryCredentials.name}, ${providers.azure.primaryCredentials.name}
+ challengeDestructiveActionsEnvironments: ${providers.aws.primaryCredentials.name}, ${providers.google.primaryCredentials.name}, ${providers.cf.primaryCredentials.name}, ${providers.azure.primaryCredentials.name}
diff --git a/stable/spinnaker/config/echo-local.yml b/stable/spinnaker/config/echo-local.yml
new file mode 100644
index 0000000000..b554bfa3c6
--- /dev/null
+++ b/stable/spinnaker/config/echo-local.yml
@@ -0,0 +1,62 @@
+server:
+ port: ${services.echo.port:8089}
+ address: 0.0.0.0
+
+cassandra:
+ enabled: false
+
+spinnaker:
+ inMemory:
+ enabled: true
+ cassandra:
+ enabled: false
+
+front50:
+ baseUrl: ${services.front50.baseUrl:http://localhost:8080}
+
+orca:
+ baseUrl: ${services.orca.baseUrl:http://localhost:8083}
+
+endpoints.health.sensitive: false
+
+slack:
+ enabled: ${services.echo.notifications.slack.enabled:false}
+ token: ${services.echo.notifications.slack.token}
+
+spring:
+ mail:
+ host: ${services.echo.notifications.mail.host}
+ port: ${services.echo.notifications.mail.port}
+ username: ${services.echo.notifications.mail.username}
+ password: ${services.echo.notifications.mail.password}
+ properties:
+ mail:
+ smtp:
+ auth: ${services.echo.notifications.mail.auth:true}
+ ssl:
+ enable: ${services.echo.notifications.mail.ssl:true}
+
+mail:
+ enabled: ${services.echo.notifications.mail.enabled:false}
+ host: ${services.echo.notifications.mail.host}
+ from: ${services.echo.notifications.mail.fromAddress}
+
+hipchat:
+ enabled: ${services.echo.notifications.hipchat.enabled:false}
+ baseUrl: ${services.echo.notifications.hipchat.url}
+ token: ${services.echo.notifications.hipchat.token}
+
+twilio:
+ enabled: ${services.echo.notifications.sms.enabled:false}
+ baseUrl: ${services.echo.notifications.sms.url:https://api.twilio.com/}
+ account: ${services.echo.notifications.sms.account}
+ token: ${services.echo.notifications.sms.token}
+ from: ${services.echo.notifications.sms.from}
+
+scheduler:
+ enabled: ${services.echo.cron.enabled:true}
+ threadPoolSize: 20
+ triggeringEnabled: true
+ pipelineConfigsPoller:
+ enabled: true
+ pollingIntervalMs: 30000
diff --git a/stable/spinnaker/config/echo.yml b/stable/spinnaker/config/echo.yml
new file mode 100644
index 0000000000..988b5ff1dc
--- /dev/null
+++ b/stable/spinnaker/config/echo.yml
@@ -0,0 +1,66 @@
+server:
+ port: ${services.echo.port:8089}
+ address: 0.0.0.0
+
+cassandra:
+ enabled: false
+ embedded: true
+ host: ${services.cassandra.host:localhost}
+
+spinnaker:
+ baseUrl: ${services.deck.baseUrl}
+ cassandra:
+ enabled: ${services.echo.cassandra.enabled:true}
+ inMemory:
+ enabled: ${services.echo.inMemory.enabled:false}
+
+front50:
+ baseUrl: ${services.front50.baseUrl:http://localhost:8080}
+
+orca:
+ baseUrl: ${services.orca.baseUrl:http://localhost:8083}
+
+endpoints.health.sensitive: false
+
+slack:
+ enabled: ${services.echo.notifications.slack.enabled:false}
+ token: ${services.echo.notifications.slack.token}
+
+spring:
+ mail:
+ host: ${services.echo.notifications.mail.host}
+ port: ${services.echo.notifications.mail.port}
+ username: ${services.echo.notifications.mail.username}
+ password: ${services.echo.notifications.mail.password}
+ properties:
+ mail:
+ smtp:
+ auth: ${services.echo.notifications.mail.auth:true}
+ ssl:
+ enable: ${services.echo.notifications.mail.ssl:true}
+mail:
+ enabled: ${services.echo.notifications.mail.enabled:false}
+ host: ${services.echo.notifications.mail.host}
+ from: ${services.echo.notifications.mail.fromAddress}
+
+hipchat:
+ enabled: ${services.echo.notifications.hipchat.enabled:false}
+ baseUrl: ${services.echo.notifications.hipchat.url}
+ token: ${services.echo.notifications.hipchat.token}
+
+twilio:
+ enabled: ${services.echo.notifications.sms.enabled:false}
+ baseUrl: ${services.echo.notifications.sms.url:https://api.twilio.com/}
+ account: ${services.echo.notifications.sms.account}
+ token: ${services.echo.notifications.sms.token}
+ from: ${services.echo.notifications.sms.from}
+
+scheduler:
+ enabled: ${services.echo.cron.enabled:true}
+ threadPoolSize: 20
+ triggeringEnabled: true
+ pipelineConfigsPoller:
+ enabled: true
+ pollingIntervalMs: 30000
+ cron:
+ timezone: ${services.echo.cron.timezone}
diff --git a/stable/spinnaker/config/fiat.yml b/stable/spinnaker/config/fiat.yml
new file mode 100644
index 0000000000..4b94945f30
--- /dev/null
+++ b/stable/spinnaker/config/fiat.yml
@@ -0,0 +1,10 @@
+server:
+ port: ${services.fiat.port:7003}
+ address: 0.0.0.0
+
+redis:
+ connection: ${services.redis.connection:redis://localhost:6379}
+
+auth:
+ getAll:
+ enabled: false
diff --git a/stable/spinnaker/config/front50-local.yml b/stable/spinnaker/config/front50-local.yml
new file mode 100644
index 0000000000..ef65c67f59
--- /dev/null
+++ b/stable/spinnaker/config/front50-local.yml
@@ -0,0 +1,27 @@
+server:
+ port: ${services.front50.port:8080}
+ address: 0.0.0.0
+
+aws:
+ simpleDBEnabled: ${providers.aws.simpleDBEnabled:false}
+ defaultSimpleDBDomain: ${providers.aws.defaultSimpleDBDomain}
+
+cassandra:
+ enabled: false
+
+spinnaker:
+ cassandra:
+ enabled: false
+ redis:
+ enabled: false
+ gcs:
+ enabled: ${services.front50.gcs.enabled}
+ project: ${services.front50.gcs.project}
+ jsonPath: /root/.kube/account.json # Don't change this
+ rootFolder: ${services.front50.bucket_root}
+ bucket: ${services.front50.storage_bucket}
+ s3:
+ enabled: ${services.front50.s3.enabled}
+ rootFolder: ${services.front50.bucket_root}
+ bucket: ${services.front50.storage_bucket}
+ endpoint: ${services.front50.s3.endpoint}
diff --git a/stable/spinnaker/config/front50.yml b/stable/spinnaker/config/front50.yml
new file mode 100644
index 0000000000..b4282fcd29
--- /dev/null
+++ b/stable/spinnaker/config/front50.yml
@@ -0,0 +1,39 @@
+server:
+ port: ${services.front50.port:8080}
+ address: ${services.front50.host:localhost}
+
+cassandra:
+ enabled: ${services.front50.cassandra.enabled:true}
+ embedded: ${services.cassandra.embedded:false}
+ host: ${services.cassandra.host:localhost}
+
+aws:
+ simpleDBEnabled: ${providers.aws.simpleDBEnabled:false}
+ defaultSimpleDBDomain: ${providers.aws.defaultSimpleDBDomain}
+
+spinnaker:
+ cassandra:
+ enabled: ${services.front50.cassandra.enabled:true}
+ host: ${services.cassandra.host:localhost}
+ port: ${services.cassandra.port:9042}
+ cluster: ${services.cassandra.cluster:CASS_SPINNAKER}
+ keyspace: front50
+ name: global
+
+ redis:
+ enabled: ${services.front50.redis.enabled:false}
+
+ gcs:
+ enabled: ${services.front50.gcs.enabled:false}
+ bucket: ${services.front50.storage_bucket:}
+ # See https://cloud.google.com/storage/docs/managing-buckets#manage-class-location
+ bucketLocation: ${services.front50.bucket_location:}
+ rootFolder: ${services.front50.bucket_root:front50}
+ project: ${providers.google.primaryCredentials.project}
+ jsonPath: ${providers.google.primaryCredentials.jsonPath}
+
+ aws:
+ enabled: ${services.front50.s3.enabled:false}
+ bucket: ${services.front50.storage_bucket:}
+ rootFolder: ${services.front50.bucket_root:front50}
+ endpoint: ${services.front50.s3.endpoint:}
diff --git a/stable/spinnaker/config/gate-local.yml b/stable/spinnaker/config/gate-local.yml
new file mode 100644
index 0000000000..c362da1805
--- /dev/null
+++ b/stable/spinnaker/config/gate-local.yml
@@ -0,0 +1,25 @@
+server:
+ port: ${services.gate.port:8084}
+ address: 0.0.0.0
+
+# Circular references since we're already using 'services'
+# services:
+# clouddriver:
+# baseUrl: ${services.clouddriver.baseUrl:localhost:7002}
+# orca:
+# baseUrl: ${services.orca.baseUrl:localhost:8083}
+# front50:
+# baseUrl: ${services.front50.baseUrl:localhost:8080}
+# #optional services:
+# echo:
+# enabled: ${services.echo.enabled:true}
+# baseUrl: ${services.echo.baseUrl:8089}
+# flapjack:
+# enabled: ${services.flapjack.enabled:false}
+# igor:
+# enabled: ${services.igor.enabled:false}
+# baseUrl: ${services.igor.baseUrl:8088}
+
+redis:
+ connection: ${services.redis.connection}
+
diff --git a/stable/spinnaker/config/gate.yml b/stable/spinnaker/config/gate.yml
new file mode 100644
index 0000000000..dfe4a48ced
--- /dev/null
+++ b/stable/spinnaker/config/gate.yml
@@ -0,0 +1,24 @@
+server:
+ port: ${services.gate.port:8084}
+ address: 0.0.0.0
+
+# Circular references since we're already using 'services'
+# services:
+# clouddriver:
+# baseUrl: ${services.clouddriver.baseUrl:localhost:7002}
+# orca:
+# baseUrl: ${services.orca.baseUrl:localhost:8083}
+# front50:
+# baseUrl: ${services.front50.baseUrl:localhost:8080}
+# #optional services:
+# echo:
+# enabled: ${services.echo.enabled:true}
+# baseUrl: ${services.echo.baseUrl:8089}
+# flapjack:
+# enabled: ${services.flapjack.enabled:false}
+# igor:
+# enabled: ${services.igor.enabled:false}
+# baseUrl: ${services.igor.baseUrl:8088}
+
+redis:
+ connection: ${services.redis.connection}
diff --git a/stable/spinnaker/config/igor-local.yml b/stable/spinnaker/config/igor-local.yml
new file mode 100644
index 0000000000..53154cbee0
--- /dev/null
+++ b/stable/spinnaker/config/igor-local.yml
@@ -0,0 +1,25 @@
+server:
+ port: ${services.igor.port:8088}
+ address: 0.0.0.0
+
+jenkins:
+ enabled: ${services.jenkins.enabled:false}
+ masters:
+ - name: default
+ address: ${services.jenkins.defaultMaster.baseUrl}
+ username: ${services.jenkins.defaultMaster.username}
+ password: ${services.jenkins.defaultMaster.password}
+
+dockerRegistry:
+ enabled: true
+
+redis:
+ connection: ${services.redis.connection:redis://localhost:6379}
+
+# Igor depends on Clouddriver and Echo. These are normally configured
+# in spinnaker[-local].yml (if present), otherwise, uncomment this.
+# services:
+# clouddriver:
+# baseUrl: ${services.clouddriver.baseUrl}
+# echo:
+# baseUrl: ${services.echo.baseUrl}
diff --git a/stable/spinnaker/config/igor.yml b/stable/spinnaker/config/igor.yml
new file mode 100644
index 0000000000..9e0b634a85
--- /dev/null
+++ b/stable/spinnaker/config/igor.yml
@@ -0,0 +1,33 @@
+server:
+ port: ${services.igor.port:8088}
+ address: 0.0.0.0
+
+jenkins:
+ enabled: ${services.jenkins.enabled:false}
+ masters:
+ - name: default
+ address: ${services.jenkins.defaultMaster.baseUrl}
+ username: ${services.jenkins.defaultMaster.username}
+ password: ${services.jenkins.defaultMaster.password}
+
+travis:
+ enabled: ${services.travis.enabled:false}
+ masters:
+ - name: ${services.travis.defaultMaster.name}
+ baseUrl: ${services.travis.defaultMaster.baseUrl}
+ address: ${services.travis.defaultMaster.address}
+ githubToken: ${services.travis.defaultMaster.githubToken}
+
+dockerRegistry:
+ enabled: true
+
+redis:
+ connection: ${services.redis.connection:redis://localhost:6379}
+
+# Igor depends on Clouddriver and Echo. These are normally configured
+# in spinnaker[-local].yml (if present), otherwise, uncomment this.
+# services:
+# clouddriver:
+# baseUrl: ${services.clouddriver.baseUrl}
+# echo:
+# baseUrl: ${services.echo.baseUrl}
diff --git a/stable/spinnaker/config/orca-local.yml b/stable/spinnaker/config/orca-local.yml
new file mode 100644
index 0000000000..9d14918e24
--- /dev/null
+++ b/stable/spinnaker/config/orca-local.yml
@@ -0,0 +1,39 @@
+server:
+ port: ${services.orca.port:8083}
+ address: 0.0.0.0
+
+oort:
+ baseUrl: ${services.oort.baseUrl:localhost:7002}
+front50:
+ baseUrl: ${services.front50.baseUrl:localhost:8080}
+mort:
+ baseUrl: ${services.mort.baseUrl:localhost:7002}
+kato:
+ baseUrl: ${services.kato.baseUrl:localhost:7002}
+bakery:
+ baseUrl: ${services.bakery.baseUrl:localhost:8087}
+ extractBuildDetails: ${services.bakery.extractBuildDetails:true}
+echo:
+ enabled: ${services.echo.enabled:false}
+ baseUrl: ${services.echo.baseUrl:8089}
+
+igor:
+ baseUrl: ${services.igor.baseUrl:8088}
+
+# TODO(duftler): Remove this once flex is conditionally-enabled in orca.
+flex:
+ baseUrl: http://not-a-host
+
+default:
+ bake:
+ account: ${providers.aws.primaryCredentials.name}
+ securityGroups:
+ vpc:
+ securityGroups:
+
+redis:
+ connection: ${services.redis.connection}
+
+script:
+ master: default # name of Jenkins master in Spinnaker
+ job: run-script # from Jenkins job configuration
diff --git a/stable/spinnaker/config/orca.yml b/stable/spinnaker/config/orca.yml
new file mode 100644
index 0000000000..b568c20303
--- /dev/null
+++ b/stable/spinnaker/config/orca.yml
@@ -0,0 +1,45 @@
+server:
+ port: ${services.orca.port:8083}
+ address: 0.0.0.0
+
+oort:
+ baseUrl: ${services.oort.baseUrl:localhost:7002}
+front50:
+ baseUrl: ${services.front50.baseUrl:localhost:8080}
+mort:
+ baseUrl: ${services.mort.baseUrl:localhost:7002}
+kato:
+ baseUrl: ${services.kato.baseUrl:localhost:7002}
+bakery:
+ baseUrl: ${services.bakery.baseUrl:localhost:8087}
+ extractBuildDetails: ${services.bakery.extractBuildDetails:true}
+ propagateCloudProviderType: ${services.bakery.propagateCloudProviderType:true}
+ allowMissingPackageInstallation: ${services.bakery.allowMissingPackageInstallation:false}
+echo:
+ enabled: ${services.echo.enabled:false}
+ baseUrl: ${services.echo.baseUrl:8089}
+
+igor:
+ baseUrl: ${services.igor.baseUrl:8088}
+
+# TODO(duftler): Remove this once flex is conditionally-enabled in orca.
+flex:
+ baseUrl: http://not-a-host
+
+default:
+ bake:
+ account: local
+ securityGroups:
+ vpc:
+ securityGroups:
+
+redis:
+ connection: ${services.redis.connection}
+
+tasks:
+ executionWindow:
+ timezone: ${services.orca.timezone}
+
+script:
+ master: default # name of Jenkins master in Spinnaker
+ job: run-script # from Jenkins job configuration
diff --git a/stable/spinnaker/config/rosco-local.yml b/stable/spinnaker/config/rosco-local.yml
new file mode 100644
index 0000000000..d779049331
--- /dev/null
+++ b/stable/spinnaker/config/rosco-local.yml
@@ -0,0 +1,27 @@
+server:
+ port: ${services.rosco.port:8087}
+ address: 0.0.0.0
+
+redis:
+ connection: ${services.redis.connection:redis://localhost:6379}
+
+aws:
+ enabled: ${providers.aws.enabled:false}
+
+docker:
+ enabled: ${services.docker.enabled:false}
+ bakeryDefaults:
+ targetRepository: ${services.docker.targetRepository}
+
+google:
+ enabled: ${providers.google.enabled:false}
+ accounts:
+ - name: ${providers.google.primaryCredentials.name}
+ project: ${providers.google.primaryCredentials.project}
+ jsonPath: ${providers.google.primaryCredentials.jsonPath}
+ gce:
+ bakeryDefaults:
+ zone: ${providers.google.defaultZone}
+
+rosco:
+ configDir: ${services.rosco.configDir}
diff --git a/stable/spinnaker/config/rosco.yml b/stable/spinnaker/config/rosco.yml
new file mode 100644
index 0000000000..d779049331
--- /dev/null
+++ b/stable/spinnaker/config/rosco.yml
@@ -0,0 +1,27 @@
+server:
+ port: ${services.rosco.port:8087}
+ address: 0.0.0.0
+
+redis:
+ connection: ${services.redis.connection:redis://localhost:6379}
+
+aws:
+ enabled: ${providers.aws.enabled:false}
+
+docker:
+ enabled: ${services.docker.enabled:false}
+ bakeryDefaults:
+ targetRepository: ${services.docker.targetRepository}
+
+google:
+ enabled: ${providers.google.enabled:false}
+ accounts:
+ - name: ${providers.google.primaryCredentials.name}
+ project: ${providers.google.primaryCredentials.project}
+ jsonPath: ${providers.google.primaryCredentials.jsonPath}
+ gce:
+ bakeryDefaults:
+ zone: ${providers.google.defaultZone}
+
+rosco:
+ configDir: ${services.rosco.configDir}
diff --git a/stable/spinnaker/config/settings.js b/stable/spinnaker/config/settings.js
new file mode 100644
index 0000000000..bb5be6712e
--- /dev/null
+++ b/stable/spinnaker/config/settings.js
@@ -0,0 +1,53 @@
+'use strict';
+
+var feedbackUrl = 'http://localhost';
+var gateHost = 'http://localhost:8084';
+var bakeryDetailUrl = 'http://localhost:8087';
+
+window.spinnakerSettings = {
+ defaultProviders: ['kubernetes'],
+ feedbackUrl: feedbackUrl,
+ gateUrl: gateHost,
+ bakeryDetailUrl: bakeryDetailUrl,
+ pollSchedule: 30000,
+ defaultTimeZone: 'America/Los_Angeles', // see http://momentjs.com/timezone/docs/#/data-utilities/
+ providers: {
+ kubernetes: {
+ defaults: {
+ account: 'local',
+ namespace: 'default'
+ },
+ }
+ },
+ notifications: {
+ email: {
+ enabled: true,
+ },
+ hipchat: {
+ enabled: false,
+ botName: 'Skynet T-800'
+ },
+ sms: {
+ enabled: false,
+ },
+ slack: {
+ enabled: false,
+ botName: 'spinnakerbot'
+ }
+ },
+ whatsNew: {
+ gistId: '32526cd608db3d811b38',
+ fileName: 'news.md',
+ },
+ feature: {
+ pipelines: true,
+ jobs: true,
+ notifications: true,
+ fastProperty: false,
+ vpcMigrator: false,
+ clusterDiff: false,
+ roscoMode: false,
+ netflixMode: false,
+ infrastructureStages: true, // Should 'createLoadBalancer' be a pipeline stage? (no).
+ },
+};
diff --git a/stable/spinnaker/config/spinnaker.yml b/stable/spinnaker/config/spinnaker.yml
new file mode 100644
index 0000000000..fd8c0a5241
--- /dev/null
+++ b/stable/spinnaker/config/spinnaker.yml
@@ -0,0 +1,294 @@
+
+# This file is intended to serve as a master configuration for a Spinnaker
+# deployment. Customizations to the deployment should be made in another file
+# named "spinnaker-local.yml". The distribution has a prototype called
+# "default-spinnaker-local.yml" which calls out the subset of attributes of
+# general interest. It can be copied into a "spinnaker-local.yml" to start
+# with. The prototype does not change any of the default values here, it just
+# surfaces the more critical attributes.
+
+global:
+ spinnaker:
+ environment: test
+ timezone: 'America/Los_Angeles'
+
+services:
+ default:
+ # These defaults can be modified to change all the spinnaker subsystems
+ # (clouddriver, gate, etc) at once, but not external systems (jenkins, etc).
+ # Individual systems can still be overridden using their own section entry
+ # directly under 'services'.
+ host: localhost
+ protocol: http
+
+ clouddriver:
+ host: ${services.default.host}
+ port: 7002
+ baseUrl: ${services.default.protocol}://${services.clouddriver.host}:${services.clouddriver.port}
+ aws:
+ udf:
+ # Controls whether UserDataProviders are used to populate user data of
+ # new server groups. If false, user data is copied over from ancestor
+ # server groups on both CopyLastAsgAtomicOperation and
+ # ModifyAsgLaunchConfigurationOperation (only if no user data is
+ # provided on the given request).
+ enabled: true
+
+ echo:
+ enabled: true
+ host: ${services.default.host}
+ port: 8089
+ baseUrl: ${services.default.protocol}://${services.echo.host}:${services.echo.port}
+
+ cron:
+ # Allow pipeline triggers to run periodically via cron expressions.
+ enabled: true
+ timezone: ${global.spinnaker.timezone}
+
+ notifications:
+ # The following blocks can enable Spinnaker to send notifications
+ # using the corresponding mechanism.
+ # See http://www.spinnaker.io/docs/notifications-and-events-guide
+ # for more information.
+ mail:
+ enabled: ${services.echo.notifications.mail.enabled:false}
+ host: ${services.echo.notifications.mail.host}
+ from: ${services.echo.notifications.mail.fromAddress}
+ username: ${services.echo.notifications.mail.username}
+ password: ${services.echo.notifications.mail.password}
+ port: ${services.echo.notifications.mail.port}
+ hipchat:
+ enabled: false
+ url: # the hipchat server to connect to
+ token: # the hipchat auth token
+ botName: # the username of the bot
+ sms:
+ enabled: false
+ account: # twilio account id
+ token: # twilio auth token
+ from: # phone number by which sms messages are sent
+ slack:
+ enabled: false
+ token: # the API token for the bot
+ botName: # the username of the bot
+
+ deck:
+ host: ${services.default.host}
+ port: 9000
+ baseUrl: ${services.default.protocol}://${services.deck.host}:${services.deck.port}
+ gateUrl: ${services.gate.baseUrl}
+ bakeryUrl: ${services.bakery.baseUrl}
+ timezone: ${global.spinnaker.timezone}
+ auth:
+ enabled: false
+
+ fiat:
+ enabled: false
+ host: ${services.default.host}
+ port: 7003
+ baseUrl: ${services.default.protocol}://${services.fiat.host}:${services.fiat.port}
+
+ front50:
+ host: ${services.default.host}
+ port: 8080
+ baseUrl: ${services.default.protocol}://${services.front50.host}:${services.front50.port}
+
+ # If using storage bucket persistence (gcs or s3), specify the bucket here
+ # disable cassandra and enable the storage service below.
+ storage_bucket: ${services.front50.storage_bucket}
+ # (GCS Only) Location for bucket.
+ bucket_location:
+ bucket_root: front50
+
+ cassandra:
+ enabled: false
+ redis:
+ enabled: false
+ gcs:
+ enabled: ${services.front50.gcs.enabled} # Enable me
+ project: ${services.front50.gcs.project}
+ s3:
+ enabled: ${services.front50.s3.enabled} # Or me
+ endpoint: ${services.front50.s3.endpoint}
+
+ gate:
+ host: ${services.default.host}
+ port: 8084
+ baseUrl: ${services.default.protocol}://${services.gate.host}:${services.gate.port}
+
+ igor:
+ # If you are integrating Jenkins then you must also enable Spinnaker's
+ # "igor" subsystem.
+ enabled: false
+ host: ${services.default.host}
+ port: 8088
+ baseUrl: ${services.default.protocol}://${services.igor.host}:${services.igor.port}
+
+ kato:
+ host: ${services.clouddriver.host}
+ port: ${services.clouddriver.port}
+ baseUrl: ${services.clouddriver.baseUrl}
+
+ mort:
+ host: ${services.clouddriver.host}
+ port: ${services.clouddriver.port}
+ baseUrl: ${services.clouddriver.baseUrl}
+
+ orca:
+ host: ${services.default.host}
+ port: 8083
+ baseUrl: ${services.default.protocol}://${services.orca.host}:${services.orca.port}
+ timezone: ${global.spinnaker.timezone}
+ enabled: true
+
+ oort:
+ host: ${services.clouddriver.host}
+ port: ${services.clouddriver.port}
+ baseUrl: ${services.clouddriver.baseUrl}
+
+ rosco:
+ host: ${services.default.host}
+ port: 8087
+ baseUrl: ${services.default.protocol}://${services.rosco.host}:${services.rosco.port}
+ # You need to provide the fully-qualified path to the directory containing the packer templates.
+ # They typically live in rosco's config/packer directory.
+ configDir: /opt/rosco/config/packer
+
+ bakery:
+ host: ${services.rosco.host}
+ port: ${services.rosco.port}
+ baseUrl: ${services.rosco.baseUrl}
+ extractBuildDetails: true
+ propagateCloudProviderType: true
+ allowMissingPackageInstallation: false
+
+ docker:
+ # This target repository is used by the bakery to publish baked docker images.
+ # Do not include http://.
+ enabled: ${services.docker.enabled:false}
+ targetRepository: ${services.docker.targetRepository}
+
+ jenkins:
+ # The "name" entry is used for the display name when selecting
+ # this server. You must set `enabled` to true when enabling igor.
+ #
+ # If you have multiple jenkins servers, you will need to list
+ # them in an igor-local.yml. See jenkins.masters in config/igor.yml.
+ #
+ # Note that jenkins is not installed with Spinnaker so you must obtain this
+ # on your own if you are interested.
+ enabled: ${services.igor.enabled:false}
+ defaultMaster:
+ name: Jenkins
+ baseUrl: # Expected in spinnaker-local.yml
+ username: # Expected in spinnaker-local.yml
+ password: # Expected in spinnaker-local.yml
+
+ redis:
+ host: ${services.default.host}
+ port: 6379
+ connection: redis://${services.redis.host}:${services.redis.port}
+
+ cassandra:
+ # cassandra.enabled is no longer used
+ # cassandra is enabled or disabled on a per-service basis
+ # where the alternative persistence mechanism for that service
+ # can be enabled.
+ host: ${services.cassandra.host}
+ port: ${services.cassandra.port}
+ embedded: ${services.cassandra.embedded}
+ cluster: ${services.cassandra.cluster}
+
+providers:
+ aws:
+ # For more information on configuring Amazon Web Services (aws), see
+ # http://www.spinnaker.io/v1.0/docs/target-deployment-setup#section-amazon-web-services-setup
+
+ enabled: false
+ simpleDBEnabled: false
+ defaultRegion: us-east-1
+ defaultSimpleDBDomain: CLOUD_APPLICATIONS
+ primaryCredentials:
+ name: default
+ # The actual credentials are set using a standard AWS client library mechanism
+ # http://docs.aws.amazon.com/AWSSdkDocsJava/latest/DeveloperGuide/credentials.html
+ # Typically this is a $HOME/.aws/credentials file (remember, a standard
+ # spinnaker installation runs as user "spinnaker" whose $HOME is
+ # /home/spinnaker). The primaryCredentials.name will identify which profile
+ # to use (for .aws/credentials).
+
+ # {{name}} will be interpolated with the aws account name (e.g. "my-aws-account-keypair").
+ defaultKeyPairTemplate: "{{name}}-keypair"
+
+ google:
+ # For more information on configuring Google Cloud Platform (google), see
+ # http://www.spinnaker.io/v1.0/docs/target-deployment-setup#section-google-cloud-platform-setup
+
+ enabled: false
+ defaultRegion: us-central1
+ defaultZone: us-central1-f
+ primaryCredentials:
+ name: my-account-name
+ # The project is the Google Project ID for the project to manage with
+ # Spinnaker. The jsonPath is a path to the JSON service credentials
+ # downloaded from the Google Developer's Console.
+ project:
+ jsonPath:
+
+ cf:
+ # For more information on configuring Cloud Foundry (cf) support, see
+ # http://www.spinnaker.io/v1.0/docs/target-deployment-setup#section-cloud-foundry-platform-setup
+
+ enabled: false
+ defaultOrg: spinnaker-cf-org
+ defaultSpace: spinnaker-cf-space
+ primaryCredentials:
+ name: my-cf-account
+ api: my-cf-api-uri
+ console: my-cf-console-base-url
+ # You must also supply cf.account.username and cf.account.password through env properties
+
+ azure:
+ # For more information on configuring Microsoft Azure (azure), see
+ # http://www.spinnaker.io/v1.0/docs/target-deployment-setup#section-azure-cloud-platform-setup
+
+ enabled: false
+ defaultRegion: westus
+ primaryCredentials:
+ name: my-azure-account
+
+ # To set Azure credentials, enter your Azure supscription values for:
+ # clientId, appKey, tenantId, and subscriptionId.
+ clientId:
+ appKey:
+ tenantId:
+ subscriptionId:
+
+ titan:
+ # If you want to deploy some services to titan,
+ # set enabled and provide primary credentials for deploying.
+ # Enabling titan is independent of other providers.
+ enabled: false
+ defaultRegion: us-east-1
+ primaryCredentials:
+ name: my-titan-account
+
+ kubernetes:
+ # For more information on configuring Kubernetes clusters (kubernetes), see
+ # http://www.spinnaker.io/v1.0/docs/target-deployment-setup#section-kubernetes-cluster-setup
+
+ # NOTE: enabling kubernetes also requires enabling dockerRegistry.
+ enabled: ${providers.kubernetes.enabled}
+ primaryCredentials:
+ name: ${providers.kubernetes.primaryCredentials.name}
+ namespace: ${providers.kubernetes.primaryCredentials.namespace}
+ dockerRegistryAccount: ${providers.dockerRegistry.primaryCredentials.name}
+
+ dockerRegistry:
+ # If you want to use a container based provider, you need to configure and
+ # enable this provider to cache images.
+ enabled: ${providers.dockerRegistry.enabled}
+ primaryCredentials:
+ name: ${providers.dockerRegistry.primaryCredentials.name}
+ address: ${providers.dockerRegistry.primaryCredentials.address}
+ repository: ${providers.dockerRegistry.primaryCredentials.repository}
diff --git a/stable/spinnaker/requirements.lock b/stable/spinnaker/requirements.lock
new file mode 100644
index 0000000000..75c3a366b7
--- /dev/null
+++ b/stable/spinnaker/requirements.lock
@@ -0,0 +1,9 @@
+dependencies:
+- name: redis
+ repository: https://kubernetes-charts.storage.googleapis.com/
+ version: 0.4.2
+- name: minio
+ repository: https://kubernetes-charts.storage.googleapis.com/
+ version: 0.0.1
+digest: sha256:c80d5e19cfba940133477743a3f5416a526b5942c7689f0589257be042ef0924
+generated: 2017-01-06T11:22:49.384880181-08:00
diff --git a/stable/spinnaker/requirements.yaml b/stable/spinnaker/requirements.yaml
new file mode 100644
index 0000000000..32ba4cced4
--- /dev/null
+++ b/stable/spinnaker/requirements.yaml
@@ -0,0 +1,7 @@
+dependencies:
+- name: redis
+ version: 0.4.2
+ repository: https://kubernetes-charts.storage.googleapis.com/
+- name: minio
+ version: 0.0.1
+ repository: https://kubernetes-charts.storage.googleapis.com/
diff --git a/stable/spinnaker/templates/NOTES.txt b/stable/spinnaker/templates/NOTES.txt
new file mode 100644
index 0000000000..4b7103b911
--- /dev/null
+++ b/stable/spinnaker/templates/NOTES.txt
@@ -0,0 +1,10 @@
+1. You will need to create 2 port forwarding tunnels in order to access the Spinnaker UI:
+ export GATE_POD=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "component=gate,app={{ template "fullname" . }}" -o jsonpath="{.items[0].metadata.name}")
+ export DECK_POD=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "component=deck,app={{ template "fullname" . }}" -o jsonpath="{.items[0].metadata.name}")
+ kubectl port-forward --namespace {{ .Release.Namespace }} $GATE_POD 8084 &
+ kubectl port-forward --namespace {{ .Release.Namespace }} $DECK_POD 9000 &
+
+2. Visit the Spinnaker UI by opening your browser to: http://127.0.0.1:9000
+
+For more info on the Kubernetes integration for Spinnaker, visit:
+ http://www.spinnaker.io/docs/kubernetes-source-to-prod
diff --git a/stable/spinnaker/templates/_helpers.tpl b/stable/spinnaker/templates/_helpers.tpl
new file mode 100644
index 0000000000..f7877c321f
--- /dev/null
+++ b/stable/spinnaker/templates/_helpers.tpl
@@ -0,0 +1,16 @@
+{{/* vim: set filetype=mustache: */}}
+{{/*
+Expand the name of the chart.
+*/}}
+{{- define "name" -}}
+{{- default .Chart.Name .Values.nameOverride | trunc 24 | trimSuffix "-" -}}
+{{- end -}}
+
+{{/*
+Create a default fully qualified app name.
+We truncate at 24 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
+*/}}
+{{- define "fullname" -}}
+{{- $name := default .Chart.Name .Values.nameOverride -}}
+{{- printf "%s-%s" .Release.Name $name | trunc 24 | trimSuffix "-" -}}
+{{- end -}}
diff --git a/stable/spinnaker/templates/configmap/jenkins-config.yaml b/stable/spinnaker/templates/configmap/jenkins-config.yaml
new file mode 100644
index 0000000000..7b04c4fef6
--- /dev/null
+++ b/stable/spinnaker/templates/configmap/jenkins-config.yaml
@@ -0,0 +1,87 @@
+apiVersion: v1
+kind: ConfigMap
+metadata:
+ name: {{ .Release.Name }}-jenkins-config
+ labels:
+ app: {{ template "fullname" . }}
+data:
+ config.xml: |-
+
+
+
+ 2.7.3
+ 0
+ NORMAL
+ false
+
+ false
+
+ false
+
+ ${JENKINS_HOME}/workspace/${ITEM_FULLNAME}
+ ${ITEM_ROOTDIR}/builds
+
+
+
+
+
+
+ default
+
+
+ jnlp
+ {{ .Values.jenkins.Agent.Image }}:{{ .Values.jenkins.Agent.ImageTag }}
+ false
+ false
+
+
+ /home/jenkins
+ 2147483647
+
+
+ {{.Values.jenkins.Agent.Cpu}}
+ {{.Values.jenkins.Agent.Memory}}
+ {{.Values.jenkins.Agent.Cpu}}
+ {{.Values.jenkins.Agent.Memory}}
+
+
+ /usr/bin/docker
+ /usr/bin/docker
+
+
+ /var/run/docker.sock
+ /var/run/docker.sock
+
+
+
+
+
+
+
+ https://kubernetes.default
+ false
+ {{ .Release.Namespace }}
+ http://{{ template "fullname" . }}-igor:8080
+ {{ template "fullname" . }}-igor:50000
+ 100
+ 5
+
+
+ 0
+ 0
+
+
+
+ All
+ false
+ false
+
+
+
+ All
+ 50000
+
+
+
+ true
+
diff --git a/stable/spinnaker/templates/configmap/jenkins-jobs.yaml b/stable/spinnaker/templates/configmap/jenkins-jobs.yaml
new file mode 100644
index 0000000000..16fd2f4e62
--- /dev/null
+++ b/stable/spinnaker/templates/configmap/jenkins-jobs.yaml
@@ -0,0 +1,139 @@
+apiVersion: v1
+kind: ConfigMap
+metadata:
+ name: {{ .Release.Name }}-jenkins-jobs
+ labels:
+ app: {{ template "fullname" . }}
+data:
+ run-script.xml: |-
+
+
+
+
+
+ 10
+ 500
+ -1
+ -1
+
+ false
+
+
+
+
+ COMMAND
+ Executable script and parameters
+
+
+
+ REPO_URL
+ git repository url.
+
+
+
+ BRANCH
+ Branch or sha to build
+
+
+
+
+
+
+ 2
+
+
+ apidaemon
+ $REPO_URL
+
+
+
+
+ master
+
+
+ false
+
+
+ true
+
+
+ ${COMMAND}
+
+
+ ${COMMAND}
+
+
+
+
+ *.properties, *.json, *.yml
+ true
+ false
+ false
+ true
+
+
+
+
+ build-image.xml: |-
+
+
+
+
+ false
+
+
+
+
+ REPOSITORY_URL
+
+
+
+
+ IMAGE_REPO
+
+
+
+
+ IMAGE_TAG
+
+
+
+
+ BRANCH
+
+
+
+
+
+
+
+
+
+
+
+ true
+
+
+
diff --git a/stable/spinnaker/templates/configmap/s3-config.yaml b/stable/spinnaker/templates/configmap/s3-config.yaml
new file mode 100644
index 0000000000..a66c85248a
--- /dev/null
+++ b/stable/spinnaker/templates/configmap/s3-config.yaml
@@ -0,0 +1,11 @@
+apiVersion: v1
+kind: ConfigMap
+metadata:
+ name: {{ template "fullname" . }}-s3-config
+ labels:
+ app: {{template "fullname" .}}
+data:
+ credentials: |
+ [default]
+ aws_access_key_id={{ .Values.minio.AccessKey }}
+ aws_secret_access_key={{ .Values.minio.SecretKey }}
diff --git a/stable/spinnaker/templates/configmap/spinnaker-config.yaml b/stable/spinnaker/templates/configmap/spinnaker-config.yaml
new file mode 100644
index 0000000000..75692c5d55
--- /dev/null
+++ b/stable/spinnaker/templates/configmap/spinnaker-config.yaml
@@ -0,0 +1,247 @@
+apiVersion: v1
+kind: ConfigMap
+metadata:
+ name: {{ template "fullname" . }}-spinnaker-config
+ labels:
+ app: {{ template "fullname" . }}
+data:
+ clouddriver.yml: |
+{{.Files.Get "config/clouddriver.yml" | indent 4}}
+ echo.yml: |
+{{.Files.Get "config/echo.yml" | indent 4}}
+ echo-local.yml: |
+{{.Files.Get "config/echo-local.yml" | indent 4}}
+ fiat.yml: |
+{{.Files.Get "config/fiat.yml" | indent 4}}
+ fiat.yml-local: |
+{{.Files.Get "config/fiat-local.yml" | indent 4}}
+ front50.yml: |
+{{.Files.Get "config/front50.yml" | indent 4}}
+ front50-local.yml: |
+{{.Files.Get "config/front50-local.yml" | indent 4}}
+ gate.yml: |
+{{.Files.Get "config/gate.yml" | indent 4}}
+ gate-local.yml: |
+{{.Files.Get "config/gate-local.yml" | indent 4}}
+ igor.yml: |
+{{.Files.Get "config/igor.yml" | indent 4}}
+ igor-local.yml: |
+{{.Files.Get "config/igor-local.yml" | indent 4}}
+ orca.yml: |
+{{.Files.Get "config/orca.yml" | indent 4}}
+ orca-local.yml: |
+{{.Files.Get "config/orca-local.yml" | indent 4}}
+ rosco.yml: |
+{{.Files.Get "config/rosco.yml" | indent 4}}
+ rosco-local.yml: |
+{{.Files.Get "config/rosco-local.yml" | indent 4}}
+ settings.js: |
+{{.Files.Get "config/settings.js" | indent 4}}
+ spinnaker.yml: |
+{{.Files.Get "config/spinnaker.yml" | indent 4}}
+ clouddriver-local.yml: |
+ server:
+ port: ${services.clouddriver.port:7002}
+ address: 0.0.0.0
+
+ default:
+ account:
+ env: ${providers.kubernetes.primaryCredentials.name}
+
+ kubernetes:
+ enabled: true
+ accounts:
+ - name: local
+ dockerRegistries:
+ {{- range $index, $account := .Values.accounts }}
+ - accountName: {{ $account.name }}
+ {{- end }}
+
+ dockerRegistry:
+ enabled: true
+ accounts:
+ {{- range $index, $account := .Values.accounts }}
+ - name: {{ $account.name }}
+ address: {{ $account.address }}
+ repositories:
+ {{- range $index, $repo := $account.repositories }}
+ - {{ $repo }}
+ {{- end }}
+ {{- end }}
+ credentials:
+ primaryAccountTypes: ${providers.kubernetes.primaryCredentials.name}
+ challengeDestructiveActionsEnvironments: ${providers.kubernetes.primaryCredentials.name}
+ spinnaker-local.yml: |
+ global:
+ spinnaker:
+ environment: test
+
+ services:
+ default:
+ # These defaults can be modified to change all the spinnaker subsystems
+ # (clouddriver, gate, etc) at once, but not external systems (jenkins, etc).
+ # Individual systems can still be overridden using their own section entry
+ # directly under 'services'.
+ host: localhost
+ protocol: http
+
+ clouddriver:
+ host: {{ template "fullname" . }}-clouddriver
+ port: 7002
+ baseUrl: ${services.default.protocol}://${services.clouddriver.host}:${services.clouddriver.port}
+ # Controls whether UserDataProviders are used to populate user data of new server groups.
+ # If false, user data is copied over from ancestor server groups on both CopyLastAsgAtomicOperation and
+ # ModifyAsgLaunchConfigurationOperation (only if no user data is provided on the given request).
+ aws:
+ udf:
+ enabled: false
+
+ echo:
+ enabled: true
+ host: {{ template "fullname" . }}-echo
+ port: 8089
+ baseUrl: ${services.default.protocol}://${services.echo.host}:${services.echo.port}
+ cron:
+ enabled: true
+ notifications:
+ # allow pipeline triggers to run periodically via cron expressions
+ # If you wish for spinnaker to send notifications, configure the following blocks
+ mail:
+ enabled: {{ .Values.mail.enabled }}
+ host: {{ .Values.mail.host }}
+ username: {{ .Values.mail.username }}
+ password: {{ .Values.mail.password }}
+ fromAddress: {{ .Values.mail.fromAddress }}
+ port: {{ .Values.mail.port }}
+ hipchat:
+ enabled: false
+ url: # the hipchat server to connect to
+ token: #the hipchat auth token
+ sms:
+ enabled: false
+ account: # twilio account id
+ token: # twilio auth token
+ from: # phone number by which sms messages are sent
+ slack:
+ enabled: false
+ token: # the part after http://hooks.slack.com/services/
+
+ deck:
+ host: {{ template "fullname" . }}-deck
+ port: 9000
+ baseUrl: ${services.default.protocol}://${services.deck.host}:${services.deck.port}
+ gateUrl: ${services.gate.baseUrl}
+ bakeryUrl: ${services.bakery.baseUrl}
+ timezone: 'America/New_York'
+ auth:
+ enabled: false
+
+ front50:
+ host: {{ template "fullname" . }}-front50
+ port: 8080
+ baseUrl: ${services.default.protocol}://${services.front50.host}:${services.front50.port}
+
+ # If using storage bucket persistence (gcs or s3), specify the bucket here
+ # disable cassandra and enable the storage service below.
+ storage_bucket: {{ .Values.storageBucket }}
+ bucket_root: front50
+
+ cassandra:
+ enabled: false
+ redis:
+ enabled: false
+ gcs:
+ enabled: false
+ project: my-project
+ s3:
+ enabled: true
+ endpoint: http://{{ .Release.Name }}-minio:9000
+ gate:
+ host: {{ template "fullname" . }}-gate
+ port: 8084
+ baseUrl: ${services.default.protocol}://${services.gate.host}:${services.gate.port}
+
+ igor:
+ # If you are integrating Jenkins then you must also enable Spinnaker's
+ # "igor" subsystem.
+ enabled: true
+ host: {{ template "fullname" . }}-igor
+ port: 8088
+ baseUrl: ${services.default.protocol}://${services.igor.host}:${services.igor.port}
+
+ kato:
+ host: ${services.clouddriver.host}
+ port: ${services.clouddriver.port}
+ baseUrl: ${services.clouddriver.baseUrl}
+
+ mort:
+ host: ${services.clouddriver.host}
+ port: ${services.clouddriver.port}
+ baseUrl: ${services.clouddriver.baseUrl}
+
+ orca:
+ host: {{ template "fullname" . }}-orca
+ port: 8083
+ baseUrl: ${services.default.protocol}://${services.orca.host}:${services.orca.port}
+ enabled: true
+
+ oort:
+ host: ${services.clouddriver.host}
+ port: ${services.clouddriver.port}
+ baseUrl: ${services.clouddriver.baseUrl}
+
+ rosco:
+ host: {{ template "fullname" . }}-rosco
+ port: 8087
+ baseUrl: ${services.default.protocol}://${services.rosco.host}:${services.rosco.port}
+ # You need to provide the fully-qualified path to the directory containing the packer templates.
+ # They typically live in rosco's config/packer directory.
+ configDir: /opt/rosco/config/packer
+
+ bakery:
+ host: ${services.rosco.host}
+ port: ${services.rosco.port}
+ baseUrl: ${services.rosco.baseUrl}
+ extractBuildDetails: true
+
+ docker:
+ # This target repository is used by the bakery to publish baked docker images.
+ # Do not include http://.
+ enabled: true
+ targetRepository: viglesiasce/sample-app
+
+ jenkins:
+ # The "name" entry is used for the display name when selecting
+ # this server. You must set `enabled` to true when enabling igor.
+ #
+ # If you have multiple jenkins servers, you will need to list
+ # them in an igor-local.yml. See jenkins.masters in config/igor.yml.
+ #
+ # Note that jenkins is not installed with Spinnaker so you must obtain this
+ # on your own if you are interested.
+ enabled: true
+ defaultMaster:
+ name: default
+ baseUrl: http://localhost:8080/
+ username: admin
+ password: admin
+
+ redis:
+ host: {{ .Release.Name }}-redis
+ port: 6379
+ connection: redis://:{{ .Values.redis.redisPassword }}@${services.redis.host}:${services.redis.port}
+
+ providers:
+ kubernetes:
+ enabled: true
+ primaryCredentials:
+ name: local
+ namespace: default
+ dockerRegistryAccount: ${providers.dockerRegistry.primaryCredentials.name}
+
+ dockerRegistry:
+ enabled: true
+ primaryCredentials:
+ name: my-docker-account
+ address: https://index.docker.io/
+ repository: {{ .Values.repository }}
diff --git a/stable/spinnaker/templates/deployments/clouddriver.yaml b/stable/spinnaker/templates/deployments/clouddriver.yaml
new file mode 100644
index 0000000000..f3a774948e
--- /dev/null
+++ b/stable/spinnaker/templates/deployments/clouddriver.yaml
@@ -0,0 +1,34 @@
+apiVersion: extensions/v1beta1
+kind: Deployment
+metadata:
+ name: {{ template "fullname" . }}-clouddriver
+ labels:
+ app: {{ template "fullname" . }}
+ component: clouddriver
+spec:
+ replicas: 1
+ template:
+ metadata:
+ labels:
+ app: {{ template "fullname" . }}
+ component: clouddriver
+ spec:
+ containers:
+ - image: {{ .Values.images.clouddriver }}
+ name: clouddriver
+ ports:
+ - containerPort: 7002
+ name: clouddriver
+ volumeMounts:
+ - mountPath: /opt/spinnaker/config
+ name: {{ template "fullname" . }}-spinnaker-config
+ readinessProbe:
+ httpGet:
+ path: /credentials
+ port: 7002
+ initialDelaySeconds: 20
+ timeoutSeconds: 1
+ volumes:
+ - name: {{ template "fullname" . }}-spinnaker-config
+ configMap:
+ name: {{ template "fullname" . }}-spinnaker-config
diff --git a/stable/spinnaker/templates/deployments/deck.yaml b/stable/spinnaker/templates/deployments/deck.yaml
new file mode 100644
index 0000000000..28758a7754
--- /dev/null
+++ b/stable/spinnaker/templates/deployments/deck.yaml
@@ -0,0 +1,38 @@
+apiVersion: extensions/v1beta1
+kind: Deployment
+metadata:
+ name: {{ template "fullname" . }}-deck
+ labels:
+ app: {{ template "fullname" . }}
+ component: deck
+spec:
+ replicas: 1
+ template:
+ metadata:
+ labels:
+ app: {{ template "fullname" . }}
+ component: deck
+ spec:
+ containers:
+ - image: {{ .Values.images.deck }}
+ name: deck
+ command:
+ - /bin/bash
+ - -c
+ args:
+ - "cp /opt/spinnaker/config/settings.js .; npm start"
+ env:
+ - name: DECK_HOST
+ value: "0.0.0.0"
+ - name: DECK_PORT
+ value: "9000"
+ ports:
+ - containerPort: 9000
+ name: deck
+ volumeMounts:
+ - mountPath: /opt/spinnaker/config
+ name: {{ template "fullname" . }}-spinnaker-config
+ volumes:
+ - name: {{ template "fullname" . }}-spinnaker-config
+ configMap:
+ name: {{ template "fullname" . }}-spinnaker-config
diff --git a/stable/spinnaker/templates/deployments/echo.yaml b/stable/spinnaker/templates/deployments/echo.yaml
new file mode 100644
index 0000000000..f3fabdf5a5
--- /dev/null
+++ b/stable/spinnaker/templates/deployments/echo.yaml
@@ -0,0 +1,34 @@
+apiVersion: extensions/v1beta1
+kind: Deployment
+metadata:
+ name: {{ template "fullname" . }}-echo
+ labels:
+ app: {{ template "fullname" . }}
+ component: echo
+spec:
+ replicas: 1
+ template:
+ metadata:
+ labels:
+ app: {{ template "fullname" . }}
+ component: echo
+ spec:
+ containers:
+ - image: {{ .Values.images.echo }}
+ name: echo
+ ports:
+ - containerPort: 8089
+ name: echo
+ volumeMounts:
+ - mountPath: /opt/spinnaker/config
+ name: {{ template "fullname" . }}-spinnaker-config
+ readinessProbe:
+ httpGet:
+ path: /env
+ port: 8089
+ initialDelaySeconds: 20
+ timeoutSeconds: 1
+ volumes:
+ - name: {{ template "fullname" . }}-spinnaker-config
+ configMap:
+ name: {{ template "fullname" . }}-spinnaker-config
diff --git a/stable/spinnaker/templates/deployments/front50.yaml b/stable/spinnaker/templates/deployments/front50.yaml
new file mode 100644
index 0000000000..fbe78c4756
--- /dev/null
+++ b/stable/spinnaker/templates/deployments/front50.yaml
@@ -0,0 +1,39 @@
+apiVersion: extensions/v1beta1
+kind: Deployment
+metadata:
+ name: {{ template "fullname" . }}-front50
+ labels:
+ app: {{ template "fullname" . }}
+ component: front50
+spec:
+ replicas: 1
+ template:
+ metadata:
+ labels:
+ app: {{ template "fullname" . }}
+ component: front50
+ spec:
+ containers:
+ - image: {{ .Values.images.front50 }}
+ name: front50
+ ports:
+ - containerPort: 8080
+ name: front50
+ volumeMounts:
+ - mountPath: /opt/spinnaker/config
+ name: {{ template "fullname" . }}-spinnaker-config
+ - mountPath: /root/.aws
+ name: {{ template "fullname" . }}-s3-config
+ readinessProbe:
+ httpGet:
+ path: /env
+ port: 8080
+ initialDelaySeconds: 20
+ timeoutSeconds: 1
+ volumes:
+ - name: {{ template "fullname" . }}-spinnaker-config
+ configMap:
+ name: {{ template "fullname" . }}-spinnaker-config
+ - name: {{ template "fullname" . }}-s3-config
+ configMap:
+ name: {{ template "fullname" . }}-s3-config
diff --git a/stable/spinnaker/templates/deployments/gate.yaml b/stable/spinnaker/templates/deployments/gate.yaml
new file mode 100644
index 0000000000..c5c0a0704b
--- /dev/null
+++ b/stable/spinnaker/templates/deployments/gate.yaml
@@ -0,0 +1,34 @@
+apiVersion: extensions/v1beta1
+kind: Deployment
+metadata:
+ name: {{ template "fullname" . }}-gate
+ labels:
+ app: {{ template "fullname" . }}
+ component: gate
+spec:
+ replicas: 1
+ template:
+ metadata:
+ labels:
+ app: {{ template "fullname" . }}
+ component: gate
+ spec:
+ containers:
+ - image: {{ .Values.images.gate }}
+ name: gate
+ ports:
+ - containerPort: 8084
+ name: gate
+ volumeMounts:
+ - mountPath: /opt/spinnaker/config
+ name: {{ template "fullname" . }}-spinnaker-config
+ livenessProbe:
+ httpGet:
+ path: /env
+ port: 8084
+ initialDelaySeconds: 30
+ timeoutSeconds: 1
+ volumes:
+ - name: {{ template "fullname" . }}-spinnaker-config
+ configMap:
+ name: {{ template "fullname" . }}-spinnaker-config
diff --git a/stable/spinnaker/templates/deployments/igor.yaml b/stable/spinnaker/templates/deployments/igor.yaml
new file mode 100644
index 0000000000..74721850d7
--- /dev/null
+++ b/stable/spinnaker/templates/deployments/igor.yaml
@@ -0,0 +1,76 @@
+apiVersion: extensions/v1beta1
+kind: Deployment
+metadata:
+ name: {{ template "fullname" . }}-igor
+ labels:
+ app: {{ template "fullname" . }}
+ component: igor
+spec:
+ replicas: 1
+ template:
+ metadata:
+ labels:
+ app: {{ template "fullname" . }}
+ component: igor
+ annotations:
+ pod.alpha.kubernetes.io/init-containers: '[
+ {
+ "name": "copy-default-config",
+ "image": "{{.Values.jenkins.Master.Image}}:{{.Values.jenkins.Master.ImageTag}}",
+ "command": ["cp", "-n", "/var/jenkins_config/config.xml", "/var/jenkins_home"],
+ "imagePullPolicy": "IfNotPresent",
+ "volumeMounts": [
+ {
+ "name": "jenkins-config",
+ "mountPath": "/var/jenkins_config"
+ },
+ {
+ "name": "jenkins-home",
+ "mountPath": "/var/jenkins_home"
+ }
+ ]
+ }
+ ]'
+ spec:
+ containers:
+ - image: {{ .Values.images.igor }}
+ name: igor
+ ports:
+ - containerPort: 8088
+ name: igor
+ volumeMounts:
+ - mountPath: /opt/spinnaker/config
+ name: {{ template "fullname" . }}-spinnaker-config
+ readinessProbe:
+ httpGet:
+ path: /env
+ port: 8088
+ initialDelaySeconds: 20
+ timeoutSeconds: 1
+ - name: jenkins-master
+ image: "{{.Values.jenkins.Master.Image}}:{{.Values.jenkins.Master.ImageTag}}"
+ imagePullPolicy: "{{.Values.jenkins.Master.ImagePullPolicy}}"
+ env:
+ - name: JAVA_OPTS
+ value: "{{ default "" .Values.jenkins.Master.JavaOpts}}"
+ ports:
+ - containerPort: {{.Values.jenkins.Master.ContainerPort}}
+ name: http
+ - containerPort: {{.Values.jenkins.Master.SlaveListenerPort}}
+ name: slavelistener
+ resources:
+ requests:
+ cpu: "{{.Values.jenkins.Master.Cpu}}"
+ memory: "{{.Values.jenkins.Master.Memory}}"
+ volumeMounts:
+ - mountPath: /var/jenkins_home
+ name: jenkins-home
+ volumes:
+ - name: jenkins-config
+ configMap:
+ name: {{ .Release.Name }}-jenkins-config
+ - name: jenkins-home
+ emptyDir: {}
+ - name: {{ template "fullname" . }}-spinnaker-config
+ configMap:
+ name: {{ template "fullname" . }}-spinnaker-config
diff --git a/stable/spinnaker/templates/deployments/orca.yaml b/stable/spinnaker/templates/deployments/orca.yaml
new file mode 100644
index 0000000000..abef291416
--- /dev/null
+++ b/stable/spinnaker/templates/deployments/orca.yaml
@@ -0,0 +1,34 @@
+apiVersion: extensions/v1beta1
+kind: Deployment
+metadata:
+ name: {{ template "fullname" . }}-orca
+ labels:
+ app: {{ template "fullname" . }}
+ component: orca
+spec:
+ replicas: 1
+ template:
+ metadata:
+ labels:
+ app: {{ template "fullname" . }}
+ component: orca
+ spec:
+ containers:
+ - image: {{ .Values.images.orca }}
+ name: orca
+ ports:
+ - containerPort: 8083
+ name: orca
+ volumeMounts:
+ - mountPath: /opt/spinnaker/config
+ name: {{ template "fullname" . }}-spinnaker-config
+ readinessProbe:
+ httpGet:
+ path: /env
+ port: 8083
+ initialDelaySeconds: 20
+ timeoutSeconds: 1
+ volumes:
+ - name: {{ template "fullname" . }}-spinnaker-config
+ configMap:
+ name: {{ template "fullname" . }}-spinnaker-config
diff --git a/stable/spinnaker/templates/deployments/rosco.yaml b/stable/spinnaker/templates/deployments/rosco.yaml
new file mode 100644
index 0000000000..f2ab914c08
--- /dev/null
+++ b/stable/spinnaker/templates/deployments/rosco.yaml
@@ -0,0 +1,44 @@
+apiVersion: extensions/v1beta1
+kind: Deployment
+metadata:
+ name: {{ template "fullname" . }}-rosco
+ labels:
+ app: {{ template "fullname" . }}
+ component: rosco
+spec:
+ replicas: 1
+ template:
+ metadata:
+ labels:
+ app: {{ template "fullname" . }}
+ component: rosco
+ spec:
+ containers:
+ - image: {{ .Values.images.rosco }}
+ name: rosco
+ ports:
+ - containerPort: 8087
+ name: rosco
+ volumeMounts:
+ - mountPath: /opt/spinnaker/config
+ name: {{ template "fullname" . }}-spinnaker-config
+ - mountPath: /usr/bin/docker
+ name: docker-bin
+ - mountPath: /var/run/docker.sock
+ name: docker-sock
+ readinessProbe:
+ httpGet:
+ path: /env
+ port: 8087
+ initialDelaySeconds: 20
+ timeoutSeconds: 1
+ volumes:
+ - name: {{ template "fullname" . }}-spinnaker-config
+ configMap:
+ name: {{ template "fullname" . }}-spinnaker-config
+ - name: docker-bin
+ hostPath:
+ path: /usr/bin/docker
+ - name: docker-sock
+ hostPath:
+ path: /var/run/docker.sock
diff --git a/stable/spinnaker/templates/hooks/create-bucket.yaml b/stable/spinnaker/templates/hooks/create-bucket.yaml
new file mode 100644
index 0000000000..4e2c1f53e2
--- /dev/null
+++ b/stable/spinnaker/templates/hooks/create-bucket.yaml
@@ -0,0 +1,27 @@
+apiVersion: batch/v1
+kind: Job
+metadata:
+ name: "{{.Release.Name}}-create-bucket"
+ labels:
+ heritage: {{.Release.Service | quote }}
+ release: {{.Release.Name | quote }}
+ chart: "{{.Chart.Name}}-{{.Chart.Version}}"
+ annotations:
+ "helm.sh/hook": post-install
+spec:
+ template:
+ metadata:
+ name: "{{.Release.Name}}"
+ labels:
+ heritage: {{.Release.Service | quote }}
+ release: {{.Release.Name | quote }}
+ chart: "{{.Chart.Name}}-{{.Chart.Version}}"
+ spec:
+ restartPolicy: OnFailure
+ containers:
+ - name: post-install-job
+ image: "viglesiasce/minio-client:v0.4.0"
+ command:
+ - sh
+ - -c
+ - "mc config host add {{.Release.Name}}-minio http://{{.Release.Name}}-minio:9000 {{ .Values.minio.AccessKey }} {{ .Values.minio.SecretKey }} S3v4 && mc mb {{.Release.Name}}-minio/spinnaker"
diff --git a/stable/spinnaker/templates/hooks/delete-jobs.yaml b/stable/spinnaker/templates/hooks/delete-jobs.yaml
new file mode 100644
index 0000000000..3dc1f0b0fc
--- /dev/null
+++ b/stable/spinnaker/templates/hooks/delete-jobs.yaml
@@ -0,0 +1,35 @@
+apiVersion: batch/v1
+kind: Job
+metadata:
+ name: "{{.Release.Name}}-delete-jobs"
+ labels:
+ heritage: {{.Release.Service | quote }}
+ release: {{.Release.Name | quote }}
+ chart: "{{.Chart.Name}}-{{.Chart.Version}}"
+ annotations:
+ "helm.sh/hook": post-delete
+spec:
+ template:
+ metadata:
+ name: "{{.Release.Name}}"
+ labels:
+ heritage: {{.Release.Service | quote }}
+ release: {{.Release.Name | quote }}
+ chart: "{{.Chart.Name}}-{{.Chart.Version}}"
+ spec:
+ restartPolicy: OnFailure
+ volumes:
+ - name: kubectl
+ hostPath:
+ path: /usr/bin/kubectl
+
+ containers:
+ - name: post-install-job
+ image: "lachlanevenson/k8s-kubectl:v1.4.7"
+ volumeMounts:
+ - name: kubectl
+ mountPath: /kubectl
+ command:
+ - sh
+ - -c
+ - "kubectl delete job {{.Release.Name}}-create-bucket {{.Release.Name}}-upload-build-image {{.Release.Name}}-delete-jobs {{.Release.Name}}-upload-run-script"
diff --git a/stable/spinnaker/templates/hooks/upload-build-image.yaml b/stable/spinnaker/templates/hooks/upload-build-image.yaml
new file mode 100644
index 0000000000..f985f946a2
--- /dev/null
+++ b/stable/spinnaker/templates/hooks/upload-build-image.yaml
@@ -0,0 +1,45 @@
+apiVersion: batch/v1
+kind: Job
+metadata:
+ name: "{{.Release.Name}}-upload-build-image"
+ labels:
+ heritage: {{.Release.Service | quote }}
+ release: {{.Release.Name | quote }}
+ chart: "{{.Chart.Name}}-{{.Chart.Version}}"
+ annotations:
+ "helm.sh/hook": post-install
+spec:
+ template:
+ metadata:
+ name: "{{.Release.Name}}"
+ labels:
+ heritage: {{.Release.Service | quote }}
+ release: {{.Release.Name | quote }}
+ chart: "{{.Chart.Name}}-{{.Chart.Version}}"
+ spec:
+ restartPolicy: OnFailure
+ volumes:
+ - name: jenkins-jobs
+ configMap:
+ name: {{ .Release.Name }}-jenkins-jobs
+ containers:
+ - name: post-install-job
+ image: "viglesiasce/minio-client:v0.4.0"
+ command:
+ - curl
+ - -X
+ - POST
+ - -H
+ - "Content-Type: application/xml"
+ - --retry
+ - "20"
+ - --retry-delay
+ - "10"
+ - --max-time
+ - "3"
+ - --data-binary
+ - "@/jobs/build-image.xml"
+ - "http://{{ template "fullname" . }}-igor:8080/createItem?name=build-image"
+ volumeMounts:
+ - name: jenkins-jobs
+ mountPath: /jobs
diff --git a/stable/spinnaker/templates/hooks/upload-run-script.yaml b/stable/spinnaker/templates/hooks/upload-run-script.yaml
new file mode 100644
index 0000000000..f8bbca35fc
--- /dev/null
+++ b/stable/spinnaker/templates/hooks/upload-run-script.yaml
@@ -0,0 +1,45 @@
+apiVersion: batch/v1
+kind: Job
+metadata:
+ name: "{{.Release.Name}}-upload-run-script"
+ labels:
+ heritage: {{.Release.Service | quote }}
+ release: {{.Release.Name | quote }}
+ chart: "{{.Chart.Name}}-{{.Chart.Version}}"
+ annotations:
+ "helm.sh/hook": post-install
+spec:
+ template:
+ metadata:
+ name: "{{.Release.Name}}"
+ labels:
+ heritage: {{.Release.Service | quote }}
+ release: {{.Release.Name | quote }}
+ chart: "{{.Chart.Name}}-{{.Chart.Version}}"
+ spec:
+ restartPolicy: OnFailure
+ volumes:
+ - name: jenkins-jobs
+ configMap:
+ name: {{ .Release.Name }}-jenkins-jobs
+ containers:
+ - name: post-install-job
+ image: "viglesiasce/minio-client:v0.4.0"
+ command:
+ - curl
+ - -X
+ - POST
+ - -H
+ - "Content-Type: application/xml"
+ - --retry
+ - "20"
+ - --retry-delay
+ - "10"
+ - --max-time
+ - "3"
+ - --data-binary
+ - "@/jobs/run-script.xml"
+ - "http://{{ template "fullname" . }}-igor:8080/createItem?name=run-script"
+ volumeMounts:
+ - name: jenkins-jobs
+ mountPath: /jobs
diff --git a/stable/spinnaker/templates/svc/clouddriver.yaml b/stable/spinnaker/templates/svc/clouddriver.yaml
new file mode 100644
index 0000000000..ff5ae87101
--- /dev/null
+++ b/stable/spinnaker/templates/svc/clouddriver.yaml
@@ -0,0 +1,13 @@
+apiVersion: v1
+kind: Service
+metadata:
+ name: {{ template "fullname" . }}-clouddriver
+ labels:
+ app: {{ template "fullname" . }}
+ component: clouddriver
+spec:
+ ports:
+ - port: 7002
+ selector:
+ app: {{ template "fullname" . }}
+ component: clouddriver
diff --git a/stable/spinnaker/templates/svc/deck.yaml b/stable/spinnaker/templates/svc/deck.yaml
new file mode 100644
index 0000000000..adb3027696
--- /dev/null
+++ b/stable/spinnaker/templates/svc/deck.yaml
@@ -0,0 +1,13 @@
+apiVersion: v1
+kind: Service
+metadata:
+ name: {{ template "fullname" . }}-deck
+ labels:
+ app: {{ template "fullname" . }}
+ component: deck
+spec:
+ ports:
+ - port: 9000
+ selector:
+ app: {{ template "fullname" . }}
+ component: deck
diff --git a/stable/spinnaker/templates/svc/echo.yaml b/stable/spinnaker/templates/svc/echo.yaml
new file mode 100644
index 0000000000..6af71a8046
--- /dev/null
+++ b/stable/spinnaker/templates/svc/echo.yaml
@@ -0,0 +1,13 @@
+apiVersion: v1
+kind: Service
+metadata:
+ name: {{ template "fullname" . }}-echo
+ labels:
+ app: {{ template "fullname" . }}
+ component: echo
+spec:
+ ports:
+ - port: 8089
+ selector:
+ app: {{ template "fullname" . }}
+ component: echo
diff --git a/stable/spinnaker/templates/svc/front50.yaml b/stable/spinnaker/templates/svc/front50.yaml
new file mode 100644
index 0000000000..1c022cd08d
--- /dev/null
+++ b/stable/spinnaker/templates/svc/front50.yaml
@@ -0,0 +1,13 @@
+apiVersion: v1
+kind: Service
+metadata:
+ name: {{ template "fullname" . }}-front50
+ labels:
+ app: {{ template "fullname" . }}
+ component: front50
+spec:
+ ports:
+ - port: 8080
+ selector:
+ app: {{ template "fullname" . }}
+ component: front50
diff --git a/stable/spinnaker/templates/svc/gate.yaml b/stable/spinnaker/templates/svc/gate.yaml
new file mode 100644
index 0000000000..aa81f5a4ce
--- /dev/null
+++ b/stable/spinnaker/templates/svc/gate.yaml
@@ -0,0 +1,13 @@
+apiVersion: v1
+kind: Service
+metadata:
+ name: {{ template "fullname" . }}-gate
+ labels:
+ app: {{ template "fullname" . }}
+ component: gate
+spec:
+ ports:
+ - port: 8084
+ selector:
+ app: {{ template "fullname" . }}
+ component: gate
diff --git a/stable/spinnaker/templates/svc/igor.yaml b/stable/spinnaker/templates/svc/igor.yaml
new file mode 100644
index 0000000000..8d2d7a7183
--- /dev/null
+++ b/stable/spinnaker/templates/svc/igor.yaml
@@ -0,0 +1,18 @@
+apiVersion: v1
+kind: Service
+metadata:
+ name: {{ template "fullname" . }}-igor
+ labels:
+ app: {{ template "fullname" . }}
+ component: igor
+spec:
+ ports:
+ - port: 8088
+ name: igor
+ - port: 8080
+ name: jenkins-master
+ - port: 50000
+ name: jenkins-agent
+ selector:
+ app: {{ template "fullname" . }}
+ component: igor
diff --git a/stable/spinnaker/templates/svc/orca.yaml b/stable/spinnaker/templates/svc/orca.yaml
new file mode 100644
index 0000000000..f24bd7061c
--- /dev/null
+++ b/stable/spinnaker/templates/svc/orca.yaml
@@ -0,0 +1,13 @@
+apiVersion: v1
+kind: Service
+metadata:
+ name: {{ template "fullname" . }}-orca
+ labels:
+ app: {{ template "fullname" . }}
+ component: orca
+spec:
+ ports:
+ - port: 8083
+ selector:
+ app: {{ template "fullname" . }}
+ component: orca
diff --git a/stable/spinnaker/templates/svc/rosco.yaml b/stable/spinnaker/templates/svc/rosco.yaml
new file mode 100644
index 0000000000..e3801f3dd5
--- /dev/null
+++ b/stable/spinnaker/templates/svc/rosco.yaml
@@ -0,0 +1,13 @@
+apiVersion: v1
+kind: Service
+metadata:
+ name: {{ template "fullname" . }}-rosco
+ labels:
+ app: {{ template "fullname" . }}
+ component: rosco
+spec:
+ ports:
+ - port: 8087
+ selector:
+ app: {{ template "fullname" . }}
+ component: rosco
diff --git a/stable/spinnaker/values.yaml b/stable/spinnaker/values.yaml
new file mode 100644
index 0000000000..d3c68bc7dc
--- /dev/null
+++ b/stable/spinnaker/values.yaml
@@ -0,0 +1,82 @@
+# Define which registries and repositories you want available in your
+# Spinnaker pipeline definitions
+# For more info visit:
+# http://www.spinnaker.io/v1.0/docs/target-deployment-configuration#section-docker-registry
+accounts:
+- name: dockerhub
+ address: https://index.docker.io
+ repositories:
+ - library/alpine
+ - library/ubuntu
+ - library/centos
+ - library/nginx
+
+# Settings for notifications via email
+# For more info visit:
+# http://www.spinnaker.io/docs/notifications-and-events-guide#section-email
+mail:
+ enabled: false
+ host: smtp.example.org
+ username: admin
+ password: admin
+ fromAddress: spinnaker@example.org
+ port: 25
+
+# Images for each component
+images:
+ clouddriver: quay.io/spinnaker/clouddriver:v1.489.0
+ echo: quay.io/spinnaker/echo:v1.127.0
+ deck: quay.io/spinnaker/deck:v2.956.0
+ igor: quay.io/spinnaker/igor:v1.61.0
+ orca: quay.io/spinnaker/orca:v1.302.0
+ gate: quay.io/spinnaker/gate:v2.109.0
+ front50: quay.io/spinnaker/front50:v1.69.0
+ rosco: quay.io/spinnaker/rosco:v0.78.0
+
+# Bucket to use when storing config data in S3 compatible storage
+storageBucket: spinnaker
+
+# Resources to provide to each of
+# the Spinnaker components
+resources:
+ limits:
+ cpu: 1000m
+ memory: 1280Mi
+ requests:
+ cpu: 1000m
+ memory: 1280Mi
+
+# Redis password to use for the in-cluster redis service
+# Redis is not exposed publically
+redis:
+ redisPassword: password
+
+# Minio access/secret keys for the in-cluster S3 usage
+# Minio is not exposed publically
+minio:
+ AccessKey: spinnakeradmin
+ SecretKey: spinnakeradmin
+
+# Configuration for the Jenkins instance that is attached to the
+# igor component of Spinnaker. For more info about the Jenkins integration
+# with Spinnaker, visit:
+# http://www.spinnaker.io/docs/jenkins-script-execution-stage
+jenkins:
+ Master:
+ Name: jenkins-master
+ Image: "gcr.io/kubernetes-charts-ci/jenkins-master-k8s"
+ ImageTag: "v0.6.0"
+ ImagePullPolicy: "Always"
+ Component: "jenkins-master"
+ Cpu: "500m"
+ Memory: "512Mi"
+ ServicePort: 8080
+ ServiceType: ClusterIP
+ ContainerPort: 8080
+ SlaveListenerPort: 50000
+
+ Agent:
+ Image: viglesiasce/spinnaker-jenkins-agent
+ ImageTag: v0.2.0
+ Cpu: "500m"
+ Memory: "512Mi"