blob: e6df16364edc7fa832d1cd1950f8bbedad53bfd5 [file] [edit]
#!/bin/bash
#
# Copyright 2022 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
set -eo pipefail
# Ensure current directory is same as script.
helperDir="$(cd -P -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd -P)"
pushd "$helperDir/.." >/dev/null
# If Terraform was previously configured to work with a different project,
# then remove the previous Terraform state.
prev_project_id=$(terraform output -raw project_id &>/dev/null)
if [[ $? -eq 0 ]]; then
if [[ "$prev_project_id" != "$GOOGLE_CLOUD_PROJECT" ]]; then
if [[ -f terraform.tfstate ]]; then
rm terraform.tfstate
fi
fi
fi
# Create generated.auto.tfvars which will be used as input values to generated-variables.tf
touch generated.auto.tfvars
echo "# Auto-generated by ./.cloud/plan.sh
project_id = \"$GOOGLE_CLOUD_PROJECT\"
" >generated.auto.tfvars
# Either use given module list, or get a list of all modules in the parent directory.
if [ -n "$1" ]; then
modules=$1
else
modules=$(listAllModules)
fi
echo "Planning around modules $modules"
IFS=','
for module in $modules; do
# Only include modules with a .cloud subdirectory in the generated config.
if [ -f "../$module/.cloud/preplan.sh" ]; then
# shellcheck disable=SC1090
source "../$module/.cloud/preplan.sh" generated.auto.tfvars
fi
done
terraform fmt -list=false generated.auto.tfvars
terraform plan -out generated.tfplan
terraform show -json generated.tfplan >generated.tfplan.json
popd >/dev/null