terraforming 0.13.2 → 0.14.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ce28792dd6bf8346c71c97b88490a492f26f5b1c
4
- data.tar.gz: 5fbb2eb91615d03bc50566b28877334a8b64d36f
3
+ metadata.gz: 9c5cba83f78c4e252cd0fe5bea73a238a9e8f651
4
+ data.tar.gz: a2c3b770b7986822234f8f91914b1acb92097565
5
5
  SHA512:
6
- metadata.gz: f22672a8e344a840ca1a89d34757328fae4eec18b18050dd277625aa3659ac05001dacaffa406ab63d145a7be854ee82819836f1088baccc05574334ae367610
7
- data.tar.gz: bd9b3a407399e1d3e9d4a52611c042f445973b7feb304ccbea032d9871fc618a4f039424d976a9949f45bbf087777fa6986260af3c4b13ff9085b7a989aba66a
6
+ metadata.gz: 844e51ae9255465e773915b266f281adb71920e9a18de7d6788aeebf51d7d1609f9fd96bf2fcaa47f5f38924da28f49d35ab37e3c5a6cf4c17b940a6a73d4698
7
+ data.tar.gz: b7eb1e7832659e0f3476d00a5b90673c782101880beb0abc617991865f5f0e18e7ba948b3e00c7a7ba45f447e5edc4b0d27f09abb2d99c11135cde5305a018bb
data/.travis.yml CHANGED
@@ -3,7 +3,6 @@ rvm:
3
3
  - 2.4.1
4
4
  - 2.3.4
5
5
  - 2.2.7
6
- - 2.1.10
7
6
  env:
8
7
  global:
9
8
  - secure: n0mxwnyjuXI4mJO4mp++2TnsPJ+XgCF/J1U2L5piE5j3xMhSU+5V0JrA1uFlS0Pemb44M7BjgmF9S4G35BwyAQpctpCYhqy9tFa6+Y6nxEv5hCv2cZz7BSAZM6eb+zq20409hxTHRaQOr1DBeE4R5S2PrmOXRqvYfTRv3LNSLFk=
