Use Terrastorm on Terraservices layout for terraform
Project description
Terrastorm
A simple cli to help you work with using terraservice layouts for terraform
Terraservice?
- https://www.youtube.com/watch?v=wgzgVm7Sqlk
- https://www.slideshare.net/opencredo/hashidays-london-2017-evolving-your-infrastructure-with-terraform-by-nicki-watt
- https://www.hibri.net/2017/11/13/terraform-for-grownups/
NB Whats important to note is that we have added a layers abstraction. This abstraction allows you to compose infra objects that can then be used by your environments, instead of referencing modules directly.
Example layout
- modules are standard terraform modules
- layers implement modules - they dont store secrets, just compose object representations that can be used by the environments
- environments implement any number of layers - here you configure secrets and variables for the individual environments
Environment - Services
Environments allow us to implement services which are instances of layers with environment specific configuration
- can take secrets
- compose layers
- maintain the remote encrypted s3 state
Layers
Layers allow us to combine a number of modules
- no secrets
- compose modules
Modules
Modules act as normal terraform modules and provide access to the standard concept.
- stnadrad terraform modules
But now you have to go to the production environment and run terraform plan and terraform apply for each of your services this gets repetative
├── environments
│ ├── dev
│ │ ├── iam
│ │ │ ├── README.md
│ │ │ ├── main.tf
│ │ │ ├── secrets.auto.tfvars
│ │ │ └── terraform.tfvars
│ │ └── network
│ │ ├── README.md
│ │ ├── main.tf
│ │ ├── secrets.auto.tfvars
│ │ └── terraform.tfvars
│ └── prod
│ ├── iam
│ │ ├── README.md
│ │ ├── main.tf
│ │ ├── secrets.auto.tfvars
│ │ └── terraform.tfvars
│ └── network
│ ├── README.md
│ ├── main.tf
│ ├── secrets.auto.tfvars
│ └── terraform.tfvars
├── layers
│ ├── iam
│ │ ├── README.md
│ │ ├── main.tf
│ │ ├── outputs.tf
│ │ └── variables.tf
│ └── network
│ ├── README.md
│ ├── main.tf
│ ├── outputs.tf
│ └── variables.tf
└── modules
├── subnets
│ ├── README.md
│ ├── main.tf
│ ├── outputs.tf
│ └── variables.tf
└── vpc
├── README.md
├── main.tf
├── outputs.tf
└── variables.tf
Usage
Modify the makefile so your aws and ti-landscape are mounted to the right places
1. make shell
2. `terrastorm run nonprod init` <-- will init on all the services in nonprod
Story 1 - Setup a new Project
As an infra-op I need to create a new project based on the terraservices pattern So that I can inject sparkles into the lives of our clients
terrastorm setup /path/to/project
- will create a new project based on the template defined in the
.terrastorm.yamltemplates.project=https://github.com/williamtsoi1/terraservices-example.git
Story 2 - See my settings
As an infra-op I want to see my current config settings So that I can check all is well
terrastorm show_config
- will output the current config settings loaded from
~/.terrastorm.yamland the default.terrastorm.yaml
Story 3 - Create a new Terraform Module
As an infra-op I need to create a new segment of infrastructure So that I can inject sparkles into the lives of our clients
terrastorm create module :new_module_name
- will create a new "module" with the appropriate
:name.tf,input.tf,output.tffiles
Story 4 - Create a new Layer
As an infra-op
I need to create a new layer of infrastructure
So that I can compose an infrastructure represenation for use in my environments.
terrastorm create layer :new_module_name
- will create a new "module" with the appropriate
:name.tf,input.tf,output.tffiles
Story 5 - Create a new Environment
As an infra-op I need to create a new environment, optionally excluding or including certain modules So that I can inject goodness into the lives of our clients
terrastorm create environment :new_environment_name
- will create a new environment
Story 6 - Add a new service to an Environment
As an infra-op I need to be able to add a module interface to an environment So that I can make magic happe
terrastorm add service :environment :new_service_name
- will create a new service instance in the environment specified
Story 7 - Run a terraform command in an environment service
As an infra-op I need to run terraform commands on the appropriate environment So that I can make magic happe
terrastorm run :environment :cmd :service_name|all
- environment - staging|production|...
- cmd - fmt|init|plan|apply
- service None|all|:name_of_your_service
Story 8 - Exec and shell command in an environment
As an infra-op I need to run shell commands in the appropriate environment So that I can make magic happe
terrastorm cmd :environment ':cmd'
- environment - staging|production|...
- cmd -
ls -alh|tree . -L 3 - service None|all|:name_of_your_service cmd dev 'ls -alh'
Development
docker build -t terrastorm:latest .
docker run -it --rm \
-v $PWD:/src \
-v /Users/ross/p/ross.crawford/ti-landscape:/terraform \
terrastorm:latest sh
docker run -it --rm \
-v $PWD:/src \
terrastorm:latest sh
Using
docker run -it --rm \
-v $PWD:/src \
-v /path/to/project:/terraform \
rosscdh/terrastorm:latest sh
>> terrastorm setup /terraform
>> ls /tearraform
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file terrastorm-0.0.4.tar.gz.
File metadata
- Download URL: terrastorm-0.0.4.tar.gz
- Upload date:
- Size: 7.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.19.1 setuptools/40.6.3 requests-toolbelt/0.9.1 tqdm/4.31.1 CPython/3.7.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0397e4ee5a2e707fd426a21a7120e4ac6c53600b9566a7179307a39c025aaaad
|
|
| MD5 |
80bb9ff5fc44f1074159d4636750080a
|
|
| BLAKE2b-256 |
a8d1057fd90323b76c8da459673ff45d6424bfce3277c38a72a8eedcca9fb07d
|
File details
Details for the file terrastorm-0.0.4-py3-none-any.whl.
File metadata
- Download URL: terrastorm-0.0.4-py3-none-any.whl
- Upload date:
- Size: 7.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.19.1 setuptools/40.6.3 requests-toolbelt/0.9.1 tqdm/4.31.1 CPython/3.7.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b65373e0dd0665b4fdc5f3c963c1b6f33fdfa50cb08bbbba14e1f52e69f67586
|
|
| MD5 |
25ba25b7a1ca0c41f46307423f03eff2
|
|
| BLAKE2b-256 |
95366269ceab3179e284202cf763fa9c69b8171db1f472081d3648eb680bfcd7
|