rundock 0.5.2 → 0.5.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +7 -0
- data/Rakefile +8 -5
- data/lib/rundock/builder/hook_builder.rb +5 -2
- data/lib/rundock/builder/operation_builder.rb +0 -4
- data/lib/rundock/builder/scenario_builder.rb +2 -2
- data/lib/rundock/builder/target_group_builder.rb +29 -0
- data/lib/rundock/builder/task_builder.rb +29 -0
- data/lib/rundock/cli.rb +3 -0
- data/lib/rundock/runner.rb +2 -2
- data/lib/rundock/version.rb +1 -1
- data/lib/rundock.rb +2 -0
- data/spec/integration/platforms/centos6/setup.sh +7 -0
- data/spec/integration/platforms/localhost/scenarios/target_by_option_scenario.yml +10 -0
- data/spec/integration/platforms/localhost/scenarios/task_by_option_scenario.yml +5 -0
- data/spec/integration/platforms/localhost/targets/target_by_option.yml +2 -0
- data/spec/integration/recipes/target_by_option_spec.rb +6 -0
- data/spec/integration/recipes/task_by_option_spec.rb +6 -0
- data/spec/integration/scenarios/target_by_option_scenario.yml +13 -0
- data/spec/integration/scenarios/task_by_option_scenario.yml +16 -0
- data/spec/integration/targets/target_by_option.yml +8 -0
- data/spec/integration/tasks/task_by_option.yml +3 -0
- metadata +13 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bcfd3d43abf83f98725cee3d7491bad4df9ee51f
|
4
|
+
data.tar.gz: 1d82c40d5cb2b880630eed568193ab042511be2a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e29c7362f2454b6436fd199c156062e36740995ca57b25254de52e9fb34d711d4bd2dbce0a1ead397fdc5d7a31a52be02216d0b1f842a93249b90f2676ace9a2
|
7
|
+
data.tar.gz: 9db5cb49b8e533bfc59cfa3add439471abf1018cd426f369d372d0dfae987dbce4d89d601d7d72445e3272d1c2d1730781febf9a96bbfd669a47db118c7f7c92
|
data/CHANGELOG.md
CHANGED
data/Rakefile
CHANGED
@@ -73,14 +73,17 @@ def do_rundock_scenarios(platform)
|
|
73
73
|
default_ssh_opt = ''
|
74
74
|
end
|
75
75
|
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
76
|
+
options = ''
|
77
|
+
if scenario =~ %r{^*scenarios/(.*hooks_by_option)_scenario.yml$}
|
78
|
+
options = " -k ./spec/integration/hooks/#{Regexp.last_match(1)}.yml"
|
79
|
+
elsif scenario =~ %r{^*scenarios/(.*task_by_option)_scenario.yml$}
|
80
|
+
options = " -t ./spec/integration/tasks/#{Regexp.last_match(1)}.yml"
|
81
|
+
elsif scenario =~ %r{^*scenarios/(.*target_by_option)_scenario.yml$}
|
82
|
+
options = " -g #{base_dir}/targets/#{Regexp.last_match(1)}.yml"
|
80
83
|
end
|
81
84
|
|
82
85
|
execute('bundle exec exe/rundock' \
|
83
|
-
" do #{scenario}#{default_ssh_opt}#{
|
86
|
+
" do #{scenario}#{default_ssh_opt}#{options} -l debug", true)
|
84
87
|
end
|
85
88
|
end
|
86
89
|
|
@@ -4,7 +4,7 @@ module Rundock
|
|
4
4
|
module Builder
|
5
5
|
class HookBuilder < Base
|
6
6
|
DEFAULT_HOOKS_FILE_PATH = './hooks.yml'
|
7
|
-
HookStructureError = Class.new(
|
7
|
+
HookStructureError = Class.new(StandardError)
|
8
8
|
|
9
9
|
attr_accessor :enable_hooks
|
10
10
|
|
@@ -21,9 +21,12 @@ module Rundock
|
|
21
21
|
if FileTest.exist?(@options[:hooks])
|
22
22
|
hooks_file = @options[:hooks]
|
23
23
|
Logger.info("hooks file is #{hooks_file}")
|
24
|
-
|
24
|
+
elsif FileTest.exist?(DEFAULT_HOOKS_FILE_PATH)
|
25
25
|
Logger.warn("hooks file is not found. use #{DEFAULT_HOOKS_FILE_PATH}")
|
26
26
|
hooks_file = DEFAULT_HOOKS_FILE_PATH
|
27
|
+
else
|
28
|
+
Logger.warn("Hook path is not available. (#{@options[:hooks]})")
|
29
|
+
return []
|
27
30
|
end
|
28
31
|
elsif hook_attributes.nil?
|
29
32
|
Logger.warn("Hook source is not found. (enables:#{enables.join(',')})") unless enables.empty?
|
@@ -2,10 +2,6 @@ module Rundock
|
|
2
2
|
module Builder
|
3
3
|
class OperationBuilder < Base
|
4
4
|
def build_first(scenario, targets, tasks, hooks)
|
5
|
-
if @options[:targetgroup] && !@options[:command]
|
6
|
-
raise CommandArgNotFoundError, %("--command or -c" option is required if targetgroup specified.)
|
7
|
-
end
|
8
|
-
|
9
5
|
parsing_node_attribute = nil
|
10
6
|
scen = Scenario.new
|
11
7
|
scen.tasks = tasks
|
@@ -52,8 +52,8 @@ module Rundock
|
|
52
52
|
ope = OperationBuilder.new(@options)
|
53
53
|
ope.build_first(
|
54
54
|
scenario_data[:main],
|
55
|
-
scenario_data[:target_info],
|
56
|
-
scenario_data[:tasks],
|
55
|
+
@options[:command] ? scenario_data[:target_info] : TargetGroupBuilder.new(@options).build(scenario_data[:target_info]),
|
56
|
+
TaskBuilder.new(@options).build(scenario_data[:tasks]),
|
57
57
|
scenario_data[:hooks])
|
58
58
|
end
|
59
59
|
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'yaml'
|
2
|
+
|
3
|
+
module Rundock
|
4
|
+
module Builder
|
5
|
+
class TargetGroupBuilder < Base
|
6
|
+
DEFAULT_TARGET_GROUP_FILE_PATH = './targetgroup.yml'
|
7
|
+
|
8
|
+
def build(scenario_targets)
|
9
|
+
targets = {} unless scenario_targets
|
10
|
+
|
11
|
+
if @options[:targetgroup]
|
12
|
+
if FileTest.exist?(@options[:targetgroup])
|
13
|
+
targets.merge!(YAML.load_file(@options[:targetgroup]).deep_symbolize_keys)
|
14
|
+
Logger.info("merged target file #{@options[:targetgroup]}")
|
15
|
+
elsif FileTest.exist?(DEFAULT_TARGET_GROUP_FILE_PATH)
|
16
|
+
Logger.warn("targetgroup file is not found. use #{DEFAULT_TARGET_GROUP_FILE_PATH}")
|
17
|
+
targets.merge!(YAML.load_file(DEFAULT_TARGET_GROUP_FILE_PATH).deep_symbolize_keys)
|
18
|
+
else
|
19
|
+
Logger.warn("Targetgroup path is not available. (#{@options[:targetgroup]})")
|
20
|
+
end
|
21
|
+
else
|
22
|
+
return scenario_targets
|
23
|
+
end
|
24
|
+
|
25
|
+
targets
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'yaml'
|
2
|
+
|
3
|
+
module Rundock
|
4
|
+
module Builder
|
5
|
+
class TaskBuilder < Base
|
6
|
+
DEFAULT_TASKS_FILE_PATH = './tasks.yml'
|
7
|
+
|
8
|
+
def build(scenario_tasks)
|
9
|
+
tasks = {} unless scenario_tasks
|
10
|
+
|
11
|
+
if @options[:tasks]
|
12
|
+
if FileTest.exist?(@options[:tasks])
|
13
|
+
tasks.merge!(YAML.load_file(@options[:tasks]).deep_symbolize_keys)
|
14
|
+
Logger.info("merged tasks file #{@options[:tasks]}")
|
15
|
+
elsif FileTest.exist?(DEFAULT_TASKS_FILE_PATH)
|
16
|
+
Logger.warn("tasks file is not found. use #{DEFAULT_TASKS_FILE_PATH}")
|
17
|
+
tasks.merge!(YAML.load_file(DEFAULT_TASKS_FILE_PATH).deep_symbolize_keys)
|
18
|
+
else
|
19
|
+
Logger.warn("Task path is not available. (#{@options[:tasks]})")
|
20
|
+
end
|
21
|
+
else
|
22
|
+
return scenario_tasks
|
23
|
+
end
|
24
|
+
|
25
|
+
tasks
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
data/lib/rundock/cli.rb
CHANGED
@@ -31,6 +31,8 @@ module Rundock
|
|
31
31
|
desc 'do [SCENARIO] [options]', 'Run rundock from scenario file'
|
32
32
|
option :sudo, type: :boolean, default: false
|
33
33
|
option :default_ssh_opts, type: :string, aliases: ['-d'], default: DEFAULT_SSH_OPTIONS_DEFAULT_FILE_PATH
|
34
|
+
option :targetgroup, type: :string, aliases: ['-g']
|
35
|
+
option :tasks, type: :string, aliases: ['-t']
|
34
36
|
option :hooks, type: :string, aliases: ['-k']
|
35
37
|
option :run_anyway, type: :boolean, default: false
|
36
38
|
option :dry_run, type: :boolean, aliases: ['-n']
|
@@ -44,6 +46,7 @@ module Rundock
|
|
44
46
|
desc 'ssh [options]', 'Run rundock ssh with various options'
|
45
47
|
option :command, type: :string, aliases: ['-c']
|
46
48
|
option :default_ssh_opts, type: :string, aliases: ['-d'], default: DEFAULT_SSH_OPTIONS_DEFAULT_FILE_PATH
|
49
|
+
option :tasks, type: :string, aliases: ['-t']
|
47
50
|
option :hooks, type: :string, aliases: ['-k']
|
48
51
|
option :host, type: :string, aliases: ['-h'], banner: 'You can specify comma separated hosts.[ex: host1,host2,..]'
|
49
52
|
option :targetgroup, type: :string, aliases: ['-g']
|
data/lib/rundock/runner.rb
CHANGED
@@ -31,11 +31,11 @@ module Rundock
|
|
31
31
|
if options[:scenario] || options[:targetgroup]
|
32
32
|
if options[:scenario] && !FileTest.exist?(options[:scenario])
|
33
33
|
raise ScenarioNotFoundError, "'#{options[:scenario]}' scenario file is not found."
|
34
|
-
elsif options[:targetgroup] && !FileTest.exist?(options[:targetgroup])
|
34
|
+
elsif options[:command] && options[:targetgroup] && !FileTest.exist?(options[:targetgroup])
|
35
35
|
raise ScenarioNotFoundError, "'#{options[:targetgroup]}' targetgroup file is not found."
|
36
36
|
end
|
37
37
|
|
38
|
-
options[:scenario] = options[:targetgroup] if options[:targetgroup]
|
38
|
+
options[:scenario] = options[:targetgroup] if options[:command] && options[:targetgroup]
|
39
39
|
|
40
40
|
# parse scenario
|
41
41
|
if options[:scenario] =~ %r{^(http|https)://}
|
data/lib/rundock/version.rb
CHANGED
data/lib/rundock.rb
CHANGED
@@ -15,6 +15,8 @@ require 'rundock/scenario'
|
|
15
15
|
require 'rundock/backend'
|
16
16
|
require 'rundock/builder/base'
|
17
17
|
require 'rundock/builder/default_ssh_builder'
|
18
|
+
require 'rundock/builder/target_group_builder'
|
19
|
+
require 'rundock/builder/task_builder'
|
18
20
|
require 'rundock/builder/target_builder'
|
19
21
|
require 'rundock/builder/backend_builder'
|
20
22
|
require 'rundock/builder/hook_builder'
|
@@ -17,15 +17,18 @@ DOCKER_SSH_KEY_PUBLIC_REMOTE="${PLATFORM_DIR}/authorized_keys"
|
|
17
17
|
DOCKER_SSH_CONFIG="${HOME}/.ssh/config_${PROJECT_NAME}_${PLATFORM_NAME}"
|
18
18
|
RUNDOCK_SCENARIO_DIR="${PROJECT_ROOT}/scenarios"
|
19
19
|
RUNDOCK_GROUP_DIR="${PROJECT_ROOT}/groups"
|
20
|
+
RUNDOCK_TARGET_DIR="${PROJECT_ROOT}/targets"
|
20
21
|
RUNDOCK_CACHE_DIR="${HOME}/.rundock/${PLATFORM_NAME}"
|
21
22
|
RUNDOCK_DEFAULT_SSH_YML="${RUNDOCK_CACHE_DIR}/integration_default_ssh.yml"
|
22
23
|
RUNDOCK_SCENARIO_CACHE_DIR="${RUNDOCK_CACHE_DIR}/scenarios"
|
23
24
|
RUNDOCK_GROUP_CACHE_DIR="${RUNDOCK_CACHE_DIR}/groups"
|
25
|
+
RUNDOCK_TARGET_CACHE_DIR="${RUNDOCK_CACHE_DIR}/targets"
|
24
26
|
|
25
27
|
if [ "${1}x" = "--cleanx" ];then
|
26
28
|
rm -f ${RUNDOCK_DEFAULT_SSH_YML}
|
27
29
|
rm -f ${RUNDOCK_SCENARIO_CACHE_DIR}/*.yml
|
28
30
|
rm -f ${RUNDOCK_GROUP_CACHE_DIR}/*.yml
|
31
|
+
rm -f ${RUNDOCK_TARGET_CACHE_DIR}/*.yml
|
29
32
|
if sudo docker ps | grep "${DOCKER_IMAGE_NAME}" > /dev/null; then
|
30
33
|
rm -f ${DOCKER_CACHE_IMAGE_PATH}
|
31
34
|
rm -f ${DOCKER_SSH_KEY_PRIVATE}
|
@@ -41,6 +44,7 @@ fi
|
|
41
44
|
|
42
45
|
mkdir -p "${RUNDOCK_SCENARIO_CACHE_DIR}"
|
43
46
|
mkdir -p "${RUNDOCK_GROUP_CACHE_DIR}"
|
47
|
+
mkdir -p "${RUNDOCK_TARGET_CACHE_DIR}"
|
44
48
|
|
45
49
|
if [ ! -f ${RUNDOCK_DEFAULT_SSH_YML} ]; then
|
46
50
|
(
|
@@ -55,11 +59,14 @@ fi
|
|
55
59
|
|
56
60
|
cp ${RUNDOCK_SCENARIO_DIR}/* ${RUNDOCK_SCENARIO_CACHE_DIR}
|
57
61
|
cp ${RUNDOCK_GROUP_DIR}/* ${RUNDOCK_GROUP_CACHE_DIR}
|
62
|
+
cp ${RUNDOCK_TARGET_DIR}/* ${RUNDOCK_TARGET_CACHE_DIR}
|
58
63
|
|
59
64
|
find ${RUNDOCK_SCENARIO_CACHE_DIR} -type f -name "*_scenario.yml" | \
|
60
65
|
xargs sed -i -e "s#<replaced_by_platforms>#${DOCKER_SSH_KEY_PRIVATE}#g"
|
61
66
|
find ${RUNDOCK_GROUP_CACHE_DIR} -type f -name "*_group.yml" | \
|
62
67
|
xargs sed -i -e "s#<replaced_by_platforms>#${DOCKER_SSH_KEY_PRIVATE}#g"
|
68
|
+
find ${RUNDOCK_TARGET_CACHE_DIR} -type f -name "*.yml" | \
|
69
|
+
xargs sed -i -e "s#<replaced_by_platforms>#${DOCKER_SSH_KEY_PRIVATE}#g"
|
63
70
|
|
64
71
|
sudo docker ps | grep "${DOCKER_IMAGE_NAME}" && { echo "docker image is already standing."; exit 0; }
|
65
72
|
|
@@ -0,0 +1,10 @@
|
|
1
|
+
- target: anyhost-01
|
2
|
+
command:
|
3
|
+
- "rm -f /var/tmp/hello_rundock_from_target_by_option_scenario"
|
4
|
+
task:
|
5
|
+
- write_echo
|
6
|
+
---
|
7
|
+
---
|
8
|
+
write_echo:
|
9
|
+
command:
|
10
|
+
- "echo 'Hello Rundock from target by option Scenario.' > /var/tmp/hello_rundock_from_target_by_option_scenario"
|
@@ -0,0 +1,13 @@
|
|
1
|
+
- target: localhost
|
2
|
+
command:
|
3
|
+
- "rm -f /var/tmp/hello_rundock_from_target_by_option_scenario"
|
4
|
+
- target: anyhost-01
|
5
|
+
command:
|
6
|
+
- "uname -a"
|
7
|
+
task:
|
8
|
+
- write_echo
|
9
|
+
---
|
10
|
+
---
|
11
|
+
write_echo:
|
12
|
+
command:
|
13
|
+
- "echo 'Hello Rundock from target by option Scenario.' > /var/tmp/hello_rundock_from_target_by_option_scenario"
|
@@ -0,0 +1,16 @@
|
|
1
|
+
- target: localhost
|
2
|
+
command:
|
3
|
+
- "rm -f /var/tmp/hello_rundock_from_task_by_option_scenario"
|
4
|
+
- target: anyhost-01
|
5
|
+
command:
|
6
|
+
- "uname -a"
|
7
|
+
task:
|
8
|
+
- write_echo
|
9
|
+
---
|
10
|
+
anyhost-01:
|
11
|
+
target_type: host
|
12
|
+
host: 172.17.42.1
|
13
|
+
ssh_opts:
|
14
|
+
port: 22222
|
15
|
+
user: tester
|
16
|
+
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.5.
|
4
|
+
version: 0.5.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- hiracy
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-09-
|
11
|
+
date: 2015-09-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -162,6 +162,8 @@ files:
|
|
162
162
|
- lib/rundock/builder/operation_builder.rb
|
163
163
|
- lib/rundock/builder/scenario_builder.rb
|
164
164
|
- lib/rundock/builder/target_builder.rb
|
165
|
+
- lib/rundock/builder/target_group_builder.rb
|
166
|
+
- lib/rundock/builder/task_builder.rb
|
165
167
|
- lib/rundock/cli.rb
|
166
168
|
- lib/rundock/ext/hash.rb
|
167
169
|
- lib/rundock/ext/object/blank.rb
|
@@ -195,8 +197,11 @@ files:
|
|
195
197
|
- spec/integration/platforms/localhost/scenarios/run_anyway_scenario.yml
|
196
198
|
- spec/integration/platforms/localhost/scenarios/simple_echo_scenario.yml
|
197
199
|
- spec/integration/platforms/localhost/scenarios/simple_plugin_scenario.yml
|
200
|
+
- spec/integration/platforms/localhost/scenarios/target_by_option_scenario.yml
|
198
201
|
- spec/integration/platforms/localhost/scenarios/target_group_scenario.yml
|
202
|
+
- spec/integration/platforms/localhost/scenarios/task_by_option_scenario.yml
|
199
203
|
- spec/integration/platforms/localhost/scenarios/use_default_ssh_scenario.yml
|
204
|
+
- spec/integration/platforms/localhost/targets/target_by_option.yml
|
200
205
|
- spec/integration/recipes/deploy_erb_spec.rb
|
201
206
|
- spec/integration/recipes/deploy_spec.rb
|
202
207
|
- spec/integration/recipes/file_hook_by_option_spec.rb
|
@@ -205,6 +210,8 @@ files:
|
|
205
210
|
- spec/integration/recipes/simple_echo_spec.rb
|
206
211
|
- spec/integration/recipes/simple_plugin_scenario_spec.rb
|
207
212
|
- spec/integration/recipes/tareget_group_scenario_spec.rb
|
213
|
+
- spec/integration/recipes/target_by_option_spec.rb
|
214
|
+
- spec/integration/recipes/task_by_option_spec.rb
|
208
215
|
- spec/integration/scenarios/all_file_hooks_by_option_scenario.yml
|
209
216
|
- spec/integration/scenarios/deploy_erb_scenario.yml
|
210
217
|
- spec/integration/scenarios/deploy_scenario.yml
|
@@ -212,9 +219,13 @@ files:
|
|
212
219
|
- spec/integration/scenarios/file_hooks_scenario.yml
|
213
220
|
- spec/integration/scenarios/simple_echo_scenario.yml
|
214
221
|
- spec/integration/scenarios/simple_plugin_scenario.yml
|
222
|
+
- spec/integration/scenarios/target_by_option_scenario.yml
|
215
223
|
- spec/integration/scenarios/target_group_scenario.yml
|
224
|
+
- spec/integration/scenarios/task_by_option_scenario.yml
|
216
225
|
- spec/integration/scenarios/use_default_ssh_scenario.yml
|
217
226
|
- spec/integration/spec_helper.rb
|
227
|
+
- spec/integration/targets/target_by_option.yml
|
228
|
+
- spec/integration/tasks/task_by_option.yml
|
218
229
|
homepage: https://github.com/hiracy/rundock
|
219
230
|
licenses:
|
220
231
|
- MIT
|