kumogata-template 0.0.33 → 0.0.34

Sign up to get free protection for your applications and to get access to all the features.
Files changed (74) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/README.md +30 -49
  4. data/kumogata-template.gemspec +1 -1
  5. data/lib/kumogata/template/ec2.rb +16 -18
  6. data/lib/kumogata/template/helper.rb +14 -36
  7. data/lib/kumogata/template/iam.rb +2 -0
  8. data/lib/kumogata/template/s3.rb +15 -0
  9. data/lib/kumogata/template/sns.rb +7 -2
  10. data/lib/kumogata/template/version.rb +1 -1
  11. data/template/ec2-customer-gateway.rb +21 -0
  12. data/template/ec2-dhcp-options.rb +25 -0
  13. data/template/ec2-egress-only-internet-gateway.rb +15 -0
  14. data/template/ec2-instance.rb +2 -2
  15. data/template/ec2-network-interface-attachment.rb +22 -0
  16. data/template/ec2-network-interface.rb +32 -0
  17. data/template/ec2-placement-group.rb +17 -0
  18. data/template/ec2-security-group-egress.rb +15 -0
  19. data/template/ec2-security-group-ingress.rb +19 -0
  20. data/template/ec2-security-group.rb +4 -4
  21. data/template/ec2-subnet-cidr-block.rb +17 -0
  22. data/template/ec2-vpc-cidr-block.rb +17 -0
  23. data/template/ec2-vpc-dhcp-options-association.rb +17 -0
  24. data/template/ec2-vpc-peering-connection.rb +23 -0
  25. data/template/ec2-vpn-connection-route.rb +17 -0
  26. data/template/ec2-vpn-connection.rb +23 -0
  27. data/template/ec2-vpn-gateway-route-propagation.rb +17 -0
  28. data/template/ec2-vpn-gateway.rb +17 -0
  29. data/template/ecs-service.rb +2 -2
  30. data/template/iam-group.rb +2 -2
  31. data/template/iam-instance-profile.rb +2 -2
  32. data/template/iam-role.rb +2 -2
  33. data/template/iam-user.rb +2 -2
  34. data/template/output-access-key.rb +2 -2
  35. data/template/{output-iam-instance-profile.rb → output-instance-profile.rb} +1 -1
  36. data/template/output-network-interface.rb +14 -0
  37. data/template/{output-iam-role.rb → output-role.rb} +1 -1
  38. data/template/{output-ec2-subnet.rb → output-subnet.rb} +1 -1
  39. data/template/rds-db-instance.rb +5 -1
  40. data/template/s3-bucket.rb +1 -2
  41. data/template/sns-topic.rb +2 -2
  42. data/test/ec2_test.rb +17 -18
  43. data/test/helper_test.rb +4 -2
  44. data/test/sns_test.rb +16 -0
  45. data/test/template/ec2-customer-gateway_tet.rb +55 -0
  46. data/test/template/ec2-dhcp-options_test.rb +49 -0
  47. data/test/template/ec2-egress-only-internet-gateway_test.rb +23 -0
  48. data/test/template/ec2-instance_test.rb +1 -1
  49. data/test/template/ec2-network-interface-attachment_tet.rb +28 -0
  50. data/test/template/ec2-network-interface_test.rb +52 -0
  51. data/test/template/ec2-placement-group_test.rb +21 -0
  52. data/test/template/ec2-security-group-egress_test.rb +25 -0
  53. data/test/template/ec2-security-group-ingress_test.rb +25 -0
  54. data/test/template/ec2-security-group_test.rb +1 -0
  55. data/test/template/ec2-subnet-cidr-block_test.rb +26 -0
  56. data/test/template/ec2-vpc-cidr-block_test.rb +24 -0
  57. data/test/template/ec2-vpc-dhcp-options-association_test.rb +26 -0
  58. data/test/template/ec2-vpc-peering-connection_test.rb +54 -0
  59. data/test/template/ec2-vpn-connection-route_test.rb +26 -0
  60. data/test/template/ec2-vpn-connection_test.rb +56 -0
  61. data/test/template/ec2-vpn-gateway-route-propagation_test.rb +28 -0
  62. data/test/template/ec2-vpn-gateway_test.rb +49 -0
  63. data/test/template/ecs-service_test.rb +1 -0
  64. data/test/template/iam-instance-profile_test.rb +4 -3
  65. data/test/template/iam-user_test.rb +54 -0
  66. data/test/template/output-access-key_test.rb +2 -2
  67. data/test/template/{output-iam-instance-profile_test.rb → output-instance-profile_test.rb} +2 -2
  68. data/test/template/output-network-interface_test.rb +39 -0
  69. data/test/template/{output-iam-role_test.rb → output-role_test.rb} +2 -2
  70. data/test/template/{output-ec2-subet_test.rb → output-subet_test.rb} +2 -2
  71. data/test/template/rds-db-instance_test.rb +5 -5
  72. data/test/template/s3-bucket_test.rb +60 -0
  73. metadata +66 -16
  74. data/Gemfile.lock +0 -51
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ae8579ef67a536e816f1044e3f6d61d55c2d22b2
4
- data.tar.gz: a615fd47c3ffc560524002bb655501a0a2fdb6be
3
+ metadata.gz: 4614c777d40479422e7f81c0c24dfbe53a47c2e0
4
+ data.tar.gz: cdb0a588add13fb92a75e3e1c2ca78ef5e9a7706
5
5
  SHA512:
