rundock 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 9bae0415498290a96be0d1867e1b8390995a818c
4
- data.tar.gz: 72ecb870b1108accdd2c9ea8c38dd5291843379c
3
+ metadata.gz: 0491b048401872650ce67684e7e23556866b43e3
4
+ data.tar.gz: 6bd121b04391da55428ba012f7ed550427a7d0cd
5
5
  SHA512:
6
- metadata.gz: cf8bde9f38284afd6b37c109dd58cdf22258d7bd2bc178ae4c4dae7e1ccb13329453228e85f1068548ce30a5a2440bb38cffd051b9f6edfefad78cfee1f45bbc
7
- data.tar.gz: ae60ee17c14eff7a50b2bd0f0557d4e484c4f9d1d67c6076b8d78f6f7471945359fd3d4ca3f551e805fac9b4b1829dda9055c3fae6a3112e836d4df3b0b03aac
6
+ metadata.gz: b218e32fb3145065062a7d8c7d869e948898361c38a0b63af2c692d6987d2373a20d8fd04187c3f58700b87f6d4cd63411a2292e41311c429570f9bdbb953308
7
+ data.tar.gz: 1e327e599076b186c71d67e260b2195d3f19c1b5103b01d5940ad90641b29db8974e726b507895d6eebc0a9dcba0723c919ed4313471fc024d8ff182cd39f35d
data/CHANGELOG.md CHANGED
@@ -1,3 +1,15 @@
1
+ ## v0.2.0
2
+
3
+ Refactoring
4
+
5
+ - Refactoring Rundoc::Runner for build scnenario and options
6
+ - Refactoring parse options and yaml files
7
+
8
+ Improvements
9
+
10
+ - Implement multi host execute for rundock ssh
11
+ - Enable hostgroup file executing for rundock-ssh
12
+
1
13
  ## v0.1.0
2
14
 
3
15
  - The first public version.
data/Rakefile CHANGED
@@ -11,37 +11,54 @@ run_scenarios = %w(
11
11
  simple_echo_scenario
12
12
  )
13
13
 
14
- def execute(command)
14
+ run_groups = %w(
15
+ simple_host_group
16
+ )
17
+
18
+ def execute(command, clean_env)
15
19
  puts "[EXECUTE:] #{command}"
16
- system command
20
+
21
+ if clean_env
22
+ Bundler.with_clean_env do
23
+ system command
24
+ end
25
+ else
26
+ system command
27
+ end
28
+ raise 'Execute Error.' unless $?.to_i == 0
17
29
  end
18
30
 
19
31
  def setup_docker(platform, timeout, interval)
20
- Bundler.with_clean_env do
21
- execute "./spec/integration/platforms/#{platform}/setup.sh &"
22
- found = false
23
- (timeout / interval).times do
24
- execute 'sudo docker ps | grep rundock'
25
- if $?.to_i == 0
26
- found = true
27
- break
28
- end
29
- sleep interval
32
+ execute("./spec/integration/platforms/#{platform}/setup.sh &", false)
33
+ found = false
34
+ (timeout / interval).times do
35
+ system 'sudo docker ps | grep rundock'
36
+ if $?.to_i == 0
37
+ found = true
38
+ break
30
39
  end
31
- raise 'Docker Error.' unless found
40
+ sleep interval
32
41
  end
42
+ raise 'Docker Error.' unless found
33
43
  end
34
44
 
35
- def do_rundock_ssh(commands, platform)
45
+ def do_rundock_ssh(commands, platform, groups)
46
+ base_dir = "#{ENV['HOME']}/.rundock/#{platform}"
47
+
36
48
  if platform == 'localhost'
37
49
  commands.each do |cmd|
38
- execute "bundle exec exe/rundock ssh -c \"#{cmd}\" -h localhost -l debug"
50
+ execute("bundle exec exe/rundock ssh -c \"#{cmd}\" -h localhost -l debug", true)
39
51
  end
40
52
  else
41
53
  commands.each do |cmd|
