minfra-cli 1.11.0 → 1.12.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: ba7dd8c8775a7ecedd048d2a6e6288727f86791bb0e3c9a97df882d29d10ddd1
4
- data.tar.gz: 5a416953d916aff78611c5dcca45300434a54abb172aad5a5ad4118b9cb3206e
3
+ metadata.gz: ca90567af36553b84c7a69020e85970c56591d65f7546d1c22c1969cc9bd58f3
4
+ data.tar.gz: 451949094ac8fe4a3bc502b10ad1f8924f2cb5688da1297594061ab4c4e4780d
5
5
  SHA512:
6
- metadata.gz: 1a0ab85e07b00c652cf41b94cff07cc327801d55f19eefe97a0d7301a2e0a8262196df760785fc6ef7ccd3d56e44deed3441260a868d4916266cb143b8c9d68e
7
- data.tar.gz: 36a5f383251c4e6ae0f583f99e08606f07c1c6df198c721718d5dea1b2b9f1fab4629c7b99ee5950dd18a823148226b10bea2e558bfb5ce02c08ce800be3f7a5
6
+ metadata.gz: 6007ef02b33c582bb9bd002cb4b22adda6dd4e5ec32cf7646beb9597ef03181b8944a463fe5db943c84d19c6ed50c8b324a5bb383cfa975b0f4301e1ffb214d5
7
+ data.tar.gz: 1908c4e6f95565dc3ebdf2bf371808021166997691c0fcb3514a89b2d47cf379d551b1f5f1934032cfe08afcc180f6f4d75b39d694c584d036f46a5f86aa8f05
data/CHANGELOG.md CHANGED
@@ -1,3 +1,13 @@
1
+ # 1.12.1
2
+ * replaced all relevant system calls with new runners (fixed apply and
3
+ generic_secrets)
4
+ # 1.12.0
5
+ * refactoring Runner
6
+ * adding runner type system (popen is default)
7
+ * adding HelmRunner, KubectlRunner
8
+ * adding support for infra::allow_insecure_k8s_connections
9
+ * easing active support requirement
10
+
1
11
  # 1.11.0
2
12
  * generating helm output with resolved vairables in "helm_expanded"
3
13
  * adding template_dir to templater to render whole directories
@@ -15,7 +15,10 @@ module Minfra
15
15
 
16
16
  def dashboard(stack_name,env,deployment,cluster)
17
17
  stack = init(stack_name,env,deployment,cluster)
18
- exec("k9s --kubeconfig #{kube_config_path} --context #{stack.cluster_name} --namespace #{stack_name} --command pod")
18
+ insecure_flag = l("infra::allow_insecure_k8s_connections") ? "--insecure-skip-tls-verify" : ""
19
+ cmd = "k9s #{insecure_flag} --kubeconfig #{kube_config_path} --context #{stack.cluster_name} --namespace #{stack_name} --command pod"
20
+ debug(cmd)
21
+ exec(cmd)
19
22
  end
20
23
 
21
24
  def restart
@@ -154,9 +157,7 @@ module Minfra
154
157
 
155
158
  extra_args = extra_args.join(' ')
156
159
 
157
- cmd = "helm --kube-context #{cluster} rollback #{options[:stack]} #{extra_args}"
158
- #puts cmd
159
- run_cmd(cmd, :exec)
160
+ run_helm("--kube-context #{cluster} rollback #{options[:stack]} #{extra_args}")
160
161
  end
161
162
 
162
163
  def list
@@ -195,9 +196,9 @@ module Minfra
195
196
 
196
197
  cluster = stack.cluster_name
197
198
  if [resource, implicit_resource].include?('pod') && ['delete', 'describe', 'exec', 'logs', 'port-forward'].include?(subcommand)
198
- cmd_get_pods = "kubectl --kubeconfig #{kube_config_path} --context #{cluster} --namespace #{options[:stack]} get pod -o jsonpath='{range .items[*]}{.metadata.name}{\"\\n\"}'"
199
+ cmd_get_pods = "--kubeconfig #{kube_config_path} --context #{cluster} --namespace #{options[:stack]} get pod -o jsonpath='{range .items[*]}{.metadata.name}{\"\\n\"}'"
199
200
 
