tfctl 1.1.0 → 1.1.1
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/.rubocop.yml +6 -2
- data/.travis.yml +2 -1
- data/CHANGELOG.adoc +8 -0
- data/README.adoc +32 -18
- data/docs/configuration.adoc +8 -6
- data/docs/control_tower.adoc +39 -21
- data/docs/iam_permissions.adoc +2 -2
- data/docs/project_layout.adoc +3 -3
- data/lib/tfctl/aws_org.rb +17 -15
- data/lib/tfctl/version.rb +1 -1
- data/tfctl.gemspec +4 -4
- metadata +10 -10
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b7a1d287bce54f0203c80b4814f67ddb3d5f38319796a185a69ccf1fe1b65f02
|
4
|
+
data.tar.gz: 924e81046fde7a921f66959893429c10fbcffd8a3f32e1b6257cde2935c1b5d1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 044ad7209c428aa8c1f7eaf11258089ed6ce304a2943b79739ba1b8337fbd6487f4cda758c73acfc9de35f17fc272ef98d74fe64c274ea4d5e0112bc1749329b
|
7
|
+
data.tar.gz: 22a221bb105a66c5b9512a604886eb458ff1ec2876ee8d3599f7c6c0cc5e6abb5fafd0d47aa2cd61fbc979b0ba5ca33a8f18a47a5afacfd27515ea5e333f0868
|
data/.rubocop.yml
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
---
|
2
2
|
AllCops:
|
3
|
-
TargetRubyVersion: 2.
|
3
|
+
TargetRubyVersion: 2.5
|
4
4
|
DisplayCopNames: true
|
5
5
|
|
6
6
|
Layout/IndentationWidth:
|
@@ -45,7 +45,7 @@ Metrics/BlockLength:
|
|
45
45
|
Metrics/MethodLength:
|
46
46
|
Enabled: false
|
47
47
|
|
48
|
-
|
48
|
+
Layout/LineLength:
|
49
49
|
Max: 140
|
50
50
|
|
51
51
|
Metrics/AbcSize:
|
@@ -77,3 +77,7 @@ Style/TrailingCommaInHashLiteral:
|
|
77
77
|
|
78
78
|
Style/RedundantReturn:
|
79
79
|
Enabled: false
|
80
|
+
|
81
|
+
# don't break older Rubies just because of style
|
82
|
+
Style/RedundantBegin:
|
83
|
+
Enabled: false
|
data/.travis.yml
CHANGED
data/CHANGELOG.adoc
CHANGED
@@ -1,5 +1,13 @@
|
|
1
1
|
= Changelog
|
2
2
|
|
3
|
+
== Upcoming
|
4
|
+
|
5
|
+
== 1.1.1
|
6
|
+
|
7
|
+
* fix: handle empty response from Organizations API containing children (thanks @grothja)
|
8
|
+
* chore: stopped testing on EOL Rubies 2.3 and 2.4 (but should still currently work)
|
9
|
+
* chore: dependencies minimum version bump
|
10
|
+
|
3
11
|
== 1.1.0
|
4
12
|
|
5
13
|
* feat: look for configuration in `tfctl.yaml` by default.
|
data/README.adoc
CHANGED
@@ -28,15 +28,16 @@ toc::[]
|
|
28
28
|
|
29
29
|
== Overview
|
30
30
|
|
31
|
-
|
31
|
+
`tfctl` is a small Terraform wrapper for working with multi-account AWS
|
32
32
|
infrastructures where new accounts may be created dynamically and on-demand.
|
33
33
|
|
34
|
-
It discovers accounts by reading the AWS Organizations API and can assign
|
34
|
+
It discovers accounts by reading the AWS Organizations API, and can assign
|
35
35
|
Terraform resources to multiple accounts based on the organization hierarchy.
|
36
36
|
Resources can be assigned globally, based on organization unit or to individual
|
37
|
-
accounts. It supports
|
37
|
+
accounts. It supports hierarchies of nested Organizational Units (OUs),
|
38
|
+
and helps keep your Terraform DRY.
|
38
39
|
|
39
|
-
|
40
|
+
The Scale Factory originally created tfctl to integrate Terraform with
|
40
41
|
https://aws.amazon.com/solutions/aws-landing-zone/[AWS Landing Zone] and
|
41
42
|
https://aws.amazon.com/controltower/[Control Tower] but should work with most
|
42
43
|
other ways of managing accounts in AWS Organizations.
|
@@ -57,7 +58,7 @@ other ways of managing accounts in AWS Organizations.
|
|
57
58
|
== Requirements
|
58
59
|
|
59
60
|
* Terraform >= 0.12
|
60
|
-
* Ruby >= 2.
|
61
|
+
* Ruby >= 2.4
|
61
62
|
* Accounts managed in AWS Organizations (by Landing Zone, Control Tower, some
|
62
63
|
other means)
|
63
64
|
|
@@ -65,17 +66,19 @@ other ways of managing accounts in AWS Organizations.
|
|
65
66
|
|
66
67
|
To install the latest release from RubyGems run:
|
67
68
|
|
69
|
+
[source,shell]
|
68
70
|
----
|
69
71
|
gem install tfctl
|
70
72
|
----
|
71
73
|
|
72
|
-
Alternatively you can build and install from this repo with:
|
74
|
+
Alternatively, you can build and install from this repo with:
|
73
75
|
|
76
|
+
[source,shell]
|
74
77
|
----
|
75
78
|
make install
|
76
79
|
----
|
77
80
|
|
78
|
-
==
|
81
|
+
== Documentation
|
79
82
|
|
80
83
|
* https://github.com/scalefactory/tfctl/tree/master/docs/control_tower.adoc[Control Tower quick start guide]
|
81
84
|
* https://github.com/scalefactory/tfctl/tree/master/docs/project_layout.adoc[Project layout]
|
@@ -85,11 +88,12 @@ make install
|
|
85
88
|
|
86
89
|
== Running tfctl
|
87
90
|
|
88
|
-
|
89
|
-
Terraform configuration in `.tfctl
|
91
|
+
You should run `tfctl` from the root of your project directory. It will generate
|
92
|
+
Terraform configuration in `.tfctl/` (add this to your `.gitignore`).
|
90
93
|
|
91
94
|
Anatomy of a tfctl command:
|
92
95
|
|
96
|
+
[source,shell]
|
93
97
|
----
|
94
98
|
tfctl -c CONFIG_FILE TARGET_OPTIONS -- TERRAFORM_COMMAND
|
95
99
|
----
|
@@ -102,7 +106,7 @@ tfctl -c CONFIG_FILE TARGET_OPTIONS -- TERRAFORM_COMMAND
|
|
102
106
|
options. See https://www.terraform.io/docs/commands/index.html[Terraform
|
103
107
|
commands] for details.
|
104
108
|
|
105
|
-
NOTE: You must have your AWS credentials configured before
|
109
|
+
NOTE: You must have your AWS credentials configured before you run `tfctl`, or run
|
106
110
|
it using an AWS credentials helper such as
|
107
111
|
https://github.com/99designs/aws-vault[aws-vault].
|
108
112
|
|
@@ -110,18 +114,21 @@ https://github.com/99designs/aws-vault[aws-vault].
|
|
110
114
|
|
111
115
|
Show help:
|
112
116
|
|
117
|
+
[source,shell]
|
113
118
|
----
|
114
119
|
tfctl -h
|
115
120
|
----
|
116
121
|
|
117
122
|
Show merged configuration:
|
118
123
|
|
124
|
+
[source,shell]
|
119
125
|
----
|
120
126
|
tfctl -s
|
121
127
|
----
|
122
128
|
|
123
129
|
List all discovered accounts:
|
124
130
|
|
131
|
+
[source,shell]
|
125
132
|
----
|
126
133
|
tfctl --all -l
|
127
134
|
----
|
@@ -129,49 +136,56 @@ tfctl --all -l
|
|
129
136
|
TIP: This can be narrowed down using targeting options and is a good way to
|
130
137
|
test what accounts match.
|
131
138
|
|
132
|
-
Run
|
139
|
+
Run `terraform init` across all accounts:
|
133
140
|
|
141
|
+
[source,shell]
|
134
142
|
----
|
135
143
|
tfctl --all -- init
|
136
144
|
----
|
137
145
|
|
138
|
-
|
146
|
+
Plan Terraform across all accounts in the `test` OU:
|
139
147
|
|
148
|
+
[source,shell]
|
140
149
|
----
|
141
150
|
tfctl -o test -- plan
|
142
151
|
----
|
143
152
|
|
144
|
-
|
153
|
+
Plan Terraform in `live` accounts, assuming that `live` is a child OU in multiple
|
145
154
|
organization units:
|
146
155
|
|
156
|
+
[source,shell]
|
147
157
|
----
|
148
158
|
tfctl -o '.*/live' -- plan
|
149
159
|
----
|
150
160
|
|
151
|
-
Run plan
|
161
|
+
Run a plan for an individual account:
|
152
162
|
|
163
|
+
[source,shell]
|
153
164
|
----
|
154
165
|
tfctl -a example-account - plan
|
155
166
|
----
|
156
167
|
|
157
|
-
|
168
|
+
Apply Terraform changes across all accounts:
|
158
169
|
|
170
|
+
[source,shell]
|
159
171
|
----
|
160
172
|
tfctl --all -- apply
|
161
173
|
----
|
162
174
|
|
163
|
-
|
175
|
+
Destroy Terraform-managed resources in all the `test` OU accounts:
|
164
176
|
|
177
|
+
[source,shell]
|
165
178
|
----
|
166
179
|
tfctl -o test -- destroy -auto-approve
|
167
180
|
----
|
168
181
|
|
169
182
|
Don't buffer the output:
|
170
183
|
|
184
|
+
[source,shell]
|
171
185
|
----
|
172
186
|
tfctl -a example-account -u -- plan
|
173
187
|
----
|
174
188
|
|
175
189
|
This will show output in real time. Usually output is buffered and displayed
|
176
|
-
after Terraform command finishes to make it more readable when running
|
177
|
-
multiple accounts in parallel.
|
190
|
+
after the Terraform command finishes, to make it more readable when running
|
191
|
+
across multiple accounts in parallel.
|
data/docs/configuration.adoc
CHANGED
@@ -24,8 +24,8 @@ toc::[]
|
|
24
24
|
|
25
25
|
== Overview
|
26
26
|
|
27
|
-
|
28
|
-
it with configuration specified in
|
27
|
+
`tfctl` retrieves initial account configuration from AWS Organizations and merges
|
28
|
+
it with configuration specified in YAML format (`tfctl.yaml` by default).
|
29
29
|
|
30
30
|
The configuration is merged in the following order:
|
31
31
|
|
@@ -83,14 +83,16 @@ above.
|
|
83
83
|
|
84
84
|
== Handling secrets
|
85
85
|
|
86
|
-
|
87
|
-
|
86
|
+
CAUTION: Do not commit secrets into your Terraform or tfctl configuration.
|
87
|
+
|
88
|
+
Instead, use AWS Secrets Manager and retrieve secrets in Terraform profiles using
|
89
|
+
the
|
88
90
|
https://www.terraform.io/docs/providers/aws/d/secretsmanager_secret.html[secrets
|
89
|
-
manager data source]
|
91
|
+
manager data source].
|
90
92
|
|
91
93
|
== Configuration Schema
|
92
94
|
|
93
|
-
|
95
|
+
The configuration file is validated using https://json-schema.org/[JSON Schema].
|
94
96
|
|
95
97
|
The schema is defined in
|
96
98
|
https://github.com/scalefactory/tfctl/blob/master/lib/tfctl/schema.rb[lib/tfctl/schema.rb]
|
data/docs/control_tower.adoc
CHANGED
@@ -31,7 +31,7 @@ toc::[]
|
|
31
31
|
For state tracking we're going to create a dedicated `shared-services` account
|
32
32
|
under a `mgmt` organization unit. We'll use S3 for state storage and DynamoDB
|
33
33
|
for locking. `TerraformState` IAM role will be created for cross account
|
34
|
-
access to state resources from the primary account.
|
34
|
+
access to state resources from the primary AWS account.
|
35
35
|
|
36
36
|
In the primary account we'll create a `TfctlOrgAccess` role. It gives tfctl
|
37
37
|
read only access to AWS Organizations which is used to discover accounts and
|
@@ -50,9 +50,10 @@ and provision a couple of accounts for testing.
|
|
50
50
|
|
51
51
|
Before starting you'll need:
|
52
52
|
|
53
|
-
*
|
54
|
-
*
|
55
|
-
*
|
53
|
+
* An AWS account that is part of an Organization.
|
54
|
+
* Control Tower set up in your primary AWS account.
|
55
|
+
* A user with `AdministratorAccess` privileges in your primary AWS account.
|
56
|
+
* AWS CLI tools installed on your local machine.
|
56
57
|
* Terraform 0.12 or higher.
|
57
58
|
|
58
59
|
== Configure Control Tower
|
@@ -74,6 +75,7 @@ approximately 20 mins to provision one.
|
|
74
75
|
|
75
76
|
== Install tfctl
|
76
77
|
|
78
|
+
[source,shell]
|
77
79
|
----
|
78
80
|
git clone git@github.com:scalefactory/tfctl.git
|
79
81
|
cd tfctl/ && sudo make install
|
@@ -85,17 +87,21 @@ It's assumed you have configured AWS CLI access to the primary account.
|
|
85
87
|
|
86
88
|
We'll use CloudFormation templates in `examples/bootstrap/`.
|
87
89
|
|
88
|
-
First export configuration using environment variables making sure to change to
|
89
|
-
values to suit your
|
90
|
+
First export configuration using environment variables, making sure to change to
|
91
|
+
values to suit your setup:
|
90
92
|
|
93
|
+
[source,shell]
|
91
94
|
----
|
92
|
-
|
93
|
-
export
|
95
|
+
# Change these to match your setup
|
96
|
+
export PRIMARY_ACCOUNT_ID=123456789012
|
97
|
+
export SHARED_SERVICES_ACCOUNT_ID=345678901234
|
94
98
|
export STATE_BUCKET_NAME='example-terraform-state'
|
99
|
+
export AWS_REGION=eu-west-1
|
95
100
|
----
|
96
101
|
|
97
102
|
Create the remote state resources stack set:
|
98
103
|
|
104
|
+
[source,shell]
|
99
105
|
----
|
100
106
|
cd examples/bootstrap/
|
101
107
|
|
@@ -107,31 +113,34 @@ aws cloudformation create-stack-set \
|
|
107
113
|
--execution-role-name AWSControlTowerExecution \
|
108
114
|
--administration-role-arn arn:aws:iam::${PRIMARY_ACCOUNT_ID}:role/service-role/AWSControlTowerStackSetRole \
|
109
115
|
--parameters ParameterKey=PrimaryAccountId,ParameterValue=${PRIMARY_ACCOUNT_ID} \
|
110
|
-
ParameterKey=TerraformStateBucket,ParameterValue
|
116
|
+
ParameterKey=TerraformStateBucket,ParameterValue="${STATE_BUCKET_NAME}"
|
111
117
|
----
|
112
118
|
|
113
|
-
Create a stack set instance in
|
119
|
+
Create a stack set instance in your shared services account:
|
114
120
|
|
121
|
+
[source,shell]
|
115
122
|
----
|
116
123
|
aws cloudformation create-stack-instances \
|
117
124
|
--stack-set-name TerraformState \
|
118
125
|
--accounts ${SHARED_SERVICES_ACCOUNT_ID} \
|
119
|
-
--regions
|
126
|
+
--regions ${AWS_REGION}
|
120
127
|
----
|
121
128
|
|
122
129
|
Check status:
|
123
130
|
|
131
|
+
[source,shell]
|
124
132
|
----
|
125
133
|
aws cloudformation describe-stack-instance \
|
126
134
|
--stack-set-name TerraformState \
|
127
135
|
--stack-instance-account ${SHARED_SERVICES_ACCOUNT_ID} \
|
128
|
-
--stack-instance-region
|
136
|
+
--stack-instance-region ${AWS_REGION}
|
129
137
|
----
|
130
138
|
|
131
139
|
NOTE: Initial status will be `OUTDATED`, it should change to `CURRENT` once deployed.
|
132
140
|
|
133
|
-
Deploy `TfctlOrgAccess` IAM role stack:
|
141
|
+
Deploy the `TfctlOrgAccess` IAM role stack:
|
134
142
|
|
143
|
+
[source,shell]
|
135
144
|
----
|
136
145
|
aws cloudformation create-stack \
|
137
146
|
--stack-name TfctlOrgAccess \
|
@@ -142,6 +151,7 @@ aws cloudformation create-stack \
|
|
142
151
|
|
143
152
|
Check status:
|
144
153
|
|
154
|
+
[source,shell]
|
145
155
|
----
|
146
156
|
aws cloudformation describe-stacks --stack-name TfctlOrgAccess
|
147
157
|
----
|
@@ -158,7 +168,7 @@ You need to modify the following parameters:
|
|
158
168
|
* `tf_state_bucket` - set to `$STATE_BUCKET_NAME`
|
159
169
|
* `tf_state_role_arn` - set shared services account ID
|
160
170
|
* `tfctl_role_arn` - set primary account ID
|
161
|
-
* `primary_account` - set the primary account name. You can find it
|
171
|
+
* `primary_account` - set the primary account name. You can find it through AWS Organizations in the console.
|
162
172
|
|
163
173
|
TIP: You should keep your project directory under version control.
|
164
174
|
|
@@ -169,43 +179,51 @@ and `mgmt` OUs.
|
|
169
179
|
|
170
180
|
NOTE: Run tfctl commands from the root of you project directory.
|
171
181
|
|
172
|
-
First dump the configuration to verify everything works:
|
182
|
+
First, dump the configuration to verify everything works:
|
173
183
|
|
184
|
+
[source,shell]
|
174
185
|
----
|
175
186
|
tfctl -s
|
176
187
|
----
|
177
188
|
|
178
|
-
This will not make any changes but will print out
|
189
|
+
This will not make any changes but will print out YAML containing the final,
|
179
190
|
merged configuration data. It should contain a list of discovered accounts and
|
180
191
|
their configuration.
|
181
192
|
|
182
|
-
Initialise
|
193
|
+
Initialise Terraform for all discovered accounts:
|
183
194
|
|
195
|
+
[source,shell]
|
184
196
|
----
|
185
197
|
tfctl --all -- init
|
186
198
|
----
|
187
199
|
|
188
200
|
Tfctl will run Terraform against all accounts in parallel.
|
189
201
|
|
190
|
-
|
202
|
+
`plan` the Terraform:
|
191
203
|
|
204
|
+
[source,shell]
|
192
205
|
----
|
193
206
|
tfctl --all -- plan
|
194
207
|
----
|
195
208
|
|
196
|
-
and apply:
|
209
|
+
and `apply` it:
|
197
210
|
|
211
|
+
[source,shell]
|
198
212
|
----
|
199
213
|
tfctl --all -- apply
|
200
214
|
----
|
201
215
|
|
202
|
-
To destroy created resources run:
|
203
216
|
|
217
|
+
== Clean up
|
218
|
+
|
219
|
+
To destroy created resources, run:
|
220
|
+
|
221
|
+
[source,shell]
|
204
222
|
----
|
205
223
|
tfctl --all -- destroy -auto-approve
|
206
224
|
----
|
207
225
|
|
208
|
-
That's it! You can now execute
|
226
|
+
That's it! You can now execute Terraform across your Control Tower estate.
|
209
227
|
|
210
228
|
TIP: Your project directory should be under version control excluding the
|
211
229
|
`.tfctl` directory which is automatically generated.
|
data/docs/iam_permissions.adoc
CHANGED
@@ -20,7 +20,7 @@ endif::[]
|
|
20
20
|
|
21
21
|
= IAM roles
|
22
22
|
|
23
|
-
|
23
|
+
`tfctl` usually requires three IAM roles to be configured:
|
24
24
|
|
25
25
|
* `TfctlRole` - read only access to AWS Organizations set up in the primary account.
|
26
26
|
* `TerraformStateRole` - access to remote state resources (S3, DynamoDB) in the
|
@@ -28,7 +28,7 @@ Tfctl usually requires three IAM roles to be configured:
|
|
28
28
|
* `TerraformExecutionRole` - configured in all spoke accounts and used for executing Terraform.
|
29
29
|
|
30
30
|
The user executing tfctl needs permission to assume all three roles cross
|
31
|
-
account.
|
31
|
+
account. Once these are configured, tfctl automatically assumes roles for you.
|
32
32
|
|
33
33
|
It's possible to configure different Terraform execution roles in different
|
34
34
|
spoke accounts based on OU or account names. This can be used to restrict
|
data/docs/project_layout.adoc
CHANGED
@@ -50,12 +50,12 @@ The configuration data is exposed to terraform via a profile `config` variable.
|
|
50
50
|
It also defines Terraform and tfctl configuration such as state tracking and
|
51
51
|
what IAM roles to use.
|
52
52
|
|
53
|
-
By default tfctl will use `tfctl.yaml` in
|
53
|
+
By default, tfctl will use `tfctl.yaml` in its current working directory. You
|
54
54
|
can specify a different file using `-c`. Multiple configurations are supported
|
55
55
|
in the same project directory and generated data will be stored separately for
|
56
56
|
each config file in `.tfctl/`.
|
57
57
|
|
58
|
-
== profiles
|
58
|
+
== `profiles`
|
59
59
|
|
60
60
|
Profiles are re-usable collections of resources which can be applied to
|
61
61
|
accounts. They are implemented just like usual modules but provide an
|
@@ -64,6 +64,6 @@ other data sources). Profiles often compose multiple modules and provide
|
|
64
64
|
configuration data to them. This approach makes it possible to re-use standard
|
65
65
|
modules (e.g. Terraform module registry).
|
66
66
|
|
67
|
-
== modules
|
67
|
+
== `modules`
|
68
68
|
|
69
69
|
Standard Terraform modules.
|
data/lib/tfctl/aws_org.rb
CHANGED
@@ -71,23 +71,25 @@ module Tfctl
|
|
71
71
|
@aws_org_client.list_children(
|
72
72
|
child_type: 'ORGANIZATIONAL_UNIT',
|
73
73
|
parent_id: parent_id,
|
74
|
-
).
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
74
|
+
).each do |resp|
|
75
|
+
resp.children.each do |child|
|
76
|
+
|
77
|
+
begin
|
78
|
+
ou = @aws_org_client.describe_organizational_unit(
|
79
|
+
organizational_unit_id: child.id,
|
80
|
+
).organizational_unit
|
81
|
+
rescue Aws::Organizations::Errors::TooManyRequestsException
|
82
|
+
# FIXME: - use logger
|
83
|
+
puts 'AWS Organizations: too many requests. Retrying in 5 secs.'
|
84
|
+
sleep 5
|
85
|
+
retries += 1
|
86
|
+
retry if retries < 10
|
87
|
+
end
|
87
88
|
|
88
|
-
|
89
|
+
ou_name = parent_name == :root ? ou.name.to_sym : "#{parent_name}/#{ou.name}".to_sym
|
89
90
|
|
90
|
-
|
91
|
+
output[ou_name] = ou.id
|
92
|
+
end
|
91
93
|
end
|
92
94
|
output
|
93
95
|
end
|
data/lib/tfctl/version.rb
CHANGED
data/tfctl.gemspec
CHANGED
@@ -25,12 +25,12 @@ Gem::Specification.new do |spec|
|
|
25
25
|
|
26
26
|
# Think when adding new dependencies. Is it really necessary?
|
27
27
|
# "The things you own end up owning you" etc.
|
28
|
-
spec.add_dependency 'aws-sdk-organizations', '~> 1.
|
28
|
+
spec.add_dependency 'aws-sdk-organizations', '~> 1.40'
|
29
29
|
spec.add_dependency 'json_schemer', '~> 0.2'
|
30
|
-
spec.add_dependency 'parallel', '~> 1.
|
30
|
+
spec.add_dependency 'parallel', '~> 1.19'
|
31
31
|
spec.add_dependency 'terminal-table', '~> 1.8'
|
32
32
|
|
33
33
|
spec.add_development_dependency 'guard-rspec', '~> 4.7'
|
34
|
-
spec.add_development_dependency 'rspec', '~> 3.
|
35
|
-
spec.add_development_dependency 'rubocop', '~> 0.
|
34
|
+
spec.add_development_dependency 'rspec', '~> 3.9'
|
35
|
+
spec.add_development_dependency 'rubocop', '~> 0.84'
|
36
36
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tfctl
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.1.
|
4
|
+
version: 1.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andrew Wasilczuk
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-05-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: aws-sdk-organizations
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '1.
|
19
|
+
version: '1.40'
|
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: '1.
|
26
|
+
version: '1.40'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: json_schemer
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -44,14 +44,14 @@ dependencies:
|
|
44
44
|
requirements:
|
45
45
|
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: '1.
|
47
|
+
version: '1.19'
|
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: '1.
|
54
|
+
version: '1.19'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: terminal-table
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -86,28 +86,28 @@ dependencies:
|
|
86
86
|
requirements:
|
87
87
|
- - "~>"
|
88
88
|
- !ruby/object:Gem::Version
|
89
|
-
version: '3.
|
89
|
+
version: '3.9'
|
90
90
|
type: :development
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
94
|
- - "~>"
|
95
95
|
- !ruby/object:Gem::Version
|
96
|
-
version: '3.
|
96
|
+
version: '3.9'
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
98
|
name: rubocop
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
100
100
|
requirements:
|
101
101
|
- - "~>"
|
102
102
|
- !ruby/object:Gem::Version
|
103
|
-
version: '0.
|
103
|
+
version: '0.84'
|
104
104
|
type: :development
|
105
105
|
prerelease: false
|
106
106
|
version_requirements: !ruby/object:Gem::Requirement
|
107
107
|
requirements:
|
108
108
|
- - "~>"
|
109
109
|
- !ruby/object:Gem::Version
|
110
|
-
version: '0.
|
110
|
+
version: '0.84'
|
111
111
|
description:
|
112
112
|
email:
|
113
113
|
- akw@scalefactory.com
|