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
139 140 141 142 143 144 145 146 147 |
# File 'lib/cem_acpt/config.rb', line 139 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?
162 163 164 |
# File 'lib/cem_acpt/config.rb', line 162 def ci_mode? !!get('ci_mode') || !!(ENV['GITHUB_ACTIONS'] || ENV['CI']) end |
#debug_mode? ⇒ Boolean Also known as: debug?
167 168 169 |
# File 'lib/cem_acpt/config.rb', line 167 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
158 159 160 |
# File 'lib/cem_acpt/config.rb', line 158 def empty? @config.empty? end |
#explain ⇒ Object
121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 |
# File 'lib/cem_acpt/config.rb', line 121 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
149 150 151 |
# File 'lib/cem_acpt/config.rb', line 149 def get(dot_key) @config.dget(dot_key).dup end |
#has?(dot_key) ⇒ Boolean
154 155 156 |
# File 'lib/cem_acpt/config.rb', line 154 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?
177 178 179 |
# File 'lib/cem_acpt/config.rb', line 177 def quiet_mode? !!get('quiet') end |
#to_json(*args) ⇒ Object
186 187 188 |
# File 'lib/cem_acpt/config.rb', line 186 def to_json(*args) @config.to_json(*args) end |
#to_yaml ⇒ Object
182 183 184 |
# File 'lib/cem_acpt/config.rb', line 182 def to_yaml @config.to_yaml end |
#verbose_mode? ⇒ Boolean Also known as: verbose?
172 173 174 |
# File 'lib/cem_acpt/config.rb', line 172 def verbose_mode? !!get('verbose') end |