Skip to content

Commit 9193eb7

Browse files
authored
Generate readme for submodules (#109)
1 parent d5c8b4a commit 9193eb7

9 files changed

Lines changed: 678 additions & 5 deletions

File tree

README.md

Lines changed: 43 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,11 @@
22

33
<!-- markdownlint-disable -->
44
<a href="https://cpco.io/homepage"><img src="https://github.com/cloudposse/terraform-yaml-stack-config/blob/main/.github/banner.png?raw=true" alt="Project Banner"/></a><br/>
5-
<p align="right">
6-
<a href="https://github.com/cloudposse/terraform-yaml-stack-config/releases/latest"><img src="https://img.shields.io/github/release/cloudposse/terraform-yaml-stack-config.svg?style=for-the-badge" alt="Latest Release"/></a><a href="https://github.com/cloudposse/terraform-yaml-stack-config/commits"><img src="https://img.shields.io/github/last-commit/cloudposse/terraform-yaml-stack-config.svg?style=for-the-badge" alt="Last Updated"/></a><a href="https://cloudposse.com/slack"><img src="https://slack.cloudposse.com/for-the-badge.svg" alt="Slack Community"/></a></p>
5+
6+
7+
<p align="right"><a href="https://github.com/cloudposse/terraform-yaml-stack-config/releases/latest"><img src="https://img.shields.io/github/release/cloudposse/terraform-yaml-stack-config.svg?style=for-the-badge" alt="Latest Release"/></a><a href="https://github.com/cloudposse/terraform-yaml-stack-config/commits"><img src="https://img.shields.io/github/last-commit/cloudposse/terraform-yaml-stack-config.svg?style=for-the-badge" alt="Last Updated"/></a><a href="https://cloudposse.com/slack"><img src="https://slack.cloudposse.com/for-the-badge.svg" alt="Slack Community"/></a><a href="https://cloudposse.com/support/"><img src="https://img.shields.io/badge/Get_Support-success.svg?style=for-the-badge" alt="Get Support"/></a>
8+
9+
</p>
710
<!-- markdownlint-restore -->
811

912
<!--
@@ -15,8 +18,8 @@
1518
**
1619
** This file was automatically generated by the `cloudposse/build-harness`.
1720
** 1) Make all changes to `README.yaml`
18-
** 2) Run `make init` (you only need to do this once)
19-
** 3) Run`make readme` to rebuild this file.
21+
** 2) Install [atmos](https://atmos.tools/install/) (you only need to do this once)
22+
** 3) Run`atmos readme` to rebuild this file.
2023
**
2124
** (We maintain HUNDREDS of open source projects. This is how we maintain our sanity.)
2225
**
@@ -47,6 +50,7 @@ It supports deep-merged variables, settings, ENV variables, backend config, remo
4750

4851
## Introduction
4952

53+
5054
The module is composed of the following sub-modules:
5155

5256
- [vars](modules/vars) - accepts stack configuration and returns deep-merged variables for a Terraform or helmfile component.
@@ -85,6 +89,7 @@ see [examples/stacks](examples/stacks).
8589

8690
## Examples
8791

92+
8893
Here's an example of a stack configuration file:
8994

