pfab 0.53.0 → 0.54.1

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 06aa820e3141930ca45a670075b6824a23010f5f3568aa3c81edd1825ea452c2
4
- data.tar.gz: 9d43a1c6d16ac3e44f057817fa50f0143d7e3ce6d9b9ca0446735ae060144dfe
3
+ metadata.gz: 76cf1e72c2d80c355fdcd4d6a1d4029966302d885106239d4f440b02cd1ecec0
4
+ data.tar.gz: a89e2b49a230499c16dfacd205b9a025529a72f99bd9d89d0e143d7d90fdbce8
5
5
  SHA512:
6
- metadata.gz: 9e42f6a07719549799f99885888d33218dd69b0211e07ea7d927bf22b4d6d39984a4d246aa7f1c99afa8ccdd273eb2d96292363cb167b0a7c1c09e7ecff73464
7
- data.tar.gz: 655b9ecb7007a4c19e27591a6edbe2acefcbce8a374ade1b1fb2e97985089503ae875d156cf269d969984f02e1dc148ca1e86a7702c444aab8e5b33fd65bc288
6
+ metadata.gz: f8250a9a5c42ebdfb55d22c076c4a6be32a1c2596b720b2e77e60b35c86e92879116df789cdda86571e26ce2a0f2e9c1b3da7f4c4bc1edfa60ee81bb8115bc1e
7
+ data.tar.gz: c1517c24b3d9cde49f77a65b02084b3e200869d529c4c08753378761cb5466ef7ceda829438d65d29cd30718183d7bd4a3fd8fc73684e238167286dc0e88e0f2
@@ -1,6 +1,7 @@
1
1
  require "rubygems/safe_yaml"
2
2
 
3
3
  module Pfab
4
+ LABEL_DEPLOY_UNIQUE_ID = "deploy-unique-id"
4
5
  module Templates
5
6
  class Web < Base
6
7
  def write_to(f)
@@ -187,10 +188,7 @@ module Pfab
187
188
 
188
189
 
189
190
  def anti_affinity
190
- p = host_anti_affinity
191
- z = zone_anti_affinity
192
- m = merge_anti_affinity(p, z)
193
- return m
191
+ return host_anti_affinity
194
192
  end
195
193
 
196
194
 
@@ -198,63 +196,57 @@ module Pfab
198
196
  anti_affinity_builder(ANTI_AFFINITY_MODE, ANTI_AFFINITY_PREFERRED_MODE_WEIGHT, "kubernetes.io/hostname")
199
197
  end
200
198
 
201
- def zone_anti_affinity
202
- anti_affinity_builder(ZONE_ANTI_AFFINITY_MODE, ZONE_ANTI_AFFINITY_PREFERRED_MODE_WEIGHT, "topology.kubernetes.io/zone")
203
- end
204
199
 
205
- def merge_anti_affinity(pod_anti_affinity, zone_anti_affinity)
206
- merged = {}
200
+ def topology_spread_constraints
201
+ waiveTopologySpreadConstraints = get("waiveTopologySpreadConstraints") || false
207
202
 
208
- if pod_anti_affinity.empty? && zone_anti_affinity.empty?
209
- merged = {}
210
- elsif pod_anti_affinity.empty?
211
- merged = zone_anti_affinity
212
- elsif zone_anti_affinity.empty?
213
- merged = pod_anti_affinity
214
- else
215
- merged[:podAntiAffinity] = {}
216
-
217
- required_key = :requiredDuringSchedulingIgnoredDuringExecution
218
- preferred_key = :preferredDuringSchedulingIgnoredDuringExecution
219
-
220
- [required_key, preferred_key].each do |key|
221
- if pod_anti_affinity.dig(:podAntiAffinity, key) && zone_anti_affinity.dig(:podAntiAffinity, key)
222
- merged[:podAntiAffinity][key] = pod_anti_affinity[:podAntiAffinity][key] + zone_anti_affinity[:podAntiAffinity][key]
223
- elsif pod_anti_affinity.dig(:podAntiAffinity, key)
224
- merged[:podAntiAffinity][key] = pod_anti_affinity[:podAntiAffinity][key]
225
- elsif zone_anti_affinity.dig(:podAntiAffinity, key)
226
- merged[:podAntiAffinity][key] = zone_anti_affinity[:podAntiAffinity][key]
227
- end
228
- end
229
- end
203
+ schedulingRule = waiveTopologySpreadConstraints ? "ScheduleAnyway" : "DoNotSchedule"
204
+
205
+ zone_constraint = {
206
+ maxSkew: 1,
207
+ topologyKey: "topology.kubernetes.io/zone",
208
+ whenUnsatisfiable: schedulingRule,
209
+ labelSelector: labelSelector
210
+ }
211
+ host_constraint = {
212
+ maxSkew: 1,
213
+ topologyKey: "kubernetes.io/hostname",
214
+ whenUnsatisfiable: schedulingRule,
215
+ labelSelector: labelSelector
230
216
 
231
- merged
217
+ }
218
+ [zone_constraint, host_constraint]
232
219
  end
