private runners using gitlab/gitlab-runner:alpine
custom terraform image with jq pre-installed
Can someone please help me understand why the terraform report does not show up in the MR after the plan has run? I am expecting to see it in the MR then after reviewing it triggering the manual apply job. However the report does not appear until the manual job is done.
---
default:
image:
name: terraform:latest
entrypoint:
- ""
stages:
- validate
- plan
- apply
variables:
ENVIRONMENT: "production"
PLAN_FILE: plan.tfplan
JSON_PLAN_FILE: tfplan.json
TF_IN_AUTOMATION: "true"
.prepare: &prepare
- alias convert_report="jq -r '([.resource_changes[].change.actions?]|flatten)|{\"create\":(map(select(.==\"create\"))|length),\"update\":(map(select(.==\"update\"))|length),\"delete\":(map(select(.==\"delete\"))|length)}'"
.init: &init
- terraform init
- echo $ENVIRONMENT
- terraform workspace select $ENVIRONMENT
before_script:
- *prepare
- eval $(ssh-agent -s)
- echo "$KEY" | tr -d '\r' | ssh-add -
- mkdir $HOME/.ssh/
- chown 700 $HOME/.ssh/
- echo -e "Host *\n StrictHostKeyChecking no" >> $HOME/.ssh/config
.apply: &apply
stage: apply
rules:
- if: $CI_COMMIT_REF_NAME == $CI_DEFAULT_BRANCH || $CI_PIPELINE_SOURCE == "merge_request_event"
when: manual
script:
- *init
- terraform apply -input=false -auto-approve $PLAN_FILE
allow_failure: false
.plan: &plan
stage: plan
rules:
- if: $CI_COMMIT_REF_NAME == $CI_DEFAULT_BRANCH || $CI_PIPELINE_SOURCE == "merge_request_event"
script:
- *init
- terraform plan --out $PLAN_FILE
- "terraform show --json $PLAN_FILE | convert_report > $JSON_PLAN_FILE"
- jq --version
- cat $JSON_PLAN_FILE
artifacts:
reports:
terraform: $JSON_PLAN_FILE
paths:
- $PLAN_FILE
allow_failure: false
.validate: &validate
stage: validate
rules:
- if: $CI_COMMIT_REF_NAME == $CI_DEFAULT_BRANCH || $CI_PIPELINE_SOURCE == "merge_request_event"
script:
- *init
- terraform validate
allow_failure: false
Validate-Client:
<<: *validate
Plan-Client:
<<: *plan
Apply-Client:
<<: *apply
dependencies:
- Plan-Client
Output from the debug statements in the plan
$ jq --version
jq-master-v20200917-3811-g2b0a3891bf
$ cat $JSON_PLAN_FILE
{
"create": 0,
"update": 4,
"delete": 0
}
Report does not show up
Thank you!