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.
Files changed (45) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +19 -19
  3. data/lib/kumogata/template/alb.rb +99 -0
  4. data/lib/kumogata/template/certificate.rb +18 -0
  5. data/lib/kumogata/template/const.rb +7 -0
  6. data/lib/kumogata/template/ec2.rb +6 -0
  7. data/lib/kumogata/template/ecs.rb +9 -0
  8. data/lib/kumogata/template/ext/kumogata.rb +5 -6
  9. data/lib/kumogata/template/helper.rb +4 -0
  10. data/lib/kumogata/template/version.rb +1 -1
  11. data/lib/kumogata/template.rb +2 -0
  12. data/template/alb-listener-rule.rb +22 -0
  13. data/template/alb-listener.rb +26 -0
  14. data/template/alb-load-balancer.rb +27 -0
  15. data/template/alb-target-group.rb +39 -0
  16. data/template/autoscaling-group.rb +2 -0
  17. data/template/certificate.rb +20 -0
  18. data/template/ec2-flow-log.rb +41 -0
  19. data/template/ec2-host.rb +21 -0
  20. data/template/ec2-instance.rb +5 -1
  21. data/template/ec2-spot-fleet.rb +16 -0
  22. data/template/ecs-service.rb +2 -0
  23. data/template/{elb-loadbalancer.rb → elb-load-balancer.rb} +1 -1
  24. data/template/iam-group.rb +2 -0
  25. data/template/iam-role.rb +11 -0
  26. data/template/iam-user.rb +2 -0
  27. data/template/output-alb.rb +21 -0
  28. data/template/output-elb.rb +4 -0
  29. data/template/parameter-ec2.rb +4 -4
  30. data/test/alb_test.rb +25 -0
  31. data/test/ec2_test.rb +45 -0
  32. data/test/helper_test.rb +21 -0
  33. data/test/template/alb-listener-rule_test.rb +40 -0
  34. data/test/template/alb-listener_test.rb +33 -0
  35. data/test/template/alb-load-balancer_test.rb +72 -0
  36. data/test/template/alb-target-group_test.rb +89 -0
  37. data/test/template/certificate_test.rb +27 -0
  38. data/test/template/ec2-flow-log_test.rb +26 -0
  39. data/test/template/ec2-host_test.rb +23 -0
  40. data/test/template/ec2-spot-fleet_test.rb +173 -0
  41. data/test/template/{elb-loadbalancer_test.rb → elb-load-balancer_test.rb} +1 -1
  42. data/test/template/output-alb_test.rb +105 -0
  43. data/test/template/output-elb_test.rb +61 -0
  44. data/test/template/parameter-ec2_test.rb +38 -9
  45. metadata +36 -5
@@ -0,0 +1,21 @@
1
+ #
2
+ # Output alb
3
+ #
4
+
5
+ _output "#{args[:name]} load balancer",
6
+ ref_value: "#{args[:name]} load balancer"
7
+ _output "#{args[:name]} load balancer dns name",
8
+ ref_value: [ "#{args[:name]} load balancer", "DNSName" ]
9
+ _output "#{args[:name]} load balancer canonical hosted zone id",
10
+ ref_value: [ "#{args[:name]} load balancer", "CanonicalHostedZoneID" ] if args.key? :route53
11
+ _output "#{args[:name]} load balancer full name",
12
+ ref_value: [ "#{args[:name]} load balancer", "LoadBalancerFullName" ]
13
+ _output "#{args[:name]} load balancer name",
14
+ ref_value: [ "#{args[:name]} load balancer", "LoadBalancerName" ]
15
+
16
+ if args.key? :security_groups
17
+ args[:security_groups].times do |i|
18
+ _output "#{args[:name]} load balancer security group #{i}",
19
+ value: _select(i, _attr_string(args[:name], "SecurityGroups", "load balancer"))
20
+ end
21
+ end
@@ -4,6 +4,10 @@
4
4
 
5
5
  _output "#{args[:name]} load balancer",
6
6
  ref_value: "#{args[:name]} load balancer"
7
+ _output "#{args[:name]} load balancer canonical hosted zone name",
8
+ ref_value: [ "#{args[:name]} load balancer", "CanonicalHostedZoneName" ] if args.key? :route53
9
+ _output "#{args[:name]} load balancer canonical hosted zone id",
10
+ ref_value: [ "#{args[:name]} load balancer", "CanonicalHostedZoneID" ] if args.key? :route53
7
11
  _output "#{args[:name]} load balancer dns name",
