env0

Custom Flows

You can create custom flows for a template, that allow you to run whatever you want (bash, python, gcloud, ansible, cloudformation, etc.), whenever you want in the deployment process (before or after Terraform init/plan/apply, and even destroy/error).
Create a file named env0.yml to define a custom flow. env0 will use this file it is defined.

Below is an example of a custom flow which creates a more "dynamic" Terraform file, based on an environment variable value, and uses Python and Jinja before the Terraform Init (the full example of this template git repo (including the env0.yml file) is here):

version: 1

deploy:
  steps:
    terraformInit:
      before:
        - pip install --user j2cli
        - 'echo Generating "stage.auto.tfvars" for "$STAGE"'
        - j2 stage.auto.tfvars.j2 > stage.auto.tfvars
        - 'echo -e "Generated \"stage.auto.tfvars\": \n$(cat stage.auto.tfvars)"'
        - 'echo Generating "elb.tf" for "$STAGE"'
        - j2 elb.tf.j2 > elb.tf
        - 'echo -e "Generated \"elb.tf\": \n$(cat elb.tf)"'

You can include the following possible hooks in an env0.yml file:

version:
  type: number
ā€‹
deploy:
  onCompletion:
    - type: string
  onSuccess:
    - type: string
  onFailure:
    - type: string
ā€‹
  steps:
    setupVariables:
      after:
        - type: string
ā€‹
    terraformInit:
      before:
        - type: string
      after:
        - type: string
ā€‹
    terraformPlan:
      before:
        - type: string
      after:
        - type: string
ā€‹
    terraformPlanApproval:
      before:
        - type: string
      after:
        - type: string
ā€‹
    terraformApply:
      before:
        - type: string
      after:
        - type: string
ā€‹
    storeState:
      before:
        - type: string
      after:
        - type: string
ā€‹
    terraformOutput:
      before:
        - type: string
      after:
        - type: string
ā€‹
destroy:
  onCompletion:
    - type: string
  onSuccess:
    - type: string
  onFailure:
    - type: string
ā€‹
  steps:
    setupVariables:
      after:
        - type: string
ā€‹
    terraformInit:
      before:
        - type: string
      after:
        - type: string
ā€‹
    terraformPlan:
      before:
        - type: string
      after:
        - type: string
ā€‹
    terraformPlanApproval:
      before:
        - type: string
      after:
        - type: string
ā€‹
    terraformDestroy:
      before:
        - type: string
      after:
        - type: string

The Deployment Container

Our deployment container is based on node:12-alpine and includes the following:

Includes

Version

NodeJS

12.18.3

NPM

6.14.6

YARN

1.22.4

GIT

2.24.3

Python2

2.7.18

Python3

3.8.2

pip3

20.2

pip2

18.1

AWS CLI

1.18.115

Google Cloud SDK

304.0.0

Azure CLI

2.10.1

kubectl

1.15.11

tfenv

1.0.1

Terraform default version

0.12.24

jq

jq-master-v20191114-85-g260888d269

Updated 28 days ago

Custom Flows


Suggested Edits are limited on API Reference Pages

You can only suggest edits to Markdown body content, but not to the API spec.