pfab 0.58.6 → 0.58.8
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/lib/pfab/cli.rb +47 -8
- data/lib/pfab/version.rb +1 -1
- data/pfab.gemspec +3 -3
- metadata +2 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: e7e3d292ab2f6eee610144e871f341ca2bbb128854552b98d2a4e197850d8328
|
|
4
|
+
data.tar.gz: 6f8c89d9512f0956039fe97c860a8a8e4edfcc66e4a22a992a3bf2e9a3f01871
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: b516b4d73d6e281da4e5ce9bc1af4f1e3697f7046af5a24df4df3e154557e08013cf57ff3c7ce731168d3a9e0ee034cb0ec6da4765330aaa9f2527a74c7d0a39
|
|
7
|
+
data.tar.gz: eb666a562d7e5f86f0ddda3edaf9d038d23ab60b29e3dd27ed66ca47f9c62035aa20201e9d56c20d81fd5cb16608278741f991905bf6b98a1a93423f7de48686
|
data/lib/pfab/cli.rb
CHANGED
|
@@ -5,6 +5,7 @@ require "json"
|
|
|
5
5
|
require 'active_support/core_ext/hash/indifferent_access'
|
|
6
6
|
require 'styled_yaml'
|
|
7
7
|
require 'digest'
|
|
8
|
+
require 'open3'
|
|
8
9
|
|
|
9
10
|
module Pfab
|
|
10
11
|
class CLI
|
|
@@ -68,15 +69,22 @@ module Pfab
|
|
|
68
69
|
c.option "-t", "--timeout TIMEOUT", Integer, "timeout for rollout (default 360s)"
|
|
69
70
|
c.option "-r", "--retries RETRIES", Integer, "number of retries for rollout (default 3)"
|
|
70
71
|
c.option "-s", "--sleep SLEEP", Integer, "sleep duration between retries in seconds (default 5)"
|
|
72
|
+
c.option "-g", "--tagged TAGGED", String, "target deployables tagged with TAGGED"
|
|
71
73
|
|
|
72
74
|
c.action do |args, options|
|
|
73
75
|
options.default timeout: 360, retries: 3, sleep: 5
|
|
74
|
-
app_name =
|
|
76
|
+
app_name = ""
|
|
77
|
+
if options.tagged && options.tagged != ""
|
|
78
|
+
app_name = "Apps tagged with #{options.tagged}"
|
|
79
|
+
else
|
|
80
|
+
app_name = get_app_name(all: true)
|
|
81
|
+
end
|
|
82
|
+
|
|
75
83
|
puts "Shipping #{app_name}"
|
|
76
84
|
success = cmd_build
|
|
77
85
|
if success
|
|
78
86
|
cmd_generate_yaml
|
|
79
|
-
cmd_apply(timeout: options.timeout, retries: options.retries, sleep_duration: options.sleep)
|
|
87
|
+
cmd_apply(timeout: options.timeout, retries: options.retries, sleep_duration: options.sleep, tagged: options.tagged)
|
|
80
88
|
end
|
|
81
89
|
end
|
|
82
90
|
end
|
|
@@ -209,11 +217,13 @@ module Pfab
|
|
|
209
217
|
run!
|
|
210
218
|
end
|
|
211
219
|
|
|
212
|
-
def cmd_apply(timeout: 240, retries: 3, sleep_duration: 5)
|
|
220
|
+
def cmd_apply(timeout: 240, retries: 3, sleep_duration: 5, tagged: nil)
|
|
213
221
|
set_kube_context
|
|
214
222
|
success = true
|
|
215
223
|
|
|
216
|
-
|
|
224
|
+
apps = tagged ? deployables.select { |k, v| v[:tags]&.include?(tagged) }.keys : get_apps
|
|
225
|
+
|
|
226
|
+
apps.each do |app_name|
|
|
217
227
|
app = deployables[app_name]
|
|
218
228
|
if app[:deployable_type] == "cron"
|
|
219
229
|
deployed_name = deployed_name(app)
|
|
@@ -233,28 +243,30 @@ module Pfab
|
|
|
233
243
|
selector = "application=#{@application_yaml['name']}"
|
|
234
244
|
deployment_json = `kubectl get deployment -l #{selector} -o json --namespace=#{yy.namespace}`
|
|
235
245
|
deployments = JSON.parse(deployment_json)
|
|
236
|
-
|
|
246
|
+
|
|
237
247
|
if deployments["items"].any?
|
|
238
248
|
deployments["items"].each do |deployment|
|
|
239
249
|
deployment_name = deployment["metadata"]["name"]
|
|
240
250
|
puts "Waiting for deployment #{deployment_name} to roll out..."
|
|
241
251
|
|
|
242
252
|
rollout_success = false
|
|
243
|
-
|
|
253
|
+
|
|
244
254
|
retries.times do |attempt|
|
|
245
|
-
|
|
255
|
+
rollout_result = kubectl_with_output("rollout status deployment/#{deployment_name} --timeout=#{timeout}s")
|
|
256
|
+
rollout_success = rollout_result.success?
|
|
246
257
|
if rollout_success
|
|
247
258
|
puts "Deployment #{deployment_name} successfully rolled out. Attempt #{attempt + 1}/#{retries}."
|
|
248
259
|
break
|
|
249
260
|
else
|
|
250
261
|
puts "Attempt #{attempt + 1}/#{retries}: Deployment #{deployment_name} failed to roll out within the specified timeout."
|
|
262
|
+
puts "Output was #{rollout_result}"
|
|
251
263
|
if attempt < retries - 1
|
|
252
264
|
puts "Retrying in #{sleep_duration} seconds..."
|
|
253
265
|
sleep(sleep_duration)
|
|
254
266
|
end
|
|
255
267
|
end
|
|
256
268
|
end
|
|
257
|
-
|
|
269
|
+
|
|
258
270
|
unless rollout_success
|
|
259
271
|
puts "Deployment #{deployment_name} failed to roll out after #{retries} attempts."
|
|
260
272
|
return false
|
|
@@ -392,6 +404,10 @@ module Pfab
|
|
|
392
404
|
result == true
|
|
393
405
|
end
|
|
394
406
|
|
|
407
|
+
def kubectl_with_output(cmd, post_cmd = "")
|
|
408
|
+
puts_and_system_with_output("kubectl #{cmd} --namespace=#{yy.namespace} #{post_cmd}")
|
|
409
|
+
end
|
|
410
|
+
|
|
395
411
|
def puts_and_system(cmd)
|
|
396
412
|
puts cmd
|
|
397
413
|
if $dryrun
|
|
@@ -402,6 +418,18 @@ module Pfab
|
|
|
402
418
|
end
|
|
403
419
|
end
|
|
404
420
|
|
|
421
|
+
def puts_and_system_with_output(cmd)
|
|
422
|
+
puts cmd
|
|
423
|
+
if $dryrun
|
|
424
|
+
dryrun_message = "dry run, didn't run that"
|
|
425
|
+
puts dryrun_message
|
|
426
|
+
CommandResult.new(stdout: dryrun_message, stderr: dryrun_message, exit_status_code: 0)
|
|
427
|
+
else
|
|
428
|
+
stdout, stderr, status = Open3.capture3(cmd)
|
|
429
|
+
CommandResult.new(stdout: stdout, stderr: stderr, exit_status_code: status.exitstatus)
|
|
430
|
+
end
|
|
431
|
+
end
|
|
432
|
+
|
|
405
433
|
def deployables
|
|
406
434
|
@_deployables ||= calculate_runnables("deployables")
|
|
407
435
|
end
|
|
@@ -424,6 +452,7 @@ module Pfab
|
|
|
424
452
|
application: application,
|
|
425
453
|
deployable: deployable,
|
|
426
454
|
deployable_type: deployable_type,
|
|
455
|
+
tags: dep["tags"],
|
|
427
456
|
command: dep["command"],
|
|
428
457
|
}
|
|
429
458
|
end
|
|
@@ -456,4 +485,14 @@ module Pfab
|
|
|
456
485
|
(name == "all") ? deployables.keys : [name]
|
|
457
486
|
end
|
|
458
487
|
end
|
|
488
|
+
|
|
489
|
+
CommandResult = Struct.new(:stdout, :stderr, :exit_status_code, keyword_init: true) do
|
|
490
|
+
def success?
|
|
491
|
+
exit_status_code == 0
|
|
492
|
+
end
|
|
493
|
+
|
|
494
|
+
def to_s
|
|
495
|
+
"status: #{status.exitstatus}\n\nstdout: #{stdout}\n\nstderr: #{stderr}\n\n"
|
|
496
|
+
end
|
|
497
|
+
end
|
|
459
498
|
end
|
data/lib/pfab/version.rb
CHANGED
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.58.
|
|
5
|
+
# stub: pfab 0.58.8 ruby lib
|
|
6
6
|
|
|
7
7
|
Gem::Specification.new do |s|
|
|
8
8
|
s.name = "pfab".freeze
|
|
9
|
-
s.version = "0.58.
|
|
9
|
+
s.version = "0.58.8"
|
|
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-10-
|
|
14
|
+
s.date = "2024-10-21"
|
|
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.58.
|
|
4
|
+
version: 0.58.8
|
|
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-10-
|
|
11
|
+
date: 2024-10-21 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: commander
|