terraforming 0.8.0 → 0.9.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 244d11650e141679a1bc58831f9e1d54b5f15cba
4
- data.tar.gz: 7fe2d54b847abc14c4069ae8186bb3378cbe635e
3
+ metadata.gz: e25c86438b0694ab932b97b00822656e83141f71
4
+ data.tar.gz: 861aa06a491303fa7cdf1c58a6d85af7190e232d
5
5
  SHA512:
6
- metadata.gz: 111cd0aa7c13dd04f64afcf8562756a88bdbaaf6df8698bbbb390b65504f3d7196feeeab90692a41254599f62bbff86db16e2c68aeff3200afa3858b32936ec6
7
- data.tar.gz: 9d4870b66f7e9fa38c7f05179be35db7cb0fec3a3e08533519e0128d1e9cff8e637890b15a33ff4c7d018eb5a65147c5e3b18bb60f679bc03bc7449ebc986884
6
+ metadata.gz: 71bdf8cf49d0a7ba4920c2c798671a81e72c572aae3226ac25d4f93596a14e9b1919f63607f79e0f7595b8bbb2f5111dd61a4d67c7443d891e72e5de151180f9
7
+ data.tar.gz: 323795cc9c10264244424123ed34df95e11b3a75384d0067588a8aa759c20c2a77c14aed9572e989ac49dce7701500cf39b15b99aac7d3ef46f44e5a246b744b
data/CHANGELOG.md CHANGED
@@ -1,3 +1,14 @@
1
+ # [v0.9.0](https://github.com/dtan4/terraforming/releases/tag/v0.8.0) (2016-06-12)
2
+
3
+ ## Resource
4
+
5
+ - AWS IAM Policy Attachment #225
6
+
7
+ ## Fixed / Updated
8
+
9
+ - Add `access_logs` attribute to ELB #223
10
+ - Add `internal` attribute to ELB #221 (thanks @kbruner)
11
+
1
12
  # [v0.8.0](https://github.com/dtan4/terraforming/releases/tag/v0.8.0) (2016-05-29)
2
13
 
3
14
  ## Notice
data/README.md CHANGED
@@ -79,11 +79,13 @@ Commands:
79
79
  terraforming ecsn # ElastiCache Subnet Group
80
80
  terraforming eip # EIP
81
81
  terraforming elb # ELB
82
+ terraforming help [COMMAND] # Describe available commands or one specifi...
82
83
  terraforming iamg # IAM Group
83
84
  terraforming iamgm # IAM Group Membership
84
85
  terraforming iamgp # IAM Group Policy
85
86
  terraforming iamip # IAM Instance Profile
86
87
  terraforming iamp # IAM Policy
88
+ terraforming iamp # IAM Policy Attachment
87
89
  terraforming iamr # IAM Role
88
90
  terraforming iamrp # IAM Role Policy
89
91
  terraforming iamu # IAM User
@@ -104,6 +106,13 @@ Commands:
104
106
  terraforming sqs # SQS
105
107
  terraforming vgw # VPN Gateway
106
108
  terraforming vpc # VPC
