Skip to main content

Use Terrastorm on Terraservices layout for terraform

Project description

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

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

terrastorm-0.0.4.tar.gz (7.7 kB view details)

Uploaded Source

Built Distribution

terrastorm-0.0.4-py3-none-any.whl (7.4 kB view details)

Uploaded Python 3

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

Hashes for terrastorm-0.0.4.tar.gz
Algorithm Hash digest
SHA256 0397e4ee5a2e707fd426a21a7120e4ac6c53600b9566a7179307a39c025aaaad
MD5 80bb9ff5fc44f1074159d4636750080a
BLAKE2b-256 a8d1057fd90323b76c8da459673ff45d6424bfce3277c38a72a8eedcca9fb07d

See more details on using hashes here.

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

Hashes for terrastorm-0.0.4-py3-none-any.whl
Algorithm Hash digest
SHA256 b65373e0dd0665b4fdc5f3c963c1b6f33fdfa50cb08bbbba14e1f52e69f67586
MD5 25ba25b7a1ca0c41f46307423f03eff2
BLAKE2b-256 95366269ceab3179e284202cf763fa9c69b8171db1f472081d3648eb680bfcd7

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page