pfab 0.50.0 → 0.52.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: 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