terraforming 0.11.0 → 0.12.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 +4 -4
- data/CHANGELOG.md +11 -0
- data/README.md +2 -0
- data/lib/terraforming.rb +2 -0
- data/lib/terraforming/cli.rb +10 -0
- data/lib/terraforming/resource/alb.rb +98 -0
- data/lib/terraforming/resource/ec2.rb +5 -1
- data/lib/terraforming/resource/efs_file_system.rb +56 -0
- data/lib/terraforming/template/tf/alb.erb +28 -0
- data/lib/terraforming/template/tf/ec2.erb +1 -1
- data/lib/terraforming/template/tf/elastic_filesystem.erb +18 -0
- data/lib/terraforming/version.rb +1 -1
- metadata +7 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0207edd5bbc29b4447cf4a914e4a015baff47d71
|
4
|
+
data.tar.gz: dfccf028d7c75bf7a9985c918381e35844def811
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 61254cf936a3ab76a5ea25b3c3ce53bc9384d6ba79322932fb6340d06884ad9c2824f9d654ed4370b72da7c0f4131d6c5aa97baf7a390a748c8dbc72285906c0
|
7
|
+
data.tar.gz: 59059b7a2d224657436234c2ac2c77e685346e288f81bb2427e11b071f353f2c1e828dbb20f350fbecb602631061e7efdfc63c6287287405147022956a813435
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,14 @@
|
|
1
|
+
# [v0.12.0](https://github.com/dtan4/terraforming/releases/tag/v0.11.0) (2016-12-20)
|
2
|
+
|
3
|
+
## Resource
|
4
|
+
|
5
|
+
- AWS ALB [#291](https://github.com/dtan4/terraforming/pull/291)
|
6
|
+
- AWS EFS File System [#283](https://github.com/dtan4/terraforming/pull/283) (thanks @notjames)
|
7
|
+
|
8
|
+
## Fixed / Updated
|
9
|
+
|
10
|
+
- Fix associate_public_ip_address attr for EC2 [#287](https://github.com/dtan4/terraforming/pull/287) (thanks @diwaniuk)
|
11
|
+
|
1
12
|
# [v0.11.0](https://github.com/dtan4/terraforming/releases/tag/v0.11.0) (2016-11-14)
|
2
13
|
|
3
14
|
## Resource
|
data/README.md
CHANGED
@@ -76,6 +76,7 @@ PS C:\> terraforming ec2 --use-bundled-cert
|
|
76
76
|
```bash
|
77
77
|
$ terraforming
|
78
78
|
Commands:
|
79
|
+
terraforming alb # ALB
|
79
80
|
terraforming asg # AutoScaling Group
|
80
81
|
terraforming cwa # CloudWatch Alarm
|
81
82
|
terraforming dbpg # Database Parameter Group
|
@@ -84,6 +85,7 @@ Commands:
|
|
84
85
|
terraforming ec2 # EC2
|
85
86
|
terraforming ecc # ElastiCache Cluster
|
86
87
|
terraforming ecsn # ElastiCache Subnet Group
|
88
|
+
terraforming efs # EFS File System
|
87
89
|
terraforming eip # EIP
|
88
90
|
terraforming elb # ELB
|
89
91
|
terraforming help [COMMAND] # Describe available commands or one specific command
|
data/lib/terraforming.rb
CHANGED
@@ -8,6 +8,7 @@ require "terraforming/util"
|
|
8
8
|
require "terraforming/version"
|
9
9
|
|
10
10
|
require "terraforming/cli"
|
11
|
+
require "terraforming/resource/alb"
|
11
12
|
require "terraforming/resource/auto_scaling_group"
|
12
13
|
require "terraforming/resource/cloud_watch_alarm"
|
13
14
|
require "terraforming/resource/db_parameter_group"
|
@@ -17,6 +18,7 @@ require "terraforming/resource/ec2"
|
|
17
18
|
require "terraforming/resource/eip"
|
18
19
|
require "terraforming/resource/elasti_cache_cluster"
|
19
20
|
require "terraforming/resource/elasti_cache_subnet_group"
|
21
|
+
require "terraforming/resource/efs_file_system"
|
20
22
|
require "terraforming/resource/elb"
|
21
23
|
require "terraforming/resource/iam_group"
|
22
24
|
require "terraforming/resource/iam_group_membership"
|
data/lib/terraforming/cli.rb
CHANGED
@@ -9,6 +9,11 @@ module Terraforming
|
|
9
9
|
type: :boolean,
|
10
10
|
desc: "Use the bundled CA certificate from AWS SDK"
|
11
11
|
|
12
|
+
desc "alb", "ALB"
|
13
|
+
def alb
|
14
|
+
execute(Terraforming::Resource::ALB, options)
|
15
|
+
end
|
16
|
+
|
12
17
|
desc "asg", "AutoScaling Group"
|
13
18
|
def asg
|
14
19
|
execute(Terraforming::Resource::AutoScalingGroup, options)
|
@@ -54,6 +59,11 @@ module Terraforming
|
|
54
59
|
execute(Terraforming::Resource::EIP, options)
|
55
60
|
end
|
56
61
|
|
62
|
+
desc "efs", "EFS File System"
|
63
|
+
def efs
|
64
|
+
execute(Terraforming::Resource::EFSFileSystem, options)
|
65
|
+
end
|
66
|
+
|
57
67
|
desc "elb", "ELB"
|
58
68
|
def elb
|
59
69
|
execute(Terraforming::Resource::ELB, options)
|
@@ -0,0 +1,98 @@
|
|
1
|
+
module Terraforming
|
2
|
+
module Resource
|
3
|
+
class ALB
|
4
|
+
include Terraforming::Util
|
5
|
+
|
6
|
+
def self.tf(client: Aws::ElasticLoadBalancingV2::Client.new)
|
7
|
+
self.new(client).tf
|
8
|
+
end
|
9
|
+
|
10
|
+
def self.tfstate(client: Aws::ElasticLoadBalancingV2::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/alb")
|
20
|
+
end
|
21
|
+
|
22
|
+
def tfstate
|
23
|
+
load_balancers.inject({}) do |resources, load_balancer|
|
24
|
+
load_balancer_attributes = load_balancer_attributes_of(load_balancer)
|
25
|
+
attributes = {
|
26
|
+
"dns_name" => load_balancer.dns_name,
|
27
|
+
"enable_deletion_protection" => load_balancer_attributes["deletion_protection.enabled"].to_s,
|
28
|
+
"id" => load_balancer.load_balancer_arn,
|
29
|
+
"idle_timeout" => load_balancer_attributes["idle_timeout.timeout_seconds"].to_s,
|
30
|
+
"internal" => internal?(load_balancer).to_s,
|
31
|
+
"name" => load_balancer.load_balancer_name,
|
32
|
+
"security_groups.#" => load_balancer.security_groups.length.to_s,
|
33
|
+
"subnets.#" => load_balancer.availability_zones.length.to_s,
|
34
|
+
"zone_id" => load_balancer.canonical_hosted_zone_id,
|
35
|
+
}
|
36
|
+
|
37
|
+
attributes.merge!(access_logs_attributes_of(load_balancer_attributes))
|
38
|
+
attributes.merge!(tag_attributes_of(load_balancer))
|
39
|
+
|
40
|
+
resources["aws_alb.#{module_name_of(load_balancer)}"] = {
|
41
|
+
"type" => "aws_alb",
|
42
|
+
"primary" => {
|
43
|
+
"id" => load_balancer.load_balancer_arn,
|
44
|
+
"attributes" => attributes
|
45
|
+
}
|
46
|
+
}
|
47
|
+
|
48
|
+
resources
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
private
|
53
|
+
|
54
|
+
def access_logs_attributes_of(load_balancer_attributes)
|
55
|
+
{
|
56
|
+
"access_logs.#" => "1",
|
57
|
+
"access_logs.0.bucket" => load_balancer_attributes["access_logs.s3.bucket"],
|
58
|
+
"access_logs.0.enabled" => load_balancer_attributes["access_logs.s3.enabled"].to_s,
|
59
|
+
"access_logs.0.prefix" => load_balancer_attributes["access_logs.s3.prefix"],
|
60
|
+
}
|
61
|
+
end
|
62
|
+
|
63
|
+
def internal?(load_balancer)
|
64
|
+
load_balancer.scheme == "internal"
|
65
|
+
end
|
66
|
+
|
67
|
+
def load_balancers
|
68
|
+
@client.describe_load_balancers.load_balancers
|
69
|
+
end
|
70
|
+
|
71
|
+
def load_balancer_attributes_of(load_balancer)
|
72
|
+
@client.describe_load_balancer_attributes(load_balancer_arn: load_balancer.load_balancer_arn).attributes.inject({}) do |result, attribute|
|
73
|
+
result[attribute.key] = attribute.value
|
74
|
+
result
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
def module_name_of(load_balancer)
|
79
|
+
normalize_module_name(load_balancer.load_balancer_name)
|
80
|
+
end
|
81
|
+
|
82
|
+
def tag_attributes_of(load_balancer)
|
83
|
+
tags = tags_of(load_balancer)
|
84
|
+
attributes = { "tags.%" => tags.length.to_s }
|
85
|
+
|
86
|
+
tags.each do |tag|
|
87
|
+
attributes["tags.#{tag.key}"] = tag.value
|
88
|
+
end
|
89
|
+
|
90
|
+
attributes
|
91
|
+
end
|
92
|
+
|
93
|
+
def tags_of(load_balancer)
|
94
|
+
@client.describe_tags(resource_arns: [load_balancer.load_balancer_arn]).tag_descriptions.first.tags
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
@@ -26,7 +26,7 @@ module Terraforming
|
|
26
26
|
|
27
27
|
attributes = {
|
28
28
|
"ami" => instance.image_id,
|
29
|
-
"associate_public_ip_address" =>
|
29
|
+
"associate_public_ip_address" => associate_public_ip?(instance).to_s,
|
30
30
|
"availability_zone" => instance.placement.availability_zone,
|
31
31
|
"ebs_block_device.#" => ebs_block_devices_in(block_devices, instance).length.to_s,
|
32
32
|
"ebs_optimized" => instance.ebs_optimized.to_s,
|
@@ -96,6 +96,10 @@ module Terraforming
|
|
96
96
|
(instance.subnet_id && instance.subnet_id != "" && instance.security_groups.empty?)
|
97
97
|
end
|
98
98
|
|
99
|
+
def associate_public_ip?(instance)
|
100
|
+
!instance.public_ip_address.to_s.empty?
|
101
|
+
end
|
102
|
+
|
99
103
|
def monitoring_state(instance)
|
100
104
|
%w(enabled pending).include?(instance.monitoring.state)
|
101
105
|
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
module Terraforming
|
2
|
+
module Resource
|
3
|
+
class EFSFileSystem
|
4
|
+
include Terraforming::Util
|
5
|
+
|
6
|
+
def self.tf(client: Aws::EFS::Client.new)
|
7
|
+
self.new(client).tf
|
8
|
+
end
|
9
|
+
|
10
|
+
def self.tfstate(client: Aws::EFS::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/elastic_filesystem")
|
20
|
+
end
|
21
|
+
|
22
|
+
def tfstate
|
23
|
+
file_systems.inject({}) do |resources, efs|
|
24
|
+
attributes = {
|
25
|
+
"creation_token" => efs.creation_token,
|
26
|
+
"id" => efs.file_system_id,
|
27
|
+
"performance_mode" => efs.performance_mode,
|
28
|
+
"tags.%" => "1",
|
29
|
+
"tags.Name" => efs.name,
|
30
|
+
}
|
31
|
+
|
32
|
+
resources["aws_efs_file_system.#{efs.file_system_id}"] = {
|
33
|
+
"type" => "aws_efs_file_system",
|
34
|
+
"depends_on" => [],
|
35
|
+
"primary" => {
|
36
|
+
"id" => efs.file_system_id,
|
37
|
+
"attributes" => attributes,
|
38
|
+
"meta" => {},
|
39
|
+
"tainted" => false,
|
40
|
+
},
|
41
|
+
"deposed" => [],
|
42
|
+
"provider" => "aws",
|
43
|
+
}
|
44
|
+
|
45
|
+
resources
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
private
|
50
|
+
|
51
|
+
def file_systems
|
52
|
+
@client.describe_file_systems.data.file_systems.flatten
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
<% load_balancers.each do |load_balancer| -%>
|
2
|
+
<%- load_balancer_attributes = load_balancer_attributes_of(load_balancer) -%>
|
3
|
+
<%- tags = tags_of(load_balancer) -%>
|
4
|
+
resource "aws_alb" "<%= module_name_of(load_balancer) %>" {
|
5
|
+
idle_timeout = <%= load_balancer_attributes["idle_timeout.timeout_seconds"] %>
|
6
|
+
internal = <%= internal?(load_balancer).to_s %>
|
7
|
+
name = "<%= load_balancer.load_balancer_name %>"
|
8
|
+
security_groups = <%= load_balancer.security_groups.inspect %>
|
9
|
+
subnets = <%= load_balancer.availability_zones.map { |az| az.subnet_id }.inspect %>
|
10
|
+
|
11
|
+
enable_deletion_protection = <%= load_balancer_attributes["deletion_protection.enabled"].to_s %>
|
12
|
+
|
13
|
+
<%- if load_balancer_attributes["access_logs.s3.enabled"] == "true" -%>
|
14
|
+
access_logs {
|
15
|
+
bucket = "<%= load_balancer_attributes["access_logs.s3.bucket"] %>"
|
16
|
+
enabled = <%= load_balancer_attributes["access_logs.s3.enabled"] %>
|
17
|
+
prefix = "<%= load_balancer_attributes["access_logs.s3.prefix"] %>"
|
18
|
+
}
|
19
|
+
|
20
|
+
<%- end -%>
|
21
|
+
tags {
|
22
|
+
<% tags.each do |tag| -%>
|
23
|
+
"<%= tag.key %>" = "<%= tag.value %>"
|
24
|
+
<% end -%>
|
25
|
+
}
|
26
|
+
}
|
27
|
+
|
28
|
+
<% end -%>
|
@@ -15,7 +15,7 @@ resource "aws_instance" "<%= module_name_of(instance) %>" {
|
|
15
15
|
<%- else -%>
|
16
16
|
security_groups = <%= instance.security_groups.map { |sg| sg.group_name }.inspect %>
|
17
17
|
<%- end -%>
|
18
|
-
associate_public_ip_address =
|
18
|
+
associate_public_ip_address = <%= associate_public_ip?(instance) %>
|
19
19
|
private_ip = "<%= instance.private_ip_address %>"
|
20
20
|
<%- if instance.source_dest_check -%>
|
21
21
|
source_dest_check = <%= instance.source_dest_check %>
|
@@ -0,0 +1,18 @@
|
|
1
|
+
<% file_systems.each_with_index do |efs, idx| -%>
|
2
|
+
resource "aws_efs_file_system" "<%= efs.file_system_id %>" {
|
3
|
+
<% if efs.creation_token -%>
|
4
|
+
creation_token = "<%= efs.creation_token %>"
|
5
|
+
<% end -%>
|
6
|
+
<% if efs.file_system_id -%>
|
7
|
+
file_system_id = "<%= efs.file_system_id %>"
|
8
|
+
<% end -%>
|
9
|
+
<% if efs.performance_mode -%>
|
10
|
+
performance_mode = "<%= efs.performance_mode %>"
|
11
|
+
<% end -%>
|
12
|
+
<% if efs.name -%>
|
13
|
+
tags {
|
14
|
+
Name = "<%= efs.name %>"
|
15
|
+
}
|
16
|
+
<% end -%>
|
17
|
+
}
|
18
|
+
<% end -%>
|
data/lib/terraforming/version.rb
CHANGED
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.
|
4
|
+
version: 0.12.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-
|
11
|
+
date: 2016-12-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: aws-sdk
|
@@ -146,12 +146,14 @@ files:
|
|
146
146
|
- contrib/zsh-completion/_terraforming
|
147
147
|
- lib/terraforming.rb
|
148
148
|
- lib/terraforming/cli.rb
|
149
|
+
- lib/terraforming/resource/alb.rb
|
149
150
|
- lib/terraforming/resource/auto_scaling_group.rb
|
150
151
|
- lib/terraforming/resource/cloud_watch_alarm.rb
|
151
152
|
- lib/terraforming/resource/db_parameter_group.rb
|
152
153
|
- lib/terraforming/resource/db_security_group.rb
|
153
154
|
- lib/terraforming/resource/db_subnet_group.rb
|
154
155
|
- lib/terraforming/resource/ec2.rb
|
156
|
+
- lib/terraforming/resource/efs_file_system.rb
|
155
157
|
- lib/terraforming/resource/eip.rb
|
156
158
|
- lib/terraforming/resource/elasti_cache_cluster.rb
|
157
159
|
- lib/terraforming/resource/elasti_cache_subnet_group.rb
|
@@ -183,6 +185,7 @@ files:
|
|
183
185
|
- lib/terraforming/resource/subnet.rb
|
184
186
|
- lib/terraforming/resource/vpc.rb
|
185
187
|
- lib/terraforming/resource/vpn_gateway.rb
|
188
|
+
- lib/terraforming/template/tf/alb.erb
|
186
189
|
- lib/terraforming/template/tf/auto_scaling_group.erb
|
187
190
|
- lib/terraforming/template/tf/cloud_watch_alarm.erb
|
188
191
|
- lib/terraforming/template/tf/db_parameter_group.erb
|
@@ -192,6 +195,7 @@ files:
|
|
192
195
|
- lib/terraforming/template/tf/eip.erb
|
193
196
|
- lib/terraforming/template/tf/elasti_cache_cluster.erb
|
194
197
|
- lib/terraforming/template/tf/elasti_cache_subnet_group.erb
|
198
|
+
- lib/terraforming/template/tf/elastic_filesystem.erb
|
195
199
|
- lib/terraforming/template/tf/elb.erb
|
196
200
|
- lib/terraforming/template/tf/iam_group.erb
|
197
201
|
- lib/terraforming/template/tf/iam_group_membership.erb
|
@@ -245,7 +249,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
245
249
|
version: '0'
|
246
250
|
requirements: []
|
247
251
|
rubyforge_project:
|
248
|
-
rubygems_version: 2.5.
|
252
|
+
rubygems_version: 2.5.2
|
249
253
|
signing_key:
|
250
254
|
specification_version: 4
|
251
255
|
summary: Export existing AWS resources to Terraform style (tf, tfstate)
|