Skip to content

Commit

Permalink
Add settings and env sections. Use latest `terraform-provider-uti…
Browse files Browse the repository at this point in the history
…ls` (#12)

* Update `terraform-provider-utils` versions

* Update modules

* Updates

* Updates

* Updates

* Updates
  • Loading branch information
aknysh authored Feb 15, 2021
1 parent c55eac6 commit d8a3b9d
Show file tree
Hide file tree
Showing 39 changed files with 1,197 additions and 179 deletions.
7 changes: 7 additions & 0 deletions .github/mergify.yml
Original file line number Diff line number Diff line change
Expand Up @@ -56,3 +56,10 @@ pull_request_rules:
changes_requested: true
approved: true
message: "This Pull Request has been updated, so we're dismissing all reviews."

- name: "close Pull Requests without files changed"
conditions:
- "#files=0"
actions:
close:
message: "This pull request has been automatically closed by Mergify because there are no longer any changes."
155 changes: 102 additions & 53 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@
Terraform module that loads and processes an opinionated ["stack" configuration](#examples) from YAML sources
using the [`terraform-provider-utils`](https://github.com/cloudposse/terraform-provider-utils) Terraform provider.

It supports deep-merged variables, backend config, and remote state outputs for Terraform and helmfile components.
It supports deep-merged variables, settings, ENV variables, backend config, and remote state outputs for Terraform and helmfile components.


---
Expand Down Expand Up @@ -66,9 +66,11 @@ We literally have [*hundreds of terraform modules*][terraform_modules] that are
## Introduction


The module is composed of three sub-modules:
The module is composed of the following sub-modules:

- [vars](modules/vars) - accepts stack configuration and returns deep-merged variables for a Terraform or helmfile component.
- [settings](modules/settings) - accepts stack configuration and returns deep-merged settings for a Terraform or helmfile component.
- [env](modules/env) - accepts stack configuration and returns deep-merged ENV variables for a Terraform or helmfile component.
- [backend](modules/backend) - accepts stack configuration and returns backend config for a Terraform component.
- [remote-state](modules/remote-state) - accepts stack configuration and returns remote state outputs for a Terraform component.
The module supports `s3` and `remote` (Terraform Cloud) backends.
Expand Down Expand Up @@ -114,7 +116,7 @@ see [test](test).
For an example on how to configure remote state for Terraform components in YAML config files and then read the components outputs from the remote state,
see [examples/remote-state](examples/remote-state).

For an example on how to process `vars` and `backend` configurations for all Terraform and helmfile components for a list of stacks,
For an example on how to process `vars`, `settings`, `env` and `backend` configurations for all Terraform and helmfile components for a list of stacks,
see [examples/stacks](examples/stacks).


Expand Down Expand Up @@ -184,60 +186,107 @@ and returns variables and backend config for the Terraform component `my-vpc` fr
context = module.this.context
}
module "settings" {
source = "cloudposse/stack-config/yaml//modules/settings"
# version = "x.x.x"
stack_config_local_path = "./stacks"
stack = "my-stack"
component_type = "terraform"
component = "my-vpc"
context = module.this.context
}
module "env" {
source = "cloudposse/stack-config/yaml//modules/env"
# version = "x.x.x"
stack_config_local_path = "./stacks"
stack = "my-stack"
component_type = "terraform"
component = "my-vpc"
context = module.this.context
}
```

The example returns the following `vars` and `backend` configurations for the `my-vpc` Terraform component:
The example returns the following deep-merged `vars`, `settings`, `env`, and `backend` configurations for the `my-vpc` Terraform component:

```hcl
vars = {
"availability_zones" = [
"us-east-2a",
"us-east-2b",
"us-east-2c",
backend = {
"acl" = "bucket-owner-full-control"
"bucket" = "eg-ue2-root-tfstate"
"dynamodb_table" = "eg-ue2-root-tfstate-lock"
"encrypt" = true
"key" = "terraform.tfstate"
"region" = "us-east-2"
"role_arn" = "arn:aws:iam::xxxxxxxxxxxx:role/eg-gbl-root-terraform"
"workspace_key_prefix" = "vpc"
}
backend_type = "s3"
base_component = "vpc"
env = {
"ENV_TEST_1" = "test1_override"
"ENV_TEST_2" = "test2_override"
"ENV_TEST_3" = "test3"
"ENV_TEST_4" = "test4"
}
settings = {
"spacelift" = {
"autodeploy" = true
"branch" = "test"
"triggers" = [
"1",
"2",
]
"cidr_block" = "10.132.0.0/18"
"environment" = "ue2"
"level" = 3
"namespace" = "eg"
"param" = "param4"
"region" = "us-east-2"
"stage" = "prod"
"subnet_type_tag_key" = "example/subnet/type"
"test_map" = {
"a" = "a_override_2"
"b" = "b_override"
"c" = [
1,
2,
3,
"workspace_enabled" = true
}
"version" = 1
}
vars = {
"availability_zones" = [
"us-east-2a",
"us-east-2b",
"us-east-2c",
]
"cidr_block" = "10.132.0.0/18"
"environment" = "ue2"
"level" = 3
"namespace" = "eg"
"param" = "param4"
"region" = "us-east-2"
"stage" = "prod"
"subnet_type_tag_key" = "example/subnet/type"
"test_map" = {
"a" = "a_override_2"
"b" = "b_override"
"c" = [
1,
2,
3,
]
"map2" = {
"atr1" = 1
"atr2" = 2
"atr3" = [
"3a",
"3b",
"3c",
]
"map2" = {
"atr1" = 1
"atr2" = 2
"atr3" = [
"3a",
"3b",
"3c",
]
}
}
"var_1" = "1_override"
"var_2" = "2_override"
"var_3" = "3a"
}
"var_1" = "1_override"
"var_2" = "2_override"
"var_3" = "3a"
}
backend_type = s3
backend = {
"acl" = "bucket-owner-full-control"
"bucket" = "eg-ue2-root-tfstate"
"dynamodb_table" = "eg-ue2-root-tfstate-lock"
"encrypt" = true
"key" = "terraform.tfstate"
"region" = "us-east-2"
"role_arn" = "arn:aws:iam::xxxxxxxxxxxx:role/eg-gbl-root-terraform"
"workspace_key_prefix" = "vpc"
}
```

See [examples/complete](examples/complete) for more details.
Expand All @@ -252,7 +301,7 @@ __NOTE:__ The backend type (`s3`) and backend configuration for the components a

```hcl
module "remote_state_my_vpc" {
source = "cloudposse/stack-config/yaml"
source = "cloudposse/stack-config/yaml//modules/remote-state"
# Cloud Posse recommends pinning every module to a specific version
# version = "x.x.x"
Expand All @@ -262,7 +311,7 @@ __NOTE:__ The backend type (`s3`) and backend configuration for the components a
}
module "remote_state_eks" {
source = "cloudposse/stack-config/yaml"
source = "cloudposse/stack-config/yaml//modules/remote-state"
# Cloud Posse recommends pinning every module to a specific version
# version = "x.x.x"
Expand Down Expand Up @@ -297,13 +346,13 @@ Available targets:
| external | >= 2.0 |
| local | >= 1.3 |
| template | >= 2.2 |
| utils | >= 0.2.1 |
| utils | >= 0.3.0 |

## Providers

| Name | Version |
|------|---------|
| utils | >= 0.2.1 |
| utils | >= 0.3.0 |

## Modules

Expand All @@ -315,7 +364,7 @@ Available targets:

| Name |
|------|
| [utils_stack_config_yaml](https://registry.terraform.io/providers/cloudposse/utils/0.2.1/docs/data-sources/stack_config_yaml) |
| [utils_stack_config_yaml](https://registry.terraform.io/providers/cloudposse/utils/0.3.0/docs/data-sources/stack_config_yaml) |

## Inputs

Expand Down
Loading

0 comments on commit d8a3b9d

Please sign in to comment.