kumogata-template 0.0.5 → 0.0.6
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/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
|