terraforming 0.1.0 → 0.1.1

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: bc34e08ee4b6f0d0723edb9f2fc4be372b3892c2
4
- data.tar.gz: c1d7da734fed9e4502ece8d0914b6283c2acc93a
3
+ metadata.gz: 732437685979fbd266b3f855c81ffb184be35856
4
+ data.tar.gz: 5f3ef26d21cab520886d5a4ebff23e2af13d5b03
5
5
  SHA512:
6
- metadata.gz: e4f61751c5ff99acda6d6b64cc7f56103b37e02aa59f0d26af7a6d36a628d78fe911b9b8e1a32f5e73ec9a7d32f46cfd846e5f9a3bdfb05867ac27aa2334220f
7
- data.tar.gz: b8183e1c9dd3b21454f3fd5a1d422c4985db24a57d25f71409e0a8761ba80921bcf0538daace8a8d4bd8402b16a8e887ac403f0a1cc47d2da674c433bd0a9d68
6
+ metadata.gz: c564d548f74b3650cf1509388cafd66bc831e705f16c881f05aa8cf5507aa93e35106f15eb5b0f74f77cbacae9f342508751417219e3ae009c94339806d6cd72
7
+ data.tar.gz: e451f2a2619e7cad7658fbfc33155fe948edb7e583fb2f4cb914b3b16d9a4dd6a444b98d08ec2301a56cb28bb876aebd2c454bb5797cbbfff864b9fa2e8d69f6
data/CHANGELOG.md CHANGED
@@ -1,3 +1,11 @@
1
+ # [v0.1.1](https://github.com/dtan4/terraforming/releases/tag/v0.1.1) (2015-07-14)
2
+
3
+ ### Resource
4
+
5
+ - AWS ElastiCache Cluster
6
+ - AWS ElastiCache Subnet Group
7
+ - AWS IAM Group Membership
8
+
1
9
  # [v0.1.0](https://github.com/dtan4/terraforming/releases/tag/v0.1.0) (2015-06-20)
2
10
 
3
11
  ### New feature
