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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA256:
3
- metadata.gz: c331c48127fb1a98218a1a3c3558ced75f5be9c8ca8498a5a5cc90d1f317314c
4
- data.tar.gz: 61b144fafd16ca07d70edbfd545021433a47db68872ddf61d44ad7a42c93b752
2
+ SHA1:
3
+ metadata.gz: af9d5a2459650b8225a75cb2a4d458d57cf92e44
4
+ data.tar.gz: fde860c26863479fc733668a0e2ad807cc517626
5
5
  SHA512:
6
- metadata.gz: a66032f85bcee1eb44d9fad26a0a1ccffab6d76eda4f6cb8965f1c1f22fd121519fe6347b4e3b1cfb72c04087227b4f905714865019b384841c1b8527abc4627
7
- data.tar.gz: 51d791fe0021ca63c798441d214d018d0f74301b92cb91ccece9ce1b05edf7f00902777fa6242bf8820f0f9802332e9d662c5b90be8a1f22e58612706b0d8de2
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
 
@@ -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", "~> 2"
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"
@@ -1,4 +1,5 @@
1
1
  require 'multi_json'
2
+ require 'aws-sdk-route53'
2
3
 
3
4
  module Itamae
4
5
  module Resource
@@ -1,4 +1,4 @@
1
- require 'aws-sdk'
1
+ require 'aws-sdk-s3'
2
2
 
3
3
  module Itamae
4
4
  module Resource
@@ -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(hash)
25
- set = hash[:environments][:set]
26
- raise EnvironmentsSetError, 'Environments Set is not specified in nodefile' if set.nil?
27
- JSON.parse(File.read("environments/#{set}.json"), symbolize_names: true)
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. - environments/#{set}.json"
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 << " -p #{hash[:environments][:ssh_port]}"
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 = ItamaeTask.new
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
- environments = task.load_environments(node)
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
- environments = task.load_environments(node)
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
- environments = task.load_environments(node)
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
- environments = task.load_environments(node)
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
@@ -1 +1 @@
1
- 0.0.3
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.3
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: 2018-03-16 00:00:00.000000000 Z
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: '2'
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: '2'
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.7.3
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