109
+
110
+ Options:
111
+ [--merge=MERGE] # tfstate file to merge
112
+ [--overwrite], [--no-overwrite] # Overwrite existng tfstate
113
+ [--tfstate], [--no-tfstate] # Generate tfstate
114
+ [--profile=PROFILE] # AWS credentials profile
115
+ [--region=REGION] # AWS region
107
116
  ```
108
117
 
109
118
  ### Export tf
data/lib/terraforming.rb CHANGED
@@ -25,6 +25,7 @@ require "terraforming/resource/iam_group_membership"
25
25
  require "terraforming/resource/iam_group_policy"
26
26
  require "terraforming/resource/iam_instance_profile"
27
27
  require "terraforming/resource/iam_policy"
28
+ require "terraforming/resource/iam_policy_attachment"
28
29
  require "terraforming/resource/iam_role"
29
30
  require "terraforming/resource/iam_role_policy"
30
31
  require "terraforming/resource/iam_user"
@@ -76,6 +76,11 @@ module Terraforming
76
76
  execute(Terraforming::Resource::IAMPolicy, options)
77
77
  end
78
78
 
79
+ desc "iamp", "IAM Policy Attachment"
80
+ def iampa
81
+ execute(Terraforming::Resource::IAMPolicyAttachment, options)
82
+ end
83
+
79
84
  desc "iamr", "IAM Role"
80
85
  def iamr
81
86
  execute(Terraforming::Resource::IAMRole, options)
@@ -31,10 +31,16 @@ module Terraforming
31
31
  "id" => load_balancer.load_balancer_name,
32
32
  "idle_timeout" => load_balancer_attributes.connection_settings.idle_timeout.to_s,
33
33
  "instances.#" => load_balancer.instances.length.to_s,
34
+ "internal" => internal?(load_balancer).to_s,
34
35
  "name" => load_balancer.load_balancer_name,
35
36
  "source_security_group" => load_balancer.source_security_group.group_name,
36
37
  }
37
38
 
39
+ if load_balancer_attributes.access_log.enabled
40
+
41
+ end
42
+
43
+ attributes.merge!(access_logs_attributes_of(load_balancer_attributes))
38
44
  attributes.merge!(healthcheck_attributes_of(load_balancer))
39
45
  attributes.merge!(listeners_attributes_of(load_balancer))
40
46
  attributes.merge!(sg_attributes_of(load_balancer))
@@ -55,6 +61,23 @@ module Terraforming
55
61
  end
56
62
  end
57
63
 
64
+ def access_logs_attributes_of(load_balancer_attributes)
65
+ access_log = load_balancer_attributes.access_log
66
+
67
+ if access_log.enabled
68
+ {
69
+ "access_logs.#" => "1",
70
+ "access_logs.0.bucket" => access_log.s3_bucket_name,
71
+ "access_logs.0.bucket_prefix" => access_log.s3_bucket_prefix,
72
+ "access_logs.0.interval" => access_log.emit_interval.to_s,
73
+ }
74
+ else
75
+ {
76
+ "access_logs.#" => "0",
77
+ }
78
+ end
79
+ end
80
+
58
81
  def healthcheck_attributes_of(elb)
59
82
  hashcode = healthcheck_hashcode_of(elb.health_check)
60
83
  attributes = {
@@ -172,6 +195,10 @@ module Terraforming
172
195
  def vpc_elb?(load_balancer)
173
196
  load_balancer.vpc_id != ""
174
197
  end
198
+
199
+ def internal?(load_balancer)
200
+ load_balancer.scheme == "internal"
201
+ end
175
202
  end
176
203
  end
177
204
  end
@@ -0,0 +1,69 @@
1
+ module Terraforming
2
+ module Resource
3
+ class IAMPolicyAttachment
4
+ include Terraforming::Util
5
+
6
+ def self.tf(client: Aws::IAM::Client.new)
7
+ self.new(client).tf
8
+ end
9
+
10
+ def self.tfstate(client: Aws::IAM::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/iam_policy_attachment")
20
+ end
21
+
22
+ def tfstate
23
+ iam_policy_attachments.inject({}) do |resources, policy_attachment|
24
+ attributes = {
25
+ "id" => policy_attachment[:name],
26
+ "name" => policy_attachment[:name],
27
+ "policy_arn" => policy_attachment[:arn],
28
+ "groups.#" => policy_attachment[:entities].policy_groups.length.to_s,
29
+ "users.#" => policy_attachment[:entities].policy_users.length.to_s,
30
+ "roles.#" => policy_attachment[:entities].policy_roles.length.to_s,
31
+ }
32
+ resources["aws_iam_policy_attachment.#{policy_attachment[:name]}"] = {
33
+ "type" => "aws_iam_policy_attachment",
34
+ "primary" => {
35
+ "id" => policy_attachment[:name],
36
+ "attributes" => attributes
37
+ }
38
+ }
39
+
40
+ resources
41
+ end
42
+ end
43
+
44
+ private
45
+
46
+ def attachment_name_from(policy)
47
+ "#{policy.policy_name}-policy-attachment"
48
+ end
49
+
50
+ def entities_for_policy(policy)
51
+ @client.list_entities_for_policy(policy_arn: policy.arn)
52
+ end
53
+
54
+ def iam_policies
55
+ @client.list_policies(scope: "Local").policies
56
+ end
57
+
58
+ def iam_policy_attachments
59
+ iam_policies.map do |policy|
60
+ {
61
+ arn: policy.arn,
62
+ entities: entities_for_policy(policy),
63
+ name: attachment_name_from(policy),
64
+ }
65
+ end
66
+ end
67
+ end
68
+ end
69
+ end
@@ -13,7 +13,16 @@ resource "aws_elb" "<%= module_name_of(load_balancer) %>" {
13
13
  idle_timeout = <%= load_balancer_attributes.connection_settings.idle_timeout %>
14
14
  connection_draining = <%= load_balancer_attributes.connection_draining.enabled %>
15
15
  connection_draining_timeout = <%= load_balancer_attributes.connection_draining.timeout %>
16
+ internal = <%= internal?(load_balancer).to_s %>
16
17
 
18
+ <%- if load_balancer_attributes.access_log.enabled -%>
19
+ access_logs {
20
+ bucket = "<%= load_balancer_attributes.access_log.s3_bucket_name %>"
21
+ bucket_prefix = "<%= load_balancer_attributes.access_log.s3_bucket_prefix %>"
22
+ interval = <%= load_balancer_attributes.access_log.emit_interval %>
23
+ }
24
+
25
+ <%- end -%>
17
26
  <% load_balancer.listener_descriptions.map { |ld| ld.listener }.map do |listener| -%>
18
27
  listener {
19
28
  instance_port = <%= listener.instance_port %>
@@ -0,0 +1,10 @@
1
+ <% iam_policy_attachments.each do |policy_attachment| -%>
2
+ resource "aws_iam_policy_attachment" "<%= policy_attachment[:name] %>" {
3
+ name = "<%= policy_attachment[:name] %>"
4
+ policy_arn = "<%= policy_attachment[:arn] %>"
5
+ groups = <%= policy_attachment[:entities].policy_groups.map(&:group_name).inspect %>
6
+ users = <%= policy_attachment[:entities].policy_users.map(&:user_name).inspect %>
7
+ roles = <%= policy_attachment[:entities].policy_roles.map(&:role_name).inspect %>
8
+ }
9
+
10
+ <% end -%>
@@ -1,3 +1,3 @@
1
1
  module Terraforming
2
- VERSION = "0.8.0"
2
+ VERSION = "0.9.0"
3
3
  end
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.8.0
4
+ version: 0.9.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: 2016-05-29 00:00:00.000000000 Z
11
+ date: 2016-06-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: aws-sdk
@@ -172,6 +172,7 @@ files:
172
172
  - lib/terraforming/resource/iam_group_policy.rb
173
173
  - lib/terraforming/resource/iam_instance_profile.rb
174
174
  - lib/terraforming/resource/iam_policy.rb
175
+ - lib/terraforming/resource/iam_policy_attachment.rb
175
176
  - lib/terraforming/resource/iam_role.rb
176
177
  - lib/terraforming/resource/iam_role_policy.rb
177
178
  - lib/terraforming/resource/iam_user.rb
@@ -206,6 +207,7 @@ files:
206
207
  - lib/terraforming/template/tf/iam_group_policy.erb
207
208
  - lib/terraforming/template/tf/iam_instance_profile.erb
208
209
  - lib/terraforming/template/tf/iam_policy.erb
210
+ - lib/terraforming/template/tf/iam_policy_attachment.erb
209
211
  - lib/terraforming/template/tf/iam_role.erb
210
212
  - lib/terraforming/template/tf/iam_role_policy.erb
211
213
  - lib/terraforming/template/tf/iam_user.erb