42
- execute 'bundle exec exe/rundock' \
54
+ execute('bundle exec exe/rundock' \
43
55
  " ssh -c \"#{cmd}\" -h 127.0.0.1 -p 22222 -u tester" \
44
- " -i #{ENV['HOME']}/.ssh/id_rsa_rundock_spec_#{platform}_tmp -l debug"
56
+ " -i #{ENV['HOME']}/.ssh/id_rsa_rundock_spec_#{platform}_tmp -l debug", true)
57
+ groups.each do |g|
58
+ execute('bundle exec exe/rundock' \
59
+ " ssh -c \"#{cmd}\" -g #{base_dir}/scenarios/#{g}.yml -p 22222 -u tester" \
60
+ " -i #{ENV['HOME']}/.ssh/id_rsa_rundock_spec_#{platform}_tmp -l debug", true)
61
+ end
45
62
  end
46
63
  end
47
64
  end
@@ -59,26 +76,23 @@ def do_rundock_scenarios(scenarios, platform)
59
76
  default_ssh_opt = " -d #{base_dir}/integration_default_ssh.yml"
60
77
  end
61
78
 
62
- execute 'bundle exec exe/rundock' \
63
- " do -s #{base_dir}/scenarios/#{scenario}.yml#{default_ssh_opt} -l debug"
79
+ execute('bundle exec exe/rundock' \
80
+ " do -s #{base_dir}/scenarios/#{scenario}.yml#{default_ssh_opt} -l debug", true)
64
81
  end
65
82
  end
66
83
 
67
84
  desc 'Cleaning environments'
68
85
 
69
86
  task :clean do
70
- Bundler.with_clean_env do
71
- Dir.glob('./spec/integration/platforms/*').each do |platform|
72
- execute "#{platform}/setup.sh --clean"
73
- end
87
+ Dir.glob('./spec/integration/platforms/*').each do |platform|
88
+ next if platform =~ /localhost$/
89
+ execute("#{platform}/setup.sh --clean", false)
74
90
  end
75
91
  end
76
92
 
77
93
  desc 'execute rubocop'
78
94
  task :rubocop do
79
- Bundler.with_clean_env do
80
- execute 'rubocop'
81
- end
95
+ execute('rubocop', false)
82
96
  end
83
97
 
84
98
  desc 'Run all tests.'
@@ -118,10 +132,8 @@ namespace :spec do
118
132
  desc "Run rundock for #{target}"
119
133
 
120
134
  task :rundock do
121
- Bundler.with_clean_env do
122
- do_rundock_ssh(run_commands, target)
123
- do_rundock_scenarios(run_scenarios, target)
124
- end
135
+ do_rundock_ssh(run_commands, target, run_groups)
136
+ do_rundock_scenarios(run_scenarios, target)
125
137
  end
126
138
 
127
139
  desc "Run serverspec tests for #{target}"
data/lib/rundock.rb CHANGED
@@ -9,6 +9,10 @@ require 'rundock/operation_factory'
9
9
  require 'rundock/node'
10
10
  require 'rundock/scenario'
11
11
  require 'rundock/backend'
12
+ require 'rundock/builder/base'
13
+ require 'rundock/builder/default_ssh_builder'
14
+ require 'rundock/builder/backend_builder'
15
+ require 'rundock/builder/scenario_builder'
12
16
  require 'rundock/runner'
13
17
  require 'rundock/cli'
14
18
 
