pfab 0.50.0 → 0.52.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 843d834bac5fcac5a8761c3571769bdfddfbe675b437c053c73f51ac5de2be5e
4
- data.tar.gz: 71d5523cf8f3fbdd3ac10775f16b75c25b36d427bce36d86f078a36c7d39b9b6
3
+ metadata.gz: e19f6543864483d014f040e4d0ba5c2e8322bb20ca5604f351c13a36f53b20cd
4
+ data.tar.gz: 1d1afb9c39e0e6d69f5849bd171e2a659174ec747c601239c6e9cc051da92d6f
5
5
  SHA512:
6
- metadata.gz: 7154a5cf912a6f890f4b4442942655a06a9d37dbcb1c53d0d0db55c1f752048ce5d47663e4b00ae79f0bcd4fe7dac4c744a086c91974337a672f2f89c49c1518
7
- data.tar.gz: b31ca987ad5f375d4f9d24ce253c42455a6d8ec8da2592885496d8f3066baef1f220c5dabdad7175f6b55ec0d3ae43be6ce5d359059d1ba5affa004cdd209fbd
6
+ metadata.gz: c402604e6fd169342b2aff975ecb79b15b59cf67399c91a57c15597df3b7629d0a0eb84c5df14e784c09ca4612fafdad60e620bae52a76f1da269030c05d9fa4
7
+ data.tar.gz: 569c405d1a4be90a456ef7dbb8f5e3cadf842b475644dbb79e85fc6d2765dc557e75b147dba2c58ae88c67ef37d0cab5f45bf9c000983ccb69535597c1a42d40
data/lib/pfab/cli.rb CHANGED
@@ -106,18 +106,20 @@ module Pfab
106
106
 
107
107
  command :exec do |c|
108
108
  c.option "-c", "--command command", "use with exec to run a command and exit. default is /bin/sh"
109
- c.syntax = "pfab exec"
109
+ c.syntax = "pfab exec [-- command to execute]'"
110
110
  c.summary = "kubectl exec into a pod"
111
111
  c.description = "CLI to the Cloud"
112
112
  c.example "exec into the first pod in staging",
113
- "pfab exec"
113
+ "pfab -e staging exec"
114
114
  c.example "exec into the first pod in production",
115
- "ezp -p exec"
115
+ "pfab -p exec"
116
116
  c.action do |args, options|
117
117
  set_kube_context
118
+ # Access the command line input after "--"
119
+ additional_args = ARGV[ARGV.index('--') + 1..-1] if ARGV.include?('--')
118
120
  app_name = get_app_name
119
121
  first_pod = get_first_pod app_name
120
- kubectl "exec -it #{first_pod}", "-- #{options.command || '/bin/sh'}"
122
+ kubectl "exec -it #{first_pod}", "-- #{additional_args.join(" ") || options.command || '/bin/sh'}"
121
123
  end
122
124
  end
123
125
 
@@ -180,12 +180,64 @@ module Pfab
180
180
  ANTI_AFFINITY_TYPES = %w[disabled required preferred]
181
181
  ANTI_AFFINITY_MODE = 'antiAffinityMode'
182
182
  ANTI_AFFINITY_PREFERRED_MODE_WEIGHT = 'antiAffinityPreferredModeWeight'
183
+ ZONE_ANTI_AFFINITY_MODE = 'zoneAntiAffinityMode'
184
+ ZONE_ANTI_AFFINITY_PREFERRED_MODE_WEIGHT = 'zoneAntiAffinityPreferredModeWeight'
185
+
183
186
 
184
187
  def anti_affinity
