Class: Bolt::Inventory
- Inherits:
-
Object
- Object
- Bolt::Inventory
- Includes:
- Options
- Defined in:
- lib/bolt/inventory.rb,
lib/bolt/inventory/group.rb,
lib/bolt/inventory/target.rb,
lib/bolt/inventory/options.rb,
lib/bolt/inventory/inventory.rb
Defined Under Namespace
Modules: Options Classes: Group, Inventory, Target, ValidationError, WildcardError
Constant Summary collapse
- ENVIRONMENT_VAR =
'BOLT_INVENTORY'
Constants included from Options
Options::DEFINITIONS, Options::OPTIONS
Class Method Summary collapse
- .create_version(data, transport, transports, plugins) ⇒ Object
- .empty ⇒ Object
- .from_config(config, plugins) ⇒ Object
-
.schema ⇒ Object
Builds the schema used by the validator.
Class Method Details
.create_version(data, transport, transports, plugins) ⇒ Object
108 109 110 111 112 113 114 115 116 117 |
# File 'lib/bolt/inventory.rb', line 108 def self.create_version(data, transport, transports, plugins) version = (data || {}).delete('version') { 2 } case version when 2 Bolt::Inventory::Inventory.new(data, transport, transports, plugins) else raise ValidationError.new("Unsupported version #{version} specified in inventory", nil) end end |
.empty ⇒ Object
119 120 121 122 123 124 |
# File 'lib/bolt/inventory.rb', line 119 def self.empty config = Bolt::Config.default plugins = Bolt::Plugin.setup(config, nil) create_version({}, config.transport, config.transports, plugins) end |
.from_config(config, plugins) ⇒ Object
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 95 96 97 98 99 100 101 102 103 104 105 106 |
# File 'lib/bolt/inventory.rb', line 66 def self.from_config(config, plugins) logger = Bolt::Logger.logger(self) if ENV.include?(ENVIRONMENT_VAR) begin source = ENVIRONMENT_VAR data = YAML.safe_load(ENV[ENVIRONMENT_VAR]) raise Bolt::ParseError, "Could not parse inventory from $#{ENVIRONMENT_VAR}" unless data.is_a?(Hash) logger.debug("Loaded inventory from environment variable #{ENVIRONMENT_VAR}") rescue Psych::Exception raise Bolt::ParseError, "Could not parse inventory from $#{ENVIRONMENT_VAR}" end elsif config.inventoryfile source = config.inventoryfile data = Bolt::Util.read_yaml_hash(config.inventoryfile, 'inventory') logger.debug("Loaded inventory from #{config.inventoryfile}") else source = config.default_inventoryfile data = Bolt::Util.read_optional_yaml_hash(config.default_inventoryfile, 'inventory') if config.default_inventoryfile.exist? logger.debug("Loaded inventory from #{config.default_inventoryfile}") else logger.debug("Tried to load inventory from #{config.default_inventoryfile}, but the file does not exist") end end # Resolve plugin references from transport config config.transports.each_value do |t| t.resolve(plugins) unless t.resolved? end Bolt::Validator.new.tap do |validator| validator.validate(data, schema, source) validator.warnings.each { |warning| Bolt::Logger.warn(warning[:id], warning[:msg]) } end inventory = create_version(data, config.transport, config.transports, plugins) inventory.validate inventory end |
.schema ⇒ Object
Builds the schema used by the validator.
54 55 56 57 58 59 60 61 62 63 64 |
# File 'lib/bolt/inventory.rb', line 54 def self.schema schema = { type: Hash, properties: OPTIONS.map { |opt| [opt, _ref: opt] }.to_h, definitions: DEFINITIONS, _plugin: true } schema[:definitions]['config'][:properties] = Bolt::Config.transport_definitions schema end |