minfra-cli 4.1.1 → 4.3.0

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: ea616e6ead0473faae98389aa80a06a829059445d4e2c04c6860b8ab293f557e
4
- data.tar.gz: 75e9ef0413aeaf293e69c1e19918dc9cb7179bdb97fac7450fdc8b21bfce3565
3
+ metadata.gz: 3130c38b75f95a1e33c187d6b2026ef0eead6ae92855021ef8c52a3d47aefc28
4
+ data.tar.gz: fe0fbbfee11d712ae34668bd9c5f87696fbf7c08186b409f0e33baf1d24ec449
5
5
  SHA512:
6
- metadata.gz: d68c1105544f8f64cc80d46dd4ee534e1e46ce4827c38dbbfc50e503283185ba4c1a15b1287e9e05584fb6a4b5ab34e72bca0a93c8533472cddaeec869dc170e
7
- data.tar.gz: f8ee54db259d6afed47ea39c1b1f5ba8af5438c9f063607719028e4360f0f45e15aeeeab53d723e153a147cf1c5c6c5d2e73c428b673e0bc0a23fb41e6b3728b
6
+ metadata.gz: 5b52d83585031a954c4db6a632322ecb3077936bed7ffa824d125e5ca6fb6341aead5abf1220671e9e17fcd6c7c0f541ea2a39405d541b51b5c1db11d9c8ffd1
7
+ data.tar.gz: 46aaa7a2acfe06a6fc190a21e5c7e0c391a55d503eda59618961b77f334203a1efa47d6c0ea337bdccbf2c22d255021ca1f148e9a23ae9f1863e543fa1748e27
data/CHANGELOG.md CHANGED
@@ -1,3 +1,11 @@
1
+ # 4.3.0
2
+ * raising EnvNotFound when the environment is not found
3
+ * instead of patching yaml we're introducing yeaml backend to lookup eyaml files without decryption
4
+ * fixing hiera setup so environment file is loaded first and merged into scope
5
+ # 4.2.0
6
+ * --no-rc don't load rc files
7
+ * MINFRA_DEBUG_HIERA_LOOKUPS=true also shows the results of the lookup
8
+ * adding some needed hiera patches
1
9
  # 4.1.1
2
10
  * fix: puts statement removed
3
11
  # 4.1.0
@@ -26,7 +34,7 @@
26
34
  * fixing: setup dev
27
35
  * adding: colored errors and warnings
28
36
  * change: wrapping hiera lookup errors of gpg
29
- * adding: HIERA_DEBUG_LOOKUPS=true
37
+ * adding: MINFRA_DEBUG_HIERA_LOOKUPS=true
30
38
  # 2.0.1
31
39
  Refactorings
32
40
  * installing into Kernel only when 'exec' not at 'init' time
@@ -1,13 +1,15 @@
1
+ require 'hiera/backend/yaml_backend'
2
+ # require 'debug'
1
3
  class Hiera
2
4
  module Backend
3
- class Yaml_backend
4
-
5
+ class Yeaml_backend < Hiera::Backend::Yaml_backend
5
6
  def lookup(key, scope, order_override, resolution_type, context)
6
7
  answer = nil
7
8
  found = false
8
9
 
9
- Hiera.debug("Looking up #{key} in YAML backend")
10
- Backend.datasourcefiles(:yaml, scope, Config[:yaml][:extension] || "yaml", order_override) do |source, yamlfile|
10
+ Hiera.debug("Looking up #{key} in YEAML backend")
11
+ Backend.datasourcefiles(:yeaml, scope, Config[:yeaml][:extension] || "eyaml", order_override) do |source, yamlfile|
12
+ # debugger if scope['env']== "dev-on-premises" && ['cluster', 'env','lookup_options'].include?(key)
11
13
  data = @cache.read_file(yamlfile, Hash) do |data|
12
14
  YAML.load(data) || {}
13
15
  end
@@ -27,9 +27,9 @@ module Minfra
27
27
 
28
28
  init_logger
29
29
 
30
- @logger.debug("Minfra: loglevel: #{@logger.level}, env: #{@config.orch_env}")
30
+ @logger.debug("Minfra: loglevel: #{@logger.level}, env: #{@config.orch_env}, options: #{@options.inspect}")
31
31
 
32
- init_minfrarc
32
+ init_minfrarc unless @options[:norc]
33
33
  init_envs