9095
```yaml
@@ -321,7 +326,8 @@ See [examples/remote-state](examples/remote-state) for more details.
321326
> - **Customer Workshops.** Engage with our team in weekly workshops, gaining insights and strategies to continuously improve and innovate.
322327
>
323328
> <a href="https://cpco.io/commercial-support?utm_source=github&utm_medium=readme&utm_campaign=cloudposse/terraform-yaml-stack-config&utm_content=commercial_support"><img alt="Request Quote" src="https://img.shields.io/badge/request%20quote-success.svg?style=for-the-badge"/></a>
324-
> </details>
329+
>
330+
</details>
325331

326332

327333

@@ -441,6 +447,38 @@ In general, PRs are welcome. We follow the typical "fork-and-pull" Git workflow.
441447

442448
**NOTE:** Be sure to merge the latest changes from "upstream" before making a pull request!
443449

450+
451+
## Running Terraform Tests
452+
453+
We use [Atmos](https://atmos.tools) to streamline how Terraform tests are run. It centralizes configuration and wraps common test workflows with easy-to-use commands.
454+
455+
All tests are located in the [`test/`](test) folder.
456+
457+
Under the hood, tests are powered by Terratest together with our internal [Test Helpers](https://github.com/cloudposse/test-helpers) library, providing robust infrastructure validation.
458+
459+
Setup dependencies:
460+
- Install Atmos ([installation guide](https://atmos.tools/install/))
461+
- Install Go [1.24+ or newer](https://go.dev/doc/install)
462+
- Install Terraform or OpenTofu
463+
464+
To run tests:
465+
466+
- Run all tests:
467+
```sh
468+
atmos test run
469+
```
470+
- Clean up test artifacts:
471+
```sh
472+
atmos test clean
473+
```
474+
- Explore additional test options:
475+
```sh
476+
atmos test --help
477+
```
478+
The configuration for test commands is centrally managed. To review what's being imported, see the [`atmos.yaml`](https://raw.githubusercontent.com/cloudposse/.github/refs/heads/main/.github/atmos/terraform-module.yaml) file.
479+
480+
Learn more about our [automated testing in our documentation](https://docs.cloudposse.com/community/contribute/automated-testing/) or implementing [custom commands](https://atmos.tools/core-concepts/custom-commands/) with atmos.
481+
444482
### 🌎 Slack Community
445483

446484
Join our [Open Source Community](https://cpco.io/slack?utm_source=github&utm_medium=readme&utm_campaign=cloudposse/terraform-yaml-stack-config&utm_content=slack) on Slack. It's **FREE** for everyone! Our "SweetOps" community is where you get to talk with others who share a similar vision for how to rollout and manage infrastructure. This is the best place to talk shop, ask questions, solicit feedback, and work together as a community to build totally *sweet* infrastructure.

atmos.yaml

Lines changed: 160 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,3 +10,163 @@
1010
# Import shared configuration used by all modules
1111
import:
1212
- https://raw.githubusercontent.com/cloudposse/.github/refs/heads/main/.github/atmos/terraform-module.yaml
13+
14+
docs:
15+
generate:
16+
readme-submodule-backend:
17+
base-dir: ./
18+
input:
19+
- readme: "./modules/backend/README.md"
20+
- get_support: true
21+
template: "https://raw.githubusercontent.com/cloudposse/.github/refs/heads/main/atmos.README.md.submodule.gotmpl"
22+
output: "./modules/backend/README.md"
23+
terraform:
24+
source: ./modules/backend
25+
enabled: true
26+
format: "markdown table"
27+
show_providers: false
28+
show_inputs: true
29+
show_outputs: true
30+
sort_by: "name"
31+
hide_empty: false
32+
indent_level: 2
33+
34+
readme-submodule-env:
35+
base-dir: ./
36+
input:
37+
- readme: "./modules/env/README.md"
38+
- get_support: true
39+
template: "https://raw.githubusercontent.com/cloudposse/.github/refs/heads/main/atmos.README.md.submodule.gotmpl"
40+
output: "./modules/env/README.md"
41+
terraform:
42+
source: ./modules/env
43+
enabled: true
44+
format: "markdown table"
45+
show_providers: false
46+
show_inputs: true
47+
show_outputs: true
48+
sort_by: "name"
49+
hide_empty: false
50+
indent_level: 2
51+
52+
readme-submodule-remote-state:
53+
base-dir: ./
54+
input:
55+
- readme: "./modules/remote-state/README.md"
56+
- get_support: true
57+
template: "https://raw.githubusercontent.com/cloudposse/.github/refs/heads/main/atmos.README.md.submodule.gotmpl"
58+
output: "./modules/remote-state/README.md"
59+
terraform:
60+
source: ./modules/remote-state
61+
enabled: true
62+
format: "markdown table"
63+
show_providers: false
64+
show_inputs: true
65+
show_outputs: true
66+
sort_by: "name"
67+
hide_empty: false
68+
indent_level: 2
69+
70+
readme-submodule-settings:
71+
base-dir: ./
72+
input:
73+
- readme: "./modules/settings/README.md"
74+
- get_support: true
75+
template: "https://raw.githubusercontent.com/cloudposse/.github/refs/heads/main/atmos.README.md.submodule.gotmpl"
76+
output: "./modules/settings/README.md"
77+
terraform:
78+
source: ./modules/settings
79+
enabled: true
80+
format: "markdown table"
81+
show_providers: false
82+
show_inputs: true
83+
show_outputs: true
84+
sort_by: "name"
85+
hide_empty: false
86+
indent_level: 2
87+
88+
readme-submodule-spacelift:
89+
base-dir: ./
90+
input:
91+
- readme: "./modules/spacelift/README.md"
92+
- get_support: true
93+
template: "https://raw.githubusercontent.com/cloudposse/.github/refs/heads/main/atmos.README.md.submodule.gotmpl"
94+
output: "./modules/spacelift/README.md"
95+
terraform:
96+
source: ./modules/spacelift
97+
enabled: true
98+
format: "markdown table"
99+
show_providers: false
100+
show_inputs: true
101+
show_outputs: true
102+
sort_by: "name"
103+
hide_empty: false
104+
indent_level: 2
105+
106+
readme-submodule-stack:
107+
base-dir: ./
108+
input:
109+
- readme: "./modules/stack/README.md"
110+
- get_support: true
111+
template: "https://raw.githubusercontent.com/cloudposse/.github/refs/heads/main/atmos.README.md.submodule.gotmpl"
112+
output: "./modules/stack/README.md"
113+
terraform:
114+
source: ./modules/stack
115+
enabled: true
116+
format: "markdown table"
117+
show_providers: false
118+
show_inputs: true
119+
show_outputs: true
120+
sort_by: "name"
121+
hide_empty: false
122+
indent_level: 2
123+
124+
readme-submodule-vars:
125+
base-dir: ./
126+
input:
127+
- readme: "./modules/vars/README.md"
128+
- get_support: true
129+
template: "https://raw.githubusercontent.com/cloudposse/.github/refs/heads/main/atmos.README.md.submodule.gotmpl"
130+
output: "./modules/vars/README.md"
131+
terraform:
132+
source: ./modules/vars
133+
enabled: true
134+
format: "markdown table"
135+
show_providers: false
136+
show_inputs: true
137+
show_outputs: true
138+
sort_by: "name"
139+
hide_empty: false
140+
indent_level: 2
141+
142+
143+
commands:
144+
- name: readme
145+
steps:
146+
- "atmos docs generate readme"
147+
- "atmos docs generate readme-submodule-backend"
148+
- "atmos docs generate readme-submodule-env"
149+
- "atmos docs generate readme-submodule-remote-state"
150+
- "atmos docs generate readme-submodule-settings"
151+
- "atmos docs generate readme-submodule-spacelift"
152+
- "atmos docs generate readme-submodule-stack"
153+
- "atmos docs generate readme-submodule-vars"
154+
155+
- name: test
156+
commands:
157+
- name: "init"
158+
description: Initialize tests
159+
steps:
160+
- "make -C test/src init"
161+
162+
- name: "run"
163+
description: Run tests
164+
steps:
165+
- "cd test/src && go mod tidy"
166+
- "cd test/src && go test -v -timeout 60m"
167+
168+
- name: "clean"
169+
description: Clean tests
170+
steps:
171+
- "make -C test/src clean"
172+
- "rm -rf examples/*/.terraform examples/*/.terraform.lock.hcl"

modules/backend/README.md

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,3 +37,71 @@ The example returns the following `backend` configuration:
3737
```
3838

