itamae-mitsurin 0.50 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (172) hide show
  1. checksums.yaml +5 -5
  2. data/lib/itamae-mitsurin/cli.rb +0 -2
  3. data/lib/itamae-mitsurin/logger.rb +74 -20
  4. data/lib/itamae-mitsurin/mitsurin/base.rb +109 -0
  5. data/lib/itamae-mitsurin/mitsurin/base_task.rb +147 -0
  6. data/lib/itamae-mitsurin/mitsurin/creators/templates/project/site-cookbooks/_base/_base/recipes/default.rb +0 -11
  7. data/lib/itamae-mitsurin/mitsurin/itamae_task.rb +44 -130
  8. data/lib/itamae-mitsurin/mitsurin/itamae_with_target_task.rb +64 -157
  9. data/lib/itamae-mitsurin/mitsurin/local_task.rb +57 -131
  10. data/lib/itamae-mitsurin/mitsurin/serverspec_task.rb +56 -81
  11. data/lib/itamae-mitsurin/mitsurin/serverspec_with_target_task.rb +80 -143
  12. data/lib/itamae-mitsurin/node.rb +0 -1
  13. data/lib/itamae-mitsurin/notification.rb +0 -1
  14. data/lib/itamae-mitsurin/recipe.rb +2 -5
  15. data/lib/itamae-mitsurin/resource.rb +1 -1
  16. data/lib/itamae-mitsurin/resource/base.rb +0 -12
  17. data/lib/itamae-mitsurin/resource/http_request.rb +23 -8
  18. data/lib/itamae-mitsurin/resource/s3_file.rb +33 -0
  19. data/lib/itamae-mitsurin/runner.rb +4 -5
  20. data/lib/itamae-mitsurin/version.txt +1 -1
  21. metadata +6 -221
  22. data/lib/itamae-mitsurin/mitsurin/itamae_with_git_task.rb +0 -159
  23. data/lib/itamae-mitsurin/mitsurin/task_base.rb +0 -100
  24. data/test/test_itamae-mitsurin.rb +0 -18
  25. data/test/test_itamae-mitsurin/ext/test_specinfra.rb +0 -39
  26. data/test/test_itamae-mitsurin/handler/test_base.rb +0 -40
  27. data/test/test_itamae-mitsurin/handler/test_debug.rb +0 -10
  28. data/test/test_itamae-mitsurin/handler/test_fluentd.rb +0 -44
  29. data/test/test_itamae-mitsurin/handler/test_json.rb +0 -22
  30. data/test/test_itamae-mitsurin/mitsurin/creators/templates/project/.rspec +0 -2
  31. data/test/test_itamae-mitsurin/mitsurin/creators/templates/project/Gemfile +0 -3
  32. data/test/test_itamae-mitsurin/mitsurin/creators/templates/project/Rakefile +0 -2
  33. data/test/test_itamae-mitsurin/mitsurin/creators/templates/project/environments/.keep +0 -0
  34. data/test/test_itamae-mitsurin/mitsurin/creators/templates/project/environments/sample.json +0 -7
  35. data/test/test_itamae-mitsurin/mitsurin/creators/templates/project/keys/.keep +0 -0
  36. data/test/test_itamae-mitsurin/mitsurin/creators/templates/project/nodes/.keep +0 -0
  37. data/test/test_itamae-mitsurin/mitsurin/creators/templates/project/nodes/sample01.json +0 -9
  38. data/test/test_itamae-mitsurin/mitsurin/creators/templates/project/roles/.keep +0 -0
  39. data/test/test_itamae-mitsurin/mitsurin/creators/templates/project/site-cookbooks/_base/_base/attributes/.keep +0 -0
  40. data/test/test_itamae-mitsurin/mitsurin/creators/templates/project/site-cookbooks/_base/_base/files/.keep +0 -0
  41. data/test/test_itamae-mitsurin/mitsurin/creators/templates/project/site-cookbooks/_base/_base/recipes/default.rb +0 -1
  42. data/test/test_itamae-mitsurin/mitsurin/creators/templates/project/site-cookbooks/_base/_base/spec/default_spec.rb +0 -1
  43. data/test/test_itamae-mitsurin/mitsurin/creators/templates/project/site-cookbooks/_base/_base/templates/.keep +0 -0
  44. data/test/test_itamae-mitsurin/mitsurin/creators/templates/project/spec/spec_helper.rb +0 -33
  45. data/test/test_itamae-mitsurin/mitsurin/creators/templates/project/tmp-nodes/.keep +0 -0
  46. data/test/test_itamae-mitsurin/mitsurin/creators/templates/site-cookbooks/attributes/.keep +0 -0
  47. data/test/test_itamae-mitsurin/mitsurin/creators/templates/site-cookbooks/files/.keep +0 -0
  48. data/test/test_itamae-mitsurin/mitsurin/creators/templates/site-cookbooks/recipes/default.rb +0 -0
  49. data/test/test_itamae-mitsurin/mitsurin/creators/templates/site-cookbooks/spec/.keep +0 -0
  50. data/test/test_itamae-mitsurin/mitsurin/creators/templates/site-cookbooks/templates/.keep +0 -0
  51. data/test/test_itamae-mitsurin/mitsurin/creators/test_cookbook.rb +0 -24
  52. data/test/test_itamae-mitsurin/mitsurin/creators/test_project.rb +0 -24
  53. data/test/test_itamae-mitsurin/mitsurin/test_cli.rb +0 -56
  54. data/test/test_itamae-mitsurin/mitsurin/test_creators.rb +0 -19
  55. data/test/test_itamae-mitsurin/mitsurin/test_itamae_task.rb +0 -197
  56. data/test/test_itamae-mitsurin/mitsurin/test_itamae_with_git_task.rb +0 -213
  57. data/test/test_itamae-mitsurin/mitsurin/test_serverspec_task.rb +0 -123
  58. data/test/test_itamae-mitsurin/resource/test_aws_ebs_volume.rb +0 -84
  59. data/test/test_itamae-mitsurin/resource/test_base.rb +0 -374
  60. data/test/test_itamae-mitsurin/resource/test_directory.rb +0 -63
  61. data/test/test_itamae-mitsurin/resource/test_execute.rb +0 -26
  62. data/test/test_itamae-mitsurin/resource/test_file.rb +0 -176
  63. data/test/test_itamae-mitsurin/resource/test_gem_package.rb +0 -81
  64. data/test/test_itamae-mitsurin/resource/test_git.rb +0 -94
  65. data/test/test_itamae-mitsurin/resource/test_group.rb +0 -42
  66. data/test/test_itamae-mitsurin/resource/test_http_request.rb +0 -71
  67. data/test/test_itamae-mitsurin/resource/test_link.rb +0 -33
  68. data/test/test_itamae-mitsurin/resource/test_local_ruby_block.rb +0 -15
  69. data/test/test_itamae-mitsurin/resource/test_package.rb +0 -44
  70. data/test/test_itamae-mitsurin/resource/test_remote_directory.rb +0 -84
  71. data/test/test_itamae-mitsurin/resource/test_remote_file.rb +0 -54
  72. data/test/test_itamae-mitsurin/resource/test_service.rb +0 -69
  73. data/test/test_itamae-mitsurin/resource/test_template.rb +0 -53
  74. data/test/test_itamae-mitsurin/resource/test_user.rb +0 -93
  75. data/test/test_itamae-mitsurin/test_backend.rb +0 -297
  76. data/test/test_itamae-mitsurin/test_cli.rb +0 -88
  77. data/test/test_itamae-mitsurin/test_definition.rb +0 -40
  78. data/test/test_itamae-mitsurin/test_ext.rb +0 -1
  79. data/test/test_itamae-mitsurin/test_handler.rb +0 -21
  80. data/test/test_itamae-mitsurin/test_handler_proxy.rb +0 -38
  81. data/test/test_itamae-mitsurin/test_logger.rb +0 -124
  82. data/test/test_itamae-mitsurin/test_mitsurin.rb +0 -14
  83. data/test/test_itamae-mitsurin/test_node.rb +0 -74
  84. data/test/test_itamae-mitsurin/test_notification.rb +0 -46
  85. data/test/test_itamae-mitsurin/test_recipe.rb +0 -171
  86. data/test/test_itamae-mitsurin/test_recipe_children.rb +0 -86
  87. data/test/test_itamae-mitsurin/test_resource.rb +0 -73
  88. data/test/test_itamae-mitsurin/test_runner.rb +0 -124
  89. data/test/test_itamae-mitsurin/test_version.rb +0 -3
  90. data/test/test_itamae-mitsurin/version.txt +0 -1
  91. data/test_project/.rspec +0 -2
  92. data/test_project/Gemfile +0 -4
  93. data/test_project/Rakefile +0 -3
  94. data/test_project/environments/.keep +0 -0
  95. data/test_project/keys/.keep +0 -0
  96. data/test_project/nodes/.keep +0 -0
  97. data/test_project/nodes/test.json +0 -9
  98. data/test_project/roles/.keep +0 -0
  99. data/test_project/roles/test.json +0 -14
  100. data/test_project/site-cookbooks/_base/_base/attributes/.keep +0 -0
  101. data/test_project/site-cookbooks/_base/_base/files/.keep +0 -0
  102. data/test_project/site-cookbooks/_base/_base/recipes/default.rb +0 -1
  103. data/test_project/site-cookbooks/_base/_base/spec/default_spec.rb +0 -1
  104. data/test_project/site-cookbooks/_base/_base/templates/.keep +0 -0
  105. data/test_project/site-cookbooks/a_test/directory/attributes/.keep +0 -0
  106. data/test_project/site-cookbooks/a_test/directory/files/.keep +0 -0
  107. data/test_project/site-cookbooks/a_test/directory/recipes/default.rb +0 -8
  108. data/test_project/site-cookbooks/a_test/directory/spec/.keep +0 -0
  109. data/test_project/site-cookbooks/a_test/directory/spec/default_spec.rb +0 -4
  110. data/test_project/site-cookbooks/a_test/directory/templates/.keep +0 -0
  111. data/test_project/site-cookbooks/a_test/package/attributes/.keep +0 -0
  112. data/test_project/site-cookbooks/a_test/package/files/.keep +0 -0
  113. data/test_project/site-cookbooks/a_test/package/recipes/default.rb +0 -2
  114. data/test_project/site-cookbooks/a_test/package/spec/.keep +0 -0
  115. data/test_project/site-cookbooks/a_test/package/spec/default_spec.rb +0 -4
  116. data/test_project/site-cookbooks/a_test/package/templates/.keep +0 -0
  117. data/test_project/site-cookbooks/a_test/service/attributes/.keep +0 -0
  118. data/test_project/site-cookbooks/a_test/service/files/.keep +0 -0
  119. data/test_project/site-cookbooks/a_test/service/recipes/default.rb +0 -5
  120. data/test_project/site-cookbooks/a_test/service/spec/.keep +0 -0
  121. data/test_project/site-cookbooks/a_test/service/spec/default_spec.rb +0 -6
  122. data/test_project/site-cookbooks/a_test/service/templates/.keep +0 -0
  123. data/test_project/site-cookbooks/b_test/git/attributes/.keep +0 -0
  124. data/test_project/site-cookbooks/b_test/git/files/.keep +0 -0
  125. data/test_project/site-cookbooks/b_test/git/recipes/default.rb +0 -5
  126. data/test_project/site-cookbooks/b_test/git/spec/.keep +0 -0
  127. data/test_project/site-cookbooks/b_test/git/spec/default_spec.rb +0 -5
  128. data/test_project/site-cookbooks/b_test/git/templates/.keep +0 -0
  129. data/test_project/site-cookbooks/b_test/link/attributes/.keep +0 -0
  130. data/test_project/site-cookbooks/b_test/link/files/.keep +0 -0
  131. data/test_project/site-cookbooks/b_test/link/recipes/default.rb +0 -5
  132. data/test_project/site-cookbooks/b_test/link/spec/.keep +0 -0
  133. data/test_project/site-cookbooks/b_test/link/spec/default_spec.rb +0 -5
  134. data/test_project/site-cookbooks/b_test/link/templates/.keep +0 -0
  135. data/test_project/site-cookbooks/b_test/remote_file/attributes/.keep +0 -0
  136. data/test_project/site-cookbooks/b_test/remote_file/files/.keep +0 -0
  137. data/test_project/site-cookbooks/b_test/remote_file/files/remote_file.sh +0 -1
  138. data/test_project/site-cookbooks/b_test/remote_file/recipes/default.rb +0 -9
  139. data/test_project/site-cookbooks/b_test/remote_file/spec/.keep +0 -0
  140. data/test_project/site-cookbooks/b_test/remote_file/spec/default_spec.rb +0 -7
  141. data/test_project/site-cookbooks/b_test/remote_file/templates/.keep +0 -0
  142. data/test_project/site-cookbooks/b_test/template/attributes/.keep +0 -0
  143. data/test_project/site-cookbooks/b_test/template/files/.keep +0 -0
  144. data/test_project/site-cookbooks/b_test/template/recipes/default.rb +0 -5
  145. data/test_project/site-cookbooks/b_test/template/spec/.keep +0 -0
  146. data/test_project/site-cookbooks/b_test/template/spec/default_spec.rb +0 -7
  147. data/test_project/site-cookbooks/b_test/template/templates/.keep +0 -0
  148. data/test_project/site-cookbooks/b_test/template/templates/template.erb +0 -2
  149. data/test_project/site-cookbooks/c_test/execute/attributes/.keep +0 -0
  150. data/test_project/site-cookbooks/c_test/execute/files/.keep +0 -0
  151. data/test_project/site-cookbooks/c_test/execute/recipes/default.rb +0 -6
  152. data/test_project/site-cookbooks/c_test/execute/spec/.keep +0 -0
  153. data/test_project/site-cookbooks/c_test/execute/spec/default_spec.rb +0 -6
  154. data/test_project/site-cookbooks/c_test/execute/templates/.keep +0 -0
  155. data/test_project/site-cookbooks/c_test/remote_directory/attributes/.keep +0 -0
  156. data/test_project/site-cookbooks/c_test/remote_directory/files/.keep +0 -0
  157. data/test_project/site-cookbooks/c_test/remote_directory/recipes/default.rb +0 -10
  158. data/test_project/site-cookbooks/c_test/remote_directory/spec/.keep +0 -0
  159. data/test_project/site-cookbooks/c_test/remote_directory/spec/default_spec.rb +0 -20
  160. data/test_project/site-cookbooks/c_test/remote_directory/templates/.keep +0 -0
  161. data/test_project/site-cookbooks/c_test/remote_directory/templates/remote_dir/a.txt +0 -0
  162. data/test_project/site-cookbooks/c_test/remote_directory/templates/remote_dir/b.txt +0 -0
  163. data/test_project/site-cookbooks/c_test/remote_directory/templates/remote_dir/c.txt +0 -0
  164. data/test_project/site-cookbooks/d_spec/air/attributes/.keep +0 -0
  165. data/test_project/site-cookbooks/d_spec/air/files/.keep +0 -0
  166. data/test_project/site-cookbooks/d_spec/air/recipes/default.rb +0 -0
  167. data/test_project/site-cookbooks/d_spec/air/spec/.keep +0 -0
  168. data/test_project/site-cookbooks/d_spec/air/spec/default_spec.rb +0 -0
  169. data/test_project/site-cookbooks/d_spec/air/templates/.keep +0 -0
  170. data/test_project/spec/spec_helper.rb +0 -33
  171. data/test_project/tmp-nodes/.keep +0 -0
  172. data/test_project/tmp-nodes/test.json +0 -12
