diff --git a/src/gitlab-tofu.sh b/src/gitlab-tofu.sh index 4bf9e6551e80ff9928c432f727175b2b15d879d4..c13e6c0d79061d2254e9bdaf306e40ac4017e758 100644 --- a/src/gitlab-tofu.sh +++ b/src/gitlab-tofu.sh @@ -21,6 +21,7 @@ # GITLAB_TOFU_IGNORE_INIT_ERRORS: if set to true will ignore errors in the `tofu init` command. # GITLAB_TOFU_INIT_NO_RECONFIGURE: if set to true will not pass `-reconfigure` to the `tofu init` command. # GITLAB_TOFU_STATE_NAME: the name of the GitLab-managed Terraform state backend endpoint. +# GITLAB_TOFU_STATE_ADDRESS: the address of the GitLab-managed Terraform state backend. Defaults to `$CI_API_V4_URL/projects/$CI_PROJECT_ID/terraform/state/$GITLAB_TOFU_STATE_NAME`. # # Respected OpenTofu Environment Variables: # > these are variables that are @@ -41,6 +42,10 @@ # - used as value for TF_TOKEN_<host> variable. # CI_PROJECT_DIR: # - used as default value for root directory. +# CI_PROJECT_ID: +# - used as default value in constructing the GITLAB_TOFU_STATE_ADDRESS. +# CI_API_V4_URL: +# - used as default value in constructing the GITLAB_TOFU_STATE_ADDRESS. # set some shell options set -o errexit @@ -110,6 +115,16 @@ if [ -n "$TF_STATE_NAME" ]; then fi fi +if [ -n "$TF_ADDRESS" ]; then + echo 'WARNING: you have manually set the deprecated TF_ADDRESS environment variable. Please use the GITLAB_TOFU_STATE_ADDRESS environment variable instead. The TF_ADDRESS variable will be removed soon.' >&2 + + if [ -n "$GITLAB_TOFU_STATE_ADDRESS" ]; then + echo 'WARNING: you have set GITLAB_TOFU_STATE_ADDRESS environment variable in addition to the deprecated TF_ADDRESS. This causes a conflict and GITLAB_TOFU_STATE_ADDRESS will be used exclusively' >&2 + else + GITLAB_TOFU_STATE_ADDRESS="$TF_ADDRESS" + fi +fi + JQ_PLAN=' ( [.resource_changes[]?.change.actions?] | flatten @@ -124,11 +139,11 @@ JQ_PLAN=' state_backend_username="gitlab-ci-token" state_backend_password="${CI_JOB_TOKEN}" -# If TF_ADDRESS is unset but GITLAB_TOFU_STATE_NAME is provided, then default to GitLab backend in current project -if [ -n "${GITLAB_TOFU_STATE_NAME}" ] && [ -z "${TF_ADDRESS}" ]; then +# If GITLAB_TOFU_STATE_ADDRESS is unset but GITLAB_TOFU_STATE_NAME is provided, then default to GitLab backend in current project +if [ -n "${GITLAB_TOFU_STATE_NAME}" ] && [ -z "${GITLAB_TOFU_STATE_ADDRESS}" ]; then # auto url-encode GITLAB_TOFU_STATE_NAME GITLAB_TOFU_STATE_NAME="$(jq -rn --arg x "${GITLAB_TOFU_STATE_NAME}" '$x|@uri')" - TF_ADDRESS="${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/terraform/state/${GITLAB_TOFU_STATE_NAME}" + GITLAB_TOFU_STATE_ADDRESS="${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/terraform/state/${GITLAB_TOFU_STATE_NAME}" fi if [ -z "${GITLAB_TOFU_PLAN_NAME}" ]; then @@ -161,10 +176,10 @@ if [ -z "${GITLAB_TOFU_PLAN_JSON}" ]; then fi # Set variables for the HTTP backend to default to TF_* values -export TF_HTTP_ADDRESS="${TF_HTTP_ADDRESS:-${TF_ADDRESS}}" -export TF_HTTP_LOCK_ADDRESS="${TF_HTTP_LOCK_ADDRESS:-${TF_ADDRESS}/lock}" +export TF_HTTP_ADDRESS="${TF_HTTP_ADDRESS:-${GITLAB_TOFU_STATE_ADDRESS}}" +export TF_HTTP_LOCK_ADDRESS="${TF_HTTP_LOCK_ADDRESS:-${GITLAB_TOFU_STATE_ADDRESS}/lock}" export TF_HTTP_LOCK_METHOD="${TF_HTTP_LOCK_METHOD:-POST}" -export TF_HTTP_UNLOCK_ADDRESS="${TF_HTTP_UNLOCK_ADDRESS:-${TF_ADDRESS}/lock}" +export TF_HTTP_UNLOCK_ADDRESS="${TF_HTTP_UNLOCK_ADDRESS:-${GITLAB_TOFU_STATE_ADDRESS}/lock}" export TF_HTTP_UNLOCK_METHOD="${TF_HTTP_UNLOCK_METHOD:-DELETE}" export TF_HTTP_USERNAME="${TF_HTTP_USERNAME:-${state_backend_username}}" export TF_HTTP_PASSWORD="${TF_HTTP_PASSWORD:-${state_backend_password}}"