rundock 0.5.3 → 0.5.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: bcfd3d43abf83f98725cee3d7491bad4df9ee51f
4
- data.tar.gz: 1d82c40d5cb2b880630eed568193ab042511be2a
3
+ metadata.gz: be69d1204087ff6b81446b6303ec46351a15324b
4
+ data.tar.gz: c8d4edf9535b4495e8c57f3b0186baabba97fcbb
5
5
  SHA512:
6
- metadata.gz: e29c7362f2454b6436fd199c156062e36740995ca57b25254de52e9fb34d711d4bd2dbce0a1ead397fdc5d7a31a52be02216d0b1f842a93249b90f2676ace9a2
7
- data.tar.gz: 9db5cb49b8e533bfc59cfa3add439471abf1018cd426f369d372d0dfae987dbce4d89d601d7d72445e3272d1c2d1730781febf9a96bbfd669a47db118c7f7c92
6
+ metadata.gz: 4a11d81638882d166d039e394e2efd3db08d01d5d24fa3f5e5e397cdb2101091b7a1bd14f02b601d3a22c62075e7a0d3ae63bae44fe2bc59007b2e194992439f
7
+ data.tar.gz: 1d2bc6ac9a8d3a1545161138fa5d599dd2556fb10199370f4ad6685d798c0a39cf6f6c3f60663858fab5994abb6467140d5bbd74945c95d0ef49c3df7bb3344d
data/.rubocop.yml CHANGED
@@ -48,5 +48,8 @@ Style/HashSyntax:
48
48
  Style/FormatString:
49
49
  EnforcedStyle: percent
50
50
 
51
+ Style/RegexpLiteral:
52
+ Enabled: false
53
+
51
54
  Lint/UnusedMethodArgument:
52
55
  Enabled: false
data/CHANGELOG.md CHANGED
@@ -1,3 +1,10 @@
1
+ ## v0.5.4
2
+
3
+ Update
4
+
5
+ - Support change directory
6
+ - Support sudo in scenario
7
+
1
8
  ## v0.5.3
2
9
 
3
10
  Update
data/README.md CHANGED
@@ -79,14 +79,38 @@ and execute rundock.
79
79
 
80
80
  You can also specify [default_ssh_options.yml](https://github.com/hiracy/rundock/blob/master/default_ssh.yml) [(Net::SSH options)](http://net-ssh.github.io/net-ssh/classes/Net/SSH.html) file contents that you specified "-d" option to the default ssh options.
81
81
 
82
+ - use adhoc ssh
83
+
82
84
  ```
83
85
  $ rundock ssh -g /path/to/your-dir/targetgroup.yml -c 'your-gread-command' -d /path/to/your-dir/default_ssh_options.yml
84
86
  ```
87
+
88
+ - use scenario file
89
+
85
90
  ```
86
91
  $ rundock do /path/to/your-dir/scenario.yml -d /path/to/your-dir/default_ssh_options.yml
87
92
  ```
88
93
 
89
- For more detail. You can see from `rundock -h` command.
94
+ You can see from `rundock -h` command.
95
+
96
+ ```
97
+ Commands:
98
+ rundock do [SCENARIO] [options] # Run rundock from scenario file
99
+ rundock help [COMMAND] # Describe available commands or one specific command
100
+ rundock ssh [options] # Run rundock ssh with various options
101
+ rundock version # Print version
102
+
103
+ Options:
104
+ -l, [--log-level=LOG_LEVEL]
105
+ # Default: info
106
+ [--color], [--no-color]
107
+ # Default: true
108
+ [--header], [--no-header]
109
+ # Default: true
110
+ [--short-header], [--no-short-header]
111
+ [--date-header], [--no-date-header]
112
+ # Default: true
113
+ ```
90
114
 
91
115
  ## Documentations
92
116
 
data/Rakefile CHANGED
@@ -8,7 +8,7 @@ run_commands = [
8
8
  'echo \'Hello Rundock.\' > /var/tmp/hello_rundock'
9
9
  ]
10
10
 
11
- def execute(command, clean_env)
11
+ def execute(command, clean_env, errexit)
12
12
  puts "[EXECUTE:] #{command}"
13
13
 
14
14
  if clean_env
@@ -18,11 +18,11 @@ def execute(command, clean_env)
18
18
  else
19
19
  system command
20
20
  end
21
- raise 'Execute Error.' unless $?.to_i == 0
21
+ raise 'Execute Error.' if $?.to_i != 0 && errexit
22
22
  end
23
23
 
24
24
  def setup_docker(platform, timeout, interval)
25
- execute("./spec/integration/platforms/#{platform}/setup.sh &", false)
25
+ execute("./spec/integration/platforms/#{platform}/setup.sh &", false, true)
26
26
  found = false
27
27
  (timeout / interval).times do
28
28
  system 'sudo docker ps | grep rundock'
@@ -41,17 +41,17 @@ def do_rundock_ssh(commands, platform)
41
41
 
42
42
  if platform == 'localhost'
43
43
  commands.each do |cmd|
44
- execute("bundle exec exe/rundock ssh -c \"#{cmd}\" -h localhost -l debug", true)
44
+ execute("bundle exec exe/rundock ssh -c \"#{cmd}\" -h localhost -l debug", true, true)
45
45
  end
46
46
  else
47
47
  commands.each do |cmd|
48
48
  execute('bundle exec exe/rundock' \
49
49
  " ssh -c \"#{cmd}\" -h 172.17.42.1 -p 22222 -u tester" \
50
- " -i #{ENV['HOME']}/.ssh/id_rsa_rundock_spec_#{platform}_tmp -l debug", true)
50
+ " -i #{ENV['HOME']}/.ssh/id_rsa_rundock_spec_#{platform}_tmp -l debug", true, true)
51
51
  Dir.glob(groups_files_pattern).each do |g|