200
- pods_list = run_cmd(cmd_get_pods).split("\n")
201
+ pods_list = run_kubectl(cmd_get_pods).stdout_lines
201
202
 
202
203
  fuzzy_pod_name = args.shift
203
204
 
@@ -230,9 +231,8 @@ module Minfra
230
231
 
231
232
  extra_args = extra_args.join(' ')
232
233
 
233
- cmd = "kubectl --kubeconfig #{kube_config_path} --context #{cluster} --namespace #{options[:stack]} #{subcommand} #{resource} #{pod_name} #{extra_args}"
234
- # puts cmd
235
- run_cmd(cmd, :exec)
234
+ cmd = "--kubeconfig #{kube_config_path} --context #{cluster} --namespace #{options[:stack]} #{subcommand} #{resource} #{pod_name} #{extra_args}"
235
+ KubeCtlRunner.run(cmd, runner: :exec)
236
236
  end
237
237
 
238
238
  private
@@ -252,13 +252,11 @@ module Minfra
252
252
  end
253
253
 
254
254
  def run_kubectl(cmd)
255
- # run(%{kubectl --kubeconfig #{kube_config_path} #{cmd}})
256
- run(%{kubectl #{cmd}})
255
+ KubeCtlRunner.run(cmd, runner: :system)
257
256
  end
258
257
 
259
258
  def run_helm(cmd)
260
- # run(%{helm --kubeconfig #{kube_config_path} --home #{helm_path} #{cmd}})
261
- run(%{helm #{cmd}})
259
+ HelmRunner.run(cmd, runner: :system)
262
260
  end
263
261
 
264
262
  def helm_path
@@ -0,0 +1,11 @@
1
+ module Minfra
2
+ module Cli
3
+ class HelmRunner < Runner
4
+ def initialize(cmd, **args)
5
+ insecure_flag = l("infra::allow_insecure_k8s_connections") ? "--kube-insecure-skip-tls-verify" : ""
6
+ cmd = "helm #{insecure_flag} #{cmd}"
7
+ super(cmd, **args)
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,11 @@
1
+ module Minfra
2
+ module Cli
3
+ class KubeCtlRunner < Runner
4
+ def initialize(cmd, **args)
5
+ insecure_flag = l("infra::allow_insecure_k8s_connections") ? "--insecure-skip-tls-verify" : ""
6
+ cmd = "kubectl #{insecure_flag} #{cmd}"
7
+ super(cmd, **args)
8
+ end
9
+ end
10
+ end
11
+ end
@@ -11,6 +11,8 @@ module Minfra
11
11
 
12
12
  attr_writer :status
13
13
 
14
+ attr_reader :stdout_lines
15
+
14
16
  def initialize
15
17
  @stderr_lines = []
16
18
  @stdout_lines = []
@@ -58,18 +60,58 @@ module Minfra
58
60
  new(cmd, **args).run
59
61
  end
60
62
 
61
- attr_reader :exit_on_error
63
+ attr_reader :exit_on_error, :runner, :cmd
62
64
 
63
- def initialize(cmd, exit_on_error: true)
65
+ def initialize(cmd, exit_on_error: true, runner: :popen)
64
66
  @cmd = cmd
65
67
  @exit_on_error = exit_on_error
68
+ @runner = runner
66
69
  end
67
70
 
68
71
  def run
69
- debug("running: #{@cmd}")
70
- res = nil
72
+ debug("running (#{@runner}): #{@cmd}")
73
+ res=case @runner
74
+ when :system
75
+ run_system(Result.new)
76
+ when :popen
77
+ run_threaded(Result.new)
78
+ when :exec
79
+ run_exec(Result.new)
80
+ else
81
+ raise "unknown runner #{@runner}"
82
+ end
83
+
84
+ if res.error?
85
+ error "command failed: #{@cmd}"
86
+ debug res.stdout
87
+ info res.stderr
88
+ end
89
+ if exit_on_error && res.error?
90
+ info "command exiting on error (#{res.exitstatus})"
91
+ exit 1
92
+ end
93
+ res
94
+ end
95
+
96
+ private
97
+
98
+ def run_exec(_res)
99
+ exec(@cmd)
100
+ end
101
+ # you don't get stderr .... yet
102
+ def run_system(res)
103
+ #https://stackoverflow.com/questions/6338908/ruby-difference-between-exec-system-and-x-or-backticks
104
+ begin
105
+ out=`#{@cmd}`
106
+ out.each_line do |line| res.add(line, :stdout) end
107
+ rescue StandardError
108
+ end
109
+ res.status = $?
110
+ res
111
+ end
112
+
113
+ def run_threaded(res)
71
114
  begin
72
- res = Result.new
73
115
  # see: http://stackoverflow.com/a/1162850/83386
74
116
  # the whole implementation is problematic as we migth miss some output lines
75
117
  # Open4 might be a solution. Using Select might be a solution. Using Process.fork might be a solution....
@@ -91,18 +133,9 @@ module Minfra
91
133
  end
92
134
  rescue StandardError
93
135
  end
94
-
95
- if res.error?
96
- error "command failed: #{@cmd}"
97
- debug res.stdout
98
- info res.stderr
99
- end
100
- if exit_on_error && res.error?
101
- info "command exiting on error (#{res.exitstatus})"
102
- exit 1
103
- end
104
136
  res
105
137
  end
138
+
106
139
  end
107
140
  end
108
141
  end
@@ -1,5 +1,5 @@
1
1
  module Minfra
2
2
  module Cli
3
- VERSION = '1.11.0'.freeze
3
+ VERSION = '1.12.1'.freeze
4
4
  end
5
5
  end
data/lib/minfra/cli.rb CHANGED
@@ -16,6 +16,8 @@ require_relative 'cli/command'
16
16
  require_relative 'cli/ask'
17
17
  require_relative 'cli/document'
18
18
  require_relative 'cli/runner'
19
+ require_relative 'cli/helm_runner'
20
+ require_relative 'cli/kubectl_runner'
19
21
  require_relative 'cli/plugins'
20
22
 
21
23
  require 'active_support'
@@ -1,3 +1,6 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'English'
1
4
  require 'erb'
2
5
  require 'erubis'
3
6
  require 'open3'
@@ -10,34 +13,32 @@ require 'active_support/core_ext'
10
13
  module Orchparty
11
14
  module Services
12
15
  class Context
13
- include ::Minfra::Cli::Logging
16
+ include ::Minfra::Cli::Logging
14
17
 
15
- attr_accessor :cluster_name
16
- attr_accessor :namespace
17
- attr_accessor :dir_path
18
- attr_accessor :app_config
19
- attr_accessor :options
18
+ attr_accessor :cluster_name, :namespace, :dir_path, :app_config, :options
20
19
 
21
- def initialize(cluster_name: , namespace:, file_path: , app_config:, out_io: STDOUT, app: )
20
+ def initialize(cluster_name:, namespace:, file_path:, app_config:, app:, out_io: $stdout)
22
21
  self.cluster_name = cluster_name
23
22
  self.namespace = namespace
24
23
  self.dir_path = file_path
25
24
  self.app_config = app_config
26
25
  @app = app
27
26
  @out_io = out_io
28
- self.options=options
27
+ self.options = options
29
28
  end
30
29
 
31
- def template(file_path, helm, flag: "-f ", fix_file_path: nil)
32
- return "" unless file_path
30
+ def template(file_path, helm, flag: '-f ', fix_file_path: nil)
31
+ return '' unless file_path
32
+
33
33
  puts "Rendering: #{file_path}"
34
- file_path = File.join(self.dir_path, file_path)
35
- if(file_path.end_with?(".erb"))
34
+ file_path = File.join(dir_path, file_path)
35
+
36
+ if file_path.end_with?('.erb')
36
37
  helm.application = OpenStruct.new(cluster_name: cluster_name, namespace: namespace)
37
38
  template = Erubis::Eruby.new(File.read(file_path))
38
39
  template.filename = file_path
39
40
  yaml = template.result(helm.get_binding)
40
- file = Tempfile.new("kube-deploy.yaml")
41
+ file = Tempfile.new('kube-deploy.yaml')
41
42
  file.write(yaml)
42
43
  file.close
43
44
  file_path = file.path
@@ -46,11 +47,11 @@ module Orchparty
46
47
  end
47
48
 
48
49
  def print_install(helm)
49
- @out_io.puts "---"
50
- @out_io.puts install_cmd(helm, value_path(helm))
51
- @out_io.puts upgrade_cmd(helm, value_path(helm))
52
- @out_io.puts "---"
53
- @out_io.puts File.read(template(value_path(helm), helm, flag: "")) if value_path(helm)
50
+ @out_io.puts '---'
51
+ @out_io.puts install_cmd(helm, value_path(helm)).cmd
52
+ @out_io.puts upgrade_cmd(helm, value_path(helm)).cmd
53
+ @out_io.puts '---'
54
+ @out_io.puts File.read(template(value_path(helm), helm, flag: '')) if value_path(helm)
54
55
  end
55
56
 
56
57
  # On 05.02.2021 we have decided that it would be best to print both commands.
@@ -60,11 +61,11 @@ module Orchparty
60
61
  end
61
62
 
62
63
  def upgrade(helm)
63
- @out_io.puts system(upgrade_cmd(helm))
64
+ @out_io.puts upgrade_cmd(helm).run.stdout
64
65
  end
65
66
 
66
67
  def install(helm)
67
- @out_io.puts system(install_cmd(helm))
68
+ @out_io.puts install_cmd(helm).run.stdout
68
69
  end
69
70
  end
70
71
 
@@ -74,11 +75,15 @@ module Orchparty
74
75
  end
75
76
 
76
77
  def upgrade_cmd(helm, fix_file_path = nil)
77
- "helm upgrade --namespace #{namespace} --kube-context #{cluster_name} --version #{helm.version} #{helm.name} #{helm.chart} #{template(value_path(helm), helm, fix_file_path: fix_file_path)}"
78
+ Minfra::Cli::HelmRunner.new("upgrade --namespace #{namespace} --kube-context #{cluster_name} --version #{helm.version} #{helm.name} #{helm.chart} #{template(
79
+ value_path(helm), helm, fix_file_path: fix_file_path
80
+ )}")
78
81
  end
79
82
 
80
83
  def install_cmd(helm, fix_file_path = nil)
81
- "helm install --create-namespace --namespace #{namespace} --kube-context #{cluster_name} --version #{helm.version} #{helm.name} #{helm.chart} #{template(value_path(helm), helm, fix_file_path: fix_file_path)}"
84
+ Minfra::Cli::HelmRunner.new("install --create-namespace --namespace #{namespace} --kube-context #{cluster_name} --version #{helm.version} #{helm.name} #{helm.chart} #{template(
85
+ value_path(helm), helm, fix_file_path: fix_file_path
86
+ )}")
82
87
  end
83
88
  end
84
89
 
@@ -88,11 +93,15 @@ module Orchparty
88
93
  end
89
94
 
90
95
  def upgrade_cmd(apply, fix_file_path = nil)
91
- "kubectl apply --namespace #{namespace} --context #{cluster_name} #{template(value_path(apply), apply, fix_file_path: fix_file_path)}"
96
+ Minfra::Cli::KubeCtlRunner.new("apply --namespace #{namespace} --context #{cluster_name} #{template(
97
+ value_path(apply), apply, fix_file_path: fix_file_path
98
+ )}")
92
99
  end
93
100
 
94
101
  def install_cmd(apply, fix_file_path = nil)
95
- "kubectl apply --namespace #{namespace} --context #{cluster_name} #{template(value_path(apply), apply, fix_file_path: fix_file_path)}"
102
+ Minfra::Cli::KubeCtlRunner.new("apply --namespace #{namespace} --context #{cluster_name} #{template(
103
+ value_path(apply), apply, fix_file_path: fix_file_path
104
+ )}")
96
105
  end
