rundock 0.3.0 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +10 -0
- data/Rakefile +7 -1
- data/hooks_sample.yml +7 -0
- data/lib/rundock/attribute/node_attribute.rb +1 -0
- data/lib/rundock/builder/hook_builder.rb +46 -0
- data/lib/rundock/builder/operation_builder.rb +8 -3
- data/lib/rundock/cli.rb +3 -0
- data/lib/rundock/hook/base.rb +19 -0
- data/lib/rundock/hook_factory.rb +31 -0
- data/lib/rundock/logger.rb +27 -0
- data/lib/rundock/node.rb +16 -0
- data/lib/rundock/plugin/hook/file.rb +45 -0
- data/lib/rundock/runner.rb +1 -1
- data/lib/rundock/version.rb +1 -1
- data/lib/rundock.rb +3 -0
- data/scenario_sample.yml +4 -0
- data/spec/integration/hooks/all_file_hooks.yml +6 -0
- data/spec/integration/hooks/simple_file_hooks.yml +9 -0
- data/spec/integration/platforms/localhost/scenarios/all_file_hooks_scenario.yml +5 -0
- data/spec/integration/platforms/localhost/scenarios/simple_file_hooks_scenario.yml +15 -0
- data/spec/integration/recipes/file_hook_spec.rb +26 -0
- data/spec/integration/scenarios/all_file_hooks_scenario.yml +12 -0
- data/spec/integration/scenarios/simple_file_hooks_scenario.yml +16 -0
- metadata +14 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ac0d1b1d024e3fb776363046e50b0491d565bd14
|
4
|
+
data.tar.gz: fcc471769968893cec01ad5448596f89a25a60c4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1ed1fa084c198d5ef541533a5b6dea968a9bdfef73b8fe952b50ded41587ac905eab7d1af64e92c31db8272083f2045e2ed4069b0eb72fc856dbfd225caaecd3
|
7
|
+
data.tar.gz: aeddc0612d79caa97beb41d77e104085514fed0cc96dcbf298b4df8ab4045721ebb5f69068a0ffb0fed7085f2b3f992e9a08423067536540d169d02f4d52f3af
|
data/CHANGELOG.md
CHANGED
data/Rakefile
CHANGED
@@ -73,8 +73,14 @@ def do_rundock_scenarios(platform)
|
|
73
73
|
default_ssh_opt = ''
|
74
74
|
end
|
75
75
|
|
76
|
+
if scenario =~ %r{^*scenarios/(.*_hooks)_scenario.yml$}
|
77
|
+
hooks_opt = " -k ./spec/integration/hooks/#{Regexp.last_match(1)}.yml"
|
78
|
+
else
|
79
|
+
hooks_opt = ''
|
80
|
+
end
|
81
|
+
|
76
82
|
execute('bundle exec exe/rundock' \
|
77
|
-
" do #{scenario}#{default_ssh_opt} -l debug", true)
|
83
|
+
" do #{scenario}#{default_ssh_opt}#{hooks_opt} -l debug", true)
|
78
84
|
end
|
79
85
|
end
|
80
86
|
|
data/hooks_sample.yml
ADDED
@@ -0,0 +1,46 @@
|
|
1
|
+
require 'yaml'
|
2
|
+
|
3
|
+
module Rundock
|
4
|
+
module Builder
|
5
|
+
class HookBuilder < Base
|
6
|
+
HookStructureError = Class.new(NotImplementedError)
|
7
|
+
|
8
|
+
def build(enables)
|
9
|
+
if enables.blank?
|
10
|
+
return []
|
11
|
+
elsif @options[:hooks] && FileTest.exist?(@options[:hooks])
|
12
|
+
hooks_file = @options[:hooks]
|
13
|
+
else
|
14
|
+
return []
|
15
|
+
end
|
16
|
+
|
17
|
+
build_from_file(hooks_file, enables)
|
18
|
+
end
|
19
|
+
|
20
|
+
def build_from_attributes(attributes)
|
21
|
+
return [] unless attributes.key?(:enable_hooks)
|
22
|
+
build_from_file(attributes[:hooks], attributes[:enable_hooks])
|
23
|
+
end
|
24
|
+
|
25
|
+
private
|
26
|
+
|
27
|
+
def build_from_file(file, enables)
|
28
|
+
hooks = []
|
29
|
+
allow_all = enables.include?('all')
|
30
|
+
|
31
|
+
File.open(file) do |f|
|
32
|
+
YAML.load_documents(f) do |y|
|
33
|
+
y.each do |k, v|
|
34
|
+
raise HookStructureError if !v.is_a?(Hash) || !v.key?('hook_type')
|
35
|
+
next if !allow_all && enables.include?(k)
|
36
|
+
hook = Rundock::HookFactory.instance(v['hook_type']).create(k, v.deep_symbolize_keys)
|
37
|
+
hooks << hook
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
hooks
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -21,16 +21,19 @@ module Rundock
|
|
21
21
|
n.deep_symbolize_keys.each do |k, v|
|
22
22
|
if k == :node
|
23
23
|
node_attribute.finalize_node
|
24
|
-
|
25
|
-
backend =
|
24
|
+
backend_builder = BackendBuilder.new(@options, v, node_info)
|
25
|
+
backend = backend_builder.build
|
26
26
|
|
27
27
|
node = Node.new(v, backend)
|
28
28
|
node_attribute.nodename = v
|
29
|
-
scen.node_info[v.to_sym] = node_attribute.nodeinfo =
|
29
|
+
scen.node_info[v.to_sym] = node_attribute.nodeinfo = backend_builder.parsed_options
|
30
30
|
|
31
31
|
if @options[:command]
|
32
32
|
node.add_operation(build_cli_command_operation(@options[:command], node_attribute, @options))
|
33
33
|
end
|
34
|
+
elsif k == :hook
|
35
|
+
node_attribute.enable_hooks = Array(v)
|
36
|
+
node.hooks = HookBuilder.new(@options).build(Array(v)) if node
|
34
37
|
else
|
35
38
|
|
36
39
|
next unless node
|
@@ -47,6 +50,7 @@ module Rundock
|
|
47
50
|
|
48
51
|
def build_task(tasks, backend, node_attribute)
|
49
52
|
node = Node.new(node_attribute.nodename, backend)
|
53
|
+
node.hooks = HookBuilder.new(nil).build_from_attributes(node_attribute.nodeinfo)
|
50
54
|
scen = Scenario.new
|
51
55
|
|
52
56
|
tasks.each do |k, v|
|
@@ -64,6 +68,7 @@ module Rundock
|
|
64
68
|
@options[:host].split(',').each do |host|
|
65
69
|
backend = BackendBuilder.new(@options, host, nil).build
|
66
70
|
node = Node.new(host, backend)
|
71
|
+
node.hooks = HookBuilder.new(@options).build(['all'])
|
67
72
|
node.add_operation(
|
68
73
|
build_cli_command_operation(@options[:command], Rundock::Attribute::NodeAttribute.new, @options))
|
69
74
|
scen.nodes.push(node)
|
data/lib/rundock/cli.rb
CHANGED
@@ -6,6 +6,7 @@ module Rundock
|
|
6
6
|
DEFAULT_SCENARIO_FILE_PATH = './scenario.yml'
|
7
7
|
DEFAULT_SSH_OPTIONS_DEFAULT_FILE_PATH = './default_ssh.yml'
|
8
8
|
DEFAULT_HOSTGROUP_FILE_PATH = './hostgroup.yml'
|
9
|
+
DEFAULT_HOOKS_FILE_PATH = './hooks.yml'
|
9
10
|
|
10
11
|
class_option :log_level, type: :string, aliases: ['-l'], default: 'info'
|
11
12
|
class_option :color, type: :boolean, default: true
|
@@ -27,6 +28,7 @@ module Rundock
|
|
27
28
|
desc 'do [SCENARIO] [options]', 'Run rundock from scenario file'
|
28
29
|
option :sudo, type: :boolean, default: false
|
29
30
|
option :default_ssh_opts, type: :string, aliases: ['-d'], default: DEFAULT_SSH_OPTIONS_DEFAULT_FILE_PATH
|
31
|
+
option :hooks, type: :string, aliases: ['-k'], default: DEFAULT_HOOKS_FILE_PATH
|
30
32
|
option :run_anyway, type: :boolean, default: false
|
31
33
|
option :dry_run, type: :boolean, aliases: ['-n']
|
32
34
|
def do(*scenario_file_path)
|
@@ -39,6 +41,7 @@ module Rundock
|
|
39
41
|
desc 'ssh [options]', 'Run rundock ssh with various options'
|
40
42
|
option :command, type: :string, aliases: ['-c']
|
41
43
|
option :default_ssh_opts, type: :string, aliases: ['-d'], default: DEFAULT_SSH_OPTIONS_DEFAULT_FILE_PATH
|
44
|
+
option :hooks, type: :string, aliases: ['-k'], default: DEFAULT_HOOKS_FILE_PATH
|
42
45
|
option :host, type: :string, aliases: ['-h'], banner: 'You can specify comma separated hosts.[ex: host1,host2,..]'
|
43
46
|
option :hostgroup, type: :string, aliases: ['-g']
|
44
47
|
option :user, type: :string, aliases: ['-u']
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module Rundock
|
2
|
+
module Hook
|
3
|
+
class Base
|
4
|
+
HookNotImplementedError = Class.new(NotImplementedError)
|
5
|
+
|
6
|
+
attr_reader :name
|
7
|
+
attr_reader :contents
|
8
|
+
|
9
|
+
def initialize(name, contents = {})
|
10
|
+
@name = name
|
11
|
+
@contents = contents
|
12
|
+
end
|
13
|
+
|
14
|
+
def hook(log_buffer = [], node_info = {})
|
15
|
+
raise HookNotImplementedError
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module Rundock
|
2
|
+
class HookFactory
|
3
|
+
HookNotImplementedError = Class.new(NotImplementedError)
|
4
|
+
|
5
|
+
def self.instance(type)
|
6
|
+
self.new(type)
|
7
|
+
end
|
8
|
+
|
9
|
+
def initialize(type)
|
10
|
+
@type = type
|
11
|
+
end
|
12
|
+
|
13
|
+
def create(name, attributes)
|
14
|
+
klass = "Rundock::Hook::#{@type.to_s.to_camel_case}"
|
15
|
+
Logger.debug("initialize #{klass} hook")
|
16
|
+
raise HookNotImplementedError unless Rundock::Hook::Base.subclasses.map(&:to_s).include?(klass)
|
17
|
+
|
18
|
+
obj = nil
|
19
|
+
klass.split('::').map do |k|
|
20
|
+
if obj.nil?
|
21
|
+
obj = Kernel.const_get(k)
|
22
|
+
else
|
23
|
+
obj = obj.const_get(k)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
hook = obj.new(name, attributes)
|
28
|
+
hook
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
data/lib/rundock/logger.rb
CHANGED
@@ -4,15 +4,34 @@ require 'ansi/code'
|
|
4
4
|
|
5
5
|
module Rundock
|
6
6
|
module Logger
|
7
|
+
class LogEntity
|
8
|
+
attr_accessor :severity
|
9
|
+
attr_accessor :datetime
|
10
|
+
attr_accessor :progname
|
11
|
+
attr_accessor :msg
|
12
|
+
attr_accessor :indent_depth
|
13
|
+
|
14
|
+
def initialize(severity, datetime, progname, msg, indent_depth)
|
15
|
+
@severity = severity
|
16
|
+
@datetime = datetime
|
17
|
+
@progname = progname
|
18
|
+
@msg = msg
|
19
|
+
@indent_depth = indent_depth
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
7
23
|
class Formatter
|
8
24
|
attr_accessor :colored
|
9
25
|
attr_accessor :indent_depth
|
10
26
|
attr_accessor :color
|
11
27
|
attr_accessor :show_header
|
28
|
+
attr_accessor :onrec
|
29
|
+
attr_accessor :buffer
|
12
30
|
|
13
31
|
def initialize(*args)
|
14
32
|
super
|
15
33
|
@indent_depth = 0
|
34
|
+
@buffer = []
|
16
35
|
end
|
17
36
|
|
18
37
|
def call(severity, datetime, progname, msg)
|
@@ -22,6 +41,8 @@ module Rundock
|
|
22
41
|
out = "%s\n" % [msg2str(msg)]
|
23
42
|
end
|
24
43
|
|
44
|
+
@buffer << LogEntity.new(severity, datetime, progname, msg, indent_depth)
|
45
|
+
|
25
46
|
if colored
|
26
47
|
colorize(out, severity)
|
27
48
|
else
|
@@ -52,6 +73,12 @@ module Rundock
|
|
52
73
|
@color = prev_color
|
53
74
|
end
|
54
75
|
|
76
|
+
def flush
|
77
|
+
ret = @buffer.dup
|
78
|
+
@buffer.clear
|
79
|
+
ret
|
80
|
+
end
|
81
|
+
|
55
82
|
private
|
56
83
|
|
57
84
|
def msg2str(msg)
|
data/lib/rundock/node.rb
CHANGED
@@ -5,11 +5,13 @@ module Rundock
|
|
5
5
|
attr_reader :name
|
6
6
|
attr_reader :operations
|
7
7
|
attr_reader :backend
|
8
|
+
attr_accessor :hooks
|
8
9
|
|
9
10
|
def initialize(name, backend)
|
10
11
|
@name = name
|
11
12
|
@backend = backend
|
12
13
|
@operations = []
|
14
|
+
@hooks = []
|
13
15
|
end
|
14
16
|
|
15
17
|
def add_operation(ope)
|
@@ -24,15 +26,29 @@ module Rundock
|
|
24
26
|
end
|
25
27
|
|
26
28
|
def run
|
29
|
+
Logger.formatter.onrec = true
|
27
30
|
Logger.debug("run node: #{@name}")
|
28
31
|
if @operations.blank?
|
29
32
|
Logger.warn("no operation running: #{@name}")
|
30
33
|
return
|
31
34
|
end
|
35
|
+
|
36
|
+
nodeinfo = nil
|
37
|
+
|
32
38
|
@operations.each do |ope|
|
33
39
|
Logger.debug("run operation: #{ope.class}")
|
40
|
+
nodeinfo = ope.attributes[:nodeinfo] if nodeinfo.nil?
|
34
41
|
ope.run(@backend, ope.attributes)
|
35
42
|
end
|
43
|
+
|
44
|
+
log_buffer = Logger.formatter.flush unless Logger.formatter.buffer.empty?
|
45
|
+
|
46
|
+
@hooks.each do |h|
|
47
|
+
Logger.debug("run hook: #{h.name}")
|
48
|
+
h.hook(log_buffer, nodeinfo)
|
49
|
+
end
|
50
|
+
|
51
|
+
Logger.formatter.onrec = false
|
36
52
|
end
|
37
53
|
end
|
38
54
|
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
require 'rundock/operation/base'
|
2
|
+
|
3
|
+
module Rundock
|
4
|
+
module Hook
|
5
|
+
# You can use this sample as following yaml files for example.
|
6
|
+
#
|
7
|
+
# [hook.yml]
|
8
|
+
# major_log:
|
9
|
+
# hook_type: file
|
10
|
+
# filepath: /var/log/rundock.log
|
11
|
+
# minor_log:
|
12
|
+
# hook_type: file
|
13
|
+
# filepath: /tmp/rundock.log
|
14
|
+
#
|
15
|
+
# [scenario.yml]
|
16
|
+
# - node: anyhost-01
|
17
|
+
# command:
|
18
|
+
# - 'rm -f /tmp/aaa'
|
19
|
+
# hook:
|
20
|
+
# - major_log
|
21
|
+
# - minor_log
|
22
|
+
# - node: localhost
|
23
|
+
# command:
|
24
|
+
# - 'echo aaa > /tmp/abc'
|
25
|
+
# hook: all
|
26
|
+
# ---
|
27
|
+
# anyhost-01:
|
28
|
+
# host: 192.168.1.11
|
29
|
+
# ssh_opts:
|
30
|
+
# port: 22
|
31
|
+
# user: anyuser
|
32
|
+
# key: ~/.ssh/id_rsa
|
33
|
+
# ---
|
34
|
+
class File < Base
|
35
|
+
def hook(log_buffer, node_info)
|
36
|
+
file = ::File.open(@contents[:filepath], 'w')
|
37
|
+
file.puts("[hookname:#{@name} node:#{node_info[:host]}]")
|
38
|
+
log_buffer.each do |log|
|
39
|
+
file.puts("[\%5s:] %s%s\n" % [log.severity, ' ' * 2 * log.indent_depth, log.msg])
|
40
|
+
end
|
41
|
+
file.close
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
data/lib/rundock/runner.rb
CHANGED
@@ -77,7 +77,7 @@ module Rundock
|
|
77
77
|
next if g !~ /^(rundock-plugin-#{plugin})-/
|
78
78
|
next if Gem::Specification.find_by_name(g).nil?
|
79
79
|
Logger.debug("Loading rundock plugin: #{g}")
|
80
|
-
libdir = "#{Gem::Specification.find_by_name(g).full_gem_path}/lib/#{Regexp.last_match(
|
80
|
+
libdir = "#{Gem::Specification.find_by_name(g).full_gem_path}/lib/#{Regexp.last_match(1).gsub(/-/, '/')}"
|
81
81
|
Dir.glob("#{libdir}/*.rb").each do |f|
|
82
82
|
require f.gsub(/.rb$/, '')
|
83
83
|
end
|
data/lib/rundock/version.rb
CHANGED
data/lib/rundock.rb
CHANGED
@@ -6,6 +6,8 @@ require 'rundock/operation/base'
|
|
6
6
|
require 'rundock/operation/task'
|
7
7
|
require 'rundock/operation/command'
|
8
8
|
require 'rundock/operation_factory'
|
9
|
+
require 'rundock/hook_factory'
|
10
|
+
require 'rundock/hook/base'
|
9
11
|
require 'rundock/node'
|
10
12
|
require 'rundock/attribute/base'
|
11
13
|
require 'rundock/attribute/node_attribute'
|
@@ -14,6 +16,7 @@ require 'rundock/backend'
|
|
14
16
|
require 'rundock/builder/base'
|
15
17
|
require 'rundock/builder/default_ssh_builder'
|
16
18
|
require 'rundock/builder/backend_builder'
|
19
|
+
require 'rundock/builder/hook_builder'
|
17
20
|
require 'rundock/builder/operation_builder'
|
18
21
|
require 'rundock/builder/scenario_builder'
|
19
22
|
require 'rundock/runner'
|
data/scenario_sample.yml
CHANGED
@@ -34,6 +34,9 @@
|
|
34
34
|
command:
|
35
35
|
- "hostname"
|
36
36
|
- "uname -a"
|
37
|
+
hook:
|
38
|
+
- mail
|
39
|
+
- file
|
37
40
|
- node: anyhost-01
|
38
41
|
task:
|
39
42
|
- echo_platform
|
@@ -44,6 +47,7 @@
|
|
44
47
|
- errexit: false
|
45
48
|
- "rm /tmp/safetyfile"
|
46
49
|
- "ls -1 /tmp"
|
50
|
+
hook: all
|
47
51
|
---
|
48
52
|
anyhost-01:
|
49
53
|
host: 192.168.1.11
|
@@ -0,0 +1,9 @@
|
|
1
|
+
file_one:
|
2
|
+
hook_type: file
|
3
|
+
filepath: /var/tmp/hello_rundock_from_file_hook_one_scenario
|
4
|
+
file_array_1:
|
5
|
+
hook_type: file
|
6
|
+
filepath: /var/tmp/hello_rundock_from_file_hook_array_1_scenario
|
7
|
+
file_array_2:
|
8
|
+
hook_type: file
|
9
|
+
filepath: /var/tmp/hello_rundock_from_file_hook_array_2_scenario
|
@@ -0,0 +1,15 @@
|
|
1
|
+
- node: localhost
|
2
|
+
command:
|
3
|
+
- "rm -f /var/tmp/hello_rundock_from_file_hook_one_scenario"
|
4
|
+
- "rm -f /var/tmp/hello_rundock_from_file_hook_array_1_scenario"
|
5
|
+
- "rm -f /var/tmp/hello_rundock_from_file_hook_array_2_scenario"
|
6
|
+
hook: file_one
|
7
|
+
- node: anyhost-01
|
8
|
+
command:
|
9
|
+
- "echo aaa"
|
10
|
+
hook:
|
11
|
+
- file_array_1
|
12
|
+
- file_array_2
|
13
|
+
---
|
14
|
+
anyhost-01:
|
15
|
+
host: localhost
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe file('/var/tmp/hello_rundock_from_file_hook_one_scenario') do
|
4
|
+
it { should be_file }
|
5
|
+
its(:content) { should match(/hookname:file_one /) }
|
6
|
+
end
|
7
|
+
|
8
|
+
describe file('/var/tmp/hello_rundock_from_file_hook_array_1_scenario') do
|
9
|
+
it { should be_file }
|
10
|
+
its(:content) { should match(/hookname:file_array_1 /) }
|
11
|
+
end
|
12
|
+
|
13
|
+
describe file('/var/tmp/hello_rundock_from_file_hook_array_2_scenario') do
|
14
|
+
it { should be_file }
|
15
|
+
its(:content) { should match(/hookname:file_array_2 /) }
|
16
|
+
end
|
17
|
+
|
18
|
+
describe file('/var/tmp/hello_rundock_from_file_hook_all_1_scenario') do
|
19
|
+
it { should be_file }
|
20
|
+
its(:content) { should match(/hookname:file_all_1 /) }
|
21
|
+
end
|
22
|
+
|
23
|
+
describe file('/var/tmp/hello_rundock_from_file_hook_all_2_scenario') do
|
24
|
+
it { should be_file }
|
25
|
+
its(:content) { should match(/hookname:file_all_2 /) }
|
26
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
- node: anyhost-01
|
2
|
+
command:
|
3
|
+
- "echo 'hookname:file_all_1 ' > /var/tmp/hello_rundock_from_file_hook_all_1_scenario"
|
4
|
+
- "echo 'hookname:file_all_2 ' > /var/tmp/hello_rundock_from_file_hook_all_2_scenario"
|
5
|
+
hook: all
|
6
|
+
---
|
7
|
+
anyhost-01:
|
8
|
+
host: 172.17.42.1
|
9
|
+
ssh_opts:
|
10
|
+
port: 22222
|
11
|
+
user: tester
|
12
|
+
key: "<replaced_by_platforms>"
|
@@ -0,0 +1,16 @@
|
|
1
|
+
- node: anyhost-01
|
2
|
+
command:
|
3
|
+
- "echo 'hookname:file_one ' > /var/tmp/hello_rundock_from_file_hook_one_scenario"
|
4
|
+
- "echo 'hookname:file_array_1 ' > /var/tmp/hello_rundock_from_file_hook_array_1_scenario"
|
5
|
+
- "echo 'hookname:file_array_2 ' > /var/tmp/hello_rundock_from_file_hook_array_2_scenario"
|
6
|
+
hook:
|
7
|
+
- file_one
|
8
|
+
- file_array_1
|
9
|
+
- file_array_2
|
10
|
+
---
|
11
|
+
anyhost-01:
|
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.
|
4
|
+
version: 0.4.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-08-
|
11
|
+
date: 2015-08-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -150,6 +150,7 @@ files:
|
|
150
150
|
- circle.yml
|
151
151
|
- default_ssh.yml
|
152
152
|
- exe/rundock
|
153
|
+
- hooks_sample.yml
|
153
154
|
- lib/rundock.rb
|
154
155
|
- lib/rundock/attribute/base.rb
|
155
156
|
- lib/rundock/attribute/node_attribute.rb
|
@@ -157,17 +158,21 @@ files:
|
|
157
158
|
- lib/rundock/builder/backend_builder.rb
|
158
159
|
- lib/rundock/builder/base.rb
|
159
160
|
- lib/rundock/builder/default_ssh_builder.rb
|
161
|
+
- lib/rundock/builder/hook_builder.rb
|
160
162
|
- lib/rundock/builder/operation_builder.rb
|
161
163
|
- lib/rundock/builder/scenario_builder.rb
|
162
164
|
- lib/rundock/cli.rb
|
163
165
|
- lib/rundock/ext/hash.rb
|
164
166
|
- lib/rundock/ext/object/blank.rb
|
167
|
+
- lib/rundock/hook/base.rb
|
168
|
+
- lib/rundock/hook_factory.rb
|
165
169
|
- lib/rundock/logger.rb
|
166
170
|
- lib/rundock/node.rb
|
167
171
|
- lib/rundock/operation/base.rb
|
168
172
|
- lib/rundock/operation/command.rb
|
169
173
|
- lib/rundock/operation/task.rb
|
170
174
|
- lib/rundock/operation_factory.rb
|
175
|
+
- lib/rundock/plugin/hook/file.rb
|
171
176
|
- lib/rundock/plugin/operation/deploy.rb
|
172
177
|
- lib/rundock/plugin/operation/host_inventory.rb
|
173
178
|
- lib/rundock/plugin/operation/sample_operation.rb
|
@@ -177,19 +182,26 @@ files:
|
|
177
182
|
- rundock.gemspec
|
178
183
|
- scenario_sample.yml
|
179
184
|
- spec/integration/groups/simple_host_group.yml
|
185
|
+
- spec/integration/hooks/all_file_hooks.yml
|
186
|
+
- spec/integration/hooks/simple_file_hooks.yml
|
180
187
|
- spec/integration/platforms/centos6/Dockerfile
|
181
188
|
- spec/integration/platforms/centos6/setup.sh
|
189
|
+
- spec/integration/platforms/localhost/scenarios/all_file_hooks_scenario.yml
|
182
190
|
- spec/integration/platforms/localhost/scenarios/deploy_scenario.yml
|
183
191
|
- spec/integration/platforms/localhost/scenarios/run_anyway_scenario.yml
|
184
192
|
- spec/integration/platforms/localhost/scenarios/simple_echo_scenario.yml
|
193
|
+
- spec/integration/platforms/localhost/scenarios/simple_file_hooks_scenario.yml
|
185
194
|
- spec/integration/platforms/localhost/scenarios/simple_plugin_scenario.yml
|
186
195
|
- spec/integration/platforms/localhost/scenarios/use_default_ssh_scenario.yml
|
187
196
|
- spec/integration/recipes/deploy_spec.rb
|
197
|
+
- spec/integration/recipes/file_hook_spec.rb
|
188
198
|
- spec/integration/recipes/simple_echo_scenario_spec.rb
|
189
199
|
- spec/integration/recipes/simple_echo_spec.rb
|
190
200
|
- spec/integration/recipes/simple_plugin_scenario_spec.rb
|
201
|
+
- spec/integration/scenarios/all_file_hooks_scenario.yml
|
191
202
|
- spec/integration/scenarios/deploy_scenario.yml
|
192
203
|
- spec/integration/scenarios/simple_echo_scenario.yml
|
204
|
+
- spec/integration/scenarios/simple_file_hooks_scenario.yml
|
193
205
|
- spec/integration/scenarios/simple_plugin_scenario.yml
|
194
206
|
- spec/integration/scenarios/use_default_ssh_scenario.yml
|
195
207
|
- spec/integration/spec_helper.rb
|