data/README.md CHANGED
@@ -8,7 +8,22 @@
8
8
  [![MIT License](http://img.shields.io/badge/license-MIT-blue.svg?style=flat)](LICENSE)
9
9
  [![Docker Repository on Quay.io](https://quay.io/repository/dtan4/terraforming/status "Docker Repository on Quay.io")](https://quay.io/repository/dtan4/terraforming)
10
10
 
11
- Import existing AWS resources into [Terraform](https://terraform.io/) style (tf, tfstate)
11
+ Export existing AWS resources to [Terraform](https://terraform.io/) style (tf, tfstate)
12
+
13
+ - [Supported version](#supported-version)
14
+ - [Installation](#installation)
15
+ - [Prerequisites](#prerequisites)
16
+ - [Usage](#usage)
17
+ - [Export tf](#export-tf)
18
+ - [Export tfstate](#export-tfstate)
19
+ - [Run as Docker container](#run-as-docker-container-)
20
+ - [Development](#development)
21
+ - [Contributing](#contributing)
22
+ - [License](#license)
23
+
24
+ ## Supported version
25
+
26
+ Ruby 2.x
12
27
 
13
28
  ## Installation
14
29
 
@@ -31,9 +46,9 @@ Or install it yourself as:
31
46
  You need to set AWS credentials.
32
47
 
33
48
  ```bash
34
- AWS_ACCESS_KEY_ID=
35
- AWS_SECRET_ACCESS_KEY=
36
- AWS_REGION=
49
+ export AWS_ACCESS_KEY_ID=XXXXXXXXXXXXXXXXXXXX
50
+ export AWS_SECRET_ACCESS_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
51
+ export AWS_DEFAULT_REGION=xx-yyyy-0
37
52
  ```
38
53
 
39
54
  ## Usage
@@ -64,7 +79,9 @@ Commands:
64
79
  terraforming vpc # VPC
65
80
  ```
66
81
 
67
- Output `.tf` style (e.g. S3 buckets):
82
+ ### Export tf
83
+
84
+ (e.g. S3 buckets):
68
85
 
69
86
  ```bash
70
87
  $ terraforming s3
@@ -82,7 +99,9 @@ resource "aws_s3_bucket" "fuga" {
82
99
  }
83
100
  ```
84
101
 
85
- To output `.tfstate` style, specify `--tfstate` option (e.g. S3 buckets):
102
+ ### Export tfstate
103
+
104
+ Specify `--tfstate` option (e.g. S3 buckets):
86
105
 
87
106
  ```bash
88
107
  $ terraforming s3 --tfstate
@@ -126,7 +145,142 @@ $ terraforming s3 --tfstate
126
145
  }
127
146
  ```
128
147
 
129
- (Probably you have to modify the output to add it to existing `terraforming.tfstate`)
148
+ If you want to merge exported tfstate to existing `terraform.tfstate`, specify `--tfstate --merge=/path/to/terraform.tfstate` option.
149
+ This option does NOT overwrite existing `terraform.tfstate`, but flush output to stdout like others.
150
+ You should copy output in stdout by hand or `pbcopy` command, and paste it to existing `terraform.tfstate`.
151
+
152
+ Existing `terraform.tfstate`:
153
+
154
+ ```bash
155
+ # /path/to/terraform.tfstate
156
+
157
+ {
158
+ "version": 1,
159
+ "serial": 88,
160
+ "remote": {
161
+ "type": "s3",
162
+ "config": {
163
+ "bucket": "terraforming-tfstate",
164
+ "key": "tf"
165
+ }
166
+ },
167
+ "modules": {
168
+ "path": [
169
+ "root"
170
+ ],
171
+ "outputs": {
172
+ },
173
+ "resources": {
174
+ "aws_elb.hogehoge": {
175
+ "type": "aws_elb",
176
+ "primary": {
177
+ "id": "hogehoge",
178
+ "attributes": {
179
+ "availability_zones.#": "2",
180
+ "connection_draining": "true",
181
+ "connection_draining_timeout": "300",
182
+ "cross_zone_load_balancing": "true",
183
+ "dns_name": "hoge-12345678.ap-northeast-1.elb.amazonaws.com",
184
+ "health_check.#": "1",
185
+ "id": "hogehoge",
186
+ "idle_timeout": "60",
187
+ "instances.#": "1",
188
+ "listener.#": "1",
189
+ "name": "hoge",
190
+ "security_groups.#": "2",
191
+ "source_security_group": "default",
192
+ "subnets.#": "2"
193
+ }
194
+ }
195
+ }
196
+ }
197
+ }
198
+ }
199
+ ```
200
+
201
+ To generate merged tfstate:
202
+
203
+ ```bash
204
+ $ terraforming s3 --tfstate --merge=/path/to/tfstate
205
+ ```
206
+
207
+ ```json
208
+ {
209
+ "version": 1,
210
+ "serial": 89,
211
+ "remote": {
212
+ "type": "s3",
213
+ "config": {
214
+ "bucket": "terraforming-tfstate",
215
+ "key": "tf"
216
+ }
217
+ },
218
+ "modules": {
219
+ "path": [
220
+ "root"
221
+ ],
222
+ "outputs": {
223
+ },
224
+ "resources": {
225
+ "aws_elb.hogehoge": {
226
+ "type": "aws_elb",
227
+ "primary": {
228
+ "id": "hogehoge",
229
+ "attributes": {
230
+ "availability_zones.#": "2",
231
+ "connection_draining": "true",
232
+ "connection_draining_timeout": "300",
233
+ "cross_zone_load_balancing": "true",
234
+ "dns_name": "hoge-12345678.ap-northeast-1.elb.amazonaws.com",
235
+ "health_check.#": "1",
236
+ "id": "hogehoge",
237
+ "idle_timeout": "60",
238
+ "instances.#": "1",
239
+ "listener.#": "1",
240
+ "name": "hoge",
241
+ "security_groups.#": "2",
242
+ "source_security_group": "default",
243
+ "subnets.#": "2"
244
+ }
245
+ }
246
+ },
247
+ "aws_s3_bucket.hoge": {
248
+ "type": "aws_s3_bucket",
249
+ "primary": {
250
+ "id": "hoge",
251
+ "attributes": {
252
+ "acl": "private",
253
+ "bucket": "hoge",
254
+ "id": "hoge"
255
+ }
256
+ }
257
+ },
258
+ "aws_s3_bucket.fuga": {
259
+ "type": "aws_s3_bucket",
260
+ "primary": {
261
+ "id": "fuga",
262
+ "attributes": {
263
+ "acl": "private",
264
+ "bucket": "fuga",
265
+ "id": "fuga"
266
+ }
267
+ }
268
+ }
269
+ }
270
+ }
271
+ }
272
+ ```
273
+
274
+ After writing exported tf and tfstate to files, execute `terraform plan` and check the result.
275
+ There should be no diff.
276
+
277
+ ```bash
278
+ $ terraform plan
279
+ No changes. Infrastructure is up-to-date. This means that Terraform
280
+ could not detect any differences between your configuration and
281
+ the real physical resources that exist. As a result, Terraform
282
+ doesn't need to do anything.
283
+ ```
130
284
 
131
285
  ## Run as Docker container [![Docker Repository on Quay.io](https://quay.io/repository/dtan4/terraforming/status "Docker Repository on Quay.io")](https://quay.io/repository/dtan4/terraforming)
132
286
 
@@ -144,7 +298,6 @@ And then run Terraforming as a Docker container:
144
298
  $ docker run \
145
299
  --rm \
146
300
  --name terraforming \
147
- -v /path/to/tf-files-dir:/app \
148
301
  -e AWS_ACCESS_KEY_ID=XXXXXXXXXXXXXXXXXXXX \
149
302
  -e AWS_SECRET_ACCESS_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx \
150
303
  -e AWS_DEFAULT_REGION=xx-yyyy-0 \
@@ -166,6 +319,6 @@ To install this gem onto your local machine, run `bundle exec rake install`. To
166
319
  4. Push to the branch (`git push origin my-new-feature`)
167
320
  5. Create a new Pull Request
168
321
 
169
- ## LICENSE
322
+ ## License
170
323
 
171
324
  [![MIT License](http://img.shields.io/badge/license-MIT-blue.svg?style=flat)](LICENSE)
@@ -23,6 +23,16 @@ module Terraforming
23
23
  execute(Terraforming::Resource::EC2, options)
24
24
  end
25
25
 
26
+ desc "ecc", "ElastiCache Cluster"
27
+ def ecc
28
+ execute(Terraforming::Resource::ElastiCacheCluster, options)
29
+ end
30
+
31
+ desc "ecsn", "ElastiCache Subnet Group"
32
+ def ecsn
33
+ execute(Terraforming::Resource::ElastiCacheSubnetGroup, options)
34
+ end
35
+
26
36
  desc "elb", "ELB"
27
37
  def elb
28
38
  execute(Terraforming::Resource::ELB, options)
@@ -33,6 +43,11 @@ module Terraforming
33
43
  execute(Terraforming::Resource::IAMGroup, options)
34
44
  end
35
45
 
46
+ desc "iamgm", "IAM Group Membership"
47
+ def iamgm
48
+ execute(Terraforming::Resource::IAMGroupMembership, options)
49
+ end
50
+
36
51
  desc "iamgp", "IAM Group Policy"
37
52
  def iamgp
38
53
  execute(Terraforming::Resource::IAMGroupPolicy, options)
@@ -123,8 +138,8 @@ module Terraforming
123
138
  def tfstate(klass, tfstate_path)
124
139
  return klass.tfstate unless tfstate_path
125
140
 
126
- base_tfstate = JSON.parse(open(tfstate_path).read)
127
- klass.tfstate(tfstate_base: base_tfstate)
141
+ tfstate_base = JSON.parse(open(tfstate_path).read)
142
+ klass.tfstate(tfstate_base: tfstate_base)
128
143
  end
129
144
  end
130
145
  end
@@ -0,0 +1,72 @@
1
+ module Terraforming
2
+ module Resource
3
+ class ElastiCacheCluster
4
+ include Terraforming::Util
5
+
6
+ def self.tf(client: Aws::ElastiCache::Client.new)
7
+ self.new(client).tf
8
+ end
9
+
10
+ def self.tfstate(client: Aws::ElastiCache::Client.new, tfstate_base: nil)
11
+ self.new(client).tfstate(tfstate_base)
12
+ end
13
+
14
+ def initialize(client)
15
+ @client = client
16
+ end
17
+
18
+ def tf
19
+ apply_template(@client, "tf/elasti_cache_cluster")
20
+ end
21
+
22
+ def tfstate(tfstate_base)
23
+ resources = cache_clusters.inject({}) do |result, cache_cluster|
24
+ attributes = {
25
+ "cache_nodes.#" => cache_cluster.cache_nodes.length.to_s,
26
+ "cluster_id" => cache_cluster.cache_cluster_id,
27
+ "engine" => cache_cluster.engine,
28
+ "engine_version" => cache_cluster.engine_version,
29
+ "id" => cache_cluster.cache_cluster_id,
30
+ "node_type" => cache_cluster.cache_node_type,
31
+ "num_cache_nodes" => "1",
32
+ "parameter_group_name" => cache_cluster.cache_parameter_group.cache_parameter_group_name,
33
+ "port" => "11211",
34
+ "security_group_ids.#" => security_group_ids_of(cache_cluster).length.to_s,
35
+ "security_group_names.#" => security_group_names_of(cache_cluster).length.to_s,
36
+ "subnet_group_name" => cache_cluster.cache_subnet_group_name,
37
+ "tags.#" => "0",
38
+ }
39
+ result["aws_elasticache_cluster.#{cache_cluster.cache_cluster_id}"] = {
40
+ "type" => "aws_elasticache_cluster",
41
+ "primary" => {
42
+ "id" => cache_cluster.cache_cluster_id,
43
+ "attributes" => attributes
44
+ }
45
+ }
46
+
47
+ result
48
+ end
49
+
50
+ generate_tfstate(resources, tfstate_base)
51
+ end
52
+
53
+ private
54
+
55
+ def cache_clusters
56
+ @client.describe_cache_clusters(show_cache_node_info: true).cache_clusters
57
+ end
58
+
59
+ def cluster_in_vpc?(cache_cluster)
60
+ cache_cluster.cache_security_groups.length == 0
61
+ end
62
+
63
+ def security_group_ids_of(cache_cluster)
64
+ cache_cluster.security_groups.map { |sg| sg.security_group_id }
65
+ end
66
+
67
+ def security_group_names_of(cache_cluster)
68
+ cache_cluster.cache_security_groups.map { |sg| sg.cache_security_group_name }
69
+ end
70
+ end
71
+ end
72
+ end
@@ -0,0 +1,54 @@
1
+ module Terraforming
2
+ module Resource
3
+ class ElastiCacheSubnetGroup
4
+ include Terraforming::Util
5
+
6
+ def self.tf(client: Aws::ElastiCache::Client.new)
7
+ self.new(client).tf
8
+ end
9
+
10
+ def self.tfstate(client: Aws::ElastiCache::Client.new, tfstate_base: nil)
11
+ self.new(client).tfstate(tfstate_base)
12
+ end
13
+
14
+ def initialize(client)
15
+ @client = client
16
+ end
17
+
18
+ def tf
19
+ apply_template(@client, "tf/elasti_cache_subnet_group")
20
+ end
21
+
22
+ def tfstate(tfstate_base)
23
+ resources = cache_subnet_groups.inject({}) do |result, cache_subnet_group|
24
+ attributes = {
25
+ "description" => cache_subnet_group.cache_subnet_group_description,
26
+ "name" => cache_subnet_group.cache_subnet_group_name,
27
+ "subnet_ids.#" => subnet_ids_of(cache_subnet_group).length.to_s,
28
+ }
29
+ result["aws_elasticache_subnet_group.#{cache_subnet_group.cache_subnet_group_name}"] = {
30
+ "type" => "aws_elasticache_subnet_group",
31
+ "primary" => {
32
+ "id" => cache_subnet_group.cache_subnet_group_name,
33
+ "attributes" => attributes
34
+ }
35
+ }
36
+
37
+ result
38
+ end
39
+
40
+ generate_tfstate(resources, tfstate_base)
41
+ end
42
+
43
+ private
44
+
45
+ def cache_subnet_groups
46
+ @client.describe_cache_subnet_groups.cache_subnet_groups
47
+ end
48
+
49
+ def subnet_ids_of(cache_subnet_group)
50
+ cache_subnet_group.subnets.map { |sn| sn.subnet_identifier }
51
+ end
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,61 @@
1
+ module Terraforming
2
+ module Resource
3
+ class IAMGroupMembership
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, tfstate_base: nil)
11
+ self.new(client).tfstate(tfstate_base)
12
+ end
13
+
14
+ def initialize(client)
15
+ @client = client
16
+ end
17
+
18
+ def tf
19
+ apply_template(@client, "tf/iam_group_membership")
20
+ end
21
+
22
+ def tfstate(tfstate_base)
23
+ resources = iam_groups.inject({}) do |result, group|
24
+ membership_name = membership_name_of(group)
25
+
26
+ attributes = {
27
+ "group"=> group.group_name,
28
+ "id" => membership_name,
29
+ "name" => membership_name,
30
+ "users.#" => group_members_of(group).length.to_s,
31
+ }
32
+ result["aws_iam_group_membership.#{group.group_name}"] = {
33
+ "type" => "aws_iam_group_membership",
34
+ "primary" => {
35
+ "id" => membership_name,
36
+ "attributes" => attributes
37
+ }
38
+ }
39
+
40
+ result
41
+ end
42
+
43
+ generate_tfstate(resources, tfstate_base)
44
+ end
45
+
46
+ private
47
+
48
+ def group_members_of(group)
49
+ @client.get_group(group_name: group.group_name).users.map { |user| user.user_name }
50
+ end
51
+
52
+ def iam_groups
53
+ @client.list_groups.groups
54
+ end
55
+
56
+ def membership_name_of(group)
57
+ "#{group.group_name}-group-membership"
58
+ end
59
+ end
60
+ end
61
+ end
@@ -0,0 +1,18 @@
1
+ <% cache_clusters.each do |cache_cluster| -%>
2
+ resource "aws_elasticache_cluster" "<%= cache_cluster.cache_cluster_id %>" {
3
+ cluster_id = "<%= cache_cluster.cache_cluster_id %>"
4
+ engine = "<%= cache_cluster.engine %>"
5
+ engine_version = "<%= cache_cluster.engine_version %>"
6
+ node_type = "<%= cache_cluster.cache_node_type %>"
7
+ num_cache_nodes = <%= cache_cluster.num_cache_nodes %>
8
+ parameter_group_name = "<%= cache_cluster.cache_parameter_group.cache_parameter_group_name %>"
9
+ port = <%= cache_cluster.configuration_endpoint.port %>
10
+ <%- if cluster_in_vpc?(cache_cluster) -%>
11
+ subnet_group_name = "<%= cache_cluster.cache_subnet_group_name %>"
12
+ security_group_ids = <%= security_group_ids_of(cache_cluster).inspect %>
13
+ <%- else -%>
14
+ security_group_names = <%= security_group_names_of(cache_cluster).inspect %>
15
+ <%- end -%>
16
+ }
17
+
18
+ <% end -%>
@@ -0,0 +1,8 @@
1
+ <% cache_subnet_groups.each do |cache_subnet_group| -%>
2
+ resource "aws_elasticache_subnet_group" "<%= cache_subnet_group.cache_subnet_group_name %>" {
3
+ name = "<%= cache_subnet_group.cache_subnet_group_name %>"
4
+ description = "<%= cache_subnet_group.cache_subnet_group_description %>"
5
+ subnet_ids = <%= subnet_ids_of(cache_subnet_group).inspect %>
6
+ }
7
+
8
+ <% end -%>
@@ -0,0 +1,8 @@
1
+ <% iam_groups.each do |group| -%>
2
+ resource "aws_iam_group_membership" "<%= group.group_name %>" {
3
+ name = "<%= membership_name_of(group) %>"
4
+ users = <%= group_members_of(group).inspect %>
5
+ group = "<%= group.group_name %>"
6
+ }
7
+
8
+ <% end -%>
@@ -1,3 +1,3 @@
1
1
  module Terraforming
2
- VERSION = "0.1.0"
2
+ VERSION = "0.1.1"
3
3
  end
data/lib/terraforming.rb CHANGED
@@ -15,8 +15,11 @@ 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/elasti_cache_cluster"
19
+ require "terraforming/resource/elasti_cache_subnet_group"
18
20
  require "terraforming/resource/elb"
19
21
  require "terraforming/resource/iam_group"
22
+ require "terraforming/resource/iam_group_membership"
20
23
  require "terraforming/resource/iam_group_policy"
21
24
  require "terraforming/resource/iam_instance_profile"
22
25
  require "terraforming/resource/iam_policy"
data/terraforming.gemspec CHANGED
@@ -9,8 +9,8 @@ Gem::Specification.new do |spec|
9
9
  spec.authors = ["Daisuke Fujita"]
10
10
  spec.email = ["dtanshi45@gmail.com"]
11
11
 
12
- spec.summary = %q{Import existing AWS resources into Terraform style (tf, tfstate)}
13
- spec.description = %q{Import existing AWS resources into Terraform style (tf, tfstate)}
12
+ spec.summary = %q{Export existing AWS resources to Terraform style (tf, tfstate)}
13
+ spec.description = %q{Export existing AWS resources to Terraform style (tf, tfstate)}
14
14
  spec.homepage = "https://github.com/dtan4/terraforming"
15
15
  spec.license = "MIT"
16
16
 
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.1.0
4
+ version: 0.1.1
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-06-19 00:00:00.000000000 Z
11
+ date: 2015-07-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: aws-sdk
@@ -164,7 +164,7 @@ dependencies:
164
164
  - - ">="
165
165
  - !ruby/object:Gem::Version
166
166
  version: '0'
167
- description: Import existing AWS resources into Terraform style (tf, tfstate)
167
+ description: Export existing AWS resources to Terraform style (tf, tfstate)
168
168
  email:
169
169
  - dtanshi45@gmail.com
170
170
  executables:
@@ -189,8 +189,11 @@ 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/elasti_cache_cluster.rb
193
+ - lib/terraforming/resource/elasti_cache_subnet_group.rb
192
194
  - lib/terraforming/resource/elb.rb
193
195
  - lib/terraforming/resource/iam_group.rb
196
+ - lib/terraforming/resource/iam_group_membership.rb
194
197
  - lib/terraforming/resource/iam_group_policy.rb
195
198
  - lib/terraforming/resource/iam_instance_profile.rb
196
199
  - lib/terraforming/resource/iam_policy.rb
@@ -210,8 +213,11 @@ files:
210
213
  - lib/terraforming/template/tf/db_security_group.erb
211
214
  - lib/terraforming/template/tf/db_subnet_group.erb
212
215
  - lib/terraforming/template/tf/ec2.erb
216
+ - lib/terraforming/template/tf/elasti_cache_cluster.erb
217
+ - lib/terraforming/template/tf/elasti_cache_subnet_group.erb
213
218
  - lib/terraforming/template/tf/elb.erb
214
219
  - lib/terraforming/template/tf/iam_group.erb
220
+ - lib/terraforming/template/tf/iam_group_membership.erb
215
221
  - lib/terraforming/template/tf/iam_group_policy.erb
216
222
  - lib/terraforming/template/tf/iam_instance_profile.erb
217
223
  - lib/terraforming/template/tf/iam_policy.erb
@@ -252,8 +258,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
252
258
  version: '0'
253
259
  requirements: []
254
260
  rubyforge_project:
255
- rubygems_version: 2.4.5
261
+ rubygems_version: 2.4.7
256
262
  signing_key:
257
263
  specification_version: 4
258
- summary: Import existing AWS resources into Terraform style (tf, tfstate)
264
+ summary: Export existing AWS resources to Terraform style (tf, tfstate)
259
265
  test_files: []
266
+ has_rdoc: