Commit abd8775d authored by Alexis Deruelle's avatar Alexis Deruelle Committed by Alexis Deruelle
Browse files

refactor: move Gitlab backend init in its own function

parent d8416b5a
Loading
Loading
Loading
Loading
+37 −32
Original line number Diff line number Diff line
@@ -688,6 +688,41 @@ stages:
    fi
  }

  function tf_gitlab_backend_setup() {
      # impl inspired by GitLab Terraform image script
      # see https://gitlab.com/gitlab-org/terraform-images/-/blob/master/src/bin/gitlab-terraform.sh

      if tf_is_at_least 0.13.2
      then
        log_info "configuring Terraform to use GitLab as http backend for tfstate  (set \\e[33;1m\$TF_GITLAB_BACKEND_DISABLED\\e[0m to prevent this)"
      else
        fail "terraform < 0.13.2 doesn't support environment variables to configure http backend"
      fi

      # If TF_USERNAME is unset then default to GITLAB_USER_LOGIN
      TF_USERNAME="${TF_USERNAME:-${GITLAB_USER_LOGIN}}"

      # If TF_PASSWORD is unset then default to gitlab-ci-token/CI_JOB_TOKEN
      if [ -z "${TF_PASSWORD}" ]; then
        TF_USERNAME="gitlab-ci-token"
        TF_PASSWORD="${CI_JOB_TOKEN}"
      fi

      # If TF_ADDRESS is unset then default to GitLab backend in current project
      TF_ADDRESS="${TF_ADDRESS:-${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/terraform/state/${environment_slug}}"

      # Set variables for the HTTP backend to default to TF_* values
      # see: https://developer.hashicorp.com/terraform/language/settings/backends/http
      export TF_HTTP_ADDRESS="${TF_HTTP_ADDRESS:-${TF_ADDRESS}}"
      export TF_HTTP_LOCK_ADDRESS="${TF_HTTP_LOCK_ADDRESS:-${TF_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_METHOD="${TF_HTTP_UNLOCK_METHOD:-DELETE}"
      export TF_HTTP_USERNAME="${TF_HTTP_USERNAME:-${TF_USERNAME}}"
      export TF_HTTP_PASSWORD="${TF_HTTP_PASSWORD:-${TF_PASSWORD}}"
      export TF_HTTP_RETRY_WAIT_MIN="${TF_HTTP_RETRY_WAIT_MIN:-5}"
  }

  function tf_init() {
    opts=${ENV_INIT_OPTS:-$TF_INIT_OPTS}
    extra_opts=${ENV_EXTRA_OPTS:-$TF_EXTRA_OPTS}
@@ -731,40 +766,10 @@ stages:
    # maybe execute pre init script
    tf_pre_init

    # setup backend
    if [[ "$TF_GITLAB_BACKEND_DISABLED" != "true" ]]
    then
      # impl inspired by GitLab Terraform image script
      # see https://gitlab.com/gitlab-org/terraform-images/-/blob/master/src/bin/gitlab-terraform.sh

      if tf_is_at_least 0.13.2
      then
        log_info "configuring Terraform to use GitLab as http backend for tfstate  (set \\e[33;1m\$TF_GITLAB_BACKEND_DISABLED\\e[0m to prevent this)"
      else
        fail "terraform < 0.13.2 doesn't support environment variables to configure http backend"
      fi

      # If TF_USERNAME is unset then default to GITLAB_USER_LOGIN
      TF_USERNAME="${TF_USERNAME:-${GITLAB_USER_LOGIN}}"

      # If TF_PASSWORD is unset then default to gitlab-ci-token/CI_JOB_TOKEN
      if [ -z "${TF_PASSWORD}" ]; then
        TF_USERNAME="gitlab-ci-token"
        TF_PASSWORD="${CI_JOB_TOKEN}"
      fi

      # If TF_ADDRESS is unset then default to GitLab backend in current project
      TF_ADDRESS="${TF_ADDRESS:-${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/terraform/state/${environment_slug}}"

      # Set variables for the HTTP backend to default to TF_* values
      # see: https://developer.hashicorp.com/terraform/language/settings/backends/http
      export TF_HTTP_ADDRESS="${TF_HTTP_ADDRESS:-${TF_ADDRESS}}"
      export TF_HTTP_LOCK_ADDRESS="${TF_HTTP_LOCK_ADDRESS:-${TF_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_METHOD="${TF_HTTP_UNLOCK_METHOD:-DELETE}"
      export TF_HTTP_USERNAME="${TF_HTTP_USERNAME:-${TF_USERNAME}}"
      export TF_HTTP_PASSWORD="${TF_HTTP_PASSWORD:-${TF_PASSWORD}}"
      export TF_HTTP_RETRY_WAIT_MIN="${TF_HTTP_RETRY_WAIT_MIN:-5}"
      tf_gitlab_backend_setup
    else
      backend_cfg=$(ls -1 "${environment_type}.tfbackend" 2>/dev/null || ls -1 "default.tfbackend" 2>/dev/null || echo "")
      if [[ -f "$backend_cfg" ]]