module MotherBrain::Provisioner
Attributes
Public Class Methods
List of all the registered provisioners
@return [Set<MB::Provisioner::Base>]
# File lib/mb/provisioner.rb, line 39 def all @all ||= Set.new end
Clears all of the registered Provisioners.
@return [Set]
an empty Set
# File lib/mb/provisioner.rb, line 81 def clear! @default_id = nil @all = Set.new end
Return the default provisioner if one has been registered as the default
@return [Class, nil]
# File lib/mb/provisioner.rb, line 72 def default _default_id = ENV['MB_DEFAULT_PROVISIONER'] || self.default_id get!(_default_id) if _default_id end
Get registered provisioner class from the given ID. Return nil if no provisioner with the corresponding ID is found
@param [#to_sym] id
@return [Class, nil]
# File lib/mb/provisioner.rb, line 49 def get(id) all.find { |klass| klass.provisioner_id == id.to_sym } end
Get registered provisioner class fromt he given ID. Raise an error if no provisioner with the corresponding ID is found
@raise [ProvisionerNotRegistered] if no provisioner with the corresponding ID is found
@return [Class]
# File lib/mb/provisioner.rb, line 59 def get!(id) provisioner = get(id) if provisioner.nil? raise ProvisionerNotRegistered, "No provisioner registered with the ID: '#{id}'" end provisioner end
@param [Class] klass @option options [Boolean] :default
@raise [ProvisionerRegistrationError] if a provisioner is registered as the default provisioner when
a default provisioner already exists
@return [Set]
# File lib/mb/provisioner.rb, line 17 def register(klass, options = {}) validate_provisioner_class(klass) unless get(klass.provisioner_id).nil? raise ProvisionerRegistrationError, "A provisioner with the id '#{klass.provisioner_id}' has already been registered" end if options[:default] unless @default_id.nil? raise ProvisionerRegistrationError, "A default provisioner has already been defined (#{default_id})" end @default_id = klass.provisioner_id end all.add(klass) end
@param [Symbol] klass
@raise [InvalidProvisionerClass] if the class does not respond to provisioner_id
@return [Boolean]
# File lib/mb/provisioner.rb, line 91 def validate_provisioner_class(klass) unless klass.respond_to?(:provisioner_id) raise InvalidProvisionerClass, "Cannot register provisioner: all provisioners must respond to ':provisioner_id'" end if klass.provisioner_id.nil? raise InvalidProvisionerClass, "Cannot register provisioner: invalid provisioner_id '#{klass.provisioner_id}'" end true end