97
106
  end
98
107
 
@@ -101,43 +110,51 @@ module Orchparty
101
110
  secret[:from_file]
102
111
  end
103
112
 
104
- def upgrade_cmd(secret, fix_file_path=nil)
105
- "kubectl --namespace #{namespace} --context #{cluster_name} create secret generic --dry-run -o yaml #{secret[:name]} #{template(value_path(secret), secret, flag: "--from-file=", fix_file_path: fix_file_path)} | kubectl --context #{cluster_name} apply -f -"
113
+ def upgrade_cmd(secret, fix_file_path = nil)
114
+ Minfra::Cli::KubeCtlRunner.new("--namespace #{namespace} --context #{cluster_name} create secret generic --dry-run -o yaml #{secret[:name]} #{template(
115
+ value_path(secret), secret, flag: '--from-file=', fix_file_path: fix_file_path
116
+ )} | #{apply_cmd(cluster_name).cmd}")
106
117
  end
107
118
 
108
- def install_cmd(secret, fix_file_path=nil)
109
- "kubectl --namespace #{namespace} --context #{cluster_name} create secret generic --dry-run -o yaml #{secret[:name]} #{template(value_path(secret), secret, flag: "--from-file=", fix_file_path: fix_file_path)} | kubectl --context #{cluster_name} apply -f -"
119
+ def install_cmd(secret, fix_file_path = nil)
120
+ Minfra::Cli::KubeCtlRunner.new("--namespace #{namespace} --context #{cluster_name} create secret generic --dry-run -o yaml #{secret[:name]} #{template(
121
+ value_path(secret), secret, flag: '--from-file=', fix_file_path: fix_file_path
122
+ )} | #{apply_cmd(cluster_name).cmd}")
123
+ end
124
+
125
+ def apply_cmd(cluster_name)
126
+ Minfra::Cli::KubeCtlRunner.new("--context #{cluster_name} apply -f -")
110
127
  end
