Skip to main content

Terrastorm

A simple cli to help you work with using terraservice layouts for terraform

Terraservice?

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

  1. modules are standard terraform modules
  2. layers implement modules - they dont store secrets, just compose object representations that can be used by the environments
  3. 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

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.yaml and 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.tf files

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.tf files

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

Metadata

Release files for terrastorm 0.0.4

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for terrastorm 0.0.4
File Size Uploaded
terrastorm-0.0.4.tar.gz 7.7 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for terrastorm 0.0.4
File Interpreter ABI Platform
terrastorm-0.0.4-py3-none-any.whl Python 3 none any Details

Total release size: 15.0 kB

Release files / terrastorm-0.0.4.tar.gz

Download URL terrastorm-0.0.4.tar.gz
Size 7.7 kB
Tags Source
SHA-256 checksum
How to use checksums
0397e4ee5a2e707fd426a21a7120e4ac6c53600b9566a7179307a39c025aaaad
BLAKE2b-256 checksum
How to use checksums
a8d1057fd90323b76c8da459673ff45d6424bfce3277c38a72a8eedcca9fb07d
Upload date
Uploaded using Trusted Publishing?
What is 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

Release files / terrastorm-0.0.4-py3-none-any.whl

Download URL terrastorm-0.0.4-py3-none-any.whl
Size 7.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
b65373e0dd0665b4fdc5f3c963c1b6f33fdfa50cb08bbbba14e1f52e69f67586
BLAKE2b-256 checksum
How to use checksums
95366269ceab3179e284202cf763fa9c69b8171db1f472081d3648eb680bfcd7
Upload date
Uploaded using Trusted Publishing?
What is 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

Release history Release notifications | RSS feed

This release

0.0.4 This release

2 release files

0.0.3

2 release files

0.0.2

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page