52
52
  execute('bundle exec exe/rundock' \
53
53
  " ssh -c \"#{cmd}\" -g #{g} -p 22222 -u tester" \
54
- " -i #{ENV['HOME']}/.ssh/id_rsa_rundock_spec_#{platform}_tmp -l debug", true)
54
+ " -i #{ENV['HOME']}/.ssh/id_rsa_rundock_spec_#{platform}_tmp -l debug", true, true)
55
55
  end
56
56
  end
57
57
  end
@@ -83,23 +83,23 @@ def do_rundock_scenarios(platform)
83
83
  end
84
84
 
85
85
  execute('bundle exec exe/rundock' \
86
- " do #{scenario}#{default_ssh_opt}#{options} -l debug", true)
86
+ " do #{scenario}#{default_ssh_opt}#{options} -l debug", true, true)
87
87
  end
88
88
  end
89
89
 
90
90
  desc 'Cleaning environments'
91
91
 
92
92
  task :clean do
93
- execute('rm -fr /var/tmp/hello_rundock*', false)
93
+ execute('rm -fr /var/tmp/hello_rundock*', false, false)
94
94
  Dir.glob('./spec/integration/platforms/*').each do |platform|
95
95
  next if platform =~ /localhost$/
96
- execute("#{platform}/setup.sh --clean", false)
96
+ execute("#{platform}/setup.sh --clean", false, true)
97
97
  end
98
98
  end
99
99
 
100
100
  desc 'execute rubocop'
101
101
  task :rubocop do
102
- execute('rubocop', false)
102
+ execute('rubocop', false, true)
103
103
  end
104
104
 
105
105
  desc 'Run all tests.'
@@ -5,12 +5,16 @@ module Rundock
5
5
  attr_accessor :nodeinfo
6
6
  attr_accessor :task_info
7
7
  attr_accessor :errexit
8
+ attr_accessor :cwd
9
+ attr_accessor :sudo
8
10
  attr_accessor :dry_run
9
11
  attr_accessor :hooks
10
12
 
11
13
  AVAIL_TAKE_OVERS = [
12
14
  :task_info,
13
15
  :errexit,
16
+ :cwd,
17
+ :sudo,
14
18
  :dry_run
15
19
  ]
16
20
 
@@ -51,6 +51,7 @@ module Rundock
51
51
 
52
52
  def run_command(cmd, exec_options = {})
53
53
  command = cmd.strip
54
+ command = "sudo #{command.gsub(/^sudo +/, '')}" if exec_options[:sudo]
54
55
  command = "cd #{Shellwords.escape(exec_options[:cwd])} && #{command}" if exec_options[:cwd]
55
56
  command = "sudo -H -u #{Shellwords.escape(user)} -- /bin/sh -c #{command}" if exec_options[:user]
56
57
 
@@ -62,6 +63,8 @@ module Rundock
62
63
  exit_status = result.exit_status
63
64
 
64
65
  Logger.formatter.indent do
66
+ Logger.debug("cwd: #{exec_options[:cwd]}") if exec_options[:cwd]
67
+ Logger.debug("sudo: #{exec_options[:sudo]}") if exec_options[:sudo]
65
68
  Logger.error("#{result.stderr.strip}") unless result.stderr.strip.blank?
66
69
  Logger.info("#{result.stdout.strip}") unless result.stdout.strip.blank?
67
70
  Logger.debug("errexit: #{exec_options[:errexit]}")