34
34
 
35
35
  init_hiera
@@ -86,28 +86,23 @@ module Minfra
86
86
 
87
87
  # will parse -e, --argv_file, --
88
88
  def parse_global_options
89
- @options = {}
90
- if (idx = @argv.index('-e'))
91
- @options[:env] = @argv[idx + 1]
92
- @argv.delete_at(idx)
93
- @argv.delete_at(idx)
94
- end
95
-
96
- if (idx = argv.index('--minfra_argv_file'))
97
- @options[:argv_file] = @argv[idx + 1]
98
- @argv.delete_at(idx)
99
- @argv.delete_at(idx)
100
- end
89
+ extract_option('-e', :env, 1)
90
+ extract_option('--minfra_argv_file', :argv_file, 1)
91
+ extract_option('--minfra_path', :base_path, 1)
92
+ extract_option('--no-rc', :norc)
93
+ end
101
94
 
102
- if (idx = argv.index('--minfra_path'))
103
- @options[:base_path] = @argv[idx + 1]
104
- @argv.delete_at(idx)
95
+ def extract_option(name, sym, arity=0)
96
+ if idx = @argv.index(name)
97
+ if arity == 0
98
+ @options[sym] = true
99
+ else
100
+ @options[sym] = @argv[idx + 1]
101
+ @argv.delete_at(idx)
102
+ end
105
103
  @argv.delete_at(idx)
106
104
  end
107
-
108
- @options
109
105
  end
110
-
111
106
  def init_minfrarc
112
107
  # load minfrarc for configs
113
108
  project_minfrarc_path = @config.base_path.join('config', 'minfrarc.rb')
@@ -149,15 +144,19 @@ module Minfra
149
144
  env_path = config.project.dig(:minfra, :hiera, :env_path) || 'environments'
150
145
  root = base_path.join('hiera')
151
146
  root.join('hieradata',env_path).glob('*.eyaml').sort.each do |path|
