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 hashes)

Uploaded source

Built Distribution

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

Uploaded py3

Supported by

AWS AWS Cloud computing Datadog Datadog Monitoring Facebook / Instagram Facebook / Instagram PSF Sponsor Fastly Fastly CDN Google Google Object Storage and Download Analytics Huawei Huawei PSF Sponsor Microsoft Microsoft PSF Sponsor NVIDIA NVIDIA PSF Sponsor Pingdom Pingdom Monitoring Salesforce Salesforce PSF Sponsor Sentry Sentry Error logging StatusPage StatusPage Status page