6
- metadata.gz: 15358466f358d1dd05be9d4f72134a5e9bb31cd9f186dd0b817fa3794ecac885c915f16f5f4a85a36e075a8f38c69d5e39e432dc28b9db086aa2bb460a457aca
7
- data.tar.gz: 70cd674c8a2ed82bfef4300f264cfd5486ba4d887bd0095a0975d579c3a77a17fad34e98eebef86fab7105892ae32c700afe084b49d43b55d4f32c37fc17e0b7
6
+ metadata.gz: 43838f52cc049725b0f73250853f17ddce36ff41658db661622935dde7dc2f6cb119448c84926d97507fface0c4d60367f19ef50c55569993646e8720b36269c
7
+ data.tar.gz: 923adaaa2fe9d84de9d225ce129f440423f1bb22443bbc7b57391d01fc8f06b8db1274ee85b16bb41594af3f20d94a6b6375e0f54ac4aa784e9217d3f710a6ee
data/.gitignore CHANGED
@@ -1,5 +1,6 @@
1
1
  ### https://raw.github.com/github/gitignore/b27b46b656d026ac295b3a47cf43e8af192472e2/ruby.gitignore
2
2
 
3
+ Gemfile.lock
3
4
  *.gem
4
5
  *.rbc
5
6
  /.config
