Class: Bcome::Node::Resources::Merged

Inherits:
Inventory show all
Defined in:
lib/objects/node/resources/merged.rb

Instance Attribute Summary

Attributes inherited from Base

#nodes

Instance Method Summary collapse

Methods inherited from Inventory

#<<, #duplicate_nodes, #dynamic_nodes, #override_server_identifier, #rename_initial_duplicate, #reset_duplicate_nodes!, #set_overrides, #should_rename_initial_duplicate?, #unset!

Methods inherited from Base

#<<, #active, #clear!, #disable, #disable!, #do_disable, #do_enable, #each, #empty?, #enable, #enable!, #first, #for_identifier, #has_active_nodes?, #is_active_resource?, #should_rename_initial_duplicate?, #size

Constructor Details

#initialize(config) ⇒ Merged

Returns a new instance of Merged.



5
6
7
8
9
10
# File 'lib/objects/node/resources/merged.rb', line 5

def initialize(config)
  super
  @inventory = config[:inventory]
  @nodes = []
  run_select
end

Instance Method Details

#dup_nodes(contributing_nodes) ⇒ Object



25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/objects/node/resources/merged.rb', line 25

def dup_nodes(contributing_nodes)
  contributing_nodes.each do |original_node|
    # Duplicate the node, setting its origin inventory to this one, and
    # resetting its ssh_driver to the original node's driver.
    new_node = original_node.dup_with_new_parent(@inventory)
    set_overrides(@inventory, new_node)
    new_node.ssh_driver = original_node.ssh_driver

    # Rename the node as contributing inventories may provide duplicate node names
    rename_node_for_merged_inventory(original_node, new_node)

    # Register the new node with the registry
    ::Bcome::Registry::Loader.instance.set_command_group_for_node(new_node)

    @nodes << new_node
  end
end

#rename_node_for_merged_inventory(original_node, new_node) ⇒ Object



43
44
45
# File 'lib/objects/node/resources/merged.rb', line 43

def rename_node_for_merged_inventory(original_node, new_node)
  new_node.identifier = original_node.namespace.gsub(':', '_')
end

#run_selectObject



12
13
14
15
16
17
18
19
20
21
22
23
# File 'lib/objects/node/resources/merged.rb', line 12

def run_select
  @inventory.contributing_inventories.each do |inventory|
    raise ::Bcome::Exception::Generic, "#{inventory.namespace} is not an inventory, and cannot be merged." unless inventory.is_a?(::Bcome::Node::Inventory::Base)

    inventory.load_nodes unless inventory.nodes_loaded?
  end

  contributing_nodes = @inventory.contributing_inventories.collect { |inv| inv.resources.nodes }.flatten
  dup_nodes(contributing_nodes)

  @nodes
end