tpt-rails 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (51) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +127 -0
  3. data/Rakefile +32 -0
  4. data/app/assets/config/tpt_rails_manifest.js +1 -0
  5. data/app/assets/stylesheets/tpt/rails/application.css +15 -0
  6. data/app/controllers/tpt/rails/application_controller.rb +5 -0
  7. data/app/controllers/tpt/rails/error_tests_controller.rb +21 -0
  8. data/app/controllers/tpt/rails/health_checks_controller.rb +18 -0
  9. data/app/helpers/tpt/rails/application_helper.rb +4 -0
  10. data/app/jobs/tpt/rails/application_job.rb +4 -0
  11. data/app/mailers/tpt/rails/application_mailer.rb +6 -0
  12. data/app/models/tpt/rails/application_record.rb +5 -0
  13. data/app/views/layouts/tpt/rails/application.html.erb +15 -0
  14. data/config/routes.rb +6 -0
  15. data/lib/generators/tpt_rails/configuration/configuration_generator.rb +10 -0
  16. data/lib/generators/tpt_rails/configuration/templates/config/initializers/tpt_rails.rb +10 -0
  17. data/lib/generators/tpt_rails/continuous_integration/continuous_integration_generator.rb +17 -0
  18. data/lib/generators/tpt_rails/continuous_integration/templates/ci/Dockerfile.tt +31 -0
  19. data/lib/generators/tpt_rails/continuous_integration/templates/ci/docker-compose.yaml.tt +26 -0
  20. data/lib/generators/tpt_rails/continuous_integration/templates/ci/tasks/project.test.unit +12 -0
  21. data/lib/generators/tpt_rails/continuous_integration/templates/ci/test.Jenkinsfile.tt +40 -0
  22. data/lib/generators/tpt_rails/continuous_integration/templates/ci/test.config.xml.tt +76 -0
  23. data/lib/generators/tpt_rails/continuous_integration/templates/ci/tptcd.Jenkinsfile.tt +7 -0
  24. data/lib/generators/tpt_rails/continuous_integration/templates/ci/tptci.Jenkinsfile.tt +7 -0
  25. data/lib/generators/tpt_rails/kubernetes/kubernetes_generator.rb +156 -0
  26. data/lib/generators/tpt_rails/kubernetes/templates/Dockerfile.tt +41 -0
  27. data/lib/generators/tpt_rails/kubernetes/templates/entrypoint.sh +13 -0
  28. data/lib/generators/tpt_rails/kubernetes/templates/kubernetes/helm/Chart.yaml.tt +16 -0
  29. data/lib/generators/tpt_rails/kubernetes/templates/kubernetes/helm/README.md +142 -0
  30. data/lib/generators/tpt_rails/kubernetes/templates/kubernetes/helm/requirements.yaml.tt +8 -0
  31. data/lib/generators/tpt_rails/kubernetes/templates/kubernetes/helm/templates/NOTES.txt.tt +8 -0
  32. data/lib/generators/tpt_rails/kubernetes/templates/kubernetes/helm/templates/_env.yaml +15 -0
  33. data/lib/generators/tpt_rails/kubernetes/templates/kubernetes/helm/templates/_helpers.tpl.tt +63 -0
  34. data/lib/generators/tpt_rails/kubernetes/templates/kubernetes/helm/templates/autoscaler.yaml.tt +21 -0
  35. data/lib/generators/tpt_rails/kubernetes/templates/kubernetes/helm/templates/deployment.yaml.tt +96 -0
  36. data/lib/generators/tpt_rails/kubernetes/templates/kubernetes/helm/templates/hooks/db-migrate.yaml.tt +59 -0
  37. data/lib/generators/tpt_rails/kubernetes/templates/kubernetes/helm/templates/service.yaml.tt +52 -0
  38. data/lib/generators/tpt_rails/kubernetes/templates/kubernetes/helm/values.prod.yaml.tt +52 -0
  39. data/lib/generators/tpt_rails/kubernetes/templates/kubernetes/helm/values.staging.yaml.tt +52 -0
  40. data/lib/generators/tpt_rails/kubernetes/templates/kubernetes/helm/values.yaml.tt +171 -0
  41. data/lib/generators/tpt_rails/postman/postman.yaml.tt +2 -0
  42. data/lib/tasks/tpt/rails_tasks.rake +23 -0
  43. data/lib/tpt/rails.rb +65 -0
  44. data/lib/tpt/rails/config.rb +77 -0
  45. data/lib/tpt/rails/engine.rb +7 -0
  46. data/lib/tpt/rails/internal.rb +3 -0
  47. data/lib/tpt/rails/internal/datadog.rb +66 -0
  48. data/lib/tpt/rails/internal/error_reporter.rb +68 -0
  49. data/lib/tpt/rails/internal/health_checks.rb +32 -0
  50. data/lib/tpt/rails/version.rb +5 -0
  51. metadata +153 -0
