minfra-cli 1.0.1 → 1.1.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: cab66f511ab6227678a724abe92791129b2a7fa892ce9c89f930b9c414cbc334
4
- data.tar.gz: 231d318901b435af0a09cbdc75cde85af803641a4592fe0f0262982dd91c1d41
3
+ metadata.gz: ad8c40bad784c7d620305dd1f0b352e96c51d21a985017cbf98550b110d8ee6d
4
+ data.tar.gz: 7f5895eeaf923585c2e7072d09b3bac513228662c09761c89af81ec442a374d2
5
5
  SHA512:
6
- metadata.gz: 19c9601223257a4a38727f337a9ac279e04663175ecb8342a4dc0b96d229cf4f3aefe06bb4301d089fb640f21b774d6fb0c67cdf1cef951d3983534a80592d3c
7
- data.tar.gz: 40271ce6dda6d181362478070f1a38d7962e4ef8246dc13c8c10e84e3d99ebc352a0e9082f6cfab023ebb47208658cf2e2e94adfc6b853a6e74f4e1d8534d18f
6
+ metadata.gz: 599880ad0ff8161584e13abdd479371c793cc551ef6f788d556bd5ae5f4e742399539a150ca896f84781a9796ac91e7c0134172d53e952106cb9067c7cd0d91c
7
+ data.tar.gz: 1cf840dac8f60258804e20ffeee65b3c41e6c6248ff9a08b187000ad145bd498ca540b0be090739e12b135f8a68a5b443f662be6d684e087316dc667a9772351
data/CHANGELOG.md CHANGED
@@ -1,3 +1,9 @@
1
+ # 1.1.0
2
+ * adding state path so stacks/ is now read only and all generated states are in state/
3
+ * logger's output always goes to STDERR
4
+
5
+ # 1.0.2
6
+ * looking up cluster name by hiera cluster.id
1
7
  # 1.0.1
2
8
  * adding l! method
3
9
  # 1.0.0
data/Gemfile ADDED
@@ -0,0 +1,8 @@
1
+ source "https://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in ccs-infra.gemspec
4
+ gemspec
5
+
6
+ gem "rake", "~> 12.0"
7
+ gem "rspec", "~> 3.0"
8
+ gem "timecop", "~> 0.9.5"
data/Gemfile.lock ADDED
@@ -0,0 +1,87 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ minfra-cli (1.0.1)
5
+ activesupport (~> 6.1)
6
+ erubis (~> 2.7)
7
+ hashie (~> 3.5)
8
+ hiera (= 3.9.0)
9
+ hiera-eyaml (= 3.3.0)
10
+ hiera-eyaml-gpg (= 0.7.4)
11
+ rest-client (~> 2.0)
12
+ table_print (= 1.5.6)
13
+ thor (~> 1.0, >= 1.0.0)
14
+
15
+ GEM
16
+ remote: https://rubygems.org/
17
+ specs:
18
+ activesupport (6.1.7)
19
+ concurrent-ruby (~> 1.0, >= 1.0.2)
20
+ i18n (>= 1.6, < 2)
21
+ minitest (>= 5.1)
22
+ tzinfo (~> 2.0)
23
+ zeitwerk (~> 2.3)
24
+ concurrent-ruby (1.1.10)
25
+ diff-lcs (1.5.0)
26
+ domain_name (0.5.20190701)
27
+ unf (>= 0.0.5, < 1.0.0)
28
+ erubis (2.7.0)
29
+ hashie (3.6.0)
30
+ hiera (3.9.0)
31
+ hiera-eyaml (3.3.0)
32
+ highline
33
+ optimist
34
+ hiera-eyaml-gpg (0.7.4)
35
+ hiera-eyaml (>= 1.3.8)
36
+ highline (2.0.3)
37
+ http-accept (1.7.0)
38
+ http-cookie (1.0.5)
39
+ domain_name (~> 0.5)
40
+ i18n (1.12.0)
41
+ concurrent-ruby (~> 1.0)
42
+ mime-types (3.4.1)
43
+ mime-types-data (~> 3.2015)
44
+ mime-types-data (3.2022.0105)
45
+ minitest (5.16.3)
46
+ netrc (0.11.0)
47
+ optimist (3.0.1)
48
+ rake (12.3.3)
49
+ rest-client (2.1.0)
50
+ http-accept (>= 1.7.0, < 2.0)
51
+ http-cookie (>= 1.0.2, < 2.0)
52
+ mime-types (>= 1.16, < 4.0)
53
+ netrc (~> 0.8)
54
+ rspec (3.11.0)
55
+ rspec-core (~> 3.11.0)
56
+ rspec-expectations (~> 3.11.0)
57
+ rspec-mocks (~> 3.11.0)
58
+ rspec-core (3.11.0)
59
+ rspec-support (~> 3.11.0)
60
+ rspec-expectations (3.11.1)
61
+ diff-lcs (>= 1.2.0, < 2.0)
62
+ rspec-support (~> 3.11.0)
63
+ rspec-mocks (3.11.1)
64
+ diff-lcs (>= 1.2.0, < 2.0)
65
+ rspec-support (~> 3.11.0)
66
+ rspec-support (3.11.1)
67
+ table_print (1.5.6)
68
+ thor (1.2.1)
69
+ timecop (0.9.5)
70
+ tzinfo (2.0.5)
71
+ concurrent-ruby (~> 1.0)
72
+ unf (0.1.4)
73
+ unf_ext
74
+ unf_ext (0.0.8.2)
75
+ zeitwerk (2.6.0)
76
+
77
+ PLATFORMS
78
+ ruby
79
+
80
+ DEPENDENCIES
81
+ minfra-cli!
82
+ rake (~> 12.0)
83
+ rspec (~> 3.0)
84
+ timecop (~> 0.9.5)
85
+
86
+ BUNDLED WITH
87
+ 2.1.4
data/README.md ADDED
@@ -0,0 +1,36 @@
1
+ # minfra-cli
2
+
3
+ Is a KIND (k8s in docker) based development environment.
4
+
5
+
6
+
7
+ ## Expected hiera data
8
+
9
+ * l("cluster").id: the k8s name of the cluster
10
+
11
+
12
+
13
+
14
+
15
+
16
+
17
+
18
+
19
+
20
+
21
+
22
+
23
+
24
+ # Orchparty
25
+
26
+ It's a fork of the original orchparty. TBD: see
27
+
28
+ The base is an application
29
+
30
+ an application can have
31
+ * services
32
+ * apply
33
+ * environment
34
+ * variables
35
+ * configurations
36
+ * secrets
@@ -86,18 +86,21 @@ module Minfra
86
86
  cluster = stack.cluster_name
