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