@@ -1,4 +1,4 @@
1
- require 'rundock/operation/base'
1
+ require 'rundock/hook/base'
2
2
 
3
3
  module Rundock
4
4
  module Hook
@@ -1,3 +1,3 @@
1
1
  module Rundock
2
- VERSION = '0.5.3'
2
+ VERSION = '0.5.4'
3
3
  end
@@ -6,7 +6,7 @@ RUN echo "tester" | passwd --stdin tester
6
6
  RUN mkdir -p /home/tester/.ssh; chown tester /home/tester/.ssh; chmod 700 /home/tester/.ssh
7
7
  ADD authorized_keys /home/tester/.ssh/
8
8
  RUN chown tester /home/tester/.ssh/authorized_keys; chmod 600 /home/tester/.ssh/authorized_keys
9
- RUN echo "tester ALL=(ALL) ALL" >> /etc/sudoers.d/tester
9
+ RUN echo "tester ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers.d/tester
10
10
  RUN sed -ri 's/UsePAM yes/#UsePAM yes/g' /etc/ssh/sshd_config
11
11
  RUN sed -ri 's/#UsePAM no/UsePAM no/g' /etc/ssh/sshd_config
12
12
  RUN sed -ri 's/PasswordAuthentication yes/PasswordAuthentication no/g' /etc/ssh/sshd_config
@@ -25,6 +25,7 @@ RUNDOCK_GROUP_CACHE_DIR="${RUNDOCK_CACHE_DIR}/groups"
25
25
  RUNDOCK_TARGET_CACHE_DIR="${RUNDOCK_CACHE_DIR}/targets"
26
26
 
27
27
  if [ "${1}x" = "--cleanx" ];then
28
+ set +e
28
29
  rm -f ${RUNDOCK_DEFAULT_SSH_YML}
