cfndk 0.0.2 → 0.0.3
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/.gitignore +1 -0
- data/README.md +86 -36
- data/bin/cfndk +20 -16
- data/lib/cfndk/{parameter_string.rb → erb_string.rb} +1 -1
- data/lib/cfndk/key_pair.rb +44 -0
- data/lib/cfndk/key_pairs.rb +27 -0
- data/lib/cfndk/stack.rb +1 -1
- data/lib/cfndk/stacks.rb +27 -12
- data/lib/cfndk/version.rb +1 -1
- data/lib/cfndk.rb +3 -1
- data/sample/cfndk.yml +24 -12
- data/sample/db/db.yaml +136 -0
- data/sample/db/prod.json +68 -0
- data/sample/elb/elb.yaml +8 -0
- data/sample/elb/prod.json +0 -0
- data/sample/iam/iam.yaml +53 -0
- data/sample/iam/prod.json +12 -0
- data/sample/key/.gitkeep +0 -0
- data/sample/network/network.yaml +333 -0
- data/sample/network/prod.json +44 -0
- data/sample/sg/prod.json +8 -0
- data/sample/sg/sg.yaml +51 -0
- data/sample/web/prod.json +48 -0
- data/sample/web/web.yaml +132 -0
- data/skel/cfndk.yml +4 -0
- metadata +18 -4
- data/README-ja.md +0 -282
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 32c22522a1cc1e7dfc9ca0aba8493db5f8db8eb8
|
4
|
+
data.tar.gz: 769e02185ab86037a82889853ecfd93c3a3f912a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0d53377bb67a1f2b93a161353172b9984ec462f3ea430867b69ccd88cac81e237d4832fc247f6c7e83f16481636e45e79f9f6c80c7d95ea7e8adc6b6ffd10627
|
7
|
+
data.tar.gz: 891db997bc6e5c174592f4fc6c98cd8b54572422417244ba7789b5d15228fba9dc0fd8cdc5e8429f3042725c27de88aa5f398de98469c40a9966fbb8d8721003
|
data/.gitignore
CHANGED
data/README.md
CHANGED
@@ -1,8 +1,21 @@
|
|
1
1
|
# AWS CloudFormation Development Kit
|
2
2
|
|
3
3
|
This is easy operation/integration support tool for AWS CloudFormation.
|
4
|
+
|
4
5
|
このツールは、AWS CloudFromationのための簡単な運用/構築サポートツールです。
|
5
6
|
|
7
|
+
kumogata, SparkleFormation, CoffeeFormation など、CloudFormationのテンプレートを書かずにDSLで表現するツールには様々な物があります。
|
8
|
+
しかし、これらのツールはサードパーティツールであるため、CloudFormationの対応への追従に不安がのこります。
|
9
|
+
本ツールは、標準のCloudFromationテンプレートの枠組みを変えずに、その利用を支援するツールとなっています。
|
10
|
+
最悪このツールが使えなくなっても僅かなコストで標準のAWS CLIを使ってオペレーションを続行することが可能です。
|
11
|
+
|
12
|
+
## ハイライト
|
13
|
+
|
14
|
+
* 複数のスタックをワンコマンドで作成/更新/削除
|
15
|
+
* 複数のスタックの依存関係を考慮した操作
|
16
|
+
* CloudFormationでバージョンコントロールシステムと連動した継続的インテグレーションのための基盤対応
|
17
|
+
* Keypairの作成/削除
|
18
|
+
|
6
19
|
## インストール
|
7
20
|
|
8
21
|
```
|
@@ -32,7 +45,7 @@ cfndk [cmd] [options]
|
|
32
45
|
|
33
46
|
### [cmd]
|
34
47
|
|
35
|
-
####
|
48
|
+
#### ```init```
|
36
49
|
|
37
50
|
カレントディレクトリにcfndk.yamlのひな形を作成します。
|
38
51
|
|
@@ -40,7 +53,7 @@ cfndk [cmd] [options]
|
|
40
53
|
cfndk init [option]
|
41
54
|
```
|
42
55
|
|
43
|
-
####
|
56
|
+
#### ```create```
|
44
57
|
|
45
58
|
cfndk.yamlで定義されているスタックを作成します。
|
46
59
|
|
@@ -48,7 +61,7 @@ cfndk.yamlで定義されているスタックを作成します。
|
|
48
61
|
cfndk create [option]
|
49
62
|
```
|
50
63
|
|
51
|
-
####
|
64
|
+
#### ```update```
|
52
65
|
|
53
66
|
cfndk.yamlで定義されているスタックを更新します。
|
54
67
|
|
@@ -56,17 +69,17 @@ cfndk.yamlで定義されているスタックを更新します。
|
|
56
69
|
cfndk update [option]
|
57
70
|
```
|
58
71
|
|
59
|
-
####
|
72
|
+
#### ```create-or-changeset```
|
60
73
|
|
61
74
|
cfndk.yamlで定義されているスタックが存在しない場合は作成を、存在する場合はチェンジセットを作成します。
|
62
75
|
チェンジセットの実行は行いません。
|
63
76
|
コマンドを実行後に手動で実行する必要があります。
|
64
77
|
|
65
78
|
```
|
66
|
-
cfndk
|
79
|
+
cfndk create-or-changeset [option]
|
67
80
|
```
|
68
81
|
|
69
|
-
####
|
82
|
+
#### ```destroy```
|
70
83
|
|
71
84
|
cfndk.yamlで定義されているスタックを削除します。
|
72
85
|
|
@@ -74,7 +87,7 @@ cfndk.yamlで定義されているスタックを削除します。
|
|
74
87
|
cfndk destroy [option]
|
75
88
|
```
|
76
89
|
|
77
|
-
####
|
90
|
+
#### ```generate-uuid```
|
78
91
|
|
79
92
|
UUIDを生成して標準出力に出力します。
|
80
93
|
|
@@ -88,9 +101,14 @@ cfndk generate-uuid
|
|
88
101
|
export CFNDK_UUID=`cfndk generate-uuid`
|
89
102
|
cfndk create
|
90
103
|
cfndk destroy
|
104
|
+
unset CFNDK_UUID
|
91
105
|
```
|
92
106
|
|
93
|
-
####
|
107
|
+
#### ```validate```
|
108
|
+
|
109
|
+
cfndk.yamlで定義されているスタックのテンプレートをvalidationします。
|
110
|
+
|
111
|
+
#### ```report-event```
|
94
112
|
|
95
113
|
cfndk.yamlで定義されているスタックのイベント情報をレポートします。
|
96
114
|
|
@@ -98,7 +116,7 @@ cfndk.yamlで定義されているスタックのイベント情報をレポー
|
|
98
116
|
cfndk report-event [option]
|
99
117
|
```
|
100
118
|
|
101
|
-
####
|
119
|
+
#### ```report-stack```
|
102
120
|
|
103
121
|
cfndk.yamlで定義されているスタックの情報をレポートします。
|
104
122
|
|
@@ -106,7 +124,7 @@ cfndk.yamlで定義されているスタックの情報をレポートします
|
|
106
124
|
cfndk report-stack [option]
|
107
125
|
```
|
108
126
|
|
109
|
-
####
|
127
|
+
#### ```report-stack-resource```
|
110
128
|
|
111
129
|
cfndk.yamlで定義されているスタックのリソース情報をレポートします。
|
112
130
|
|
@@ -116,27 +134,27 @@ cfndk report-stack-resource [option]
|
|
116
134
|
|
117
135
|
### [option]
|
118
136
|
|
119
|
-
####
|
137
|
+
#### ```-v --verbose```
|
120
138
|
|
121
139
|
実行時に詳細な情報を表示します。
|
122
140
|
|
123
|
-
####
|
141
|
+
#### ```-c, --config_path <cfndi.yml>```
|
124
142
|
|
125
143
|
カレントディレクトリのcfndi.ymlの代わりに、ファイルを指定します。
|
126
144
|
|
127
|
-
####
|
145
|
+
#### ```-p, --properties <name>=<value>```
|
128
146
|
|
129
147
|
プロパティを追加します。
|
130
|
-
cfndi.ymlのparameters
|
148
|
+
cfndi.ymlのparametersのerb内で値で参照することができます。
|
131
149
|
|
132
|
-
####
|
150
|
+
#### ```-a, --auto-uuid```
|
133
151
|
|
134
152
|
UUIDを自動生成し使用します。
|
135
153
|
UUIDが指定されるとスタック名に付加されます。
|
136
154
|
またcfndi.ymlのparametersの値で参照することができます。
|
137
155
|
```-a```と```-u```は最後に指定されたものが有効になります。
|
138
156
|
|
139
|
-
####
|
157
|
+
#### ```-u, --uuid <uuid>```
|
140
158
|
|
141
159
|
指定されたUUIDを使用します。
|
142
160
|
UUIDが指定されるとスタック名に付加されます。
|
@@ -146,7 +164,7 @@ UUIDが指定されるとスタック名に付加されます。
|
|
146
164
|
|
147
165
|
## 環境変数
|
148
166
|
|
149
|
-
### CFNDK_UUID
|
167
|
+
### ```CFNDK_UUID```
|
150
168
|
|
151
169
|
この環境変数が指定されている場合、```--uuid $CFNDK_UUID```が指定されたものとして動作します。
|
152
170
|
```-a```や```-u```のほうが優先されます。
|
@@ -157,10 +175,19 @@ UUIDが指定されるとスタック名に付加されます。
|
|
157
175
|
* example
|
158
176
|
|
159
177
|
```
|
178
|
+
keypairs:
|
179
|
+
Key1:
|
180
|
+
Key2:
|
181
|
+
key_file: key/key2<%= append_uuid %>.pem
|
160
182
|
stacks:
|
183
|
+
Stack1:
|
184
|
+
template_file: stack1/stack1.yaml
|
185
|
+
parameter_input: stack1/env.json
|
186
|
+
parameters:
|
187
|
+
VpcName: Prod<%= append_uuid %>
|
161
188
|
Stack2:
|
162
189
|
template_file: stack2/stack2.yaml
|
163
|
-
parameter_input:
|
190
|
+
parameter_input: stack2/env.json
|
164
191
|
parameters:
|
165
192
|
VpcName: Prod<%= append_uuid %>
|
166
193
|
capabilities:
|
@@ -172,6 +199,9 @@ stacks:
|
|
172
199
|
```
|
173
200
|
|
174
201
|
```
|
202
|
+
keypairs:
|
203
|
+
[String]:
|
204
|
+
key_file: [String]
|
175
205
|
stacks:
|
176
206
|
[String]:
|
177
207
|
template_file: [String]
|
@@ -188,6 +218,30 @@ stacks:
|
|
188
218
|
- [String]
|
189
219
|
```
|
190
220
|
|
221
|
+
### ```keypairs:```
|
222
|
+
|
223
|
+
```
|
224
|
+
keypairs:
|
225
|
+
[keypair Original Name]:
|
226
|
+
```
|
227
|
+
|
228
|
+
cfndkで管理するキーペアを定義します。
|
229
|
+
キーペアの配下には、管理するキーペアのオリジナル名を定義します。
|
230
|
+
通常は、キーペアを作成するとこの名称が利用されます。
|
231
|
+
UUIDを利用すると、```[Keypair Original Name]-[UUID]```のような形式のキーペア名が利用されます。
|
232
|
+
|
233
|
+
#### key_file
|
234
|
+
|
235
|
+
キーペア作成時にキーペアのファイルを指定された相対パスに作成します。
|
236
|
+
同名のファイルがある場合は上書きするので注意が必要です。
|
237
|
+
|
238
|
+
erbの記法が利用できます。
|
239
|
+
|
240
|
+
```
|
241
|
+
key_file: key/key<%= append_uuid %>.pem
|
242
|
+
```
|
243
|
+
|
244
|
+
|
191
245
|
### ```stacks:```
|
192
246
|
|
193
247
|
```
|
@@ -206,7 +260,7 @@ UUIDを利用すると、```[Stack Original Name]-[UUID]```のような形式の
|
|
206
260
|
|
207
261
|
#### parameter_input
|
208
262
|
|
209
|
-
必須。CloudFormationのパラメータJSON
|
263
|
+
必須。CloudFormationのパラメータJSONファイルをcfndk.yamlからの相対パスで指定します。
|
210
264
|
|
211
265
|
#### parameters
|
212
266
|
|
@@ -226,23 +280,6 @@ Parameter Valueではerbの記法が利用できます。
|
|
226
280
|
VpcName: Prod<%= append_uuid %>
|
227
281
|
```
|
228
282
|
|
229
|
-
##### parametrsのerbで使用できるメソッド
|
230
|
-
|
231
|
-
* ```append_uuid(glue='-')```
|
232
|
-
|
233
|
-
UUIDガ指定されている場合、```[glueの文字列] + [UUID]```を返します。
|
234
|
-
UUIDが指定されてい無い場合は空文字が返ります。
|
235
|
-
glueで接続文字を置き換えることができます。
|
236
|
-
|
237
|
-
* ```uuid```
|
238
|
-
|
239
|
-
UUIDを返します。
|
240
|
-
UUIDが指定されてい無い場合は空文字が返ります。
|
241
|
-
|
242
|
-
* ```properties(key)```
|
243
|
-
|
244
|
-
オプション```--properties```で指定したキーに対応する値を参照することができます。
|
245
|
-
|
246
283
|
#### capabilities
|
247
284
|
|
248
285
|
スタックを操作するcapabilitiesを指定します。
|
@@ -283,6 +320,19 @@ dependsが循環するような指定をすることはできません。
|
|
283
320
|
```
|
284
321
|
|
285
322
|
|
323
|
+
### erbで使用できるメソッド
|
286
324
|
|
325
|
+
* ```append_uuid(glue='-')```
|
326
|
+
|
327
|
+
UUIDガ指定されている場合、```[glueの文字列] + [UUID]```を返します。
|
328
|
+
UUIDが指定されてい無い場合は空文字が返ります。
|
329
|
+
glueで接続文字を置き換えることができます。
|
330
|
+
|
331
|
+
* ```uuid```
|
332
|
+
|
333
|
+
UUIDを返します。
|
334
|
+
UUIDが指定されてい無い場合は空文字が返ります。
|
287
335
|
|
336
|
+
* ```properties(key)```
|
288
337
|
|
338
|
+
オプション```--properties```で指定したキーに対応する値を参照することができます。
|
data/bin/cfndk
CHANGED
@@ -15,6 +15,8 @@ require 'securerandom'
|
|
15
15
|
|
16
16
|
require 'cfndk.rb'
|
17
17
|
|
18
|
+
$LOAD_PATH.unshift File.dirname(__FILE__) + '/../lib'
|
19
|
+
|
18
20
|
cur_dir = Dir.getwd
|
19
21
|
|
20
22
|
option = {
|
@@ -67,24 +69,30 @@ if ARGV.length != 1
|
|
67
69
|
elsif ARGV[0] == 'generate-uuid'
|
68
70
|
puts SecureRandom.uuid
|
69
71
|
exit 0
|
72
|
+
elsif ARGV[0] == 'init'
|
73
|
+
if File.file?(option[:config_path])
|
74
|
+
puts "File exist. #{option[:config_path]}".color :red
|
75
|
+
exit 1
|
76
|
+
end
|
77
|
+
puts 'init...'.color :green
|
78
|
+
FileUtils.cp_r(Dir.glob(File.dirname(__FILE__) + '/../skel/*'), './')
|
79
|
+
puts "create #{option[:config_path]}".color :green
|
80
|
+
exit 0
|
70
81
|
end
|
71
82
|
|
72
|
-
unless File.file?(option[:config_path])
|
83
|
+
unless File.file?(option[:config_path])
|
73
84
|
puts "File does not exist. #{option[:config_path]}".color :red
|
74
85
|
exit 1
|
75
86
|
end
|
76
87
|
|
77
|
-
|
78
|
-
$LOAD_PATH.unshift File.dirname(__FILE__) + '/../lib'
|
79
|
-
|
80
|
-
data = open(option[:config_path], 'r') { |f| YAML.load(f) } if File.file?(option[:config_path]) && ARGV[0] != 'init'
|
81
|
-
|
88
|
+
data = open(option[:config_path], 'r') { |f| YAML.load(f) } if File.file?(option[:config_path])
|
82
89
|
credentials = CFnDK::CredentialProviderChain.new.resolve
|
83
|
-
|
84
|
-
|
90
|
+
stacks = CFnDK::Stacks.new(data, option, credentials)
|
91
|
+
keypairs = CFnDK::KeyPairs.new(data, option, credentials)
|
85
92
|
|
86
93
|
if ARGV[0] == 'create'
|
87
94
|
puts 'create...'.color :green
|
95
|
+
keypairs.create
|
88
96
|
stacks.create
|
89
97
|
elsif ARGV[0] == 'update'
|
90
98
|
puts 'update...'.color :green
|
@@ -95,6 +103,10 @@ elsif ARGV[0] == 'create-or-changeset'
|
|
95
103
|
elsif ARGV[0] == 'destroy'
|
96
104
|
puts 'destroy...'.color :green
|
97
105
|
stacks.destroy
|
106
|
+
keypairs.destroy
|
107
|
+
elsif ARGV[0] == 'validate'
|
108
|
+
puts 'validate...'.color :green
|
109
|
+
stacks.validate
|
98
110
|
elsif ARGV[0] == 'report-event'
|
99
111
|
puts 'report event...'.color :green
|
100
112
|
stacks.report_event
|
@@ -104,14 +116,6 @@ elsif ARGV[0] == 'report-stack'
|
|
104
116
|
elsif ARGV[0] == 'report-stack-resource'
|
105
117
|
puts 'report stack resource...'.color :green
|
106
118
|
stacks.report_stack_resource
|
107
|
-
elsif ARGV[0] == 'init'
|
108
|
-
if File.file?(option[:config_path])
|
109
|
-
puts "File exist. #{option[:config_path]}".color :red
|
110
|
-
exit 1
|
111
|
-
end
|
112
|
-
puts 'init...'.color :green
|
113
|
-
FileUtils.cp_r(Dir.glob(File.dirname(__FILE__) + '/../skel/*'), './')
|
114
|
-
puts "create #{option[:config_path]}".color :green
|
115
119
|
else
|
116
120
|
puts opt.help
|
117
121
|
exit 1
|
@@ -0,0 +1,44 @@
|
|
1
|
+
module CFnDK
|
2
|
+
class KeyPair
|
3
|
+
attr_reader :key_file
|
4
|
+
def initialize(name, data, option, credentials)
|
5
|
+
@name = name
|
6
|
+
@key_file = nil
|
7
|
+
@key_file = data['key_file'] || nil if data
|
8
|
+
@option = option
|
9
|
+
@client = Aws::EC2::Client.new(credentials: credentials)
|
10
|
+
end
|
11
|
+
|
12
|
+
def create
|
13
|
+
puts(('creating keypair: ' + name).color(:green))
|
14
|
+
key_pair = @client.create_key_pair(
|
15
|
+
key_name: name
|
16
|
+
)
|
17
|
+
puts(('created keypair: ' + name).color(:green))
|
18
|
+
|
19
|
+
create_key_file(key_pair)
|
20
|
+
end
|
21
|
+
|
22
|
+
def destroy
|
23
|
+
puts(('deleting keypair: ' + name).color(:green))
|
24
|
+
@client.delete_key_pair(
|
25
|
+
key_name: name
|
26
|
+
)
|
27
|
+
puts(('deleted keypair: ' + name).color(:green))
|
28
|
+
end
|
29
|
+
|
30
|
+
def name
|
31
|
+
[@name, @option[:uuid]].compact.join('-')
|
32
|
+
end
|
33
|
+
|
34
|
+
private
|
35
|
+
|
36
|
+
def create_key_file key_pair
|
37
|
+
return unless @key_file
|
38
|
+
key_file = CFnDK::ErbString.new(@key_file, @option).value
|
39
|
+
puts(('create key file: ' + key_file).color(:green))
|
40
|
+
File.write(key_file, key_pair.key_material)
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module CFnDK
|
2
|
+
class KeyPairs
|
3
|
+
def initialize(data, option, credentials)
|
4
|
+
@option = option
|
5
|
+
@credentials = credentials
|
6
|
+
prepare_keypairs(data)
|
7
|
+
end
|
8
|
+
|
9
|
+
def create
|
10
|
+
@keypairs.each_value(&:create)
|
11
|
+
end
|
12
|
+
|
13
|
+
def destroy
|
14
|
+
@keypairs.each_value(&:destroy)
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
|
19
|
+
def prepare_keypairs(data)
|
20
|
+
@keypairs = {}
|
21
|
+
return unless data['keypairs']
|
22
|
+
data['keypairs'].each do |name, properties|
|
23
|
+
@keypairs[name] = KeyPair.new(name, properties, @option, @credentials)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
data/lib/cfndk/stack.rb
CHANGED
data/lib/cfndk/stacks.rb
CHANGED
@@ -1,13 +1,14 @@
|
|
1
1
|
module CFnDK
|
2
2
|
class Stacks
|
3
|
-
def initialize(data, option,
|
3
|
+
def initialize(data, option, credentials)
|
4
4
|
@option = option
|
5
|
-
@cfn_client =
|
5
|
+
@cfn_client = Aws::CloudFormation::Client.new(credentials: credentials)
|
6
6
|
create_stack data
|
7
7
|
create_sequence
|
8
8
|
end
|
9
9
|
|
10
10
|
def create
|
11
|
+
validate
|
11
12
|
@sequence.each do |stacks|
|
12
13
|
stacks.each do |name|
|
13
14
|
puts(('creating ' + name).color(:green))
|
@@ -40,6 +41,7 @@ module CFnDK
|
|
40
41
|
end
|
41
42
|
|
42
43
|
def update
|
44
|
+
validate
|
43
45
|
@sequence.each do |stacks|
|
44
46
|
updating_stacks = []
|
45
47
|
stacks.each do |name|
|
@@ -71,6 +73,7 @@ module CFnDK
|
|
71
73
|
end
|
72
74
|
|
73
75
|
def create_or_changeset
|
76
|
+
validate
|
74
77
|
@sequence.each do |stacks|
|
75
78
|
create_stacks = []
|
76
79
|
changeset_stacks = []
|
@@ -79,7 +82,7 @@ module CFnDK
|
|
79
82
|
@cfn_client.describe_stacks(
|
80
83
|
stack_name: @stacks[name].name
|
81
84
|
)
|
82
|
-
puts(('creating ' + name
|
85
|
+
puts(('creating ' + name).color(:green))
|
83
86
|
puts('Name :' + @stacks[name].name) if @option[:v]
|
84
87
|
puts('Parametres :' + @stacks[name].parameters.inspect) if @option[:v]
|
85
88
|
puts('Capabilities:' + @stacks[name].capabilities.inspect) if @option[:v]
|
@@ -88,7 +91,7 @@ module CFnDK
|
|
88
91
|
template_body: @stacks[name].template_body,
|
89
92
|
parameters: @stacks[name].parameters,
|
90
93
|
capabilities: @stacks[name].capabilities,
|
91
|
-
change_set_name: @stacks[name].name
|
94
|
+
change_set_name: @stacks[name].name,
|
92
95
|
)
|
93
96
|
changeset_stacks.push name
|
94
97
|
rescue Aws::CloudFormation::Errors::ValidationError
|
@@ -119,25 +122,25 @@ module CFnDK
|
|
119
122
|
@cfn_client.wait_until(
|
120
123
|
:change_set_create_complete,
|
121
124
|
stack_name: @stacks[name].name,
|
122
|
-
change_set_name: @stacks[name].name
|
125
|
+
change_set_name: @stacks[name].name
|
123
126
|
)
|
124
|
-
puts(('created ' + @stacks[name].name
|
127
|
+
puts(('created ' + @stacks[name].name).color(:green))
|
125
128
|
rescue Aws::Waiters::Errors::FailureStateError => ex
|
126
129
|
resp = @cfn_client.describe_change_set(
|
127
|
-
change_set_name: @stacks[name].name
|
128
|
-
stack_name: @stacks[name].name
|
130
|
+
change_set_name: @stacks[name].name,
|
131
|
+
stack_name: @stacks[name].name,
|
129
132
|
)
|
130
133
|
if resp.status_reason != "The submitted information didn't contain changes. Submit different information to create a change set."
|
131
134
|
puts ex.message.color :red
|
132
135
|
raise ex
|
133
136
|
else
|
134
|
-
puts(('failed ' + @stacks[name].name
|
137
|
+
puts(('failed ' + @stacks[name].name).color(:red))
|
135
138
|
puts resp.status_reason
|
136
139
|
@cfn_client.delete_change_set(
|
137
|
-
change_set_name: @stacks[name].name
|
138
|
-
stack_name: @stacks[name].name
|
140
|
+
change_set_name: @stacks[name].name,
|
141
|
+
stack_name: @stacks[name].name,
|
139
142
|
)
|
140
|
-
puts(('deleted ' + @stacks[name].name
|
143
|
+
puts(('deleted ' + @stacks[name].name).color(:red))
|
141
144
|
end
|
142
145
|
end
|
143
146
|
end
|
@@ -279,6 +282,18 @@ module CFnDK
|
|
279
282
|
end
|
280
283
|
end
|
281
284
|
|
285
|
+
def validate
|
286
|
+
@sequence.each do |stacks|
|
287
|
+
stacks.each do |name|
|
288
|
+
puts(('validate ' + name).color(:green))
|
289
|
+
puts('Name :' + @stacks[name].name) if @option[:v]
|
290
|
+
@cfn_client.validate_template(
|
291
|
+
template_body: @stacks[name].template_body
|
292
|
+
)
|
293
|
+
end
|
294
|
+
end
|
295
|
+
end
|
296
|
+
|
282
297
|
private
|
283
298
|
|
284
299
|
def create_stack(data)
|
data/lib/cfndk/version.rb
CHANGED
data/lib/cfndk.rb
CHANGED
data/sample/cfndk.yml
CHANGED
@@ -1,12 +1,16 @@
|
|
1
|
+
keypairs:
|
2
|
+
CFnDKSampleKey:
|
3
|
+
CFnDKSampleKey2:
|
4
|
+
key_file: key/key2<%= append_uuid %>.pem
|
1
5
|
stacks:
|
2
|
-
|
3
|
-
template_file: network/network.yaml
|
6
|
+
CFnDKSampleNetwork:
|
7
|
+
template_file: network/network.yaml
|
4
8
|
parameter_input: network/prod.json
|
5
9
|
parameters:
|
6
|
-
VpcName:
|
7
|
-
InternalDnsName:
|
10
|
+
VpcName: Sample<%= append_uuid %>
|
11
|
+
InternalDnsName: sample<%= append_uuid %>.local
|
8
12
|
timeout_in_minutes: 8
|
9
|
-
|
13
|
+
CFnDKSampleIam:
|
10
14
|
template_file: iam/iam.yaml
|
11
15
|
parameter_input: iam/prod.json
|
12
16
|
parameters:
|
@@ -16,24 +20,32 @@ stacks:
|
|
16
20
|
- CAPABILITY_IAM
|
17
21
|
- CAPABILITY_NAMED_IAM
|
18
22
|
timeout_in_minutes: 3
|
19
|
-
|
23
|
+
CFnDKSampleSg:
|
20
24
|
template_file: sg/sg.yaml
|
21
25
|
parameter_input: sg/prod.json
|
22
26
|
parameters:
|
27
|
+
VpcName: Sample<%= append_uuid %>
|
23
28
|
depends:
|
24
|
-
|
25
|
-
|
29
|
+
- CFnDKSampleNetwork
|
30
|
+
CFnDKSampleWeb:
|
26
31
|
template_file: web/web.yaml
|
27
32
|
parameter_input: web/prod.json
|
28
33
|
parameters:
|
34
|
+
VpcName: Sample<%= append_uuid %>
|
35
|
+
InternalDnsName: sample<%= append_uuid %>.local
|
36
|
+
HostName1: web1<%= append_uuid %>
|
37
|
+
HostName2: web2<%= append_uuid %>
|
38
|
+
WebInstanceProfileName: WebInstanceProfile<%= append_uuid %>
|
39
|
+
KeyPair: CFnDKSampleKey<%= append_uuid %>
|
29
40
|
depends:
|
30
|
-
|
31
|
-
|
41
|
+
- CFnDKSampleSg
|
42
|
+
- CFnDKSampleIam
|
32
43
|
timeout_in_minutes: 2
|
33
|
-
|
44
|
+
CFnDKSampleDb:
|
34
45
|
template_file: db/db.yaml
|
35
46
|
parameter_input: db/prod.json
|
36
47
|
parameters:
|
48
|
+
VpcName: Sample<%= append_uuid %>
|
37
49
|
depends:
|
38
|
-
|
50
|
+
- CFnDKSampleSg
|
39
51
|
timeout_in_minutes: 30
|