111
128
  end
112
129
 
113
130
  class Label < Context
114
131
  def print_install(label)
115
- @out_io.puts "---"
132
+ @out_io.puts '---'
116
133
  @out_io.puts install_cmd(label)
117
134
  end
118
135
 
119
136
  def print_upgrade(label)
120
- @out_io.puts "---"
137
+ @out_io.puts '---'
121
138
  @out_io.puts upgrade_cmd(label)
122
139
  end
123
140
 
124
141
  def upgrade_cmd(label)
125
- "kubectl --namespace #{namespace} --context #{cluster_name} label --overwrite #{label[:resource]} #{label[:name]} #{label["value"]}"
142
+ Minfra::Cli::KubeCtlRunner.new("--namespace #{namespace} --context #{cluster_name} label --overwrite #{label[:resource]} #{label[:name]} #{label['value']}")
126
143
  end
127
144
 
128
145
  def install_cmd(label)
129
- "kubectl --namespace #{namespace} --context #{cluster_name} label --overwrite #{label[:resource]} #{label[:name]} #{label["value"]}"
146
+ Minfra::Cli::KubeCtlRunner.new("--namespace #{namespace} --context #{cluster_name} label --overwrite #{label[:resource]} #{label[:name]} #{label['value']}")
130
147
  end
