pfab 0.48.0 → 0.50.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c1f48c3d9fcd1452e69dd15582ee9ba820e059c3af739b95798026ae36e1a0d0
4
- data.tar.gz: daee2b61dcb71d13ecfbcd9f3b5440dd5b7e2aca4a7a6226ecd7209956b30570
3
+ metadata.gz: 843d834bac5fcac5a8761c3571769bdfddfbe675b437c053c73f51ac5de2be5e
4
+ data.tar.gz: 71d5523cf8f3fbdd3ac10775f16b75c25b36d427bce36d86f078a36c7d39b9b6
5
5
  SHA512:
6
- metadata.gz: 64e704e41017b4c5eb47846d6444149c08124549d2b57d76c42ce6fb5e4bcb40fc08ce7d4b4b17335e9fc05a78ca3d4262823aba723e340b138eb276683026ce
7
- data.tar.gz: 9b5a22ccab3a869754c78b3458087e4a47007a5a69a3fc023b884f355765fe2a5de154b49bd2799672210dc5777aae8dc8d52a3ba236bda0a83cb545af0ced1a
6
+ metadata.gz: 7154a5cf912a6f890f4b4442942655a06a9d37dbcb1c53d0d0db55c1f752048ce5d47663e4b00ae79f0bcd4fe7dac4c744a086c91974337a672f2f89c49c1518
7
+ data.tar.gz: b31ca987ad5f375d4f9d24ce253c42455a6d8ec8da2592885496d8f3066baef1f220c5dabdad7175f6b55ec0d3ae43be6ce5d359059d1ba5affa004cdd209fbd
@@ -125,6 +125,28 @@ module Pfab
125
125
  } }
126
126
  end
127
127
  end
128
+
129
+
130
+ def container_ports
131
+ ports = []
132
+ if app_vars["port"]
133
+ ports.append ({
134
+ name: "main",
135
+ containerPort: app_vars["port"]
136
+ })
137
+ end
138
+ %w[additionalPorts containerPorts].each do |key|
139
+ if get(key)
140
+ get(key).each do |name, number|
141
+ ports.append(
142
+ {name: name, containerPort: number}
143
+ )
144
+ end
145
+ end
146
+ end
147
+
148
+ return ports
149
+ end
128
150
  end
129
151
  end
130
152
  end
@@ -58,6 +58,7 @@ module Pfab
58
58
  env: env_vars,
59
59
  envFrom: env_from,
60
60
  resources: resources,
61
+ ports: container_ports()
61
62
  }
62
63
  ]
63
64
  }.compact,
@@ -14,6 +14,7 @@ module Pfab
14
14
  puts "skipping ingress because ingress_disabled = #{@data['generateIngressEnabled']}"
15
15
  end
16
16
  f << StyledYAML.dump(deployment.deep_stringify_keys)
17
+ f << StyledYAML.dump(pod_disruption_budget.deep_stringify_keys)
17
18
  end
18
19
  end
19
20
 
@@ -155,6 +156,70 @@ module Pfab
155
156
  "web"
156
157
  end
157
158
 
