Class: CemAcpt::Config
- Inherits:
-
Object
- Object
- CemAcpt::Config
- Defined in:
- lib/cem_acpt/config.rb
Overview
Holds the configuration for cem_acpt
Constant Summary collapse
- KEYS =
%i[ actions ci_mode config_file image_name_builder log_level log_file log_format module_dir node_data no_ephemeral_ssh_key platform provisioner quiet terraform test_data tests user_config verbose ].freeze
Instance Attribute Summary collapse
-
#config ⇒ Object
(also: #to_h)
readonly
Returns the value of attribute config.
-
#env_vars ⇒ Object
readonly
Returns the value of attribute env_vars.
Instance Method Summary collapse
- #[](key) ⇒ Object
- #ci_mode? ⇒ Boolean (also: #ci?)
- #debug_mode? ⇒ Boolean (also: #debug?)
-
#defaults ⇒ Object
The default configuration.
- #empty? ⇒ Boolean
- #explain ⇒ Object
- #get(dot_key) ⇒ Object (also: #dget)
- #has?(dot_key) ⇒ Boolean
-
#initialize(opts: {}, config_file: nil, load_user_config: true) ⇒ Config
constructor
A new instance of Config.
-
#load(opts: {}, config_file: nil) ⇒ self
Load the configuration from the environment variables, config file, and opts The order of precedence is: 1.
- #quiet_mode? ⇒ Boolean (also: #quiet?)
- #to_json(*args) ⇒ Object
- #to_yaml ⇒ Object
- #verbose_mode? ⇒ Boolean (also: #verbose?)
Constructor Details
#initialize(opts: {}, config_file: nil, load_user_config: true) ⇒ Config
Returns a new instance of Config.
35 36 37 38 |
# File 'lib/cem_acpt/config.rb', line 35 def initialize(opts: {}, config_file: nil, load_user_config: true) @load_user_config = load_user_config load(opts: opts, config_file: config_file) end |
Instance Attribute Details
#config ⇒ Object (readonly) Also known as: to_h
Returns the value of attribute config.
33 34 35 |
# File 'lib/cem_acpt/config.rb', line 33 def config @config end |
#env_vars ⇒ Object (readonly)
Returns the value of attribute env_vars.
33 34 35 |
# File 'lib/cem_acpt/config.rb', line 33 def env_vars @env_vars end |
Instance Method Details
#[](key) ⇒ Object
143 144 145 146 147 148 149 150 151 |
# File 'lib/cem_acpt/config.rb', line 143 def [](key) if key.is_a?(Symbol) @config[key].dup elsif key.is_a?(String) @config.dget(key).dup else raise ArgumentError, "Invalid key type '#{key.class}'" end end |
#ci_mode? ⇒ Boolean Also known as: ci?
166 167 168 |
# File 'lib/cem_acpt/config.rb', line 166 def ci_mode? !!get('ci_mode') || !!(ENV['GITHUB_ACTIONS'] || ENV['CI']) end |
#debug_mode? ⇒ Boolean Also known as: debug?
171 172 173 |
# File 'lib/cem_acpt/config.rb', line 171 def debug_mode? get('log_level') == 'debug' end |
#defaults ⇒ Object
The default configuration
41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 |
# File 'lib/cem_acpt/config.rb', line 41 def defaults { actions: {}, ci_mode: false, config_file: nil, image_name_builder: { character_substitutions: ['_', '-'], parts: ['cem-acpt', '$image_fam', '$collection', '$firewall'], join_with: '-', }, log_level: 'info', log_file: nil, log_format: 'text', module_dir: Dir.pwd, node_data: {}, no_ephemeral_ssh_key: false, platform: { name: 'gcp', }, quiet: false, test_data: { for_each: { collection: %w[puppet7], }, vars: {}, name_pattern_vars: %r{^(?<framework>[a-z]+)_(?<image_fam>[a-z0-9-]+)_(?<firewall>[a-z]+)_(?<framework_vars>[-_a-z0-9]+)$}, vars_post_processing: { new_vars: [ { name: 'profile', string_split: { from: 'framework_vars', using: '_', part: 0, }, }, { name: 'level', string_split: { from: 'framework_vars', using: '_', part: 1, }, }, ], delete_vars: %w[framework_vars], }, }, tests: [], verbose: false, } end |
#empty? ⇒ Boolean
162 163 164 |
# File 'lib/cem_acpt/config.rb', line 162 def empty? @config.empty? end |
#explain ⇒ Object
125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 |
# File 'lib/cem_acpt/config.rb', line 125 def explain explanation = {} %i[defaults env_vars user_config config_from_file options].each do |source| source_vals = send(source).dup next if source_vals.nil? || source_vals.empty? # The loop below will overwrite the value of explanation[key] if the same key is found in multiple sources # This is intentional, as the last source to set the value is the one that should be used source_vals.each do |key, value| explanation[key] = source if @config.dget(key.to_s) == value end end explained = explanation.each_with_object([]) do |(key, value), ary| ary << "Key '#{key}' from source '#{value}'" end explained.join("\n") end |
#get(dot_key) ⇒ Object Also known as: dget
153 154 155 |
# File 'lib/cem_acpt/config.rb', line 153 def get(dot_key) @config.dget(dot_key).dup end |
#has?(dot_key) ⇒ Boolean
158 159 160 |
# File 'lib/cem_acpt/config.rb', line 158 def has?(dot_key) !!get(dot_key) end |
#load(opts: {}, config_file: nil) ⇒ self
Load the configuration from the environment variables, config file, and opts The order of precedence is:
1. environment variables
2. user config file (config.yaml in user_config_dir)
3. specified config file (if it exists)
4. opts
5. static options (set in this class)
104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 |
# File 'lib/cem_acpt/config.rb', line 104 def load(opts: {}, config_file: nil) create_config_dirs! init_config!(opts: opts, config_file: config_file) add_env_vars!(@config) @config.merge!(user_config) if user_config && @load_user_config @config.merge!(config_from_file) if config_from_file @config.merge!(@options) if @options (@config) @config.format! # Symbolize keys of all hashes validate_config! # Freeze the config so it can't be modified # This helps with thread safety and deterministic behavior @config.freeze self end |
#quiet_mode? ⇒ Boolean Also known as: quiet?
181 182 183 |
# File 'lib/cem_acpt/config.rb', line 181 def quiet_mode? !!get('quiet') end |
#to_json(*args) ⇒ Object
190 191 192 |
# File 'lib/cem_acpt/config.rb', line 190 def to_json(*args) @config.to_json(*args) end |
#to_yaml ⇒ Object
186 187 188 |
# File 'lib/cem_acpt/config.rb', line 186 def to_yaml @config.to_yaml end |
#verbose_mode? ⇒ Boolean Also known as: verbose?
176 177 178 |
# File 'lib/cem_acpt/config.rb', line 176 def verbose_mode? !!get('verbose') end |