Shell Unit ¶
Executes Shell commands and scripts.
Example usage ¶
Example of a shell
unit that creates an index.html
file with a greeting message and downloads the file into an S3 bucket. The bucket name is passed as a variable:
units:
- name: upload-web
type: shell
apply:
commands:
- aws s3 cp ./index.html s3://{{ .variables.name }}/index.html
create_files:
- file: ./index.html
content: |
<h1> Hello from {{ .variables.organization }} </h1>
This page was created automatically by cdev tool.
Complete reference example:
units:
- name: my-tf-code
type: shell
env:
AWS_PROFILE: {{ .variables.aws_profile }}
TF_VAR_region: {{ .project.region }}
create_files:
- file: ./terraform.tfvars
content: |
{{- range $key, $value := .variables.tfvars }}
$key = "$value"
{{- end}}
work_dir: ~/env/prod/
apply:
commands:
- terraform apply -var-file terraform.tfvars {{ range $key, $value := .variables.vars_list }} -var="$key=$value"{{ end }}
plan:
commands:
- terraform plan
destroy:
commands:
- terraform destroy
- rm ./.terraform
outputs: # how to get outputs
type: json (regexp, separator)
regexp_key: "regexp"
regexp_value: "regexp"
separator: "="
command: terraform output -json
pre_hook:
on_apply: true
on_destroy: true
command: |
cat ./main.tf
post_hook:
on_apply: false
on_destroy: true
command: |
terraform output
create_files:
- file: ./my_text_file.txt
mode: 0644
content: "some text"
- file: ./my_text_file2.txt
content: "some text 2"
Options ¶
-
force_apply
- bool, optional. By default is false. If set to true, the unit will be applied when any dependent unit is changed. -
env
- map, optional. The list of environment variables that will be exported before executing commands of this unit. The variables defined in shell unit have a priority over variables defined in the project (the optionexports
) and will rewrite them. -
work_dir
- string, required. The working directory within which the code of the unit will be executed. -
apply
- optional, map. Describes commands to be executed when runningcdev apply
. For details see below. -
plan
- optional, map. Describes commands to be executed when runningcdev plan
. For details see below. -
destroy
- optional, map. Describes commands to be executed when runningcdev destroy
. For details see below. -
outputs
- optional, map. Describes how to get outputs from a command. For details see below. -
create_files
- list of files, optional. The list of files that have to be saved in the state in case of their changing. -
pre_hook
andpost_hook
blocks: describe shell commands to be executed before and after the unit, respectively. The commands will be executed in the same context as the actions of the unit. Environment variables are common to shell commands, thepre_hook
andpost_hook
scripts, and unit execution. You can export a variable in thepre_hook
and it will be available in thepost_hook
or in the unit. For details see below.
apply
¶
-
init
- optional. Describes commands to be executed prior to runningcdev apply
. -
commands
- list of strings, required. The list of commands to be executed when runningcdev apply
.
plan
¶
-
init
- optional. Describes commands to be executed prior to runningcdev plan
. -
commands
- list of strings, required. The list of commands to be executed when runningcdev plan
.
destroy
¶
-
init
- optional. Describes commands to be executed prior to runningcdev destroy
. -
commands
- list of strings, required. The list of commands to be executed when runningcdev destroy
.
outputs
¶
-
type
- string, required. A type of format to deliver the output. Could have 3 options: JSON, regexp, separator. According to the type specified, further options will differ. -
JSON
- if thetype
is defined as JSON, outputs will be parsed as key-value JSON. This type of output makes all other options not required. -
regexp
- if thetype
is defined asregexp
, this introduces an additional required optionregexp
: a regular expression which defines how to parse each line in the module output. Example:
outputs: # how to get outputs
type: regexp
regexp: "^(.*)=(.*)$"
command: |
echo "key1=val1\nkey2=val2"
separator
- if thetype
is defined as separator, this introduces an additional optionseparator
(string). Separator is a symbol that defines how a line is divided in two parts: the key and the value.
command
- string, optional. The command to take the outputs from. Is used regardless of the type option. If the command is not defined, cdev takes the outputs from theapply
command.
pre_hook
and post_hook
blocks ¶
Example usage:
-
command
- string. Shell command in text format. Will be executed in Bash -c "command". Can be used if the "script" option is not used. One ofcommand
orscript
is required. -
on_apply
bool, optional. Turn off/on when unit applying. Default: "true". -
on_destroy
- bool, optional. Turn off/on when unit destroying. Default: "false". -
on_plan
- bool, optional. Turn off/on when unit plan executing. Default: "false".