kubernetes_helper 1.18.0 → 1.19.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +6 -0
- data/lib/kubernetes_helper/core.rb +5 -3
- data/lib/kubernetes_helper/version.rb +1 -1
- data/lib/templates/_cronjobs_pod.yml +40 -0
- data/lib/templates/_jobs_pod.yml +47 -0
- data/lib/templates/_volumes.yml +1 -1
- data/lib/templates/deployment.yml +3 -48
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3d37444885845a0d47f9824c6b9e220f278ae7db62de9cc7d3222d3ea91da753
|
4
|
+
data.tar.gz: 64834c2950efa2394c032adfacdd13b8dcb392d7a5346a6101fb7c7c04e30c92
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: aa17228790e2b026d284272ae7312d9a241d00646be1fb904b863fec037c266d95e853932d3d4c62147db54e9b167d30a89191f50d8d7ae5da74605b963f7100
|
7
|
+
data.tar.gz: 65a3991a40379500a37789b37af86c258d472d627a48e95f108366050ff9300f7cc4851981e3723092074dbe161d2366935022df629447117a6cce0e7d137609
|
data/README.md
CHANGED
@@ -55,6 +55,12 @@ Configuration and customization can be done for multiple environments and at any
|
|
55
55
|
- `deployment.job_apps[].services` (Array, Optional): List of linux service names that are required for a healthy job container. Sample: `['sidekiq', 'cron']`. Note: This will be ignored if `sidekiq_alive_gem` was defined.
|
56
56
|
- `deployment.job_apps[].resources` (Hash, optional): Configure depending on the job app requirements. Sample: `{ cpu: { max: '1', min: '500m' }, mem: { max: '1Gi', min: '500Mi' } }`
|
57
57
|
|
58
|
+
### Required settings for Cronjob apps (Note: Cronjobs do not support `sidekiq_alive_gem` and `services`)
|
59
|
+
- `deployment.job_apps[].schedule` (String): Cron schedule. Sample: `*/5 * * * *`
|
60
|
+
- `deployment.job_apps[].kind` (String, default `Deployment`): Kind of job application [`Deployment` or `CronJob`]
|
61
|
+
- `deployment.job_apps[].concurrency_policy` (String, default `Forbid`): [Documentation](https://kubernetes.io/docs/tasks/job/automated-tasks-with-cron-jobs/#concurrency-policy)
|
62
|
+
- `deployment.job_apps[].suspend` (String, default `false`): If `true` then marks as finished the job application (stops creating new pods).
|
63
|
+
|
58
64
|
### Applications secrets.yml (Optional)
|
59
65
|
- `secrets.name` (String): K8s secrets name where env vars will be saved and fetched from. Sample: `my-app-secrets`
|
60
66
|
- `secrets.import_all_secrets` (Boolean, default false):
|
@@ -78,6 +78,7 @@ module KubernetesHelper
|
|
78
78
|
def render_template(template_name, locals = {})
|
79
79
|
path = KubernetesHelper.settings_path(template_name, use_template: true)
|
80
80
|
text = "\n#{File.read(path)}"
|
81
|
+
text = text.gsub("\n", "\n#{' ' * locals[:tab]}") if locals[:tab]
|
81
82
|
replace_config_variables(text, locals)
|
82
83
|
end
|
83
84
|
|
@@ -94,12 +95,13 @@ module KubernetesHelper
|
|
94
95
|
|
95
96
|
# parse secrets auto importer
|
96
97
|
def parse_import_secrets(document) # rubocop:disable Metrics/AbcSize
|
97
|
-
|
98
|
+
cronjob_containers = document.dig('spec', 'jobTemplate', 'spec', 'template', 'spec', 'containers')
|
99
|
+
containers = document.dig('spec', 'template', 'spec', 'containers') || cronjob_containers || []
|
98
100
|
containers.each do |container|
|
99
101
|
container['env'] = (container['env'] || [])
|
100
|
-
container['env'] = container['env'] + static_env_vars if container.delete('static_env')
|
102
|
+
container['env'] = (container['env'] + static_env_vars).uniq if container.delete('static_env')
|
101
103
|
if container['import_secrets']
|
102
|
-
container['env'] = container['env'] + import_secrets(*container['import_secrets'])
|
104
|
+
container['env'] = (container['env'] + import_secrets(*container['import_secrets'])).uniq
|
103
105
|
container.delete('import_secrets')
|
104
106
|
end
|
105
107
|
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
- apiVersion: batch/v1
|
2
|
+
kind: CronJob
|
3
|
+
metadata:
|
4
|
+
name: &cronjob_name <%= locals[:job_app][:name] %>
|
5
|
+
spec:
|
6
|
+
schedule: "<%= locals[:job_app][:schedule] %>"
|
7
|
+
concurrencyPolicy: "<%= locals[:job_app][:concurrency_policy] || 'Forbid' %>"
|
8
|
+
suspend: <%= locals[:job_app][:suspend] || false %>
|
9
|
+
# startingDeadlineSeconds: 200
|
10
|
+
jobTemplate:
|
11
|
+
spec:
|
12
|
+
template:
|
13
|
+
spec:
|
14
|
+
<<: *template_spec
|
15
|
+
restartPolicy: OnFailure
|
16
|
+
containers:
|
17
|
+
- <<: *app_container
|
18
|
+
name: *cronjob_name
|
19
|
+
<% if locals[:job_app][:command] %>
|
20
|
+
command: [ "/bin/bash", "-c", "<%= locals[:job_app][:command] %>" ]
|
21
|
+
<% end %>
|
22
|
+
<% if locals[:job_app][:resources] %>
|
23
|
+
<%= include_template "_resources.yml", locals[:job_app][:resources].merge(tab: 2) %>
|
24
|
+
<% end %>
|
25
|
+
livenessProbe: null
|
26
|
+
readinessProbe: null
|
27
|
+
<%= include_template "_container_extra_settings.yml", { pod: 'job', pod_name: locals[:job_app][:name], tab: 2 } %>
|
28
|
+
|
29
|
+
<% if deployment.cloud_secret_name %>
|
30
|
+
- *cloudsql_container
|
31
|
+
<% end %>
|
32
|
+
|
33
|
+
<% if deployment.log_container %>
|
34
|
+
- <<: *logs_container
|
35
|
+
<% end %>
|
36
|
+
|
37
|
+
<%= include_template "_custom_containers.yml", { pod: 'job', pod_name: locals[:job_app][:name], tab: 2 } %>
|
38
|
+
|
39
|
+
volumes:
|
40
|
+
<%= include_template "_volumes.yml", { pod: 'job', pod_name: locals[:job_app][:name], tab: 2 } %>
|
@@ -0,0 +1,47 @@
|
|
1
|
+
- apiVersion: apps/v1
|
2
|
+
kind: Deployment
|
3
|
+
metadata:
|
4
|
+
name: &job_app_name <%= locals[:job_app][:name] %>
|
5
|
+
spec:
|
6
|
+
replicas: 1
|
7
|
+
selector:
|
8
|
+
matchLabels:
|
9
|
+
name: *job_app_name
|
10
|
+
strategy:
|
11
|
+
type: Recreate
|
12
|
+
minReadySeconds: 10
|
13
|
+
template:
|
14
|
+
metadata:
|
15
|
+
labels:
|
16
|
+
name: *job_app_name
|
17
|
+
spec:
|
18
|
+
<<: *template_spec
|
19
|
+
containers:
|
20
|
+
- <<: *app_container
|
21
|
+
name: *job_app_name
|
22
|
+
<% if locals[:job_app][:command] %>
|
23
|
+
command: [ "/bin/bash", "-c", "<%= locals[:job_app][:command] %>" ]
|
24
|
+
<% end %>
|
25
|
+
<% if locals[:job_app][:resources] %>
|
26
|
+
<%= include_template "_resources.yml", locals[:job_app][:resources] %>
|
27
|
+
<% end %>
|
28
|
+
<%= include_template "_container_extra_settings.yml", { pod: 'job', pod_name: locals[:job_app][:name] } %>
|
29
|
+
|
30
|
+
<% if locals[:job_app][:sidekiq_alive_gem] %>
|
31
|
+
<%= include_template "_sidekiq_alive_gem.yml" %>
|
32
|
+
<% else %>
|
33
|
+
<%= include_template "_job_liveness.yml" %>
|
34
|
+
<% end %>
|
35
|
+
|
36
|
+
<% if deployment.cloud_secret_name %>
|
37
|
+
- *cloudsql_container
|
38
|
+
<% end %>
|
39
|
+
|
40
|
+
<% if deployment.log_container %>
|
41
|
+
- <<: *logs_container
|
42
|
+
<% end %>
|
43
|
+
|
44
|
+
<%= include_template "_custom_containers.yml", { pod: 'job', pod_name: locals[:job_app][:name] } %>
|
45
|
+
|
46
|
+
volumes:
|
47
|
+
<%= include_template "_volumes.yml", { pod: 'job', pod_name: locals[:job_app][:name] } %>
|
data/lib/templates/_volumes.yml
CHANGED
@@ -3,7 +3,7 @@ documents:
|
|
3
3
|
kind: Deployment
|
4
4
|
metadata:
|
5
5
|
name: &app_name <%=deployment.name%>
|
6
|
-
spec:
|
6
|
+
spec:
|
7
7
|
replicas: <%=deployment.replicas%>
|
8
8
|
selector:
|
9
9
|
matchLabels:
|
@@ -107,53 +107,8 @@ documents:
|
|
107
107
|
<%= include_template "_volumes.yml", { pod: 'web' } %>
|
108
108
|
|
109
109
|
<% deployment.job_apps.each do |job_app| %>
|
110
|
-
|
111
|
-
|
112
|
-
metadata:
|
113
|
-
name: &job_app_name <%= job_app[:name] %>
|
114
|
-
spec:
|
115
|
-
<<: *default_spec
|
116
|
-
replicas: 1
|
117
|
-
selector:
|
118
|
-
matchLabels:
|
119
|
-
name: *job_app_name
|
120
|
-
strategy:
|
121
|
-
type: Recreate
|
122
|
-
template:
|
123
|
-
metadata:
|
124
|
-
labels:
|
125
|
-
name: *job_app_name
|
126
|
-
spec:
|
127
|
-
<<: *template_spec
|
128
|
-
containers:
|
129
|
-
- <<: *app_container
|
130
|
-
name: *job_app_name
|
131
|
-
<% if job_app[:command] %>
|
132
|
-
command: [ "/bin/bash", "-c", "<%= job_app[:command] %>" ]
|
133
|
-
<% end %>
|
134
|
-
<% if job_app[:resources] %>
|
135
|
-
<%= include_template "_resources.yml", job_app[:resources] %>
|
136
|
-
<% end %>
|
137
|
-
<%= include_template "_container_extra_settings.yml", { pod: 'job', pod_name: job_app[:name] } %>
|
138
|
-
|
139
|
-
<% if job_app[:sidekiq_alive_gem] %>
|
140
|
-
<%= include_template "_sidekiq_alive_gem.yml" %>
|
141
|
-
<% else %>
|
142
|
-
<%= include_template "_job_liveness.yml" %>
|
143
|
-
<% end %>
|
144
|
-
|
145
|
-
<% if deployment.cloud_secret_name %>
|
146
|
-
- *cloudsql_container
|
147
|
-
<% end %>
|
148
|
-
|
149
|
-
<% if deployment.log_container %>
|
150
|
-
- <<: *logs_container
|
151
|
-
<% end %>
|
152
|
-
|
153
|
-
<%= include_template "_custom_containers.yml", { pod: 'job', pod_name: job_app[:name] } %>
|
154
|
-
|
155
|
-
volumes:
|
156
|
-
<%= include_template "_volumes.yml", { pod: 'job', pod_name: job_app[:name] } %>
|
110
|
+
<%= include_template '_jobs_pod.yml', job_app: job_app if job_app[:kind] != 'CronJob' %>
|
111
|
+
<%= include_template '_cronjobs_pod.yml', job_app: job_app if job_app[:kind] == 'CronJob' %>
|
157
112
|
<% end %>
|
158
113
|
|
159
114
|
<% if deployment.replicas_range %>
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: kubernetes_helper
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.19.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- owen2345
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-07-
|
11
|
+
date: 2022-07-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: erb
|
@@ -44,9 +44,11 @@ files:
|
|
44
44
|
- lib/templates/_cd_digital.sh
|
45
45
|
- lib/templates/_cd_google.sh
|
46
46
|
- lib/templates/_container_extra_settings.yml
|
47
|
+
- lib/templates/_cronjobs_pod.yml
|
47
48
|
- lib/templates/_custom_containers.yml
|
48
49
|
- lib/templates/_custom_volumes.yml
|
49
50
|
- lib/templates/_job_liveness.yml
|
51
|
+
- lib/templates/_jobs_pod.yml
|
50
52
|
- lib/templates/_replicas.yml
|
51
53
|
- lib/templates/_resources.yml
|
52
54
|
- lib/templates/_sidekiq_alive_gem.yml
|