#!/usr/bin/env bash # vim:ts=4:sts=4:sw=4:et # # Author: Hari Sekhon # Date: Mon Feb 22 17:42:01 2021 +0000 # # https://github.com/HariSekhon/DevOps-Bash-tools # # License: see accompanying Hari Sekhon LICENSE file # # If you're using my code you're welcome to connect with me on LinkedIn and optionally send me feedback to help steer this or other code I publish # # https://www.linkedin.com/in/HariSekhon # set -euo pipefail [ -n "${DEBUG:-}" ] && set -x #srcdir="$(dirname "${BASH_SOURCE[0]}")" # would auto-determine the version from the state file, but this commands seems to always return the version of your local binary pulling the state file, not the version from the actual terraform_version field in state file if you see when opening it up in the cloud bucket # terraform state pull | jq -r .terraform_version export TERRAFORM_VERSION=1.1.9 tfenv_list_sed(){ sed 's/^\*[[:space:]]*//; s/(.*//; s/[[:space:]]//g' } tfenv_setup(){ local version="${1:-${TERRAFORM_VERSION:-}}" if [ -z "$version" ]; then return 0 fi if ! type -P tfenv &>/dev/null; then return 0 fi if ! tfenv list | tfenv_list_sed | grep -Fxq "$version"; then echo "Terraform version '$version' not installed in tfenv, installing now..." tfenv install "$version" fi local current_version current_version="$(tfenv list | grep '^\*' | tfenv_list_sed)" if [ "$current_version" != "$version" ]; then # XXX: Careful, this will switch globally and could cause race conditions with other shells / scripts on the same machine tfenv use "$version" fi } tfenv_setup "$TERRAFORM_VERSION" # ================================================================================= # for deployment/ subdirectories, all you need in their .envrc is this # # source_up # # export TERRAFORM_VERSION=1.1.9 # # tfenv_setup "$TERRAFORM_VERSION" # # ================================================================================= # XXX: set these or other variables for Terraform code to find export CLOUDFLARE_EMAIL=hari@... export CLOUDFLARE_API_KEY=... # generate here: https://dash.cloudflare.com/profile/api-tokens #export CLOUDFLARE_TOKEN=... # used by cloudflare_api.sh but not by terraform module # export the variables for terraform export TF_VAR_cloudflare_email="$CLOUDFLARE_EMAIL" export TF_VAR_cloudflare_api_key="$CLOUDFLARE_API_KEY" # must be a key, not a token using the link above # GITHUB_* environment variables may interfere with GitHub provider, so unset them for env_var in $(env | awk -F= '$1 ~ /GITHUB/ {print $1}'); do unset "$env_var" done