itamae-mitsurin 0.9 → 0.10

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
2
  SHA1:
3
- metadata.gz: 0a45ec76366a924a92771e4cf08f53c866383967
4
- data.tar.gz: 1b142ae15b1d125bbcd642872e4a2865da5bd939
3
+ metadata.gz: 1e9e9d696a72e3f572493cd3988add3586c3c586
4
+ data.tar.gz: 205ae88f6ba75366e4ab0a5f445f71fc55e44e74
5
5
  SHA512:
6
- metadata.gz: 6f0cadfe3f00e8a2c7b0304734402365eb473fc30d587cd8f0dbb0669930429f72cbf6ae6ca03e0fdcee5da4d83393c18cfb2942d7fed83f0956b8c813163566
7
- data.tar.gz: 98b3fac81b5f878849588417f7ce3b96f7a6587d8ae8b7523f1bdc08f70396fabea63e6195ec61ce4fa6294037e4ca3a0355fc6fc83c131a5a9beb20ae92acae
6
+ metadata.gz: 9a6dd97e33fea2ad1546a8b86bcb99e98f491e1752b667b7c69e6cea698bdc0888e0f3411095a0ae9003634d3de67921a4b753b467b497d9de5ffd794ec95dc6
7
+ data.tar.gz: 1ee8b4c77729e89e235f8ecc0ccce49f7db1e76795ad4109ff427d0e9765b86de4fd36e6f4f332b894cc7ff6bb839e4bc798aba02af99c5243c62cb476f8e23d
data/README.md CHANGED
@@ -13,8 +13,8 @@ Customized version of Itamae and plugin
13
13
 
14
14
  ```
15
15
  $ gem install itamae-mitsurin
16
- $ mkdir project_dir
17
- $ cd project_dir
16
+ $ mkdir [project_dir]
17
+ $ cd [project_dir]
18
18
  $ manaita init
19
19
  ```
20
20
 
@@ -34,6 +34,13 @@ aws_ebs_volume "ebs_name" do
34
34
  end
