tfctl 1.4.0 → 1.5.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3a7ca446d4435cb6780d2b8018e89c8f7b981a247d249ff3fe8083b94edd66ac
4
- data.tar.gz: bc7f96ea1cb77fb6366453f4e268e55be5c398e939002f382223c94e09bccbf0
3
+ metadata.gz: 6a629291d80ced92fb46ec555c3eb0023b5b28defd031e457719f76a30bf9127
4
+ data.tar.gz: 2be23cc36e785f7fdae92c3717a7808b070549737682ecc26b02779b9cdc6489
5
5
  SHA512:
6
- metadata.gz: 777d4fd03430d1d54bcf822f3f4087c7e0c55374d69167487057201ef20132abe5de5c2b949cfa33aa1d48c346a9e0cd819db8193af5a8803dacb7d3988e526e
7
- data.tar.gz: 5cc2a820f7930d930efc43c8eab98e9b825e6d1cf48390ca929f01b4136cdbd33509978a31e16f5f4956c458e007bc6dc759e86ee9305b4f14d21c77f267d8ab
6
+ metadata.gz: 1a032960fc4809364bbe28cb85210713bc777b22d18c0041748c300c1e0a25fd01b4eb06bc242bfb880af10f3215c0776916ff32d80a40244d850eedaf514708
7
+ data.tar.gz: fb9337a42296df0fc17afe77f75cdb5a94c0d1569f94094d8b39d54e1e1b3beab1ba50976cafdebe90cacec5daac8e492ff610be2dd2f206ecbe0bb39f396e3c
data/.bundle/config CHANGED
@@ -1,3 +1,4 @@
1
1
  ---
2
2
  BUNDLE_PATH: "vendor/bundle"
3
3
  BUNDLE_BIN: "vendor/bin"
4
+ BUNDLE_WITH: "developement"
@@ -1,6 +1,9 @@
1
1
  name: Linting
2
2
 
3
- on: [push]
3
+ on:
4
+ push:
5
+ pull_request:
6
+ branches: [ master ]
4
7
 
5
8
  jobs:
6
9
  lint:
@@ -27,11 +27,10 @@ jobs:
27
27
  env:
28
28
  GEM_HOST_API_KEY: "${{secrets.RUBYGEMS_AUTH_TOKEN}}"
29
29
  - name: Release on GitHub
30
- uses: actions/create-release@v1
31
- env:
32
- GITHUB_TOKEN: "${{ secrets.GITHUB_TOKEN }}"
30
+ uses: ncipollo/release-action@v1
33
31
  with:
32
+ body: 'See [CHANGELOG](https://github.com/scalefactory/tfctl/blob/master/CHANGELOG.adoc) for details.'
33
+ token: "${{ secrets.GITHUB_TOKEN }}"
34
34
  draft: false
35
35
  prerelease: false
