terraforming 0.2.0 → 0.3.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/.travis.yml +2 -2
- data/CHANGELOG.md +11 -4
- data/lib/terraforming/cli.rb +10 -0
- data/lib/terraforming/resource/eip.rb +58 -0
- data/lib/terraforming/resource/iam_user.rb +5 -1
- data/lib/terraforming/resource/network_interface.rb +69 -0
- data/lib/terraforming/template/tf/eip.erb +11 -0
- data/lib/terraforming/template/tf/iam_user.erb +1 -1
- data/lib/terraforming/template/tf/network_interface.erb +22 -0
- data/lib/terraforming/version.rb +1 -1
- data/lib/terraforming.rb +2 -0
- metadata +7 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a06eef6162629702c7d05c7c0db5925f7935888b
|
4
|
+
data.tar.gz: 258afec05eb52e63b257660bfc4db4197240c0df
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0d5cd22e89677dd168ebeb2883d47f9bdf98b47c76e0a42ea3b0e913c01d65df6bcf2ddf616b3e998312fd7c3b924b28d1281d1284d68f558fa7db50a579d9ff
|
7
|
+
data.tar.gz: db7af6de24c20eb6a78e2495fae54856955938960015d9f640e6d3c999ff669accbc1c09457e109a68bab8271300d773a02f92ff169f7894b38da2de70637818
|
data/.travis.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,14 @@
|
|
1
|
+
# [v0.3.0](https://github.com/dtan4/terraforming/releases/tag/v0.3.0) (2015-08-23)
|
2
|
+
|
3
|
+
## Resource
|
4
|
+
|
5
|
+
- AWS Network Interface #127 (thanks @sakazuki)
|
6
|
+
- AWS Elastic IP #124 (thanks @sakazuki)
|
7
|
+
|
8
|
+
## Fixed
|
9
|
+
|
10
|
+
- Normalize module name of IAM user #129
|
11
|
+
|
1
12
|
# [v0.2.0](https://github.com/dtan4/terraforming/releases/tag/v0.2.0) (2015-08-22)
|
2
13
|
|
3
14
|
## New feature
|
@@ -11,10 +22,6 @@
|
|
11
22
|
- Include associated VPC parameters in Route53 hosted zone #119
|
12
23
|
- Support Route53 hosted zone with empty delegation set #118
|
13
24
|
|
14
|
-
### Fixed
|
15
|
-
|
16
|
-
- Stop including ElastiCache port at any time #112
|
17
|
-
|
18
25
|
# [v0.1.6](https://github.com/dtan4/terraforming/releases/tag/v0.1.6) (2015-08-10)
|
19
26
|
|
20
27
|
### Fixed
|
data/lib/terraforming/cli.rb
CHANGED
@@ -34,6 +34,11 @@ module Terraforming
|
|
34
34
|
execute(Terraforming::Resource::ElastiCacheSubnetGroup, options)
|
35
35
|
end
|
36
36
|
|
37
|
+
desc "eip", "EIP"
|
38
|
+
def eip
|
39
|
+
execute(Terraforming::Resource::EIP, options)
|
40
|
+
end
|
41
|
+
|
37
42
|
desc "elb", "ELB"
|
38
43
|
def elb
|
39
44
|
execute(Terraforming::Resource::ELB, options)
|
@@ -89,6 +94,11 @@ module Terraforming
|
|
89
94
|
execute(Terraforming::Resource::NetworkACL, options)
|
90
95
|
end
|
91
96
|
|
97
|
+
desc "nif", "Network Interface"
|
98
|
+
def nif
|
99
|
+
execute(Terraforming::Resource::NetworkInterface, options)
|
100
|
+
end
|
101
|
+
|
92
102
|
desc "r53r", "Route53 Record"
|
93
103
|
def r53r
|
94
104
|
execute(Terraforming::Resource::Route53Record, options)
|
@@ -0,0 +1,58 @@
|
|
1
|
+
module Terraforming
|
2
|
+
module Resource
|
3
|
+
class EIP
|
4
|
+
include Terraforming::Util
|
5
|
+
|
6
|
+
def self.tf(client: Aws::EC2::Client.new)
|
7
|
+
self.new(client).tf
|
8
|
+
end
|
9
|
+
|
10
|
+
def self.tfstate(client: Aws::EC2::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/eip")
|
20
|
+
end
|
21
|
+
|
22
|
+
def tfstate
|
23
|
+
eips.inject({}) do |resources, addr|
|
24
|
+
attributes = {
|
25
|
+
"association_id" => addr.association_id,
|
26
|
+
"domain" => addr.domain,
|
27
|
+
"id" => addr.allocation_id,
|
28
|
+
"instance" => addr.instance_id,
|
29
|
+
"network_interface" => addr.network_interface_id,
|
30
|
+
"private_ip" => addr.private_ip_address,
|
31
|
+
"public_ip" => addr.public_ip,
|
32
|
+
"vpc" => is_vpc?(addr).to_s,
|
33
|
+
}
|
34
|
+
attributes.delete_if{|k, v| v.nil?}
|
35
|
+
resources["aws_eip.#{addr.allocation_id}"] = {
|
36
|
+
"type" => "aws_eip",
|
37
|
+
"primary" => {
|
38
|
+
"id" => addr.allocation_id,
|
39
|
+
"attributes" => attributes
|
40
|
+
}
|
41
|
+
}
|
42
|
+
|
43
|
+
resources
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
private
|
48
|
+
|
49
|
+
def eips
|
50
|
+
@client.describe_addresses.addresses
|
51
|
+
end
|
52
|
+
|
53
|
+
def is_vpc?(addr)
|
54
|
+
addr.domain.eql?("vpc")
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
@@ -28,7 +28,7 @@ module Terraforming
|
|
28
28
|
"path" => user.path,
|
29
29
|
"unique_id" => user.user_id,
|
30
30
|
}
|
31
|
-
resources["aws_iam_user.#{user
|
31
|
+
resources["aws_iam_user.#{module_name_of(user)}"] = {
|
32
32
|
"type" => "aws_iam_user",
|
33
33
|
"primary" => {
|
34
34
|
"id" => user.user_name,
|
@@ -45,6 +45,10 @@ module Terraforming
|
|
45
45
|
def iam_users
|
46
46
|
@client.list_users.users
|
47
47
|
end
|
48
|
+
|
49
|
+
def module_name_of(user)
|
50
|
+
normalize_module_name(user.user_name)
|
51
|
+
end
|
48
52
|
end
|
49
53
|
end
|
50
54
|
end
|
@@ -0,0 +1,69 @@
|
|
1
|
+
module Terraforming
|
2
|
+
module Resource
|
3
|
+
class NetworkInterface
|
4
|
+
include Terraforming::Util
|
5
|
+
|
6
|
+
def self.tf(client: Aws::EC2::Client.new)
|
7
|
+
self.new(client).tf
|
8
|
+
end
|
9
|
+
|
10
|
+
def self.tfstate(client: Aws::EC2::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/network_interface")
|
20
|
+
end
|
21
|
+
|
22
|
+
def tfstate
|
23
|
+
network_interfaces.inject({}) do |resources, network_interface|
|
24
|
+
attributes = {
|
25
|
+
"attachment.#" => attachment_of(network_interface) ? "1" : "0",
|
26
|
+
"id" => network_interface.network_interface_id,
|
27
|
+
"private_ips.#" => private_ips_of(network_interface).length.to_s,
|
28
|
+
"security_groups.#" => security_groups_of(network_interface).length.to_s,
|
29
|
+
"source_dest_check" => network_interface.source_dest_check.to_s,
|
30
|
+
"subnet_id" => network_interface.subnet_id,
|
31
|
+
"tags.#" => network_interface.tag_set.length.to_s,
|
32
|
+
}
|
33
|
+
resources["aws_network_interface.#{module_name_of(network_interface)}"] = {
|
34
|
+
"type" => "aws_network_interface",
|
35
|
+
"primary" => {
|
36
|
+
"id" => network_interface.network_interface_id,
|
37
|
+
"attributes" => attributes
|
38
|
+
}
|
39
|
+
}
|
40
|
+
|
41
|
+
resources
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
private
|
46
|
+
|
47
|
+
def attachment_of(network_interface)
|
48
|
+
network_interface.attachment
|
49
|
+
end
|
50
|
+
|
51
|
+
def private_ips_of(network_interface)
|
52
|
+
network_interface.private_ip_addresses.map{|addr| addr.private_ip_address }
|
53
|
+
end
|
54
|
+
|
55
|
+
def security_groups_of(network_interface)
|
56
|
+
network_interface.groups.map { |group| group.group_id }
|
57
|
+
end
|
58
|
+
|
59
|
+
def module_name_of(network_interface)
|
60
|
+
network_interface.network_interface_id
|
61
|
+
end
|
62
|
+
|
63
|
+
def network_interfaces
|
64
|
+
@client.describe_network_interfaces.network_interfaces
|
65
|
+
end
|
66
|
+
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
<% eips.each do |addr| -%>
|
2
|
+
resource "aws_eip" "<%= addr.allocation_id %>" {
|
3
|
+
<% if addr.instance_id -%>
|
4
|
+
instance = "<%= addr.instance_id %>"
|
5
|
+
<% elsif addr.network_interface_id -%>
|
6
|
+
network_interface_id = "<%= addr.network_interface_id %>"
|
7
|
+
<% end -%>
|
8
|
+
vpc = <%= is_vpc?(addr) %>
|
9
|
+
}
|
10
|
+
|
11
|
+
<% end -%>
|
@@ -0,0 +1,22 @@
|
|
1
|
+
<% network_interfaces.each do |network_interface| -%>
|
2
|
+
resource "aws_network_interface" "<%= module_name_of(network_interface) %>" {
|
3
|
+
subnet_id = "<%= network_interface.subnet_id %>"
|
4
|
+
private_ips = <%= private_ips_of(network_interface).inspect %>
|
5
|
+
security_groups = <%= security_groups_of(network_interface).inspect %>
|
6
|
+
source_dest_check = <%= network_interface.source_dest_check %>
|
7
|
+
<% if network_interface.attachment && network_interface.attachment.instance_id -%>
|
8
|
+
attachment {
|
9
|
+
instance = "<%= network_interface.attachment.instance_id %>"
|
10
|
+
device_index = <%= network_interface.attachment.device_index %>
|
11
|
+
}
|
12
|
+
<% end -%>
|
13
|
+
<% if network_interface.tag_set.length > 0 -%>
|
14
|
+
tags {
|
15
|
+
<% network_interface.tag_set.each do |tag| -%>
|
16
|
+
"<%= tag.key %>" = "<%= tag.value %>"
|
17
|
+
<% end -%>
|
18
|
+
}
|
19
|
+
<% end -%>
|
20
|
+
}
|
21
|
+
|
22
|
+
<% end -%>
|
data/lib/terraforming/version.rb
CHANGED
data/lib/terraforming.rb
CHANGED
@@ -15,6 +15,7 @@ require "terraforming/resource/db_parameter_group"
|
|
15
15
|
require "terraforming/resource/db_security_group"
|
16
16
|
require "terraforming/resource/db_subnet_group"
|
17
17
|
require "terraforming/resource/ec2"
|
18
|
+
require "terraforming/resource/eip"
|
18
19
|
require "terraforming/resource/elasti_cache_cluster"
|
19
20
|
require "terraforming/resource/elasti_cache_subnet_group"
|
20
21
|
require "terraforming/resource/elb"
|
@@ -28,6 +29,7 @@ require "terraforming/resource/iam_role_policy"
|
|
28
29
|
require "terraforming/resource/iam_user"
|
29
30
|
require "terraforming/resource/iam_user_policy"
|
30
31
|
require "terraforming/resource/network_acl"
|
32
|
+
require "terraforming/resource/network_interface"
|
31
33
|
require "terraforming/resource/rds"
|
32
34
|
require "terraforming/resource/route53_record"
|
33
35
|
require "terraforming/resource/route53_zone"
|
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.3.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: 2015-08-
|
11
|
+
date: 2015-08-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: aws-sdk
|
@@ -189,6 +189,7 @@ files:
|
|
189
189
|
- lib/terraforming/resource/db_security_group.rb
|
190
190
|
- lib/terraforming/resource/db_subnet_group.rb
|
191
191
|
- lib/terraforming/resource/ec2.rb
|
192
|
+
- lib/terraforming/resource/eip.rb
|
192
193
|
- lib/terraforming/resource/elasti_cache_cluster.rb
|
193
194
|
- lib/terraforming/resource/elasti_cache_subnet_group.rb
|
194
195
|
- lib/terraforming/resource/elb.rb
|
@@ -202,6 +203,7 @@ files:
|
|
202
203
|
- lib/terraforming/resource/iam_user.rb
|
203
204
|
- lib/terraforming/resource/iam_user_policy.rb
|
204
205
|
- lib/terraforming/resource/network_acl.rb
|
206
|
+
- lib/terraforming/resource/network_interface.rb
|
205
207
|
- lib/terraforming/resource/rds.rb
|
206
208
|
- lib/terraforming/resource/route53_record.rb
|
207
209
|
- lib/terraforming/resource/route53_zone.rb
|
@@ -213,6 +215,7 @@ files:
|
|
213
215
|
- lib/terraforming/template/tf/db_security_group.erb
|
214
216
|
- lib/terraforming/template/tf/db_subnet_group.erb
|
215
217
|
- lib/terraforming/template/tf/ec2.erb
|
218
|
+
- lib/terraforming/template/tf/eip.erb
|
216
219
|
- lib/terraforming/template/tf/elasti_cache_cluster.erb
|
217
220
|
- lib/terraforming/template/tf/elasti_cache_subnet_group.erb
|
218
221
|
- lib/terraforming/template/tf/elb.erb
|
@@ -226,6 +229,7 @@ files:
|
|
226
229
|
- lib/terraforming/template/tf/iam_user.erb
|
227
230
|
- lib/terraforming/template/tf/iam_user_policy.erb
|
228
231
|
- lib/terraforming/template/tf/network_acl.erb
|
232
|
+
- lib/terraforming/template/tf/network_interface.erb
|
229
233
|
- lib/terraforming/template/tf/rds.erb
|
230
234
|
- lib/terraforming/template/tf/route53_record.erb
|
231
235
|
- lib/terraforming/template/tf/route53_zone.erb
|
@@ -258,9 +262,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
258
262
|
version: '0'
|
259
263
|
requirements: []
|
260
264
|
rubyforge_project:
|
261
|
-
rubygems_version: 2.4.
|
265
|
+
rubygems_version: 2.4.5.1
|
262
266
|
signing_key:
|
263
267
|
specification_version: 4
|
264
268
|
summary: Export existing AWS resources to Terraform style (tf, tfstate)
|
265
269
|
test_files: []
|
266
|
-
has_rdoc:
|