35
35
  ```
36
36
 
37
+ ## Wiki
38
+ - [itamae-mitsurin wiki](https://github.com/kammy1231/itamae-mitsurin/wiki/itamae-mitsurin-wiki)
39
+
40
+ ## Reference
41
+ - [itamae wiki](https://github.com/itamae-kitchen/itamae/wiki)
42
+ - [Serverspec host_inventory](http://serverspec.org/host_inventory.html)
43
+
37
44
  ## Contributing
38
45
 
39
46
  If you have a problem, please [create an issue](https://github.com/kammy1231/itamae-mitsurin) or a pull request.
data/Rakefile CHANGED
@@ -25,11 +25,11 @@ Rake::TestTask.new
25
25
  # t.test_files = FileList['test/test*.rb'].exclude('test/test_assoccoords.rb')
26
26
  #end
27
27
 
28
- #Rake::ExtensionTask.new do |ext|
29
- # ext.name = 'itamae-mitsurin'
30
- # ext.ext_dir = 'ext/'
31
- # ext.lib_dir = 'lib/'
32
- #end
28
+ Rake::ExtensionTask.new do |ext|
29
+ ext.name = 'itamae-mitsurin'
30
+ ext.ext_dir = 'ext/'
31
+ ext.lib_dir = 'lib/'
32
+ end
33
33
 
34
34
  Rake::PackageTask.new('itamae-mitsurin', "#{version}") do |t|
35
35
  t.need_tar_gz = true
@@ -48,10 +48,25 @@ module ItamaeMitsurin
48
48
  %w!debug info warn error fatal unknown!.each do |level|
49
49
  module_eval(<<-EOC, __FILE__, __LINE__ + 1)
50
50
  def #{level}(msg)
51
- super(" " * indent_depth + msg)
51
+ super(indent_msg(msg))
52
52
  end
53
53
  EOC
54
54
  end
55
+
56
+ private
57
+
58
+ def indent_msg(msg)
59
+ spaces = " " * indent_depth
60
+ case msg
61
+ when ::String
62
+ "#{spaces}#{msg}"
63
+ when ::Exception
64
+ "#{spaces}#{msg.message} (#{msg.class})\n" <<
65
+ (msg.backtrace || []).map {|f| "#{spaces}#{f}"}.join("\n")
66
+ else
67
+ "#{spaces}#{msg.inspect}"
68
+ end
69
+ end
55
70
  end
56
71
 
57
72
  class Formatter
@@ -2,10 +2,6 @@ require 'itamae-mitsurin/version'
2
2
  require 'itamae-mitsurin/mitsurin/cli'
3
3
  require 'itamae-mitsurin/mitsurin/creators'
4
4
  require 'aws-sdk'
5
- #require 'itamae-mitsurin/mitsurin/itamae_task'
6
- #require 'itamae-mitsurin/mitsurin/serverspec_task'
7
- #require 'itamae-mitsurin/mitsurin/itamae_with_git_task'
8
-
9
5
 
10
6
  module ItamaeMitsurin
11
7
  module Mitsurin
@@ -1,2 +1,3 @@
1
1
  require 'itamae-mitsurin/mitsurin/itamae_task'
2
+ #require 'itamae-mitsurin/mitsurin/itamae_with_git_task'
2
3
  require 'itamae-mitsurin/mitsurin/serverspec_task'
@@ -1,193 +1,130 @@
1
1
  require 'json'
2
2
  require 'highline'
3
+ require 'itamae-mitsurin/mitsurin/task_base'
3
4
  include Rake::DSL if defined? Rake::DSL
4
5
 
5
- module Itamae
6
+ module ItamaeMitsurin
6
7
  module Mitsurin
7
8
  class ItamaeTask
8
9
 
9
- class << self
10
- class ::Hash
11
- def deep_merge(other)
12
- merger = lambda {|key, v1, v2| Hash === v1 && Hash === v2 ? v1.merge(v2, &merger) : v2}
13
- self.merge(other, &merger)
14
- end
15
-
16
- def deep_merge!(other)
17
- merger = lambda {|key, v1, v2| Hash === v1 && Hash === v2 ? v1.merge(v2, &merger) : v2}
18
- self.merge!(other, &merger)
19
- end
20
- end
10
+ namespace :itamae do
11
+ Dir.glob("nodes/**/*.json").each do |node_file|
21
12
 
22
- def self.get_roles(node_file)
23
- roles = []
24
- JSON.parse(File.read(node_file))['run_list'].each do |role|
25
- roles << role.gsub(/role\[(.+)\]/, '\1') if /role\[(.+)\]/ === role
26
- end
27
- roles
28
- end
13
+ bname = File.basename(node_file, '.json')
14
+ node_h = JSON.parse(File.read(node_file), symbolize_names: true)
29
15
 
30
- def self.get_recipes(role)
31
- recipes = []
32
- JSON.parse(File.read("roles/#{role}.json"))['run_list'].each do |recipe|
33
- if /recipe\[(.+)::(.+)\]/ === recipe
34
- recipes << {recipe.gsub(/recipe\[(.+)::(.+)\]/, '\1') => recipe.gsub(/recipe\[(.+)::(.+)\]/, '\2')}
16
+ desc "Itamae to #{bname}"
17
+ task node_h[:environments][:hostname].split(".")[0] do
18
+ begin
19
+ recipes = []
20
+ TaskBase.get_roles(node_file).each do |role|
21
+ recipes << TaskBase.get_recipes(role)
22
+ end
23
+ TaskBase.get_node_recipes(node_file).each do |recipe|
24
+ recipes << recipe
25
+ end
26
+ rescue Exception => e
27
+ puts e.class.to_s + ", " + e.backtrace[0].to_s
28
+ puts "nodefile or role error, nodefile:#{node_file} reason:#{e.message}"
35
29
  else
36
- recipes << {recipe.gsub(/recipe\[(.+)\]/, '\1') => nil}
30
+ recipes.flatten!
37
31
  end
38
- end
39
- recipes
40
- end
41
32
 
42
- def self.get_node_recipes(node_file)
43
- recipes = []
44
- JSON.parse(File.read(node_file))['run_list'].each do |recipe|
45
- if /recipe\[(.+)::(.+)\]/ === recipe
46
- recipes << {recipe.gsub(/recipe\[(.+)::(.+)\]/, '\1') => recipe.gsub(/recipe\[(.+)::(.+)\]/, '\2')}
47
- else
48
- recipes << {recipe.gsub(/recipe\[(.+)\]/, '\1') => nil} unless /role\[(.+)\]/ === recipe
33
+ # get env attr
34
+ begin
35
+ env_set = node_h[:environments][:set]
36
+ env_h = JSON.parse(File.read("environments/#{env_set}.json"), symbolize_names: true)
37
+ rescue Exception => e
38
+ puts e.class.to_s + ", " + e.backtrace[0].to_s
39
+ puts "nodefile or environments error, nodefile:#{node_file} reason:#{e.message}"
49
40
  end
50
- end
51
- recipes
52
- end
53
-
54
- def self.jq(*objs)
55
- par = nil
56
- objs.each {|obj| par = JSON::pretty_generate(obj, :allow_nan => true, :max_nesting => false)}
57
- return par
58
- end
59
41
 
60
- def self.write_json(filename)
61
- File.open "tmp-nodes/#{filename}.json", 'w' do |f|
62
- f.flock File::LOCK_EX
63
- yield f
64
- f.flock File::LOCK_UN
65
- end
66
- end
67
-
68
- hl = HighLine.new
69
-
70
- namespace :itamae do
71
- Dir.glob("nodes/**/*.json").each do |node_file|
72
-
73
- bname = File.basename(node_file, '.json')
74
- node_h = JSON.parse(File.read(node_file), symbolize_names: true)
75
-
76
- desc "Itamae to #{bname}"
77
- task node_h[:environments][:hostname].split(".")[0] do
78
- begin
79
- recipes = []
80
- get_roles(node_file).each do |role|
81
- recipes << get_recipes(role)
82
- end
83
- get_node_recipes(node_file).each do |recipe|
84
- recipes << recipe
85
- end
86
- rescue Exception => e
87
- puts e.class.to_s + ", " + e.backtrace[0].to_s
88
- puts "nodefile or role error, nodefile:#{node_file} reason:#{e.message}"
89
- exit 1
42
+ # get recipes attr
43
+ recipe_attr_file = []
44
+ recipes.each do |recipe_h|
45
+ if recipe_h["#{recipe_h.keys.join}"].nil?
46
+ recipe_attr_file.insert 0,
47
+ Dir.glob("site-cookbooks/**/#{recipe_h.keys.join}/attributes/default.json")
90
48
  else
91
- recipes.flatten!
92
- end
93
-
94
- # get env attr
95
- begin
96
- env_set = node_h[:environments][:set]
97
- env_h = JSON.parse(File.read("environments/#{env_set}.json"), symbolize_names: true)
98
- rescue Exception => e
99
- puts e.class.to_s + ", " + e.backtrace[0].to_s
100
- puts "nodefile or environments error, nodefile:#{node_file} reason:#{e.message}"
101
- exit 1
102
- end
103
-
104
- # get recipes attr
105
- recipe_attr_file = []
106
- recipes.each do |recipe_h|
107
- if recipe_h["#{recipe_h.keys.join}"].nil?
108
- recipe_attr_file.insert 0,
109
- Dir.glob("site-cookbooks/**/#{recipe_h.keys.join}/attributes/default.json")
110
- else
111
- recipe_attr_file <<
112
- Dir.glob("site-cookbooks/**/#{recipe_h.keys.join}/attributes/#{recipe_h["#{recipe_h.keys.join}"]}.json")
113
- end
49
+ recipe_attr_file <<
50
+ Dir.glob("site-cookbooks/**/#{recipe_h.keys.join}/attributes/#{recipe_h["#{recipe_h.keys.join}"]}.json")
114
51
  end
52
+ end
115
53
 
116
- recipe_attr_file.flatten!
54
+ recipe_attr_file.flatten!
117
55
 
118
- # recipes attr other=env
119
- recipe_env_h_a = []
120
- recipe_attr_file.each do |file|
121
- recipe_h = JSON.parse(File.read(file), symbolize_names: true)
122
- recipe_env_h_a << recipe_h.deep_merge(env_h)
123
- end
56
+ # recipes attr other=env
57
+ recipe_env_h_a = []
58
+ recipe_attr_file.each do |file|
59
+ recipe_h = JSON.parse(File.read(file), symbolize_names: true)
60
+ recipe_env_h_a << recipe_h.deep_merge(env_h)
61
+ end
124
62
 
125
- # recipe attr other=recipes_env
126
- moto = recipe_env_h_a[0]
127
- recipe_env_h_a.each {|hash| moto.deep_merge!(hash)}
128
- recipe_env_h = moto
63
+ # recipe attr other=recipes_env
64
+ moto = recipe_env_h_a[0]
65
+ recipe_env_h_a.each {|hash| moto.deep_merge!(hash)}
66
+ recipe_env_h = moto
129
67
 
130
- if recipe_env_h.nil?
131
- # env attr other=node
132
- node_env_h = env_h.deep_merge(node_h)
133
- node_env_j = jq node_env_h
134
- write_json(bname) {|file| file.puts node_env_j}
135
- else
136
- # recipe_env attr other=node
137
- recipe_env_node_h = recipe_env_h.deep_merge(node_h)
138
- recipe_env_node_j = jq recipe_env_node_h
139
- write_json(bname) {|file| file.puts recipe_env_node_j}
140
- end
68
+ if recipe_env_h.nil?
69
+ # env attr other=node
70
+ node_env_h = env_h.deep_merge(node_h)
71
+ node_env_j = TaskBase.jq node_env_h
72
+ TaskBase.write_json(bname) {|file| file.puts node_env_j}
73
+ else
74
+ # recipe_env attr other=node
75
+ recipe_env_node_h = recipe_env_h.deep_merge(node_h)
76
+ recipe_env_node_j = TaskBase.jq recipe_env_node_h
77
+ TaskBase.write_json(bname) {|file| file.puts recipe_env_node_j}
78
+ end
141
79
 
142
- recipes << {'_base' => nil}
143
- node_property = JSON.parse(File.read("tmp-nodes/#{bname}.json"), symbolize_names: true)
144
- node = node_property[:environments][:hostname]
145
- ssh_user = node_property[:environments][:ssh_user]
146
- ssh_password = node_property[:environments][:ssh_password]
147
- sudo_password = node_property[:environments][:sudo_password]
148
- ssh_port = node_property[:environments][:ssh_port]
149
- ssh_key = node_property[:environments][:ssh_key]
150
-
151
- ENV['TARGET_HOST'] = node
152
- ENV['NODE_FILE'] = node_file
153
- ENV['SSH_PASSWORD'] = ssh_password
154
- ENV['SUDO_PASSWORD'] = sudo_password
155
-
156
- command = "bundle exec itamae ssh"
157
- command << " -h #{node}"
158
- command << " -u #{ssh_user}"
159
- command << " -p #{ssh_port}"
160
- command << " -i keys/#{ssh_key}" unless ssh_key.nil?
161
- command << " -j tmp-nodes/#{bname}.json"
162
- command << " --shell=bash"
163
- command << " --ask-password" unless ssh_password.nil?
164
- command << " --dry-run" if ENV['dry_run'] == "true"
165
- command << " -l debug" if ENV['debug'] == "true"
80
+ recipes << {'_base' => nil}
81
+ node_property = JSON.parse(File.read("tmp-nodes/#{bname}.json"), symbolize_names: true)
82
+ node = node_property[:environments][:hostname]
83
+ ssh_user = node_property[:environments][:ssh_user]
84
+ ssh_password = node_property[:environments][:ssh_password]
85
+ sudo_password = node_property[:environments][:sudo_password]
86
+ ssh_port = node_property[:environments][:ssh_port]
87
+ ssh_key = node_property[:environments][:ssh_key]
88
+
89
+ ENV['TARGET_HOST'] = node
90
+ ENV['NODE_FILE'] = node_file
91
+ ENV['SSH_PASSWORD'] = ssh_password
92
+ ENV['SUDO_PASSWORD'] = sudo_password
93
+
94
+ command = "bundle exec itamae ssh"
95
+ command << " -h #{node}"
96
+ command << " -u #{ssh_user}"
97
+ command << " -p #{ssh_port}"
98
+ command << " -i keys/#{ssh_key}" unless ssh_key.nil?
99
+ command << " -j tmp-nodes/#{bname}.json"
100
+ command << " --shell=bash"
101
+ command << " --ask-password" unless ssh_password.nil?
102
+ command << " --dry-run" if ENV['dry-run'] == "true"
103
+ command << " -l debug" if ENV['debug'] == "true"
166
104
 
167
105
  # recipe load to_command
168
- command_recipe = []
169
- recipes.each do |recipe_h|
170
- if recipe_h["#{recipe_h.keys.join}"].nil?
171
- command_recipe <<
172
- " #{Dir.glob("site-cookbooks/**/#{recipe_h.keys.join}/recipes/default.rb").join}"
173
- else
174
- command_recipe <<
175
- " #{Dir.glob("site-cookbooks/**/#{recipe_h.keys.join}/recipes/#{recipe_h["#{recipe_h.keys.join}"]}.rb").join}"
176
- end
106
+ command_recipe = []
107
+ recipes.each do |recipe_h|
108
+ if recipe_h["#{recipe_h.keys.join}"].nil?
109
+ command_recipe <<
110
+ " #{Dir.glob("site-cookbooks/**/#{recipe_h.keys.join}/recipes/default.rb").join}"
111
+ else
112
+ command_recipe <<
113
+ " #{Dir.glob("site-cookbooks/**/#{recipe_h.keys.join}/recipes/#{recipe_h["#{recipe_h.keys.join}"]}.rb").join}"
177
114
  end
178
- command_recipe.sort_by! {|item| File.dirname(item)}
179
- command << command_recipe.join
180
-
181
- puts hl.color(%!Run Itamae to \"#{bname}\"!, :red)
182
- puts hl.color(%!Role List to \"#{get_roles(node_file).join(", ")}\"!, :blue)
183
- run_list_noti = []
184
- command_recipe.each {|c_recipe| run_list_noti << c_recipe.split("/") [2]}
185
- puts hl.color(%!Run List to \"#{run_list_noti.uniq.join(", ")}\"!, :green)
186
- puts hl.color(%!#{command}!, :white)
187
- st = system command
188
- exit 1 unless st
189
115
  end
190
116
 
117
+ command_recipe.sort_by! {|item| File.dirname(item)}
118
+ command << command_recipe.join
119
+
120
+ puts TaskBase.hl.color(%!Run Itamae to \"#{bname}\"!, :red)
121
+ puts TaskBase.hl.color(%!Role List to \"#{TaskBase.get_roles(node_file).join(", ")}\"!, :blue)
122
+ run_list_noti = []
123
+ command_recipe.each {|c_recipe| run_list_noti << c_recipe.split("/") [2]}
124
+ puts TaskBase.hl.color(%!Run List to \"#{run_list_noti.uniq.join(", ")}\"!, :green)
125
+ puts TaskBase.hl.color(%!#{command}!, :white)
126
+ st = system command
127
+ exit 1 unless st
191
128
  end
192
129
  end
193
130
  end
@@ -2,6 +2,7 @@ require 'specinfra'
2
2
  require 'json'
3
3
  require 'highline'
4
4
  require 'specinfra/helper/set'
5
+ require 'itamae-mitsurin/mitsurin/task_base'
5
6
  include Specinfra::Helper::Set
6
7
  include Rake::DSL if defined? Rake::DSL
7
8
 
@@ -9,201 +10,138 @@ module Itamae
9
10
  module Mitsurin
10
11
  class ItamaeTask
11
12
 
12
- class << self
13
- class ::Hash
14
- def deep_merge(other)
15
- merger = lambda {|key, v1, v2| Hash === v1 && Hash === v2 ? v1.merge(v2, &merger) : v2}
16
- self.merge(other, &merger)
17
- end
18
-
19
- def deep_merge!(other)
20
- merger = lambda {|key, v1, v2| Hash === v1 && Hash === v2 ? v1.merge(v2, &merger) : v2}
21
- self.merge!(other, &merger)
22
- end
13
+ set :backend, :exec
14
+
15
+ namespace :itamae do
16
+ branches = Specinfra.backend.run_command('git branch')
17
+ branch = branches.stdout.split("\n").select {|a| /\*/ === a }
18
+ branch = branch.join.gsub(/\* (.+)/, '\1')
19
+ if branch == 'staging'
20
+ branch = 'staging/**'
21
+ elsif branch == 'master'
22
+ branch = 'production/**'
23
+ else
24
+ all = Dir.entries("nodes/")
25
+ all.delete_if {|d| /(^\.|staging|production|.json)/ === d }
26
+ branch = "{#{all.join(",")}}/**"
23
27
  end
24
28
 
25
- def self.get_roles(node_file)
26
- roles = []
27
- JSON.parse(File.read(node_file))['run_list'].each do |role|
28
- roles << role.gsub(/role\[(.+)\]/, '\1') if /role\[(.+)\]/ === role
29
- end
30
- roles
31
- end
29
+ Dir.glob("nodes/#{branch}/*.json").each do |node_file|
32
30
 
33
- def self.get_recipes(role)
34
- recipes = []
35
- JSON.parse(File.read("roles/#{role}.json"))['run_list'].each do |recipe|
36
- if /recipe\[(.+)::(.+)\]/ === recipe
37
- recipes << {recipe.gsub(/recipe\[(.+)::(.+)\]/, '\1') => recipe.gsub(/recipe\[(.+)::(.+)\]/, '\2')}
38
- else
39
- recipes << {recipe.gsub(/recipe\[(.+)\]/, '\1') => nil}
40
- end
41
- end
42
- recipes
43
- end
31
+ bname = File.basename(node_file, '.json')
32
+ node_h = JSON.parse(File.read(node_file), symbolize_names: true)
44
33
 
45
- def self.get_node_recipes(node_file)
46
- recipes = []
47
- JSON.parse(File.read(node_file))['run_list'].each do |recipe|
48
- if /recipe\[(.+)::(.+)\]/ === recipe
49
- recipes << {recipe.gsub(/recipe\[(.+)::(.+)\]/, '\1') => recipe.gsub(/recipe\[(.+)::(.+)\]/, '\2')}
34
+ desc "Itamae to #{bname}"
35
+ task node_h[:environments][:hostname].split(".")[0] do
36
+ begin
37
+ recipes = []
38
+ TaskBase.get_roles(node_file).each do |role|
39
+ recipes << TaskBase.get_recipes(role)
40
+ end
41
+ TaskBase.get_node_recipes(node_file).each do |recipe|
42
+ recipes << recipe
43
+ end
44
+ rescue Exception => e
45
+ puts e.class.to_s + ", " + e.backtrace[0].to_s
46
+ puts "nodefile or role error, nodefile:#{node_file} reason:#{e.message}"
50
47
  else
51
- recipes << {recipe.gsub(/recipe\[(.+)\]/, '\1') => nil} unless /role\[(.+)\]/ === recipe
48
+ recipes.flatten!
52
49
  end
53
- end
54
- recipes
55
- end
56
-
57
- def self.jq(*objs)
58
- par = nil
59
- objs.each {|obj| par = JSON::pretty_generate(obj, :allow_nan => true, :max_nesting => false)}
60
- return par
61
- end
62
-
63
- def self.write_json(filename)
64
- File.open "tmp-nodes/#{filename}.json", 'w' do |f|
65
- f.flock File::LOCK_EX
66
- yield f
67
- f.flock File::LOCK_UN
68
- end
69
- end
70
-
71
- hl = HighLine.new
72
-
73
- set :backend, :exec
74
50
 
75
- namespace :itamae do
76
- branches = Specinfra.backend.run_command('git branch')
77
- branch = branches.stdout.split("\n").select{|a| /\*/ === a }
78
- branch = branch.join.gsub(/\* (.+)/, '\1')
79
- if branch == 'staging'
80
- branch = 'staging/**'
81
- elsif branch == 'master'
82
- branch = 'production/**'
83
- else
84
- branch = 'other/**'
51
+ # get env attr
52
+ begin
53
+ env_set = node_h[:environments][:set]
54
+ env_h = JSON.parse(File.read("environments/#{env_set}.json"), symbolize_names: true)
55
+ rescue Exception => e
56
+ puts e.class.to_s + ", " + e.backtrace[0].to_s
57
+ puts "nodefile or environments error, nodefile:#{node_file} reason:#{e.message}"
85
58
  end
86
59
 
87
- Dir.glob("nodes/#{branch}/*.json").each do |node_file|
88
-
89
- bname = File.basename(node_file, '.json')
90
- node_h = JSON.parse(File.read(node_file), symbolize_names: true)
91
-
92
- desc "Itamae to #{bname}"
93
- task node_h[:environments][:hostname].split(".")[0] do
94
- begin
95
- recipes = []
96
- get_roles(node_file).each do |role|
97
- recipes << get_recipes(role)
98
- end
99
- get_node_recipes(node_file).each do |recipe|
100
- recipes << recipe
101
- end
102
- rescue Exception => e
103
- puts e.class.to_s + ", " + e.backtrace[0].to_s
104
- puts "nodefile or role error, nodefile:#{node_file} reason:#{e.message}"
105
- exit 1
60
+ # get recipe attr
61
+ recipe_attr_file = []
62
+ recipes.each do |recipe_h|
63
+ if recipe_h["#{recipe_h.keys.join}"].nil?
64
+ recipe_attr_file.insert 0,
65
+ Dir.glob("site-cookbooks/**/#{recipe_h.keys.join}/attributes/default.json")
106
66
  else
107
- recipes.flatten!
108
- end
109
-
110
- # get env attr
111
- begin
112
- env_set = node_h[:environments][:set]
113
- env_h = JSON.parse(File.read("environments/#{env_set}.json"), symbolize_names: true)
114
- rescue Exception => e
115
- puts e.class.to_s + ", " + e.backtrace[0].to_s
116
- puts "nodefile or environments error, nodefile:#{node_file} reason:#{e.message}"
117
- exit 1
67
+ recipe_attr_file <<
68
+ Dir.glob("site-cookbooks/**/#{recipe_h.keys.join}/attributes/#{recipe_h["#{recipe_h.keys.join}"]}.json")
118
69
  end
70
+ end
119
71
 
120
- # get recipe attr
121
- recipe_attr_file = []
122
- recipes.each do |recipe_h|
123
- if recipe_h["#{recipe_h.keys.join}"].nil?
124
- recipe_attr_file.insert 0,
125
- Dir.glob("site-cookbooks/**/#{recipe_h.keys.join}/attributes/default.json")
126
- else
127
- recipe_attr_file <<
128
- Dir.glob("site-cookbooks/**/#{recipe_h.keys.join}/attributes/#{recipe_h["#{recipe_h.keys.join}"]}.json")
129
- end
130
- end
72
+ recipe_attr_file.flatten!
131
73
 
132
- recipe_attr_file.flatten!
74
+ # recipe attr other=env
75
+ recipe_env_h_a = []
76
+ recipe_attr_file.each do |file|
77
+ recipe_h = JSON.parse(File.read(file), symbolize_names: true)
78
+ recipe_env_h_a << recipe_h.deep_merge(env_h)
79
+ end
133
80
 
134
- # recipe attr other=env
135
- recipe_env_h_a = []
136
- recipe_attr_file.each do |file|
137
- recipe_h = JSON.parse(File.read(file), symbolize_names: true)
138
- recipe_env_h_a << recipe_h.deep_merge(env_h)
139
- end
81
+ # recipe attr other=recipes
82
+ moto = recipe_env_h_a[0]
83
+ recipe_env_h_a.each {|hash| moto.deep_merge!(hash)}
84
+ recipe_env_h = moto
140
85
 
141
- # recipe attr other=recipes
142
- moto = recipe_env_h_a[0]
143
- recipe_env_h_a.each {|hash| moto.deep_merge!(hash)}
144
- recipe_env_h = moto
86
+ if recipe_env_h.nil?
87
+ # node attr other=env
88
+ node_env_h = env_h.deep_merge(node_h)
89
+ node_env_j = TaskBase.jq node_env_h
90
+ TaskBase.write_json(bname) {|file| file.puts node_env_j}
91
+ else
92
+ # node attr other=recipe_env
93
+ recipe_env_node_h = recipe_env_h.deep_merge(node_h)
94
+ recipe_env_node_j = TaskBase.jq recipe_env_node_h
95
+ TaskBase.write_json(bname) {|file| file.puts recipe_env_node_j}
96
+ end
145
97
 
146
- if recipe_env_h.nil?
147
- # node attr other=env
148
- node_env_h = env_h.deep_merge(node_h)
149
- node_env_j = jq node_env_h
150
- write_json(bname) {|file| file.puts node_env_j}
98
+ recipes << {'_base' => nil}
99
+ node_property = JSON.parse(File.read("tmp-nodes/#{bname}.json"), symbolize_names: true)
100
+ node = node_property[:environments][:hostname]
101
+ ssh_user = node_property[:environments][:ssh_user]
102
+ ssh_password = node_property[:environments][:ssh_password]
103
+ sudo_password = node_property[:environments][:sudo_password]
104
+ ssh_port = node_property[:environments][:ssh_port]
105
+ ssh_key = node_property[:environments][:ssh_key]
106
+
107
+ ENV['TARGET_HOST'] = node
108
+ ENV['NODE_FILE'] = node_file
109
+ ENV['SSH_PASSWORD'] = ssh_password
110
+ ENV['SUDO_PASSWORD'] = sudo_password
111
+
112
+ command = "bundle exec itamae ssh"
113
+ command << " -h #{node}"
114
+ command << " -u #{ssh_user}"
115
+ command << " -p #{ssh_port}"
116
+ command << " -i keys/#{ssh_key}" unless ssh_key.nil?
117
+ command << " -j tmp-nodes/#{bname}.json"
118
+ command << " --shell=bash"
119
+ command << " --ask-password" unless ssh_password.nil?
120
+ command << " --dry-run" if ENV['dry-run'] == "true"
121
+ command << " -l debug" if ENV['debug'] == "true"
122
+
123
+ # recipe load to_command
124
+ command_recipe = []
125
+ recipes.each do |recipe_h|
126
+ if recipe_h["#{recipe_h.keys.join}"].nil?
127
+ command_recipe <<
128
+ " #{Dir.glob("site-cookbooks/**/#{recipe_h.keys.join}/recipes/default.rb").join}"
151
129
  else
152
- # node attr other=recipe_env
153
- recipe_env_node_h = recipe_env_h.deep_merge(node_h)
154
- recipe_env_node_j = jq recipe_env_node_h
155
- write_json(bname) {|file| file.puts recipe_env_node_j}
156
- end
157
-
158
- recipes << {'_base' => nil}
159
- node_property = JSON.parse(File.read("tmp-nodes/#{bname}.json"), symbolize_names: true)
160
- node = node_property[:environments][:hostname]
161
- ssh_user = node_property[:environments][:ssh_user]
162
- ssh_password = node_property[:environments][:ssh_password]
163
- sudo_password = node_property[:environments][:sudo_password]
164
- ssh_port = node_property[:environments][:ssh_port]
165
- ssh_key = node_property[:environments][:ssh_key]
166
-
167
- ENV['TARGET_HOST'] = node
168
- ENV['NODE_FILE'] = node_file
169
- ENV['SSH_PASSWORD'] = ssh_password
170
- ENV['SUDO_PASSWORD'] = sudo_password
171
-
172
- command = "bundle exec itamae ssh"
173
- command << " -h #{node}"
174
- command << " -u #{ssh_user}"
175
- command << " -p #{ssh_port}"
176
- command << " -i keys/#{ssh_key}" unless ssh_key.nil?
177
- command << " -j tmp-nodes/#{bname}.json"
178
- command << " --shell=bash"
179
- command << " --ask-password" unless ssh_password.nil?
180
- command << " --dry-run" if ENV['dry_run'] == "true"
181
- command << " -l debug" if ENV['debug'] == "true"
182
-
183
- # recipe load to_command
184
- command_recipe = []
185
- recipes.each do |recipe_h|
186
- if recipe_h["#{recipe_h.keys.join}"].nil?
187
- command_recipe <<
188
- " #{Dir.glob("site-cookbooks/**/#{recipe_h.keys.join}/recipes/default.rb").join}"
189
- else
190
- command_recipe <<
191
- " #{Dir.glob("site-cookbooks/**/#{recipe_h.keys.join}/recipes/#{recipe_h["#{recipe_h.keys.join}"]}.rb").join}"
192
- end
130
+ command_recipe <<
131
+ " #{Dir.glob("site-cookbooks/**/#{recipe_h.keys.join}/recipes/#{recipe_h["#{recipe_h.keys.join}"]}.rb").join}"
193
132
  end
194
- command_recipe.sort_by! {|item| File.dirname(item)}
195
- command << command_recipe.join
196
-
197
- puts hl.color(%!Run Itamae to \"#{bname}\"!, :red)
198
- puts hl.color(%!Role List to \"#{get_roles(node_file).join(", ")}\"!, :blue)
199
- run_list_noti = []
200
- command_recipe.each {|c_recipe| run_list_noti << c_recipe.split("/") [2]}
201
- puts hl.color(%!Run List to \"#{run_list_noti.uniq.join(", ")}\"!, :green)
202
- puts hl.color(%!#{command}!, :white)
203
- st = system command
204
- exit 1 unless st
205
133
  end
206
-
134
+ command_recipe.sort_by! {|item| File.dirname(item)}
135
+ command << command_recipe.join
136
+
137
+ puts TaskBase.hl.color(%!Run Itamae to \"#{bname}\"!, :red)
138
+ puts TaskBase.hl.color(%!Role List to \"#{TaskBase.get_roles(node_file).join(", ")}\"!, :blue)
139
+ run_list_noti = []
140
+ command_recipe.each {|c_recipe| run_list_noti << c_recipe.split("/") [2]}
141
+ puts TaskBase.hl.color(%!Run List to \"#{run_list_noti.uniq.join(", ")}\"!, :green)
142
+ puts TaskBase.hl.color(%!#{command}!, :white)
143
+ st = system command
144
+ exit 1 unless st
207
145
  end
208
146
  end
209
147
  end