8
12
  ref_value: [ "#{args[:name]} load balancer", "DNSName" ]
9
13
  _output "#{args[:name]} load balancer security group name",
@@ -9,14 +9,14 @@ _parameter "#{args[:name]} instance type",
9
9
  allowed_values: EC2_INSTANCE_TYPES
10
10
 
11
11
  _parameter "#{args[:name]} iam instance profile",
12
- default: args[:iam_instance] || "",
13
- description: "#{args[:name]} iam instance profile"
12
+ default: args[:iam_instance],
13
+ description: "#{args[:name]} iam instance profile" if args.key? :iam_instance
14
14
 
15
15
  _parameter "#{args[:name]} data volume size",
16
16
  default: args[:size] || 100,
17
17
  description: "#{args[:name]} data volume size"
18
18
 
19
19
  _parameter "#{args[:name]} key name",
20
- default: args[:key],
20
+ default: args[:key_name],
21
21
  description: "#{args[:name]} key name",
22
- type: "AWS::EC2::KeyPair::KeyName"
22
+ type: "AWS::EC2::KeyPair::KeyName" if args.key? :key_name
data/test/alb_test.rb ADDED
@@ -0,0 +1,25 @@
1
+ require 'abstract_unit'
2
+ require 'kumogata/template/alb'
3
+
4
+ class AlbTest < Minitest::Test
5
+ def test_alb_health_check
6
+ template = <<-EOS
7
+ Test _alb_health_check({})
8
+ EOS
9
+ act_template = run_client_as_json(template)
10
+ exp_template = <<-EOS
11
+ {
12
+ "Test": {
13
+ "interval": 30,
14
+ "path": "/",
15
+ "port": 80,
16
+ "protocol": "HTTP",
17
+ "timeout": 5,
18
+ "healthy": 10,
19
+ "unhealthly": 2
20
+ }
21
+ }
22
+ EOS
23
+ assert_equal exp_template.chomp, act_template
24
+ end
25
+ end
data/test/ec2_test.rb CHANGED
@@ -113,6 +113,26 @@ Test _ec2_tags(name: "test", tags_append: { ref_test: "test" })
113
113
  def test_ec2_security_group_egresses
114
114
  template = <<-EOS
115
115
  args = { egress: [ to: 80, group: "test" ] }
116
+ Test _ec2_security_group_egresses("egress", args)
117
+ EOS
118
+ act_template = run_client_as_json(template)
119
+ exp_template = <<-EOS
120
+ {
121
+ "Test": [
122
+ {
123
+ "CidrIp": "0.0.0.0/0",
124
+ "FromPort": "80",
125
+ "GroupId": "test",
126
+ "IpProtocol": "tcp",
127
+ "ToPort": "80"
128
+ }
129
+ ]
130
+ }
131
+ EOS
132
+ assert_equal exp_template.chomp, act_template
133
+
134
+ template = <<-EOS
135
+ args = { egress: [ to: 80, group: "test" ] }
116
136
  Test _ec2_security_group_egresses("egress", args)
117
137
  EOS
118
138
  act_template = run_client_as_json(template)
@@ -167,6 +187,31 @@ Test _ec2_security_group_ingresses("ingress", args)
167
187
  "ToPort": "80"
168
188
  }
169
189
  ]
190
+ }
191
+ EOS
192
+ assert_equal exp_template.chomp, act_template
193
+
194
+ template = <<-EOS
195
+ args = { ingress: [ 22, 80 ] }
196
+ Test _ec2_security_group_ingresses("ingress", args)
197
+ EOS
198
+ act_template = run_client_as_json(template)
199
+ exp_template = <<-EOS
200
+ {
201
+ "Test": [
202
+ {
203
+ "CidrIp": "0.0.0.0/0",
204
+ "FromPort": "22",
205
+ "IpProtocol": "tcp",
206
+ "ToPort": "22"
207
+ },
208
+ {
209
+ "CidrIp": "0.0.0.0/0",
210
+ "FromPort": "80",
211
+ "IpProtocol": "tcp",
212
+ "ToPort": "80"
213
+ }
214
+ ]
170
215
  }
