class Topo::Provision::TopologyGenerator

Public Class Methods

new() click to toggle source
# File lib/topo/provision/topology_generator.rb, line 29
def initialize
  @dep = {}
end

Public Instance Methods

add(resource, depends_on=[], generators={}) click to toggle source

resource - the resource hash depends_on - an array of resource names generators - a hash of lambdas that are generator code to run for that resource

keys are: :deploy :undeploy
will be called as block.call resource
# File lib/topo/provision/topology_generator.rb, line 38
def add(resource, depends_on=[], generators={})
 @dep[resource['name']] = [ resource, depends_on, generators ]
end
generate(action=:deploy) click to toggle source
# File lib/topo/provision/topology_generator.rb, line 51
def generate(action=:deploy)
  each_strongly_connected_component { |nodes|
    STDERR.puts "WARN: Topology contains a cyclic dependency: #{nodes.inspect}" if nodes.length > 1
    nodes.each { |node|
      resource, depends_on, gen_data = @dep.fetch node
      resource_generator = gen_data[:resource_generator]
      if resource_generator && resource_generator.respond_to?(action)
        resource_generator.send(action) 
      else
        resource_generator.send("default_action", action) 
     end
    }
  }
end
reverse_generate(action=:undeploy) click to toggle source
# File lib/topo/provision/topology_generator.rb, line 66
def reverse_generate(action=:undeploy)
  strongly_connected_components.reverse_each { |nodes|
    STDERR.puts "WARN: Topology contains a cyclic dependency: #{nodes.inspect}" if nodes.length > 1
    nodes.each { |node|
      resource, depends_on, gen_data = @dep.fetch node
      resource_generator = gen_data[:resource_generator]
      if resource_generator && resource_generator.respond_to?(action)
        resource_generator.send(action) 
      else
        resource_generator.send("default_action", action) 
     end
    }
  }
end
tsort_each_child(node, &block) click to toggle source
# File lib/topo/provision/topology_generator.rb, line 46
def tsort_each_child(node, &block)
  resource, depends_on, gen = @dep.fetch node
  depends_on.each(&block)
end
tsort_each_node(&block) click to toggle source
# File lib/topo/provision/topology_generator.rb, line 42
def tsort_each_node(&block)
  @dep.each_key(&block)
end