You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
dda-devops-build/doc/DevopsTerraformBuild.md

5.4 KiB

DevopsTerraformBuild

DevopsTerraformBuild provides capabilities to use terraform in your build.

classDiagram
    class DevopsTerraformBuild {
        apply(auto_approve=False) - execute terraform apply
        destroy(auto_approve=False) - execute terraform destroy
        initialize_build_dir() - copy current directory & additional files to target. Additional files can be found [here](../src/main/resources/terraform)
        post_build() - a post build hook
        plan() - execute terraform plan
        plan_fail_on_diff() - execute terraform plan and throw an exception if there are diffs
        read_output_json() - read your json encoded output and parse into a nested map
        refresh() - execute terraform refresh
        tf_import(tf_import_name,tf_import_resource) - execute terraform import
    }

Input

name description default
name dedicated name of the build - also used as image name module
module module name - may result in a hierarchy like name/module
stage not used in this build
project_root_path relative path to projects root. Is used to locate the target dir
build_dir_name name of dir, build is executed in target
build_types list of special builds used. Value has to be contained["IMAGE"] []
mixin_types mixins are orthoganl to builds and represent additional capabilities. Valid Values are ["RELEASE"] []
tf_provider_types Build in terraform providers. Possible values are ["DIGITALOCEAN", "HETZNER", "AWS"] []
tf_additional_vars hand over vars to your terraform build {}
tf_additional_tfvar_files use additional var files []
tf_output_json_name name of your output as json NONE
tf_use_workspace use terraform workspaces True
tf_use_package_common_files use some boilerplate files from dda-devops-build located here True
tf_build_commons_path copy boilerplate files from a {tf_build_commons_path}/{tf_build_commons_dir_name} dir instead of using package-commons files
tf_build_commons_dir_name terraform
tf_debug_print_terraform_command Print out all terraform commands for debuging issues False
tf_terraform_semantic_version specify terraform version "1.0.8"

Credentials Mapping defaults

without a defined provider

[
]

Example Usage

build.py

from os import environ
from pybuilder.core import task, init
from ddadevops import *

name = 'my-project'
MODULE = 'my-module'
PROJECT_ROOT_PATH = '..'

@init
def initialize(project):
    project.build_depends_on("ddadevops>=4.0.0")

    input = {
        "name": name,
        "module": MODULE,
        "name": name,
        "module": MODULE,
        "stage": environ["STAGE"],
        "project_root_path": PROJECT_ROOT_PATH,
        "build_types": ["TERRAFORM"],
        "mixin_types": [],
        "tf_provider_types": [],
        "tf_use_workspace": False,
        "tf_terraform_semantic_version": "1.4.2",
    }

    build = DevopsTerraformBuild(project, config)
    build.initialize_build_dir()


@task
def plan(project):
    build = get_devops_build(project)
    build.plan()


@task
def apply(project):
    build = get_devops_build(project)
    build.apply(True)


@task
def destroy(project):
    build = get_devops_build(project)
    build.destroy()


@task
def tf_import(project):
    build = get_devops_build(project)
    build.tf_import(
        "terraform.resource", "providers id"
    )

call the build

pyb image plan apply destroy