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
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
pieterraform-0.0.1a9.tar.gz
(6.5 kB
view hashes)
Built Distribution
Close
Hashes for pieterraform-0.0.1a9-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 75f231dc57b25ebdeb78f72e262ceef1246c82b1ff9c73bf8fbe81c7d4b96f31 |
|
MD5 | 3a174ce8e0f04677423bcf63b98a3917 |
|
BLAKE2b-256 | 3ba2e0661189a53c96c550237c91896c81d298419c1622cb145ce3d64df73a45 |