terraforming 0.7.0 → 0.8.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 +3 -4
- data/CHANGELOG.md +30 -1
- data/Gemfile +13 -0
- data/README.md +15 -2
- data/contrib/zsh-completion/_terraforming +65 -0
- data/lib/terraforming.rb +3 -0
- data/lib/terraforming/cli.rb +18 -0
- data/lib/terraforming/resource/auto_scaling_group.rb +1 -1
- data/lib/terraforming/resource/ec2.rb +3 -0
- data/lib/terraforming/resource/elasti_cache_cluster.rb +5 -2
- data/lib/terraforming/resource/iam_group.rb +1 -1
- data/lib/terraforming/resource/iam_group_policy.rb +5 -1
- data/lib/terraforming/resource/iam_policy.rb +6 -1
- data/lib/terraforming/resource/iam_role.rb +1 -1
- data/lib/terraforming/resource/iam_role_policy.rb +5 -1
- data/lib/terraforming/resource/iam_user_policy.rb +5 -1
- data/lib/terraforming/resource/launch_configuration.rb +109 -0
- data/lib/terraforming/resource/route53_record.rb +1 -1
- data/lib/terraforming/resource/route_table.rb +4 -12
- data/lib/terraforming/resource/security_group.rb +22 -6
- data/lib/terraforming/resource/sqs.rb +70 -0
- data/lib/terraforming/resource/subnet.rb +1 -1
- data/lib/terraforming/resource/vpn_gateway.rb +55 -0
- data/lib/terraforming/template/tf/ec2.erb +3 -0
- data/lib/terraforming/template/tf/elasti_cache_cluster.erb +2 -0
- data/lib/terraforming/template/tf/elb.erb +1 -1
- data/lib/terraforming/template/tf/iam_group_policy.erb +1 -1
- data/lib/terraforming/template/tf/iam_policy.erb +4 -3
- data/lib/terraforming/template/tf/iam_role_policy.erb +1 -1
- data/lib/terraforming/template/tf/iam_user_policy.erb +1 -1
- data/lib/terraforming/template/tf/launch_configuration.erb +66 -0
- data/lib/terraforming/template/tf/security_group.erb +2 -6
- data/lib/terraforming/template/tf/sqs.erb +21 -0
- data/lib/terraforming/template/tf/vpn_gateway.erb +14 -0
- data/lib/terraforming/version.rb +1 -1
- data/terraforming.gemspec +5 -8
- metadata +25 -60
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 244d11650e141679a1bc58831f9e1d54b5f15cba
|
4
|
+
data.tar.gz: 7fe2d54b847abc14c4069ae8186bb3378cbe635e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 111cd0aa7c13dd04f64afcf8562756a88bdbaaf6df8698bbbb390b65504f3d7196feeeab90692a41254599f62bbff86db16e2c68aeff3200afa3858b32936ec6
|
7
|
+
data.tar.gz: 9d4870b66f7e9fa38c7f05179be35db7cb0fec3a3e08533519e0128d1e9cff8e637890b15a33ff4c7d018eb5a65147c5e3b18bb60f679bc03bc7449ebc986884
|
data/.travis.yml
CHANGED
@@ -1,9 +1,8 @@
|
|
1
1
|
language: ruby
|
2
2
|
rvm:
|
3
|
-
- 2.3.
|
4
|
-
- 2.2.
|
5
|
-
- 2.1.
|
6
|
-
- 2.0
|
3
|
+
- 2.3.1
|
4
|
+
- 2.2.5
|
5
|
+
- 2.1.10
|
7
6
|
env:
|
8
7
|
- secure: n0mxwnyjuXI4mJO4mp++2TnsPJ+XgCF/J1U2L5piE5j3xMhSU+5V0JrA1uFlS0Pemb44M7BjgmF9S4G35BwyAQpctpCYhqy9tFa6+Y6nxEv5hCv2cZz7BSAZM6eb+zq20409hxTHRaQOr1DBeE4R5S2PrmOXRqvYfTRv3LNSLFk=
|
9
8
|
notifications:
|
data/CHANGELOG.md
CHANGED
@@ -1,4 +1,33 @@
|
|
1
|
-
# [v0.
|
1
|
+
# [v0.8.0](https://github.com/dtan4/terraforming/releases/tag/v0.8.0) (2016-05-29)
|
2
|
+
|
3
|
+
## Notice
|
4
|
+
|
5
|
+
- Drop Ruby 2.0 support. Now Terraforming supports Ruby 2.1 or higher. #206
|
6
|
+
|
7
|
+
## Resource
|
8
|
+
|
9
|
+
- AWS VPN Gateway #190 (thanks @tmccabe07)
|
10
|
+
- AWS Launch Configuration #187 (thanks @phoolish)
|
11
|
+
- AWS SQS #169 (thanks @manabusakai)
|
12
|
+
|
13
|
+
## Fixed / Updated
|
14
|
+
|
15
|
+
- Add prefix not to duplicate IAM inline policy name #212 (thanks @stormbeta)
|
16
|
+
- Use the latest Ox and Oj #210
|
17
|
+
- Simplify Security Group name #207 (thanks @woohgit)
|
18
|
+
- Include description field for IAM policies #203 (thanks @stormbeta)
|
19
|
+
- Support paging paging for IAM resources #201 (thanks @dominis)
|
20
|
+
- Fix Security Group output around EC2-Classic #200 (thanks @woohgit)
|
21
|
+
- Default Route53 record weight should be "-1" #197 (thanks @woohgit)
|
22
|
+
- Add Elasticache Redis port #189 (thanks @phoolish)
|
23
|
+
- Add `--region` option #188 (thanks @hajhatten)
|
24
|
+
- Add zsh completion #176 (thanks @knakayama)
|
25
|
+
- Add subnet ID to the resource name #185 (thanks @bandesz)
|
26
|
+
- Add EC2 placement group #180 (thanks @wsh)
|
27
|
+
- Wrap tag name in ELB #179 (thanks @robatwave)
|
28
|
+
- Retrive full list of AutoScaling Groups #170 (thanks @shouyu)
|
29
|
+
|
30
|
+
# [v0.7.0](https://github.com/dtan4/terraforming/releases/tag/v0.7.0) (2016-02-16)
|
2
31
|
|
3
32
|
## Resource
|
4
33
|
|
data/Gemfile
CHANGED
@@ -2,3 +2,16 @@ source 'https://rubygems.org'
|
|
2
2
|
|
3
3
|
# Specify your gem's dependencies in terraforming.gemspec
|
4
4
|
gemspec
|
5
|
+
|
6
|
+
group :development do
|
7
|
+
gem "guard"
|
8
|
+
gem "guard-rspec"
|
9
|
+
|
10
|
+
if Gem::Version.new(RUBY_VERSION) >= Gem::Version.new("2.2.0")
|
11
|
+
gem "listen", "~> 3.1.0"
|
12
|
+
else
|
13
|
+
gem "listen", "< 3.1.0"
|
14
|
+
end
|
15
|
+
|
16
|
+
gem "terminal-notifier-guard"
|
17
|
+
end
|
data/README.md
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
[](https://travis-ci.org/dtan4/terraforming)
|
4
4
|
[](https://codeclimate.com/github/dtan4/terraforming)
|
5
|
-
[](https://coveralls.io/github/dtan4/terraforming)
|
6
6
|
[](https://gemnasium.com/dtan4/terraforming)
|
7
7
|
[](http://badge.fury.io/rb/terraforming)
|
8
8
|
[](LICENSE)
|
@@ -17,6 +17,7 @@ Export existing AWS resources to [Terraform](https://terraform.io/) style (tf, t
|
|
17
17
|
- [Usage](#usage)
|
18
18
|
- [Export tf](#export-tf)
|
19
19
|
- [Export tfstate](#export-tfstate)
|
20
|
+
- [Example: Export all](#example-export-all)
|
20
21
|
- [Run as Docker container](#run-as-docker-container-)
|
21
22
|
- [Development](#development)
|
22
23
|
- [Contributing](#contributing)
|
@@ -24,7 +25,7 @@ Export existing AWS resources to [Terraform](https://terraform.io/) style (tf, t
|
|
24
25
|
|
25
26
|
## Supported version
|
26
27
|
|
27
|
-
Ruby 2.
|
28
|
+
Ruby 2.1 or higher
|
28
29
|
|
29
30
|
## Installation
|
30
31
|
|
@@ -88,6 +89,7 @@ Commands:
|
|
88
89
|
terraforming iamu # IAM User
|
89
90
|
terraforming iamup # IAM User Policy
|
90
91
|
terraforming igw # Internet Gateway
|
92
|
+
terraforming lc # Launch Configuration
|
91
93
|
terraforming nacl # Network ACL
|
92
94
|
terraforming nif # Network Interface
|
93
95
|
terraforming r53r # Route53 Record
|
@@ -99,6 +101,8 @@ Commands:
|
|
99
101
|
terraforming s3 # S3
|
100
102
|
terraforming sg # Security Group
|
101
103
|
terraforming sn # Subnet
|
104
|
+
terraforming sqs # SQS
|
105
|
+
terraforming vgw # VPN Gateway
|
102
106
|
terraforming vpc # VPC
|
103
107
|
```
|
104
108
|
|
@@ -312,6 +316,15 @@ the real physical resources that exist. As a result, Terraform
|
|
312
316
|
doesn't need to do anything.
|
313
317
|
```
|
314
318
|
|
319
|
+
#### Example: Export all
|
320
|
+
Example assuming you want to export everything from us-west-2 and you are using ~/.aws/credentials with a `default` profile
|
321
|
+
```bash
|
322
|
+
export AWS_REGION=us-west-2
|
323
|
+
terraforming help | grep terraforming | grep -v help | awk '{print "terraforming", $2, "--profile", "default", ">", $2".tf";}' | bash
|
324
|
+
# remove files that only have 1 empty line (nothing in AWS)
|
325
|
+
find . -type f | xargs wc -l | grep '1 .' | awk '{print $2;}' | xargs rm
|
326
|
+
```
|
327
|
+
|
315
328
|
## Run as Docker container [](https://quay.io/repository/dtan4/terraforming)
|
316
329
|
|
317
330
|
Terraforming Docker Image is available at [quay.io/dtan4/terraforming](https://quay.io/repository/dtan4/terraforming) and developed at [dtan4/dockerfile-terraforming](https://github.com/dtan4/dockerfile-terraforming).
|
@@ -0,0 +1,65 @@
|
|
1
|
+
#compdef terraforming
|
2
|
+
|
3
|
+
function _terraforming() {
|
4
|
+
local context curcontext=$curcontext state line
|
5
|
+
typeset -A opt_args
|
6
|
+
local ret=1
|
7
|
+
|
8
|
+
_arguments -C \
|
9
|
+
'1: :__terraforming_sub_commands' \
|
10
|
+
'*:: :->args' \
|
11
|
+
&& ret=0
|
12
|
+
|
13
|
+
case $state in
|
14
|
+
(args)
|
15
|
+
case $words[1] in
|
16
|
+
(help)
|
17
|
+
_arguments -C \
|
18
|
+
'1: :__terraforming_sub_commands' \
|
19
|
+
'(-)*:: :->null_state' \
|
20
|
+
&& ret=0
|
21
|
+
;;
|
22
|
+
(*)
|
23
|
+
_arguments -C \
|
24
|
+
'--merge=[(TFSTATE) tfstate file to merge]:tfstate file to merge:_files' \
|
25
|
+
'--overwrite[Overwrite existing tfstate]' \
|
26
|
+
'--no-overwrite[Do not overwrite existing tfstate]' \
|
27
|
+
'--tfstate[Generate tfstate]' \
|
28
|
+
'--no-tfstate[Do not generate tfstate]' \
|
29
|
+
'--profile[(PROFILE) AWS credentials profile]:AWS credentials profile:__profiles' \
|
30
|
+
&& ret=0
|
31
|
+
;;
|
32
|
+
esac
|
33
|
+
;;
|
34
|
+
esac
|
35
|
+
|
36
|
+
return ret
|
37
|
+
}
|
38
|
+
|
39
|
+
__terraforming_sub_commands() {
|
40
|
+
local -a _c
|
41
|
+
|
42
|
+
_c=(
|
43
|
+
"${(@f)$(terraforming --help \
|
44
|
+
| grep ' terraforming' \
|
45
|
+
| sed -E 's/^ terraforming //g' \
|
46
|
+
| sed -E 's/ *(\[COMMAND\])? *# /:/g')}"
|
47
|
+
)
|
48
|
+
|
49
|
+
_describe -t commands terraforming_sub_commands _c
|
50
|
+
}
|
51
|
+
|
52
|
+
__profiles() {
|
53
|
+
local _profile_path="${HOME}/.aws/credentials"
|
54
|
+
local -a _profiles
|
55
|
+
|
56
|
+
_profiles=(
|
57
|
+
${(@f)"$(_call_program profiles \
|
58
|
+
"grep -E '^\[.*\]$' "$_profile_path" \
|
59
|
+
| sed -e 's/\[//' -e 's/\]//'")"}
|
60
|
+
)
|
61
|
+
|
62
|
+
_describe -t profiles Profiles _profiles
|
63
|
+
}
|
64
|
+
|
65
|
+
_terraforming "$@"
|
data/lib/terraforming.rb
CHANGED
@@ -29,6 +29,7 @@ require "terraforming/resource/iam_role"
|
|
29
29
|
require "terraforming/resource/iam_role_policy"
|
30
30
|
require "terraforming/resource/iam_user"
|
31
31
|
require "terraforming/resource/iam_user_policy"
|
32
|
+
require "terraforming/resource/launch_configuration"
|
32
33
|
require "terraforming/resource/internet_gateway"
|
33
34
|
require "terraforming/resource/network_acl"
|
34
35
|
require "terraforming/resource/network_interface"
|
@@ -41,4 +42,6 @@ require "terraforming/resource/route53_zone"
|
|
41
42
|
require "terraforming/resource/s3"
|
42
43
|
require "terraforming/resource/security_group"
|
43
44
|
require "terraforming/resource/subnet"
|
45
|
+
require "terraforming/resource/sqs"
|
44
46
|
require "terraforming/resource/vpc"
|
47
|
+
require "terraforming/resource/vpn_gateway"
|
data/lib/terraforming/cli.rb
CHANGED
@@ -4,6 +4,7 @@ module Terraforming
|
|
4
4
|
class_option :overwrite, type: :boolean, desc: "Overwrite existng tfstate"
|
5
5
|
class_option :tfstate, type: :boolean, desc: "Generate tfstate"
|
6
6
|
class_option :profile, type: :string, desc: "AWS credentials profile"
|
7
|
+
class_option :region, type: :string, desc: "AWS region"
|
7
8
|
|
8
9
|
desc "asg", "AutoScaling Group"
|
9
10
|
def asg
|
@@ -95,6 +96,11 @@ module Terraforming
|
|
95
96
|
execute(Terraforming::Resource::IAMUserPolicy, options)
|
96
97
|
end
|
97
98
|
|
99
|
+
desc "lc", "Launch Configuration"
|
100
|
+
def lc
|
101
|
+
execute(Terraforming::Resource::LaunchConfiguration, options)
|
102
|
+
end
|
103
|
+
|
98
104
|
desc "igw", "Internet Gateway"
|
99
105
|
def igw
|
100
106
|
execute(Terraforming::Resource::InternetGateway, options)
|
@@ -155,15 +161,27 @@ module Terraforming
|
|
155
161
|
execute(Terraforming::Resource::Subnet, options)
|
156
162
|
end
|
157
163
|
|
164
|
+
desc "sqs", "SQS"
|
165
|
+
def sqs
|
166
|
+
execute(Terraforming::Resource::SQS, options)
|
167
|
+
end
|
168
|
+
|
158
169
|
desc "vpc", "VPC"
|
159
170
|
def vpc
|
160
171
|
execute(Terraforming::Resource::VPC, options)
|
161
172
|
end
|
162
173
|
|
174
|
+
desc "vgw", "VPN Gateway"
|
175
|
+
def vgw
|
176
|
+
execute(Terraforming::Resource::VPNGateway, options)
|
177
|
+
end
|
178
|
+
|
179
|
+
|
163
180
|
private
|
164
181
|
|
165
182
|
def execute(klass, options)
|
166
183
|
Aws.config[:credentials] = Aws::SharedCredentials.new(profile_name: options[:profile]) if options[:profile]
|
184
|
+
Aws.config[:region] = options[:region] if options[:region]
|
167
185
|
result = options[:tfstate] ? tfstate(klass, options[:merge]) : tf(klass)
|
168
186
|
|
169
187
|
if options[:tfstate] && options[:merge] && options[:overwrite]
|
@@ -45,6 +45,9 @@ module Terraforming
|
|
45
45
|
"vpc_security_group_ids.#"=> in_vpc ? instance.security_groups.length.to_s : "0",
|
46
46
|
}
|
47
47
|
|
48
|
+
placement_group = instance.placement.group_name
|
49
|
+
attributes["placement_group"] = placement_group unless placement_group.empty?
|
50
|
+
|
48
51
|
attributes["subnet_id"] = instance.subnet_id if in_vpc?(instance)
|
49
52
|
|
50
53
|
resources["aws_instance.#{module_name_of(instance)}"] = {
|
@@ -36,8 +36,11 @@ module Terraforming
|
|
36
36
|
"tags.#" => "0",
|
37
37
|
}
|
38
38
|
|
39
|
-
attributes["port"] =
|
40
|
-
cache_cluster.configuration_endpoint.port.to_s
|
39
|
+
attributes["port"] = if cache_cluster.configuration_endpoint
|
40
|
+
cache_cluster.configuration_endpoint.port.to_s
|
41
|
+
else
|
42
|
+
cache_cluster.cache_nodes[0].endpoint.port.to_s
|
43
|
+
end
|
41
44
|
|
42
45
|
resources["aws_elasticache_cluster.#{cache_cluster.cache_cluster_id}"] = {
|
43
46
|
"type" => "aws_elasticache_cluster",
|
@@ -27,7 +27,7 @@ module Terraforming
|
|
27
27
|
"name" => policy.policy_name,
|
28
28
|
"policy" => prettify_policy(policy.policy_document, breakline: true, unescape: true)
|
29
29
|
}
|
30
|
-
resources["aws_iam_group_policy.#{policy
|
30
|
+
resources["aws_iam_group_policy.#{unique_name(policy)}"] = {
|
31
31
|
"type" => "aws_iam_group_policy",
|
32
32
|
"primary" => {
|
33
33
|
"id" => iam_group_policy_id_of(policy),
|
@@ -41,6 +41,10 @@ module Terraforming
|
|
41
41
|
|
42
42
|
private
|
43
43
|
|
44
|
+
def unique_name(policy)
|
45
|
+
"#{policy.group_name}_#{policy.policy_name}"
|
46
|
+
end
|
47
|
+
|
44
48
|
def iam_groups
|
45
49
|
@client.list_groups.groups
|
46
50
|
end
|
@@ -26,6 +26,7 @@ module Terraforming
|
|
26
26
|
"id" => policy.arn,
|
27
27
|
"name" => policy.policy_name,
|
28
28
|
"path" => policy.path,
|
29
|
+
"description" => iam_policy_description(policy),
|
29
30
|
"policy" => prettify_policy(version.document, breakline: true, unescape: true),
|
30
31
|
}
|
31
32
|
resources["aws_iam_policy.#{policy.policy_name}"] = {
|
@@ -43,7 +44,11 @@ module Terraforming
|
|
43
44
|
private
|
44
45
|
|
45
46
|
def iam_policies
|
46
|
-
@client.list_policies(scope: "Local").policies
|
47
|
+
@client.list_policies(scope: "Local").collect {|r| r.policies}.flatten
|
48
|
+
end
|
49
|
+
|
50
|
+
def iam_policy_description(policy)
|
51
|
+
@client.get_policy(policy_arn: policy.arn).policy.description
|
47
52
|
end
|
48
53
|
|
49
54
|
def iam_policy_version_of(policy)
|
@@ -27,7 +27,7 @@ module Terraforming
|
|
27
27
|
"policy" => prettify_policy(policy.policy_document, breakline: true, unescape: true),
|
28
28
|
"role" => policy.role_name,
|
29
29
|
}
|
30
|
-
resources["aws_iam_role_policy.#{policy
|
30
|
+
resources["aws_iam_role_policy.#{unique_name(policy)}"] = {
|
31
31
|
"type" => "aws_iam_role_policy",
|
32
32
|
"primary" => {
|
33
33
|
"id" => iam_role_policy_id_of(policy),
|
@@ -41,6 +41,10 @@ module Terraforming
|
|
41
41
|
|
42
42
|
private
|
43
43
|
|
44
|
+
def unique_name(policy)
|
45
|
+
"#{policy.role_name}_#{policy.policy_name}"
|
46
|
+
end
|
47
|
+
|
44
48
|
def iam_roles
|
45
49
|
@client.list_roles.roles
|
46
50
|
end
|
@@ -27,7 +27,7 @@ module Terraforming
|
|
27
27
|
"policy" => prettify_policy(policy.policy_document, breakline: true, unescape: true),
|
28
28
|
"user" => policy.user_name,
|
29
29
|
}
|
30
|
-
resources["aws_iam_user_policy.#{policy
|
30
|
+
resources["aws_iam_user_policy.#{unique_name(policy)}"] = {
|
31
31
|
"type" => "aws_iam_user_policy",
|
32
32
|
"primary" => {
|
33
33
|
"id" => iam_user_policy_id_of(policy),
|
@@ -41,6 +41,10 @@ module Terraforming
|
|
41
41
|
|
42
42
|
private
|
43
43
|
|
44
|
+
def unique_name(policy)
|
45
|
+
"#{policy.user_name}_#{policy.policy_name}"
|
46
|
+
end
|
47
|
+
|
44
48
|
def iam_users
|
45
49
|
@client.list_users.users
|
46
50
|
end
|
@@ -0,0 +1,109 @@
|
|
1
|
+
module Terraforming
|
2
|
+
module Resource
|
3
|
+
class LaunchConfiguration
|
4
|
+
include Terraforming::Util
|
5
|
+
|
6
|
+
def self.tf(client: Aws::AutoScaling::Client.new)
|
7
|
+
self.new(client).tf
|
8
|
+
end
|
9
|
+
|
10
|
+
def self.tfstate(client: Aws::AutoScaling::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/launch_configuration")
|
20
|
+
end
|
21
|
+
|
22
|
+
def tfstate
|
23
|
+
launch_configurations.inject({}) do |resources, lc|
|
24
|
+
|
25
|
+
attributes = {
|
26
|
+
"name" => lc.launch_configuration_name,
|
27
|
+
"image_id" => lc.image_id,
|
28
|
+
"instance_type" => lc.instance_type,
|
29
|
+
"key_name" => lc.key_name,
|
30
|
+
"security_groups.#" => lc.security_groups.length.to_s,
|
31
|
+
"associate_public_ip_address" => lc.associate_public_ip_address.to_s,
|
32
|
+
"user_data" => lc.user_data,
|
33
|
+
"enable_monitoring" => lc.instance_monitoring.enabled.to_s,
|
34
|
+
"ebs_optimized" => lc.ebs_optimized.to_s,
|
35
|
+
"root_block_device.#" => root_block_device_count(lc).to_s,
|
36
|
+
"ebs_block_device.#" => ebs_block_device_count(lc).to_s,
|
37
|
+
"ephemeral_block_device.#" => ephemeral_block_device_count(lc).to_s
|
38
|
+
}
|
39
|
+
|
40
|
+
lc.security_groups.each do |sg|
|
41
|
+
hash = hash_security_group(sg)
|
42
|
+
attributes["security_groups.#{hash}"] = sg
|
43
|
+
end
|
44
|
+
|
45
|
+
attributes["iam_instance_profile"] = lc.iam_instance_profile if lc.iam_instance_profile
|
46
|
+
attributes["spot_price"] = lc.spot_price if lc.spot_price
|
47
|
+
attributes["placement_tenancy"] = lc.placement_tenancy if lc.placement_tenancy
|
48
|
+
|
49
|
+
resources["aws_launch_configuration.#{module_name_of(lc)}"] = {
|
50
|
+
"type" => "aws_launch_configuration",
|
51
|
+
"primary" => {
|
52
|
+
"id" => lc.launch_configuration_name,
|
53
|
+
"attributes" => attributes
|
54
|
+
}
|
55
|
+
}
|
56
|
+
|
57
|
+
resources
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
private
|
62
|
+
|
63
|
+
# Taken from http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/device_naming.html
|
64
|
+
def root_block_device?(block_device)
|
65
|
+
%w(/dev/sda1 /dev/xvda).include? block_device.device_name
|
66
|
+
end
|
67
|
+
|
68
|
+
def root_block_device_count(launch_configuration)
|
69
|
+
launch_configuration.block_device_mappings.select do |volume|
|
70
|
+
root_block_device?(volume)
|
71
|
+
end.length
|
72
|
+
end
|
73
|
+
|
74
|
+
def ebs_block_device?(block_device)
|
75
|
+
block_device.virtual_name == nil && block_device.ebs
|
76
|
+
end
|
77
|
+
|
78
|
+
def ebs_block_device_count(launch_configuration)
|
79
|
+
launch_configuration.block_device_mappings.select do |volume|
|
80
|
+
ebs_block_device?(volume) && !root_block_device?(volume)
|
81
|
+
end.length
|
82
|
+
end
|
83
|
+
|
84
|
+
def ephemeral_block_device?(block_device)
|
85
|
+
block_device.virtual_name != nil
|
86
|
+
end
|
87
|
+
|
88
|
+
def ephemeral_block_device_count(launch_configuration)
|
89
|
+
launch_configuration.block_device_mappings.select do |volume|
|
90
|
+
ephemeral_block_device?(volume)
|
91
|
+
end.length
|
92
|
+
end
|
93
|
+
|
94
|
+
def hash_security_group(name)
|
95
|
+
Zlib.crc32(name)
|
96
|
+
end
|
97
|
+
|
98
|
+
def launch_configurations
|
99
|
+
@client.describe_launch_configurations.collect do |r|
|
100
|
+
r.launch_configurations
|
101
|
+
end.flatten
|
102
|
+
end
|
103
|
+
|
104
|
+
def module_name_of(launch_configuration)
|
105
|
+
normalize_module_name(launch_configuration.launch_configuration_name)
|
106
|
+
end
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|
@@ -34,7 +34,7 @@ module Terraforming
|
|
34
34
|
attributes["alias.#"] = "1" if record.alias_target
|
35
35
|
attributes["records.#"] = record.resource_records.length.to_s unless record.resource_records.empty?
|
36
36
|
attributes["ttl"] = record.ttl.to_s if record.ttl
|
37
|
-
attributes["weight"] = record.weight
|
37
|
+
attributes["weight"] = record.weight ? record.weight.to_s : "-1"
|
38
38
|
attributes["set_identifier"] = record.set_identifier if record.set_identifier
|
39
39
|
|
40
40
|
resources["aws_route53_record.#{module_name_of(record)}"] = {
|
@@ -85,20 +85,12 @@ module Terraforming
|
|
85
85
|
end
|
86
86
|
|
87
87
|
def route_hashcode_of(route)
|
88
|
-
string = "#{route.destination_cidr_block}-"
|
89
|
-
|
90
|
-
|
91
|
-
instance_set = false
|
92
|
-
if route.instance_id != ''
|
93
|
-
string << route.instance_id.to_s
|
94
|
-
instance_set = true
|
95
|
-
end
|
88
|
+
string = "#{route.destination_cidr_block}-#{route.gateway_id}-"
|
89
|
+
instance_set = !route.instance_id.nil? && route.instance_id != ''
|
96
90
|
|
91
|
+
string << route.instance_id.to_s if instance_set
|
97
92
|
string << route.vpc_peering_connection_id.to_s
|
98
|
-
|
99
|
-
unless instance_set
|
100
|
-
string << route.network_interface_id.to_s
|
101
|
-
end
|
93
|
+
string << route.network_interface_id.to_s unless instance_set
|
102
94
|
|
103
95
|
Zlib.crc32(string)
|
104
96
|
end
|
@@ -74,12 +74,17 @@ module Terraforming
|
|
74
74
|
end
|
75
75
|
|
76
76
|
def module_name_of(security_group)
|
77
|
-
|
77
|
+
if security_group.vpc_id.nil?
|
78
|
+
normalize_module_name("#{security_group.group_name}")
|
79
|
+
else
|
80
|
+
normalize_module_name("#{security_group.vpc_id}-#{security_group.group_name}")
|
81
|
+
end
|
78
82
|
end
|
79
83
|
|
80
84
|
def permission_attributes_of(security_group, permission, type)
|
81
85
|
hashcode = permission_hashcode_of(security_group, permission)
|
82
|
-
security_groups = security_groups_in(permission).reject { |group_id| group_id == security_group.group_id }
|
86
|
+
security_groups = security_groups_in(permission, security_group).reject { |group_name| group_name == security_group.group_name }.reject { |group_id| group_id == security_group.group_id }
|
87
|
+
|
83
88
|
|
84
89
|
attributes = {
|
85
90
|
"#{type}.#{hashcode}.from_port" => (permission.from_port || 0).to_s,
|
@@ -138,21 +143,32 @@ module Terraforming
|
|
138
143
|
"#{self_referenced_permission?(security_group, permission).to_s}-"
|
139
144
|
|
140
145
|
permission.ip_ranges.each { |range| string << "#{range.cidr_ip}-" }
|
141
|
-
security_groups_in(permission).each { |group| string << "#{group}-" }
|
146
|
+
security_groups_in(permission, security_group).each { |group| string << "#{group}-" }
|
142
147
|
|
143
148
|
Zlib.crc32(string)
|
144
149
|
end
|
145
150
|
|
146
151
|
def self_referenced_permission?(security_group, permission)
|
147
|
-
security_groups_in(permission).
|
152
|
+
(security_groups_in(permission, security_group) & [security_group.group_id, security_group.group_name]).any?
|
148
153
|
end
|
149
154
|
|
150
155
|
def security_groups
|
151
156
|
@client.describe_security_groups.security_groups
|
152
157
|
end
|
153
158
|
|
154
|
-
def security_groups_in(permission)
|
155
|
-
permission.user_id_group_pairs.map { |range|
|
159
|
+
def security_groups_in(permission, security_group)
|
160
|
+
permission.user_id_group_pairs.map { |range|
|
161
|
+
# EC2-Classic, same account
|
162
|
+
if security_group.owner_id == range.user_id && !range.group_name.nil?
|
163
|
+
range.group_name
|
164
|
+
# VPC
|
165
|
+
elsif security_group.owner_id == range.user_id && range.group_name.nil?
|
166
|
+
range.group_id
|
167
|
+
# EC2-Classic, other account
|
168
|
+
else
|
169
|
+
"#{range.user_id}/#{range.group_name}"
|
170
|
+
end
|
171
|
+
}
|
156
172
|
end
|
157
173
|
|
158
174
|
def tags_attributes_of(security_group)
|
@@ -0,0 +1,70 @@
|
|
1
|
+
module Terraforming
|
2
|
+
module Resource
|
3
|
+
class SQS
|
4
|
+
include Terraforming::Util
|
5
|
+
|
6
|
+
def self.tf(client: Aws::SQS::Client.new)
|
7
|
+
self.new(client).tf
|
8
|
+
end
|
9
|
+
|
10
|
+
def self.tfstate(client: Aws::SQS::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/sqs")
|
20
|
+
end
|
21
|
+
|
22
|
+
def tfstate
|
23
|
+
queues.inject({}) do |resources, queue|
|
24
|
+
attributes = {
|
25
|
+
"name" => module_name_of(queue),
|
26
|
+
"id" => queue["QueueUrl"],
|
27
|
+
"arn" => queue["QueueArn"],
|
28
|
+
"visibility_timeout_seconds" => queue["VisibilityTimeout"],
|
29
|
+
"message_retention_seconds" => queue["MessageRetentionPeriod"],
|
30
|
+
"max_message_size" => queue["MaximumMessageSize"],
|
31
|
+
"delay_seconds" => queue["DelaySeconds"],
|
32
|
+
"receive_wait_time_seconds" => queue["ReceiveMessageWaitTimeSeconds"],
|
33
|
+
"policy" => queue.key?("Policy") ? queue["Policy"] : "",
|
34
|
+
"redrive_policy" => queue.key?("RedrivePolicy") ? queue["RedrivePolicy"] : "",
|
35
|
+
}
|
36
|
+
resources["aws_sqs_queue.#{module_name_of(queue)}"] = {
|
37
|
+
"type" => "aws_sqs_queue",
|
38
|
+
"primary" => {
|
39
|
+
"id" => queue["QueueUrl"],
|
40
|
+
"attributes" => attributes,
|
41
|
+
}
|
42
|
+
}
|
43
|
+
|
44
|
+
resources
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
private
|
49
|
+
|
50
|
+
def queues
|
51
|
+
queue_urls.map do |queue_url|
|
52
|
+
attributes = @client.get_queue_attributes({
|
53
|
+
queue_url: queue_url,
|
54
|
+
attribute_names: ["All"],
|
55
|
+
}).attributes
|
56
|
+
attributes["QueueUrl"] = queue_url
|
57
|
+
attributes
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
def queue_urls
|
62
|
+
@client.list_queues.queue_urls
|
63
|
+
end
|
64
|
+
|
65
|
+
def module_name_of(queue)
|
66
|
+
normalize_module_name(queue["QueueArn"].split(":").last)
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
module Terraforming
|
2
|
+
module Resource
|
3
|
+
class VPNGateway
|
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/vpn_gateway")
|
20
|
+
end
|
21
|
+
|
22
|
+
def tfstate
|
23
|
+
vpn_gateways.inject({}) do |resources, vpn_gateway|
|
24
|
+
next resources if vpn_gateway.vpc_attachments.empty?
|
25
|
+
|
26
|
+
attributes = {
|
27
|
+
"id" => vpn_gateway.vpn_gateway_id,
|
28
|
+
"vpc_id" => vpn_gateway.vpc_attachments[0].vpc_id,
|
29
|
+
"availability_zone" => vpn_gateway.availability_zone,
|
30
|
+
"tags.#" => vpn_gateway.tags.length.to_s,
|
31
|
+
}
|
32
|
+
resources["aws_vpn_gateway.#{module_name_of(vpn_gateway)}"] = {
|
33
|
+
"type" => "aws_vpn_gateway",
|
34
|
+
"primary" => {
|
35
|
+
"id" => vpn_gateway.vpn_gateway_id,
|
36
|
+
"attributes" => attributes
|
37
|
+
}
|
38
|
+
}
|
39
|
+
|
40
|
+
resources
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
private
|
45
|
+
|
46
|
+
def vpn_gateways
|
47
|
+
@client.describe_vpn_gateways.vpn_gateways
|
48
|
+
end
|
49
|
+
|
50
|
+
def module_name_of(vpn_gateway)
|
51
|
+
normalize_module_name(name_from_tag(vpn_gateway, vpn_gateway.vpn_gateway_id))
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
@@ -4,6 +4,9 @@ resource "aws_instance" "<%= module_name_of(instance) %>" {
|
|
4
4
|
availability_zone = "<%= instance.placement.availability_zone %>"
|
5
5
|
ebs_optimized = <%= instance.ebs_optimized %>
|
6
6
|
instance_type = "<%= instance.instance_type %>"
|
7
|
+
<%- unless instance.placement.group_name.empty? -%>
|
8
|
+
placement_group = "<%= instance.placement.group_name %>"
|
9
|
+
<%- end -%>
|
7
10
|
monitoring = <%= monitoring_state(instance) %>
|
8
11
|
key_name = "<%= instance.key_name %>"
|
9
12
|
<%- if in_vpc?(instance) -%>
|
@@ -8,6 +8,8 @@ resource "aws_elasticache_cluster" "<%= cache_cluster.cache_cluster_id %>" {
|
|
8
8
|
parameter_group_name = "<%= cache_cluster.cache_parameter_group.cache_parameter_group_name %>"
|
9
9
|
<%- if cache_cluster.configuration_endpoint -%>
|
10
10
|
port = <%= cache_cluster.configuration_endpoint.port %>
|
11
|
+
<%- else -%>
|
12
|
+
port = <%= cache_cluster.cache_nodes[0].endpoint.port %>
|
11
13
|
<%- end -%>
|
12
14
|
<%- if cluster_in_vpc?(cache_cluster) -%>
|
13
15
|
subnet_group_name = "<%= cache_cluster.cache_subnet_group_name %>"
|
@@ -34,7 +34,7 @@ resource "aws_elb" "<%= module_name_of(load_balancer) %>" {
|
|
34
34
|
|
35
35
|
tags {
|
36
36
|
<% @client.describe_tags(load_balancer_names: [load_balancer.load_balancer_name]).tag_descriptions.first.tags.each do |tag| -%>
|
37
|
-
<%= tag.key %> = "<%= tag.value %>"
|
37
|
+
"<%= tag.key %>" = "<%= tag.value %>"
|
38
38
|
<% end -%>
|
39
39
|
}
|
40
40
|
}
|
@@ -1,9 +1,10 @@
|
|
1
1
|
<% iam_policies.each do |policy| -%>
|
2
2
|
<%- version = iam_policy_version_of(policy) -%>
|
3
3
|
resource "aws_iam_policy" "<%= policy.policy_name %>" {
|
4
|
-
name
|
5
|
-
path
|
6
|
-
|
4
|
+
name = "<%= policy.policy_name %>"
|
5
|
+
path = "<%= policy.path %>"
|
6
|
+
description = "<%= iam_policy_description(policy) %>"
|
7
|
+
policy = <<POLICY
|
7
8
|
<%= prettify_policy(version.document, unescape: true) %>
|
8
9
|
POLICY
|
9
10
|
}
|
@@ -0,0 +1,66 @@
|
|
1
|
+
<% launch_configurations.each do |launch_configuration| -%>
|
2
|
+
resource "aws_launch_configuration" "<%= module_name_of(launch_configuration) %>" {
|
3
|
+
name = "<%= launch_configuration.launch_configuration_name %>"
|
4
|
+
image_id = "<%= launch_configuration.image_id %>"
|
5
|
+
instance_type = "<%= launch_configuration.instance_type %>"
|
6
|
+
<%- if launch_configuration.iam_instance_profile -%>
|
7
|
+
iam_instance_profile = "<%= launch_configuration.iam_instance_profile %>"
|
8
|
+
<%- end -%>
|
9
|
+
<%- unless launch_configuration.key_name.empty? -%>
|
10
|
+
key_name = "<%= launch_configuration.key_name %>"
|
11
|
+
<%- end -%>
|
12
|
+
security_groups = <%= launch_configuration.security_groups.map { |sg| sg }.inspect %>
|
13
|
+
associate_public_ip_address = <%= launch_configuration.associate_public_ip_address %>
|
14
|
+
<%- unless launch_configuration.user_data.empty? -%>
|
15
|
+
user_data = "<%= launch_configuration.user_data %>"
|
16
|
+
<%- end -%>
|
17
|
+
enable_monitoring = <%= launch_configuration.instance_monitoring.enabled %>
|
18
|
+
ebs_optimized = <%= launch_configuration.ebs_optimized %>
|
19
|
+
<%- if launch_configuration.spot_price -%>
|
20
|
+
spot_price = "<%= launch_configuration.spot_price %>"
|
21
|
+
<%- end -%>
|
22
|
+
<%- if launch_configuration.placement_tenancy -%>
|
23
|
+
placement_tenancy = "<%= launch_configuration.placement_tenancy %>"
|
24
|
+
<%- end -%>
|
25
|
+
|
26
|
+
<% launch_configuration.block_device_mappings.each do |block_device| -%>
|
27
|
+
<%- if root_block_device?(block_device) -%>
|
28
|
+
root_block_device {
|
29
|
+
<%- if ebs_block_device?(block_device) -%>
|
30
|
+
volume_type = "<%= block_device.ebs.volume_type %>"
|
31
|
+
volume_size = <%= block_device.ebs.volume_size %>
|
32
|
+
<%- if block_device.ebs.iops -%>
|
33
|
+
iops = <%= block_device.ebs.iops %>
|
34
|
+
<%- end -%>
|
35
|
+
delete_on_termination = <%= block_device.ebs.delete_on_termination %>
|
36
|
+
<%- end -%>
|
37
|
+
}
|
38
|
+
|
39
|
+
<%- elsif ebs_block_device?(block_device) -%>
|
40
|
+
ebs_block_device {
|
41
|
+
device_name = "<%= block_device.device_name %>"
|
42
|
+
<%- if block_device.ebs.snapshot_id -%>
|
43
|
+
snapshot_id = "<%= block_device.ebs.snapshot_id %>"
|
44
|
+
<%- end -%>
|
45
|
+
volume_type = "<%= block_device.ebs.volume_type %>"
|
46
|
+
volume_size = <%= block_device.ebs.volume_size %>
|
47
|
+
<%- if block_device.ebs.iops -%>
|
48
|
+
iops = <%= block_device.ebs.iops %>
|
49
|
+
<%- end -%>
|
50
|
+
delete_on_termination = <%= block_device.ebs.delete_on_termination %>
|
51
|
+
<%- if block_device.ebs.encrypted -%>
|
52
|
+
encrypted = <%= block_device.ebs.encrypted %>
|
53
|
+
<%- end -%>
|
54
|
+
}
|
55
|
+
|
56
|
+
<%- elsif ephemeral_block_device?(block_device) -%>
|
57
|
+
ephemeral_block_device {
|
58
|
+
device_name = "<%= block_device.device_name %>"
|
59
|
+
virtual_name = "<%= block_device.virtual_name %>"
|
60
|
+
}
|
61
|
+
|
62
|
+
<%- end -%>
|
63
|
+
<%- end -%>
|
64
|
+
}
|
65
|
+
|
66
|
+
<%- end -%>
|
@@ -5,7 +5,7 @@ resource "aws_security_group" "<%= module_name_of(security_group) %>" {
|
|
5
5
|
vpc_id = "<%= security_group.vpc_id || '' %>"
|
6
6
|
|
7
7
|
<% dedup_permissions(security_group.ip_permissions, security_group.group_id).each do |permission| -%>
|
8
|
-
<%- security_groups = security_groups_in(permission).reject { |group_id| group_id == security_group.group_id } -%>
|
8
|
+
<%- security_groups = security_groups_in(permission, security_group).reject { |group_name| group_name == security_group.group_name }.reject { |group_id| group_id == security_group.group_id } -%>
|
9
9
|
ingress {
|
10
10
|
from_port = <%= permission.from_port || 0 %>
|
11
11
|
to_port = <%= permission.to_port || 0 %>
|
@@ -15,9 +15,7 @@ resource "aws_security_group" "<%= module_name_of(security_group) %>" {
|
|
15
15
|
<%- end -%>
|
16
16
|
<%- if permission.user_id_group_pairs.length > 0 -%>
|
17
17
|
<%- self_referenced = self_referenced_permission?(security_group, permission) -%>
|
18
|
-
<%- unless self_referenced -%>
|
19
18
|
security_groups = <%= security_groups.inspect %>
|
20
|
-
<%- end -%>
|
21
19
|
self = <%= self_referenced %>
|
22
20
|
<%- end -%>
|
23
21
|
}
|
@@ -34,9 +32,7 @@ resource "aws_security_group" "<%= module_name_of(security_group) %>" {
|
|
34
32
|
<%- end -%>
|
35
33
|
<%- if permission.user_id_group_pairs.length > 0 -%>
|
36
34
|
<%- self_referenced = self_referenced_permission?(security_group, permission) -%>
|
37
|
-
|
38
|
-
security_groups = <%= security_groups_in(permission).inspect %>
|
39
|
-
<%- end -%>
|
35
|
+
security_groups = <%= security_groups_in(permission, security_group).reject { |group_id| group_id == security_group.group_id }.inspect %>
|
40
36
|
self = <%= self_referenced %>
|
41
37
|
<%- end -%>
|
42
38
|
}
|
@@ -0,0 +1,21 @@
|
|
1
|
+
<% queues.each do |queue| -%>
|
2
|
+
resource "aws_sqs_queue" "<%= module_name_of(queue) %>" {
|
3
|
+
name = "<%= module_name_of(queue) %>"
|
4
|
+
visibility_timeout_seconds = <%= queue["VisibilityTimeout"] %>
|
5
|
+
message_retention_seconds = <%= queue["MessageRetentionPeriod"] %>
|
6
|
+
max_message_size = <%= queue["MaximumMessageSize"] %>
|
7
|
+
delay_seconds = <%= queue["DelaySeconds"] %>
|
8
|
+
receive_wait_time_seconds = <%= queue["ReceiveMessageWaitTimeSeconds"] %>
|
9
|
+
<% if queue.key? "Policy" -%>
|
10
|
+
policy = <<POLICY
|
11
|
+
<%= prettify_policy(queue["Policy"], unescape: true) %>
|
12
|
+
POLICY
|
13
|
+
<% end -%>
|
14
|
+
<% if queue.key? "RedrivePolicy" -%>
|
15
|
+
redrive_policy = <<POLICY
|
16
|
+
<%= prettify_policy(queue["RedrivePolicy"], unescape: true) %>
|
17
|
+
POLICY
|
18
|
+
<% end -%>
|
19
|
+
}
|
20
|
+
|
21
|
+
<% end -%>
|
@@ -0,0 +1,14 @@
|
|
1
|
+
<% vpn_gateways.each do |vpn_gateway| -%>
|
2
|
+
<% unless vpn_gateway.vpc_attachments.empty? -%>
|
3
|
+
resource "aws_vpn_gateway" "<%= module_name_of(vpn_gateway) %>" {
|
4
|
+
vpc_id = "<%= vpn_gateway.vpc_attachments[0].vpc_id %>"
|
5
|
+
availability_zone = "<%= vpn_gateway.availability_zone %>"
|
6
|
+
tags {
|
7
|
+
<% vpn_gateway.tags.each do |tag| -%>
|
8
|
+
"<%= tag.key %>" = "<%= tag.value %>"
|
9
|
+
<% end -%>
|
10
|
+
}
|
11
|
+
}
|
12
|
+
|
13
|
+
<% end -%>
|
14
|
+
<% end -%>
|
data/lib/terraforming/version.rb
CHANGED
data/terraforming.gemspec
CHANGED
@@ -19,17 +19,14 @@ 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.
|
23
|
-
spec.add_dependency "oj"
|
24
|
-
spec.add_dependency "ox"
|
22
|
+
spec.add_dependency "aws-sdk", "~> 2.3.0"
|
23
|
+
spec.add_dependency "oj", "~> 2.15.0"
|
24
|
+
spec.add_dependency "ox", "~> 2.4.0"
|
25
25
|
spec.add_dependency "thor"
|
26
26
|
|
27
27
|
spec.add_development_dependency "bundler", "~> 1.7"
|
28
|
-
spec.add_development_dependency "
|
29
|
-
spec.add_development_dependency "
|
30
|
-
spec.add_development_dependency "guard-rspec"
|
31
|
-
spec.add_development_dependency "rake", "~> 10.0"
|
28
|
+
spec.add_development_dependency "coveralls", "~> 0.8.13"
|
29
|
+
spec.add_development_dependency "rake"
|
32
30
|
spec.add_development_dependency "rspec", "~> 3.2"
|
33
31
|
spec.add_development_dependency "simplecov", "~> 0.11.1"
|
34
|
-
spec.add_development_dependency "terminal-notifier-guard"
|
35
32
|
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.
|
4
|
+
version: 0.8.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-05-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: aws-sdk
|
@@ -16,42 +16,42 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 2.
|
19
|
+
version: 2.3.0
|
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.
|
26
|
+
version: 2.3.0
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: oj
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - "
|
31
|
+
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
33
|
+
version: 2.15.0
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- - "
|
38
|
+
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version:
|
40
|
+
version: 2.15.0
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: ox
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- - "
|
45
|
+
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version:
|
47
|
+
version: 2.4.0
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- - "
|
52
|
+
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version:
|
54
|
+
version: 2.4.0
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: thor
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -81,35 +81,21 @@ dependencies:
|
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '1.7'
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
|
-
name:
|
84
|
+
name: coveralls
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
|
-
- - "
|
88
|
-
- !ruby/object:Gem::Version
|
89
|
-
version: '0'
|
90
|
-
type: :development
|
91
|
-
prerelease: false
|
92
|
-
version_requirements: !ruby/object:Gem::Requirement
|
93
|
-
requirements:
|
94
|
-
- - ">="
|
95
|
-
- !ruby/object:Gem::Version
|
96
|
-
version: '0'
|
97
|
-
- !ruby/object:Gem::Dependency
|
98
|
-
name: guard
|
99
|
-
requirement: !ruby/object:Gem::Requirement
|
100
|
-
requirements:
|
101
|
-
- - ">="
|
87
|
+
- - "~>"
|
102
88
|
- !ruby/object:Gem::Version
|
103
|
-
version:
|
89
|
+
version: 0.8.13
|
104
90
|
type: :development
|
105
91
|
prerelease: false
|
106
92
|
version_requirements: !ruby/object:Gem::Requirement
|
107
93
|
requirements:
|
108
|
-
- - "
|
94
|
+
- - "~>"
|
109
95
|
- !ruby/object:Gem::Version
|
110
|
-
version:
|
96
|
+
version: 0.8.13
|
111
97
|
- !ruby/object:Gem::Dependency
|
112
|
-
name:
|
98
|
+
name: rake
|
113
99
|
requirement: !ruby/object:Gem::Requirement
|
114
100
|
requirements:
|
115
101
|
- - ">="
|
@@ -122,20 +108,6 @@ dependencies:
|
|
122
108
|
- - ">="
|
123
109
|
- !ruby/object:Gem::Version
|
124
110
|
version: '0'
|
125
|
-
- !ruby/object:Gem::Dependency
|
126
|
-
name: rake
|
127
|
-
requirement: !ruby/object:Gem::Requirement
|
128
|
-
requirements:
|
129
|
-
- - "~>"
|
130
|
-
- !ruby/object:Gem::Version
|
131
|
-
version: '10.0'
|
132
|
-
type: :development
|
133
|
-
prerelease: false
|
134
|
-
version_requirements: !ruby/object:Gem::Requirement
|
135
|
-
requirements:
|
136
|
-
- - "~>"
|
137
|
-
- !ruby/object:Gem::Version
|
138
|
-
version: '10.0'
|
139
111
|
- !ruby/object:Gem::Dependency
|
140
112
|
name: rspec
|
141
113
|
requirement: !ruby/object:Gem::Requirement
|
@@ -164,20 +136,6 @@ dependencies:
|
|
164
136
|
- - "~>"
|
165
137
|
- !ruby/object:Gem::Version
|
166
138
|
version: 0.11.1
|
167
|
-
- !ruby/object:Gem::Dependency
|
168
|
-
name: terminal-notifier-guard
|
169
|
-
requirement: !ruby/object:Gem::Requirement
|
170
|
-
requirements:
|
171
|
-
- - ">="
|
172
|
-
- !ruby/object:Gem::Version
|
173
|
-
version: '0'
|
174
|
-
type: :development
|
175
|
-
prerelease: false
|
176
|
-
version_requirements: !ruby/object:Gem::Requirement
|
177
|
-
requirements:
|
178
|
-
- - ">="
|
179
|
-
- !ruby/object:Gem::Version
|
180
|
-
version: '0'
|
181
139
|
description: Export existing AWS resources to Terraform style (tf, tfstate)
|
182
140
|
email:
|
183
141
|
- dtanshi45@gmail.com
|
@@ -197,6 +155,7 @@ files:
|
|
197
155
|
- README.md
|
198
156
|
- Rakefile
|
199
157
|
- bin/terraforming
|
158
|
+
- contrib/zsh-completion/_terraforming
|
200
159
|
- lib/terraforming.rb
|
201
160
|
- lib/terraforming/cli.rb
|
202
161
|
- lib/terraforming/resource/auto_scaling_group.rb
|
@@ -218,6 +177,7 @@ files:
|
|
218
177
|
- lib/terraforming/resource/iam_user.rb
|
219
178
|
- lib/terraforming/resource/iam_user_policy.rb
|
220
179
|
- lib/terraforming/resource/internet_gateway.rb
|
180
|
+
- lib/terraforming/resource/launch_configuration.rb
|
221
181
|
- lib/terraforming/resource/network_acl.rb
|
222
182
|
- lib/terraforming/resource/network_interface.rb
|
223
183
|
- lib/terraforming/resource/rds.rb
|
@@ -228,8 +188,10 @@ files:
|
|
228
188
|
- lib/terraforming/resource/route_table_association.rb
|
229
189
|
- lib/terraforming/resource/s3.rb
|
230
190
|
- lib/terraforming/resource/security_group.rb
|
191
|
+
- lib/terraforming/resource/sqs.rb
|
231
192
|
- lib/terraforming/resource/subnet.rb
|
232
193
|
- lib/terraforming/resource/vpc.rb
|
194
|
+
- lib/terraforming/resource/vpn_gateway.rb
|
233
195
|
- lib/terraforming/template/tf/auto_scaling_group.erb
|
234
196
|
- lib/terraforming/template/tf/db_parameter_group.erb
|
235
197
|
- lib/terraforming/template/tf/db_security_group.erb
|
@@ -249,6 +211,7 @@ files:
|
|
249
211
|
- lib/terraforming/template/tf/iam_user.erb
|
250
212
|
- lib/terraforming/template/tf/iam_user_policy.erb
|
251
213
|
- lib/terraforming/template/tf/internet_gateway.erb
|
214
|
+
- lib/terraforming/template/tf/launch_configuration.erb
|
252
215
|
- lib/terraforming/template/tf/network_acl.erb
|
253
216
|
- lib/terraforming/template/tf/network_interface.erb
|
254
217
|
- lib/terraforming/template/tf/rds.erb
|
@@ -259,8 +222,10 @@ files:
|
|
259
222
|
- lib/terraforming/template/tf/route_table_association.erb
|
260
223
|
- lib/terraforming/template/tf/s3.erb
|
261
224
|
- lib/terraforming/template/tf/security_group.erb
|
225
|
+
- lib/terraforming/template/tf/sqs.erb
|
262
226
|
- lib/terraforming/template/tf/subnet.erb
|
263
227
|
- lib/terraforming/template/tf/vpc.erb
|
228
|
+
- lib/terraforming/template/tf/vpn_gateway.erb
|
264
229
|
- lib/terraforming/util.rb
|
265
230
|
- lib/terraforming/version.rb
|
266
231
|
- script/console
|