cl-magic 1.2.9 → 1.3.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +17 -10
- data/README.md +10 -2
- data/bin/cl +2 -1
- data/bin/common/process_pids +19 -0
- data/bin/install_gem +4 -4
- data/bin/world-scripts/build +135 -0
- data/bin/world-scripts/down +78 -0
- data/bin/world-scripts/get +112 -0
- data/bin/world-scripts/rm +76 -0
- data/bin/world-scripts/up +83 -0
- data/cl-magic.gemspec +1 -1
- data/lib/cl/magic/cl +1 -1
- data/lib/cl/magic/cl-ai-chat +1 -2
- data/lib/cl/magic/cl-ai-query +1 -2
- data/lib/cl/magic/cl-ai-store-jira +1 -2
- data/lib/cl/magic/cl-auth +1 -2
- data/lib/cl/magic/cl-chrome +108 -0
- data/lib/cl/magic/cl-curl +130 -0
- data/lib/cl/magic/cl-dk +4 -0
- data/lib/cl/magic/cl-dk-make +5 -3
- data/lib/cl/magic/cl-dk-make-world +10 -19
- data/lib/cl/magic/cl-dk-parts +1 -2
- data/lib/cl/magic/cl-dk-world +33 -20
- data/lib/cl/magic/cl-envkey +1 -2
- data/lib/cl/magic/cl-gc-sql +1 -2
- data/lib/cl/magic/cl-gc-tags +1 -2
- data/lib/cl/magic/cl-glab-commit +1 -2
- data/lib/cl/magic/cl-history +1 -2
- data/lib/cl/magic/cl-jira-fetch +1 -2
- data/lib/cl/magic/cl-jira-fetch-by-epics +1 -2
- data/lib/cl/magic/cl-jira-to-elastic +1 -2
- data/lib/cl/magic/cl-jira-to-markdown +1 -2
- data/lib/cl/magic/cl-jira-to-stats +1 -2
- data/lib/cl/magic/cl-kube-cp +1 -2
- data/lib/cl/magic/cl-kube-deployment +1 -2
- data/lib/cl/magic/cl-kube-ktx +1 -2
- data/lib/cl/magic/cl-kube-logs +1 -2
- data/lib/cl/magic/cl-kube-restart +1 -2
- data/lib/cl/magic/cl-kube-search +1 -2
- data/lib/cl/magic/cl-kube-search-all +1 -2
- data/lib/cl/magic/cl-kube-ssh +1 -2
- data/lib/cl/magic/cl-poll +1 -2
- data/lib/cl/magic/cl-sandbox +1 -2
- data/lib/cl/magic/cl-vault +1 -2
- data/lib/cl/magic/common/load_runner.rb +127 -0
- data/lib/cl/magic/common/sub_command.rb +51 -0
- data/lib/cl/magic/dk/world_settings.rb +26 -0
- data/lib/cl/magic/dk/yaml_arg_munger.rb +87 -8
- data/lib/cl/magic/version.rb +1 -1
- metadata +26 -16
@@ -1,7 +1,5 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
# Find deployment in K8 and describe it
|
3
|
-
require 'optparse'
|
4
|
-
require 'optparse/subcommand'
|
5
3
|
require 'tty-command'
|
6
4
|
require 'tty-prompt'
|
7
5
|
require 'json'
|
@@ -10,6 +8,7 @@ require 'pastel'
|
|
10
8
|
require 'cl/magic/common/common_options.rb'
|
11
9
|
require 'cl/magic/common/logging.rb'
|
12
10
|
require 'cl/magic/common/kubectl.rb'
|
11
|
+
require 'cl/magic/common/sub_command.rb'
|
13
12
|
|
14
13
|
@logger = get_logger()
|
15
14
|
@cl_cmd_name = File.basename(__FILE__).split('-').join(' ')
|
data/lib/cl/magic/cl-kube-ktx
CHANGED
@@ -1,7 +1,5 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
# Find/save K8 cluster & namespace;then '--ktx' other kube commands
|
3
|
-
require 'optparse'
|
4
|
-
require 'optparse/subcommand'
|
5
3
|
require 'tty-command'
|
6
4
|
require 'tty-prompt'
|
7
5
|
require 'json'
|
@@ -10,6 +8,7 @@ require 'pastel'
|
|
10
8
|
require 'cl/magic/common/common_options.rb'
|
11
9
|
require 'cl/magic/common/logging.rb'
|
12
10
|
require 'cl/magic/common/kubectl.rb'
|
11
|
+
require 'cl/magic/common/sub_command.rb'
|
13
12
|
|
14
13
|
@logger = get_logger()
|
15
14
|
@cl_cmd_name = File.basename(__FILE__).split('-').join(' ')
|
data/lib/cl/magic/cl-kube-logs
CHANGED
@@ -1,7 +1,5 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
# Find pods in k8 and follow the logs
|
3
|
-
require 'optparse'
|
4
|
-
require 'optparse/subcommand'
|
5
3
|
require 'tty-command'
|
6
4
|
require 'tty-prompt'
|
7
5
|
|
@@ -9,6 +7,7 @@ require 'cl/magic/common/common_options.rb'
|
|
9
7
|
require 'cl/magic/common/logging.rb'
|
10
8
|
require 'cl/magic/common/gcloud.rb'
|
11
9
|
require 'cl/magic/common/kubectl.rb'
|
10
|
+
require 'cl/magic/common/sub_command.rb'
|
12
11
|
|
13
12
|
@logger = get_logger()
|
14
13
|
@cl_cmd_name = File.basename(__FILE__).split('-').join(' ')
|
@@ -1,7 +1,5 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
# Find K8 deployment and reboot pods
|
3
|
-
require 'optparse'
|
4
|
-
require 'optparse/subcommand'
|
5
3
|
require 'tty-command'
|
6
4
|
require 'tty-prompt'
|
7
5
|
|
@@ -9,6 +7,7 @@ require 'cl/magic/common/common_options.rb'
|
|
9
7
|
require 'cl/magic/common/logging.rb'
|
10
8
|
require 'cl/magic/common/gcloud.rb'
|
11
9
|
require 'cl/magic/common/kubectl.rb'
|
10
|
+
require 'cl/magic/common/sub_command.rb'
|
12
11
|
|
13
12
|
@logger = get_logger()
|
14
13
|
@cl_cmd_name = File.basename(__FILE__).split('-').join(' ')
|
data/lib/cl/magic/cl-kube-search
CHANGED
@@ -1,12 +1,11 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
# Search resources in k8 and list them;then select one to describe it
|
3
|
-
require 'optparse'
|
4
|
-
require 'optparse/subcommand'
|
5
3
|
require 'tty-command'
|
6
4
|
|
7
5
|
require 'cl/magic/common/common_options.rb'
|
8
6
|
require 'cl/magic/common/logging.rb'
|
9
7
|
require 'cl/magic/common/kubectl.rb'
|
8
|
+
require 'cl/magic/common/sub_command.rb'
|
10
9
|
|
11
10
|
@logger = get_logger()
|
12
11
|
@cl_cmd_name = File.basename(__FILE__).split('-').join(' ')
|
@@ -1,7 +1,5 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
# Same as search, but across all clusters
|
3
|
-
require 'optparse'
|
4
|
-
require 'optparse/subcommand'
|
5
3
|
require 'tty-command'
|
6
4
|
require 'tty-prompt'
|
7
5
|
require 'json'
|
@@ -10,6 +8,7 @@ require 'pastel'
|
|
10
8
|
require 'cl/magic/common/common_options.rb'
|
11
9
|
require 'cl/magic/common/logging.rb'
|
12
10
|
require 'cl/magic/common/kubectl.rb'
|
11
|
+
require 'cl/magic/common/sub_command.rb'
|
13
12
|
|
14
13
|
@logger = get_logger()
|
15
14
|
@cl_cmd_name = File.basename(__FILE__).split('-').join(' ')
|
data/lib/cl/magic/cl-kube-ssh
CHANGED
@@ -1,7 +1,5 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
# Find container in k8 and ssh into it
|
3
|
-
require 'optparse'
|
4
|
-
require 'optparse/subcommand'
|
5
3
|
require 'tty-command'
|
6
4
|
require 'tty-prompt'
|
7
5
|
require 'json'
|
@@ -10,6 +8,7 @@ require 'pastel'
|
|
10
8
|
require 'cl/magic/common/common_options.rb'
|
11
9
|
require 'cl/magic/common/logging.rb'
|
12
10
|
require 'cl/magic/common/kubectl.rb'
|
11
|
+
require 'cl/magic/common/sub_command.rb'
|
13
12
|
|
14
13
|
@logger = get_logger()
|
15
14
|
@cl_cmd_name = File.basename(__FILE__).split('-').join(' ')
|
data/lib/cl/magic/cl-poll
CHANGED
@@ -1,7 +1,5 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
# Run any command every second
|
3
|
-
require 'optparse'
|
4
|
-
require 'optparse/subcommand'
|
5
3
|
require 'tty-command'
|
6
4
|
require 'tty-prompt'
|
7
5
|
|
@@ -9,6 +7,7 @@ require 'cl/magic/common/common_options.rb'
|
|
9
7
|
require 'cl/magic/common/logging.rb'
|
10
8
|
require 'cl/magic/common/gcloud.rb'
|
11
9
|
require 'cl/magic/common/kubectl.rb'
|
10
|
+
require 'cl/magic/common/sub_command.rb'
|
12
11
|
|
13
12
|
@logger = get_logger()
|
14
13
|
@cl_cmd_name = File.basename(__FILE__).split('-').join(' ')
|
data/lib/cl/magic/cl-sandbox
CHANGED
@@ -1,7 +1,5 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
# Where cl commands are made
|
3
|
-
require 'optparse'
|
4
|
-
require 'optparse/subcommand'
|
5
3
|
require 'tty-command'
|
6
4
|
require 'tty-prompt'
|
7
5
|
|
@@ -9,6 +7,7 @@ require 'cl/magic/common/common_options.rb'
|
|
9
7
|
require 'cl/magic/common/logging.rb'
|
10
8
|
require 'cl/magic/common/gcloud.rb'
|
11
9
|
require 'cl/magic/common/kubectl.rb'
|
10
|
+
require 'cl/magic/common/sub_command.rb'
|
12
11
|
|
13
12
|
@logger = get_logger()
|
14
13
|
@cl_cmd_name = File.basename(__FILE__).split('-').join(' ')
|
data/lib/cl/magic/cl-vault
CHANGED
@@ -1,7 +1,5 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
# Explore HashiCorp vault
|
3
|
-
require 'optparse'
|
4
|
-
require 'optparse/subcommand'
|
5
3
|
require 'tty-command'
|
6
4
|
require 'tty-prompt'
|
7
5
|
|
@@ -9,6 +7,7 @@ require 'cl/magic/common/common_options.rb'
|
|
9
7
|
require 'cl/magic/common/logging.rb'
|
10
8
|
require 'cl/magic/common/gcloud.rb'
|
11
9
|
require 'cl/magic/common/kubectl.rb'
|
10
|
+
require 'cl/magic/common/sub_command.rb'
|
12
11
|
|
13
12
|
@logger = get_logger()
|
14
13
|
@cl_cmd_name = File.basename(__FILE__).split('-').join(' ')
|
@@ -0,0 +1,127 @@
|
|
1
|
+
|
2
|
+
module LoadRunner
|
3
|
+
|
4
|
+
class Queue
|
5
|
+
attr_accessor :failures
|
6
|
+
|
7
|
+
def initialize(logger = nil)
|
8
|
+
@logger = logger if logger!=nil
|
9
|
+
|
10
|
+
# setup
|
11
|
+
@threads = []
|
12
|
+
@transactions = 0
|
13
|
+
@num_threads = 1
|
14
|
+
@failures = 0
|
15
|
+
end
|
16
|
+
|
17
|
+
def load(num_threads=1, &work)
|
18
|
+
@num_threads = num_threads
|
19
|
+
@work = work # save work for new threads
|
20
|
+
|
21
|
+
# create threads
|
22
|
+
num_threads.times do
|
23
|
+
|
24
|
+
# do work
|
25
|
+
create_thread
|
26
|
+
|
27
|
+
# log
|
28
|
+
@logger.debug "action=create|name=thread" if @logger!=nil
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def run()
|
33
|
+
@start_time = Time.now
|
34
|
+
start_all
|
35
|
+
wait_until_finished
|
36
|
+
end
|
37
|
+
|
38
|
+
def run_and_stagger(max_sleep=10)
|
39
|
+
@start_time = Time.now
|
40
|
+
start_all { rand_sleep(max_sleep) }
|
41
|
+
wait_until_finished
|
42
|
+
end
|
43
|
+
|
44
|
+
def run_for_durration(num_seconds, max_sleep=0)
|
45
|
+
@start_time = Time.now
|
46
|
+
|
47
|
+
# keep them running
|
48
|
+
to_time = Time.now + num_seconds
|
49
|
+
|
50
|
+
# log
|
51
|
+
@logger.info "action=run_for_durration|until=#{to_time}" if @logger!=nil
|
52
|
+
|
53
|
+
# durration
|
54
|
+
while (Time.now <= to_time)
|
55
|
+
|
56
|
+
# start threads
|
57
|
+
@threads.each do |t|
|
58
|
+
break if Time.now > to_time
|
59
|
+
|
60
|
+
# restart threads
|
61
|
+
if (t.status=="sleep")
|
62
|
+
rand_sleep(max_sleep)
|
63
|
+
t.run
|
64
|
+
end
|
65
|
+
|
66
|
+
if (t.status==false or t.status == nil)
|
67
|
+
@transactions += 1
|
68
|
+
@threads.delete t
|
69
|
+
thread = create_thread
|
70
|
+
rand_sleep(max_sleep)
|
71
|
+
thread.run
|
72
|
+
|
73
|
+
# log
|
74
|
+
@logger.debug "thread_count=#{@threads.count}" if @logger!=nil
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
private
|
81
|
+
|
82
|
+
def create_thread()
|
83
|
+
thread = Thread.new do
|
84
|
+
@work.call
|
85
|
+
end
|
86
|
+
@threads << thread
|
87
|
+
sleep(0.1)
|
88
|
+
return thread
|
89
|
+
end
|
90
|
+
|
91
|
+
def start_all(&block)
|
92
|
+
@threads.each do |t|
|
93
|
+
|
94
|
+
# pausing block?
|
95
|
+
block
|
96
|
+
|
97
|
+
# log
|
98
|
+
@logger.debug "action=start|name=thread|status=#{t.status}" if @logger!=nil
|
99
|
+
|
100
|
+
# run thread
|
101
|
+
t.run unless t.status==false
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
# wait for threads to complete
|
106
|
+
def wait_until_finished()
|
107
|
+
@threads.each do |t|
|
108
|
+
@logger.debug "action=check_status|name=thread|status=#{t.status}" if @logger!=nil
|
109
|
+
if (t.status=="run" or t.status=="sleep")
|
110
|
+
t.join; # wait to finish
|
111
|
+
@logger.debug "action=done|name=thread|status=#{t.status}" if @logger!=nil
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
115
|
+
# log
|
116
|
+
@logger.success "transactions=#{@transactions}|threads=#{@num_threads}|failures=#{@failures}|durration=#{Time.now - @start_time}" if @logger!=nil
|
117
|
+
end
|
118
|
+
|
119
|
+
# random sleep
|
120
|
+
def rand_sleep(max_sleep=10)
|
121
|
+
if max_sleep > 0
|
122
|
+
time_to_sleep = rand(max_sleep)
|
123
|
+
sleep(time_to_sleep)
|
124
|
+
end
|
125
|
+
end
|
126
|
+
end
|
127
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
require 'optparse'
|
2
|
+
|
3
|
+
OptionParser.send(:alias_method, :summarize_without_subcommand, :summarize)
|
4
|
+
|
5
|
+
class OptionParser
|
6
|
+
module Subcommand
|
7
|
+
def subcommand(key, &block)
|
8
|
+
subcommand = lambda { OptionParser.new(&block) }
|
9
|
+
subcommands[key.to_s] = subcommand
|
10
|
+
end
|
11
|
+
|
12
|
+
private
|
13
|
+
|
14
|
+
def parse_with_subcommand!(*args)
|
15
|
+
subcommand = catch(:subcommand) do
|
16
|
+
args.delete({:into=>nil}) # lose the {:into=>nil}
|
17
|
+
return order!(*args) { |sub| throw :subcommand, sub }
|
18
|
+
end
|
19
|
+
|
20
|
+
sub_parser = subcommands[subcommand.to_s]
|
21
|
+
if sub_parser
|
22
|
+
sub_parser.call.send(:parse!, *args)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def summarize_with_subcommand(to = [], width = @summary_width, max = width - 1, indent = @summary_indent, &blk)
|
27
|
+
summarize_without_subcommand(to, width, max, indent, &blk)
|
28
|
+
to << "\n"
|
29
|
+
subcommands.each do |key, sub_parser|
|
30
|
+
to << indent + key + "\n"
|
31
|
+
sub_parser.call.send(:summarize, to, width, max, indent + " ", &blk)
|
32
|
+
end
|
33
|
+
to
|
34
|
+
end
|
35
|
+
|
36
|
+
def subcommands
|
37
|
+
@subcommands ||= {}
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
include Subcommand
|
42
|
+
|
43
|
+
def parse!(*args)
|
44
|
+
parse_with_subcommand!(*args)
|
45
|
+
self
|
46
|
+
end
|
47
|
+
|
48
|
+
def summarize(to = [], width = @summary_width, max = width - 1, indent = @summary_indent, &blk)
|
49
|
+
summarize_with_subcommand(to, width, max, indent, &blk)
|
50
|
+
end
|
51
|
+
end
|
@@ -7,6 +7,24 @@ class WorldSettings
|
|
7
7
|
@working_dir = working_dir
|
8
8
|
end
|
9
9
|
|
10
|
+
#
|
11
|
+
# world yaml
|
12
|
+
#
|
13
|
+
|
14
|
+
def get_world_yml_hash()
|
15
|
+
yaml_filepath = File.join(self.get_world_path_from_settings, "world.yml")
|
16
|
+
if File.exist?(yaml_filepath)
|
17
|
+
contents = File.read(yaml_filepath)
|
18
|
+
contents.gsub!('<dk-working-path>', @working_dir)
|
19
|
+
return YAML.load(contents)
|
20
|
+
end
|
21
|
+
return nil
|
22
|
+
end
|
23
|
+
|
24
|
+
#
|
25
|
+
# world settings
|
26
|
+
#
|
27
|
+
|
10
28
|
def get_world_settings_hash()
|
11
29
|
filepath = get_world_settings_filepath()
|
12
30
|
return File.exist?(filepath) ? YAML.load_file(filepath) : {}
|
@@ -34,6 +52,14 @@ class WorldSettings
|
|
34
52
|
return ""
|
35
53
|
end
|
36
54
|
|
55
|
+
def get_code_path_from_settings()
|
56
|
+
world_settings = get_world_settings_hash()
|
57
|
+
if world_settings.key?(:code_path)
|
58
|
+
return File.join(world_settings[:code_path])
|
59
|
+
end
|
60
|
+
return ""
|
61
|
+
end
|
62
|
+
|
37
63
|
private
|
38
64
|
|
39
65
|
def get_repo_basename()
|
@@ -12,11 +12,10 @@ class YamlArgMunger
|
|
12
12
|
compose_hash = get_base_compose_hash()
|
13
13
|
dk_parts_hash = {}
|
14
14
|
dk_make_hash = {}
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
end
|
15
|
+
|
16
|
+
compose_hash = merge_world_files(compose_hash, show_help=ARGV.include?("--help"))
|
17
|
+
dk_parts_hash = compose_hash['x-dk-parts'] ? compose_hash.delete('x-dk-parts') : {}
|
18
|
+
dk_make_hash = compose_hash['x-dk-make'] ? compose_hash.delete('x-dk-make') : {}
|
20
19
|
return compose_hash, dk_parts_hash, dk_make_hash
|
21
20
|
end
|
22
21
|
|
@@ -48,9 +47,27 @@ class YamlArgMunger
|
|
48
47
|
private
|
49
48
|
|
50
49
|
def get_base_compose_hash()
|
51
|
-
|
52
|
-
|
53
|
-
|
50
|
+
p2_file_path=".cl-dk-config.output"
|
51
|
+
cmd = "cd #{@working_dir} && docker compose config --no-normalize 2> #{p2_file_path}"
|
52
|
+
config_output = `#{cmd}`
|
53
|
+
if $?.success?
|
54
|
+
hash = YAML.load(config_output)
|
55
|
+
hotfix_environment_array(hash)
|
56
|
+
hotfix_x_dk_settings(hash)
|
57
|
+
return hash ? hash : {}
|
58
|
+
else
|
59
|
+
|
60
|
+
# is config invalid?
|
61
|
+
p2_output = `cd #{@working_dir} && cat #{p2_file_path}` # get p2 output
|
62
|
+
`cd #{@working_dir} && rm #{p2_file_path}` # clean up file
|
63
|
+
unless p2_output.include? "no configuration file provided"
|
64
|
+
puts "🔥 invalid docker config"
|
65
|
+
exit 1
|
66
|
+
end
|
67
|
+
|
68
|
+
# otherwise support no base config
|
69
|
+
return {}
|
70
|
+
end
|
54
71
|
end
|
55
72
|
|
56
73
|
def merge_world_files(compose_hash, show_help=false)
|
@@ -75,12 +92,74 @@ class YamlArgMunger
|
|
75
92
|
|
76
93
|
# yml merge
|
77
94
|
yml_hash = YAML.load(contents)
|
95
|
+
hotfix_environment_array(yml_hash)
|
78
96
|
compose_hash = dk_merge_and_remove(compose_hash, yml_hash)
|
79
97
|
end
|
80
98
|
end
|
81
99
|
return compose_hash
|
82
100
|
end
|
83
101
|
|
102
|
+
#
|
103
|
+
# docker compose config - converts 'environment' into an object
|
104
|
+
# and that messes up munging. So we are reversing that
|
105
|
+
#
|
106
|
+
|
107
|
+
def hotfix_environment_array(h)
|
108
|
+
stack = [h]
|
109
|
+
while stack.any?
|
110
|
+
ch = stack.pop
|
111
|
+
ch.each do |key, value|
|
112
|
+
if key.to_s == "environment"
|
113
|
+
if value.is_a?(Hash)
|
114
|
+
ch[key] = value.map { |k, v| "#{k}=#{v}" }
|
115
|
+
end
|
116
|
+
elsif value.is_a?(Hash)
|
117
|
+
stack.push(value)
|
118
|
+
end
|
119
|
+
end
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
123
|
+
#
|
124
|
+
# docker compose config - alphabetizes everything
|
125
|
+
# so we'll only get x-dk settings from a file docker-compose.yml
|
126
|
+
#
|
127
|
+
|
128
|
+
def hotfix_x_dk_settings(compose_hash)
|
129
|
+
|
130
|
+
# remove x-dk settings
|
131
|
+
compose_hash.delete('x-dk-parts')
|
132
|
+
compose_hash.delete('x-dk-make')
|
133
|
+
|
134
|
+
# fetch them directly
|
135
|
+
supported_paths = [
|
136
|
+
'compose.yaml',
|
137
|
+
'compose.yml',
|
138
|
+
'docker-compose.yaml',
|
139
|
+
'docker-compose.yml'
|
140
|
+
]
|
141
|
+
raw_compose_hash = nil
|
142
|
+
supported_paths.each do |filepath|
|
143
|
+
full_filepath = File.join(@working_dir, filepath)
|
144
|
+
if File.exist?(full_filepath)
|
145
|
+
begin
|
146
|
+
raw_compose_hash = YAML.safe_load(File.read(full_filepath))
|
147
|
+
break;
|
148
|
+
rescue StandardError => e
|
149
|
+
# Handle any errors during parsing
|
150
|
+
puts "Error parsing YAML file #{full_filepath}: #{e.message}"
|
151
|
+
exit 1
|
152
|
+
end
|
153
|
+
end
|
154
|
+
end
|
155
|
+
compose_hash['x-dk-parts'] = raw_compose_hash['x-dk-parts']
|
156
|
+
compose_hash['x-dk-make'] = raw_compose_hash['x-dk-make']
|
157
|
+
end
|
158
|
+
|
159
|
+
#
|
160
|
+
# our dk hash merging process
|
161
|
+
#
|
162
|
+
|
84
163
|
class ::Hash
|
85
164
|
def dk_merge(second)
|
86
165
|
merger = proc { |_, v1, v2|
|
data/lib/cl/magic/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cl-magic
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.3.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Don Najd
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2024-04-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -25,7 +25,7 @@ dependencies:
|
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
28
|
+
name: tty-logger
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - ">="
|
@@ -39,7 +39,7 @@ dependencies:
|
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
|
-
name: tty-
|
42
|
+
name: tty-command
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
45
|
- - ">="
|
@@ -53,7 +53,7 @@ dependencies:
|
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
|
-
name: tty-
|
56
|
+
name: tty-prompt
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
59
|
- - ">="
|
@@ -67,7 +67,7 @@ dependencies:
|
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '0'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
|
-
name: tty-
|
70
|
+
name: tty-spinner
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
73
|
- - ">="
|
@@ -81,7 +81,7 @@ dependencies:
|
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '0'
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
|
-
name: tty-
|
84
|
+
name: tty-progressbar
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
87
|
- - ">="
|
@@ -95,7 +95,7 @@ dependencies:
|
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: '0'
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
|
-
name:
|
98
|
+
name: concurrent-ruby
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
100
100
|
requirements:
|
101
101
|
- - ">="
|
@@ -109,7 +109,7 @@ dependencies:
|
|
109
109
|
- !ruby/object:Gem::Version
|
110
110
|
version: '0'
|
111
111
|
- !ruby/object:Gem::Dependency
|
112
|
-
name:
|
112
|
+
name: pastel
|
113
113
|
requirement: !ruby/object:Gem::Requirement
|
114
114
|
requirements:
|
115
115
|
- - ">="
|
@@ -123,7 +123,7 @@ dependencies:
|
|
123
123
|
- !ruby/object:Gem::Version
|
124
124
|
version: '0'
|
125
125
|
- !ruby/object:Gem::Dependency
|
126
|
-
name:
|
126
|
+
name: activesupport
|
127
127
|
requirement: !ruby/object:Gem::Requirement
|
128
128
|
requirements:
|
129
129
|
- - ">="
|
@@ -137,7 +137,7 @@ dependencies:
|
|
137
137
|
- !ruby/object:Gem::Version
|
138
138
|
version: '0'
|
139
139
|
- !ruby/object:Gem::Dependency
|
140
|
-
name:
|
140
|
+
name: baran
|
141
141
|
requirement: !ruby/object:Gem::Requirement
|
142
142
|
requirements:
|
143
143
|
- - ">="
|
@@ -151,7 +151,7 @@ dependencies:
|
|
151
151
|
- !ruby/object:Gem::Version
|
152
152
|
version: '0'
|
153
153
|
- !ruby/object:Gem::Dependency
|
154
|
-
name:
|
154
|
+
name: selenium-webdriver
|
155
155
|
requirement: !ruby/object:Gem::Requirement
|
156
156
|
requirements:
|
157
157
|
- - ">="
|
@@ -189,9 +189,15 @@ files:
|
|
189
189
|
- Gemfile.lock
|
190
190
|
- README.md
|
191
191
|
- bin/cl
|
192
|
+
- bin/common/process_pids
|
192
193
|
- bin/console
|
193
194
|
- bin/install_gem
|
194
195
|
- bin/setup
|
196
|
+
- bin/world-scripts/build
|
197
|
+
- bin/world-scripts/down
|
198
|
+
- bin/world-scripts/get
|
199
|
+
- bin/world-scripts/rm
|
200
|
+
- bin/world-scripts/up
|
195
201
|
- cl-magic.gemspec
|
196
202
|
- lib/cl/magic.rb
|
197
203
|
- lib/cl/magic/cl
|
@@ -199,6 +205,8 @@ files:
|
|
199
205
|
- lib/cl/magic/cl-ai-query
|
200
206
|
- lib/cl/magic/cl-ai-store-jira
|
201
207
|
- lib/cl/magic/cl-auth
|
208
|
+
- lib/cl/magic/cl-chrome
|
209
|
+
- lib/cl/magic/cl-curl
|
202
210
|
- lib/cl/magic/cl-dk
|
203
211
|
- lib/cl/magic/cl-dk-make
|
204
212
|
- lib/cl/magic/cl-dk-make-world
|
@@ -232,9 +240,11 @@ files:
|
|
232
240
|
- lib/cl/magic/common/gcloud.rb
|
233
241
|
- lib/cl/magic/common/jira.rb
|
234
242
|
- lib/cl/magic/common/kubectl.rb
|
243
|
+
- lib/cl/magic/common/load_runner.rb
|
235
244
|
- lib/cl/magic/common/logging.rb
|
236
245
|
- lib/cl/magic/common/milvus.rb
|
237
246
|
- lib/cl/magic/common/parse_and_pick.rb
|
247
|
+
- lib/cl/magic/common/sub_command.rb
|
238
248
|
- lib/cl/magic/dk/help_printer.rb
|
239
249
|
- lib/cl/magic/dk/parts_merger.rb
|
240
250
|
- lib/cl/magic/dk/world_settings.rb
|
@@ -248,7 +258,7 @@ metadata:
|
|
248
258
|
homepage_uri: https://gitlab.com/beesbot/cl-magic
|
249
259
|
source_code_uri: https://gitlab.com/beesbot/cl-magic
|
250
260
|
changelog_uri: https://gitlab.com/beesbot/cl-magic
|
251
|
-
post_install_message:
|
261
|
+
post_install_message:
|
252
262
|
rdoc_options: []
|
253
263
|
require_paths:
|
254
264
|
- lib
|
@@ -263,8 +273,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
263
273
|
- !ruby/object:Gem::Version
|
264
274
|
version: '0'
|
265
275
|
requirements: []
|
266
|
-
rubygems_version: 3.
|
267
|
-
signing_key:
|
276
|
+
rubygems_version: 3.3.7
|
277
|
+
signing_key:
|
268
278
|
specification_version: 4
|
269
279
|
summary: Magic tools for a turnkey developer experience
|
270
280
|
test_files: []
|