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_destroy_nodes 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.
37 38 39 40 |
# File 'lib/cem_acpt/config.rb', line 37 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.
35 36 37 |
# File 'lib/cem_acpt/config.rb', line 35 def config @config end |
#env_vars ⇒ Object (readonly)
Returns the value of attribute env_vars.
35 36 37 |
# File 'lib/cem_acpt/config.rb', line 35 def env_vars @env_vars end |
Instance Method Details
#[](key) ⇒ Object
141 142 143 144 145 146 147 148 149 |
# File 'lib/cem_acpt/config.rb', line 141 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?
164 165 166 |
# File 'lib/cem_acpt/config.rb', line 164 def ci_mode? !!get('ci_mode') || !!(ENV['GITHUB_ACTIONS'] || ENV['CI']) end |
#debug_mode? ⇒ Boolean Also known as: debug?
169 170 171 |
# File 'lib/cem_acpt/config.rb', line 169 def debug_mode? get('log_level') == 'debug' end |
#defaults ⇒ Object
The default configuration
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 93 94 |
# File 'lib/cem_acpt/config.rb', line 43 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
160 161 162 |
# File 'lib/cem_acpt/config.rb', line 160 def empty? @config.empty? end |
#explain ⇒ Object
123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 |
# File 'lib/cem_acpt/config.rb', line 123 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
151 152 153 |
# File 'lib/cem_acpt/config.rb', line 151 def get(dot_key) @config.dget(dot_key).dup end |
#has?(dot_key) ⇒ Boolean
156 157 158 |
# File 'lib/cem_acpt/config.rb', line 156 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)
106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 |
# File 'lib/cem_acpt/config.rb', line 106 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?
179 180 181 |
# File 'lib/cem_acpt/config.rb', line 179 def quiet_mode? !!get('quiet') end |
#to_json(*args) ⇒ Object
188 189 190 |
# File 'lib/cem_acpt/config.rb', line 188 def to_json(*args) @config.to_json(*args) end |
#to_yaml ⇒ Object
184 185 186 |
# File 'lib/cem_acpt/config.rb', line 184 def to_yaml @config.to_yaml end |
#verbose_mode? ⇒ Boolean Also known as: verbose?
174 175 176 |
# File 'lib/cem_acpt/config.rb', line 174 def verbose_mode? !!get('verbose') end |