171
216
  EOS
172
217
  assert_equal exp_template.chomp, act_template
data/test/helper_test.rb CHANGED
@@ -255,6 +255,27 @@ Test _find_in_map("Test", "test1", "test2")
255
255
  assert_equal exp_template.chomp, act_template
256
256
  end
257
257
 
258
+ def test_select
259
+ template = <<-EOS
260
+ Test _select(1, %w( test1 test2 ))
261
+ EOS
262
+ act_template = run_client_as_json(template)
263
+ exp_template = <<-EOS
264
+ {
265
+ "Test": {
266
+ "Fn::Select": [
267
+ "1",
268
+ [
269
+ "test1",
270
+ "test2"
271
+ ]
272
+ ]
273
+ }
274
+ }
275
+ EOS
276
+ assert_equal exp_template.chomp, act_template
277
+ end
278
+
258
279
  def test_tag
259
280
  template = <<-EOS
260
281
  Test _tag(key: "test", value: "test")
@@ -0,0 +1,40 @@
1
+ require 'abstract_unit'
2
+
3
+ class AlbListenerRuleTest < Minitest::Test
4
+ def test_normal
5
+ template = <<-EOS
6
+ _alb_listener_rule "test", actions: [ { ref_target: "test" } ], ref_listener: "test", conditions: [ [ "/img/*" ] ]
7
+ EOS
8
+ act_template = run_client_as_json(template)
9
+ exp_template = <<-EOS
10
+ {
11
+ "TestLoadBalancerListenerRule": {
12
+ "Type": "AWS::ElasticLoadBalancingV2::ListenerRule",
13
+ "Properties": {
14
+ "Actions": [
15
+ {
16
+ "TargetGroupArn": {
17
+ "Ref": "TestTargetGroup"
18
+ },
19
+ "Type": "forward"
20
+ }
21
+ ],
22
+ "Conditions": [
23
+ {
24
+ "Field": "path-pattern",
25
+ "Values": [
26
+ "/img/*"
27
+ ]
28
+ }
29
+ ],
30
+ "ListenerArn": {
31
+ "Ref": "TestLoadBalancerListener"
32
+ },
33
+ "Priority": "1"
34
+ }
35
+ }
36
+ }
37
+ EOS
38
+ assert_equal exp_template.chomp, act_template
39
+ end
40
+ end
@@ -0,0 +1,33 @@
1
+ require 'abstract_unit'
2
+
3
+ class AlbListenerTest < Minitest::Test
4
+ def test_normal
5
+ template = <<-EOS
6
+ _alb_listener "test", actions: [ { ref_target: "test" } ], ref_lb: "test"
7
+ EOS
8
+ act_template = run_client_as_json(template)
9
+ exp_template = <<-EOS
10
+ {
11
+ "TestLoadBalancerListener": {
12
+ "Type": "AWS::ElasticLoadBalancingV2::Listener",
13
+ "Properties": {
14
+ "DefaultActions": [
15
+ {
16
+ "TargetGroupArn": {
17
+ "Ref": "TestTargetGroup"
18
+ },
19
+ "Type": "forward"
20
+ }
21
+ ],
22
+ "LoadBalancerArn": {
23
+ "Ref": "TestLoadBalancer"
24
+ },
25
+ "Port": "80",
26
+ "Protocol": "HTTP"
27
+ }
28
+ }
29
+ }
30
+ EOS
31
+ assert_equal exp_template.chomp, act_template
32
+ end
33
+ end
@@ -0,0 +1,72 @@
1
+ require 'abstract_unit'
2
+
3
+ class AlbLoadbalancerTest < Minitest::Test
4
+ def test_normal
5
+ template = <<-EOS
6
+ _alb_load_balancer "test", attributes: [ { "test": "test" } ], ref_security_groups: [ "test" ]
7
+ EOS
8
+ act_template = run_client_as_json(template)
9
+ exp_template = <<-EOS
10
+ {
11
+ "TestLoadBalancer": {
12
+ "Type": "AWS::ElasticLoadBalancingV2::LoadBalancer",
13
+ "Properties": {
14
+ "LoadBalancerAttributes": [
15
+ {
16
+ "Key": "test",
17
+ "Value": "test"
18
+ }
19
+ ],
20
+ "Name": {
21
+ "Fn::Join": [
22
+ "-",
23
+ [
24
+ {
25
+ "Ref": "Service"
26
+ },
27
+ {
28
+ "Ref": "Name"
29
+ }
30
+ ]
31
+ ]
32
+ },
33
+ "SecurityGroups": [
34
+ {
35
+ "Ref": "TestSecurityGroup"
36
+ }
37
+ ],
38
+ "Tags": [
39
+ {
40
+ "Key": "Name",
41
+ "Value": {
42
+ "Fn::Join": [
43
+ "-",
44
+ [
45
+ {
46
+ "Ref": "Service"
47
+ },
48
+ "test"
49
+ ]
50
+ ]
51
+ }
52
+ },
53
+ {
54
+ "Key": "Service",
55
+ "Value": {
56
+ "Ref": "Service"
57
+ }
58
+ },
59
+ {
60
+ "Key": "Version",
61
+ "Value": {
62
+ "Ref": "Version"
63
+ }
64
+ }
65
+ ]
66
+ }
67
+ }
68
+ }
69
+ EOS
70
+ assert_equal exp_template.chomp, act_template
71
+ end
72
+ end
@@ -0,0 +1,89 @@
1
+ require 'abstract_unit'
2
+
3
+ class AlbTargetGroupTest < Minitest::Test
4
+ def test_normal
5
+ template = <<-EOS
6
+ _alb_target_group "test", attributes: [ { key: "value" } ], targets: [ { ref_instance: "test" } ], ref_vpc: "test"
7
+ EOS
8
+ act_template = run_client_as_json(template)
9
+ exp_template = <<-EOS
10
+ {
11
+ "TestTargetGroup": {
12
+ "Type": "AWS::ElasticLoadBalancingV2::TargetGroup",
13
+ "Properties": {
14
+ "HealthCheckIntervalSeconds": "30",
15
+ "HealthCheckPath": "/",
16
+ "HealthCheckPort": "80",
17
+ "HealthCheckProtocol": "HTTP",
18
+ "HealthCheckTimeoutSeconds": "5",
19
+ "HealthyThresholdCount": "10",
20
+ "Matcher": {
21
+ "HttpCode": "200"
22
+ },
23
+ "Name": {
24
+ "Fn::Join": [
25
+ "-",
26
+ [
27
+ {
28
+ "Ref": "Service"
29
+ },
30
+ {
31
+ "Ref": "Name"
32
+ }
33
+ ]
34
+ ]
35
+ },
36
+ "Port": "80",
37
+ "Protocol": "HTTP",
38
+ "Tags": [
39
+ {
40
+ "Key": "Name",
41
+ "Value": {
42
+ "Fn::Join": [
43
+ "-",
44
+ [
45
+ {
46
+ "Ref": "Service"
47
+ },
48
+ "test"
49
+ ]
50
+ ]
51
+ }
52
+ },
53
+ {
54
+ "Key": "Service",
55
+ "Value": {
56
+ "Ref": "Service"
57
+ }
58
+ },
59
+ {
60
+ "Key": "Version",
61
+ "Value": {
62
+ "Ref": "Version"
63
+ }
64
+ }
65
+ ],
66
+ "TargetGroupAttributes": [
67
+ {
68
+ "Key": "key",
69
+ "Value": "value"
70
+ }
71
+ ],
72
+ "Targets": [
73
+ {
74
+ "Id": {
75
+ "Ref": "TestInstance"
76
+ }
77
+ }
78
+ ],
79
+ "UnhealthyThresholdCount": "2",
80
+ "VpcId": {
81
+ "Ref": "TestVpc"
82
+ }
83
+ }
84
+ }
85
+ }
86
+ EOS
87
+ assert_equal exp_template.chomp, act_template
88
+ end
89
+ end
@@ -0,0 +1,27 @@
1
+ require 'abstract_unit'
2
+
3
+ class CertificateTest < Minitest::Test
4
+ def test_normal
5
+ template = <<-EOS
6
+ _certificate "test", domain: "test"
7
+ EOS
8
+ act_template = run_client_as_json(template)
9
+ exp_template = <<-EOS
10
+ {
11
+ "TestCertificate": {
12
+ "Type": "AWS::CertificateManager::Certificate",
13
+ "Properties": {
14
+ "DomainName": "test",
15
+ "DomainValidationOptions": [
16
+ {
17
+ "DomainName": "test",
18
+ "ValidationDomain": "test"
19
+ }
20
+ ]
21
+ }
22
+ }
23
+ }
24
+ EOS
25
+ assert_equal exp_template.chomp, act_template
26
+ end
27
+ end
@@ -0,0 +1,26 @@
1
+ require 'abstract_unit'
2
+
3
+ class Ec2LowLogTest < Minitest::Test
4
+ def test_normal
5
+ template = <<-EOS
6
+ _ec2_flow_log "test", ref_id: "test"
7
+ EOS
8
+ act_template = run_client_as_json(template)
9
+ exp_template = <<-EOS
10
+ {
11
+ "TestFlowLog": {
12
+ "Type": "AWS::EC2::FlowLog",
13
+ "Properties": {
14
+ "LogGroupName": "test",
15
+ "ResourceId": {
16
+ "Ref": "TestVpc"
17
+ },
18
+ "ResourceType": "VPC",
19
+ "TrafficType": "ALL"
20
+ }
21
+ }
22
+ }
23
+ EOS
24
+ assert_equal exp_template.chomp, act_template
25
+ end
26
+ end
@@ -0,0 +1,23 @@
1
+ require 'abstract_unit'
2
+
3
+ class Ec2HostTest < Minitest::Test
4
+ def test_normal
5
+ template = <<-EOS
6
+ _ec2_host "test", auto: "on", az: "test"
7
+ EOS
8
+ act_template = run_client_as_json(template)
9
+ exp_template = <<-EOS
10
+ {
11
+ "TestHost": {
12
+ "Type": "AWS::EC2::Host",
13
+ "Properties": {
14
+ "AutoPlacement": "on",
15
+ "AvailabilityZone": "test",
16
+ "InstanceType": "c4.large"
17
+ }
18
+ }
19
+ }
20
+ EOS
21
+ assert_equal exp_template.chomp, act_template
22
+ end
23
+ end
@@ -0,0 +1,173 @@
1
+ require 'abstract_unit'
2
+
3
+ class Ec2SpotFeetTest < Minitest::Test
4
+ def test_normal
5
+ template = <<-EOS
6
+ launches = [
7
+ { block_devices: [ { ref_size: "test" } ],
8
+ ref_iam: "test", image_id: "test", ref_key_name: "test", instance_type: "test", network_interfaces: [ { ref_subnet: "test" } ] }
9
+ ]
10
+ _ec2_spot_fleet "test", iam: "test", price: 1000, ref_taget: "test", launches: launches, target: 1
11
+ EOS
12
+ act_template = run_client_as_json(template)
13
+ exp_template = <<-EOS
14
+ {
15
+ "TestSpotFleet": {
16
+ "Type": "AWS::EC2::SpotFleet",
17
+ "Properties": {
18
+ "SpotFleetRequestConfigData": {
19
+ "AllocationStrategy": "lowestPrice",
20
+ "IamFleetRole": "test",
21
+ "LaunchSpecifications": [
22
+ {
23
+ "BlockDeviceMappings": [
24
+ {
25
+ "DeviceName": "/dev/sda1",
26
+ "Ebs": {
27
+ "DeleteOnTermination": "true",
28
+ "VolumeSize": {
29
+ "Ref": "TestVolumeSize"
30
+ },
31
+ "VolumeType": "gp2"
32
+ }
33
+ }
34
+ ],
35
+ "EbsOptimized": "false",
36
+ "IamInstanceProfile": {
37
+ "Arn": {
38
+ "Ref": "TestIamInstanceProfile"
39
+ }
40
+ },
41
+ "ImageId": "test",
42
+ "InstanceType": "test",
43
+ "KeyName": {
44
+ "Ref": "TestKeyName"
45
+ },
46
+ "Monitoring": {
47
+ "Enabled": "false"
48
+ },
49
+ "NetworkInterfaces": [
50
+ {
51
+ "AssociatePublicIpAddress": "true",
52
+ "DeleteOnTermination": "true",
53
+ "DeviceIndex": "0",
54
+ "SubnetId": {
55
+ "Ref": "TestSubnet"
56
+ }
57
+ }
58
+ ]
59
+ }
60
+ ],
61
+ "SpotPrice": "1000",
62
+ "TargetCapacity": "1",
63
+ "TerminateInstancesWithExpiration": "false"
64
+ }
65
+ }
66
+ }
67
+ }
68
+ EOS
69
+ assert_equal exp_template.chomp, act_template
70
+ end
71
+
72
+ def test_aws
73
+ template = <<-EOS
74
+ launches = [
75
+ { ebs: false, ref_instance_type: "test", image: "test", ref_subnet: "subnet1", weighted: 8 },
76
+ { ebs: true, ref_instance_type: "test", image: "test", ref_subnet: "subnet0", weighted: 8, monitoring: true, ref_security_groups: [ "test" ], ref_iam: "root" },
77
+ ]
78
+ _ec2_spot_fleet "test", iam: "test", price: 1000, ref_target: "target capacity", launches: launches
79
+ EOS
80
+ act_template = run_client_as_json(template)
81
+ exp_template = <<-EOS
82
+ {
83
+ "TestSpotFleet": {
84
+ "Type": "AWS::EC2::SpotFleet",
85
+ "Properties": {
86
+ "SpotFleetRequestConfigData": {
87
+ "AllocationStrategy": "lowestPrice",
88
+ "IamFleetRole": "test",
89
+ "LaunchSpecifications": [
90
+ {
91
+ "EbsOptimized": "false",
92
+ "ImageId": {
93
+ "Fn::FindInMap": [
94
+ "AWSRegionArch2AMITest",
95
+ {
96
+ "Ref": "AWS::Region"
97
+ },
98
+ {
99
+ "Fn::FindInMap": [
100
+ "AWSInstanceType2Arch",
101
+ {
102
+ "Ref": "TestInstanceType"
103
+ },
104
+ "Arch"
105
+ ]
106
+ }
107
+ ]
108
+ },
109
+ "InstanceType": {
110
+ "Ref": "TestInstanceType"
111
+ },
112
+ "Monitoring": {
113
+ "Enabled": "false"
114
+ },
115
+ "SubnetId": {
116
+ "Ref": "Subnet1Subnet"
117
+ },
118
+ "WeightedCapacity": "8"
119
+ },
120
+ {
121
+ "EbsOptimized": "true",
122
+ "IamInstanceProfile": {
123
+ "Arn": {
124
+ "Ref": "RootIamInstanceProfile"
125
+ }
126
+ },
127
+ "ImageId": {
128
+ "Fn::FindInMap": [
129
+ "AWSRegionArch2AMITest",
130
+ {
131
+ "Ref": "AWS::Region"
132
+ },
133
+ {
134
+ "Fn::FindInMap": [
135
+ "AWSInstanceType2Arch",
136
+ {
137
+ "Ref": "TestInstanceType"
138
+ },
139
+ "Arch"
140
+ ]
141
+ }
142
+ ]
143
+ },
144
+ "InstanceType": {
145
+ "Ref": "TestInstanceType"
146
+ },
147
+ "Monitoring": {
148
+ "Enabled": "true"
149
+ },
150
+ "SecurityGroups": [
151
+ {
152
+ "Ref": "TestSecurityGroup"
153
+ }
154
+ ],
155
+ "SubnetId": {
156
+ "Ref": "Subnet0Subnet"
157
+ },
158
+ "WeightedCapacity": "8"
159
+ }
160
+ ],
161
+ "SpotPrice": "1000",
162
+ "TargetCapacity": {
163
+ "Ref": "TargetCapacity"
164
+ },
165
+ "TerminateInstancesWithExpiration": "false"
166
+ }
167
+ }
168
+ }
169
+ }
170
+ EOS
171
+ assert_equal exp_template.chomp, act_template
172
+ end
173
+ end
@@ -3,7 +3,7 @@ require 'abstract_unit'
3
3
  class ElbLoadbalancerTest < Minitest::Test
4
4
  def test_normal
5
5
  template = <<-EOS
6
- _elb_loadbalancer "test", ref_security_groups: [ "test" ], listeners: [ protocol: "http" ]
6
+ _elb_load_balancer "test", ref_security_groups: [ "test" ], listeners: [ protocol: "http" ]
7
7
  EOS
8
8
  act_template = run_client_as_json(template)
9
9
  exp_template = <<-EOS