data/README.md CHANGED
@@ -3,10 +3,12 @@
3
3
  [![Gem Version](https://badge.fury.io/rb/kumogata-template.svg)](http://badge.fury.io/rb/kumogata-template)
4
4
  [![Build Status](https://travis-ci.org/n0ts/kumogata-template.svg?branch=master)](https://travis-ci.org/n0ts/kumogata-template)
5
5
 
6
+
6
7
  ## About
7
8
 
8
9
  - `kumogate-template` is a template sets for [kumogata2](https://github.com/winebarrel/kumogata2).
9
10
 
11
+
10
12
  ## Installation
11
13
 
12
14
  Add this line to your application's Gemfile:
@@ -17,11 +19,15 @@ gem 'kumogata-template'
17
19
 
18
20
  And then execute:
19
21
 
20
- $ bundle
22
+ ```
23
+ $ bundle
24
+ ```
21
25
 
22
26
  Or install it yourself as:
23
27
 
24
- $ gem install kumogata-template
28
+ ```
29
+ $ gem install kumogata-template
30
+ ```
25
31
 
26
32
 
27
33
  ## Usage
@@ -31,10 +37,10 @@ Usage: kumogate-template <command> [args] [options]
31
37
 
32
38
  Commands:
33
39
  init STACK_NAME Initialize template
34
- * Other command same as kumogata's commands
40
+ * Other command same as kumogata2 commands
35
41
 
36
42
  Options:
37
- * Options is same as the kumogata's options
43
+ * Options is same as the kumogata2 options
38
44
  ```
39
45
 
40
46
  - Initialize a sample template
@@ -60,28 +66,28 @@ Parameters do
60
66
  description: "sample version"
61
67
  end
62
68
 
63
- Mappings do
64
- end
65
-
66
69
  Resources do
67
- _s3_bucket "sample"
70
+ # And more kumogata-template examples at examples/
71
+
72
+ # Create a S3 Bucket
73
+ #_s3_bucket "sample"
68
74
  end
69
75
 
70
76
  Outputs do
71
- _output_s3 "sample"
77
+ # Output S3 Bucket Information
78
+ #_output_s3 "sample"
72
79
  end
73
80
  ```
74
81
 
75
- - Below sample template is create a s3 bucket.
76
82
 
77
-
78
- ## What is difference `kumogata-template` and `kumogata`
83
+ ## What is **THE** difference `kumogata-template` and `kumogata2`
79
84
 
80
85
  - For example launch EC2 instance.
81
86
 
82
- ### kumogata
87
+ ### kumogata2
83
88
 
84
89
  ```
90
+ Resources do
85
91
  myEC2Instance do
86
92
  Type "AWS::EC2::Instance"
87
93
  Properties do
@@ -98,6 +104,8 @@ end
98
104
  end
99
105
  end
100
106
  end
107
+ ...
108
+ end
101
109
  ```
102
110
 
103
111
 
@@ -106,6 +114,7 @@ end
106
114
  - More simply write cloudformation stack.
107
115
 
108
116
  ```
117
+ Resources do
109
118
  user_data =<<EOS
110
119
  yum install -y httpd
111
120
  service httpd start
@@ -116,41 +125,13 @@ EOS
116
125
  ref_instance_type: "my",
117
126
  key_name: "your_key_name",
118
127
  user_data: user_data
128
+ ...
129
+ end
119
130
  ```
120
131
 
121
- - more example see [test code](test/template)
122
-
123
-
124
- ## AWS CloudFormation
125
-
126
- - [Relese notes](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/ReleaseHistory.html)
127
- - Almost support release date is `January 17, 2017`
128
-
129
- - [Support Resource Types](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-template-resource-type-ref.html)
130
- - AWS::AutoScaling::*
131
- - AWS::CertificateManager::*
132
- - AWS::CloudFront::**
133
- - AWS::CloudTrail::*
134
- - AWS::CloudWatch::*
135
- - AWS::CodeBuild::*
136
- - AWS::CodeCommit::*
137
- - AWS::CodeDeploy::*
138
- - AWS::DataPipeline::*
139
- - AWS::DynamoDB::*
140
- - AWS::EC2::*
141
- - AWS::ECS::*
142
- - AWS::ElastiCache::*
143
- - AWS::ElasticBeanstalk::*
144
- - AWS::ElasticLoadBalancing::*
145
- - AWS::ElasticLoadBalancingV2::*
146
- - AWS::EMR::*
147
- - AWS::Events::*
148
- - AMS::KMS::*
149
- - AWS::IAM::*
150
- - AWS::Lambda::*
151
- - AWS::Logs::*
152
- - AWS::RDS::*
153
- - AWS::Redshift::*
154
- - AWS::S3::*
155
- - AWS::SNS::*
156
- - AWS::SQS::*
132
+ - And more example see [test code](test/template/)
133
+
134
+
135
+ ## Support AWS CloudFormation Relase
136
+
137
+ **January 17, 2017** [Relese notes](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/ReleaseHistory.html)
@@ -19,7 +19,7 @@ Gem::Specification.new do |spec|
19
19
  spec.require_paths = ['lib']
20
20
 
21
21
  spec.add_dependency 'aws-sdk', '~> 2.3'
22
- spec.add_dependency 'kumogata2-plugin-ruby', '0.1.3'
22
+ spec.add_dependency 'kumogata2-plugin-ruby', '>= 0.1.6'
23
23
  spec.add_development_dependency 'bundler'
24
24
  spec.add_development_dependency 'rake'
25
25
  spec.add_development_dependency 'minitest'
@@ -19,38 +19,38 @@ def _ec2_tags(args)
19
19
  _tags(args)
20
20
  end
21
21
 
22
- def _ec2_security_group_egresses(name, args)
22
+ def _ec2_security_group_egress_rules(name, args)
23
23
  return [] unless args.key? name.to_sym
24
24
 
25
25
  rules = []
26
26
  _array(args[name.to_sym]).each do |arg|
27
- rules << _ec2_security_group_egress(arg)
27
+ rules << _ec2_security_group_egress_rule(arg)
28
28
  end
29
29
  rules
30
30
  end
31
31
 
32
- def _ec2_security_group_egress(args)
32
+ def _ec2_security_group_egress_rule(args)
33
33
  cidr = args[:cidr] || "0.0.0.0/0"
34
34
  cidr_ipv6 = args[:cidr_ipv6] || ""
35
- destination = _ref_string("destination", args, "security group")
35
+ dest_security = _ref_string("dest_security", args, "security group")
36
36
  from = _ref_string("from", args)
37
- group = _ref_string("group", args, "security group")
38
37
  ip = args[:ip] || "tcp"
38
+ dest_prefix = _ref_string("dest_prefix", args, "vpc endpoint")
39
39
  to = _ref_string("to", args)
40
40
  from = to if from.empty?
41
41
 
42
42
  _{
43
- CidrIp cidr if destination.empty?
43
+ CidrIp cidr if dest_security.empty?
44
44
  CidrIpv6 cidr_ipv6 unless cidr_ipv6.empty?
45
- DestinationSecurityGroupId destination unless destination.empty?
45
+ DestinationPrefixListId dest_prefix unless dest_prefix.empty?
46
46
  FromPort from unless ip == "icmp"
47
- GroupId group unless group.empty?
48
47
  IpProtocol ip
48
+ DestinationSecurityGroupId dest_security unless dest_security.empty?
49
49
  ToPort to unless ip == "icmp"
50
50
  }
51
51
  end
52
52
 
53
- def _ec2_security_group_ingresses(name, args)
53
+ def _ec2_security_group_ingress_rules(name, args)
54
54
  return [] unless args.key? name.to_sym
55
55
 
56
56
  rules = []
@@ -61,17 +61,15 @@ def _ec2_security_group_ingresses(name, args)
61
61
  to: arg,
62
62
  }
63
63
  end
64
- rules << _ec2_security_group_ingress(arg)
64
+ rules << _ec2_security_group_ingress_rule(arg)
65
65
  end
66
66
  rules
67
67
  end
68
68
 
69
- def _ec2_security_group_ingress(args)
69
+ def _ec2_security_group_ingress_rule(args)
70
70
  cidr = args[:cidr] || "0.0.0.0/0"
71
71
  cidr_ipv6 = args[:cidr_ipv6] || ""
72
72
  from = _ref_string("from", args)
73
- group_id = _ref_string("group", args, "security group")
74
- group_name = args[:group_name] || ""
75
73
  ip = args[:ip] || "tcp"
76
74
  source_group_name = _ref_string("source_group_name", args, "security group")
77
75
  source_group_id = _ref_string("source_group_id", args, "security group")
@@ -84,8 +82,6 @@ def _ec2_security_group_ingress(args)
84
82
  CidrIp cidr if source_group_name.empty? and source_group_id.empty?
85
83
  CidrIpv6 cidr_ipv6 unless cidr_ipv6.empty?
86
84
  FromPort from unless ip == "icmp"
87
- GroupId group_id unless group_id.empty?
88
- GroupName group_name unless group_name.empty?
89
85
  IpProtocol ip
90
86
  SourceSecurityGroupName source_group_name unless source_group_name.empty?
91
87
  SourceSecurityGroupId source_group_id unless source_group_id.empty?
@@ -120,7 +116,7 @@ def _ec2_block_device(args)
120
116
  }
121
117
  end
122
118
 
123
- def _ec2_network_interface(args, is_spot = false)
119
+ def _ec2_network_interface_embedded(args, is_spot = false)
124
120
  associate_public = _bool("associate_public", args, true)
125
121
  delete = _bool("delete", args, true)
126
122
  description = args[:description] || ""
@@ -196,7 +192,9 @@ end
196
192
  def _ec2_spot_fleet_request(args)
197
193
  allocation = _valid_values(args[:allocation], %w( lowestPrice diversified), "lowestPrice")
198
194
  express = _valid_values(args[:express], %w( noTermination default), "")
199
- iam = args[:iam] # IAM Role "aws-ec2-spot-fleet-role" auto generated
195
+ iam = _ref_attr_string("iam", "Arn", args, "role")
196
+ # TODO move to role.rb
197
+ iam = "aws-ec2-spot-fleet-role" if iam.empty?
200
198
  launches = args[:launches].collect{|v| _ec2_spot_fleet_launches(v) }
201
199
  price = args[:price] || 0.00
202
200
  target = _ref_string("target", args, "")
@@ -235,7 +233,7 @@ def _ec2_spot_fleet_launches(args)
235
233
  kernel = args[:kernel] || ""
236
234
  key_name = _ref_string("key_name", args, "key name")
237
235
  monitoring = _bool("monitoring", args, false)
238
- network_interfaces = (args[:network_interfaces] || []).collect{|v| _ec2_network_interface(v, true) }
236
+ network_interfaces = (args[:network_interfaces] || []).collect{|v| _ec2_network_interface_embedded(v, true) }
239
237
  placement = _ref_string("placement", args)
240
238
  ram_disk = args[:ram_disk] || ""
241
239
  security_groups = _ref_array("security_groups", args, "security group")
@@ -59,8 +59,11 @@ def _valid_numbers(value, min = 0, max = 0, default = nil)
59
59
  (min <= number and number <= max) ? number : default
60
60
  end
61
61
 
62
- def _real_name(name)
63
- name.to_s.gsub(" ", "-")
62
+ def _real_name(name, args)
63
+ key = _ref_key?(name, args) ? name : "name"
64
+ real_name = _ref_string(key, args)
65
+ real_name = real_name.gsub(" ", "-") if real_name.is_a? String
66
+ real_name =~ /^false/i ? false : real_name
64
67
  end
65
68
 
66
69
  def _ref_key?(name, args, ref_name = '')
@@ -70,6 +73,13 @@ def _ref_key?(name, args, ref_name = '')
70
73
  false
71
74
  end
72
75
 
76
+ def _ref_number(name, args, ref_name = '')
77
+ return _import(args["import_#{name}".to_sym]) if args.key? "import_#{name}".to_sym
78
+ return args[name.to_sym].to_i || 0 unless args.key? "ref_#{name}".to_sym
79
+
80
+ _ref(_resource_name(args["ref_#{name}".to_sym].to_s, ref_name))
81
+ end
82
+
73
83
  def _ref_string(name, args, ref_name = '')
74
84
  return _import(args["import_#{name}".to_sym]) if args.key? "import_#{name}".to_sym
75
85
  return args[name.to_sym].to_s || '' unless args.key? "ref_#{name}".to_sym
@@ -197,7 +207,7 @@ def _base64(data)
197
207
  end
198
208
 
199
209
  def _base64_shell(data, shell = "/bin/bash")
200
- _base64("#!#{shell}\n#{data}")
210
+ _base64("#!#{shell}\n#{data}\n")
201
211
  end
202
212
 
203
213
  def _find_in_map(name, top_level, secondary_level)
@@ -220,7 +230,7 @@ end
220
230
 
221
231
  def _export_string(args, prefix)
222
232
  if args.key? :export and args[:export] == true
223
- "#{args[:name]}-#{prefix}"
233
+ "#{args[:name]}-#{prefix.gsub(' ', '-')}"
224
234
  else
225
235
  ""
226
236
  end
@@ -380,35 +390,3 @@ def _window_time(service, start_time)
380
390
  end
381
391
  "#{start_time.strftime(format)}-#{end_time.strftime(format)}"
382
392
  end
383
-
384
- def _ref_arn(service, name)
385
- # FIXME
386
- _{
387
- Fn__Join [
388
- ",",
389
- [
390
- "arn:aws:#{service}:::",
391
- _{ Ref _resource_name(name) },
392
- ]
393
- ]
394
- }
395
- end
396
-
397
- def _ref_pseudo(type)
398
- pseudo =
399
- case type
400
- when "account"
401
- "AccountId"
402
- when "notification arns"
403
- "NotificationARNs"
404
- when "no value"
405
- "NoValue"
406
- when "region"
407
- "Region"
408
- when "stack id"
409
- "StackId"
410
- when "stack name"
411
- "StackName"
412
- end
413
- _{ Ref "AWS::#{pseudo}" }
414
- end
@@ -251,6 +251,8 @@ def _iam_arn(service, resource)
251
251
  "arn:aws:sts::#{v[:account_id]}:#{v[:type]}/#{v[:user]}"
252
252
  elsif v.key? :policy
253
253
  "arn:aws:iam::aws:policy/#{_iam_to_policy(v[:policy])}"
254
+ elsif v.key? :role
255
+ "#{arn_prefix}::#{v[:account_id]}:role/#{v[:role]}"
254
256
  elsif v.key? :root
255
257
  "#{arn_prefix}::#{v[:account_id]}:root"
256
258
  else
@@ -3,6 +3,21 @@
3
3
  #
4
4
  require 'kumogata/template/helper'
5
5
 
6
+ def _s3_to_deletion_policy(value)
7
+ return "Retain" if value.nil?
8
+
9
+ case "value"
10
+ when "delete"
11
+ "Delete"
12
+ when "retain"
13
+ "Retain"
14
+ when "shapshot"
15
+ "Snapshot"
16
+ else
17
+ _valid_values(value, %w( Delete Retain Snapshot ), "Retain")
18
+ end
19
+ end
20
+
6
21
  def _s3_to_access(value)
7
22
  return "Private" if value.nil?
8
23
 
@@ -23,8 +23,13 @@ def _sns_subscription_list(args)
23
23
 
24
24
  array = []
25
25
  subscription.each do |v|
26
- protocol = _sns_to_protocol(v[:protocol])
27
- endpoint = _sns_to_endpoint(protocol, v[:endpoint])
26
+ if v.is_a? String
27
+ protocol = "email"
28
+ endpoint = v
29
+ else
30
+ protocol = _sns_to_protocol(v[:protocol])
31
+ endpoint = _sns_to_endpoint(protocol, v[:endpoint])
32
+ end
28
33
  array << _{
29
34
  Endpoint endpoint
30
35
  Protocol protocol
@@ -1 +1 @@
1
- KUMOGATA_TEMPLATE_VERSION = '0.0.33'
1
+ KUMOGATA_TEMPLATE_VERSION = '0.0.34'
@@ -0,0 +1,21 @@
1
+ #
2
+ # EC2 Customer Gateway resource
3
+ # http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-customer-gateway.html
4
+ #
5
+ require 'kumogata/template/helper'
6
+
7
+ name = _resource_name(args[:name], "customer gateway")
8
+ bgp = _ref_string("bgp", args, "bgp")
9
+ ip = _ref_string("ip", args, "ip")
10
+ tags = _tags(args)
11
+ type = _ref_string("type", args)
12
+
13
+ _(name) do
14
+ Type "AWS::EC2::CustomerGateway"
15
+ Properties do
16
+ BgpAsn bgp
17
+ IpAddress ip
18
+ Tags tags
19
+ Type type
20
+ end
21
+ end
@@ -0,0 +1,25 @@
1
+ #
2
+ # EC2 DHCP Options resource
3
+ # http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-dhcp-options.html
4
+ #
5
+ require 'kumogata/template/helper'
6
+
7
+ name = _resource_name(args[:name], "dhcp options")
8
+ domain_name = _ref_string("domain_name", args, "domain name")
9
+ domain_servers = _ref_array("domain_servers", args, "domain servers")
10
+ netbios_servers = _ref_array("netbios_servers", args, "netbios servers")
11
+ netbios_type = args[:netbios_type] || 2
12
+ ntp_serves = _ref_array("ntp_serves", args, "ntp servers")
13
+ tags = _tags(args)
14
+
15
+ _(name) do
16
+ Type "AWS::EC2::DHCPOptions"
17
+ Properties do
18
+ DomainName domain_name unless domain_name.empty?
19
+ DomainNameServers domain_servers unless domain_servers.empty?
20
+ NetbiosNameServers netbios_servers unless netbios_servers.empty?
21
+ NetbiosNodeType netbios_type unless netbios_servers.empty?
22
+ NtpServers unless ntp_serves.empty?
23
+ Tags tags
24
+ end
25
+ end
@@ -0,0 +1,15 @@
1
+ #
2
+ # EC2 Egress Only Internet Gateway resource
3
+ # http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-egressonlyinternetgateway.html
4
+ #
5
+ require 'kumogata/template/helper'
6
+
7
+ name = _resource_name(args[:name], "egress only internet gateway")
8
+ vpc = _ref_string("vpc", args, "vpc")
9
+
10
+ _(name) do
11
+ Type "AWS::EC2::EgressOnlyInternetGateway"
12
+ Properties do
13
+ VpcId vpc
14
+ end
15
+ end
@@ -19,7 +19,7 @@ ipv6_addresses = args[:ipv6_addresses] || []
19
19
  kernel = args[:kernel] || ""
20
20
  key_name = _ref_string("key_name", args, "key name")
21
21
  monitoring = _bool("monitoring", args, true)
22
- network_interfaces = (args[:network_interfaces] || []).collect{|v| _ec2_network_interface(v) }
22
+ network_interfaces = (args[:network_interfaces] || []).collect{|v| _ec2_network_interface_embedded(v) }
23
23
  placement = _ref_string("placement", args)
24
24
  private_ip = args[:private_ip] || ""
25
25
  ram_disk = args[:ram_disk] || ""
@@ -29,7 +29,7 @@ ssm = args[:ssm] || []
29
29
  subnet = _ref_string("subnet", args, "subnet")
30
30
  tags = _ec2_tags(args)
31
31
  tenancy = args[:tenancy] || "default"
32
- user_data = _ec2_user_data(args)##_ref_string("user_data", args, "user data")
32
+ user_data = _ec2_user_data(args)
33
33
  volumes = args[:volumes] || ""
34
34
 
35
35
  _(name) do
@@ -0,0 +1,22 @@
1
+ #
2
+ # EC2 Network Interface Attachment resource
3
+ # http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-network-interface-attachment.html
4
+ #
5
+ require 'kumogata/template/helper'
6
+
7
+ name = _resource_name(args[:name], "network interface attachment")
8
+ delete = _bool("delete", args, true)
9
+ index = args[:index] || 0
10
+ instance = _ref_string("instance", args, "instance")
11
+ network = _ref_string("network", args, "network interface")
12
+
13
+ _(name) do
14
+ Type "AWS::EC2::NetworkInterfaceAttachment"
15
+ Properties do
16
+ DeleteOnTermination delete
17
+ DeviceIndex index
18
+ InstanceId instance
19
+ NetworkInterfaceId network
20
+ end
21
+ end
22
+
@@ -0,0 +1,32 @@
1
+ #
2
+ # EC2 Network Interface resource
3
+ # http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-network-interface.html
4
+ #
5
+ require 'kumogata/template/helper'
6
+
7
+ name = _resource_name(args[:name], "network interface")
8
+ description = _ref_string_default("description", args)
9
+ group_set = _ref_array("group_set", args, "security group")
10
+ ipv6_addresses = args[:ipv6_addresses] || []
11
+ private_ip = args[:private_ip] || ""
12
+ private_ips = args[:private_ips] || ""
13
+ secondary_private_ip = args[:secondary_private_ip] || ""
14
+ source_dest = _bool("source_dest", args, false)
15
+ subnet = _ref_string("subnet", args, "subnet")
16
+ tags = _tags(args)
17
+
18
+ _(name) do
19
+ Type "AWS::EC2::NetworkInterface"
20
+ Properties do
21
+ Description description unless description.empty?
22
+ GroupSet group_set unless group_set.empty?
23
+ Ipv6AddressCount ipv6_addresses.size unless ipv6_addresses.empty?
24
+ Ipv6Addresses ipv6_addresses unless ipv6_addresses.empty?
25
+ PrivateIpAddress private_ip unless private_ips.empty?
26
+ PrivateIpAddresses private_ips unless private_ip.empty?
27
+ SecondaryPrivateIpAddressCount secondary_private_ip unless secondary_private_ip.empty?
28
+ SourceDestCheck source_dest
29
+ SubnetId subnet
30
+ Tags tags
31
+ end
32
+ end
@@ -0,0 +1,17 @@
1
+ #
2
+ # EC2 Placement Group resource
3
+ # http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-placementgroup.html
4
+ #
5
+ require 'kumogata/template/helper'
6
+
7
+ name = _resource_name(args[:name], "placement group")
8
+ strategy = args[:strategy] || "cluster"
9
+
10
+ _(name) do
11
+ Type "AWS::EC2::PlacementGroup"
12
+ Properties do
13
+ Strategy strategy
14
+ end
15
+ end
16
+
17
+
@@ -0,0 +1,15 @@
1
+ #
2
+ # EC2 Security Group Egress resource
3
+ # http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-security-group-egress.html
4
+ #
5
+ require 'kumogata/template/helper'
6
+ require 'kumogata/template/ec2'
7
+
8
+ name = _resource_name(args[:name], "security group egress")
9
+ egress = _ec2_security_group_egress_rule(args)
10
+ egress["GroupId"] = _ref_string("group", args, "security group")
11
+
12
+ _(name) do
13
+ Type "AWS::EC2::SecurityGroupEgress"
14
+ Properties egress
15
+ end
@@ -0,0 +1,19 @@
1
+ #
2
+ # EC2 Security Group Ingress resource
3
+ # http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-security-group-ingress.html
4
+ #
5
+ require 'kumogata/template/helper'
6
+ require 'kumogata/template/ec2'
7
+
8
+ name = _resource_name(args[:name], "security group ingress")
9
+ ingress = _ec2_security_group_ingress_rule(args)
10
+ group_id = _ref_string("group_id", args, "security group")
11
+ ingress["GroupId"] = group_id unless group_id.empty?
12
+ group_name = _ref_string("group_name", args, "security group")
13
+ ingress["GroupName"] = group_name unless group_name.empty?
14
+ ingress["GroupName"] = _ref_name("name", args, "security group") if group_name.empty? and group_id.empty?
15
+
16
+ _(name) do
17
+ Type "AWS::EC2::SecurityGroupIngress"
18
+ Properties ingress
19
+ end
@@ -6,17 +6,17 @@ require 'kumogata/template/helper'
6
6
  require 'kumogata/template/ec2'
7
7
 
8
8
  name = _resource_name(args[:name], "security group")
9
- group_name = _real_name(args[:group_name] || "")
9
+ group_name = _real_name("group", args)
10
10
  description = args[:description] || "#{args[:name]} security group description"
11
- egress = _ec2_security_group_egresses("egress", args)
12
- ingress = _ec2_security_group_ingresses("ingress", args)
11
+ egress = _ec2_security_group_egress_rules("egress", args)
12
+ ingress = _ec2_security_group_ingress_rules("ingress", args)
13
13
  tags = _tags(args)
14
14
  vpc = _ref_string("vpc", args, "vpc")
15
15
 
16
16
  _(name) do
17
17
  Type "AWS::EC2::SecurityGroup"
18
18
  Properties do
19
- GroupName group_name unless group_name.empty?
19
+ GroupName group_name if group_name
20
20
  GroupDescription description
21
21
  SecurityGroupEgress egress unless egress.empty?
22
22
  SecurityGroupIngress ingress unless ingress.empty?
@@ -0,0 +1,17 @@
1
+ #
2
+ # EC2 Subnet Cidr Block resource
3
+ # http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-subnetcidrblock.html
4
+ #
5
+ require 'kumogata/template/helper'
6
+
7
+ name = _resource_name(args[:name], "subnet cidr block")
8
+ cidr = _ref_string("cidr", args, "cidr")
9
+ subnet = _ref_string("subnet", args, "subnet")
10
+
11
+ _(name) do
12
+ Type "AWS::EC2::SubnetCidrBlock"
13
+ Properties do
14
+ Ipv6CidrBlock cidr
15
+ SubnetId subnet
16
+ end
17
+ end
@@ -0,0 +1,17 @@
1
+ #
2
+ # EC2 VPC Cidr Block resource
3
+ # http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpccidrblock.html
4
+ #
5
+ require 'kumogata/template/helper'
6
+
7
+ name = _resource_name(args[:name], "vpc cidr block")
8
+ cidr = true
9
+ vpc = _ref_string("vpc", args, "vpc")
10
+
11
+ _(name) do
12
+ Type "AWS::EC2::VPCCidrBlock"
13
+ Properties do
14
+ AmazonProvidedIpv6CidrBlock cidr
15
+ VpcId vpc
16
+ end
17
+ end