module MotherBrain::Provisioner

Attributes

default_id[R]

Public Class Methods

all() click to toggle source

List of all the registered provisioners

@return [Set<MB::Provisioner::Base>]

# File lib/mb/provisioner.rb, line 39
def all
  @all ||= Set.new
end
clear!() click to toggle source

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
default() click to toggle source

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(id) click to toggle source

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!(id) click to toggle source

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
register(klass, options = {}) click to toggle source

@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
validate_provisioner_class(klass) click to toggle source

@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