159
+ def pod_disruption_budget
160
+ pdb = {
161
+ apiVersion: "policy/v1",
162
+ kind: "PodDisruptionBudget",
163
+ metadata: {
164
+ name: "#{@data['deployed_name']}-pdb",
165
+ namespace: get_namespace()
166
+ },
167
+ spec: {
168
+ minAvailable: 1,
169
+ selector: {
170
+ matchLabels: {
171
+ application: @data['application'],
172
+ "deployed-name" => @data['deployed_name'],
173
+ "application-type" => application_type
174
+ }
175
+ }
176
+ }
177
+ }
178
+ return pdb
179
+ end
180
+ ANTI_AFFINITY_TYPES = %w[disabled required preferred]
181
+ ANTI_AFFINITY_MODE = 'antiAffinityMode'
182
+ ANTI_AFFINITY_PREFERRED_MODE_WEIGHT = 'antiAffinityPreferredModeWeight'
183
+
184
+ def anti_affinity
185
+ if app_vars.has_key?(ANTI_AFFINITY_MODE)
186
+ antiAffinityMode = app_vars[ANTI_AFFINITY_MODE]
187
+ affinitySelector = {
188
+ topologyKey: "kubernetes.io/hostname",
189
+ labelSelector: {
190
+ matchLabels: {
191
+ "deployed-name" => @data['deployed_name'],
192
+ },
193
+ },
194
+ }
195
+
196
+ return case antiAffinityMode
197
+ when "disabled"
198
+ puts "antiAffinityMode is set to disabled, skipping"
199
+ {}
200
+ when "required"
201
+ {
202
+ podAntiAffinity: {
203
+ requiredDuringSchedulingIgnoredDuringExecution: [
204
+ affinitySelector
205
+ ] } }
206
+ when "preferred"
207
+ { podAntiAffinity: {
208
+ preferredDuringSchedulingIgnoredDuringExecution: [
209
+ {
210
+ weight: app_vars[ANTI_AFFINITY_PREFERRED_MODE_WEIGHT] || 100,
211
+ podAffinityTerm: affinitySelector
212
+ }
213
+ ]
214
+ }
215
+ }
216
+ else
217
+ raise "Unexpected value #{antiAffinityMode} specified for `#{ANTI_AFFINITY_MODE}`. Valid selections are #{ANTI_AFFINITY_TYPES}"
218
+ end
219
+ end
220
+ return {}
221
+ end
222
+
158
223
  def deployment
159
224
  secret_mounts = get("secretMounts") || []
160
225
  volume_mounts = []
@@ -186,17 +251,7 @@ module Pfab
186
251
  readOnly: true
187
252
  )
188
253
  end
189
- ports = [ {
190
- name: "main",
191
- containerPort: app_vars["port"]
192
- }]
193
- if get("additionalPorts")
194
- get("additionalPorts").each do |name, number|
195
- ports.append(
196
- {name: name, containerPort: number}
197
- )
198
- end
199
- end
254
+ ports = container_ports()
200
255
 
201
256
  {
202
257
  kind: "Deployment",
@@ -260,25 +315,12 @@ module Pfab
260
315
  volumeMounts: volume_mounts
261
316
  }.compact
262
317
  ],
263
- affinity: {
264
- podAntiAffinity: {
265
- requiredDuringSchedulingIgnoredDuringExecution: [
266
- {
267
- topologyKey: "kubernetes.io/hostname",
268
- labelSelector: {
269
- matchLabels: {
270
- "deployed-name" => @data['deployed_name'],
271
- },
272
- },
273
- }
274
- ]
275
- }
276
- },
318
+ affinity: anti_affinity,
277
319
  volumes: volumes
278
320
  }.compact,
279
321
  },
280
322
  }.compact,
281
- }
323
+ }.compact
282
324
  end
283
325
  end
284
326
  end
data/lib/pfab/version.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  module Pfab
2
2
  module Version
3
3
  MAJOR = 0
4
- MINOR = 48
4
+ MINOR = 50
5
5
  PATCH = 0
6
6
  BUILD = nil
7
7
 
data/pfab.gemspec CHANGED
@@ -2,16 +2,16 @@
2
2
  # DO NOT EDIT THIS FILE DIRECTLY
3
3
  # Instead, edit Juwelier::Tasks in Rakefile, and run 'rake gemspec'
4
4
  # -*- encoding: utf-8 -*-
5
- # stub: pfab 0.48.0 ruby lib
5
+ # stub: pfab 0.50.0 ruby lib
6
6
 
7
7
  Gem::Specification.new do |s|
8
8
  s.name = "pfab".freeze
9
- s.version = "0.48.0"
9
+ s.version = "0.50.0"
10
10
 
11
11
  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
12
12
  s.require_paths = ["lib".freeze]
13
13
  s.authors = ["Jeff Dwyer".freeze]
14
- s.date = "2024-02-15"
14
+ s.date = "2024-05-06"
15
15
  s.description = "k8s helper".freeze
16
16
  s.email = "jdwyer@prefab.cloud".freeze
17
17
  s.executables = ["pfab".freeze]
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pfab
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.48.0
4
+ version: 0.50.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jeff Dwyer
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-02-15 00:00:00.000000000 Z
11
+ date: 2024-05-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: commander