cfndk 0.0.2 → 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- 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
|