kumogata-template 0.0.5 → 0.0.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +19 -19
- data/lib/kumogata/template/alb.rb +99 -0
- data/lib/kumogata/template/certificate.rb +18 -0
- data/lib/kumogata/template/const.rb +7 -0
- data/lib/kumogata/template/ec2.rb +6 -0
- data/lib/kumogata/template/ecs.rb +9 -0
- data/lib/kumogata/template/ext/kumogata.rb +5 -6
- data/lib/kumogata/template/helper.rb +4 -0
- data/lib/kumogata/template/version.rb +1 -1
- data/lib/kumogata/template.rb +2 -0
- data/template/alb-listener-rule.rb +22 -0
- data/template/alb-listener.rb +26 -0
- data/template/alb-load-balancer.rb +27 -0
- data/template/alb-target-group.rb +39 -0
- data/template/autoscaling-group.rb +2 -0
- data/template/certificate.rb +20 -0
- data/template/ec2-flow-log.rb +41 -0
- data/template/ec2-host.rb +21 -0
- data/template/ec2-instance.rb +5 -1
- data/template/ec2-spot-fleet.rb +16 -0
- data/template/ecs-service.rb +2 -0
- data/template/{elb-loadbalancer.rb → elb-load-balancer.rb} +1 -1
- data/template/iam-group.rb +2 -0
- data/template/iam-role.rb +11 -0
- data/template/iam-user.rb +2 -0
- data/template/output-alb.rb +21 -0
- data/template/output-elb.rb +4 -0
- data/template/parameter-ec2.rb +4 -4
- data/test/alb_test.rb +25 -0
- data/test/ec2_test.rb +45 -0
- data/test/helper_test.rb +21 -0
- data/test/template/alb-listener-rule_test.rb +40 -0
- data/test/template/alb-listener_test.rb +33 -0
- data/test/template/alb-load-balancer_test.rb +72 -0
- data/test/template/alb-target-group_test.rb +89 -0
- data/test/template/certificate_test.rb +27 -0
- data/test/template/ec2-flow-log_test.rb +26 -0
- data/test/template/ec2-host_test.rb +23 -0
- data/test/template/ec2-spot-fleet_test.rb +173 -0
- data/test/template/{elb-loadbalancer_test.rb → elb-load-balancer_test.rb} +1 -1
- data/test/template/output-alb_test.rb +105 -0
- data/test/template/output-elb_test.rb +61 -0
- data/test/template/parameter-ec2_test.rb +38 -9
- metadata +36 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c0b3009b60eaa96c62f0e6cfcb8b5e93453e19a5
|
4
|
+
data.tar.gz: f4cfbdffa75b3855c1aa1f49d7c5f3d032d56331
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8461e8ea61c6a49d1ec819213056ee32a89457da7dff59a1127fe5a8d97351d833084a3242cea845f6b4f507e50085db2650bce8ccb619e176c56b6adb85f97d
|
7
|
+
data.tar.gz: 5ede82ac1c09eecb65d379251dd575ccc3ad8da3dd010f8de1c256424a05d53c158d7e9eb4fe53560ab88aba0db5a62c666b8eff63d73e5e2cac23204b4df57a
|
data/Gemfile.lock
CHANGED
@@ -1,19 +1,19 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
kumogata-template (0.0.
|
4
|
+
kumogata-template (0.0.5)
|
5
5
|
aws-sdk (~> 2.3)
|
6
|
-
kumogata (= 0.5.
|
6
|
+
kumogata (= 0.5.10)
|
7
7
|
|
8
8
|
GEM
|
9
9
|
remote: https://rubygems.org/
|
10
10
|
specs:
|
11
|
-
aws-sdk (2.
|
12
|
-
aws-sdk-resources (= 2.
|
13
|
-
aws-sdk-core (2.
|
11
|
+
aws-sdk (2.5.5)
|
12
|
+
aws-sdk-resources (= 2.5.5)
|
13
|
+
aws-sdk-core (2.5.5)
|
14
14
|
jmespath (~> 1.0)
|
15
|
-
aws-sdk-resources (2.
|
16
|
-
aws-sdk-core (= 2.
|
15
|
+
aws-sdk-resources (2.5.5)
|
16
|
+
aws-sdk-core (= 2.5.5)
|
17
17
|
aws-sdk-v1 (1.66.0)
|
18
18
|
json (~> 1.4)
|
19
19
|
nokogiri (>= 1.4.4)
|
@@ -23,21 +23,19 @@ GEM
|
|
23
23
|
execjs
|
24
24
|
coffee-script-source (1.10.0)
|
25
25
|
diffy (3.1.0)
|
26
|
-
dslh (0.
|
26
|
+
dslh (0.2.7)
|
27
27
|
execjs (2.7.0)
|
28
28
|
hashie (3.4.4)
|
29
29
|
highline (1.7.8)
|
30
|
-
jmespath (1.
|
31
|
-
json_pure (>= 1.8.1)
|
30
|
+
jmespath (1.3.1)
|
32
31
|
json (1.8.3)
|
33
32
|
json5 (0.0.1)
|
34
|
-
|
35
|
-
kumogata (0.5.8)
|
33
|
+
kumogata (0.5.10)
|
36
34
|
aws-sdk-v1
|
37
35
|
coderay
|
38
36
|
coffee-script
|
39
37
|
diffy
|
40
|
-
dslh (>= 0.2.7)
|
38
|
+
dslh (>= 0.2.7, < 0.3)
|
41
39
|
hashie
|
42
40
|
highline
|
43
41
|
json
|
@@ -48,20 +46,22 @@ GEM
|
|
48
46
|
therubyracer
|
49
47
|
uuidtools
|
50
48
|
libv8 (3.16.14.15)
|
51
|
-
mini_portile2 (2.
|
49
|
+
mini_portile2 (2.1.0)
|
52
50
|
minitest (5.9.0)
|
53
|
-
net-ssh (3.
|
54
|
-
nokogiri (1.6.
|
55
|
-
mini_portile2 (~> 2.
|
51
|
+
net-ssh (3.2.0)
|
52
|
+
nokogiri (1.6.8)
|
53
|
+
mini_portile2 (~> 2.1.0)
|
54
|
+
pkg-config (~> 1.1.7)
|
55
|
+
pkg-config (1.1.7)
|
56
56
|
rake (11.1.2)
|
57
57
|
ref (2.0.0)
|
58
|
-
retryable (2.0.
|
58
|
+
retryable (2.0.4)
|
59
59
|
term-ansicolor (1.3.2)
|
60
60
|
tins (~> 1.0)
|
61
61
|
therubyracer (0.12.2)
|
62
62
|
libv8 (~> 3.16.14.0)
|
63
63
|
ref
|
64
|
-
tins (1.
|
64
|
+
tins (1.12.0)
|
65
65
|
uuidtools (2.1.5)
|
66
66
|
|
67
67
|
PLATFORMS
|
@@ -0,0 +1,99 @@
|
|
1
|
+
#
|
2
|
+
# Helper - ALB
|
3
|
+
#
|
4
|
+
require 'kumogata/template/helper'
|
5
|
+
|
6
|
+
def _alb_certificates(args)
|
7
|
+
certificates = args[:certificates] || []
|
8
|
+
|
9
|
+
array = []
|
10
|
+
certificates.each do |certificate|
|
11
|
+
cert = _ref_string("value", { value: certificate }, "certificate")
|
12
|
+
next if cert.empty?
|
13
|
+
|
14
|
+
array << _{
|
15
|
+
CertificateArn cert
|
16
|
+
}
|
17
|
+
end
|
18
|
+
array
|
19
|
+
end
|
20
|
+
|
21
|
+
def _alb_actions(args)
|
22
|
+
defaults = args[:actions] || []
|
23
|
+
|
24
|
+
array = []
|
25
|
+
defaults.each do |default|
|
26
|
+
target = _ref_string("target", default, "target group")
|
27
|
+
array << _{
|
28
|
+
TargetGroupArn target
|
29
|
+
Type "forward"
|
30
|
+
}
|
31
|
+
end
|
32
|
+
array
|
33
|
+
end
|
34
|
+
|
35
|
+
def _alb_conditions(args)
|
36
|
+
conditions = args[:conditions] || []
|
37
|
+
|
38
|
+
array = []
|
39
|
+
conditions.each do |condition|
|
40
|
+
condition = [ condition ] unless condition.is_a? Array
|
41
|
+
array << _{
|
42
|
+
Field "path-pattern"
|
43
|
+
Values condition
|
44
|
+
}
|
45
|
+
end
|
46
|
+
array
|
47
|
+
end
|
48
|
+
|
49
|
+
def _alb_attributes(args)
|
50
|
+
attributes = args[:attributes] || []
|
51
|
+
|
52
|
+
array = []
|
53
|
+
attributes.each do |attribute|
|
54
|
+
attribute.each_pair{|key, value|
|
55
|
+
array << _{
|
56
|
+
Key key
|
57
|
+
Value value
|
58
|
+
}
|
59
|
+
}
|
60
|
+
end
|
61
|
+
array
|
62
|
+
end
|
63
|
+
|
64
|
+
def _alb_matcher(args)
|
65
|
+
args[:matcher] = 200 unless args.key? :matcher
|
66
|
+
|
67
|
+
http_code = _valid_values(args[:matcher], %w( 200 202 299 ), 200)
|
68
|
+
_{
|
69
|
+
HttpCode http_code
|
70
|
+
}
|
71
|
+
end
|
72
|
+
|
73
|
+
def _alb_health_check(args)
|
74
|
+
protocol = _valid_values(args[:protocol] || "", %w( http https ), "http")
|
75
|
+
# Return to native hash
|
76
|
+
{
|
77
|
+
interval: args[:interval] || 30,
|
78
|
+
path: args[:path] || "/",
|
79
|
+
port: args[:port] || 80,
|
80
|
+
protocol: protocol.upcase,
|
81
|
+
timeout: args[:timeout] || 5,
|
82
|
+
healthy: args[:healthy] || 10,
|
83
|
+
unhealthly: args[:unhealthly] || 2,
|
84
|
+
}
|
85
|
+
end
|
86
|
+
|
87
|
+
def _alb_targets(args)
|
88
|
+
targets = args[:targets] || []
|
89
|
+
|
90
|
+
array = []
|
91
|
+
targets.each do |target|
|
92
|
+
id = _ref_string("instance", target, "instance")
|
93
|
+
array << _{
|
94
|
+
Id id
|
95
|
+
Port target[:port] if target.key? :port
|
96
|
+
}
|
97
|
+
end
|
98
|
+
array
|
99
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
#
|
2
|
+
# Helper - Certificate
|
3
|
+
#
|
4
|
+
require 'kumogata/template/helper'
|
5
|
+
|
6
|
+
def _certificate_validations(args)
|
7
|
+
validation = args[:validation] || []
|
8
|
+
validation << { domain: args[:domain], validation: args[:domain] } if validation.empty?
|
9
|
+
|
10
|
+
result = []
|
11
|
+
validation.each do |val|
|
12
|
+
result << _{
|
13
|
+
DomainName val[:domain]
|
14
|
+
ValidationDomain val[:validation]
|
15
|
+
}
|
16
|
+
end
|
17
|
+
result
|
18
|
+
end
|
@@ -112,10 +112,17 @@ ELASTICACHE_NODE_TYPES =
|
|
112
112
|
# cache.r3.2xlarge 8 58.2 High
|
113
113
|
# cache.r3.4xlarge 16 118 High
|
114
114
|
# cache.r3.8xlarge 32 237 10 Gigabit
|
115
|
+
# cache.m4.large 2 6.42 Moderate
|
116
|
+
# cache.m4.xlarge 4 14.28 High
|
117
|
+
# cache.m4.2xlarge 8 29.70 High
|
118
|
+
# cache.m4.4xlarge 16 60.78 High
|
119
|
+
# cache.m4.10xlarge 40 154.64 10 Gigabit
|
115
120
|
"cache.t2.micro", "cache.t2.small", "cache.t2.medium",
|
116
121
|
"cache.m3.medium", "cache.m3.large", "cache.m3.xlarge",
|
117
122
|
"cache.m3.2xlarge", "cache.r3.large", "cache.r3.xlarge",
|
118
123
|
"cache.r3.2xlarge", "cache.r3.4xlarge", "cache.r3.8xlarge",
|
124
|
+
"cache.m4.large", "cache.m4.xlarge", "cache.m4.2xlarge",
|
125
|
+
"cache.m4.4xlarge", "cache.m4.10xlarge",
|
119
126
|
]
|
120
127
|
ELASTICACHE_DEFAULT_NODE_TYPE = "cache.t2.medium"
|
121
128
|
|
@@ -117,3 +117,12 @@ def _ecs_volumes_host(args)
|
|
117
117
|
SourcePath args[:source_path]
|
118
118
|
}
|
119
119
|
end
|
120
|
+
|
121
|
+
def _ecs_deployment(args)
|
122
|
+
return "" unless args.key? :max or args.key? :min
|
123
|
+
|
124
|
+
_{
|
125
|
+
MaximumPercent args[:max]
|
126
|
+
MinimumHealthyPercent args[:min]
|
127
|
+
}
|
128
|
+
end
|
@@ -5,7 +5,7 @@ class Kumogata::Client
|
|
5
5
|
def init(stack_name)
|
6
6
|
begin
|
7
7
|
base_template = ''
|
8
|
-
File.open(get_template_path(
|
8
|
+
File.open(get_template_path('_template'), 'r'){|f|
|
9
9
|
base_template = f.read
|
10
10
|
}
|
11
11
|
raise 'initialize template is empty' if base_template.empty?
|
@@ -17,7 +17,7 @@ class Kumogata::Client
|
|
17
17
|
return nil if answer.upcase != 'Y'
|
18
18
|
end
|
19
19
|
|
20
|
-
File.open(new_template,
|
20
|
+
File.open(new_template, 'w'){|f|
|
21
21
|
template = base_template.gsub('#{NAME}', stack_name)
|
22
22
|
f.write(template)
|
23
23
|
}
|
@@ -29,9 +29,8 @@ class Kumogata::Client
|
|
29
29
|
end
|
30
30
|
|
31
31
|
def define_template_func(scope, path_or_url)
|
32
|
-
functions =
|
33
|
-
|
34
|
-
Dir.glob(File.join(get_template_path, "*.rb")).all? do |file|
|
32
|
+
functions = ''
|
33
|
+
Dir.glob(File.join(get_template_path, '*.rb')).all? do |file|
|
35
34
|
functions << include_func(path_or_url, file)
|
36
35
|
functions << "\n\n"
|
37
36
|
end
|
@@ -96,7 +95,7 @@ class Kumogata::Client
|
|
96
95
|
end
|
97
96
|
|
98
97
|
def get_template_path(file = nil)
|
99
|
-
template_path = File.expand_path(File.join(File.dirname(__FILE__),
|
98
|
+
template_path = File.expand_path(File.join(File.dirname(__FILE__), '..', '..', '..','..', 'template'))
|
100
99
|
template_path = File.join(template_path, "#{file}.rb") unless file.nil?
|
101
100
|
template_path
|
102
101
|
end
|
@@ -92,6 +92,10 @@ def _find_in_map(name, top_level, secondary_level)
|
|
92
92
|
_{ Fn__FindInMap [ name, top_level, secondary_level ] }
|
93
93
|
end
|
94
94
|
|
95
|
+
def _select(index, list)
|
96
|
+
_{ Fn__Select [ index.to_s, list ] }
|
97
|
+
end
|
98
|
+
|
95
99
|
def _tag(args)
|
96
100
|
key = args[:key].to_s || ""
|
97
101
|
value = args[:value] || ""
|
@@ -1 +1 @@
|
|
1
|
-
KUMOGATA_TEMPLATE_VERSION = '0.0.
|
1
|
+
KUMOGATA_TEMPLATE_VERSION = '0.0.6'
|
data/lib/kumogata/template.rb
CHANGED
@@ -0,0 +1,22 @@
|
|
1
|
+
#
|
2
|
+
# ALB(ElasticLoadBalancingV2) ListenerRule resource
|
3
|
+
# https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-listenerrule.html
|
4
|
+
#
|
5
|
+
require 'kumogata/template/helper'
|
6
|
+
require 'kumogata/template/alb'
|
7
|
+
|
8
|
+
name = _resource_name(args[:name], "load balancer listener rule")
|
9
|
+
actions = _alb_actions(args)
|
10
|
+
conditions = _alb_conditions(args)
|
11
|
+
listener = _ref_string("listener", args, "load balancer listener")
|
12
|
+
priority = args[:priority] || 1
|
13
|
+
|
14
|
+
_(name) do
|
15
|
+
Type "AWS::ElasticLoadBalancingV2::ListenerRule"
|
16
|
+
Properties do
|
17
|
+
Actions actions
|
18
|
+
Conditions conditions
|
19
|
+
ListenerArn listener
|
20
|
+
Priority priority
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
#
|
2
|
+
# ALB(ElasticLoadBalancingV2) Listener resource
|
3
|
+
# https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-listener.html
|
4
|
+
#
|
5
|
+
require 'kumogata/template/helper'
|
6
|
+
require 'kumogata/template/alb'
|
7
|
+
|
8
|
+
name = _resource_name(args[:name], "load balancer listener")
|
9
|
+
certificates = _alb_certificates(args)
|
10
|
+
defaults = _alb_actions(args)
|
11
|
+
lb = _ref_string("lb", args, "load balancer")
|
12
|
+
port = args[:port] || 80
|
13
|
+
protocol = _valid_values("protocol", %w( http https ), "http")
|
14
|
+
ssl = args[:ssl] || ""
|
15
|
+
|
16
|
+
_(name) do
|
17
|
+
Type "AWS::ElasticLoadBalancingV2::Listener"
|
18
|
+
Properties do
|
19
|
+
Certificates certificates unless certificates.empty?
|
20
|
+
DefaultActions defaults
|
21
|
+
LoadBalancerArn lb
|
22
|
+
Port port
|
23
|
+
Protocol protocol.upcase
|
24
|
+
SslPolicy ssl unless ssl.empty?
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
#
|
2
|
+
# ALB(ElasticLoadBalancingV2) LoadBalancer resource
|
3
|
+
# https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html
|
4
|
+
#
|
5
|
+
require 'kumogata/template/helper'
|
6
|
+
require 'kumogata/template/alb'
|
7
|
+
|
8
|
+
name = _resource_name(args[:name], "load balancer")
|
9
|
+
lb_attributes = _alb_attributes(args)
|
10
|
+
lb_name = _ref_name("lb_name", args)
|
11
|
+
lb_name = args[:name] if lb_name.empty?
|
12
|
+
scheme = _valid_values("scheme", %w( internal internal-facing ), "")
|
13
|
+
security_groups = _ref_array("security_groups", args, "security group")
|
14
|
+
subnets = _ref_array("subnets", args, "subnet")
|
15
|
+
tags = _tags(args)
|
16
|
+
|
17
|
+
_(name) do
|
18
|
+
Type "AWS::ElasticLoadBalancingV2::LoadBalancer"
|
19
|
+
Properties do
|
20
|
+
LoadBalancerAttributes lb_attributes
|
21
|
+
Name lb_name
|
22
|
+
Scheme scheme unless scheme.empty?
|
23
|
+
SecurityGroups security_groups
|
24
|
+
Subnets subnets unless subnets.empty?
|
25
|
+
Tags tags
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
#
|
2
|
+
# ALB(ElasticLoadBalancingV2) TargetGroup resource
|
3
|
+
# https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-targetgroup.html
|
4
|
+
#
|
5
|
+
require 'kumogata/template/helper'
|
6
|
+
require 'kumogata/template/alb'
|
7
|
+
|
8
|
+
name = _resource_name(args[:name], "target group")
|
9
|
+
health_check = _alb_health_check(args[:health_check] || {})
|
10
|
+
matcher = _alb_matcher(args)
|
11
|
+
target_name = _ref_name("target_name", args)
|
12
|
+
target_name = args[:name] if target_name.empty?
|
13
|
+
attributes = _alb_attributes(args)
|
14
|
+
port = args[:port] || 80
|
15
|
+
protocol = _valid_values("protocol", %w( http https ), "http")
|
16
|
+
tags = _tags(args)
|
17
|
+
targets = _alb_targets(args)
|
18
|
+
vpc = _ref_string("vpc", args, "vpc")
|
19
|
+
|
20
|
+
_(name) do
|
21
|
+
Type "AWS::ElasticLoadBalancingV2::TargetGroup"
|
22
|
+
Properties do
|
23
|
+
HealthCheckIntervalSeconds health_check[:interval]
|
24
|
+
HealthCheckPath health_check[:path]
|
25
|
+
HealthCheckPort health_check[:port]
|
26
|
+
HealthCheckProtocol health_check[:protocol]
|
27
|
+
HealthCheckTimeoutSeconds health_check[:timeout]
|
28
|
+
HealthyThresholdCount health_check[:healthy]
|
29
|
+
Matcher matcher
|
30
|
+
Name target_name
|
31
|
+
Port port
|
32
|
+
Protocol protocol.upcase
|
33
|
+
Tags tags
|
34
|
+
TargetGroupAttributes attributes
|
35
|
+
Targets targets
|
36
|
+
UnhealthyThresholdCount health_check[:unhealthly]
|
37
|
+
VpcId vpc
|
38
|
+
end
|
39
|
+
end
|
@@ -21,6 +21,7 @@ max = min if max < min
|
|
21
21
|
notifications = (args[:notifications] || []).collect{|v| _autoscaling_notification(v) }
|
22
22
|
placement = args[:placement] || ""
|
23
23
|
tags = _autoscaling_tags(args)
|
24
|
+
target_groups = args[:target_groups] || []
|
24
25
|
terminations = _autoscaling_terminations(args)
|
25
26
|
vpc_zones = _ref_array("vpc_zones", args, "subnet")
|
26
27
|
|
@@ -41,6 +42,7 @@ _(name) do
|
|
41
42
|
NotificationConfigurations notifications
|
42
43
|
PlacementGroup placement unless placement.empty?
|
43
44
|
Tags tags
|
45
|
+
TargetGroupARNs target_groups unless target_groups.empty?
|
44
46
|
TerminationPolicies terminations unless terminations.empty?
|
45
47
|
VPCZoneIdentifier vpc_zones unless vpc_zones.empty?
|
46
48
|
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
#
|
2
|
+
# CertificateManager Certificate resource
|
3
|
+
# https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-certificatemanager-certificate.html
|
4
|
+
#
|
5
|
+
require 'kumogata/template/helper'
|
6
|
+
require 'kumogata/template/certificate'
|
7
|
+
|
8
|
+
name = _resource_name(args[:name], "certificate")
|
9
|
+
domain = args[:domain]
|
10
|
+
validation = _certificate_validations(args)
|
11
|
+
subject = args[:subject] || ""
|
12
|
+
|
13
|
+
_(name) do
|
14
|
+
Type "AWS::CertificateManager::Certificate"
|
15
|
+
Properties do
|
16
|
+
DomainName domain
|
17
|
+
DomainValidationOptions validation
|
18
|
+
SubjectAlternativeNames subject unless subject.empty?
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
#
|
2
|
+
# EC2 FlowLog resource
|
3
|
+
# https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-flowlog.html
|
4
|
+
#
|
5
|
+
require 'kumogata/template/helper'
|
6
|
+
require 'kumogata/template/ec2'
|
7
|
+
|
8
|
+
name = _resource_name(args[:name], "flow log")
|
9
|
+
deliver = _ref_attr_string("deliver", "Arn", args, "role")
|
10
|
+
log = args[:log] || args[:name]
|
11
|
+
resource_type_value = _valid_values(args[:type], %w( vpc subnet nic ), "vpc")
|
12
|
+
resource_id =
|
13
|
+
case resource_type_value.downcase
|
14
|
+
when "vpc"
|
15
|
+
_ref_string("id", args, "vpc")
|
16
|
+
when "subnet"
|
17
|
+
_ref_string("id", args, "subnet")
|
18
|
+
when "nic"
|
19
|
+
_ref_string("id", args, "network interface")
|
20
|
+
end
|
21
|
+
resource_type =
|
22
|
+
case resource_type_value.downcase
|
23
|
+
when "vpc"
|
24
|
+
"VPC"
|
25
|
+
when "subnet"
|
26
|
+
"Subnet"
|
27
|
+
when "nic"
|
28
|
+
"NetworkInterface"
|
29
|
+
end
|
30
|
+
traffic = _valid_values(args[:traffic], %w( accept reject all ), "all")
|
31
|
+
|
32
|
+
_(name) do
|
33
|
+
Type "AWS::EC2::FlowLog"
|
34
|
+
Properties do
|
35
|
+
DeliverLogsPermissionArn deliver unless deliver.empty?
|
36
|
+
LogGroupName log
|
37
|
+
ResourceId resource_id
|
38
|
+
ResourceType resource_type
|
39
|
+
TrafficType traffic.upcase
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
#
|
2
|
+
# EC2 Host resource
|
3
|
+
# https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-host.html
|
4
|
+
#
|
5
|
+
require 'kumogata/template/helper'
|
6
|
+
require 'kumogata/template/ec2'
|
7
|
+
|
8
|
+
name = _resource_name(args[:name], "host")
|
9
|
+
auto = _valid_values(args[:auto], %w( on off ), "")
|
10
|
+
az = _availability_zone(args)
|
11
|
+
instance_type = _ref_string("instance_type", args, "instance type")
|
12
|
+
instance_type = EMR_DEFAULT_INSTANCE_TYPE if instance_type.empty?
|
13
|
+
|
14
|
+
_(name) do
|
15
|
+
Type "AWS::EC2::Host"
|
16
|
+
Properties do
|
17
|
+
AutoPlacement auto unless auto.empty?
|
18
|
+
AvailabilityZone az
|
19
|
+
InstanceType instance_type
|
20
|
+
end
|
21
|
+
end
|
data/template/ec2-instance.rb
CHANGED
@@ -7,9 +7,11 @@ require 'kumogata/template/ec2'
|
|
7
7
|
|
8
8
|
name = _resource_name(args[:name], "instance")
|
9
9
|
instance_type = _ref_string("instance_type", args, "instance type")
|
10
|
+
affinity = _valid_values(args[:affinity], %w( host default ), "")
|
10
11
|
az = _availability_zone(args)
|
11
12
|
block_device = (args[:block_device] || []).collect{|v| _ec2_block_device(v) }
|
12
13
|
disable_termination = _bool("disable_termination", args, false)
|
14
|
+
host_id = args[:host_id] || ""
|
13
15
|
iam_instance = _ref_string("iam_instance", args, "iam instance profile")
|
14
16
|
image =_ec2_image(instance_type, args)
|
15
17
|
instance_initiated = args[:instance_initiated] || "stop"
|
@@ -32,11 +34,13 @@ volumes = args[:volumes] || ""
|
|
32
34
|
_(name) do
|
33
35
|
Type "AWS::EC2::Instance"
|
34
36
|
Properties do
|
37
|
+
Affinity affinity unless affinity.empty?
|
35
38
|
AvailabilityZone az unless az.empty?
|
36
39
|
BlockDeviceMappings block_device
|
37
40
|
DisableApiTermination disable_termination
|
38
41
|
#EbsOptimized
|
39
|
-
|
42
|
+
HostId host_id unless affinity.empty? and host_id.empty?
|
43
|
+
IamInstanceProfile iam_instance unless iam_instance.empty?
|
40
44
|
ImageId image
|
41
45
|
InstanceInitiatedShutdownBehavior instance_initiated
|
42
46
|
InstanceType instance_type
|
@@ -0,0 +1,16 @@
|
|
1
|
+
#
|
2
|
+
# EC2 Spot Fleet resource
|
3
|
+
# https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance.html
|
4
|
+
#
|
5
|
+
require 'kumogata/template/helper'
|
6
|
+
require 'kumogata/template/ec2'
|
7
|
+
|
8
|
+
name = _resource_name(args[:name], "spot fleet")
|
9
|
+
data = _ec2_spot_fleet_request(args)
|
10
|
+
|
11
|
+
_(name) do
|
12
|
+
Type "AWS::EC2::SpotFleet"
|
13
|
+
Properties do
|
14
|
+
SpotFleetRequestConfigData data
|
15
|
+
end
|
16
|
+
end
|
data/template/ecs-service.rb
CHANGED
@@ -7,6 +7,7 @@ require 'kumogata/template/ecs'
|
|
7
7
|
|
8
8
|
name = _resource_name(args[:name], "ecs service")
|
9
9
|
cluster = _ref_string("cluster", args, "ecs cluster")
|
10
|
+
deployment = _ecs_deployment(args)
|
10
11
|
desired = _ref_string("desired_count", args, "ecs desired count")
|
11
12
|
load_balancers = _ecs_load_balancers(args)
|
12
13
|
role = args[:role] || ""
|
@@ -16,6 +17,7 @@ _(name) do
|
|
16
17
|
Type "AWS::ECS::Service"
|
17
18
|
Properties do
|
18
19
|
Cluster cluster
|
20
|
+
DeploymentConfiguration deployment unless deployment.empty?
|
19
21
|
DesiredCount desired
|
20
22
|
LoadBalancers load_balancers unless load_balancers.empty?
|
21
23
|
Role role unless role.empty?
|
data/template/iam-group.rb
CHANGED
@@ -6,6 +6,7 @@ require 'kumogata/template/helper'
|
|
6
6
|
require 'kumogata/template/iam'
|
7
7
|
|
8
8
|
name = _resource_name(args[:name], "group")
|
9
|
+
group = args[:group] || ""
|
9
10
|
managed_policies =
|
10
11
|
if args.key? :managed_policies
|
11
12
|
_iam_managed_policies(args)
|
@@ -18,6 +19,7 @@ policies = _iam_policies("policies", args)
|
|
18
19
|
_(name) do
|
19
20
|
Type "AWS::IAM::Group"
|
20
21
|
Properties do
|
22
|
+
GroupName group_name unless group.empty?
|
21
23
|
ManagedPolicyArns managed_policies unless managed_policies.empty?
|
22
24
|
Path path
|
23
25
|
Policies policies unless policies.empty?
|
data/template/iam-role.rb
CHANGED
@@ -7,7 +7,15 @@ require 'kumogata/template/iam'
|
|
7
7
|
|
8
8
|
name = _resource_name(args[:name], "role")
|
9
9
|
policy = _iam_assume_role_policy_document(args)
|
10
|
+
managed_policies =
|
11
|
+
if args.key? :managed_policies
|
12
|
+
_iam_managed_policies(args)
|
13
|
+
else
|
14
|
+
[]
|
15
|
+
end
|
10
16
|
path = args[:path] || "/"
|
17
|
+
policies = _iam_policies("policies", args)
|
18
|
+
role = args[:role] || ""
|
11
19
|
|
12
20
|
_(name) do
|
13
21
|
Type "AWS::IAM::Role"
|
@@ -16,6 +24,9 @@ _(name) do
|
|
16
24
|
Version "2012-10-17"
|
17
25
|
Statement policy
|
18
26
|
end
|
27
|
+
ManagedPolicyArns managed_policies unless managed_policies.empty?
|
19
28
|
Path path
|
29
|
+
Policies policies unless policies.empty?
|
30
|
+
RoleName role unless role.empty?
|
20
31
|
end
|
21
32
|
end
|
data/template/iam-user.rb
CHANGED
@@ -21,6 +21,7 @@ managed_policies =
|
|
21
21
|
end
|
22
22
|
path = args[:path] || "/"
|
23
23
|
policies = _iam_policies("policies", args)
|
24
|
+
user = args[:user] || ""
|
24
25
|
|
25
26
|
_(name) do
|
26
27
|
Type "AWS::IAM::User"
|
@@ -30,5 +31,6 @@ _(name) do
|
|
30
31
|
ManagedPolicyArns managed_policies unless managed_policies.empty?
|
31
32
|
Path path
|
32
33
|
Policies policies unless policies.empty?
|
34
|
+
UserName user unless user.empty?
|
33
35
|
end
|
34
36
|
end
|