87
87
 
88
88
  method = options["install"] ? "install" : "upgrade"
89
- File.open(stack.compose_path(blank: true),"w") do |f|
89
+
90
+ stack.release_path.mkpath
91
+
92
+ File.open(stack.compose_path,"w") do |f|
90
93
  Orchparty::App.new(cluster_name: cluster,
91
94
  application_name: stack.name,
92
95
  force_variable_definition: false,
93
96
  file_name: stack.stack_rb_path.to_s,
97
+ status_dir: stack.release_path,
94
98
  options: options
95
99
  ).
96
100
  print( method: method, out_io: f)
97
101
  end
98
102
  #run_cmd(generate_cmd, :bash)
99
103
  bash_cmd = ["cd #{stack.release_path}"]
100
- bash_cmd << "cp #{stack.compose_path(blank: true)} #{stack.compose_path}"
101
104
  run_cmd(bash_cmd, :bash)
102
105
 
103
106
 
@@ -132,6 +135,7 @@ module Minfra
132
135
  application_name: stack.name,
133
136
  force_variable_definition: false,
134
137
  file_name: stack.stack_rb_path.to_s,
138
+ status_dir: stack.release_path,
135
139
  options: options
136
140
  )
137
141
  orch.send(method)
@@ -5,27 +5,21 @@ module Minfra
5
5
  class KubeStackTemplate
6
6
  include ::Minfra::Cli::Logging
7
7
 
8
- attr_reader :name, :env, :deployment
8
+ attr_reader :name, :env, :deployment, :config_path
9
9
  def initialize(name, config, deployment: '', cluster:)
10
10
  @name = name
11
- @path = config.stacks_path.join(name)
11
+ @config_path = config.stacks_path.join(name)
12
12
  @errors = []
13
13
  @config = config
14
14
  @env = config.orch_env
15
15
  @deployment = deployment.freeze
16
- @cluster = cluster.freeze
17
- puts "Stack selection: #{@name}, #{@path}, #{@cluster}"
16
+ @cluster = cluster.freeze || l!("cluster").id
17
+ @result_path = config.status_path.join('stacks', @cluster, name)
18
+ puts "Stack selection: #{@name}, #{@config_path}, #{@cluster}, #{@result_path}"
18
19
  end
19
20
 
20
21
  def cluster_name
