Sha256: 19c7b4ee56c81efbf29ba1f0230a54ec4ea742cf241dbb15b6c555c628c90705

Contents?: true

Size: 1.74 KB

Versions: 11

Compression:

Stored size: 1.74 KB

Contents

require 'yaml'

module Rundock
  module Builder
    class ScenarioBuilder < Base
      CommandArgNotFoundError = Class.new(StandardError)

      def initialize(options, scenario_file_data)
        super(options)
        @scenario_file = scenario_file_data
        @default_ssh_builder = DefaultSshBuilder.new(@options)
      end

      def build
        # parse default ssh file
        @options.merge!(@default_ssh_builder.build)

        # use host specified
        return build_scenario_with_cli if @options[:host]

        # use scenario file
        build_scenario_with_file
      end

      def build_task(tasks, backend, target_attributes)
        OperationBuilder.new(@options).build_task(tasks, backend, target_attributes)
      end

      private

      def build_scenario_with_cli
        raise CommandArgNotFoundError, %("--command or -c" option is not specified.) unless @options[:command]
        ope = OperationBuilder.new(@options)
        ope.build_cli
      end

      def build_scenario_with_file
        if @scenario_file

          type = %i[main target_info tasks hooks]
          scenario_data = {}

          YAML.load_documents(@scenario_file).each_with_index do |data, idx|
            if idx == 0
              scenario_data[type[idx]] = data
            else
              scenario_data[type[idx]] = data.deep_symbolize_keys unless data.nil?
            end
          end
        end

        ope = OperationBuilder.new(@options)
        ope.build_first(
          scenario_data[:main],
          @options[:command] ? scenario_data[:target_info] : TargetGroupBuilder.new(@options).build(scenario_data[:target_info]),
          TaskBuilder.new(@options).build(scenario_data[:tasks]),
          scenario_data[:hooks]
        )
      end
    end
  end
end

Version data entries

11 entries across 11 versions & 1 rubygems

Version Path
rundock-1.2.0 lib/rundock/builder/scenario_builder.rb
rundock-1.1.7 lib/rundock/builder/scenario_builder.rb
rundock-1.1.6 lib/rundock/builder/scenario_builder.rb
rundock-1.1.5 lib/rundock/builder/scenario_builder.rb
rundock-1.1.4 lib/rundock/builder/scenario_builder.rb
rundock-1.1.3 lib/rundock/builder/scenario_builder.rb
rundock-1.1.2 lib/rundock/builder/scenario_builder.rb
rundock-1.1.1 lib/rundock/builder/scenario_builder.rb
rundock-1.1.0 lib/rundock/builder/scenario_builder.rb
rundock-1.0.8 lib/rundock/builder/scenario_builder.rb
rundock-1.0.7 lib/rundock/builder/scenario_builder.rb