itamae-spec 0.0.3 → 0.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|