131
148
  end
132
149
 
133
150
  class Wait < Context
134
151
  def print_install(wait)
135
- @out_io.puts "---"
152
+ @out_io.puts '---'
136
153
  @out_io.puts wait.cmd
137
154
  end
138
155
 
139
156
  def print_upgrade(wait)
140
- @out_io.puts "---"
157
+ @out_io.puts '---'
141
158
  @out_io.puts wait.cmd
142
159
  end
143
160
 
@@ -159,19 +176,19 @@ module Orchparty
159
176
  end
160
177
  end
161
178
 
162
-
163
179
  def print_install(chart)
164
-
165
180
  build_chart(chart) do |chart_path|
166
- cmd="helm template --namespace #{namespace} --debug --kube-context #{cluster_name} --output-dir #{chart_path.join('..','helm_expanded')} #{chart.name} #{chart_path}"
181
+ cmd = "helm template --namespace #{namespace} --debug --kube-context #{cluster_name} --output-dir #{chart_path.join(
182
+ '..', 'helm_expanded'
183
+ )} #{chart.name} #{chart_path}"
167
184
  @out_io.puts `$cmd`
168
185
  if system("#{cmd} > /dev/null")
169
- info("helm template check: OK")
186
+
187
+ info('helm template check: OK')
170
188
  else