data/CHANGELOG.md CHANGED
@@ -1,3 +1,15 @@
1
+ # [v0.14.0](https://github.com/dtan4/terraforming/releases/tag/v0.14.0) (2017-08-05)
2
+
3
+ ## Fixed / Updated
4
+
5
+ - Drop Ruby 2.1 from CI [#351](https://github.com/dtan4/terraforming/pull/351)
6
+ - Add `icmp_code` and `icmp_type` to NACL [#350](https://github.com/dtan4/terraforming/pull/350)
7
+ - Use aws-sdk [#349](https://github.com/dtan4/terraforming/pull/349)
8
+ - Rename title of aws_route53_record with wildcard [#348](https://github.com/dtan4/terraforming/pull/348) (thanks @furhouse)
9
+ - SNS Support [#332](https://github.com/dtan4/terraforming/pull/332) (thanks @uberblah)
10
+ - `terraforming snst` (SNS Topic), `terraforming snss` (SNS Subscription)
11
+ - Fix typo in cli.rb [#329](https://github.com/dtan4/terraforming/pull/329) (thanks @slalFe)
12
+
1
13
  # [v0.13.2](https://github.com/dtan4/terraforming/releases/tag/v0.13.2) (2017-04-20)
2
14
 
3
15
  ## Fixed / Updated
data/README.md CHANGED
@@ -115,6 +115,8 @@ Commands:
115
115
  terraforming s3 # S3
116
116
  terraforming sg # Security Group
117
117
  terraforming sn # Subnet
118
+ terraforming snst # SNS Topic
119
+ terraforming snss # SNS Subscription
118
120
  terraforming sqs # SQS
119
121
  terraforming vgw # VPN Gateway
120
122
  terraforming vpc # VPC
data/lib/terraforming.rb CHANGED
@@ -49,3 +49,5 @@ require "terraforming/resource/subnet"
49
49
  require "terraforming/resource/sqs"
50
50
  require "terraforming/resource/vpc"
51
51
  require "terraforming/resource/vpn_gateway"
52
+ require "terraforming/resource/sns_topic"
53
+ require "terraforming/resource/sns_topic_subscription"
@@ -1,7 +1,7 @@
1
1
  module Terraforming
2
2
  class CLI < Thor
3
3
  class_option :merge, type: :string, desc: "tfstate file to merge"
4
- class_option :overwrite, type: :boolean, desc: "Overwrite existng tfstate"
4
+ class_option :overwrite, type: :boolean, desc: "Overwrite existing tfstate"
5
5
  class_option :tfstate, type: :boolean, desc: "Generate tfstate"
6
6
  class_option :profile, type: :string, desc: "AWS credentials profile"
7
7
  class_option :region, type: :string, desc: "AWS region"
@@ -214,6 +214,16 @@ module Terraforming
214
214
  execute(Terraforming::Resource::VPNGateway, options)
215
215
  end
216
216
 
217
+ desc "snst", "SNS Topic"
218
+ def snst
219
+ execute(Terraforming::Resource::SNSTopic, options)
220
+ end
221
+
222
+ desc "snss", "SNS Subscription"
223
+ def snss
224
+ execute(Terraforming::Resource::SNSTopicSubscription, options)
225
+ end
226
+
217
227
  private
218
228
 
219
229
  def configure_aws(options)
@@ -95,7 +95,7 @@ module Terraforming
95
95
  end
96
96
 
97
97
  def module_name_of(record, counter)
98
- normalize_module_name(name_of(record.name) + "-" + record.type + (!counter.nil? ? "-" + counter.to_s : ""))
98
+ normalize_module_name(name_of(record.name.gsub(/\\052/, 'wildcard')) + "-" + record.type + (!counter.nil? ? "-" + counter.to_s : ""))
99
99
  end
100
100
 
101
101
  def zone_id_of(hosted_zone)
@@ -0,0 +1,75 @@
1
+ module Terraforming
2
+ module Resource
3
+ class SNSTopic
4
+ include Terraforming::Util
5
+
6
+ def self.tf(client: Aws::SNS::Client.new)
7
+ self.new(client).tf
8
+ end
9
+
10
+ def self.tfstate(client: Aws::SNS::Client.new)
11
+ self.new(client).tfstate
12
+ end
13
+
14
+ def initialize(client)
15
+ @client = client
16
+ end
17
+
18
+ def tf
19
+ apply_template(@client, "tf/sns_topic")
20
+ end
21
+
22
+ def tfstate
23
+ topics.inject({}) do |resources, topic|
24
+ attributes = {
25
+ "name" => module_name_of(topic),
26
+ "id" => topic["TopicArn"],
27
+ "arn" => topic["TopicArn"],
28
+ "display_name" => topic["DisplayName"],
29
+ "policy" => topic.key?("Policy") ? topic["Policy"] : "",
30
+ "delivery_policy" => topic.key?("DeliveryPolicy") ? topic["DeliveryPolicy"] : ""
31
+ }
32
+ resources["aws_sns_topic.#{module_name_of(topic)}"] = {
33
+ "type" => "aws_sns_topic",
34
+ "primary" => {
35
+ "id" => topic["TopicArn"],
36
+ "attributes" => attributes
37
+ }
38
+ }
39
+
40
+ resources
41
+ end
42
+ end
43
+
44
+ private
45
+
46
+ def topics
47
+ topic_arns.map do |topic_arn|
48
+ attributes = @client.get_topic_attributes({
49
+ topic_arn: topic_arn,
50
+ }).attributes
51
+ attributes["TopicArn"] = topic_arn
52
+ attributes
53
+ end
54
+ end
55
+
56
+ def topic_arns
57
+ token = ""
58
+ arns = []
59
+
60
+ loop do
61
+ resp = @client.list_topics(next_token: token)
62
+ arns += resp.topics.map(&:topic_arn).flatten
63
+ token = resp.next_token
64
+ break if token.nil?
65
+ end
66
+
67
+ arns
68
+ end
69
+
70
+ def module_name_of(topic)
71
+ normalize_module_name(topic["TopicArn"].split(":").last)
72
+ end
73
+ end
74
+ end
75
+ end
@@ -0,0 +1,83 @@
1
+ module Terraforming
2
+ module Resource
3
+ class SNSTopicSubscription
4
+ include Terraforming::Util
5
+
6
+ def self.tf(client: Aws::SNS::Client.new)
7
+ self.new(client).tf
8
+ end
9
+
10
+ def self.tfstate(client: Aws::SNS::Client.new)
11
+ self.new(client).tfstate
12
+ end
13
+
14
+ def initialize(client)
15
+ @client = client
16
+ end
17
+
18
+ def tf
19
+ apply_template(@client, "tf/sns_topic_subscription")
20
+ end
21
+
22
+ def tfstate
23
+ subscriptions.reject { |x| x["Protocol"].include?("email") }
24
+ .inject({}) do |resources, subscription|
25
+ attributes = {
26
+ "id" => subscription["SubscriptionArn"],
27
+ "topic_arn" => subscription["TopicArn"],
28
+ "protocol" => subscription["Protocol"],
29
+ "endpoint" => subscription["Endpoint"],
30
+ "raw_message_delivery" =>
31
+ subscription.key?("RawMessageDelivery") ? subscription["RawMessageDelivery"] : "false",
32
+ "confirmation_timeout_in_minutes" =>
33
+ subscription.key?("ConfirmationTimeoutInMinutes") ? subscription["ConfirmationTimeoutInMinutes"] : "1",
34
+ "endpoint_auto_confirms" =>
35
+ subscription.key?("EndpointAutoConfirms") ? subscription["EndpointAutoConfirms"] : "false"
36
+ }
37
+ resources["aws_sns_topic_subscription.#{module_name_of(subscription)}"] = {
38
+ "type" => "aws_sns_topic_subscription",
39
+ "primary" => {
40
+ "id" => subscription["SubscriptionArn"],
41
+ "attributes" => attributes
42
+ }
43
+ }
44
+
45
+ resources
46
+ end
47
+ end
48
+
49
+ private
50
+
51
+ def subscriptions
52
+ subscription_arns.map do |subscription_arn|
53
+ # check explicitly for an issue with some subscriptions that returns ARN=PendingConfirmation
54
+ next if subscription_arn == "PendingConfirmation"
55
+
56
+ attributes = @client.get_subscription_attributes({
57
+ subscription_arn: subscription_arn,
58
+ }).attributes
59
+ attributes["SubscriptionArn"] = subscription_arn
60
+ attributes
61
+ end.compact
62
+ end
63
+
64
+ def subscription_arns
65
+ token = ""
66
+ arns = []
67
+
68
+ loop do
69
+ resp = @client.list_subscriptions(next_token: token)
70
+ arns += resp.subscriptions.map(&:subscription_arn).flatten
71
+ token = resp.next_token
72
+ break if token.nil?
73
+ end
74
+
75
+ arns
76
+ end
77
+
78
+ def module_name_of(subscription)
79
+ normalize_module_name(subscription["SubscriptionArn"].split(":").last)
80
+ end
81
+ end
82
+ end
83
+ end
@@ -11,6 +11,10 @@ resource "aws_network_acl" "<%= module_name_of(network_acl) %>" {
11
11
  action = "<%= ingress.rule_action %>"
12
12
  protocol = "<%= ingress.protocol %>"
13
13
  cidr_block = "<%= ingress.cidr_block %>"
14
+ <%- if ingress.icmp_type_code -%>
15
+ icmp_code = "<%= ingress.icmp_type_code.code %>"
16
+ icmp_type = "<%= ingress.icmp_type_code.type %>"
17
+ <%- end -%>
14
18
  }
15
19
 
16
20
  <% end -%>
@@ -22,6 +26,10 @@ resource "aws_network_acl" "<%= module_name_of(network_acl) %>" {
22
26
  action = "<%= egress.rule_action %>"
23
27
  protocol = "<%= egress.protocol %>"
24
28
  cidr_block = "<%= egress.cidr_block %>"
29
+ <%- if egress.icmp_type_code -%>
30
+ icmp_code = "<%= egress.icmp_type_code.code %>"
31
+ icmp_type = "<%= egress.icmp_type_code.type %>"
32
+ <%- end -%>
25
33
  }
26
34
 
27
35
  <% end -%>
@@ -0,0 +1,17 @@
1
+ <% topics.each do |topic| -%>
2
+ resource "aws_sns_topic" "<%= module_name_of(topic) %>" {
3
+ name = "<%= module_name_of(topic) %>"
4
+ display_name = "<%= topic["DisplayName"] %>"
5
+ <% if topic.key? "Policy" -%>
6
+ policy = <<POLICY
7
+ <%= prettify_policy(topic["Policy"], unescape: true) %>
8
+ POLICY
9
+ <% end -%>
10
+ <% if topic.key? "DeliveryPolicy" -%>
11
+ delivery_policy = <<POLICY
12
+ <%= prettify_policy(topic["DeliveryPolicy"], unescape: true) %>
13
+ POLICY
14
+ <% end -%>
15
+ }
16
+
17
+ <% end -%>
@@ -0,0 +1,23 @@
1
+ <% subscriptions.each do |subscription| -%>
2
+ <% if subscription["Protocol"].include?("email") -%>
3
+ /*
4
+ <% end -%>
5
+ resource "aws_sns_topic_subscription" "<%= module_name_of(subscription) %>" {
6
+ topic_arn = "<%= subscription["TopicArn"] %>"
7
+ protocol = "<%= subscription["Protocol"] %>"
8
+ endpoint = "<%= subscription["Endpoint"] %>"
9
+ <% if subscription.key? "RawMessageDelivery" -%>
10
+ raw_message_delivery = "<%= subscription["RawMessageDelivery"] %>"
11
+ <% end -%>
12
+ <% if subscription.key? "ConfirmationTimeoutInMinutes" %>
13
+ confirmation_timeout_in_minutes = "<%= subscription["ConfirmationTimeoutInMinutes"] %>"
14
+ <% end -%>
15
+ <% if subscription.key? "EndpointAutoConfirms" %>
16
+ endpoint_auto_confirms = "<%= subscription["EndpointAutoConfirms"] %>"
17
+ <% end -%>
18
+ }
19
+ <% if subscription["Protocol"].include?("email") -%>
20
+ */
21
+ <% end -%>
22
+
23
+ <% end -%>
@@ -1,3 +1,3 @@
1
1
  module Terraforming
2
- VERSION = "0.13.2"
2
+ VERSION = "0.14.0"
3
3
  end
data/terraforming.gemspec CHANGED
@@ -19,7 +19,7 @@ Gem::Specification.new do |spec|
19
19
  spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
20
20
  spec.require_paths = ["lib"]
21
21
 
22
- spec.add_dependency "aws-sdk", "~> 2.9.6"
22
+ spec.add_dependency "aws-sdk", "~> 2.10.17"
23
23
  spec.add_dependency "multi_json", "~> 1.12.1"
24
24
  spec.add_dependency "thor"
25
25
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: terraforming
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.13.2
4
+ version: 0.14.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Daisuke Fujita
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-04-20 00:00:00.000000000 Z
11
+ date: 2017-08-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: aws-sdk
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 2.9.6
19
+ version: 2.10.17
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 2.9.6
26
+ version: 2.10.17
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: multi_json
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -183,6 +183,8 @@ files:
183
183
  - lib/terraforming/resource/route_table_association.rb
184
184
  - lib/terraforming/resource/s3.rb
185
185
  - lib/terraforming/resource/security_group.rb
186
+ - lib/terraforming/resource/sns_topic.rb
187
+ - lib/terraforming/resource/sns_topic_subscription.rb
186
188
  - lib/terraforming/resource/sqs.rb
187
189
  - lib/terraforming/resource/subnet.rb
188
190
  - lib/terraforming/resource/vpc.rb
@@ -224,6 +226,8 @@ files:
224
226
  - lib/terraforming/template/tf/route_table_association.erb
225
227
  - lib/terraforming/template/tf/s3.erb
226
228
  - lib/terraforming/template/tf/security_group.erb
229
+ - lib/terraforming/template/tf/sns_topic.erb
230
+ - lib/terraforming/template/tf/sns_topic_subscription.erb
227
231
  - lib/terraforming/template/tf/sqs.erb
228
232
  - lib/terraforming/template/tf/subnet.erb
229
233
  - lib/terraforming/template/tf/vpc.erb