@@ -0,0 +1,71 @@
1
+ module Rundock
2
+ module Builder
3
+ class BackendBuilder < Base
4
+ def initialize(options, nodename, node_info)
5
+ super(options)
6
+ @nodename = nodename
7
+ @node_info = node_info
8
+ end
9
+
10
+ def build
11
+ opts = build_options
12
+
13
+ backend_type = parse_backend_type
14
+
15
+ opts.merge!(@options)
16
+
17
+ # update ssh options for node from node_info
18
+ opts.merge!(@node_info[@nodename]['ssh_opts'])
19
+ # delete trash ssh_options(node[host::ssh_options])
20
+ @node_info[@nodename].delete('ssh_opts')
21
+
22
+ # add any attributes for host from node_info
23
+ opts.merge!(@node_info[@nodename])
24
+ Backend.create(backend_type, opts)
25
+ end
26
+
27
+ private
28
+
29
+ def build_options
30
+ opts = {}
31
+
32
+ if !@node_info ||
33
+ !@node_info[@nodename]
34
+ @node_info = { @nodename => {} }
35
+ end
36
+ @node_info[@nodename]['ssh_opts'] = {} unless @node_info[@nodename]['ssh_opts']
37
+ is_local = @nodename =~ /localhost|127\.0\.0\.1/
38
+
39
+ # replace default ssh options if exists
40
+ @options.keys.select { |o| o =~ /(\w+)_ssh_default$/ }.each do |oo|
41
+ opt = oo.gsub(/_ssh_default/, '')
42
+ # no use default ssh options if local
43
+ # (like docker or localhost with port access host should not use default ssh options)
44
+ @node_info[@nodename]['ssh_opts'][opt] = @options[oo] if !is_local && !@node_info[@nodename]['ssh_opts'][opt]
45
+ end
46
+
47
+ # replace cli ssh options if exists
48
+ %w(user key port ssh_config ask_password sudo).each { |o| @node_info[@nodename]['ssh_opts'][o] = @options[o] if @options[o] }
49
+
50
+ opts['host'] = @nodename
51
+
52
+ opts
53
+ end
54
+
55
+ def parse_backend_type
56
+ is_local = @nodename =~ /localhost|127\.0\.0\.1/
57
+
58
+ if is_local &&
59
+ !@node_info[@nodename]['ssh_opts']['port'] &&
60
+ !@node_info[@nodename]['ssh_opts']['user'] &&
61
+ !@node_info[@nodename]['ssh_opts']['ssh_config']
62
+ backend_type = :local
63
+ else
64
+ backend_type = :ssh
65
+ end
66
+
67
+ backend_type
68
+ end
69
+ end
70
+ end
71
+ end
@@ -0,0 +1,15 @@
1
+ module Rundock
2
+ module Builder
3
+ class Base
4
+ BuilderNotImplementedError = Class.new(NotImplementedError)
5
+
6
+ def initialize(options)
7
+ @options = options
8
+ end
9
+
10
+ def build
11
+ raise BuilderNotImplementedError
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,33 @@
1
+ require 'yaml'
2
+
3
+ module Rundock
4
+ module Builder
5
+ class DefaultSshBuilder < Base
6
+ PRESET_SSH_OPTIONS_DEFAULT_FILE_PATH = "#{Gem::Specification.find_by_path('rundock').full_gem_path}/default_ssh.yml"
7
+
8
+ def initialize(options)
9
+ super(options)
10
+ end
11
+
12
+ def build
13
+ opts = {}
14
+
15
+ if @options['default_ssh_opts_yaml'] && FileTest.exist?(@options['default_ssh_opts_yaml'])
16
+ def_ssh_file = @options['default_ssh_opts_yaml']
17
+ else
18
+ def_ssh_file = PRESET_SSH_OPTIONS_DEFAULT_FILE_PATH
19
+ end
20
+
21
+ File.open(def_ssh_file) do |f|
22
+ YAML.load_documents(f) do |y|
23
+ y.each do |k, v|
24
+ opts["#{k}_ssh_default"] = v
25
+ end
26
+ end
27
+ end
28
+
29
+ opts
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,95 @@
1
+ require 'yaml'
2
+
3
+ module Rundock
4
+ module Builder
5
+ class ScenarioBuilder < Base
6
+ CommandArgNotFoundError = Class.new(StandardError)
7
+
8
+ def initialize(options, scenario_file_data)
9
+ super(options)
10
+ @scenario_file = scenario_file_data
11
+ @default_ssh_builder = DefaultSshBuilder.new(@options)
12
+ end
13
+
14
+ def build
15
+ # parse default ssh file
16
+ opts = @default_ssh_builder.build
17
+ opts.merge!(@options)
18
+
19
+ # use host specified
20
+ return build_scenario_with_host(opts) if opts['host']
21
+
22
+ # use scenario file
23
+ build_scenario(opts)
24
+ end
25
+
26
+ private
27
+
28
+ def build_scenario_with_host(options)
29
+ raise CommandArgNotFoundError, %("--command or -c" option is not specified.) unless options['command']
30
+
31
+ scen = Scenario.new
32
+
33
+ options['host'].split(',').each do |host|
34
+ backend = BackendBuilder.new(options, host, nil).build
35
+ node = Node.new(host, backend)
36
+ node.add_operation(Rundock::OperationFactory.instance(:command).create(Array(options['command']), nil))
37
+ scen << node
38
+ end
39
+
40
+ scen
41
+ end
42
+
43
+ def build_scenario(options)
44
+ if options['hostgroup_yaml'] && !options['command']
45
+ raise CommandArgNotFoundError, %("--command or -c" option is required if hostgroup specified.)
46
+ end
47
+
48
+ type = [:main, :node_info, :tasks]
49
+ scenario_data = {}
50
+
51
+ if @scenario_file
52
+ YAML.load_documents(@scenario_file).each_with_index do |data, idx|
53
+ scenario_data[type[idx]] = data
54
+ end
55
+ end
56
+
57
+ node = nil
58
+ scen = Scenario.new
59
+
60
+ # use scenario file
61
+ scenario_data[:main].each do |n|
62
+ scen << node if node
63
+
64
+ n.each do |k, v|
65
+ if k == 'node'
66
+ backend = BackendBuilder.new(options, v, scenario_data[:node_info]).build
67
+ node = Node.new(v, backend)
68
+
69
+ if options['command']
70
+ node.add_operation(
71
+ Rundock::OperationFactory.instance(:command).create(Array(options['command']), nil))
72
+ end
73
+ else
74
+
75
+ if options['command'] && (k == 'command' || k == 'task')
76
+ Logger.debug(%("--command or -c" option is specified and ignore scenario file.))
77
+ next
78
+ end
79
+
80
+ ope = build_operations(k, v, scenario_data[:tasks], options)
81
+ node.add_operation(ope) if node
82
+ end
83
+ end
84
+ end
85
+
86
+ scen << node if node
87
+ scen
88
+ end
89
+
90
+ def build_operations(ope_type, ope_content, tasks, options)
91
+ Rundock::OperationFactory.instance(ope_type.to_sym).create(Array(ope_content), tasks)
92
+ end
93
+ end
94
+ end
95
+ end
data/lib/rundock/cli.rb CHANGED
@@ -5,6 +5,7 @@ module Rundock
5
5
  class CLI < Thor