171
- error("helm template check: FAIL")
172
- end
189
+ error('helm template check: FAIL')
190
+ end
173
191
  end
174
-
175
192
  end
176
193
 
177
194
  def print_upgrade(chart)
@@ -181,52 +198,49 @@ module Orchparty
181
198
  def install(chart)
182
199
  info("Install: #{chart.name}")
183
200
  build_chart(chart) do |chart_path|
184
- @out_io.puts system("helm install --create-namespace --namespace #{namespace} --kube-context #{cluster_name} #{chart.name} #{chart_path}")
201
+ res = Minfra::Cli::HelmRunner.new("install --create-namespace --namespace #{namespace} --kube-context #{cluster_name} #{chart.name} #{chart_path}").run
202
+ @out_io.puts res.stdout
185
203
  end
186
204
  end
187
205
 
188
206
  def upgrade(chart)
189
207
  info("Upgrade: #{chart}")
190
208
  build_chart(chart) do |chart_path|
191
- @out_io.puts system("helm upgrade --namespace #{namespace} --kube-context #{cluster_name} #{chart.name} #{chart_path}")
209
+ res = Minfra::Cli::HelmRunner.new("upgrade --namespace #{namespace} --kube-context #{cluster_name} #{chart.name} #{chart_path}").run
210
+ @out_io.puts res.stdout
192
211
  end
193
212
  end
213
+
194
214
  private
195
-
215
+
196
216
  def build_chart(chart)
197
-
198
-
199
217
  dir = @app.status_dir.join('helm') # duplication
200
-
201
- params = chart._services.map {|s| app_config.services[s.to_sym] }.map{|s| [s.name, s]}.to_h
202
- run(templates_path: File.expand_path(chart.template, self.dir_path), params: params, output_chart_path: dir, chart: chart)
218
+
219
+ params = chart._services.map { |s| app_config.services[s.to_sym] }.map { |s| [s.name, s] }.to_h
220
+ run(templates_path: File.expand_path(chart.template, dir_path), params: params, output_chart_path: dir,
221
+ chart: chart)
203
222
  yield dir
204
223
  end
205
224
 
206
-
207
-
208
225
  # remember:
209
226
  # this is done for an app
210
227
  # that app can have multiple charts with multiple services!
211
-
212
- def run(templates_path:, params:, output_chart_path:, chart: )
213
228
 
214
-
215
- File.open(File.join(output_chart_path, 'values.yaml'),'a') do |helm_values|
229
+ def run(templates_path:, params:, output_chart_path:, chart:)
230
+ File.open(File.join(output_chart_path, 'values.yaml'), 'a') do |helm_values|
216
231
  params.each do |app_name, subparams|
217
232
  subparams[:chart] = chart
