From 63685ae82ba7bd38e5068382b730fb60efcb67c5 Mon Sep 17 00:00:00 2001 From: Vic Iglesias Date: Fri, 20 Jan 2017 11:57:51 -0800 Subject: [PATCH] Spinnaker Chart (#377) * Initial spinnaker * Jenkins patch * Fix jenkins job upload * Add run script * Fix mail * Simplify run-script * Spinnaker cleanup * Remove kube config from clouddriver * Make labels release specific * Delete upload-run-script job * Add requirements.lock * Update notes * Rename registry account * Pin image versions * Reference Spinnaker docs where possible * Fix build image job * Add more chart metadata * Pin hook job images * Add an app label to config maps * Rename .yml->.yaml * Add namespace to port-forward commands * Add note this can take a while to install --- stable/spinnaker/.helmignore | 21 ++ stable/spinnaker/Chart.yaml | 11 + stable/spinnaker/README.md | 35 +++ stable/spinnaker/config/clouddriver.yml | 83 +++++ stable/spinnaker/config/echo-local.yml | 62 ++++ stable/spinnaker/config/echo.yml | 66 ++++ stable/spinnaker/config/fiat.yml | 10 + stable/spinnaker/config/front50-local.yml | 27 ++ stable/spinnaker/config/front50.yml | 39 +++ stable/spinnaker/config/gate-local.yml | 25 ++ stable/spinnaker/config/gate.yml | 24 ++ stable/spinnaker/config/igor-local.yml | 25 ++ stable/spinnaker/config/igor.yml | 33 ++ stable/spinnaker/config/orca-local.yml | 39 +++ stable/spinnaker/config/orca.yml | 45 +++ stable/spinnaker/config/rosco-local.yml | 27 ++ stable/spinnaker/config/rosco.yml | 27 ++ stable/spinnaker/config/settings.js | 53 ++++ stable/spinnaker/config/spinnaker.yml | 294 ++++++++++++++++++ stable/spinnaker/requirements.lock | 9 + stable/spinnaker/requirements.yaml | 7 + stable/spinnaker/templates/NOTES.txt | 10 + stable/spinnaker/templates/_helpers.tpl | 16 + .../templates/configmap/jenkins-config.yaml | 87 ++++++ .../templates/configmap/jenkins-jobs.yaml | 139 +++++++++ .../templates/configmap/s3-config.yaml | 11 + .../templates/configmap/spinnaker-config.yaml | 247 +++++++++++++++ .../templates/deployments/clouddriver.yaml | 34 ++ .../spinnaker/templates/deployments/deck.yaml | 38 +++ .../spinnaker/templates/deployments/echo.yaml | 34 ++ .../templates/deployments/front50.yaml | 39 +++ .../spinnaker/templates/deployments/gate.yaml | 34 ++ .../spinnaker/templates/deployments/igor.yaml | 76 +++++ .../spinnaker/templates/deployments/orca.yaml | 34 ++ .../templates/deployments/rosco.yaml | 44 +++ .../templates/hooks/create-bucket.yaml | 27 ++ .../templates/hooks/delete-jobs.yaml | 35 +++ .../templates/hooks/upload-build-image.yaml | 45 +++ .../templates/hooks/upload-run-script.yaml | 45 +++ .../spinnaker/templates/svc/clouddriver.yaml | 13 + stable/spinnaker/templates/svc/deck.yaml | 13 + stable/spinnaker/templates/svc/echo.yaml | 13 + stable/spinnaker/templates/svc/front50.yaml | 13 + stable/spinnaker/templates/svc/gate.yaml | 13 + stable/spinnaker/templates/svc/igor.yaml | 18 ++ stable/spinnaker/templates/svc/orca.yaml | 13 + stable/spinnaker/templates/svc/rosco.yaml | 13 + stable/spinnaker/values.yaml | 82 +++++ 48 files changed, 2148 insertions(+) create mode 100644 stable/spinnaker/.helmignore create mode 100644 stable/spinnaker/Chart.yaml create mode 100644 stable/spinnaker/README.md create mode 100644 stable/spinnaker/config/clouddriver.yml create mode 100644 stable/spinnaker/config/echo-local.yml create mode 100644 stable/spinnaker/config/echo.yml create mode 100644 stable/spinnaker/config/fiat.yml create mode 100644 stable/spinnaker/config/front50-local.yml create mode 100644 stable/spinnaker/config/front50.yml create mode 100644 stable/spinnaker/config/gate-local.yml create mode 100644 stable/spinnaker/config/gate.yml create mode 100644 stable/spinnaker/config/igor-local.yml create mode 100644 stable/spinnaker/config/igor.yml create mode 100644 stable/spinnaker/config/orca-local.yml create mode 100644 stable/spinnaker/config/orca.yml create mode 100644 stable/spinnaker/config/rosco-local.yml create mode 100644 stable/spinnaker/config/rosco.yml create mode 100644 stable/spinnaker/config/settings.js create mode 100644 stable/spinnaker/config/spinnaker.yml create mode 100644 stable/spinnaker/requirements.lock create mode 100644 stable/spinnaker/requirements.yaml create mode 100644 stable/spinnaker/templates/NOTES.txt create mode 100644 stable/spinnaker/templates/_helpers.tpl create mode 100644 stable/spinnaker/templates/configmap/jenkins-config.yaml create mode 100644 stable/spinnaker/templates/configmap/jenkins-jobs.yaml create mode 100644 stable/spinnaker/templates/configmap/s3-config.yaml create mode 100644 stable/spinnaker/templates/configmap/spinnaker-config.yaml create mode 100644 stable/spinnaker/templates/deployments/clouddriver.yaml create mode 100644 stable/spinnaker/templates/deployments/deck.yaml create mode 100644 stable/spinnaker/templates/deployments/echo.yaml create mode 100644 stable/spinnaker/templates/deployments/front50.yaml create mode 100644 stable/spinnaker/templates/deployments/gate.yaml create mode 100644 stable/spinnaker/templates/deployments/igor.yaml create mode 100644 stable/spinnaker/templates/deployments/orca.yaml create mode 100644 stable/spinnaker/templates/deployments/rosco.yaml create mode 100644 stable/spinnaker/templates/hooks/create-bucket.yaml create mode 100644 stable/spinnaker/templates/hooks/delete-jobs.yaml create mode 100644 stable/spinnaker/templates/hooks/upload-build-image.yaml create mode 100644 stable/spinnaker/templates/hooks/upload-run-script.yaml create mode 100644 stable/spinnaker/templates/svc/clouddriver.yaml create mode 100644 stable/spinnaker/templates/svc/deck.yaml create mode 100644 stable/spinnaker/templates/svc/echo.yaml create mode 100644 stable/spinnaker/templates/svc/front50.yaml create mode 100644 stable/spinnaker/templates/svc/gate.yaml create mode 100644 stable/spinnaker/templates/svc/igor.yaml create mode 100644 stable/spinnaker/templates/svc/orca.yaml create mode 100644 stable/spinnaker/templates/svc/rosco.yaml create mode 100644 stable/spinnaker/values.yaml 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"