ContainerSolutions / terraform-examples

Simple and idiomatic examples of various Terraform functions and features.
https://containersolutions.github.io/terraform-examples/
160 stars 51 forks source link
terraform

terraform-examples

A reference repository of Terraform with canonical and as-simple-as-possible demonstrations of Terraform functionality and features.

See here for a searchable front-end: https://containersolutions.github.io/terraform-examples/

Why?

At Container Solutions we find we regularly need chunks of Terraform to demonstrate something specific, such as:

This might be to do a basic test of something, find an example to tinker with, or send to someone to get them going.

Usage

To help get started with these examples, there are scripts available in bin and in local folders.

Here's an example run:

$ git clone https://github.com/ContainerSolutions/terraform-examples
$ cd terraform-examples
$ cd aws/aws_vpc
$ ./run.sh
Input AWS_ACCESS_KEY_ID
KEY
Input AWS_SECRET_ACCESS_KEY
<secret>
...

If you want to skip the manual key/id inputs, then export them.

See bin/README.md for more information.

Where is...?

If you want to look for a specific example, try the index.

Sections

The code is generally divided up by provider, then resource, then whatever the example illustrates, eg local/null_resource/for_each, or aws/aws_instance/remote-exec/inline.

Other basic language features may be illustrated in their own folders, eg outputs/local_file/module.

Principles

The examples seek to be:

Conventions

Contributing

Contributions to terraform-examples project are welcome. You can find detailed information about contributing here.

GitHub Actions Workflow

On every commit/push, the following tests run on all branches:

Using slash command /test, a maintainer can run Cloud Testing jobs. This includes:

Cloud Environment tests are long and/or cost money and they won't work without the necessary auth information being set up correctly.

The auth information for the provider accounts are stored in secrets in the repository, accessible to the admin.

Slash commands can be used to approve/merge the PR, '/approve' or '/merge'.

The Flow:

Note: All the slash commands are performed by Github Actions BOT with GITHUB_TOKEN

Forcing tests

You can force a test for a given provider (on main branch only) by adding a .forcetest file to the relevant folder.

For example, if you want to ensure that the aws tests run, then add an empty file in aws/.forcetest. On a successfully completed test run, these files are removed as part of the 'success commit' in the github action workflow.

 Maintainer Information

For information for maintainers of this repository at ContainerSolutions, see maintainers

Sources / Thanks To

Learn Terraform The Hard Way Slash Commands

Other Examples

Immutable Cluster Using Packer and Ansible on AWS