6
6
  DEFAULT_SCENARIO_FILE_PATH = './scenario.yml'
7
7
  DEFAULT_SSH_OPTIONS_DEFAULT_FILE_PATH = './default_ssh.yml'
8
+ DEFAULT_HOSTGROUP_FILE_PATH = './hostgroup.yml'
8
9
 
9
10
  class_option :log_level, type: :string, aliases: ['-l'], default: 'info'
10
11
  class_option :color, type: :boolean, default: true
@@ -33,9 +34,10 @@ module Rundock
33
34
  end
34
35
 
35
36
  desc 'ssh [options]', 'Run rundock ssh with various options'
36
- option :command, type: :string, aliases: ['-c'], banner: "NOTICE: Scenario's task is ignored."
37
+ option :command, type: :string, aliases: ['-c']
37
38
  option :default_ssh_opts_yaml, type: :string, aliases: ['-d'], default: DEFAULT_SSH_OPTIONS_DEFAULT_FILE_PATH
38
- option :host, type: :string, aliases: ['-h']
39
+ option :host, type: :string, aliases: ['-h'], banner: 'You can specify comma separated hosts.[ex: host1,host2,..]'
40
+ option :hostgroup_yaml, type: :string, aliases: ['-g']
39
41
  option :user, type: :string, aliases: ['-u']
40
42
  option :key, type: :string, aliases: ['-i']
41
43
  option :port, type: :numeric, aliases: ['-p']
@@ -44,6 +46,7 @@ module Rundock
44
46
  option :sudo, type: :boolean, default: false
45
47
  def ssh
46
48
  opts = {}
49
+
47
50
  Runner.run(opts.merge(options))
48
51
  end
49
52
  end
@@ -1,13 +1,9 @@
1
1
  require 'rundock'
2
- require 'yaml'
3
- require 'tempfile'
4
2
  require 'open-uri'
5
3
 
6
4
  module Rundock
7
5
  class Runner
8
- PRESET_SSH_OPTIONS_DEFAULT_FILE_PATH = "#{Gem::Specification.find_by_path('rundock').full_gem_path}/default_ssh.yml"
9
6
  ScenarioNotFoundError = Class.new(StandardError)
10
- CommandArgNotFoundError = Class.new(StandardError)
11
7
 
12
8
  class << self
13
9
  def run(options)
@@ -19,7 +15,6 @@ module Rundock
19
15
  end
20
16
  end
21
17
 
22
- attr_reader :backend
23
18
  attr_reader :scenario
24
19
 
25
20
  def initialize(options)
@@ -31,152 +26,30 @@ module Rundock
31
26
  end
32
27
 
33
28
  def build(options)