218
- used_vars=generate_documents_from_erbs(
233
+ used_vars = generate_documents_from_erbs(
219
234
  templates_path: templates_path,
220
235
  app_name: app_name,
221
236
  params: subparams,
222
237
  output_chart_path: output_chart_path
223
238
  )
224
- used_vars.each do |variable,value|
239
+ used_vars.each do |variable, value|
225
240
  helm_values.puts "#{variable}: \"#{value}\""
226
241
  end
227
242
  end
228
243
  end
229
-
230
244
  end
231
245
 
232
246
  def generate_documents_from_erbs(templates_path:, app_name:, params:, output_chart_path:)
@@ -236,13 +250,13 @@ module Orchparty
236
250
  end
237
251
 
238
252
  kind = params.fetch(:kind)
239
- params._used_vars = {} #here we'll collect all used vars
253
+ params._used_vars = {} # here we'll collect all used vars
240
254
 
241
255
  Dir[File.join(templates_path, kind, '*.erb')].each do |template_path|
242
256
  info("Rendering Template: #{template_path}")
243
257
  template_name = File.basename(template_path, '.erb')
244
258
  output_path = File.join(output_chart_path, 'templates', "#{app_name}-#{template_name}")
245
-
259
+
246
260
  template = Erubis::Eruby.new(File.read(template_path))
247
261
  template.filename = template_path
248
262
 
@@ -252,14 +266,13 @@ module Orchparty
252
266
  begin
253
267
  document = template.result(CleanBinding.new.get_binding(params))
254
268
  rescue Exception
255
- error "#{template_path} has a problem: #{$!.inspect}"
269
+ error "#{template_path} has a problem: #{$ERROR_INFO.inspect}"
256
270
  raise
257
271
  end
258
272
  File.write(output_path, document)
259
273
  end
260
274
  params._used_vars
261
275
  end
262
-
263
276
  end
264
277
  end
265
278
  end
@@ -267,19 +280,16 @@ end
267
280
  class KubernetesApplication
268
281
  include Minfra::Cli::Logging
269
282
 
270
- attr_accessor :cluster_name
271
- attr_accessor :file_path
272
- attr_accessor :namespace
273
- attr_accessor :app_config
283
+ attr_accessor :cluster_name, :file_path, :namespace, :app_config
274
284
  attr_reader :status_dir
275
285
 
276
- def initialize(app_config: [], namespace:, cluster_name:, file_name:, status_dir:, out_io: STDOUT)
277
- self.file_path = Pathname.new(file_name).parent.expand_path #path of the stack
286
+ def initialize(namespace:, cluster_name:, file_name:, status_dir:, app_config: [], out_io: $stdout)
287
+ self.file_path = Pathname.new(file_name).parent.expand_path # path of the stack
278
288
  self.cluster_name = cluster_name
279
289
  self.namespace = namespace
280
290
  self.app_config = app_config
281
291
  @status_dir = status_dir
282
- @out_io= out_io
292
+ @out_io = out_io
283
293
  end
284
294
 
285
295
  def install
@@ -295,17 +305,17 @@ class KubernetesApplication
295
305
  end
296
306
 
297
307
  private
308
+
298
309
  def prepare
299
-
300
310
  output_chart_path = @status_dir.join('helm')
301
311
  output_chart_path.rmtree if output_chart_path.exist?
302
312
  output_chart_path.mkpath
303
- templates_path = file_path.join('../../chart-templates').expand_path #don't ask. the whole concept of multiple charts in an app stinks...
304
-
313
+ templates_path = file_path.join('../../chart-templates').expand_path # don't ask. the whole concept of multiple charts in an app stinks...
314
+
305
315
  generate_chart_yaml(
306
- templates_path: templates_path,
307
- output_chart_path: output_chart_path,
308
- chart_name: namespace,
316
+ templates_path: templates_path,
317
+ output_chart_path: output_chart_path,
318
+ chart_name: namespace
309
319
  )
310
320
 
311
321
  info("generating base helm structure from: #{output_chart_path} from #{templates_path}")
@@ -313,26 +323,26 @@ class KubernetesApplication
313
323
 
314
324
  system("cp #{File.join(templates_path, 'values.yaml')} #{File.join(output_chart_path, 'values.yaml')}")
315
325
  system("cp #{File.join(templates_path, '.helmignore')} #{File.join(output_chart_path, '.helmignore')}")
316
- system("cp #{File.join(templates_path, 'templates/_helpers.tpl')} #{File.join(output_chart_path, 'templates/_helpers.tpl')}")
317
-
326
+ system("cp #{File.join(templates_path,
327
+ 'templates/_helpers.tpl')} #{File.join(output_chart_path, 'templates/_helpers.tpl')}")
318
328
  end
319
329
 
320
- def generate_chart_yaml(templates_path:, output_chart_path:, chart_name: )
330
+ def generate_chart_yaml(templates_path:, output_chart_path:, chart_name:)
321
331
  template_path = File.join(templates_path, 'Chart.yaml.erb')
322
332
  output_path = File.join(output_chart_path, 'Chart.yaml')
323
333
 
324
- res=Minfra::Cli::Templater.read(template_path, params: {chart_name: chart_name})
334
+ res = Minfra::Cli::Templater.read(template_path, params: { chart_name: chart_name })
325
335
  File.write(output_path, res)
