itamae 1.0.0.beta29 → 1.0.0.beta30
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/itamae.gemspec +1 -1
- data/lib/itamae.rb +1 -0
- data/lib/itamae/cli.rb +8 -0
- data/lib/itamae/definition.rb +63 -0
- data/lib/itamae/recipe.rb +26 -6
- data/lib/itamae/resource/base.rb +2 -2
- data/lib/itamae/resource/directory.rb +1 -1
- data/lib/itamae/resource/execute.rb +1 -1
- data/lib/itamae/resource/file.rb +2 -2
- data/lib/itamae/resource/git.rb +1 -1
- data/lib/itamae/resource/link.rb +1 -1
- data/lib/itamae/resource/local_ruby_block.rb +1 -1
- data/lib/itamae/resource/mail_alias.rb +1 -1
- data/lib/itamae/resource/package.rb +3 -11
- data/lib/itamae/resource/service.rb +6 -6
- data/lib/itamae/resource/user.rb +1 -1
- data/lib/itamae/version.txt +1 -1
- data/spec/integration/recipes/default.rb +10 -0
- metadata +5 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a8f874dbe2bbea23c2b737a85b36c81a215f2ff2
|
4
|
+
data.tar.gz: 236c5f921b47fde0c43d55d8e5c2050cfad3c71d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a37f3e87c9441cb271b64b6840ed2938fe0ee3bde462f3eec5395514619017743912bf6e257f54493a1a09442316a032b3eec264e4ed6c0ba035424f734b1884
|
7
|
+
data.tar.gz: 97972599e06ad215501ac16f90f9f52fff8e6427766ad24861bf911bdbb9c1c65c0dfa15992504fb44c6796bf1a1fe43fcd360317f079dc8f520323dd0d9d96d
|
data/itamae.gemspec
CHANGED
@@ -18,7 +18,7 @@ Gem::Specification.new do |spec|
|
|
18
18
|
spec.require_paths = ["lib"]
|
19
19
|
|
20
20
|
spec.add_runtime_dependency "thor"
|
21
|
-
spec.add_runtime_dependency "specinfra", "2.0.0.
|
21
|
+
spec.add_runtime_dependency "specinfra", "2.0.0.beta41"
|
22
22
|
spec.add_runtime_dependency "hashie"
|
23
23
|
spec.add_runtime_dependency "ansi"
|
24
24
|
|
data/lib/itamae.rb
CHANGED
data/lib/itamae/cli.rb
CHANGED
@@ -18,6 +18,10 @@ module Itamae
|
|
18
18
|
option :dry_run, type: :boolean, aliases: ['-n']
|
19
19
|
option :ohai, type: :boolean, default: false
|
20
20
|
def local(*recipe_files)
|
21
|
+
if recipe_files.empty?
|
22
|
+
raise "Please specify recipe files."
|
23
|
+
end
|
24
|
+
|
21
25
|
Runner.run(recipe_files, :local, options)
|
22
26
|
end
|
23
27
|
|
@@ -30,6 +34,10 @@ module Itamae
|
|
30
34
|
option :port, type: :numeric, aliases: ['-p']
|
31
35
|
option :ohai, type: :boolean, default: false
|
32
36
|
def ssh(*recipe_files)
|
37
|
+
if recipe_files.empty?
|
38
|
+
raise "Please specify recipe files."
|
39
|
+
end
|
40
|
+
|
33
41
|
Runner.run(recipe_files, :ssh, options)
|
34
42
|
end
|
35
43
|
|
@@ -0,0 +1,63 @@
|
|
1
|
+
require 'itamae'
|
2
|
+
|
3
|
+
module Itamae
|
4
|
+
class Definition < Resource::Base
|
5
|
+
class << self
|
6
|
+
def create_class(name, params, &block)
|
7
|
+
Class.new(self).tap do |klass|
|
8
|
+
klass.definition_block = block
|
9
|
+
|
10
|
+
klass.define_attribute :action, default: :run
|
11
|
+
params.each_pair do |key, value|
|
12
|
+
klass.define_attribute key.to_sym, type: Object, default: value
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def definition_block=(block)
|
18
|
+
@definition_block = block
|
19
|
+
end
|
20
|
+
|
21
|
+
def definition_block
|
22
|
+
@definition_block
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def initialize(*args)
|
27
|
+
super
|
28
|
+
|
29
|
+
construct_resources
|
30
|
+
end
|
31
|
+
|
32
|
+
def run_action(options)
|
33
|
+
@children.run(options)
|
34
|
+
end
|
35
|
+
|
36
|
+
private
|
37
|
+
|
38
|
+
def construct_resources
|
39
|
+
block = self.class.definition_block
|
40
|
+
|
41
|
+
context = Context.new(@attributes.merge(name: resource_name))
|
42
|
+
context.instance_exec(&block)
|
43
|
+
@children = context.children
|
44
|
+
end
|
45
|
+
|
46
|
+
class Context
|
47
|
+
attr_reader :params
|
48
|
+
attr_reader :children
|
49
|
+
|
50
|
+
def initialize(params, &block)
|
51
|
+
@params = params
|
52
|
+
@children = RecipeChildren.new
|
53
|
+
end
|
54
|
+
|
55
|
+
def method_missing(method, name, &block)
|
56
|
+
klass = Resource.get_resource_class(method)
|
57
|
+
resource = klass.new(self, name, &block)
|
58
|
+
@children << resource
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
data/lib/itamae/recipe.rb
CHANGED
@@ -46,14 +46,16 @@ module Itamae
|
|
46
46
|
klass = Resource.get_resource_class(method)
|
47
47
|
resource = klass.new(self, name, &block)
|
48
48
|
@children << resource
|
49
|
-
rescue NameError
|
50
|
-
super
|
51
49
|
end
|
52
50
|
|
53
|
-
def include_recipe(
|
54
|
-
|
51
|
+
def include_recipe(recipe)
|
52
|
+
candidate_paths = [
|
53
|
+
::File.expand_path(recipe, File.dirname(@path)),
|
54
|
+
find_recipe_from_load_path(recipe),
|
55
|
+
].compact
|
56
|
+
target = candidate_paths.find {|path| File.exist?(path) }
|
55
57
|
|
56
|
-
unless
|
58
|
+
unless target
|
57
59
|
raise NotFoundError, "File not found. (#{target})"
|
58
60
|
end
|
59
61
|
|
@@ -65,6 +67,24 @@ module Itamae
|
|
65
67
|
recipe = Recipe.new(@runner, target)
|
66
68
|
@children << recipe
|
67
69
|
end
|
70
|
+
|
71
|
+
def find_recipe_from_load_path(recipe)
|
72
|
+
target = recipe.gsub(/::/, '/')
|
73
|
+
target += '.rb' if target !~ /\.rb$/
|
74
|
+
plugin_name = recipe.split('::')[0]
|
75
|
+
|
76
|
+
$LOAD_PATH.find do |path|
|
77
|
+
if path =~ %r{/itamae-plugin-recipe-#{plugin_name}/}
|
78
|
+
File.join(path, 'itamae', 'plugin', 'recipe', target)
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
def define(name, params = {}, &block)
|
84
|
+
Resource.const_set(
|
85
|
+
Resource.get_resource_class_name(name),
|
86
|
+
Definition.create_class(name, params, &block)
|
87
|
+
)
|
88
|
+
end
|
68
89
|
end
|
69
90
|
end
|
70
|
-
|
data/lib/itamae/resource/base.rb
CHANGED
@@ -65,7 +65,7 @@ module Itamae
|
|
65
65
|
|
66
66
|
unless options[:dry_run]
|
67
67
|
[action].flatten.each do |action|
|
68
|
-
public_send("#{specific_action || action}_action".to_sym)
|
68
|
+
public_send("#{specific_action || action}_action".to_sym, options)
|
69
69
|
end
|
70
70
|
end
|
71
71
|
|
@@ -80,7 +80,7 @@ module Itamae
|
|
80
80
|
exit 2
|
81
81
|
end
|
82
82
|
|
83
|
-
def nothing_action
|
83
|
+
def nothing_action(options)
|
84
84
|
# do nothing
|
85
85
|
end
|
86
86
|
|
data/lib/itamae/resource/file.rb
CHANGED
@@ -61,7 +61,7 @@ module Itamae
|
|
61
61
|
end
|
62
62
|
end
|
63
63
|
|
64
|
-
def create_action
|
64
|
+
def create_action(options)
|
65
65
|
if mode
|
66
66
|
run_specinfra(:change_file_mode, @temppath, mode)
|
67
67
|
end
|
@@ -76,7 +76,7 @@ module Itamae
|
|
76
76
|
run_specinfra(:move_file, @temppath, path)
|
77
77
|
end
|
78
78
|
|
79
|
-
def delete_action
|
79
|
+
def delete_action(options)
|
80
80
|
if run_specinfra(:check_file_is_file, path)
|
81
81
|
# TODO: delegate to Specinfra
|
82
82
|
run_command(["rm", path])
|
data/lib/itamae/resource/git.rb
CHANGED
data/lib/itamae/resource/link.rb
CHANGED
@@ -7,7 +7,7 @@ module Itamae
|
|
7
7
|
define_attribute :mail_alias, type: String, default_name: true
|
8
8
|
define_attribute :recipient, type: String, required: true
|
9
9
|
|
10
|
-
def create_action
|
10
|
+
def create_action(options)
|
11
11
|
if !run_specinfra(:check_mail_alias_is_aliased_to, mail_alias, recipient)
|
12
12
|
run_specinfra(:add_mail_alias, mail_alias, recipient)
|
13
13
|
end
|
@@ -21,18 +21,10 @@ module Itamae
|
|
21
21
|
end
|
22
22
|
end
|
23
23
|
|
24
|
-
def install_action
|
24
|
+
def install_action(action_options)
|
25
25
|
unless run_specinfra(:check_package_is_installed, name, version)
|
26
|
-
|
27
|
-
|
28
|
-
package_name = name
|
29
|
-
package_name += "=#{version}" if version
|
30
|
-
run_command("DEBIAN_FRONTEND='noninteractive' apt-get -y #{options} install #{shell_escape(package_name)}")
|
31
|
-
updated!
|
32
|
-
else
|
33
|
-
run_specinfra(:install_package, name, version)
|
34
|
-
updated!
|
35
|
-
end
|
26
|
+
run_specinfra(:install_package, name, version, options)
|
27
|
+
updated!
|
36
28
|
end
|
37
29
|
end
|
38
30
|
end
|
@@ -24,27 +24,27 @@ module Itamae
|
|
24
24
|
end
|
25
25
|
end
|
26
26
|
|
27
|
-
def start_action
|
27
|
+
def start_action(options)
|
28
28
|
run_specinfra(:start_service, name)
|
29
29
|
end
|
30
30
|
|
31
|
-
def stop_action
|
31
|
+
def stop_action(options)
|
32
32
|
run_specinfra(:stop_service, name)
|
33
33
|
end
|
34
34
|
|
35
|
-
def restart_action
|
35
|
+
def restart_action(options)
|
36
36
|
run_specinfra(:restart_service, name)
|
37
37
|
end
|
38
38
|
|
39
|
-
def reload_action
|
39
|
+
def reload_action(options)
|
40
40
|
run_specinfra(:reload_service, name)
|
41
41
|
end
|
42
42
|
|
43
|
-
def enable_action
|
43
|
+
def enable_action(options)
|
44
44
|
run_specinfra(:enable_service, name)
|
45
45
|
end
|
46
46
|
|
47
|
-
def disable_action
|
47
|
+
def disable_action(options)
|
48
48
|
run_specinfra(:disable_service, name)
|
49
49
|
end
|
50
50
|
end
|
data/lib/itamae/resource/user.rb
CHANGED
data/lib/itamae/version.txt
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.0.0.
|
1
|
+
1.0.0.beta30
|
@@ -170,3 +170,13 @@ file "/tmp/should_not_exist" do
|
|
170
170
|
action :delete
|
171
171
|
end
|
172
172
|
|
173
|
+
#####
|
174
|
+
|
175
|
+
define :definition_example, key: 'default' do
|
176
|
+
execute "echo 'name:#{params[:name]},key:#{params[:key]}' > /tmp/created_by_definition"
|
177
|
+
end
|
178
|
+
|
179
|
+
definition_example "name" do
|
180
|
+
key 'value'
|
181
|
+
end
|
182
|
+
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: itamae
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.0.
|
4
|
+
version: 1.0.0.beta30
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ryota Arai
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-08-
|
11
|
+
date: 2014-08-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: thor
|
@@ -30,14 +30,14 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - '='
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 2.0.0.
|
33
|
+
version: 2.0.0.beta41
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - '='
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: 2.0.0.
|
40
|
+
version: 2.0.0.beta41
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: hashie
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -156,6 +156,7 @@ files:
|
|
156
156
|
- lib/itamae.rb
|
157
157
|
- lib/itamae/backend.rb
|
158
158
|
- lib/itamae/cli.rb
|
159
|
+
- lib/itamae/definition.rb
|
159
160
|
- lib/itamae/logger.rb
|
160
161
|
- lib/itamae/node.rb
|
161
162
|
- lib/itamae/notification.rb
|