Class: MotherBrain::Provisioner::ProvisionData

Inherits:
Object
  • Object
show all
Includes:
MB::Mixin::Services
Defined in:
lib/mb/provisioner/provision_data.rb

Overview

Handles persisting provision data to a Chef server, for use later by other provisioner actions on that environment.

Constant Summary collapse

DATA_BAG =
'_motherbrain_provision_data_'

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(environment_name) ⇒ ProvisionData

Returns a new instance of ProvisionData.

Parameters:

  • environment_name (Symbol)


13
14
15
# File 'lib/mb/provisioner/provision_data.rb', line 13

def initialize(environment_name)
  @environment_name = environment_name
end

Instance Attribute Details

#environment_nameObject (readonly)

Returns the value of attribute environment_name.



10
11
12
# File 'lib/mb/provisioner/provision_data.rb', line 10

def environment_name
  @environment_name
end

Instance Method Details

#add_instances_to_provisioner(provisioner_name, instance_array) ⇒ Object

Adds instances to the provision data idempotently

Parameters:

  • provisioner_name (Symbol)
  • instance_array (Array(Hash))


48
49
50
51
52
53
54
# File 'lib/mb/provisioner/provision_data.rb', line 48

def add_instances_to_provisioner(provisioner_name, instance_array)
  instance_array.each do |instance|
    unless instances_for_provisioner(provisioner_name).include?(instance)
      instances_for_provisioner(provisioner_name).push instance
    end
  end
end

#destroyObject

Removes the data from the Chef server



73
74
75
# File 'lib/mb/provisioner/provision_data.rb', line 73

def destroy
  data_bag.item.delete environment_name
end

#instancesHash

Returns a hash of stored instance data

Returns:

  • (Hash)


20
21
22
23
24
# File 'lib/mb/provisioner/provision_data.rb', line 20

def instances
  attributes[:instances] ||= {}

  attributes[:instances]
end

#instances_for_provisioner(provisioner_name) ⇒ Array(Hash)

Returns an array of instance hashes for a provisioner

Parameters:

  • provisioner_name (Symbol)

Returns:

  • (Array(Hash))


38
39
40
41
42
# File 'lib/mb/provisioner/provision_data.rb', line 38

def instances_for_provisioner(provisioner_name)
  instances[provisioner_name] ||= []

  instances[provisioner_name]
end

#provisionersArray(Symbol)

Returns an array of provisioner names for this environment

Returns:

  • (Array(Symbol))


29
30
31
# File 'lib/mb/provisioner/provision_data.rb', line 29

def provisioners
  instances.keys
end

#remove_instance_from_provisioner(provisioner_name, key, value) ⇒ Object

Removes an instance from the provisioner by matching a key/value pair

Parameters:

  • provisioner_name (Symbol)
  • key (Symbol)
  • value (Object)


61
62
63
64
65
# File 'lib/mb/provisioner/provision_data.rb', line 61

def remove_instance_from_provisioner(provisioner_name, key, value)
  instances_for_provisioner(provisioner_name).delete_if do |instance|
    instance[key] == value
  end
end

#saveObject

Persists the data to the Chef server



68
69
70
# File 'lib/mb/provisioner/provision_data.rb', line 68

def save
  data_bag_item.save
end