326
336
  end
327
-
337
+
328
338
  def combine_charts(app_config)
329
339
  services = app_config._service_order.map(&:to_s)
330
340
  app_config._service_order.each do |name|
331
341
  current_service = app_config[:services][name]
332
- if current_service._type == "chart"
333
- current_service._services.each do |n|
334
- services.delete n.to_s
335
- end
342
+ next unless current_service._type == 'chart'
343
+
344
+ current_service._services.each do |n|
345
+ services.delete n.to_s
336
346
  end
337
347
  end
338
348
  services
@@ -344,14 +354,14 @@ class KubernetesApplication
344
354
  services.each do |name|
345
355
  service = app_config[:services][name]
346
356
  info "Service: #{name}(#{service._type}) #{method}"
347
- deployable_class="::Orchparty::Services::#{service._type.classify}".constantize
348
- deployable=deployable_class.new(cluster_name: cluster_name,
349
- namespace: namespace,
350
- file_path: file_path,
351
- app_config: app_config,
352
- out_io: @out_io,
353
- app: self)
354
-
357
+ deployable_class = "::Orchparty::Services::#{service._type.classify}".constantize
358
+ deployable = deployable_class.new(cluster_name: cluster_name,
359
+ namespace: namespace,
360
+ file_path: file_path,
361
+ app_config: app_config,
362
+ out_io: @out_io,
363
+ app: self)
364
+
355
365
  deployable.send(method, service)
356
366
  end
357
367
  end
data/minfra-cli.gemspec CHANGED
@@ -31,9 +31,10 @@ Gem::Specification.new do |spec|
31
31
  spec.add_runtime_dependency "table_print", "1.5.6"
32
32
  spec.add_runtime_dependency "rest-client", "~>2.0"
33
33
  spec.add_runtime_dependency "hashie", "~>3.5"
34
- spec.add_runtime_dependency "activesupport", "~> 6.1"
34
+ spec.add_runtime_dependency "activesupport", ">= 6.1"
35
35
  spec.add_runtime_dependency "erubis", "~> 2.7"
36
36
  spec.add_runtime_dependency "hiera", "3.9.0"
37
37
  spec.add_runtime_dependency "hiera-eyaml", "3.3.0"
38
38
  spec.add_runtime_dependency "hiera-eyaml-gpg", "0.7.4"
39
39
  end
40
+
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: minfra-cli
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.11.0
4
+ version: 1.12.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Peter Schrammel
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-05-16 00:00:00.000000000 Z
11
+ date: 2023-09-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor
@@ -76,14 +76,14 @@ dependencies:
76
76
  name: activesupport
77
77
  requirement: !ruby/object:Gem::Requirement
78
78
  requirements:
79
- - - "~>"
79
+ - - ">="
80
80
  - !ruby/object:Gem::Version
81
81
  version: '6.1'
82
82
  type: :runtime
83
83
  prerelease: false
84
84
  version_requirements: !ruby/object:Gem::Requirement
85
85
  requirements:
86
- - - "~>"
86
+ - - ">="
87
87
  - !ruby/object:Gem::Version
88
88
  version: '6.1'
89
89
  - !ruby/object:Gem::Dependency
@@ -185,7 +185,9 @@ files:
185
185
  - lib/minfra/cli/common.rb
186
186
  - lib/minfra/cli/config.rb
187
187
  - lib/minfra/cli/document.rb
188
+ - lib/minfra/cli/helm_runner.rb
188
189
  - lib/minfra/cli/hook.rb
190
+ - lib/minfra/cli/kubectl_runner.rb
189
191
  - lib/minfra/cli/logging.rb
190
192
  - lib/minfra/cli/main_command.rb
191
193
  - lib/minfra/cli/plugins.rb
@@ -237,7 +239,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
237
239
  - !ruby/object:Gem::Version
238
240
  version: '0'
239
241
  requirements: []
240
- rubygems_version: 3.4.6
242
+ rubygems_version: 3.3.7
241
243
  signing_key:
242
244
  specification_version: 4
243
245
  summary: A cli framework for k8s based development and deployment.