152
- env_name = path.basename.sub(/(\..+)/,'').to_s
153
- @envs[env_name]=Env.new(
147
+ local_env_name = path.basename.sub(/(\..+)/,'').to_s
148
+ @envs[local_env_name]=Env.new(
154
149
  hiera_root: root,
155
150
  hiera_env_path: env_path,
156
- name: env_name,
157
- hiera_debug_lookups: ENV['MINFRA_DEBUG_HIERA_LOOKUPS'] == 'true',
151
+ name: local_env_name,
152
+ hiera_debug_lookups: ENV['MINFRA_DEBUG_HIERA_LOOKUPS'] == 'true' && env_name == local_env_name,
158
153
  backends: ENV.fetch('MINFRA_HIERA_BACKENDS','').split(',')
159
154
  )
160
155
  end
156
+ unless @envs[@env_name]
157
+ @logger.error("Environment '#{@env_name}' not found")
158
+ raise Errors::EnvNotFound.new(@env_name)
159
+ end
161
160
  @env = @envs[@env_name] # set the current env
162
161
  end
163
162
 
@@ -5,6 +5,8 @@ module Minfra
5
5
  module Errors
6
6
  class ExitError < StandardError
7
7
  end
8
+ class EnvNotFound < StandardError
9
+ end
8
10
  end
9
11
  end
10
12
  end
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'English'
4
+ # require 'debug'
4
5
  module Minfra
5
6
  module Cli
6
7
  class HieraLooker
@@ -12,11 +13,10 @@ module Minfra
12
13
 
13
14
  @hiera = Hiera.new(config: @root.join('hiera.yaml').to_s)
14
15
  # now that hiera has loaded the backends let's patch 'em
15
- require 'minfra/cli/hiera_yaml_backend_patch' if defined?(Hiera::Backend::Yaml_backend)
16
16
 
17
17
  Hiera.logger = :noop
18
18
  if backends && !backends.empty?
19
- @hiera.config[:backends] = backends
19
+ @hiera.config[:backends] = backends
20
20
  Hiera::Config.load_backends
21
21
  end
22
22
 
@@ -25,17 +25,16 @@ module Minfra
25
25
  raise("unknown environment #{@env_name}, I expect a file at #{hiera_main_path}") unless hiera_main_path.exist?
26
26
 
27
27
  scope = { 'hieraroot' => @root.to_s, 'env' => @env_name }
28
+ # we have to do this first as the hierarchy definitions only are valid if with the env variables injected
29
+ node_scope = @hiera.lookup('env', {}, scope, nil, :priority)
30
+ @scope = scope.merge(node_scope)
28
31
 
29
32
  @special_lookups = @hiera.lookup('lookup_options', {}, scope, nil, :priority)
30
-
31
- node_scope = @hiera.lookup('env', {}, scope, nil, :deeper)
32
- @scope = scope.merge(node_scope)
33
33
  @debug_lookups = debug_lookups
34
+ debug("hiera: scope -> #{@scope}") if @debug_lookups
34
35
  end
35
36
 
36
37
  def l(value, default = nil)
37
- debug "hiera: #{value}" if @debug_lookups
38
- # debugger if @env_name == 'production-management' && value == 'env.tags'
39
38
  return @cache[value] if @cache.key?(value)
40
39
 
41
40
  values = value.split('.')
@@ -67,6 +66,7 @@ module Minfra
67
66
  result = default if result.nil?
68
67
  result = Hashie::Mash.new(result) if result.is_a?(Hash)
69
68
  @cache[value] = result
69
+ debug "hiera: #{value} -> #{result.inspect}" if @debug_lookups
70
70
  result
71
71
  end
72
72
 
@@ -0,0 +1,9 @@
1
+ require 'highline/import'
2
+ module HieraPatch
3
+ def hiera?
4
+ false
5
+ end
6
+ end
7
+ require 'hiera/backend/eyaml/encryptors/gpg'
8
+
9
+ Hiera::Backend::Eyaml::Encryptors::Gpg.extend(HieraPatch)
@@ -24,7 +24,7 @@ module Minfra
24
24
  end
25
25
  end
26
26
 
27
- def self.read(path, params: {}, fallback: nil)
27
+ def self.read(path, params: {}, helpers: [], fallback: nil)
28
28
  p = Pathname.new(path)
29
29
  if p.exist?
30
30
  content = File.read(path)
@@ -34,7 +34,7 @@ module Minfra
34
34
  content = fallback
35
35
 
36
36
  end
37
- render(content, params)
37
+ render(content, params, helpers: )
38
38
  end
39
39
 
40
40
  def self.render(template, params, helpers: [])
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Minfra
4
4
  module Cli
5
- VERSION = '4.1.1'
5
+ VERSION = '4.3.0'
6
6
  end
7
7
  end
data/lib/minfra/cli.rb CHANGED
@@ -7,6 +7,8 @@ require 'ostruct'
7
7
  require 'hiera'
8
8
 
9
9
  require_relative 'cli/core_ext'
10
+ require_relative 'cli/patches'
11
+
10
12
  require_relative 'cli/errors'
11
13
  require_relative 'cli/logging'
12
14
  require_relative 'cli/templater'
@@ -49,6 +51,7 @@ module Minfra
49
51
  end
50
52
 
51
53
  def self.exec(argv)
54
+
52
55
  init(argv) unless init?
53
56
  cli.install
54
57
  cli.run
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: 4.1.1
4
+ version: 4.3.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: 2024-04-10 00:00:00.000000000 Z
11
+ date: 2024-05-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor
@@ -182,6 +182,7 @@ files:
182
182
  - exe/minfra
183
183
  - lib/deep_merge.rb
184
184
  - lib/hash.rb
185
+ - lib/hiera/backend/yeaml_backend.rb
185
186
  - lib/minfra/cli.rb
186
187
  - lib/minfra/cli/ask.rb
187
188
  - lib/minfra/cli/cli_starter.rb
@@ -205,11 +206,11 @@ files:
205
206
  - lib/minfra/cli/errors.rb
206
207
  - lib/minfra/cli/helm_runner.rb
207
208
  - lib/minfra/cli/hiera_looker.rb
208
- - lib/minfra/cli/hiera_yaml_backend_patch.rb
209
209
  - lib/minfra/cli/hook.rb
210
210
  - lib/minfra/cli/kubectl_runner.rb
211
211
  - lib/minfra/cli/logging.rb
212
212
  - lib/minfra/cli/main_command.rb
213
+ - lib/minfra/cli/patches.rb
213
214
  - lib/minfra/cli/plugin.rb
214
215
  - lib/minfra/cli/plugins.rb
215
216
  - lib/minfra/cli/runner.rb