lib/rundock/builder/operation_builder.rb in rundock-0.5.0 vs lib/rundock/builder/operation_builder.rb in rundock-0.5.2

- old
+ new

@@ -4,57 +4,59 @@ def build_first(scenario, targets, tasks, hooks) if @options[:targetgroup] && !@options[:command] raise CommandArgNotFoundError, %("--command or -c" option is required if targetgroup specified.) end - node = nil - node_attribute = nil + parsing_node_attribute = nil scen = Scenario.new scen.tasks = tasks - # use scenario file - scenario.each do |n| - scen.nodes.push(node) if node + scenario.each do |sn| + nodes = [] + operations = [] + hook_contents = [] - n.deep_symbolize_keys.each do |sk, sv| + sn.deep_symbolize_keys.each do |sk, sv| if sk == :target target_builder = TargetBuilder.new(@options) target = target_builder.build(sv, targets) if target.is_a?(Node) - if node_attribute.nil? - node_attribute = Rundock::Attribute::NodeAttribute.new(task_info: {}) - else - node_attribute.next + nodes = Array(target) + parsing_node_attribute = build_node_attribute(scen, sv, parsing_node_attribute, tasks, target_builder.parsed_node_options[sv.to_sym]) + operations = Array(build_cli_command_operation(@options[:command], parsing_node_attribute, @options)) if @options[:command] + end + elsif sk == :target_group + target_builder = TargetBuilder.new(@options) + nodes = target_builder.build_group(sv, targets) + nodes.each do |n| + if n.is_a?(Node) + parsing_node_attribute = build_node_attribute(scen, n.name, parsing_node_attribute, tasks, target_builder.parsed_node_options[n.name.to_sym]) + operations = Array(build_cli_command_operation(@options[:command], parsing_node_attribute, @options)) if @options[:command] end - - node_attribute.nodename = sv - node = target - tasks.each { |k, v| node_attribute.task_info[k] = v } if tasks - scen.node_info[sv.to_sym] = node_attribute.nodeinfo = target_builder.parsed_options end - - if @options[:command] - node.add_operation(build_cli_command_operation(@options[:command], node_attribute, @options)) - end elsif sk == :hook hooks_builder = HookBuilder.new(@options) - if node - node.hooks = hooks_builder.build(Array(sv), hooks) - node_attribute.hooks = hooks_builder.enable_hooks - end + hook_contents = hooks_builder.build(Array(sv), hooks) + parsing_node_attribute.hooks = hooks_builder.enable_hooks else + ope = build_operations(sk, Array(sv), parsing_node_attribute, @options, false) + operations << ope if ope + end + end - next unless node - - ope = build_operations(sk, Array(sv), node_attribute, @options, false) - node.add_operation(ope) if ope + nodes.each do |n| + operations.each do |o| + n.add_operation(o) end + + n.hooks = hook_contents end + + scen.nodes.concat(nodes) end - scen.nodes.push(node) if node scen end def build_task(tasks, backend, node_attribute) node = Node.new(node_attribute.nodename, backend) @@ -84,11 +86,25 @@ scen end private + def build_node_attribute(scenario, nodename, node_attribute, tasks, parsed_options) + if node_attribute.nil? + node_attribute = Rundock::Attribute::NodeAttribute.new(task_info: {}) + else + node_attribute.init_except_take_over_state + end + + node_attribute.nodename = nodename + tasks.each { |k, v| node_attribute.task_info[k] = v } if tasks + scenario.node_info[nodename.to_sym] = node_attribute.nodeinfo = parsed_options + + node_attribute + end + def build_cli_command_operation(command, node_attributes, cli_options) - node_attributes.nodename = @options[:host] + node_attributes.nodename = @options[:host] unless node_attributes.nodename node_attributes.errexit = !cli_options[:run_anyway] node_attributes.dry_run = cli_options[:dry_run] ? true : false Rundock::OperationFactory.instance(:command).create(Array(command), node_attributes.list) end