@@ -0,0 +1,8 @@
1
+ dependencies:
2
+ - name: mysql
3
+ version: 1.3.0
4
+ repository: '@stable'
5
+ - name: copy-secrets
6
+ version: ~1.1.0
7
+ repository: https://chartmuseum.tptpm.info
8
+ condition: copy-secrets.enabled
@@ -0,0 +1,8 @@
1
+ <%= Tpt::Rails.app_name %> can be accessed via port {{ .Values.environment.APP_PORT }} on the
2
+ following DNS name from within your cluster:
3
+ {{ template "<%= Tpt::Rails.app_name %>.fullname" . }}.{{ .Release.Namespace }}.svc.cluster.local
4
+
5
+ For local development:
6
+ # Execute the following commands to route the connection:
7
+ export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app={{ template "<%= Tpt::Rails.app_name %>.fullname" . }}" -o jsonpath="{.items[0].metadata.name}")
8
+ kubectl --namespace {{ .Release.Namespace }} port-forward $POD_NAME {{ .Values.environment.APP_PORT }}:{{ .Values.environment.APP_PORT }}
@@ -0,0 +1,15 @@
1
+ {{ define "env" }}
2
+ {{- range $key, $val := .Values.environment }}
3
+ - name: {{ $key }}
4
+ {{- if hasPrefix "valueFrom:" $val }}
5
+ {{- tpl $val $ | nindent 2 }}
6
+ {{- else }}
7
+ value: {{ tpl $val $ | quote }}
8
+ {{- end }}
9
+ {{- end}}
10
+ # This is in this file because we can't have conditionals in `values.yaml`.
11
+ {{- if .Values.redis.enabled }}
12
+ - name: REDIS_URL
13
+ value: "redis://{{ .Release.Name }}-redis-master:{{ .Values.redis.redisPort }}"
14
+ {{- end }}
15
+ {{ end }}
@@ -0,0 +1,63 @@
1
+ {{/* vim: set filetype=mustache: */}}
2
+
3
+ {{/*
4
+ Expand the name of the chart.
5
+ */}}
6
+ {{- define "<%= Tpt::Rails.app_name %>.name" -}}
7
+ {{- if .Values.fullnameOverride -}}
8
+ {{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}}
9
+ {{- else -}}
10
+ {{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}}
11
+ {{- end -}}
12
+ {{- end -}}
13
+
14
+ {{/*
15
+ Create a default fully qualified app name.
16
+ We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
17
+ If release name contains chart name it will be used as a full name.
18
+ */}}
19
+ {{- define "<%= Tpt::Rails.app_name %>.fullname" -}}
20
+ {{- if .Values.fullnameOverride -}}
21
+ {{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}}
22
+ {{- else -}}
23
+ {{- $name := default .Chart.Name .Values.nameOverride -}}
24
+ {{- if contains $name .Release.Name -}}
25
+ {{- printf .Release.Name | trunc 63 | trimSuffix "-" -}}
26
+ {{- else -}}
27
+ {{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}}
28
+ {{- end -}}
29
+ {{- end -}}
30
+ {{- end -}}
31
+
32
+ {{/*
33
+ Get domain name of ode
34
+ */}}
35
+ {{- define "<%= Tpt::Rails.app_name %>.domain" -}}
36
+ {{- printf "%s.%s" .Release.Namespace .Values.app.ingress_dns_name -}}
37
+ {{- end -}}
38
+
39
+ {{/*
40
+ Get service.
41
+ */}}
42
+ {{- define "<%= Tpt::Rails.app_name %>.service" -}}
43
+ {{- $trimPath := .service.path | trimPrefix "/" -}}
44
+ {{- if eq .service.useIngress true -}}
45
+ {{- printf "%s://%s-%s:%v/%s" .service.protocol .service.hostName .domain .service.port $trimPath -}}
46
+ {{- else -}}
47
+ {{- printf "%s://%s:%v/%s" .service.protocol .service.hostName .service.port $trimPath -}}
48
+ {{- end -}}
49
+ {{- end -}}
50
+
51
+ {{/*
52
+ Get services.
53
+ */}}
54
+ {{- define "<%= Tpt::Rails.app_name %>.services" -}}
55
+ {{- $domain := (include "<%= Tpt::Rails.app_name %>.domain" .) -}}
56
+ {{- range $key, $serviceDefinition := .Values.app.services }}
57
+ {{- if ne (hasKey $.Values.environment $serviceDefinition.envVarName) true }}
58
+ {{- $service := dict "domain" $domain "service" $serviceDefinition | include "<%= Tpt::Rails.app_name %>.service" }}
59
+ - name: {{ $serviceDefinition.envVarName }}
60
+ value: {{ printf "%s" $service | trimSuffix "/" | quote }}
61
+ {{- end }}
62
+ {{- end }}
63
+ {{- end -}}
@@ -0,0 +1,21 @@
1
+ apiVersion: autoscaling/v1
2
+ kind: HorizontalPodAutoscaler
3
+ metadata:
4
+ name: {{ template "<%= Tpt::Rails.app_name %>.fullname" . }}
5
+ labels:
6
+ app: {{ template "<%= Tpt::Rails.app_name %>.name" . }}
7
+ chart: "{{ .Chart.Name }}-{{ .Chart.Version }}"
8
+ release: "{{ .Release.Name }}"
9
+ heritage: "{{ .Release.Service }}"
10
+ tpt/project: "{{ .Chart.Name }}"
11
+ tpt/owner: {{ .Values.annotations.owner }}
12
+ tpt/creator: {{ .Values.annotations.creator | default "UNKNOWN" | quote }}
13
+ tpt/release: "{{ .Release.Name }}"
14
+ spec:
15
+ scaleTargetRef:
16
+ apiVersion: apps/v1
17
+ kind: Deployment
18
+ name: {{ template "<%= Tpt::Rails.app_name %>.fullname" . }}
19
+ minReplicas: {{ .Values.autoscaler.minimumPods }}
20
+ maxReplicas: {{ .Values.autoscaler.maximumPods }}
21
+ targetCPUUtilizationPercentage: {{ .Values.autoscaler.targetCPUUtilizationPercentage }}
@@ -0,0 +1,96 @@
1
+ # Kube information about the deployment
2
+ # For documentation on these properties, see:
3
+ # https://kubernetes.io/docs/concepts/workloads/controllers/deployment/#creating-a-deployment
4
+
5
+ apiVersion: apps/v1
6
+ kind: Deployment
7
+ metadata:
8
+ name: {{ template "<%= Tpt::Rails.app_name %>.fullname" . }}
9
+ labels:
10
+ app: {{ template "<%= Tpt::Rails.app_name %>.name" . }}
11
+ chart: "{{ .Chart.Name }}-{{ .Chart.Version }}"
12
+ release: "{{ .Release.Name }}"
13
+ heritage: "{{ .Release.Service }}"
14
+ tpt/project: "{{ .Chart.Name }}"
15
+ tpt/owner: {{ .Values.annotations.owner }}
16
+ tpt/creator: {{ .Values.annotations.creator | default "UNKNOWN" | quote }}
17
+ tpt/release: "{{ .Release.Name }}"
18
+ spec:
19
+ strategy:
20
+ type: RollingUpdate
21
+ rollingUpdate:
22
+ {{ toYaml .Values.rollingUpdate | indent 6 | trim }}
23
+ selector:
24
+ matchLabels:
25
+ app: {{ template "<%= Tpt::Rails.app_name %>.fullname" . }}
26
+ replicas: {{ .Values.replicas }}
27
+ # Max number of replicat sets to retain.
28
+ # Sets exceeding this limit will get deleted
29
+ revisionHistoryLimit: {{ .Values.revisionHistoryLimit }}
30
+ template:
31
+ metadata:
32
+ labels:
33
+ app: {{ template "<%= Tpt::Rails.app_name %>.fullname" . }}
34
+ release: "{{ .Release.Name }}"
35
+ track: stable
36
+ language: ruby
37
+ tpt/project: "{{ .Chart.Name }}"
38
+ tpt/creator: {{ .Values.annotations.creator | default "UNKNOWN" | quote }}
39
+ annotations:
40
+ buildID: "{{ .Values.buildID }}"
41
+ sidecar.istio.io/inject: "true"
42
+ spec:
43
+ # Specifies where our Kube secrets are coming from
44
+ imagePullSecrets:
45
+ - name: {{ .Values.imagePullSecrets.name }}
46
+ containers:
47
+ - name: {{ template "<%= Tpt::Rails.app_name %>.fullname" . }}
48
+ # This references our images on Docker hub
49
+ {{- if .Values.revision }}
50
+ # If a different container version has been specified, use it
51
+ image: "teacherspayteachers/{{ .Values.image.name }}:{{ .Values.revision }}"
52
+ {{- else }}
53
+ image: "teacherspayteachers/{{ .Values.image.name }}:{{ .Values.image.tag }}"
54
+ {{- end }}
55
+ imagePullPolicy: {{ .Values.image.pullPolicy | quote }}
56
+ # Specifies provisioning requests & limits (memory and CPU)
57
+ resources:
58
+ limits:
59
+ memory: {{ .Values.resources.limits.memory }}
60
+ cpu: {{ .Values.resources.limits.cpu }}
61
+ requests:
62
+ memory: {{ .Values.resources.requests.memory }}
63
+ cpu: {{ .Values.resources.requests.cpu }}
64
+ env:
65
+ {{- include "env" . | indent 10 }}
66
+ {{- include "<%= Tpt::Rails.app_name %>.services" . | nindent 10 }}
67
+ {{- if .Values.secrets }}
68
+ {{ toYaml .Values.secrets | trim | nindent 10 }}
69
+ {{- end }}
70
+ ports:
71
+ # Where our application is listening
72
+ - containerPort: {{ .Values.environment.APP_PORT }}
73
+ # Specifies an endpoint. Kube won't mark the container as ready until
74
+ # this endpoint returns a success code
75
+ readinessProbe:
76
+ httpGet:
77
+ path: /internal/health-check
78
+ port: {{ .Values.environment.APP_PORT }}
79
+ scheme: HTTP
80
+ initialDelaySeconds: {{ .Values.readinessProbe.initialDelaySeconds }}
81
+ timeoutSeconds: {{ .Values.readinessProbe.timeoutSeconds }}
82
+ periodSeconds: {{ .Values.readinessProbe.periodSeconds }}
83
+ failureThreshold: {{ .Values.readinessProbe.failureThreshold }}
84
+ successThreshold: {{ .Values.readinessProbe.successThreshold }}
85
+ # Specifies an endpoint. Kube will take the container out of circulation
86
+ # if it fails the health check for too long
87
+ livenessProbe:
88
+ httpGet:
89
+ path: /internal/health-check
90
+ port: {{ .Values.environment.APP_PORT }}
91
+ scheme: HTTP
92
+ initialDelaySeconds: {{ .Values.livenessProbe.initialDelaySeconds }}
93
+ timeoutSeconds: {{ .Values.livenessProbe.timeoutSeconds }}
94
+ periodSeconds: {{ .Values.livenessProbe.periodSeconds }}
95
+ failureThreshold: {{ .Values.livenessProbe.failureThreshold }}
96
+ successThreshold: {{ .Values.livenessProbe.successThreshold }}
@@ -0,0 +1,59 @@
1
+ {{- if .Values.migrateCommand -}}
2
+ apiVersion: batch/v1
3
+ kind: Job # runs once and then stops
4
+ metadata:
5
+ name: {{ template "<%= Tpt::Rails.app_name %>.fullname" . }}-db-migrate
6
+ labels:
7
+ app: {{ template "<%= Tpt::Rails.app_name %>.name" . }}
8
+ chart: "{{ .Chart.Name }}-{{ .Chart.Version }}"
9
+ release: "{{ .Release.Name }}"
10
+ heritage: "{{ .Release.Service }}"
11
+ tpt/project: "{{ .Chart.Name }}"
12
+ tpt/owner: {{ .Values.annotations.owner }}
13
+ tpt/creator: {{ .Values.annotations.creator | default "UNKNOWN" | quote }}
14
+ tpt/release: "{{ .Release.Name }}"
15
+ annotations:
16
+ # post-install: after initial creation of stack, pre-upgrade: before deploying new code
17
+ "helm.sh/hook": "post-install,pre-upgrade"
18
+ "helm.sh/hook-delete-policy": "before-hook-creation"
19
+ "helm.sh/hook-weight": "0"
20
+ spec:
21
+ template:
22
+ metadata:
23
+ labels:
24
+ app: {{ template "<%= Tpt::Rails.app_name %>.name" . }}
25
+ release: {{ .Release.Name }}
26
+ annotations:
27
+ buildID: "{{ .Values.buildID }}"
28
+ sidecar.istio.io/inject: "false"
29
+ spec:
30
+ restartPolicy: Never
31
+ imagePullSecrets:
32
+ - name: {{ .Values.imagePullSecrets.name }}
33
+ containers:
34
+ - name: {{ template "<%= Tpt::Rails.app_name %>.fullname" . }}
35
+ # This references our images on Docker hub
36
+ {{- if .Values.revision }}
37
+ # If a different container version has been specified, use it
38
+ image: "teacherspayteachers/{{ .Values.image.name }}:{{ .Values.revision }}"
39
+ {{- else }}
40
+ image: "teacherspayteachers/{{ .Values.image.name }}:{{ .Values.image.tag }}"
41
+ {{- end }}
42
+ imagePullPolicy: {{ .Values.image.pullPolicy | quote }}
43
+ command: ["/bin/sh"]
44
+ # This is what causes a different command to be run for this job
45
+ args: ["-c", "{{ .Values.migrateCommand }}"]
46
+ # Specifies provisioning requests & limits (memory and CPU)
47
+ resources:
48
+ limits:
49
+ memory: {{ .Values.resources.limits.memory }}
50
+ cpu: {{ .Values.resources.limits.cpu }}
51
+ requests:
52
+ memory: {{ .Values.resources.requests.memory }}
53
+ cpu: {{ .Values.resources.requests.cpu }}
54
+ env:
55
+ {{- include "env" . | indent 10 }}
56
+ {{- if .Values.secrets }}
57
+ {{ toYaml .Values.secrets | trim | nindent 10 }}
58
+ {{- end }}
59
+ {{- end -}}
@@ -0,0 +1,52 @@
1
+ # Information about the service
2
+ # For documentation on these properties, see:
3
+ # https://kubernetes.io/docs/concepts/services-networking/service/#defining-a-service
4
+
5
+ apiVersion: v1
6
+ kind: Service
7
+ metadata:
8
+ # References the "<%= Tpt::Rails.app_name %>.fullname" property defined in _helpers.tpl
9
+ name: {{ template "<%= Tpt::Rails.app_name %>.fullname" . }}
10
+ labels:
11
+ app: {{ template "<%= Tpt::Rails.app_name %>.fullname" . }}
12
+ # References system properties from Helm
13
+ chart: "{{ .Chart.Name }}-{{ .Chart.Version }}"
14
+ release: "{{ .Release.Name }}"
15
+ heritage: "{{ .Release.Service }}"
16
+ tpt/project: "{{ .Chart.Name }}"
17
+ tpt/owner: {{ .Values.annotations.owner }}
18
+ tpt/creator: {{ .Values.annotations.creator | default "UNKNOWN" | quote }}
19
+ tpt/release: "{{ .Release.Name }}"
20
+ annotations:
21
+ getambassador.io/config: |
22
+ apiVersion: ambassador/v1
23
+ kind: Mapping
24
+ name: {{ template "<%= Tpt::Rails.app_name %>.fullname" . }}_{{ .Release.Namespace }}_mapping
25
+ prefix: /
26
+ host: {{ template "<%= Tpt::Rails.app_name %>.fullname" . }}.ode.tptpm.info
27
+ service: {{ template "<%= Tpt::Rails.app_name %>.fullname" . }}.{{ .Release.Namespace }}:{{ .Values.service.port }}
28
+ # retry_policy:
29
+ # retry_on: "5xx"
30
+ # num_retries: 5
31
+ # per_try_timeout: "3s"
32
+ labels:
33
+ ambassador:
34
+ - request_label:
35
+ - frontend
36
+ {{- if eq .Values.service.type "LoadBalancer" }}
37
+ service.beta.kubernetes.io/aws-load-balancer-backend-protocol: "http"
38
+ service.beta.kubernetes.io/aws-load-balancer-cross-zone-load-balancing-enabled: "true"
39
+ service.beta.kubernetes.io/aws-load-balancer-internal: "0.0.0.0/0"
40
+ {{- end }}
41
+ spec:
42
+ # References the service.type property from values.yaml
43
+ type: {{ .Values.service.type }}
44
+ ports:
45
+ - name: http
46
+ # The incoming port
47
+ port: {{ .Values.service.port }}
48
+ protocol: TCP
49
+ # Port to map to. This is where the application is listening
50
+ targetPort: {{ .Values.environment.APP_PORT }}
51
+ selector:
52
+ app: {{ template "<%= Tpt::Rails.app_name %>.fullname" . }}
@@ -0,0 +1,52 @@
1
+ name: <%= Tpt::Rails.app_name %>
2
+ deploy_env: production
3
+
4
+ image:
5
+ name: <%= Tpt::Rails.app_name %>
6
+ repository: <%= Tpt::Rails.app_name %>
7
+ tag: latest
8
+ pullPolicy: Always
9
+
10
+ environment:
11
+ ENVIRONMENT: production
12
+ APP_ENV: production
13
+ RAILS_ENV: production
14
+
15
+ postgresql:
16
+ enabled: false
17
+
18
+ copy-secrets:
19
+ enabled: false
20
+
21
+ redis:
22
+ enabled: false
23
+
24
+ secrets:
25
+ - name: RAILS_MASTER_KEY
26
+ valueFrom:
27
+ secretKeyRef:
28
+ name: <%= Tpt::Rails.app_name %>-secrets
29
+ key: rails-master-key
30
+ - name: DATABASE_URL
31
+ valueFrom:
32
+ secretKeyRef:
33
+ name: <%= Tpt::Rails.app_name %>-secrets
34
+ # To set up a staging/prod DB:
35
+ # - Create the DB in the TpT terraform repo
36
+ # - Use the root DB account to create an application DB user
37
+ # - Create a kube secret (e.g. prod-resource-catalog-db-url) with the DATABASE_URL
38
+ # (including the application user credentials)
39
+ # - Update the key below to reference your secret
40
+ key: 'FIXME'
41
+
42
+ autoscaler:
43
+ minimumPods: 3
44
+ maximumPods: 6
45
+ targetCPUUtilizationPercentage: 70
46
+
47
+ rollingUpdate:
48
+ maxSurge: 25%
49
+
50
+ # Create ELB
51
+ # service:
52
+ # type: LoadBalancer
@@ -0,0 +1,52 @@
1
+ name: <%= Tpt::Rails.app_name %>
2
+ deploy_env: staging
3
+
4
+ image:
5
+ name: <%= Tpt::Rails.app_name %>
6
+ repository: <%= Tpt::Rails.app_name %>
7
+ tag: latest
8
+ pullPolicy: Always
9
+
10
+ environment:
11
+ ENVIRONMENT: staging
12
+ APP_ENV: production
13
+ RAILS_ENV: production
14
+
15
+ postgresql:
16
+ enabled: false
17
+
18
+ copy-secrets:
19
+ enabled: false
20
+
21
+ redis:
22
+ enabled: false
23
+
24
+ secrets:
25
+ - name: RAILS_MASTER_KEY
26
+ valueFrom:
27
+ secretKeyRef:
28
+ name: <%= Tpt::Rails.app_name %>-secrets
29
+ key: rails-master-key
30
+ - name: DATABASE_URL
31
+ valueFrom:
32
+ secretKeyRef:
33
+ name: <%= Tpt::Rails.app_name %>-secrets
34
+ # To set up a staging/prod DB:
35
+ # - Create the DB in the TpT terraform repo
36
+ # - Use the root DB account to create an application DB user
37
+ # - Create a kube secret (e.g. prod-resource-catalog-db-url) with the DATABASE_URL
38
+ # (including the application user credentials)
39
+ # - Update the key below to reference your secret
40
+ key: 'FIXME'
41
+
42
+ autoscaler:
43
+ minimumPods: 2
44
+ maximumPods: 3
45
+ targetCPUUtilizationPercentage: 70
46
+
47
+ rollingUpdate:
48
+ maxSurge: 25%
49
+
50
+ # Create ELB
51
+ # service:
52
+ # type: LoadBalancer
@@ -0,0 +1,171 @@
1
+ # Values to be used elsewhere in the Helm configuration
2
+
3
+ # Values in this file are the defaults. Override these values in other environments via
4
+ # `values.<some environment>.yaml` files.
5
+ name: <%= Tpt::Rails.app_name %>
6
+ # ODEs use "integration" as the deploy_env
7
+ deploy_env: integration
8
+
9
+ # There are added to Kubernetes in various ways as labels/etc
10
+ annotations:
11
+ owner: <%= config.fetch(:team_name) %>
12
+
13
+ # Docker image configuration for the pod
14
+ image:
15
+ name: <%= Tpt::Rails.app_name %>
16
+ repository: <%= Tpt::Rails.app_name %>
17
+ tag: latest # most recently pushed
18
+ pullPolicy: Always # always pull, don't use a cached version
19
+
20
+ # Used by a Helm hook that runs migration
21
+ migrateCommand: 'bin/rails db:prepare'
22
+
23
+ # Container count
24
+ replicas: 1
25
+
26
+ revisionHistoryLimit: 5
27
+
28
+ # CI changes this before deploying
29
+ buildID: 1
30
+
31
+ imagePullSecrets:
32
+ name: "tptreadonly-docker"
33
+
34
+ # Deployment params
35
+ rollingUpdate:
36
+ maxUnavailable: 25% # X% of pods are allowed to be offline at once as we deploy
37
+ maxSurge: 0 # Setting this above 0 will allow having extra pods online during deploy
38
+
39
+ mysql:
40
+ enabled: true
41
+ podAnnotations:
42
+ # istio is a service mesh. the istio sidecar interferes with how other pods connect to the MySQL
43
+ # pod.
44
+ sidecar.istio.io/inject: "false"
45
+ # mysqlRootPassword is only used in this file and is only for ODEs
46
+ mysqlRootPassword: "123456"
47
+ persistence:
48
+ enabled: false
49
+
50
+ redis:
51
+ enabled: false
52
+ # usePassword: false
53
+ # cluster:
54
+ # enabled: false
55
+ # persistence:
56
+ # enabled: true
57
+ # size: 10Gi
58
+
59
+ ## Configure the service
60
+ ## ref: http://kubernetes.io/docs/user-guide/services/
61
+ service:
62
+ ## Specify a service type
63
+ ## ref: https://kubernetes.io/docs/concepts/services-networking/service/#publishing-services---service-types
64
+ type: ClusterIP
65
+ port: 80
66
+
67
+ ## Configure resource requests and limits
68
+ ## ref: http://kubernetes.io/docs/user-guide/compute-resources/
69
+ ##
70
+ resources:
71
+ # requests is guaranteed. kubernetes will only put your pod on a node where it can guarantee these
72
+ # amounts.
73
+ requests:
74
+ memory: 256Mi
75
+ cpu: 200m
76
+ # limits is when your pod gets killed for using too many resources
77
+ limits:
78
+ memory: 512Mi
79
+ cpu: 1
80
+
81
+ app:
82
+ # this configures your service to be available at <%= Tpt::Rails.app_name %>.<ingress_dns_name>
83
+ ingress_dns_name: "ode.tptpm.info"
84
+
85
+ #
86
+ # Environment variables for the <%= Tpt::Rails.app_name %> service
87
+ #
88
+ # These values are used in templates/_env.yaml, with some of them (e.g. `valueFrom`, or any `{{…}}`
89
+ # templates) getting converted into other values.
90
+ # See also templates/_env.yaml for additional environment variables.
91
+ environment:
92
+ APP_PORT: '3000'
93
+ APP_NAME: <%= Tpt::Rails.app_name %>
94
+ APP_ENV: integration
95
+ DD_TRACE_DEBUG: '1'
96
+ # DATABASE_URL is only used in ODEs
97
+ DATABASE_URL: 'mysql2://root:{{ .Values.mysql.mysqlRootPassword }}@{{ template "<%= Tpt::Rails.app_name %>.fullname" . }}-mysql:3306/<%= Tpt::Rails.app_name %>_production'
98
+ RAILS_ENV: 'production'
99
+ RAILS_LOG_TO_STDOUT: '1'
100
+ RAILS_SERVE_STATIC_FILES: '1'
101
+ CLUSTER_SELECTOR: 'app={{ template "<%= Tpt::Rails.app_name %>.fullname" . }}'
102
+ APP_ENV_NAME: |-
103
+ valueFrom:
104
+ fieldRef:
105
+ fieldPath: metadata.namespace
106
+ KUBE_POD: |-
107
+ valueFrom:
108
+ fieldRef:
109
+ fieldPath: metadata.name
110
+ KUBE_NODE: |-
111
+ valueFrom:
112
+ fieldRef:
113
+ fieldPath: spec.nodeName
114
+ KUBE_POD_IP: |-
115
+ valueFrom:
116
+ fieldRef:
117
+ fieldPath: status.podIP
118
+ DATADOG_TRACE_HOST: |-
119
+ valueFrom:
120
+ fieldRef:
121
+ fieldPath: status.hostIP
122
+ DATADOG_TRACE_PORT: "8126"
123
+ DATADOG_TRACE_URL: "datadog://$(DATADOG_TRACE_HOST):$(DATADOG_TRACE_PORT)"
124
+ DOGSTATSD_HOST: |-
125
+ valueFrom:
126
+ fieldRef:
127
+ fieldPath: status.hostIP
128
+ DOGSTATSD_PORT: "8125"
129
+ DOGSTATSD_URL: "statsd://$(DOGSTATSD_HOST):$(DOGSTATSD_PORT)"
130
+
131
+ copy-secrets:
132
+ enabled: true
133
+ secrets:
134
+ - <%= config.fetch(:secrets_name) %>
135
+
136
+ secrets:
137
+ - name: RAILS_MASTER_KEY
138
+ valueFrom:
139
+ secretKeyRef:
140
+ name: <%= config.fetch(:secrets_name) %>
141
+ key: rails-master-key
142
+
143
+ # liveness: Whether the pod is up.
144
+ # After `initialDelaySeconds` if this is failing Kube will crash+restart the pod.
145
+ livenessProbe:
146
+ initialDelaySeconds: 120
147
+ timeoutSeconds: 2
148
+ periodSeconds: 15
149
+ failureThreshold: 3
150
+ successThreshold: 1
151
+
152
+ # readiness: Whether the pod is ready to receive traffic.
153
+ # If this fails Kube will take the pod out of rotation until the pod becomes ready again.
154
+ readinessProbe:
155
+ initialDelaySeconds: 5
156
+ timeoutSeconds: 2
157
+ periodSeconds: 15 # time between failures
158
+ failureThreshold: 3 # fails required before probe counts as failed
159
+ successThreshold: 1 # successes required to mark the probe as ready again
160
+
161
+ # tests:
162
+ # apiFunctional:
163
+ # postman:
164
+ # collection: 5817358-93d711ed-3181-480d-bba5-ab68b0a29eae
165
+ # environment: 5817358-dccd7905-050c-4d93-a9bf-743eae208f46
166
+ # folder: Working
167
+
168
+ autoscaler:
169
+ minimumPods: 1
170
+ maximumPods: 1
171
+ targetCPUUtilizationPercentage: 70 # no effect if minimumPods == maximumPods