233
220
 
234
221
 
222
+
223
+ def labelSelector
224
+ {
225
+ matchExpressions: [
226
+ {
227
+ key: "deployed-name",
228
+ operator: "In",
229
+ values: [
230
+ @data['deployed_name']
231
+ ]
232
+ },
233
+ {
234
+ key: LABEL_DEPLOY_UNIQUE_ID,
235
+ operator: "In",
236
+ values: [
237
+ StyledYAML.double_quoted(deploy_unique_id)
238
+ ]
239
+ }
240
+ ]
241
+ }
242
+ end
243
+
235
244
  def anti_affinity_builder(key, weight_key, topology_key)
236
245
  antiAffinityMode = get(key) || "disabled"
237
246
  if antiAffinityMode
238
247
  affinitySelector = {
239
248
  topologyKey: topology_key,
240
- labelSelector: {
241
- matchExpressions: [
242
- {
243
- key: "deployed-name",
244
- operator: "In",
245
- values: [
246
- @data['deployed_name']
247
- ]
248
- },
249
- {
250
- key: "deployment-unique-id",
251
- operator: "In",
252
- values: [
253
- StyledYAML.double_quoted(deploy_unique_id)
254
- ]
255
- }
256
- ]
257
- },
249
+ labelSelector: labelSelector,
258
250
  }
259
251
 
260
252
  return case antiAffinityMode
@@ -328,7 +320,7 @@ module Pfab
328
320
  "deployed-name" => @data['deployed_name'],
329
321
  "application-type" => application_type,
330
322
  "deploy-id" => deploy_id,
331
- "deploy-unique-id" => StyledYAML.double_quoted(deploy_unique_id),
323
+ LABEL_DEPLOY_UNIQUE_ID: StyledYAML.double_quoted(deploy_unique_id),
332
324
  "tags.datadoghq.com/env": @data['env'],
333
325
  "tags.datadoghq.com/service": @data['deployed_name'],
334
326
  "tags.datadoghq.com/version": StyledYAML.double_quoted(@data['sha'])
@@ -356,7 +348,7 @@ module Pfab
356
348
  application: @data['application'],
357
349
  "deployed-name" => @data['deployed_name'],
358
350
  "application-type" => "web",
359
- "deploy-unique-id" => StyledYAML.double_quoted(deploy_unique_id),
351
+ LABEL_DEPLOY_UNIQUE_ID => StyledYAML.double_quoted(deploy_unique_id),
360
352
  "tags.datadoghq.com/env": @data['env'],
361
353
  "tags.datadoghq.com/service": @data['deployed_name'],
362
354
  "tags.datadoghq.com/version": StyledYAML.double_quoted(@data['sha'])
@@ -381,7 +373,7 @@ module Pfab
381
373
  volumeMounts: volume_mounts
382
374
  }.compact
383
375
  ],
384
- affinity: anti_affinity,
376
+ topologySpreadConstraints: topology_spread_constraints,
385
377
  volumes: volumes
386
378
  }.compact,
387
379
  },
data/lib/pfab/version.rb CHANGED
@@ -1,8 +1,8 @@
1
1
  module Pfab
2
2
  module Version
3
3
  MAJOR = 0
4
- MINOR = 53
5
- PATCH = 0
4
+ MINOR = 54
5
+ PATCH = 1
6
6
  BUILD = nil
7
7
 
8
8
  STRING = [MAJOR, MINOR, PATCH, BUILD].compact.join('.')
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.53.0 ruby lib
5
+ # stub: pfab 0.54.1 ruby lib
6
6
 
7
7
  Gem::Specification.new do |s|
8
8
  s.name = "pfab".freeze
9
- s.version = "0.53.0"
9
+ s.version = "0.54.1"
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-05-14"
14
+ s.date = "2024-05-15"
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.53.0
4
+ version: 0.54.1
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-05-14 00:00:00.000000000 Z
11
+ date: 2024-05-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: commander