3939
See [examples/complete](../../examples/complete) for more details.
40+
41+
42+
<!-- BEGINNING OF PRE-COMMIT-TERRAFORM DOCS HOOK -->
43+
<!-- markdownlint-disable -->
44+
## Requirements
45+
46+
| Name | Version |
47+
|------|---------|
48+
| <a name="requirement_terraform"></a> [terraform](#requirement\_terraform) | >= 0.14.0 |
49+
| <a name="requirement_external"></a> [external](#requirement\_external) | >= 2.0 |
50+
| <a name="requirement_local"></a> [local](#requirement\_local) | >= 1.3 |
51+
| <a name="requirement_utils"></a> [utils](#requirement\_utils) | >= 1.7.1 |
52+
53+
## Providers
54+
55+
| Name | Version |
56+
|------|---------|
57+
| <a name="provider_utils"></a> [utils](#provider\_utils) | >= 1.7.1 |
58+
59+
## Modules
60+
61+
| Name | Source | Version |
62+
|------|--------|---------|
63+
| <a name="module_always"></a> [always](#module\_always) | cloudposse/label/null | 0.25.0 |
64+
65+
## Resources
66+
67+
| Name | Type |
68+
|------|------|
69+
| [utils_component_config.config](https://registry.terraform.io/providers/cloudposse/utils/latest/docs/data-sources/component_config) | data source |
70+
71+
## Inputs
72+
73+
| Name | Description | Type | Default | Required |
74+
|------|-------------|------|---------|:--------:|
75+
| <a name="input_additional_tag_map"></a> [additional\_tag\_map](#input\_additional\_tag\_map) | Additional key-value pairs to add to each map in `tags_as_list_of_maps`. Not added to `tags` or `id`.<br/>This is for some rare cases where resources want additional configuration of tags<br/>and therefore take a list of maps with tag key, value, and additional configuration. | `map(string)` | `{}` | no |
76+
| <a name="input_atmos_base_path"></a> [atmos\_base\_path](#input\_atmos\_base\_path) | atmos base path to components and stacks | `string` | `null` | no |
77+
| <a name="input_atmos_cli_config_path"></a> [atmos\_cli\_config\_path](#input\_atmos\_cli\_config\_path) | atmos CLI config path | `string` | `null` | no |
78+
| <a name="input_attributes"></a> [attributes](#input\_attributes) | ID element. Additional attributes (e.g. `workers` or `cluster`) to add to `id`,<br/>in the order they appear in the list. New attributes are appended to the<br/>end of the list. The elements of the list are joined by the `delimiter`<br/>and treated as a single ID element. | `list(string)` | `[]` | no |
79+
| <a name="input_component"></a> [component](#input\_component) | Component | `string` | n/a | yes |
80+
| <a name="input_context"></a> [context](#input\_context) | Single object for setting entire context at once.<br/>See description of individual variables for details.<br/>Leave string and numeric variables as `null` to use default value.<br/>Individual variable settings (non-null) override settings in context object,<br/>except for attributes, tags, and additional\_tag\_map, which are merged. | `any` | <pre>{<br/> "additional_tag_map": {},<br/> "attributes": [],<br/> "delimiter": null,<br/> "descriptor_formats": {},<br/> "enabled": true,<br/> "environment": null,<br/> "id_length_limit": null,<br/> "label_key_case": null,<br/> "label_order": [],<br/> "label_value_case": null,<br/> "labels_as_tags": [<br/> "unset"<br/> ],<br/> "name": null,<br/> "namespace": null,<br/> "regex_replace_chars": null,<br/> "stage": null,<br/> "tags": {},<br/> "tenant": null<br/>}</pre> | no |
81+
| <a name="input_delimiter"></a> [delimiter](#input\_delimiter) | Delimiter to be used between ID elements.<br/>Defaults to `-` (hyphen). Set to `""` to use no delimiter at all. | `string` | `null` | no |
82+
| <a name="input_descriptor_formats"></a> [descriptor\_formats](#input\_descriptor\_formats) | Describe additional descriptors to be output in the `descriptors` output map.<br/>Map of maps. Keys are names of descriptors. Values are maps of the form<br/>`{<br/> format = string<br/> labels = list(string)<br/>}`<br/>(Type is `any` so the map values can later be enhanced to provide additional options.)<br/>`format` is a Terraform format string to be passed to the `format()` function.<br/>`labels` is a list of labels, in order, to pass to `format()` function.<br/>Label values will be normalized before being passed to `format()` so they will be<br/>identical to how they appear in `id`.<br/>Default is `{}` (`descriptors` output will be empty). | `any` | `{}` | no |
83+
| <a name="input_env"></a> [env](#input\_env) | Map of ENV vars in the format `key=value`. These ENV vars will be set in the `utils` provider before executing the data source | `map(string)` | `null` | no |
84+
| <a name="input_environment"></a> [environment](#input\_environment) | ID element. Usually used for region e.g. 'uw2', 'us-west-2', OR role 'prod', 'staging', 'dev', 'UAT' | `string` | `null` | no |
85+
| <a name="input_id_length_limit"></a> [id\_length\_limit](#input\_id\_length\_limit) | Limit `id` to this many characters (minimum 6).<br/>Set to `0` for unlimited length.<br/>Set to `null` for keep the existing setting, which defaults to `0`.<br/>Does not affect `id_full`. | `number` | `null` | no |
86+
| <a name="input_ignore_errors"></a> [ignore\_errors](#input\_ignore\_errors) | Set to true to ignore errors from the 'utils' provider (if the component is not found in the stack) | `bool` | `false` | no |
87+
| <a name="input_label_key_case"></a> [label\_key\_case](#input\_label\_key\_case) | Controls the letter case of the `tags` keys (label names) for tags generated by this module.<br/>Does not affect keys of tags passed in via the `tags` input.<br/>Possible values: `lower`, `title`, `upper`.<br/>Default value: `title`. | `string` | `null` | no |
88+
| <a name="input_label_order"></a> [label\_order](#input\_label\_order) | The order in which the labels (ID elements) appear in the `id`.<br/>Defaults to ["namespace", "environment", "stage", "name", "attributes"].<br/>You can omit any of the 6 labels ("tenant" is the 6th), but at least one must be present. | `list(string)` | `null` | no |
89+
| <a name="input_label_value_case"></a> [label\_value\_case](#input\_label\_value\_case) | Controls the letter case of ID elements (labels) as included in `id`,<br/>set as tag values, and output by this module individually.<br/>Does not affect values of tags passed in via the `tags` input.<br/>Possible values: `lower`, `title`, `upper` and `none` (no transformation).<br/>Set this to `title` and set `delimiter` to `""` to yield Pascal Case IDs.<br/>Default value: `lower`. | `string` | `null` | no |
90+
| <a name="input_labels_as_tags"></a> [labels\_as\_tags](#input\_labels\_as\_tags) | Set of labels (ID elements) to include as tags in the `tags` output.<br/>Default is to include all labels.<br/>Tags with empty values will not be included in the `tags` output.<br/>Set to `[]` to suppress all generated tags.<br/>**Notes:**<br/> The value of the `name` tag, if included, will be the `id`, not the `name`.<br/> Unlike other `null-label` inputs, the initial setting of `labels_as_tags` cannot be<br/> changed in later chained modules. Attempts to change it will be silently ignored. | `set(string)` | <pre>[<br/> "default"<br/>]</pre> | no |
91+
| <a name="input_name"></a> [name](#input\_name) | ID element. Usually the component or solution name, e.g. 'app' or 'jenkins'.<br/>This is the only ID element not also included as a `tag`.<br/>The "name" tag is set to the full `id` string. There is no tag with the value of the `name` input. | `string` | `null` | no |
92+
| <a name="input_namespace"></a> [namespace](#input\_namespace) | ID element. Usually an abbreviation of your organization name, e.g. 'eg' or 'cp', to help ensure generated IDs are globally unique | `string` | `null` | no |
93+
| <a name="input_regex_replace_chars"></a> [regex\_replace\_chars](#input\_regex\_replace\_chars) | Terraform regular expression (regex) string.<br/>Characters matching the regex will be removed from the ID elements.<br/>If not set, `"/[^a-zA-Z0-9-]/"` is used to remove all characters other than hyphens, letters and digits. | `string` | `null` | no |
94+
| <a name="input_stack"></a> [stack](#input\_stack) | Stack name | `string` | `null` | no |
95+
| <a name="input_stage"></a> [stage](#input\_stage) | ID element. Usually used to indicate role, e.g. 'prod', 'staging', 'source', 'build', 'test', 'deploy', 'release' | `string` | `null` | no |
96+
| <a name="input_tags"></a> [tags](#input\_tags) | Additional tags (e.g. `{'BusinessUnit': 'XYZ'}`).<br/>Neither the tag keys nor the tag values will be modified by this module. | `map(string)` | `{}` | no |
97+
| <a name="input_tenant"></a> [tenant](#input\_tenant) | ID element \_(Rarely used, not included by default)\_. A customer identifier, indicating who this instance of a resource is for | `string` | `null` | no |
98+
99+
## Outputs
100+
101+
| Name | Description |
102+
|------|-------------|
103+
| <a name="output_backend"></a> [backend](#output\_backend) | Backend configuration for the component |
104+
| <a name="output_backend_type"></a> [backend\_type](#output\_backend\_type) | Backend type for the component |
105+
<!-- markdownlint-restore -->
106+
<!-- END OF PRE-COMMIT-TERRAFORM DOCS HOOK -->
107+

0 commit comments

Comments
 (0)