This repository has been archived on 2022-11-03. You can view files and clone it, but cannot push or open issues or pull requests.
DevOpsOpenHack/support/sqlsecretrotation/iac/terraform/deploy.sh

95 lines
2.5 KiB
Bash
Raw Normal View History

2022-11-03 20:41:13 +00:00
#!/bin/bash
declare LOCATION=$1
declare RESOURCES_PREFIX=$2
declare SECRET_NAME=$3
declare KEY_VAULT_RESOURCE_GROUP_NAME=$4
declare KEY_VAULT_NAME=$5
declare -r USAGE_HELP="Usage: ./deploy.sh <LOCATION> <RESOURCES_PREFIX> <SECRET_NAME> <KEY_VAULT_RESOURCE_GROUP_NAME> <KEY_VAULT_NAME>"
if [ $# -ne 5 ]; then
echo "${USAGE_HELP}"
exit 1
fi
# Check for programs
if ! [ -x "$(command -v az)" ]; then
echo "az is not installed!"
exit 1
elif ! [ -x "$(command -v terraform)" ]; then
echo "terraform is not installed!"
exit 1
fi
if [ -f "devvars.sh" ]; then
. devvars.sh
fi
export ARM_THREEPOINTZERO_BETA_RESOURCES=true
azure_login() {
_azuresp_json=$(cat azuresp.json)
export ARM_CLIENT_ID=$(echo "${_azuresp_json}" | jq -r ".clientId")
export ARM_CLIENT_SECRET=$(echo "${_azuresp_json}" | jq -r ".clientSecret")
export ARM_SUBSCRIPTION_ID=$(echo "${_azuresp_json}" | jq -r ".subscriptionId")
export ARM_TENANT_ID=$(echo "${_azuresp_json}" | jq -r ".tenantId")
az login --service-principal --username "${ARM_CLIENT_ID}" --password "${ARM_CLIENT_SECRET}" --tenant "${ARM_TENANT_ID}"
az account set --subscription "${ARM_SUBSCRIPTION_ID}"
}
prepare_tfvars() {
echo "Generating tfvars..."
echo 'location = "'${LOCATION}'"' > terraform.tfvars
echo 'resources_prefix = "'${RESOURCES_PREFIX}'"' >> terraform.tfvars
echo 'secret_name = "'${SECRET_NAME}'"' >> terraform.tfvars
echo 'key_vault_resource_group_name = "'${KEY_VAULT_RESOURCE_GROUP_NAME}'"' >> terraform.tfvars
echo 'key_vault_name = "'${KEY_VAULT_NAME}'"' >> terraform.tfvars
terraform fmt
}
lint_terraform(){
terraform fmt -check
if [ $? -ne 0 ]; then
echo "Terraform files are not properly formatted!"
exit 1
fi
}
init_terrafrom() {
terraform init -backend-config=storage_account_name="${TFSTATE_STORAGE_ACCOUNT_NAME}" -backend-config=container_name="${TFSTATE_STORAGE_CONTAINER_NAME}" -backend-config=key="${TFSTATE_KEY_SECROT}" -backend-config=resource_group_name="${TFSTATE_RESOURCES_GROUP_NAME}"
}
init_terrafrom_local() {
terraform init -backend=false
}
validate_terraform(){
terraform validate
}
preview_terraform(){
terraform plan --detailed-exitcode
return $?
}
deploy_terraform(){
local _tfplan_exit_code=${1}
terraform apply --auto-approve
}
destroy_terraform(){
terraform destroy --auto-approve
}
prepare_tfvars
azure_login
lint_terraform
init_terrafrom
# init_terrafrom_local
validate_terraform
preview_terraform
deploy_terraform $?
# destroy_terraform