36
- release_name: 'Release ${{ github.ref }}'
37
- tag_name: '${{ github.ref }}'
36
+ artifacts: pkg/*.gem
data/CHANGELOG.adoc CHANGED
@@ -1,5 +1,13 @@
1
1
  = Changelog
2
2
 
3
+ == 1.5.0
4
+
5
+ * feat: support for setting default tags at AWS provider level. (Thanks @patrickli)
6
+ For details see: https://www.hashicorp.com/blog/default-tags-in-the-terraform-aws-provider
7
+ * feat: new `tf_state_prefix` config parameter. (Thanks @patrickli)
8
+ Allows setting an path prefix for state files stored in S3.
9
+ * feat: print version number in output log
10
+
3
11
  == 1.4.0
4
12
 
5
13
  * feat: support yaml anchors and aliases in configuration file.
data/README.adoc CHANGED
@@ -20,7 +20,8 @@ endif::[]
20
20
 
21
21
  = tfctl
22
22
 
23
- image:https://travis-ci.com/scalefactory/tfctl.svg?branch=master["Build Status", link="https://travis-ci.com/scalefactory/tfctl"]
23
+ image:https://github.com/scalefactory/tfctl/actions/workflows/linter.yml/badge.svg["Linter", link="https://github.com/scalefactory/tfctl/actions/workflows/linter.yml"]
24
+ image:https://github.com/scalefactory/tfctl/actions/workflows/test.yml/badge.svg["Tests", link="https://github.com/scalefactory/tfctl/actions/workflows/test.yml"]
24
25
  image:https://badge.fury.io/rb/tfctl.svg["Gem Version", link="https://badge.fury.io/rb/tfctl"]
25
26
  image:https://img.shields.io/badge/terraform-0.12-blue.svg["Terraform 0.12", link="https://img.shields.io/badge/terraform-0.12-blue"]
26
27
 
data/RELEASING.adoc CHANGED
@@ -6,8 +6,14 @@ releasing a new gem version.
6
6
  == Process
7
7
 
8
8
  * Smoke test in SF test accounts: https://github.com/scalefactory/tfctl-test
9
- * Bump version in `lib/tfctl/version.rb`
10
- * Update `CHANGELOG.adoc`
11
- * Commit
12
- * Create a new GitHub release and version tag using format: vX.X.X
13
- * TravisCI will build and release the gem automatically: https://travis-ci.org/github/scalefactory/tfctl
9
+ * Bump version in `lib/tfctl/version.rb`.
10
+ * Update `CHANGELOG.adoc`.
11
+ * Commit.
12
+ * Tag the release using format: vX.X.X and push the tag.
13
+
14
+ ----
15
+ git tag vX.X.X
16
+ git push origin vX.X.X
17
+ ----
18
+
19
+ * GitHub actions will build and release the gem and create a GitHub release automatically.
data/bin/tfctl CHANGED
@@ -138,7 +138,7 @@ begin
138
138
  log_level = options[:debug] ? Logger::DEBUG : Logger::INFO
139
139
  log = Tfctl::Logger.new(log_level)
140
140
 
141
- log.info 'tfctl running'
141
+ log.info "tfctl #{Tfctl::VERSION} running"
142
142
 
143
143
  config_name = File.basename(options[:config_file]).chomp('.yaml')
144
144
  config_name = 'default' if config_name == 'tfctl'
@@ -13,6 +13,7 @@
13
13
  #
14
14
 
15
15
  tf_state_bucket: 'CHANGEME'
16
+ # tf_state_prefix: ''
16
17
  tf_state_dynamodb_table: 'terraform-lock'
17
18
  tf_state_region: 'eu-west-1'
18
19
  # Role for accessing state resources
@@ -22,6 +23,7 @@ aws_provider_version: '>= 2.14'
22
23
  # Role used by tfctl to retrieve data from AWS Organizations
23
24
  # Has to be set up in the primary org account
24
25
  tfctl_role_arn: 'arn:aws:iam::PRIMARY_ACCOUNT_ID:role/TfctlRole'
26
+ # default_tags: {}
25
27
 
26
28
  #
27
29
  # Data
@@ -16,6 +16,7 @@ module Tfctl
16
16
 
17
17
  def make(account:, config:)
18
18
  target_dir = "#{PROJECT_ROOT}/.tfctl/#{config[:config_name]}/#{account[:name]}"
19
+ tf_state_prefix = config.fetch(:tf_state_prefix, '').delete_suffix('/')
19
20
  tf_version = config.fetch(:tf_required_version, '>= 0.12.29')
20
21
  aws_provider_version = config.fetch(:aws_provider_version, '>= 2.14')
21
22
 
@@ -33,7 +34,7 @@ module Tfctl
33
34
  'backend' => {
34
35
  's3' => {
35
36
  'bucket' => config[:tf_state_bucket],
36
- 'key' => "#{account[:name]}/tfstate",
37
+ 'key' => [tf_state_prefix, account[:name], 'tfstate'].join('/').delete_prefix('/'),
37
38
  'region' => config[:tf_state_region],
38
39
  'role_arn' => config[:tf_state_role_arn],
39
40
  'dynamodb_table' => config[:tf_state_dynamodb_table],
@@ -47,10 +48,13 @@ module Tfctl
47
48
  provider_block = {
48
49
  'provider' => {
49
50
  'aws' => {
50
- 'region' => account[:region],
51
- 'assume_role' => {
51
+ 'region' => account[:region],
52
+ 'assume_role' => {
52
53
  'role_arn' => "arn:aws:iam::#{account[:id]}:role/#{account[:tf_execution_role]}",
53
54
  },
55
+ 'default_tags' => {
56
+ 'tags' => config.fetch(:default_tags, {}),
57
+ },
54
58
  },
55
59
  },
56
60
  }
data/lib/tfctl/schema.rb CHANGED
@@ -34,6 +34,7 @@ module Tfctl
34
34
  'type' => 'object',
35
35
  'properties' => {
36
36
  'tf_state_bucket' => { 'type' => 'string' },
37
+ 'tf_state_prefix' => { 'type' => 'string' },
37
38
  'tf_state_role_arn' => {
38
39
  'type' => 'string',
39
40
  'pattern' => iam_arn_pattern,
@@ -48,6 +49,7 @@ module Tfctl
48
49
  },
49
50
  'data' => { 'type' => 'object' },
50
51
  'exclude_accounts' => { 'type' => 'array' },
52
+ 'default_tags' => { 'type' => 'object' },
51
53
  'organization_root' => org_schema,
52
54
  'organization_units' => org_schema,
53
55
  'account_overrides' => org_schema,
data/lib/tfctl/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Tfctl
4
- VERSION = '1.4.0'
4
+ VERSION = '1.5.0'
5
5
  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.4.0
4
+ version: 1.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew Wasilczuk
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-06-23 00:00:00.000000000 Z
11
+ date: 2021-06-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: aws-sdk-organizations