Skip to main content

A Python Demo

Project description

PieTerraform

This is a wrapper for terraform to facilitate python developer to call terraform. It is designed to invoke terraform commands in "Functional Chaining" style

Note: Only python>=3.7 is supported.

Features

  • Builder pattern. One line code can call multiple terraform commands
  • Terraform commands' arguments are encapsulated as functions so code completion supported
  • No need to worry about the sequence of arguments

Usage

Make sure have terraform in $PATH

terraform version

Install

pip install pieterraform

Quick start

from pieterraform import Terraform

# suppose you have terraform files in ./tf
Terraform().workdir('./tf')
    .init().run()           # 'terraform init'
    .plan().run()           # 'terraform plan'
    .apply().run()          # 'terraform apply'

# suppose you have terraform files in ./tf/prod
Terraform().workdir('./tf')
    .init().dir('prod').run()
    .plan().dir('prod').run()
    .apply().dir('prod').run()

# suppose you have terraform files in ./tf/prod
Terraform().workdir()
    .init().dir('tf/prod').run()
    .plan().dir('tf/prod').run()
    .apply().dir('tf/prod').run()

Just ONE LINE code!

With Paramers

from pieterraform import Terraform

# suppose you have terraform files in ./tf
Terraform().workdir('./tf')
    # 'terraform init -no-color -upgrade=false'
    .init().no_upgrade().no_color().run()
    # 'terraform plan -state mystate.json -no-color'
    .plan().state_file('mystate.json').no_color().out('myplan').run()
    # 'terraform apply myplan'
    .apply().use_plan('myplan').run()
    # 'terraform destroy -auto-approve -state mystate.json'
    .destroy().auto_approve().state('mystate.json').run()

With Custome Log

By default it prints log in screen. But you can cusomize it to use any logger

import logging
from pieterraform import Terraform

# output log to file
logFormatter = logging.Formatter('%(asctime)s [%(levelname)-5.5s] %(message)s')
log_file = 'log.txt'
f_handler = logging.FileHandler(log_file)
f_handler.setFormatter(logFormatter)
f_handler.setLevel(logging.DEBUG)
logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)
logger.addHandler(f_handler)

# suppose you have terraform files in ./tf
Terraform(logger=logger) # this will output log to file 'log.txt'
    .workdir('./tf')
    .init().run()
    .plan().run()
    .apply().run()

Traditional calls rather than functions chain

from pieterraform import Terraform

tf = Terraform().workdir('./tf')
initer = tf.init()
initer.no_upgrade()
initer.no_color().run()
planer = tf.plan()
planer.state_file('mystate.json')
planer.no_color()
planer.out('myplan').run()
applyer = tf.apply()
applyer.use_plan('myplan')
applyer.run()

Check result

from pieterraform import Terraform

a_run = Terraform().workdir('./tf')
    .init().run()
    .plan().run()
    .apply().run()

for r in a_run.results:
    print(r.output)
    print(r.command)

Source Code

This project is fully using docker as dev environment.

Prerequisition

  • docker: ">= 17.06"
  • docker-compose: ">= 1.26"

No python needed.

Build

make

Install to local

make install

Run test

make test

Distribution

make dist

Development

Start dev docker

make docker-dev

this will start a container named pieterraform-devenv

Use VSCode

Open your vscode, attach to above container to do remote development

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

pieterraform-0.0.1a15.tar.gz (6.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pieterraform-0.0.1a15-py3-none-any.whl (9.5 kB view details)

Uploaded Python 3

File details

Details for the file pieterraform-0.0.1a15.tar.gz.

File metadata

  • Download URL: pieterraform-0.0.1a15.tar.gz
  • Upload date:
  • Size: 6.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/50.3.0 requests-toolbelt/0.9.1 tqdm/4.48.2 CPython/3.7.9

File hashes

Hashes for pieterraform-0.0.1a15.tar.gz
Algorithm Hash digest
SHA256 7d6f7870332c3f09682a2d7fa5f88fa69d989fb89d1a61dfc05565a23192197a
MD5 cff886ac1d0a95afbbfda009926dcc3a
BLAKE2b-256 19045c1d01d55cb2770d746c6af61eaca8b22cc66010667cd8614dc881af5ac3

See more details on using hashes here.

File details

Details for the file pieterraform-0.0.1a15-py3-none-any.whl.

File metadata

  • Download URL: pieterraform-0.0.1a15-py3-none-any.whl
  • Upload date:
  • Size: 9.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/50.3.0 requests-toolbelt/0.9.1 tqdm/4.48.2 CPython/3.7.9

File hashes

Hashes for pieterraform-0.0.1a15-py3-none-any.whl
Algorithm Hash digest
SHA256 ccf30ea85f07a71cb0fc969a0e897028e237c899135e09b60136bf8fc7d73b42
MD5 6afc9fc79f969c22bb79bf7140690a9e
BLAKE2b-256 2616f488c95e17ee6aeb0b36b0153cef91e9da5df5ef30ff51d84ad0e37207fd

See more details on using hashes here.

Supported by

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