34
- if options['scenario_yaml']
35
- unless FileTest.exist?(options['scenario_yaml'])
29
+ if options['scenario_yaml'] || options['hostgroup_yaml']
30
+ if options['scenario_yaml'] && !FileTest.exist?(options['scenario_yaml'])
36
31
  raise ScenarioNotFoundError, "'#{options['scenario_yaml']}' scenario file is not found."
32
+ elsif options['hostgroup_yaml'] && !FileTest.exist?(options['hostgroup_yaml'])
33
+ raise ScenarioNotFoundError, "'#{options['hostgroup_yaml']}' hostgroup file is not found."
37
34
  end
38
35
 
36
+ options['scenario_yaml'] = options['hostgroup_yaml'] if options['hostgroup_yaml']
37
+
39
38
  # parse scenario
40
39
  if options['scenario_yaml'] =~ %r{^(http|https)://}
41
40
  # read from http/https
42
41
  open(options['scenario_yaml']) do |f|
43
- @scenario = parse_scenario(f, options)
42
+ @scenario = Rundock::Builder::ScenarioBuilder.new(options, f).build
44
43
  end
45
44
  else
46
45
  File.open(options['scenario_yaml']) do |f|
47
- @scenario = parse_scenario(f, options)
46
+ @scenario = Rundock::Builder::ScenarioBuilder.new(options, f).build
48
47
  end
49
48
  end
50
49
  else
51
- @scenario = parse_scenario(nil, options)
52
- end
53
- end
54
-
55
- private
56
-
57
- def parse_default_ssh(options)
58
- opts = {}
59
-
60
- if options['default_ssh_opts_yaml'] && FileTest.exist?(options['default_ssh_opts_yaml'])
61
- def_ssh_file = options['default_ssh_opts_yaml']
62
- else
63
- def_ssh_file = PRESET_SSH_OPTIONS_DEFAULT_FILE_PATH
50
+ # do rundock ssh
51
+ @scenario = Rundock::Builder::ScenarioBuilder.new(options, nil).build
64
52
  end
65
-
66
- File.open(def_ssh_file) do |f|
67
- YAML.load_documents(f) do |y|
68
- y.each do |k, v|
69
- opts["#{k}_ssh_default"] = v
70
- end
71
- end
72
- end
73
-
74
- opts
75
- end
76
-
77
- def parse_scenario(scen_file, options)
78
- # parse default ssh file
79
- opts = parse_default_ssh(options)
80
- opts.merge!(options)
81
-
82
- scen = Scenario.new
83
-
84
- # no use scenario file
85
- if opts['host']
86
- scen << build_no_scenario_node_operation(opts)
87
- return scen
88
- end
89
-
90
- type = [:main, :node_info, :tasks]
91
- scenario_data = {}
92
-
93
- if scen_file
94
- YAML.load_documents(scen_file).each_with_index do |data, idx|
95
- scenario_data[type[idx]] = data
96
- end
97
- end
98
-
99
- node = nil
100
-
101
- # use scenario file
102
- scenario_data[:main].each do |n|
103
- scen << node if node
104
-
105
- n.each do |k, v|
106
- if k == 'node'
107
- node = Node.new(
108
- v,
109
- build_backend(v, scenario_data[:node_info], opts))
110
- else
111
- ope = build_operations(k, v, scenario_data[:tasks], opts)
112
- node.add_operation(ope) if node
113
- end
114
- end
115
- end
116
-
117
- scen << node if node
118
- scen
119
- end
120
-
121
- def build_no_scenario_node_operation(options)
122
- raise CommandArgNotFoundError, %("--command or -c" option is not specified.) unless options['command']
123
-
124
- node_info = { options['host'] => { 'ssh_opts' => {} } }
125
-
126
- %w(user key port ssh_config ask_password sudo).each { |o| node_info[options['host']]['ssh_opts'][o] = options[o] if options[o] }
127
-
128
- node = Node.new(options['host'], build_backend(options['host'], node_info, options))
129
- node.add_operation(Rundock::OperationFactory.instance(:command).create(Array(options['command']), nil))
130
- node
131
- end
132
-
133
- def build_operations(ope_type, ope_content, tasks, options)
134
- if options['command']
135
- Logger.debug(%("--command or -c" option is specified and ignore scenario file.))
136
- return Rundock::OperationFactory.instance(:command).create(Array(options['command']), nil)
137
- end
138
-
139
- Rundock::OperationFactory.instance(ope_type.to_sym).create(Array(ope_content), tasks)
140
- end
141
-
142
- def build_backend(host, node_info, options)
143
- opts = {}
144
-
145
- if !node_info ||
146
- !node_info[host]
147
- node_info = { host => {} }
148
- end
149
- node_info[host]['ssh_opts'] = {} unless node_info[host]['ssh_opts']
150
- is_local = host =~ /localhost|127\.0\.0\.1/
151
-
152
- # replace default ssh options if exists
153
- options.keys.select { |o| o =~ /(\w+)_ssh_default$/ }.each do |oo|
154
- opt = oo.gsub(/_ssh_default/, '')
155
- # no use default ssh options if local
156
- # (like docker or localhost with port access host should not use default ssh options)
157
- node_info[host]['ssh_opts'][opt] = options[oo] if !is_local && !node_info[host]['ssh_opts'][opt]
158
- end
159
-
160
- if is_local &&
161
- !node_info[host]['ssh_opts']['port'] &&
162
- !node_info[host]['ssh_opts']['user'] &&
163
- !node_info[host]['ssh_opts']['ssh_config']
164
- backend_type = :local
165
- else
166
- backend_type = :ssh
167
- opts['host'] = host
168
- end
169
-
170
- opts.merge!(options)
171
-
172
- # update ssh options for node from node_info
173
- opts.merge!(node_info[host]['ssh_opts'])
174
- # delete trash ssh_options(node[host::ssh_options])
175
- node_info[host].delete('ssh_opts')
176
-
177
- # add any attributes for host from node_info
178
- opts.merge!(node_info[host])
179
- Backend.create(backend_type, opts)
180
53
  end
181
54
  end
182
55
  end
@@ -1,3 +1,3 @@
1
1
  module Rundock
2
- VERSION = '0.1.0'
2
+ VERSION = '0.2.0'
3
3
  end
@@ -48,7 +48,7 @@ fi
48
48
 
49
49
  cp ${RUNDOCK_SCENARIO_DIR}/* ${RUNDOCK_SCENARIO_CACHE_DIR}
50
50
 
51
- find ${RUNDOCK_SCENARIO_CACHE_DIR} -type f -name "*_scenario.yml" | \
51
+ find ${RUNDOCK_SCENARIO_CACHE_DIR} -type f -name "*_scenario.yml" -or -name "*_group.yml" | \
52
52
  xargs sed -i -e "s#<replaced_by_platforms>#${DOCKER_SSH_KEY_PRIVATE}#g"
53
53
 
54
54
  sudo docker ps | grep "${DOCKER_IMAGE_NAME}" && { echo "docker image is already standing."; exit 0; }
@@ -0,0 +1,11 @@
1
+ - node: localhost
2
+ command:
3
+ - "echo 'Should this message does not appear';cat /notexist"
4
+ - node: anyhost-01
5
+ ---
6
+ anyhost-01:
7
+ host: 127.0.0.1
8
+ ssh_opts:
9
+ port: 22222
10
+ user: tester
11
+ key: "<replaced_by_platforms>"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rundock
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - hiracy
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2015-07-09 00:00:00.000000000 Z
11
+ date: 2015-07-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -152,6 +152,10 @@ files:
152
152
  - exe/rundock
153
153
  - lib/rundock.rb
154
154
  - lib/rundock/backend.rb
155
+ - lib/rundock/builder/backend_builder.rb
156
+ - lib/rundock/builder/base.rb
157
+ - lib/rundock/builder/default_ssh_builder.rb
158
+ - lib/rundock/builder/scenario_builder.rb
155
159
  - lib/rundock/cli.rb
156
160
  - lib/rundock/ext/hash.rb
157
161
  - lib/rundock/ext/object/blank.rb
@@ -173,6 +177,7 @@ files:
173
177
  - spec/integration/recipes/simple_echo_scenario_spec.rb
174
178
  - spec/integration/recipes/simple_echo_spec.rb
175
179
  - spec/integration/scenarios/simple_echo_scenario.yml
180
+ - spec/integration/scenarios/simple_host_group.yml
176
181
  - spec/integration/scenarios/use_default_ssh_scenario.yml
177
182
  - spec/integration/spec_helper.rb
178
183
  homepage: https://github.com/hiracy/rundock