@@ -1,159 +0,0 @@
1
- require 'specinfra'
2
- require 'specinfra/helper/set'
3
- require 'itamae-mitsurin/mitsurin/task_base'
4
- include Specinfra::Helper::Set
5
- include Rake::DSL if defined? Rake::DSL
6
-
7
- module ItamaeMitsurin
8
- module Mitsurin
9
- class ItamaeWithGitTask
10
-
11
- namespace :itamae do
12
- set :backend, :exec
13
- branches = Specinfra.backend.run_command('git branch')
14
- branch = branches.stdout.split("\n").select {|a| /\*/ === a }
15
- branch = branch.join.gsub(/\* (.+)/, '\1')
16
- branch << '/**'
17
-
18
- Dir.glob("nodes/#{branch}/*.json").each do |node_file|
19
- bname = File.basename(node_file, '.json')
20
-
21
- begin
22
- node_h = JSON.parse(File.read(node_file), symbolize_names: true)
23
- rescue JSON::ParserError => e
24
- puts e.class.to_s + ", " + e.backtrace[0].to_s
25
- puts "Node error, nodefile:#{node_file}, reason:#{e.message}"
26
- end
27
-
28
- desc "Itamae to #{bname}"
29
- task node_h[:environments][:hostname].split(".")[0] do
30
- begin
31
- recipes = []
32
- TaskBase.get_roles(node_file).each do |role|
33
- recipes << TaskBase.get_recipes(role)
34
- end
35
- TaskBase.get_node_recipes(node_file).each do |recipe|
36
- recipes << recipe
37
- end
38
- rescue Exception => e
39
- puts e.class.to_s + ", " + e.backtrace[0].to_s
40
- puts "Node or role error, nodefile:#{node_file}, reason:#{e.message}"
41
- else
42
- recipes.flatten!
43
- end
44
-
45
- # get env attr
46
- begin
47
- env_set = node_h[:environments][:set]
48
- raise "No environments set error" if env_set.nil?
49
- env_h = JSON.parse(File.read("environments/#{env_set}.json"), symbolize_names: true)
50
- rescue Exception => e
51
- puts e.class.to_s + ", " + e.backtrace[0].to_s
52
- puts "Node or environment error, nodefile:#{node_file}, reason:#{e.message}"
53
- end
54
-
55
- # get recipes attr
56
- recipe_attr_file = []
57
- recipes.each do |recipe_h|
58
- if recipe_h["#{recipe_h.keys.join}"] == "default"
59
- recipe_attr_file.insert 0,
60
- Dir.glob("site-cookbooks/**/#{recipe_h.keys.join}/attributes/#{recipe_h["#{recipe_h.keys.join}"]}.json")
61
- else
62
- recipe_attr_file <<
63
- Dir.glob("site-cookbooks/**/#{recipe_h.keys.join}/attributes/#{recipe_h["#{recipe_h.keys.join}"]}.json")
64
- end
65
- end
66
-
67
- recipe_attr_file.flatten!
68
-
69
- # recipes attr other=env
70
- recipe_env_h_a = []
71
- recipe_attr_file.each do |file|
72
- recipe_h = JSON.parse(File.read(file), symbolize_names: true)
73
- recipe_env_h_a << recipe_h.deep_merge(env_h)
74
- end
75
-
76
- # recipe attr other=recipes_env
77
- moto = recipe_env_h_a[0]
78
- recipe_env_h_a.each {|hash| moto.deep_merge!(hash)}
79
- recipe_env_h = moto
80
-
81
- if recipe_env_h.nil?
82
- # env attr other=node
83
- node_env_h = env_h.deep_merge(node_h)
84
- node_env_j = TaskBase.jq node_env_h
85
- TaskBase.write_json(bname) {|file| file.puts node_env_j}
86
- else
87
- # recipe_env attr other=node
88
- recipe_env_node_h = recipe_env_h.deep_merge(node_h)
89
- recipe_env_node_j = TaskBase.jq recipe_env_node_h
90
- TaskBase.write_json(bname) {|file| file.puts recipe_env_node_j}
91
- end
92
-
93
- recipes << {'_base' => 'default'}
94
- node_property = JSON.parse(File.read("tmp-nodes/#{bname}.json"), symbolize_names: true)
95
- node = node_property[:environments][:hostname]
96
- ssh_user = node_property[:environments][:ssh_user]
97
- ssh_password = node_property[:environments][:ssh_password]
98
- sudo_password = node_property[:environments][:sudo_password]
99
- ssh_port = node_property[:environments][:ssh_port]
100
- ssh_key = node_property[:environments][:ssh_key]
101
-
102
- ENV['TARGET_HOST'] = node
103
- ENV['NODE_FILE'] = node_file
104
- ENV['SSH_PASSWORD'] = ssh_password
105
- ENV['SUDO_PASSWORD'] = sudo_password
106
-
107
- command = "bundle exec itamae ssh"
108
- command << " -h #{node}"
109
- command << " -u #{ssh_user}"
110
- command << " -p #{ssh_port}"
111
- command << " -i keys/#{ssh_key}" unless ssh_key.nil?
112
- command << " -j tmp-nodes/#{bname}.json"
113
- command << " --shell=bash"
114
- command << " --ask-password" unless ssh_password.nil?
115
- command << " --dry-run" if ENV['dry-run'] == "true"
116
- command << " -l debug" if ENV['debug'] == "true"
117
- command << " -c logs/config/itamae_with_git_task.config"
118
-
119
- # Pass to read the recipe command
120
- command_recipe = []
121
- recipes.each do |recipe_h|
122
- target_recipe = "site-cookbooks/**/#{recipe_h.keys.join}/recipes/#{recipe_h[recipe_h.keys.join]}.rb"
123
- if Dir.glob(target_recipe).empty?
124
- raise "Recipe load error, nodefile: #{node_file}, reason: Does not exist " +
125
- recipe_h.keys.join + '::' +recipe_h.values.join
126
- end
127
- Dir.glob(target_recipe).join("\s").split.each do |target|
128
- unless File.exists?(target)
129
- ex_recipe = recipe_h.to_s.gsub('=>', '::').gsub('"', '')
130
- raise "Recipe load error, nodefile:#{node_file}, reason: Does not exist #{ex_recipe}"
131
- end
132
- command_recipe << " #{target}"
133
- end
134
- end
135
-
136
- command_recipe.sort_by! {|item| File.dirname(item) }
137
- command << command_recipe.join
138
-
139
- puts TaskBase.hl.color(%!Run Itamae to "#{bname}"!, :red)
140
- run_list_noti = []
141
- command_recipe.each { |c_recipe|
142
- unless c_recipe.split("/")[4].split(".")[0] == 'default'
143
- run_list_noti << c_recipe.split("/")[2] + "::#{c_recipe.split("/")[4].split(".")[0]}"
144
- else
145
- run_list_noti << c_recipe.split("/")[2]
146
- end
147
- }
148
-
149
- puts TaskBase.hl.color(%!Run List to \"#{run_list_noti.uniq.join(", ")}\"!, :green)
150
- puts TaskBase.hl.color(%!#{command}!, :white)
151
- st = system command
152
- exit 1 unless st
153
- end
154
- end
155
- end
156
-
157
- end
158
- end
159
- end
@@ -1,100 +0,0 @@
1
- require 'json'
2
- require 'highline'
3
- require 'tmpdir'
4
- require 'logger'
5
-
6
- module ItamaeMitsurin
7
- module Mitsurin
8
- module TaskBase
9
-
10
- class << self
11
- class ::Hash
12
- def deep_merge(other)
13
- merger = lambda {|key, v1, v2| Hash === v1 && Hash === v2 ? v1.merge(v2, &merger) : v2}
14
- self.merge(other, &merger)
15
- end
16
-
17
- def deep_merge!(other)
18
- merger = lambda {|key, v1, v2| Hash === v1 && Hash === v2 ? v1.merge(v2, &merger) : v2}
19
- self.merge!(other, &merger)
20
- end
21
- end
22
-
23
- def get_roles(node_file)
24
- roles = []
25
- JSON.parse(File.read(node_file))['run_list'].each do |role|
26
- roles << role.gsub(/role\[(.+)\]/, '\1') if /role\[(.+)\]/ === role
27
- end
28
- roles
29
- end
30
-
31
- def get_recipes(role)
32
- recipes = []
33
- JSON.parse(File.read("roles/#{role}.json"))['run_list'].each do |recipe|
34
- if /recipe\[(.+)::(.+)\]/ === recipe
35
- recipes << {recipe.gsub(/recipe\[(.+)::(.+)\]/, '\1') => recipe.gsub(/recipe\[(.+)::(.+)\]/, '\2')}
36
- else
37
- recipes << {recipe.gsub(/recipe\[(.+)\]/, '\1') => 'default'}
38
- end
39
- end
40
- recipes
41
- end
42
-
43
- def get_node_recipes(node_file)
44
- recipes = []
45
- JSON.parse(File.read(node_file))['run_list'].each do |recipe|
46
- if /recipe\[(.+)::(.+)\]/ === recipe
47
- recipes << {recipe.gsub(/recipe\[(.+)::(.+)\]/, '\1') => recipe.gsub(/recipe\[(.+)::(.+)\]/, '\2')}
48
- else
49
- recipes << {recipe.gsub(/recipe\[(.+)\]/, '\1') => 'default'} unless /role\[(.+)\]/ === recipe
50
- end
51
- end
52
- recipes
53
- end
54
-
55
- def jq(*objs)
56
- par = nil
57
- objs.each {|obj| par = JSON::pretty_generate(obj, :allow_nan => true, :max_nesting => false)}
58
- return par
59
- end
60
-
61
- def write_json(filename)
62
- File.open "tmp-nodes/#{filename}.json", 'w' do |f|
63
- f.flock File::LOCK_EX
64
- yield f
65
- f.flock File::LOCK_UN
66
- end
67
- end
68
-
69
- def write_tmp_json(filename)
70
- path = Dir.mktmpdir("mitsurin-")
71
- open("#{path}/#{filename}.json", "w") do |f|
72
- f.flock File::LOCK_EX
73
- yield f
74
- f.flock File::LOCK_UN
75
- end
76
- path
77
- end
78
-
79
- def hl
80
- HighLine.new
81
- end
82
-
83
- def handler_logger
84
- default = {"handlers"=>[{"type"=>"json", "path"=>"itamae-log.json"}]}
85
- end
86
-
87
- def file_logger
88
- file_logger = ::Logger.new('logs/itamae.log', 5, 100 * 1024 * 1024).tap do |l|
89
- l.formatter = proc do |serverity, datetime, progname, msg|
90
- "#{datetime.strftime('%Y %m %d %H:%M:%S %z')} #{serverity} : #{msg}\n"
91
- end
92
- end
93
-
94
- file_logger
95
- end
96
- end
97
-
98
- end
99
- end
100
- end
@@ -1,18 +0,0 @@
1
- require 'test/unit'
2
- require "itamae-mitsurin/runner"
3
- require "itamae-mitsurin/cli"
4
- require "itamae-mitsurin/recipe"
5
- require "itamae-mitsurin/resource"
6
- require "itamae-mitsurin/handler"
7
- require "itamae-mitsurin/handler_proxy"
8
- require "itamae-mitsurin/recipe_children"
9
- require "itamae-mitsurin/logger"
10
- require "itamae-mitsurin/node"
11
- require "itamae-mitsurin/backend"
12
- require "itamae-mitsurin/notification"
13
- require "itamae-mitsurin/definition"
14
- require "itamae-mitsurin/ext"
15
-
16
- module TestItamaeMitsurin
17
- # Your code goes here...
18
- end
@@ -1,39 +0,0 @@
1
- # TODO: Send patches to Specinfra
2
-
3
- module Specinfra
4
- module Backend
5
- class Base
6
- def receive_file(from, to = nil)
7
- raise NotImplementedError
8
- end
9
- end
10
-
11
- class Exec < Base
12
- def receive_file(from, to = nil)
13
- if to
14
- FileUtils.cp(from, to)
15
- else
16
- ::File.read(from)
17
- end
18
- end
19
- end
20
-
21
- class Ssh < Exec
22
- def receive_file(from, to = nil)
23
- scp_download!(from, to)
24
- end
25
-
26
- private
27
-
28
- def scp_download!(from, to, opt={})
29
- if get_config(:scp).nil?
30
- set_config(:scp, create_scp)
31
- end
32
-
33
- scp = get_config(:scp)
34
- scp.download!(from, to, opt)
35
- end
36
- end
37
- end
38
- end
39
-
@@ -1,40 +0,0 @@
1
- require 'socket'
2
-
3
- module ItamaeMitsurin
4
- module Handler
5
- class Base
6
- attr_reader :recipes, :resources, :actions
7
-
8
- def initialize(options)
9
- @options = options
10
-
11
- @recipes = []
12
- @resources = []
13
- @actions = []
14
- end
15
-
16
- def event(type, payload = {})
17
- case type
18
- when :recipe_started
19
- @recipes << payload
20
- when :recipe_completed, :recipe_failed
21
- @recipes.pop
22
- when :resource_started
23
- @resources << payload
24
- when :resource_completed, :resource_failed
25
- @resources.pop
26
- when :action_started
27
- @actions << payload
28
- when :action_completed, :action_failed
29
- @actions.pop
30
- end
31
- end
32
-
33
- private
34
-
35
- def hostname
36
- @hostname ||= @options['hostname'] || Socket.gethostname
37
- end
38
- end
39
- end
40
- end
@@ -1,10 +0,0 @@
1
- module ItamaeMitsurin
2
- module Handler
3
- class Debug < Base
4
- def event(type, payload = {})
5
- super
6
- ItamaeMitsurin.logger.info("EVENT:#{type} #{payload}")
7
- end
8
- end
9
- end
10
- end
@@ -1,44 +0,0 @@
1
- module ItamaeMitsurin
2
- module Handler
3
- class Fluentd < Base
4
- attr_accessor :fluent_logger # for test
5
-
6
- def initialize(*)
7
- super
8
- load_fluent_logger
9
- end
10
-
11
- def event(type, payload = {})
12
- super
13
-
14
- unless @fluent_logger.post(type, payload.merge(hostname: hostname))
15
- ItamaeMitsurin.logger.warn "Sending logs to Fluentd failed: #{@fluent_logger.last_error}"
16
- end
17
- end
18
-
19
- private
20
-
21
- def load_fluent_logger
22
- begin
23
- require 'fluent-logger'
24
- rescue LoadError
25
- raise "Loading fluent-logger gem failed. Please install 'fluent-logger' gem to use fluentd handler."
26
- end
27
-
28
- @fluent_logger = Fluent::Logger::FluentLogger.new(tag_prefix, host: fluentd_host, port: fluentd_port)
29
- end
30
-
31
- def tag_prefix
32
- @options['tag_prefix'] || 'itamae_server'
33
- end
34
-
35
- def fluentd_host
36
- @options['host'] || 'localhost'
37
- end
38
-
39
- def fluentd_port
40
- (@options['port'] || 24224).to_i
41
- end
42
- end
43
- end
44
- end
@@ -1,22 +0,0 @@
1
- module ItamaeMitsurin
2
- module Handler
3
- class Json < Base
4
- def initialize(*)
5
- super
6
- require 'time'
7
- open_file
8
- end
9
-
10
- def event(type, payload = {})
11
- super
12
- @f.puts({'time' => Time.now.iso8601, 'event' => type, 'payload' => payload}.to_json)
13
- end
14
-
15
- private
16
-
17
- def open_file
18
- @f = open(@options.fetch('path'), 'a')
19
- end
20
- end
21
- end
22
- end