Class: Bolt::Inventory::Inventory
- Inherits:
-
Object
- Object
- Bolt::Inventory::Inventory
- Defined in:
- lib/bolt/inventory/inventory.rb
Defined Under Namespace
Classes: WildcardError
Instance Attribute Summary collapse
-
#config ⇒ Object
readonly
Returns the value of attribute config.
-
#plugins ⇒ Object
readonly
Returns the value of attribute plugins.
-
#targets ⇒ Object
readonly
Returns the value of attribute targets.
Class Method Summary collapse
Instance Method Summary collapse
- #add_facts(target, new_facts = {}) ⇒ Object
- #add_to_group(targets, desired_group) ⇒ Object
- #clear_alia_from_group(group, target_name) ⇒ Object
- #collect_groups ⇒ Object
-
#create_target_from_hash(data) ⇒ Object
Add a brand new target, overriding any existing target with the same name.
-
#create_target_from_inventory(target_name) ⇒ Object
Pull in a target definition from the inventory file and evaluate any associated references.
- #data_hash ⇒ Object
- #facts(target) ⇒ Object
- #features(target) ⇒ Object
- #get_target(target) ⇒ Object
- #get_targets(targets) ⇒ Object
-
#group_data_for(target_name) ⇒ Object
PRIVATE ####.
- #group_names ⇒ Object
-
#initialize(data, config = nil, plugins:) ⇒ Inventory
constructor
A new instance of Inventory.
- #plugin_hooks(target) ⇒ Object
- #remove_from_group(target, desired_group) ⇒ Object
- #set_config(target, key_or_key_path, value) ⇒ Object
- #set_feature(target, feature, value = true) ⇒ Object
- #set_var(target, var_hash) ⇒ Object
- #target_config(target) ⇒ Object
- #target_implementation_class ⇒ Object
- #target_names ⇒ Object (also: #node_names)
- #validate ⇒ Object
- #vars(target) ⇒ Object
- #version ⇒ Object
Constructor Details
#initialize(data, config = nil, plugins:) ⇒ Inventory
Returns a new instance of Inventory.
16 17 18 19 20 21 22 23 24 25 26 27 28 |
# File 'lib/bolt/inventory/inventory.rb', line 16 def initialize(data, config = nil, plugins:) @logger = Logging.logger[self] # Config is saved to add config options to targets @config = config || Bolt::Config.default @data = data || {} @groups = Group.new(@data.merge('name' => 'all'), plugins) @plugins = plugins @group_lookup = {} # The targets hash is the canonical source for all targets in inventory @targets = {} @groups.resolve_string_targets(@groups.target_aliases, @groups.all_targets) collect_groups end |
Instance Attribute Details
#config ⇒ Object (readonly)
Returns the value of attribute config.
9 10 11 |
# File 'lib/bolt/inventory/inventory.rb', line 9 def config @config end |
#plugins ⇒ Object (readonly)
Returns the value of attribute plugins.
9 10 11 |
# File 'lib/bolt/inventory/inventory.rb', line 9 def plugins @plugins end |
#targets ⇒ Object (readonly)
Returns the value of attribute targets.
9 10 11 |
# File 'lib/bolt/inventory/inventory.rb', line 9 def targets @targets end |
Class Method Details
.localhost_defaults(data) ⇒ Object
86 87 88 89 90 91 92 93 94 95 96 97 98 |
# File 'lib/bolt/inventory/inventory.rb', line 86 def self.localhost_defaults(data) defaults = { 'config' => { 'transport' => 'local', 'local' => { 'interpreters' => { '.rb' => RbConfig.ruby } } }, 'features' => ['puppet-agent'] } data = Bolt::Util.deep_merge(defaults, data) # If features is an empty array deep_merge won't add the puppet-agent data['features'] += ['puppet-agent'] if data['features'].empty? data end |
Instance Method Details
#add_facts(target, new_facts = {}) ⇒ Object
271 272 273 274 |
# File 'lib/bolt/inventory/inventory.rb', line 271 def add_facts(target, new_facts = {}) @targets[target.name].add_facts(new_facts) target end |
#add_to_group(targets, desired_group) ⇒ Object
249 250 251 252 253 254 255 256 257 258 259 260 261 |
# File 'lib/bolt/inventory/inventory.rb', line 249 def add_to_group(targets, desired_group) if group_names.include?(desired_group) targets.each do |target| if group_names.include?(target.name) raise ValidationError.new("Group #{target.name} conflicts with target of the same name", target.name) end # Add the inventory copy of the target add_target(@groups, @targets[target.name], desired_group) end else raise ValidationError.new("Group #{desired_group} does not exist in inventory", nil) end end |
#clear_alia_from_group(group, target_name) ⇒ Object
224 225 226 227 228 229 230 231 |
# File 'lib/bolt/inventory/inventory.rb', line 224 def clear_alia_from_group(group, target_name) if group.all_target_names.include?(target_name) group.clear_alia(target_name) end group.groups.each do |grp| clear_alia_from_group(grp, target_name) end end |
#collect_groups ⇒ Object
42 43 44 45 |
# File 'lib/bolt/inventory/inventory.rb', line 42 def collect_groups # Provide a lookup map for finding a group by name @group_lookup = @groups.collect_groups end |
#create_target_from_hash(data) ⇒ Object
Add a brand new target, overriding any existing target with the same name. This method does not honor target config from the inventory. This is used when Target.new is called from a plan or with a data hash.
199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 |
# File 'lib/bolt/inventory/inventory.rb', line 199 def create_target_from_hash(data) # If target already exists, delete old and replace with new, otherwise add to new to all group new_target = Bolt::Inventory::Target.new(data, self) existing_target = @targets.key?(new_target.name) @targets[new_target.name] = new_target if existing_target clear_alia_from_group(@groups, new_target.name) else add_to_group([new_target], 'all') end if (aliases = new_target.target_alias) aliases = [aliases] if aliases.is_a?(String) unless aliases.is_a?(Array) msg = "Alias entry on #{t_name} must be a String or Array, not #{aliases.class}" raise ValidationError.new(msg, @name) end @groups.insert_alia(new_target.name, aliases) end new_target end |
#create_target_from_inventory(target_name) ⇒ Object
Pull in a target definition from the inventory file and evaluate any associated references. This is used when a target is resolved by get_targets.
185 186 187 188 189 190 191 192 193 194 |
# File 'lib/bolt/inventory/inventory.rb', line 185 def create_target_from_inventory(target_name) target_data = @groups.target_collect(target_name) || { 'uri' => target_name } target = Bolt::Inventory::Target.new(target_data, self) @targets[target.name] = target add_to_group([target], 'all') target end |
#data_hash ⇒ Object
74 75 76 77 78 79 80 81 82 83 84 |
# File 'lib/bolt/inventory/inventory.rb', line 74 def data_hash { data: {}, target_hash: { target_vars: {}, target_facts: {}, target_features: {} }, config: @config.transport_data_get } end |
#facts(target) ⇒ Object
276 277 278 |
# File 'lib/bolt/inventory/inventory.rb', line 276 def facts(target) @targets[target.name].facts end |
#features(target) ⇒ Object
284 285 286 |
# File 'lib/bolt/inventory/inventory.rb', line 284 def features(target) @targets[target.name].features end |
#get_target(target) ⇒ Object
66 67 68 69 70 71 72 |
# File 'lib/bolt/inventory/inventory.rb', line 66 def get_target(target) target_array = get_targets(target) if target_array.count > 1 raise ValidationError.new("'#{target}' refers to #{target_array.count} targets", nil) end target_array.first end |
#get_targets(targets) ⇒ Object
57 58 59 60 61 62 63 64 |
# File 'lib/bolt/inventory/inventory.rb', line 57 def get_targets(targets) target_array = (targets) if target_array.is_a? Array target_array.flatten.uniq(&:name) else [target_array] end end |
#group_data_for(target_name) ⇒ Object
PRIVATE ####
101 102 103 |
# File 'lib/bolt/inventory/inventory.rb', line 101 def group_data_for(target_name) @groups.group_collect(target_name) end |
#group_names ⇒ Object
47 48 49 |
# File 'lib/bolt/inventory/inventory.rb', line 47 def group_names @group_lookup.keys end |
#plugin_hooks(target) ⇒ Object
288 289 290 |
# File 'lib/bolt/inventory/inventory.rb', line 288 def plugin_hooks(target) @targets[target.name].plugin_hooks end |
#remove_from_group(target, desired_group) ⇒ Object
233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 |
# File 'lib/bolt/inventory/inventory.rb', line 233 def remove_from_group(target, desired_group) unless target.length == 1 raise ValidationError.new("'remove_from_group' expects a single Target, got #{target.length}", nil) end if desired_group == 'all' raise ValidationError.new("Cannot remove Target from Group 'all'", nil) end if group_names.include?(desired_group) remove_target(@groups, @targets[target.first.name], desired_group) else raise ValidationError.new("Group #{desired_group} does not exist in inventory", nil) end end |
#set_config(target, key_or_key_path, value) ⇒ Object
292 293 294 |
# File 'lib/bolt/inventory/inventory.rb', line 292 def set_config(target, key_or_key_path, value) @targets[target.name].set_config(key_or_key_path, value) end |
#set_feature(target, feature, value = true) ⇒ Object
280 281 282 |
# File 'lib/bolt/inventory/inventory.rb', line 280 def set_feature(target, feature, value = true) @targets[target.name].set_feature(feature, value) end |
#set_var(target, var_hash) ⇒ Object
263 264 265 |
# File 'lib/bolt/inventory/inventory.rb', line 263 def set_var(target, var_hash) @targets[target.name].set_var(var_hash) end |
#target_config(target) ⇒ Object
296 297 298 |
# File 'lib/bolt/inventory/inventory.rb', line 296 def target_config(target) @targets[target.name].config end |
#target_implementation_class ⇒ Object
38 39 40 |
# File 'lib/bolt/inventory/inventory.rb', line 38 def target_implementation_class Bolt::Target end |
#target_names ⇒ Object Also known as: node_names
51 52 53 |
# File 'lib/bolt/inventory/inventory.rb', line 51 def target_names @groups.all_targets end |
#validate ⇒ Object
30 31 32 |
# File 'lib/bolt/inventory/inventory.rb', line 30 def validate @groups.validate end |
#vars(target) ⇒ Object
267 268 269 |
# File 'lib/bolt/inventory/inventory.rb', line 267 def vars(target) @targets[target.name].vars end |
#version ⇒ Object
34 35 36 |
# File 'lib/bolt/inventory/inventory.rb', line 34 def version 2 end |