185
- if app_vars.has_key?(ANTI_AFFINITY_MODE)
186
- antiAffinityMode = app_vars[ANTI_AFFINITY_MODE]
188
+ p = host_anti_affinity
189
+ z = zone_anti_affinity
190
+ printf("host anti affinity: %s\n", p)
191
+ printf("zone anti affinity: %s\n", z)
192
+ m = merge_anti_affinity(p, z)
193
+ printf("merged anti affinity: %s\n", m)
194
+ return m
195
+ end
196
+
197
+
198
+ def host_anti_affinity
199
+ anti_affinity_builder(ANTI_AFFINITY_MODE, ANTI_AFFINITY_PREFERRED_MODE_WEIGHT, "kubernetes.io/hostname")
200
+ end
201
+
202
+ def zone_anti_affinity
203
+ anti_affinity_builder(ZONE_ANTI_AFFINITY_MODE, ZONE_ANTI_AFFINITY_PREFERRED_MODE_WEIGHT, "topology.kubernetes.io/zone")
204
+ end
205
+
206
+ def merge_anti_affinity(pod_anti_affinity, zone_anti_affinity)
207
+ merged = {}
208
+
209
+ if pod_anti_affinity.empty? && zone_anti_affinity.empty?
210
+ merged = {}
211
+ elsif pod_anti_affinity.empty?
212
+ merged = zone_anti_affinity
213
+ elsif zone_anti_affinity.empty?
214
+ merged = pod_anti_affinity
215
+ else
216
+ merged[:podAntiAffinity] = {}
217
+
218
+ required_key = :requiredDuringSchedulingIgnoredDuringExecution
219
+ preferred_key = :preferredDuringSchedulingIgnoredDuringExecution
220
+
221
+ [required_key, preferred_key].each do |key|
222
+ if pod_anti_affinity.dig(:podAntiAffinity, key) && zone_anti_affinity.dig(:podAntiAffinity, key)
223
+ merged[:podAntiAffinity][key] = pod_anti_affinity[:podAntiAffinity][key] + zone_anti_affinity[:podAntiAffinity][key]
224
+ elsif pod_anti_affinity.dig(:podAntiAffinity, key)
225
+ merged[:podAntiAffinity][key] = pod_anti_affinity[:podAntiAffinity][key]
226
+ elsif zone_anti_affinity.dig(:podAntiAffinity, key)
227
+ merged[:podAntiAffinity][key] = zone_anti_affinity[:podAntiAffinity][key]
228
+ end
229
+ end
230
+ end
231
+
232
+ merged
233
+ end
234
+
235
+
236
+ def anti_affinity_builder(key, weight_key, topology_key)
237
+ antiAffinityMode = get(key) || "disabled"
238
+ if antiAffinityMode
187
239
  affinitySelector = {
188
- topologyKey: "kubernetes.io/hostname",
240
+ topologyKey: topology_key,
189
241
  labelSelector: {
190
242
  matchLabels: {
191
243
  "deployed-name" => @data['deployed_name'],
@@ -207,14 +259,14 @@ module Pfab
207
259
  { podAntiAffinity: {
208
260
  preferredDuringSchedulingIgnoredDuringExecution: [
209
261
  {
210
- weight: app_vars[ANTI_AFFINITY_PREFERRED_MODE_WEIGHT] || 100,
262
+ weight: app_vars[weight_key] || 100,
211
263
  podAffinityTerm: affinitySelector
212
264
  }
213
265
  ]
214
266
  }
215
267
  }
216
268
  else
217
- raise "Unexpected value #{antiAffinityMode} specified for `#{ANTI_AFFINITY_MODE}`. Valid selections are #{ANTI_AFFINITY_TYPES}"
269
+ raise "Unexpected value #{antiAffinityMode} specified for `#{key}`. Valid selections are #{ANTI_AFFINITY_TYPES}"
218
270
  end
219
271
  end
220
272
  return {}
data/lib/pfab/version.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  module Pfab
2
2
  module Version
3
3
  MAJOR = 0
4
- MINOR = 50
4
+ MINOR = 52
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.50.0 ruby lib
5
+ # stub: pfab 0.52.0 ruby lib
6
6
 
7
7
  Gem::Specification.new do |s|
8
8
  s.name = "pfab".freeze
9
- s.version = "0.50.0"
9
+ s.version = "0.52.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-05-06"
14
+ s.date = "2024-05-13"
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.50.0
4
+ version: 0.52.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-05-06 00:00:00.000000000 Z
11
+ date: 2024-05-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: commander