21
- return @cluster_name if defined?(@cluster_name)
22
- @cluster_name = @cluster
23
- @cluster_name ||= "kind-#{@config.name}" if @config.dev?
24
- if cluster_path.exist? && (@cluster_name.nil? || @cluster_name.empty?)
25
- @cluster_name = YAML.load(File.read(cluster_path))[env.to_s]
26
- end
27
- @cluster_name ||= env
28
- @cluster_name
22
+ @cluster
29
23
  end
30
24
 
31
25
  def mixin_env
@@ -33,8 +27,8 @@ module Minfra
33
27
  end
34
28
 
35
29
  def valid?
36
- unless @path.exist?
37
- @errors << "stack path #{@path} doesn't exist"
30
+ unless @config_path.exist?
31
+ @errors << "stack path #{@config_path} doesn't exist"
38
32
  end
39
33
 
40
34
  unless stack_rb_path.exist?
@@ -44,11 +38,7 @@ module Minfra
44
38
  end
45
39
 
46
40
  def stack_rb_path
47
- release_path.join('stack.rb')
48
- end
49
-
50
- def cluster_path
51
- release_path.join("cluster.yaml")
41
+ config_path.join('stack.rb')
52
42
  end
53
43
 
54
44
  def compose_path(blank: false)
@@ -65,17 +55,8 @@ module Minfra
65
55
  @errors.join(";\n")
66
56
  end
67
57
 
68
- # we use a special file to flag the this stack is releasable to an environment
69
- def releasable?
70
- switch_path.exist?
71
- end
72
-
73
- def switch_path
74
- release_path.join("#{@env}_#{rancher_stack_name}.sh")
75
- end
76
-
77
58
  def release_path
78
- @path
59
+ @result_path
79
60
  end
80
61
 
81
62
 
@@ -16,6 +16,7 @@ module Minfra
16
16
  attr_reader :base_path
17
17
  attr_reader :config_path
18
18
  attr_reader :stacks_path
19
+ attr_reader :status_path
19
20
  attr_reader :me_path
20
21
  attr_reader :kube_path
21
22
  attr_reader :kube_config_path
@@ -41,6 +42,7 @@ module Minfra
41
42
  @project_config_path=@base_path.join("config","project.json")
42
43
  @config_path = @me_path.join('config.json')
43
44
  @stacks_path = @base_path.join('stacks')
45
+ @status_path = @base_path.join('state')
44
46
  @kube_path=@me_path.join('kube')
45
47
  @kube_config_path=@kube_path.join('config')
46
48
  @kind_config_path=@me_path.join("kind.yaml.erb")
@@ -11,15 +11,15 @@ module Minfra
11
11
  end
12
12
 
13
13
  def info(str)
14
- STDOUT.puts str
14
+ STDERR.puts str
15
15
  end
16
16
 
17
17
  def debug(str)
18
- STDOUT.puts "Debug: #{str}"
18
+ STDERR.puts "Debug: #{str}"
19
19
  end
20
20
 
21
21
  def deprecated(comment)
22
- puts "DEPRECATED: #{comment}"
22
+ STDERR.puts "DEPRECATED: #{comment}"
23
23
  end
24
24
  end
25
25
  end
@@ -1,5 +1,5 @@
1
1
  module Minfra
2
2
  module Cli
3
- VERSION = '1.0.1'.freeze
3
+ VERSION = '1.1.0'.freeze
4
4
  end
5
5
  end
data/lib/minfra/cli.rb CHANGED
@@ -75,7 +75,6 @@ module Minfra
75
75
  node_scope=hiera.lookup("env", {}, scope, nil, :deeper)
76
76
  scope=scope.merge(node_scope)
77
77
  cache={}
78
-
79
78
  Kernel.define_method(:l) do |value,default=nil|
80
79
  return cache[value] if cache.has_key?(value)
81
80
 
@@ -16,11 +16,12 @@ module Orchparty
16
16
  attr_accessor :app_config
17
17
  attr_accessor :options
18
18
 
19
- def initialize(cluster_name: , namespace:, file_path: , app_config:, out_io: STDOUT)
19
+ def initialize(cluster_name: , namespace:, file_path: , app_config:, out_io: STDOUT, app: )
20
20
  self.cluster_name = cluster_name
21
21
  self.namespace = namespace
22
22
  self.dir_path = file_path
23
23
  self.app_config = app_config
24
+ @app = app
24
25
  @out_io = out_io
25
26
  self.options=options
26
27
  end
@@ -158,14 +159,13 @@ module Orchparty
158
159
 
