itamae-spec 0.0.3 → 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/README.md +9 -0
- data/itamae-spec.gemspec +4 -1
- data/lib/itamae-spec/resource/route53_record.rb +1 -0
- data/lib/itamae-spec/resource/s3_file.rb +1 -1
- data/lib/itamae-spec/task/base.rb +26 -0
- data/lib/itamae-spec/task/base_task.rb +35 -7
- data/lib/itamae-spec/task/itamae_task.rb +3 -7
- data/lib/itamae-spec/task/local_itamae_task.rb +1 -7
- data/lib/itamae-spec/task/local_serverspec_task.rb +1 -6
- data/lib/itamae-spec/task/serverspec_task.rb +2 -6
- data/lib/itamae-spec/version.txt +1 -1
- metadata +48 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: af9d5a2459650b8225a75cb2a4d458d57cf92e44
|
4
|
+
data.tar.gz: fde860c26863479fc733668a0e2ad807cc517626
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fbbf48963e518d50a3fc5404d7a8bc8150701c289d0d633991a88aa3c2e0329ec843f4eae671beecdef7ffaa998a4bd627a5ed3479fcd8f1423102c23356b086
|
7
|
+
data.tar.gz: 01d7ac3b79977f89b726a93246f995e7b376d8386fab91f6ef642c8dfbef00fbdcbe5d4103319291605d5480cb596c10f1c3e29b1dfbce8a89e5216da31c781b
|
data/README.md
CHANGED
@@ -21,6 +21,15 @@ $ itamae-spec init your-project-name
|
|
21
21
|
$ aws configure
|
22
22
|
```
|
23
23
|
|
24
|
+
## Tips for git user
|
25
|
+
- Add this content to your `.gitignore`
|
26
|
+
```
|
27
|
+
tmp-nodes/
|
28
|
+
logs/
|
29
|
+
Project.json
|
30
|
+
!.keep
|
31
|
+
```
|
32
|
+
|
24
33
|
## Getting Started
|
25
34
|
- [Getting Started](https://github.com/kammy1231/itamae-spec/wiki/Getting-Started)
|
26
35
|
|
data/itamae-spec.gemspec
CHANGED
@@ -20,7 +20,10 @@ It can be provisioning using itamae's some AWS resources.}
|
|
20
20
|
spec.require_paths = ["lib"]
|
21
21
|
spec.required_ruby_version = Gem::Requirement.new(">= 2.0")
|
22
22
|
|
23
|
-
spec.add_runtime_dependency "aws-sdk", "~>
|
23
|
+
spec.add_runtime_dependency "aws-sdk-core", "~> 3"
|
24
|
+
spec.add_runtime_dependency "aws-sdk-ec2"
|
25
|
+
spec.add_runtime_dependency "aws-sdk-s3"
|
26
|
+
spec.add_runtime_dependency "aws-sdk-route53"
|
24
27
|
spec.add_runtime_dependency "serverspec", "~> 2.1"
|
25
28
|
spec.add_runtime_dependency "itamae", "1.9.11"
|
26
29
|
spec.add_runtime_dependency "rake"
|
@@ -5,6 +5,7 @@ module ItamaeSpec
|
|
5
5
|
module Task
|
6
6
|
module Base
|
7
7
|
RoleLoadError = Class.new(StandardError)
|
8
|
+
EnvironmentsLoadError = Class.new(StandardError)
|
8
9
|
|
9
10
|
class ::Hash
|
10
11
|
def deep_merge(other_hash, &block)
|
@@ -39,6 +40,31 @@ module ItamaeSpec
|
|
39
40
|
end
|
40
41
|
|
41
42
|
class << self
|
43
|
+
def get_roles(node_file)
|
44
|
+
roles = []
|
45
|
+
JSON.parse(File.read(node_file))['run_list'].each do |recipe|
|
46
|
+
if /role\[(.+)\]/.match?(recipe)
|
47
|
+
roles << recipe.gsub(/role\[(.+)\]/, '\1')
|
48
|
+
end
|
49
|
+
end
|
50
|
+
rescue JSON::ParserError
|
51
|
+
raise RoleLoadError, "JSON Parser Faild. - #{node_file}"
|
52
|
+
rescue Errno::ENOENT
|
53
|
+
raise RoleLoadError, "No such node file or directory - #{node_fie}"
|
54
|
+
else
|
55
|
+
roles
|
56
|
+
end
|
57
|
+
|
58
|
+
def get_environments(node_file)
|
59
|
+
environments = JSON.parse(File.read(node_file))['environments']['set']
|
60
|
+
rescue JSON::ParserError
|
61
|
+
raise EnvironmentsLoadError, "JSON Parser Faild. - #{node_file}"
|
62
|
+
rescue Errno::ENOENT
|
63
|
+
raise EnvironmentsLoadError, "No such node file or directory - #{node_fie}"
|
64
|
+
else
|
65
|
+
environments
|
66
|
+
end
|
67
|
+
|
42
68
|
def get_role_recipes(role)
|
43
69
|
recipes = []
|
44
70
|
JSON.parse(File.read("roles/#{role}.json"))['run_list'].each do |recipe|
|
@@ -3,9 +3,10 @@ require 'itamae-spec/task/base'
|
|
3
3
|
module ItamaeSpec
|
4
4
|
module Task
|
5
5
|
class BaseTask
|
6
|
+
|
7
|
+
include Base
|
6
8
|
extend Rake::DSL if defined? Rake::DSL
|
7
9
|
|
8
|
-
EnvironmentsSetError = Class.new(StandardError)
|
9
10
|
LoadRecipeError = Class.new(StandardError)
|
10
11
|
LoadAttributeError = Class.new(StandardError)
|
11
12
|
|
@@ -21,12 +22,20 @@ module ItamaeSpec
|
|
21
22
|
run_list.flatten
|
22
23
|
end
|
23
24
|
|
24
|
-
def load_environments(
|
25
|
-
|
26
|
-
|
27
|
-
JSON.
|
25
|
+
def load_environments(environments)
|
26
|
+
JSON.parse(File.read("environments/#{environments}.json"), symbolize_names: true)
|
27
|
+
rescue JSON::ParserError
|
28
|
+
raise LoadAttributeError, "JSON Parser Failed. - environments/#{environments}.json"
|
29
|
+
end
|
30
|
+
|
31
|
+
def load_role_attributes(role)
|
32
|
+
attributes = JSON.parse(File.read("roles/#{role}.json"), symbolize_names: true)
|
33
|
+
attributes.delete(:run_list)
|
34
|
+
key = attributes[role.to_sym]
|
35
|
+
raise LoadAttributeError, 'Role attribute is not specified in :role_name' if key.nil?
|
36
|
+
attributes
|
28
37
|
rescue JSON::ParserError
|
29
|
-
raise LoadAttributeError, "JSON Parser Failed. -
|
38
|
+
raise LoadAttributeError, "JSON Parser Failed. - roles/#{role}.json"
|
30
39
|
end
|
31
40
|
|
32
41
|
def load_recipe_attributes(run_list)
|
@@ -58,6 +67,21 @@ module ItamaeSpec
|
|
58
67
|
merged
|
59
68
|
end
|
60
69
|
|
70
|
+
def apply_attributes(node_file)
|
71
|
+
node_attributes = load_node_attributes(node_file)
|
72
|
+
environments = Base.get_environments(node_file)
|
73
|
+
environments_attributes = load_environments(environments)
|
74
|
+
roles = Base.get_roles(node_file)
|
75
|
+
role_attributes_list = roles.map {|role | load_role_attributes(role) }
|
76
|
+
run_list = load_run_list(node_file)
|
77
|
+
recipe_attributes_list = load_recipe_attributes(run_list)
|
78
|
+
|
79
|
+
merged_recipe = merge_attributes(recipe_attributes_list)
|
80
|
+
merged_environments = merge_attributes(merged_recipe, environments_attributes)
|
81
|
+
merged_role = merge_attributes(role_attributes_list)
|
82
|
+
attributes = merge_attributes(merged_role, node_attributes)
|
83
|
+
end
|
84
|
+
|
61
85
|
def create_tmp_nodes(filename, hash)
|
62
86
|
json = hash.to_pretty_json
|
63
87
|
Base.write_tmp_nodes(filename) {|f| f.puts json }
|
@@ -74,7 +98,11 @@ module ItamaeSpec
|
|
74
98
|
end
|
75
99
|
|
76
100
|
command << " -u #{hash[:environments][:ssh_user]}"
|
77
|
-
command <<
|
101
|
+
command << if hash[:environments][:ssh_port]
|
102
|
+
" -p #{hash[:environments][:ssh_port]}"
|
103
|
+
else
|
104
|
+
' -p 22'
|
105
|
+
end
|
78
106
|
command << " -i keys/#{hash[:environments][:ssh_key]}" if hash[:environments][:ssh_key]
|
79
107
|
command << " -j tmp-nodes/#{node_name}.json"
|
80
108
|
|
@@ -21,7 +21,7 @@ module ItamaeSpec
|
|
21
21
|
end
|
22
22
|
|
23
23
|
Itamae.logger.formatter.colored = true
|
24
|
-
task =
|
24
|
+
task = BaseTask.new
|
25
25
|
|
26
26
|
namespace :itamae do
|
27
27
|
all = []
|
@@ -77,12 +77,7 @@ module ItamaeSpec
|
|
77
77
|
|
78
78
|
begin
|
79
79
|
run_list = task.load_run_list(node_file)
|
80
|
-
|
81
|
-
recipe_attributes_list = task.load_recipe_attributes(run_list)
|
82
|
-
|
83
|
-
merged_recipe = task.merge_attributes(recipe_attributes_list)
|
84
|
-
merged_environments = task.merge_attributes(merged_recipe, environments)
|
85
|
-
attributes = task.merge_attributes(merged_environments, node)
|
80
|
+
attributes = task.apply_attributes(node_file)
|
86
81
|
task.create_tmp_nodes(node_name, attributes)
|
87
82
|
|
88
83
|
command = task.create_itamae_command(node_name, attributes)
|
@@ -100,6 +95,7 @@ module ItamaeSpec
|
|
100
95
|
exit 1
|
101
96
|
end
|
102
97
|
rescue => e
|
98
|
+
Itamae.logger.error e.backtrace[0]
|
103
99
|
Itamae.logger.error e.inspect
|
104
100
|
Itamae.logger.info "From node file: #{node_file}"
|
105
101
|
exit 2
|
@@ -48,17 +48,11 @@ module ItamaeSpec
|
|
48
48
|
|
49
49
|
begin
|
50
50
|
run_list = task.load_run_list(node_file)
|
51
|
-
|
52
|
-
recipe_attributes_list = task.load_recipe_attributes(run_list)
|
53
|
-
|
54
|
-
merged_recipe = task.merge_attributes(recipe_attributes_list)
|
55
|
-
merged_environments = task.merge_attributes(merged_recipe, environments)
|
56
|
-
attributes = task.merge_attributes(merged_environments, node)
|
51
|
+
attributes = task.apply_attributes(node_file)
|
57
52
|
task.create_tmp_nodes(node_name, attributes)
|
58
53
|
|
59
54
|
command = task.create_itamae_command(node_name, attributes)
|
60
55
|
command_recipe = task.list_recipe_filepath(run_list)
|
61
|
-
command_recipe.sort_by! {|item| File.dirname(item) }
|
62
56
|
command << command_recipe.join
|
63
57
|
|
64
58
|
task.runner_display(attributes[:run_list], run_list, command)
|
@@ -90,12 +90,7 @@ module ItamaeSpec
|
|
90
90
|
|
91
91
|
begin
|
92
92
|
run_list = task.load_run_list(node_file)
|
93
|
-
|
94
|
-
recipe_attributes_list = task.load_recipe_attributes(run_list)
|
95
|
-
|
96
|
-
merged_recipe = task.merge_attributes(recipe_attributes_list)
|
97
|
-
merged_environments = task.merge_attributes(merged_recipe, environments)
|
98
|
-
attributes = task.merge_attributes(merged_environments, node)
|
93
|
+
attributes = task.apply_attributes(node_file)
|
99
94
|
task.create_tmp_nodes(node_name, attributes)
|
100
95
|
|
101
96
|
command = task.create_spec_command(node_name, attributes)
|
@@ -76,12 +76,7 @@ module ItamaeSpec
|
|
76
76
|
|
77
77
|
begin
|
78
78
|
run_list = task.load_run_list(node_file)
|
79
|
-
|
80
|
-
recipe_attributes_list = task.load_recipe_attributes(run_list)
|
81
|
-
|
82
|
-
merged_recipe = task.merge_attributes(recipe_attributes_list)
|
83
|
-
merged_environments = task.merge_attributes(merged_recipe, environments)
|
84
|
-
attributes = task.merge_attributes(merged_environments, node)
|
79
|
+
attributes = task.apply_attributes(node_file)
|
85
80
|
task.create_tmp_nodes(node_name, attributes)
|
86
81
|
|
87
82
|
command = task.create_spec_command(node_name, attributes)
|
@@ -99,6 +94,7 @@ module ItamaeSpec
|
|
99
94
|
exit 1
|
100
95
|
end
|
101
96
|
rescue => e
|
97
|
+
Itamae.logger.error e.backtrace[0]
|
102
98
|
Itamae.logger.error e.inspect
|
103
99
|
Itamae.logger.info "From node file: #{node_file}"
|
104
100
|
exit 2
|
data/lib/itamae-spec/version.txt
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.4
|
metadata
CHANGED
@@ -1,29 +1,71 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: itamae-spec
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- kammy1231
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2019-10-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name: aws-sdk
|
14
|
+
name: aws-sdk-core
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
19
|
+
version: '3'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '
|
26
|
+
version: '3'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: aws-sdk-ec2
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: aws-sdk-s3
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: aws-sdk-route53
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
27
69
|
- !ruby/object:Gem::Dependency
|
28
70
|
name: serverspec
|
29
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -283,7 +325,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
283
325
|
version: '0'
|
284
326
|
requirements: []
|
285
327
|
rubyforge_project:
|
286
|
-
rubygems_version: 2.
|
328
|
+
rubygems_version: 2.5.2.3
|
287
329
|
signing_key:
|
288
330
|
specification_version: 4
|
289
331
|
summary: Customized version of Itamae. Integration with Serverspec. It can be provisioning
|