itamae-mitsurin 0.12 → 0.13
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 +4 -4
- data/README.md +6 -3
- data/itamae-mitsurin.gemspec +1 -0
- data/lib/itamae-mitsurin/mitsurin/creators/templates/project/Rakefile +1 -0
- data/lib/itamae-mitsurin/mitsurin/creators/templates/project/environments/nothing.json +5 -0
- data/lib/itamae-mitsurin/mitsurin/itamae_task.rb +14 -15
- data/lib/itamae-mitsurin/mitsurin/local_task.rb +137 -0
- data/lib/itamae-mitsurin/mitsurin/serverspec_task.rb +33 -34
- data/lib/itamae-mitsurin/mitsurin/task_base.rb +15 -2
- data/lib/itamae-mitsurin/version.txt +1 -1
- metadata +18 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0569c16f25204c1c623fcc4067ca68c04b8afc33
|
4
|
+
data.tar.gz: b83eda09fa7bd239be9014f368a4793e4fd48b93
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ef9675110a3974320efc7f319b88799fb762d261a49d533bf8b648cdcd944a74205204b4bf5be01d2ee1717d7dfa675f7615715d08e37af533d1b0c1bedb3b81
|
7
|
+
data.tar.gz: 5e6cbc175cfae25369362d30c0b0045bc7a167748506276d427e070527bdde605832f9f029a0b3f85014c3269bb71b5edd2dc5cd21ff886cdf85c4a05036fb20
|
data/README.md
CHANGED
@@ -13,14 +13,17 @@ Customized version of Itamae and plugin
|
|
13
13
|
|
14
14
|
```
|
15
15
|
$ gem install itamae-mitsurin
|
16
|
-
$ mkdir [project_dir]
|
17
|
-
$ cd [project_dir]
|
18
16
|
$ manaita init
|
19
17
|
```
|
20
18
|
|
19
|
+
## If you want to use the AWS Resources
|
20
|
+
```
|
21
|
+
$ aws configure
|
22
|
+
```
|
23
|
+
|
21
24
|
- Tips for AmazonLinux
|
22
25
|
```
|
23
|
-
yum install ruby-devel ruby20-devel gcc-c++ rubygem20-io-console
|
26
|
+
yum install ruby-devel ruby20-devel gcc-c++ rubygem20-io-console
|
24
27
|
```
|
25
28
|
|
26
29
|
## Usage AWS Resource
|
data/itamae-mitsurin.gemspec
CHANGED
@@ -28,6 +28,7 @@ Gem::Specification.new do |spec|
|
|
28
28
|
spec.add_runtime_dependency "json"
|
29
29
|
spec.add_runtime_dependency "io-console"
|
30
30
|
spec.add_runtime_dependency "bundler"
|
31
|
+
spec.add_runtime_dependency "tempdir"
|
31
32
|
|
32
33
|
spec.add_development_dependency "rake-compiler"
|
33
34
|
spec.add_development_dependency "rspec", "~> 3.0"
|
@@ -1,5 +1,3 @@
|
|
1
|
-
require 'json'
|
2
|
-
require 'highline'
|
3
1
|
require 'itamae-mitsurin/mitsurin/task_base'
|
4
2
|
include Rake::DSL if defined? Rake::DSL
|
5
3
|
|
@@ -11,7 +9,12 @@ module ItamaeMitsurin
|
|
11
9
|
Dir.glob("nodes/**/*.json").each do |node_file|
|
12
10
|
|
13
11
|
bname = File.basename(node_file, '.json')
|
14
|
-
|
12
|
+
begin
|
13
|
+
node_h = JSON.parse(File.read(node_file), symbolize_names: true)
|
14
|
+
rescue JSON::ParserError => e
|
15
|
+
puts e.class.to_s + ", " + e.backtrace[0].to_s
|
16
|
+
puts "nodefile error, nodefile:#{node_file}, reason:#{e.message}"
|
17
|
+
end
|
15
18
|
|
16
19
|
desc "Itamae to #{bname}"
|
17
20
|
task node_h[:environments][:hostname].split(".")[0] do
|
@@ -25,7 +28,7 @@ module ItamaeMitsurin
|
|
25
28
|
end
|
26
29
|
rescue Exception => e
|
27
30
|
puts e.class.to_s + ", " + e.backtrace[0].to_s
|
28
|
-
puts "nodefile or role error, nodefile:#{node_file} reason:#{e.message}"
|
31
|
+
puts "nodefile or role error, nodefile:#{node_file}, reason:#{e.message}"
|
29
32
|
else
|
30
33
|
recipes.flatten!
|
31
34
|
end
|
@@ -33,18 +36,19 @@ module ItamaeMitsurin
|
|
33
36
|
# get env attr
|
34
37
|
begin
|
35
38
|
env_set = node_h[:environments][:set]
|
39
|
+
raise "No environments set error" if env_set.nil?
|
36
40
|
env_h = JSON.parse(File.read("environments/#{env_set}.json"), symbolize_names: true)
|
37
41
|
rescue Exception => e
|
38
42
|
puts e.class.to_s + ", " + e.backtrace[0].to_s
|
39
|
-
puts "nodefile or environments error, nodefile:#{node_file} reason:#{e.message}"
|
43
|
+
puts "nodefile or environments error, nodefile:#{node_file}, reason:#{e.message}"
|
40
44
|
end
|
41
45
|
|
42
46
|
# get recipes attr
|
43
47
|
recipe_attr_file = []
|
44
48
|
recipes.each do |recipe_h|
|
45
|
-
if recipe_h["#{recipe_h.keys.join}"]
|
49
|
+
if recipe_h["#{recipe_h.keys.join}"] == "default"
|
46
50
|
recipe_attr_file.insert 0,
|
47
|
-
Dir.glob("site-cookbooks/**/#{recipe_h.keys.join}/attributes
|
51
|
+
Dir.glob("site-cookbooks/**/#{recipe_h.keys.join}/attributes/#{recipe_h["#{recipe_h.keys.join}"]}.json")
|
48
52
|
else
|
49
53
|
recipe_attr_file <<
|
50
54
|
Dir.glob("site-cookbooks/**/#{recipe_h.keys.join}/attributes/#{recipe_h["#{recipe_h.keys.join}"]}.json")
|
@@ -77,7 +81,7 @@ module ItamaeMitsurin
|
|
77
81
|
TaskBase.write_json(bname) {|file| file.puts recipe_env_node_j}
|
78
82
|
end
|
79
83
|
|
80
|
-
recipes << {'_base' =>
|
84
|
+
recipes << {'_base' => 'default'}
|
81
85
|
node_property = JSON.parse(File.read("tmp-nodes/#{bname}.json"), symbolize_names: true)
|
82
86
|
node = node_property[:environments][:hostname]
|
83
87
|
ssh_user = node_property[:environments][:ssh_user]
|
@@ -105,13 +109,8 @@ module ItamaeMitsurin
|
|
105
109
|
# recipe load to_command
|
106
110
|
command_recipe = []
|
107
111
|
recipes.each do |recipe_h|
|
108
|
-
|
109
|
-
|
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}"
|
114
|
-
end
|
112
|
+
command_recipe <<
|
113
|
+
" #{Dir.glob("site-cookbooks/**/#{recipe_h.keys.join}/recipes/#{recipe_h["#{recipe_h.keys.join}"]}.rb").join("\s")}"
|
115
114
|
end
|
116
115
|
|
117
116
|
command_recipe.sort_by! {|item| File.dirname(item)}
|
@@ -0,0 +1,137 @@
|
|
1
|
+
require 'itamae-mitsurin/mitsurin/task_base'
|
2
|
+
include Rake::DSL if defined? Rake::DSL
|
3
|
+
|
4
|
+
# For AWS Resources
|
5
|
+
|
6
|
+
module ItamaeMitsurin
|
7
|
+
module Mitsurin
|
8
|
+
class LocalTask
|
9
|
+
namespace :local do
|
10
|
+
Dir.glob("nodes/**/*.json").each do |node_file|
|
11
|
+
bname = File.basename(node_file, '.json')
|
12
|
+
|
13
|
+
begin
|
14
|
+
node_h = JSON.parse(File.read(node_file), symbolize_names: true)
|
15
|
+
rescue JSON::ParserError => e
|
16
|
+
puts e.class.to_s + ", " + e.backtrace[0].to_s
|
17
|
+
puts "nodefile error, nodefile:#{node_file}, reason:#{e.message}"
|
18
|
+
else
|
19
|
+
all << node_h[:environments][:hostname].split(".")[0]
|
20
|
+
task :all => all
|
21
|
+
end
|
22
|
+
|
23
|
+
desc "Local to #{bname}"
|
24
|
+
task node_h[:environments][:hostname].split(".")[0] do
|
25
|
+
begin
|
26
|
+
recipes = []
|
27
|
+
TaskBase.get_roles(node_file).each do |role|
|
28
|
+
recipes << TaskBase.get_recipes(role)
|
29
|
+
end
|
30
|
+
TaskBase.get_node_recipes(node_file).each do |recipe|
|
31
|
+
recipes << recipe
|
32
|
+
end
|
33
|
+
rescue Exception => e
|
34
|
+
puts e.class.to_s + ", " + e.backtrace[0].to_s
|
35
|
+
puts "nodefile or role error, nodefile:#{node_file}, reason:#{e.message}"
|
36
|
+
else
|
37
|
+
recipes.flatten!
|
38
|
+
end
|
39
|
+
|
40
|
+
# get env attr
|
41
|
+
begin
|
42
|
+
env_set = node_h[:environments][:set]
|
43
|
+
raise "No environments set error" if env_set.nil?
|
44
|
+
env_h = JSON.parse(File.read("environments/#{env_set}.json"), symbolize_names: true)
|
45
|
+
rescue Exception => e
|
46
|
+
puts e.class.to_s + ", " + e.backtrace[0].to_s
|
47
|
+
puts "nodefile or environments error, nodefile:#{node_file}, reason:#{e.message}"
|
48
|
+
end
|
49
|
+
|
50
|
+
# get recipes attr
|
51
|
+
recipe_attr_file = []
|
52
|
+
recipes.each do |recipe_h|
|
53
|
+
if recipe_h["#{recipe_h.keys.join}"] == "default"
|
54
|
+
recipe_attr_file.insert 0,
|
55
|
+
Dir.glob("site-cookbooks/**/#{recipe_h.keys.join}/attributes/#{recipe_h["#{recipe_h.keys.join}"]}.json")
|
56
|
+
else
|
57
|
+
recipe_attr_file <<
|
58
|
+
Dir.glob("site-cookbooks/**/#{recipe_h.keys.join}/attributes/#{recipe_h["#{recipe_h.keys.join}"]}.json")
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
recipe_attr_file.flatten!
|
63
|
+
|
64
|
+
# recipes attr other=env
|
65
|
+
recipe_env_h_a = []
|
66
|
+
recipe_attr_file.each do |file|
|
67
|
+
recipe_h = JSON.parse(File.read(file), symbolize_names: true)
|
68
|
+
recipe_env_h_a << recipe_h.deep_merge(env_h)
|
69
|
+
end
|
70
|
+
|
71
|
+
# recipe attr other=recipes_env
|
72
|
+
moto = recipe_env_h_a[0]
|
73
|
+
recipe_env_h_a.each {|hash| moto.deep_merge!(hash)}
|
74
|
+
recipe_env_h = moto
|
75
|
+
|
76
|
+
if recipe_env_h.nil?
|
77
|
+
# env attr other=node
|
78
|
+
node_env_h = env_h.deep_merge(node_h)
|
79
|
+
node_env_j = TaskBase.jq node_env_h
|
80
|
+
path = TaskBase.write_tmp_json(bname) {|file| file.puts node_env_j}
|
81
|
+
else
|
82
|
+
# recipe_env attr other=node
|
83
|
+
recipe_env_node_h = recipe_env_h.deep_merge(node_h)
|
84
|
+
recipe_env_node_j = TaskBase.jq recipe_env_node_h
|
85
|
+
path = TaskBase.write_tmp_json(bname) {|file| file.puts recipe_env_node_j}
|
86
|
+
end
|
87
|
+
|
88
|
+
recipes << {'_base' => 'default'}
|
89
|
+
node_property = JSON.parse(File.read("tmp-nodes/#{bname}.json"), symbolize_names: true)
|
90
|
+
node = node_property[:environments][:hostname]
|
91
|
+
sudo_password = node_property[:environments][:sudo_password]
|
92
|
+
|
93
|
+
ENV['TARGET_HOST'] = node
|
94
|
+
ENV['NODE_FILE'] = node_file
|
95
|
+
ENV['SUDO_PASSWORD'] = sudo_password
|
96
|
+
|
97
|
+
command = "bundle exec itamae local"
|
98
|
+
command << " -h #{node}"
|
99
|
+
command << " -j #{path}/#{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"
|
104
|
+
|
105
|
+
# recipe load to_command
|
106
|
+
command_recipe = []
|
107
|
+
recipes.each do |recipe_h|
|
108
|
+
command_recipe <<
|
109
|
+
" #{Dir.glob("site-cookbooks/**/#{recipe_h.keys.join}/recipes/#{recipe_h["#{recipe_h.keys.join}"]}.rb").join("\s")}"
|
110
|
+
end
|
111
|
+
|
112
|
+
command_recipe.sort_by! {|item| File.dirname(item)}
|
113
|
+
command << command_recipe.join
|
114
|
+
|
115
|
+
puts TaskBase.hl.color(%!Run Itamae to \"#{bname}\"!, :red)
|
116
|
+
run_list_noti = []
|
117
|
+
command_recipe.each {|c_recipe| run_list_noti << c_recipe.split("/") [2]}
|
118
|
+
puts TaskBase.hl.color(%!Run List to \"#{run_list_noti.uniq.join(", ")}\"!, :green)
|
119
|
+
puts TaskBase.hl.color(%!#{command}!, :white)
|
120
|
+
begin
|
121
|
+
st = system command
|
122
|
+
rescue Exception => e
|
123
|
+
puts "command error, nodefile:#{node_file}, reason:#{e.message}"
|
124
|
+
puts "#{e.backtrace}"
|
125
|
+
ensure
|
126
|
+
FileUtils.remove_entry_secure path
|
127
|
+
exit 1 unless st
|
128
|
+
end
|
129
|
+
end
|
130
|
+
end
|
131
|
+
desc "local init all"
|
132
|
+
task :local => 'local:all'
|
133
|
+
end
|
134
|
+
|
135
|
+
end
|
136
|
+
end
|
137
|
+
end
|
@@ -1,5 +1,3 @@
|
|
1
|
-
require 'json'
|
2
|
-
require 'highline'
|
3
1
|
require 'itamae-mitsurin/mitsurin/task_base'
|
4
2
|
include Rake::DSL if defined? Rake::DSL
|
5
3
|
|
@@ -14,37 +12,43 @@ module Itamae
|
|
14
12
|
Dir.glob("tmp-nodes/**/*.json").each do |node_file|
|
15
13
|
|
16
14
|
file_name = File.basename(node_file, '.json')
|
17
|
-
|
15
|
+
begin
|
16
|
+
node_attr = JSON.parse(File.read(node_file), symbolize_names: true)
|
17
|
+
rescue JSON::ParserError => e
|
18
|
+
puts e.class.to_s + ", " + e.backtrace[0].to_s
|
19
|
+
puts "nodefile error, nodefile:#{node_file}, reason:#{e.message}"
|
20
|
+
end
|
18
21
|
|
19
22
|
desc "Spec to #{file_name}"
|
20
23
|
task node_attr[:environments][:hostname].split(".")[0] do
|
21
24
|
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
25
|
+
begin
|
26
|
+
recipes = []
|
27
|
+
TaskBase.get_roles(node_file).each do |role|
|
28
|
+
recipes << TaskBase.get_recipes(role)
|
29
|
+
end
|
30
|
+
TaskBase.get_node_recipes(node_file).each do |recipe|
|
31
|
+
recipes << recipe
|
32
|
+
end
|
33
|
+
rescue Exception => e
|
34
|
+
puts e.class.to_s + ", " + e.backtrace[0].to_s
|
35
|
+
puts "nodefile or role error, nodefile:#{node_file} reason:#{e.message}"
|
36
|
+
exit 1
|
37
|
+
else
|
38
|
+
recipes << {'_base' => 'default'}
|
39
|
+
recipes.flatten!
|
29
40
|
end
|
30
|
-
rescue Exception => e
|
31
|
-
puts e.class.to_s + ", " + e.backtrace[0].to_s
|
32
|
-
puts "nodefile or role error, nodefile:#{node_file} reason:#{e.message}"
|
33
|
-
exit 1
|
34
|
-
else
|
35
|
-
recipes << {'_base' => nil}
|
36
|
-
recipes.flatten!
|
37
|
-
end
|
38
41
|
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
42
|
+
node_name = node_attr[:environments][:hostname]
|
43
|
+
ssh_user = node_attr[:environments][:ssh_user]
|
44
|
+
ssh_password = node_attr[:environments][:ssh_password]
|
45
|
+
sudo_password = node_attr[:environments][:sudo_password]
|
46
|
+
ssh_port = node_attr[:environments][:ssh_port]
|
47
|
+
ssh_key = node_attr[:environments][:ssh_key]
|
45
48
|
|
46
|
-
|
49
|
+
node_short = node_name.split(".")[0]
|
47
50
|
all << node_short
|
51
|
+
task :all => all
|
48
52
|
|
49
53
|
desc "Run spec to #{file_name}"
|
50
54
|
ENV['TARGET_HOST'] = node_name
|
@@ -60,13 +64,8 @@ module Itamae
|
|
60
64
|
# recipe load to_spec
|
61
65
|
spec_pattern = []
|
62
66
|
recipes.each do |spec_h|
|
63
|
-
|
64
|
-
|
65
|
-
" #{Dir.glob("site-cookbooks/**/#{spec_h.keys.join}/spec/default_spec.rb").join}"
|
66
|
-
else
|
67
|
-
spec_pattern <<
|
68
|
-
" #{Dir.glob("site-cookbooks/**/#{spec_h.keys.join}/spec/#{spec_h["#{spec_h.keys.join}"]}_spec.rb").join}"
|
69
|
-
end
|
67
|
+
spec_pattern <<
|
68
|
+
" #{Dir.glob("site-cookbooks/**/#{spec_h.keys.join}/spec/#{spec_h["#{spec_h.keys.join}"]}_spec.rb").join("\s")}"
|
70
69
|
end
|
71
70
|
|
72
71
|
spec_pattern.sort_by! {|item| File.dirname(item)}
|
@@ -78,8 +77,8 @@ module Itamae
|
|
78
77
|
st = system specs
|
79
78
|
exit 1 unless st
|
80
79
|
end
|
81
|
-
|
82
|
-
task :
|
80
|
+
desc "Serverspec to all nodes"
|
81
|
+
task :all => 'spec:all'
|
83
82
|
end
|
84
83
|
end
|
85
84
|
|
@@ -1,3 +1,6 @@
|
|
1
|
+
require 'json'
|
2
|
+
require 'highline'
|
3
|
+
require "tmpdir"
|
1
4
|
|
2
5
|
module ItamaeMitsurin
|
3
6
|
module Mitsurin
|
@@ -30,7 +33,7 @@ module ItamaeMitsurin
|
|
30
33
|
if /recipe\[(.+)::(.+)\]/ === recipe
|
31
34
|
recipes << {recipe.gsub(/recipe\[(.+)::(.+)\]/, '\1') => recipe.gsub(/recipe\[(.+)::(.+)\]/, '\2')}
|
32
35
|
else
|
33
|
-
recipes << {recipe.gsub(/recipe\[(.+)\]/, '\1') =>
|
36
|
+
recipes << {recipe.gsub(/recipe\[(.+)\]/, '\1') => 'default'}
|
34
37
|
end
|
35
38
|
end
|
36
39
|
recipes
|
@@ -42,7 +45,7 @@ module ItamaeMitsurin
|
|
42
45
|
if /recipe\[(.+)::(.+)\]/ === recipe
|
43
46
|
recipes << {recipe.gsub(/recipe\[(.+)::(.+)\]/, '\1') => recipe.gsub(/recipe\[(.+)::(.+)\]/, '\2')}
|
44
47
|
else
|
45
|
-
recipes << {recipe.gsub(/recipe\[(.+)\]/, '\1') =>
|
48
|
+
recipes << {recipe.gsub(/recipe\[(.+)\]/, '\1') => 'default'} unless /role\[(.+)\]/ === recipe
|
46
49
|
end
|
47
50
|
end
|
48
51
|
recipes
|
@@ -62,6 +65,16 @@ module ItamaeMitsurin
|
|
62
65
|
end
|
63
66
|
end
|
64
67
|
|
68
|
+
def write_tmp_json(filename)
|
69
|
+
path = Dir.mktmpdir("mitsurin-")
|
70
|
+
open("#{path}/#{filename}.json", "w") do |f|
|
71
|
+
f.flock File::LOCK_EX
|
72
|
+
yield f
|
73
|
+
f.flock File::LOCK_UN
|
74
|
+
end
|
75
|
+
path
|
76
|
+
end
|
77
|
+
|
65
78
|
def hl
|
66
79
|
HighLine.new
|
67
80
|
end
|
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.13
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: itamae-mitsurin
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: '0.
|
4
|
+
version: '0.13'
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Akihiro Kamiyama
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-03-
|
11
|
+
date: 2016-03-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: thor
|
@@ -170,6 +170,20 @@ dependencies:
|
|
170
170
|
- - ">="
|
171
171
|
- !ruby/object:Gem::Version
|
172
172
|
version: '0'
|
173
|
+
- !ruby/object:Gem::Dependency
|
174
|
+
name: tempdir
|
175
|
+
requirement: !ruby/object:Gem::Requirement
|
176
|
+
requirements:
|
177
|
+
- - ">="
|
178
|
+
- !ruby/object:Gem::Version
|
179
|
+
version: '0'
|
180
|
+
type: :runtime
|
181
|
+
prerelease: false
|
182
|
+
version_requirements: !ruby/object:Gem::Requirement
|
183
|
+
requirements:
|
184
|
+
- - ">="
|
185
|
+
- !ruby/object:Gem::Version
|
186
|
+
version: '0'
|
173
187
|
- !ruby/object:Gem::Dependency
|
174
188
|
name: rake-compiler
|
175
189
|
requirement: !ruby/object:Gem::Requirement
|
@@ -294,6 +308,7 @@ files:
|
|
294
308
|
- lib/itamae-mitsurin/mitsurin/creators/templates/project/Gemfile
|
295
309
|
- lib/itamae-mitsurin/mitsurin/creators/templates/project/Rakefile
|
296
310
|
- lib/itamae-mitsurin/mitsurin/creators/templates/project/environments/.keep
|
311
|
+
- lib/itamae-mitsurin/mitsurin/creators/templates/project/environments/nothing.json
|
297
312
|
- lib/itamae-mitsurin/mitsurin/creators/templates/project/environments/sample.json
|
298
313
|
- lib/itamae-mitsurin/mitsurin/creators/templates/project/keys/.keep
|
299
314
|
- lib/itamae-mitsurin/mitsurin/creators/templates/project/nodes/.keep
|
@@ -315,6 +330,7 @@ files:
|
|
315
330
|
- lib/itamae-mitsurin/mitsurin/creators/templates/site-cookbooks/spec/default_spec.rb
|
316
331
|
- lib/itamae-mitsurin/mitsurin/itamae_task.rb
|
317
332
|
- lib/itamae-mitsurin/mitsurin/itamae_with_git_task.rb
|
333
|
+
- lib/itamae-mitsurin/mitsurin/local_task.rb
|
318
334
|
- lib/itamae-mitsurin/mitsurin/serverspec_task.rb
|
319
335
|
- lib/itamae-mitsurin/mitsurin/task_base.rb
|
320
336
|
- lib/itamae-mitsurin/node.rb
|