159
160
  def build_chart(chart)
160
161
  params = chart._services.map {|s| app_config.services[s.to_sym] }.map{|s| [s.name, s]}.to_h
161
- Dir.mktmpdir("#{chart.name}-") do |dir|
162
- run(templates_path: File.expand_path(chart.template, self.dir_path), params: params, output_chart_path: dir, chart: chart)
163
- yield dir
164
- end
162
+ dir = @app.status_dir.join('helm')
163
+ dir.mkpath
164
+ run(templates_path: File.expand_path(chart.template, self.dir_path), params: params, output_chart_path: dir, chart: chart)
165
+ yield dir
165
166
  end
166
167
 
167
168
  def run(templates_path:, params:, output_chart_path:, chart: )
168
- system("mkdir -p #{output_chart_path}")
169
169
  system("mkdir -p #{File.join(output_chart_path, 'templates')}")
170
170
 
171
171
  system("cp #{File.join(templates_path, 'values.yaml')} #{File.join(output_chart_path, 'values.yaml')}")
@@ -256,12 +256,14 @@ class KubernetesApplication
256
256
  attr_accessor :file_path
257
257
  attr_accessor :namespace
258
258
  attr_accessor :app_config
259
+ attr_reader :status_dir
259
260
 
260
- def initialize(app_config: [], namespace:, cluster_name:, file_name:, out_io: STDOUT)
261
+ def initialize(app_config: [], namespace:, cluster_name:, file_name:, status_dir:, out_io: STDOUT)
261
262
  self.file_path = Pathname.new(file_name).parent.expand_path
262
263
  self.cluster_name = cluster_name
263
264
  self.namespace = namespace
264
265
  self.app_config = app_config
266
+ @status_dir = status_dir
265
267
  @out_io= out_io
266
268
  end
267
269
 
@@ -295,7 +297,7 @@ class KubernetesApplication
295
297
  services.each do |name|
296
298
  service = app_config[:services][name]
297
299
  puts "Service: #{name}(#{service._type}) #{method}"
298
- "::Orchparty::Services::#{service._type.classify}".constantize.new(cluster_name: cluster_name, namespace: namespace, file_path: file_path, app_config: app_config, out_io: @out_io).send(method, service)
300
+ "::Orchparty::Services::#{service._type.classify}".constantize.new(cluster_name: cluster_name, namespace: namespace, file_path: file_path, app_config: app_config, out_io: @out_io, app: self).send(method, service)
299
301
  end
300
302
  end
301
303
  end
data/lib/orchparty.rb CHANGED
@@ -23,12 +23,14 @@ module Orchparty
23
23
  class App
24
24
  attr_reader :options
25
25
 
26
- def initialize(cluster_name:, application_name:, force_variable_definition:, file_name:, options: {})
26
+ def initialize(cluster_name:, application_name:, force_variable_definition:, file_name:, status_dir:, options: {})
27
27
  @cluster_name = cluster_name
28
28
  @application_name = application_name
29
29
  @force_variable_definiton = force_variable_definition
30
30
  @file_name = file_name
31
+ @status_dir = status_dir
31
32
  @options = options
33
+
32
34
  Orchparty.options=options
33
35
 
34
36
  load_plugins
@@ -55,7 +57,14 @@ module Orchparty
55
57
  def app(out_io: STDOUT)
56
58
  parsed = Orchparty::Kubernetes::DSLParser.new(@file_name).parse
57
59
  app_config = Transformations.transform_kubernetes(parsed, force_variable_definition: @force_variable_definition).applications[@application_name]
58
- KubernetesApplication.new(app_config: app_config, namespace: @application_name, cluster_name: @cluster_name, file_name: @file_name, out_io: out_io)
60
+ KubernetesApplication.new(
61
+ app_config: app_config,
62
+ namespace: @application_name,
63
+ cluster_name: @cluster_name,
64
+ file_name: @file_name,
65
+ status_dir: @status_dir,
66
+ out_io: out_io
67
+ )
59
68
  end
60
69
 
61
70
  def generate(plugin_name, options, plugin_options)
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.0.1
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Peter Schrammel
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-09-30 00:00:00.000000000 Z
11
+ date: 2022-10-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor
@@ -154,6 +154,9 @@ files:
154
154
  - ".gitignore"
155
155
  - CHANGELOG.md
156
156
  - Dockerfile
157
+ - Gemfile
158
+ - Gemfile.lock
159
+ - README.md
157
160
  - bin/build
158
161
  - bin/console
159
162
  - bin/container_exec