Terraform is an infrastructure as code tool that lets you define both cloud and on-prem resources in human-readable configuration files that you can version, reuse, and share. You can then use a consistent workflow to provision and manage all of your infrastructure throughout its lifecycle.
This Universal Extension allows Stonebranch users to orchestrate infrastructure provisioning processes using Terraform.
This integration requires Terraform, Universal Agent and Python runtime to execute the Universal Task.
To import the Universal Template into your Controller, follow the instructions here.
When the files have been imported successfully, refresh the Universal Templates list; the Universal Template will appear on the list.
Configure Universal Task
For the new Universal Task type, create a new task and enter the task-specific details that were created in the Universal Template.
The valid values are as follows.
If selected, this flag upgrades all previously-selected plugins to the newest version that complies with the configuration's version constraints.
This will cause Terraform to ignore any selections recorded in the dependency lock file, and to take the newest available version matching the configured version constraints.
Visible only when Action is "Init".
Introduced in version 1.0.1
Credentials that can be passed to the Variable Script. When the task is launched, they will be resolved and be part of the generated terraform variables file to be used when executing the terraform command.
More information on how to use the Terraform Credentials can be found here.
Visible when Action is "Plan", "Apply" or "Destroy".
UAC script that contains Terraform input variables including all required credential mappings
Plan Output File
Specifies the file name for the generated plan. If the file already exists, it will be overwritten.
Visible only when Action = "Plan".
Path to a previously generated plan file that will be used when applying a new configuration.
Visible only when Action = "Apply".
Terraform Planning Mode that will be applied. The valid values are as follows.
Print Log on STDERR
If selected the generated, Terraform log will be printed on STDERR.
When not selected, the Terraform log is not printed.
If selected, Terraform log will be printed in JSON format.
Visible only when Print Log on STDERR = "True".
Directory in which the application should be executed.
It needs to contain the Terraform .tf files, as well as any additional mandatory Terraform files required for the specific action.
Init action with setting the runtime directory where the Terraform will be initialized.
Plan action with provided Plan Output File, Variables Script, Printing logs in JSON format on STDERR using a specific runtime directory.
Apply action with provided Plan File, using a specific runtime directory.
When Terraform is using a previously generated plan file, variable scripts can not be re-evaluated.
Passing credentials from the template to the terraform variable file. One credential field can be passed, the configuration of which can be used to allow users to pass credentials into variable scripts. User has the freedom to decide which credential parameters (like "Runtime User", Runtime Password", "Key Location") can be used from the credential field to propagated to the variables script.
Destroy action with Printing logs in JSON format using a specific runtime directory.
The exit codes for this Universal Extension are described below.
Status Classification Code
Status Classification Description
SUCCESS: Terraform command executed successfully!
FAIL: Unexpected error. See STDERR for more details.
Input fields validation error
DATA_VALIDATION_ERROR: Some of the input fields cannot be validated. See STDERR for more details.
In the context of a workflow, subsequent tasks can rely on the information provided by this integration as Extension Output.
Attribute changed is populated as follows.
If Action is Init/Apply/Destroy.
If Action is Plan, and it has succeeded with empty diff (no changes).
If Action is Plan, and it has succeeded with non-empty diff (changes present).
Attribute result.commands provides information for the Terraform executed command. It contains the following sub-attributes.
The executed command
Return code of executed command.
An example of the Extension Output for a execution of Init action is presented below.