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 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