kumogata-template 0.0.17 → 0.0.18
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +6 -6
- data/lib/kumogata/template/cloudwatch.rb +213 -3
- data/lib/kumogata/template/ec2.rb +3 -1
- data/lib/kumogata/template/helper.rb +4 -0
- data/lib/kumogata/template/version.rb +1 -1
- data/template/autoscaling-scheduled-action.rb +9 -7
- data/template/cloudwatch-alarm.rb +5 -5
- data/template/elasticache-cache-cluster.rb +5 -3
- data/template/elasticache-replication-group.rb +6 -1
- data/test/cloudwatch_test.rb +151 -0
- data/test/ec2_test.rb +25 -0
- data/test/helper_test.rb +22 -0
- data/test/template/autoscaling-scheduled-action_test.rb +24 -1
- data/test/template/cloudwatch-alarm_test.rb +2 -2
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e3ef42d67f39067721ba98afb39d9392c2d0551e
|
4
|
+
data.tar.gz: 2b67f7e99a815830cded5cf6ae4cb5d295bfb9da
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5cfcba9ce73284c4ca4de89ef518e136f165f64e8e42145c7bdfb850860a290205e2ce652023bcb0a593b6ccef6925b371608efca172b415fba7a47901a08681
|
7
|
+
data.tar.gz: 11bfdc2ace307e23e6c71e93e1bad0dfdcca46c9e5324f3ad75a334712a12bc3f19df6b93acb521212ef01644e783edb2ec94cdf724157e74e9824797569d5f3
|
data/Gemfile.lock
CHANGED
@@ -1,20 +1,20 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
kumogata-template (0.0.
|
4
|
+
kumogata-template (0.0.17)
|
5
5
|
aws-sdk (~> 2.3)
|
6
6
|
kumogata (= 0.5.12)
|
7
7
|
|
8
8
|
GEM
|
9
9
|
remote: https://rubygems.org/
|
10
10
|
specs:
|
11
|
-
aws-sdk (2.7.
|
12
|
-
aws-sdk-resources (= 2.7.
|
13
|
-
aws-sdk-core (2.7.
|
11
|
+
aws-sdk (2.7.10)
|
12
|
+
aws-sdk-resources (= 2.7.10)
|
13
|
+
aws-sdk-core (2.7.10)
|
14
14
|
aws-sigv4 (~> 1.0)
|
15
15
|
jmespath (~> 1.0)
|
16
|
-
aws-sdk-resources (2.7.
|
17
|
-
aws-sdk-core (= 2.7.
|
16
|
+
aws-sdk-resources (2.7.10)
|
17
|
+
aws-sdk-core (= 2.7.10)
|
18
18
|
aws-sdk-v1 (1.66.0)
|
19
19
|
json (~> 1.4)
|
20
20
|
nokogiri (>= 1.4.4)
|
@@ -1,6 +1,7 @@
|
|
1
1
|
#
|
2
2
|
# Helper - CloudWatch
|
3
3
|
#
|
4
|
+
require 'kumogata/template/helper'
|
4
5
|
|
5
6
|
def _cloudwatch_to_period(value)
|
6
7
|
return value if value.nil?
|
@@ -40,8 +41,124 @@ def _cloudwatch_to_statistic(value)
|
|
40
41
|
end
|
41
42
|
end
|
42
43
|
|
43
|
-
def
|
44
|
-
|
44
|
+
def _cloudwatch_to_metric(value)
|
45
|
+
prefix = $1 if value =~ /^(\w+) /
|
46
|
+
# http://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CW_Support_For_AWS.html
|
47
|
+
case prefix
|
48
|
+
when "ec2", "ec2 spot", "ecs", "eb", "ebs", "efs", "elb", "alb", "emr", "es",
|
49
|
+
"transcoder", "iot",
|
50
|
+
"kinesis firehose", "firehose", "kinesis", "kms",
|
51
|
+
"lambda", "ml",
|
52
|
+
"ops works", "ow",
|
53
|
+
"polly",
|
54
|
+
"redshift",
|
55
|
+
"rds", "route53",
|
56
|
+
"ses", "sns", "sqs", "s3", "swf", "storage", "storage gateway",
|
57
|
+
"waf", "work spaces", "ws"
|
58
|
+
value.slice!(/^#{prefix} /)
|
59
|
+
value = value.split(" ").collect! do |v|
|
60
|
+
case v
|
61
|
+
when "cpu", "iops"
|
62
|
+
v.upcase
|
63
|
+
else
|
64
|
+
v.capitalize
|
65
|
+
end
|
66
|
+
end.join("")
|
67
|
+
end
|
68
|
+
value
|
69
|
+
end
|
70
|
+
|
71
|
+
def _cloudwatch_to_namespace(value)
|
72
|
+
return value if value.include? "/"
|
73
|
+
# http://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/aws-namespaces.html
|
74
|
+
value =
|
75
|
+
case value
|
76
|
+
when "api gateway"
|
77
|
+
"ApiGateway"
|
78
|
+
when "auto scaling"
|
79
|
+
"AutoScaling"
|
80
|
+
when "billing"
|
81
|
+
"Billing"
|
82
|
+
when "cloud front"
|
83
|
+
"CloudFront"
|
84
|
+
when "cloud search"
|
85
|
+
"CloudSearch"
|
86
|
+
when "cloudwatch events"
|
87
|
+
"Events"
|
88
|
+
when "cloudwatch logs"
|
89
|
+
"Logs"
|
90
|
+
when "dynamodb", "dynamod db"
|
91
|
+
"DynamoDB"
|
92
|
+
when "ec2"
|
93
|
+
"EC2"
|
94
|
+
when "ec2 spot"
|
95
|
+
"EC2Spot"
|
96
|
+
when "ecs"
|
97
|
+
"ECS"
|
98
|
+
when "eb"
|
99
|
+
"ElasticBeanstalk"
|
100
|
+
when "ebs"
|
101
|
+
"EBS"
|
102
|
+
when "efs"
|
103
|
+
"EFS"
|
104
|
+
when "elb"
|
105
|
+
"ELB"
|
106
|
+
when "alb"
|
107
|
+
"ApplicationELB"
|
108
|
+
when "transcoder"
|
109
|
+
"ElasticTranscoder"
|
110
|
+
when "elasti cache", "cache"
|
111
|
+
"ElastiCache"
|
112
|
+
when "es"
|
113
|
+
"ES"
|
114
|
+
when "emr"
|
115
|
+
"ElasticMapReduce"
|
116
|
+
when "iot"
|
117
|
+
"IoT"
|
118
|
+
when "kms"
|
119
|
+
"KMS"
|
120
|
+
when "kinesis analytics"
|
121
|
+
"KinesisAnalytics"
|
122
|
+
when "kinesis firehose", "firehose"
|
123
|
+
"Firehose"
|
124
|
+
when "kinesis"
|
125
|
+
"Kinesis"
|
126
|
+
when "lambda"
|
127
|
+
"Lambda"
|
128
|
+
when "ml"
|
129
|
+
"ML"
|
130
|
+
when "ops works", "ow"
|
131
|
+
"OpsWorks"
|
132
|
+
when "polly"
|
133
|
+
"Polly"
|
134
|
+
when "redshift"
|
135
|
+
"Redshift"
|
136
|
+
when "rds"
|
137
|
+
"RDS"
|
138
|
+
when "route53"
|
139
|
+
"Route53"
|
140
|
+
when "ses"
|
141
|
+
"SES"
|
142
|
+
when "sns"
|
143
|
+
"SNS"
|
144
|
+
when "sqs"
|
145
|
+
"SQS"
|
146
|
+
when "s3"
|
147
|
+
"S3"
|
148
|
+
when "swf"
|
149
|
+
"SWF"
|
150
|
+
when "storage", "storage gateway"
|
151
|
+
"StorageGateway"
|
152
|
+
when "waf"
|
153
|
+
"WAF"
|
154
|
+
when "work spaces", "ws"
|
155
|
+
"WorkSpaces"
|
156
|
+
end
|
157
|
+
"AWS/#{value}"
|
158
|
+
end
|
159
|
+
|
160
|
+
def _cloudwatch_to_operator(value)
|
161
|
+
case value
|
45
162
|
when ">="
|
46
163
|
"GreaterThanOrEqualToThreshold"
|
47
164
|
when ">"
|
@@ -51,16 +168,109 @@ def _cloudwatch_convert_operator(operator)
|
|
51
168
|
when "<"
|
52
169
|
"LessThanThreshold"
|
53
170
|
else
|
54
|
-
_valid_values(
|
171
|
+
_valid_values(value,
|
55
172
|
%w( GreaterThanOrEqualToThreshold GreaterThanThreshold
|
56
173
|
LessThanOrEqualToThreshold LessThanThreshold ),
|
57
174
|
"GreaterThanThreshold")
|
58
175
|
end
|
59
176
|
end
|
60
177
|
|
178
|
+
def _cloudwatch_to_unit(value)
|
179
|
+
case value
|
180
|
+
when "sec"
|
181
|
+
"Seconds"
|
182
|
+
when "ms"
|
183
|
+
"Microseconds"
|
184
|
+
when "mms"
|
185
|
+
"Milliseconds"
|
186
|
+
when "B"
|
187
|
+
"Bytes"
|
188
|
+
when "KB"
|
189
|
+
"Kilobytes"
|
190
|
+
when "MB"
|
191
|
+
"Megabytes"
|
192
|
+
when "GB"
|
193
|
+
"Gigabytes"
|
194
|
+
when "TB"
|
195
|
+
"Terabytes"
|
196
|
+
when "b"
|
197
|
+
"Bits"
|
198
|
+
when "kb", "Kb"
|
199
|
+
"Kilobits"
|
200
|
+
when "mb", "Mb"
|
201
|
+
"Megabits"
|
202
|
+
when "gb", "Gb"
|
203
|
+
"Gigabits"
|
204
|
+
when "tb", "Tb"
|
205
|
+
"Terabits"
|
206
|
+
when "%", "percent"
|
207
|
+
"Percent"
|
208
|
+
when "count"
|
209
|
+
"Count"
|
210
|
+
when "B/s"
|
211
|
+
"Bytes/Second"
|
212
|
+
when "KB/s"
|
213
|
+
"Kilobytes/Second"
|
214
|
+
when "MB/s"
|
215
|
+
"Megabytes/Second"
|
216
|
+
when "GB/s"
|
217
|
+
"Gigabyes/Second"
|
218
|
+
when "TB/s"
|
219
|
+
"Terabytes/Second"
|
220
|
+
when "bps"
|
221
|
+
"Bits/Second"
|
222
|
+
when "kbps"
|
223
|
+
"Kilobits/Second"
|
224
|
+
when "mbps"
|
225
|
+
"Megabits/Second"
|
226
|
+
when "gbps"
|
227
|
+
"Gigabits/Second"
|
228
|
+
when "tbps"
|
229
|
+
"Terabits/Second"
|
230
|
+
when "cps"
|
231
|
+
"Count/Second"
|
232
|
+
else
|
233
|
+
_valid_values(value,
|
234
|
+
%w(Seconds Microseconds Milliseconds Bytes Kilobytes Megabytes Gigabytes Terabytes Bits Kilobits Megabits Gigabits Terabits Percent Count Bytes/Second Kilobytes/Second Megabytes/Second Gigabytes/Second Terabytes/Second Bits/Second Kilobits/Second Megabits/Second Gigabits/Second Terabits/Second Count/Second None),
|
235
|
+
"")
|
236
|
+
end
|
237
|
+
end
|
238
|
+
|
239
|
+
def _cloudwatch_to_ec2_action(value)
|
240
|
+
value = _valid_values(value, %w( recover stop terminate reboot ), "recover")
|
241
|
+
_{
|
242
|
+
Fn__Join "", [
|
243
|
+
"arn:aws:automate:",
|
244
|
+
_{
|
245
|
+
Ref "AWS::Region"
|
246
|
+
},
|
247
|
+
":ec2:#{value}"
|
248
|
+
]
|
249
|
+
}
|
250
|
+
end
|
251
|
+
|
61
252
|
def _cloudwatch_dimension(args)
|
62
253
|
_{
|
63
254
|
Name args[:name]
|
64
255
|
Value _ref_string("value", args)
|
65
256
|
}
|
66
257
|
end
|
258
|
+
|
259
|
+
def _cloudwatch_actions(args)
|
260
|
+
actions = args[:actions] || args[:ref_actions] || []
|
261
|
+
is_ref = args.key? :ref_actions
|
262
|
+
|
263
|
+
array = []
|
264
|
+
actions.each do |v|
|
265
|
+
if v =~ /ec2 (\w)/
|
266
|
+
array << _cloudwatch_to_ec2_action($1)
|
267
|
+
else
|
268
|
+
if is_ref
|
269
|
+
array << _ref_string("action", { ref_action: v })
|
270
|
+
else
|
271
|
+
array << v
|
272
|
+
end
|
273
|
+
end
|
274
|
+
end
|
275
|
+
array
|
276
|
+
end
|
@@ -148,7 +148,9 @@ def _ec2_network_interface(args, is_spot = false)
|
|
148
148
|
end
|
149
149
|
|
150
150
|
def _ec2_image(instance_type, args)
|
151
|
-
|
151
|
+
image_id = args[:image_id] || false
|
152
|
+
return args[:image_id] if image_id
|
153
|
+
|
152
154
|
resource_image = _resource_name(args[:image] || EC2_DEFAULT_IMAGE)
|
153
155
|
_find_in_map("AWSRegionArch2AMI#{resource_image}",
|
154
156
|
_{ Ref "AWS::Region" },
|
@@ -24,6 +24,10 @@ def _bool(name, args, default = false)
|
|
24
24
|
args.key?(name.to_sym) ? args[name.to_sym].to_s : default.to_s
|
25
25
|
end
|
26
26
|
|
27
|
+
def _integer(name, args, default = 0)
|
28
|
+
args.key?(name.to_sym) ? args[name.to_sym].to_i : default
|
29
|
+
end
|
30
|
+
|
27
31
|
def _capitalize(name)
|
28
32
|
name.split(' ').map(&:capitalize).join()
|
29
33
|
end
|
@@ -1 +1 @@
|
|
1
|
-
KUMOGATA_TEMPLATE_VERSION = '0.0.
|
1
|
+
KUMOGATA_TEMPLATE_VERSION = '0.0.18'
|
@@ -7,16 +7,18 @@ require 'kumogata/template/helper'
|
|
7
7
|
name = _resource_name(args[:name], "autoscaling scheduled action")
|
8
8
|
autoscaling = _ref_string("autoscaling", args, "autoscaling group")
|
9
9
|
autoscaling = _ref_resource_name(args, "autoscaling group") if autoscaling.empty?
|
10
|
-
desired =
|
10
|
+
desired = _integer("desired", args, -1)
|
11
11
|
end_time =
|
12
12
|
if args.key? :end_time
|
13
13
|
_timestamp_utc(args[:end_time])
|
14
14
|
else
|
15
15
|
""
|
16
16
|
end
|
17
|
-
max =
|
18
|
-
|
19
|
-
min =
|
17
|
+
max = _integer("max", args, -1)
|
18
|
+
max = desired if max < desired
|
19
|
+
min = _integer("min", args, -1)
|
20
|
+
min = desired if min < desired
|
21
|
+
|
20
22
|
recurrence =
|
21
23
|
if args.key? :recurrence
|
22
24
|
case args[:recurrence]
|
@@ -49,10 +51,10 @@ _(name) do
|
|
49
51
|
Type "AWS::AutoScaling::ScheduledAction"
|
50
52
|
Properties do
|
51
53
|
AutoScalingGroupName autoscaling
|
52
|
-
DesiredCapacity desired
|
54
|
+
DesiredCapacity desired if desired > -1
|
53
55
|
EndTime end_time unless end_time.empty?
|
54
|
-
MaxSize max
|
55
|
-
MinSize min
|
56
|
+
MaxSize max if max > -1
|
57
|
+
MinSize min if min > -1
|
56
58
|
Recurrence recurrence unless recurrence.empty?
|
57
59
|
StartTime start_time unless start_time.empty?
|
58
60
|
end
|
@@ -7,21 +7,21 @@ require 'kumogata/template/cloudwatch'
|
|
7
7
|
|
8
8
|
name = _resource_name(args[:name], "alarm")
|
9
9
|
enabled = _bool("enabled", args, true)
|
10
|
-
actions =
|
10
|
+
actions = _cloudwatch_actions(args)
|
11
11
|
description = args[:description] || ""
|
12
12
|
alarm_name = _ref_name("alarm_name", args)
|
13
|
-
operator =
|
13
|
+
operator = _cloudwatch_to_operator(args[:operator])
|
14
14
|
dimensions = (args[:dimensions] || []).collect{|v| _cloudwatch_dimension(v) }
|
15
15
|
evaluation = args[:evaluation] || 3
|
16
16
|
insufficients = args[:insufficients] || []
|
17
|
-
metric = args[:metric]
|
18
|
-
namespace = args[:namespace]
|
17
|
+
metric = _cloudwatch_to_metric(args[:metric])
|
18
|
+
namespace = _cloudwatch_to_namespace(args[:namespace])
|
19
19
|
ok_actions = args[:ok_actions] || []
|
20
20
|
period = _cloudwatch_to_period(args[:period] || "5m")
|
21
21
|
statistic = _valid_values(_cloudwatch_to_statistic(args[:statistic]),
|
22
22
|
%w(SampleCount Average Sum Minimum Maximum), "Average")
|
23
23
|
threshold = args[:threshold] || 60
|
24
|
-
unit =
|
24
|
+
unit = _cloudwatch_to_unit(args[:unit])
|
25
25
|
|
26
26
|
_(name) do
|
27
27
|
Type "AWS::CloudWatch::Alarm"
|
@@ -30,6 +30,8 @@ port = PORT[engine.to_sym] if port.empty?
|
|
30
30
|
az = _availability_zone(args, false)
|
31
31
|
azs = _availability_zones(args, false)
|
32
32
|
maintenance = _maintenance_window("elasticache", args[:maintenance] || DEFAULT_MAINTENANCE_TIME[:elasticache])
|
33
|
+
snapshot_arn = args[:snapshot_arn] || ""
|
34
|
+
snapshot_name = args[:snapshot_name] || ""
|
33
35
|
snapshot_retention = args[:snapshot_retention] || DEFAULT_SNAPSHOT_NUM
|
34
36
|
snapshot_window = _window_time("elasticache", args[:snapshot_window_start] || DEFAULT_SNAPSHOT_TIME[:elasticache])
|
35
37
|
tags = _tags(args)
|
@@ -42,7 +44,7 @@ _(name) do
|
|
42
44
|
AZMode azmode unless azmode.empty? and engine == "redis"
|
43
45
|
CacheNodeType node
|
44
46
|
CacheParameterGroupName parameter
|
45
|
-
#
|
47
|
+
#CacheSecurityGroupNames
|
46
48
|
CacheSubnetGroupName subnet
|
47
49
|
ClusterName cluster
|
48
50
|
Engine engine
|
@@ -53,8 +55,8 @@ _(name) do
|
|
53
55
|
PreferredAvailabilityZone az if engine == "redis" and !az.empty?
|
54
56
|
PreferredAvailabilityZones azs if engine == "memached" and !azs.empty?
|
55
57
|
PreferredMaintenanceWindow maintenance
|
56
|
-
|
57
|
-
|
58
|
+
SnapshotArns snapshot_arn unless snapshot_arn.empty?
|
59
|
+
SnapshotName snapshot_name unless snapshot_name.empty?
|
58
60
|
SnapshotRetentionLimit snapshot_retention if engine == "redis"
|
59
61
|
SnapshotWindow snapshot_window if engine == "redis"
|
60
62
|
Tags tags
|
@@ -30,7 +30,10 @@ azs = _availability_zones(args, false)
|
|
30
30
|
maintenance = _maintenance_window("elasticache", args[:maintenance] || DEFAULT_MAINTENANCE_TIME[:elasticache])
|
31
31
|
description = args[:description] || "#{args[:name]} cache replication group description"
|
32
32
|
security_groups = _ref_array("security_groups", args, "security group")
|
33
|
+
snapshot_arn = args[:snapshot_arn] || ""
|
34
|
+
snapshot_name = args[:snapshot_name] || ""
|
33
35
|
snapshot_retention = args[:snapshot_retention] || DEFAULT_SNAPSHOT_NUM
|
36
|
+
snapshot_id = args[:snapshot_id] || ""
|
34
37
|
snapshot_window = _window_time("elasticache", args[:snapshot_window_start] || DEFAULT_SNAPSHOT_TIME[:elasticache])
|
35
38
|
tags = _tags(args)
|
36
39
|
|
@@ -52,8 +55,10 @@ _(name) do
|
|
52
55
|
PreferredMaintenanceWindow maintenance
|
53
56
|
ReplicationGroupDescription description
|
54
57
|
SecurityGroupIds security_groups unless security_groups.empty?
|
55
|
-
|
58
|
+
SnapshotArns snapshot_arn unless snapshot_arn.empty?
|
59
|
+
SnapshotName snapshot_name unless snapshot_name.empty?
|
56
60
|
SnapshotRetentionLimit snapshot_retention if 0 < snapshot_retention
|
61
|
+
SnapshottingClusterId snapshot_id unless snapshot_id.empty?
|
57
62
|
SnapshotWindow snapshot_window unless snapshot_retention < 0 and snapshot_window.empty?
|
58
63
|
Tags tags
|
59
64
|
end
|
@@ -0,0 +1,151 @@
|
|
1
|
+
require 'abstract_unit'
|
2
|
+
require 'kumogata/template/cloudwatch'
|
3
|
+
|
4
|
+
class CloudWatchTest < Minitest::Test
|
5
|
+
def test_cloudwatch_to_period
|
6
|
+
template = <<-EOS
|
7
|
+
Test _cloudwatch_to_period("1m")
|
8
|
+
EOS
|
9
|
+
act_template = run_client_as_json(template)
|
10
|
+
exp_template = <<-EOS
|
11
|
+
{
|
12
|
+
"Test": "60"
|
13
|
+
}
|
14
|
+
EOS
|
15
|
+
assert_equal exp_template.chomp, act_template
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_cloudwatch_to_statistic
|
19
|
+
template = <<-EOS
|
20
|
+
Test _cloudwatch_to_statistic("avg")
|
21
|
+
EOS
|
22
|
+
act_template = run_client_as_json(template)
|
23
|
+
exp_template = <<-EOS
|
24
|
+
{
|
25
|
+
"Test": "Average"
|
26
|
+
}
|
27
|
+
EOS
|
28
|
+
assert_equal exp_template.chomp, act_template
|
29
|
+
end
|
30
|
+
|
31
|
+
def test_cloudwatch_to_metric
|
32
|
+
template = <<-EOS
|
33
|
+
Test _cloudwatch_to_metric("ec2 cpu utilization")
|
34
|
+
EOS
|
35
|
+
act_template = run_client_as_json(template)
|
36
|
+
exp_template = <<-EOS
|
37
|
+
{
|
38
|
+
"Test": "CPUUtilization"
|
39
|
+
}
|
40
|
+
EOS
|
41
|
+
assert_equal exp_template.chomp, act_template
|
42
|
+
end
|
43
|
+
|
44
|
+
def test_cloudwatch_to_namespace
|
45
|
+
template = <<-EOS
|
46
|
+
Test _cloudwatch_to_namespace("ec2")
|
47
|
+
EOS
|
48
|
+
act_template = run_client_as_json(template)
|
49
|
+
exp_template = <<-EOS
|
50
|
+
{
|
51
|
+
"Test": "AWS/EC2"
|
52
|
+
}
|
53
|
+
EOS
|
54
|
+
assert_equal exp_template.chomp, act_template
|
55
|
+
end
|
56
|
+
|
57
|
+
def test_cloudwatch_to_operator
|
58
|
+
template = <<-EOS
|
59
|
+
Test _cloudwatch_to_operator(">=")
|
60
|
+
EOS
|
61
|
+
act_template = run_client_as_json(template)
|
62
|
+
exp_template = <<-EOS
|
63
|
+
{
|
64
|
+
"Test": "GreaterThanOrEqualToThreshold"
|
65
|
+
}
|
66
|
+
EOS
|
67
|
+
assert_equal exp_template.chomp, act_template
|
68
|
+
end
|
69
|
+
|
70
|
+
def test_cloudwatch_to_unit
|
71
|
+
template = <<-EOS
|
72
|
+
Test _cloudwatch_to_unit("sec")
|
73
|
+
EOS
|
74
|
+
act_template = run_client_as_json(template)
|
75
|
+
exp_template = <<-EOS
|
76
|
+
{
|
77
|
+
"Test": "Seconds"
|
78
|
+
}
|
79
|
+
EOS
|
80
|
+
assert_equal exp_template.chomp, act_template
|
81
|
+
end
|
82
|
+
|
83
|
+
def test_cloudwatch_to_ec2_action
|
84
|
+
template = <<-EOS
|
85
|
+
Test _cloudwatch_to_ec2_action("revoert")
|
86
|
+
EOS
|
87
|
+
act_template = run_client_as_json(template)
|
88
|
+
exp_template = <<-EOS
|
89
|
+
{
|
90
|
+
"Test": {
|
91
|
+
"Fn::Join": [
|
92
|
+
"",
|
93
|
+
[
|
94
|
+
"arn:aws:automate:",
|
95
|
+
{
|
96
|
+
"Ref": "AWS::Region"
|
97
|
+
},
|
98
|
+
":ec2:recover"
|
99
|
+
]
|
100
|
+
]
|
101
|
+
}
|
102
|
+
}
|
103
|
+
EOS
|
104
|
+
assert_equal exp_template.chomp, act_template
|
105
|
+
end
|
106
|
+
|
107
|
+
def test_cloudwatch_dimension
|
108
|
+
template = <<-EOS
|
109
|
+
Test _cloudwatch_dimension({ name: "test", value: "test" })
|
110
|
+
EOS
|
111
|
+
act_template = run_client_as_json(template)
|
112
|
+
exp_template = <<-EOS
|
113
|
+
{
|
114
|
+
"Test": {
|
115
|
+
"Name": "test",
|
116
|
+
"Value": "test"
|
117
|
+
}
|
118
|
+
}
|
119
|
+
EOS
|
120
|
+
assert_equal exp_template.chomp, act_template
|
121
|
+
end
|
122
|
+
|
123
|
+
def test_cloudwatch_actions
|
124
|
+
template = <<-EOS
|
125
|
+
Test _cloudwatch_actions(ref_actions: [ "ec2 recover", "test" ])
|
126
|
+
EOS
|
127
|
+
act_template = run_client_as_json(template)
|
128
|
+
exp_template = <<-EOS
|
129
|
+
{
|
130
|
+
"Test": [
|
131
|
+
{
|
132
|
+
"Fn::Join": [
|
133
|
+
"",
|
134
|
+
[
|
135
|
+
"arn:aws:automate:",
|
136
|
+
{
|
137
|
+
"Ref": "AWS::Region"
|
138
|
+
},
|
139
|
+
":ec2:recover"
|
140
|
+
]
|
141
|
+
]
|
142
|
+
},
|
143
|
+
{
|
144
|
+
"Ref": "Test"
|
145
|
+
}
|
146
|
+
]
|
147
|
+
}
|
148
|
+
EOS
|
149
|
+
assert_equal exp_template.chomp, act_template
|
150
|
+
end
|
151
|
+
end
|
data/test/ec2_test.rb
CHANGED
@@ -308,6 +308,31 @@ Test _ec2_image("test", { image_id: "test" })
|
|
308
308
|
exp_template = <<-EOS
|
309
309
|
{
|
310
310
|
"Test": "test"
|
311
|
+
}
|
312
|
+
EOS
|
313
|
+
assert_equal exp_template.chomp, act_template
|
314
|
+
|
315
|
+
template = <<-EOS
|
316
|
+
Test _ec2_image("test", { image_id: false })
|
317
|
+
EOS
|
318
|
+
act_template = run_client_as_json(template)
|
319
|
+
exp_template = <<-EOS
|
320
|
+
{
|
321
|
+
"Test": {
|
322
|
+
"Fn::FindInMap": [
|
323
|
+
"AWSRegionArch2AMIAmazonLinuxOfficial",
|
324
|
+
{
|
325
|
+
"Ref": "AWS::Region"
|
326
|
+
},
|
327
|
+
{
|
328
|
+
"Fn::FindInMap": [
|
329
|
+
"AWSInstanceType2Arch",
|
330
|
+
"test",
|
331
|
+
"Arch"
|
332
|
+
]
|
333
|
+
}
|
334
|
+
]
|
335
|
+
}
|
311
336
|
}
|
312
337
|
EOS
|
313
338
|
assert_equal exp_template.chomp, act_template
|
data/test/helper_test.rb
CHANGED
@@ -22,6 +22,13 @@ class HelperTest < Minitest::Test
|
|
22
22
|
assert_equal _bool("test", { test1: false }, false), "false"
|
23
23
|
end
|
24
24
|
|
25
|
+
def test_integer
|
26
|
+
assert_equal _integer("test", { test: 1 }), 1
|
27
|
+
assert_equal _integer("test", { test: 2 }, 1), 2
|
28
|
+
assert_equal _integer("test", { test1: 1 }), 0
|
29
|
+
assert_equal _integer("test", { test1: 1 }, 2), 2
|
30
|
+
end
|
31
|
+
|
25
32
|
def test_capitalize
|
26
33
|
assert_equal _capitalize("test test"), "TestTest"
|
27
34
|
end
|
@@ -218,6 +225,21 @@ Test _ref_name("test", {})
|
|
218
225
|
assert_equal exp_template.chomp, act_template
|
219
226
|
end
|
220
227
|
|
228
|
+
def test_ref_name_default
|
229
|
+
template = <<-EOS
|
230
|
+
Test _ref_name_default("test", { name: "test1" })
|
231
|
+
EOS
|
232
|
+
act_template = run_client_as_json(template)
|
233
|
+
exp_template = <<-EOS
|
234
|
+
{
|
235
|
+
"Test": "test1"
|
236
|
+
}
|
237
|
+
EOS
|
238
|
+
assert_equal exp_template.chomp, act_template
|
239
|
+
|
240
|
+
# _ref_name_default(name, args, ref_name = '')
|
241
|
+
end
|
242
|
+
|
221
243
|
def test_attr_string
|
222
244
|
template = <<-EOS
|
223
245
|
Test _attr_string("test", "test1")
|
@@ -3,7 +3,30 @@ require 'abstract_unit'
|
|
3
3
|
class AutoscalingScheduledActionTest < Minitest::Test
|
4
4
|
def test_normal
|
5
5
|
template = <<-EOS
|
6
|
-
_autoscaling_scheduled_action "test", ref_autoscaling: "test",
|
6
|
+
_autoscaling_scheduled_action "test", ref_autoscaling: "test", desired: "10"
|
7
|
+
EOS
|
8
|
+
act_template = run_client_as_json(template)
|
9
|
+
start_time = _timestamp_utc(Time.now + 3600)
|
10
|
+
exp_template = <<-EOS
|
11
|
+
{
|
12
|
+
"TestAutoscalingScheduledAction": {
|
13
|
+
"Type": "AWS::AutoScaling::ScheduledAction",
|
14
|
+
"Properties": {
|
15
|
+
"AutoScalingGroupName": {
|
16
|
+
"Ref": "TestAutoscalingGroup"
|
17
|
+
},
|
18
|
+
"DesiredCapacity": "10",
|
19
|
+
"MaxSize": "10",
|
20
|
+
"MinSize": "10",
|
21
|
+
"StartTime": "#{start_time}"
|
22
|
+
}
|
23
|
+
}
|
24
|
+
}
|
25
|
+
EOS
|
26
|
+
assert_equal exp_template.chomp, act_template
|
27
|
+
|
28
|
+
template = <<-EOS
|
29
|
+
_autoscaling_scheduled_action "test", ref_autoscaling: "test", max: 1, min: 1, recurrence: Time.local(2016, 3, 31, 15)
|
7
30
|
EOS
|
8
31
|
act_template = run_client_as_json(template)
|
9
32
|
start_time = _timestamp_utc(Time.now + 3600)
|
@@ -3,7 +3,7 @@ require 'abstract_unit'
|
|
3
3
|
class CloudWatchAlarmTest < Minitest::Test
|
4
4
|
def test_normal
|
5
5
|
template = <<-EOS
|
6
|
-
_cloudwatch_alarm "test", actions: "test", alarm_name: "test", namespace: "
|
6
|
+
_cloudwatch_alarm "test", actions: [ "test" ], alarm_name: "test", namespace: "ec2", operator: "<", metric: "test", dimensions: [ { name: "test", value: "test" } ]
|
7
7
|
EOS
|
8
8
|
act_template = run_client_as_json(template)
|
9
9
|
exp_template = <<-EOS
|
@@ -25,7 +25,7 @@ _cloudwatch_alarm "test", actions: "test", alarm_name: "test", namespace: "test"
|
|
25
25
|
],
|
26
26
|
"EvaluationPeriods": "3",
|
27
27
|
"MetricName": "test",
|
28
|
-
"Namespace": "
|
28
|
+
"Namespace": "AWS/EC2",
|
29
29
|
"Period": "300",
|
30
30
|
"Statistic": "Average",
|
31
31
|
"Threshold": "60"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: kumogata-template
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.18
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Naoya Nakazawa
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-02-
|
11
|
+
date: 2017-02-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: aws-sdk
|
@@ -248,6 +248,7 @@ files:
|
|
248
248
|
- test/alb_test.rb
|
249
249
|
- test/autoscaling_test.rb
|
250
250
|
- test/cloudfront_test.rb
|
251
|
+
- test/cloudwatch_test.rb
|
251
252
|
- test/codebuild_test.rb
|
252
253
|
- test/codedeploy_test.rb
|
253
254
|
- test/data/lambda_function.py
|
@@ -412,6 +413,7 @@ test_files:
|
|
412
413
|
- test/alb_test.rb
|
413
414
|
- test/autoscaling_test.rb
|
414
415
|
- test/cloudfront_test.rb
|
416
|
+
- test/cloudwatch_test.rb
|
415
417
|
- test/codebuild_test.rb
|
416
418
|
- test/codedeploy_test.rb
|
417
419
|
- test/data/lambda_function.py
|