29
30
  rm -f ${RUNDOCK_SCENARIO_CACHE_DIR}/*.yml
30
31
  rm -f ${RUNDOCK_GROUP_CACHE_DIR}/*.yml
@@ -35,7 +36,6 @@ if [ "${1}x" = "--cleanx" ];then
35
36
  rm -f ${DOCKER_SSH_KEY_PUBLIC_LOCAL}
36
37
  rm -f ${DOCKER_SSH_CONFIG}
37
38
  rm -f ${DOCKER_SSH_KEY_PUBLIC_REMOTE}
38
- set +x
39
39
  sudo docker ps -q | xargs sudo docker rm -f
40
40
  fi
41
41
 
@@ -0,0 +1,6 @@
1
+ - target: localhost
2
+ command:
3
+ - "mkdir -p /var/tmp/cwd_scenario_test"
4
+ - "rm -f /var/tmp/hello_rundock_from_cwd_scenario"
5
+ - cwd: /var/tmp/cwd_scenario_test
6
+ - "echo `pwd` > /var/tmp/hello_rundock_from_cwd_scenario"
@@ -0,0 +1,8 @@
1
+ - target: localhost
2
+ command:
3
+ - "sudo rm -f /var/tmp/hello_rundock_from_sudo_scenario"
4
+ - "sudo rm -f /var/tmp/hello_rundock_from_no_sudo_scenario"
5
+ - sudo: true
6
+ - "sudo touch /var/tmp/hello_rundock_from_sudo_scenario"
7
+ - sudo: false
8
+ - "touch /var/tmp/hello_rundock_from_no_sudo_scenario"
@@ -0,0 +1,6 @@
1
+ require 'spec_helper'
2
+
3
+ describe file('/var/tmp/hello_rundock_from_cwd_scenario') do
4
+ it { should be_file }
5
+ its(:content) { should match(/^\/var\/tmp\/cwd_scenario_test/) }
6
+ end
@@ -0,0 +1,11 @@
1
+ require 'spec_helper'
2
+
3
+ describe file('/var/tmp/hello_rundock_from_sudo_scenario') do
4
+ it { should be_file }
5
+ it { should be_owned_by 'root' }
6
+ end
7
+
8
+ describe file('/var/tmp/hello_rundock_from_no_sudo_scenario') do
9
+ it { should be_file }
10
+ it { should_not be_owned_by 'root' }
11
+ end
@@ -0,0 +1,18 @@
1
+ - target: anyhost-01
2
+ command:
3
+ - "mkdir -p /var/tmp/cwd_scenario_test"
4
+ - "rm -f /var/tmp/hello_rundock_from_cwd_scenario"
5
+ task:
6
+ - pwd_echo
7
+ ---
8
+ anyhost-01:
9
+ host: 172.17.42.1
10
+ ssh_opts:
11
+ port: 22222
12
+ user: tester
13
+ key: "<replaced_by_platforms>"
14
+ ---
15
+ pwd_echo:
16
+ command:
17
+ - cwd: /var/tmp/cwd_scenario_test
18
+ - "echo `pwd` > /var/tmp/hello_rundock_from_cwd_scenario"
@@ -0,0 +1,20 @@
1
+ - target: anyhost-01
2
+ command:
3
+ - "sudo rm -f /var/tmp/hello_rundock_from_sudo_scenario"
4
+ - "sudo rm -f /var/tmp/hello_rundock_from_no_sudo_scenario"
5
+ task:
6
+ - sudo_touch
7
+ ---
8
+ anyhost-01:
9
+ host: 172.17.42.1
10
+ ssh_opts:
11
+ port: 22222
12
+ user: tester
13
+ key: "<replaced_by_platforms>"
14
+ ---
15
+ sudo_touch:
16
+ command:
17
+ - sudo: true
18
+ - "sudo touch /var/tmp/hello_rundock_from_sudo_scenario"
19
+ - sudo: false
20
+ - "touch /var/tmp/hello_rundock_from_no_sudo_scenario"
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.3
4
+ version: 0.5.4
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-23 00:00:00.000000000 Z
11
+ date: 2015-09-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -190,6 +190,7 @@ files:
190
190
  - spec/integration/platforms/centos6/Dockerfile
191
191
  - spec/integration/platforms/centos6/setup.sh
192
192
  - spec/integration/platforms/localhost/scenarios/all_file_hooks_by_option_scenario.yml
193
+ - spec/integration/platforms/localhost/scenarios/cwd_scenario.yml
193
194
  - spec/integration/platforms/localhost/scenarios/deploy_erb_scenario.yml
194
195
  - spec/integration/platforms/localhost/scenarios/deploy_scenario.yml
195
196
  - spec/integration/platforms/localhost/scenarios/file_hooks_by_option_scenario.yml
@@ -197,11 +198,13 @@ files:
197
198
  - spec/integration/platforms/localhost/scenarios/run_anyway_scenario.yml
198
199
  - spec/integration/platforms/localhost/scenarios/simple_echo_scenario.yml
199
200
  - spec/integration/platforms/localhost/scenarios/simple_plugin_scenario.yml
201
+ - spec/integration/platforms/localhost/scenarios/sudo_scenario.yml
200
202
  - spec/integration/platforms/localhost/scenarios/target_by_option_scenario.yml
201
203
  - spec/integration/platforms/localhost/scenarios/target_group_scenario.yml
202
204
  - spec/integration/platforms/localhost/scenarios/task_by_option_scenario.yml
203
205
  - spec/integration/platforms/localhost/scenarios/use_default_ssh_scenario.yml
204
206
  - spec/integration/platforms/localhost/targets/target_by_option.yml
207
+ - spec/integration/recipes/cwd_spec.rb
205
208
  - spec/integration/recipes/deploy_erb_spec.rb
206
209
  - spec/integration/recipes/deploy_spec.rb
207
210
  - spec/integration/recipes/file_hook_by_option_spec.rb
@@ -209,16 +212,19 @@ files:
209
212
  - spec/integration/recipes/simple_echo_scenario_spec.rb
210
213
  - spec/integration/recipes/simple_echo_spec.rb
211
214
  - spec/integration/recipes/simple_plugin_scenario_spec.rb
215
+ - spec/integration/recipes/sudo_spec.rb
212
216
  - spec/integration/recipes/tareget_group_scenario_spec.rb
213
217
  - spec/integration/recipes/target_by_option_spec.rb
214
218
  - spec/integration/recipes/task_by_option_spec.rb
215
219
  - spec/integration/scenarios/all_file_hooks_by_option_scenario.yml
220
+ - spec/integration/scenarios/cwd_scenario.yml
216
221
  - spec/integration/scenarios/deploy_erb_scenario.yml
217
222
  - spec/integration/scenarios/deploy_scenario.yml
218
223
  - spec/integration/scenarios/file_hooks_by_option_scenario.yml
219
224
  - spec/integration/scenarios/file_hooks_scenario.yml
220
225
  - spec/integration/scenarios/simple_echo_scenario.yml
221
226
  - spec/integration/scenarios/simple_plugin_scenario.yml
227
+ - spec/integration/scenarios/sudo_scenario.yml
222
228
  - spec/integration/scenarios/target_by_option_scenario.yml
223
229
  - spec/integration/scenarios/target_group_scenario.yml
224
230
  - spec/integration/scenarios/task_by_option_scenario.yml