1*55e87721SMatt Gilbride# 2*55e87721SMatt Gilbride# Copyright 2022 Google LLC 3*55e87721SMatt Gilbride# 4*55e87721SMatt Gilbride# Licensed under the Apache License, Version 2.0 (the "License"); 5*55e87721SMatt Gilbride# you may not use this file except in compliance with the License. 6*55e87721SMatt Gilbride# You may obtain a copy of the License at 7*55e87721SMatt Gilbride# 8*55e87721SMatt Gilbride# https://www.apache.org/licenses/LICENSE-2.0 9*55e87721SMatt Gilbride# 10*55e87721SMatt Gilbride# Unless required by applicable law or agreed to in writing, software 11*55e87721SMatt Gilbride# distributed under the License is distributed on an "AS IS" BASIS, 12*55e87721SMatt Gilbride# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*55e87721SMatt Gilbride# See the License for the specific language governing permissions and 14*55e87721SMatt Gilbride# limitations under the License. 15*55e87721SMatt Gilbride# 16*55e87721SMatt Gilbrideset -eo pipefail 17*55e87721SMatt Gilbride 18*55e87721SMatt Gilbridefunction initializeGeneratedFiles() { 19*55e87721SMatt Gilbride cp ./helpers/generated-main.template.tf generated-main.tf 20*55e87721SMatt Gilbride cp ./helpers/generated-outputs.template.tf generated-outputs.tf 21*55e87721SMatt Gilbride cp ./helpers/generated-variables.template.tf generated-variables.tf 22*55e87721SMatt Gilbride} 23*55e87721SMatt Gilbride 24*55e87721SMatt Gilbridefunction appendModule() { 25*55e87721SMatt Gilbride friendlyName=$(getFriendlyOutputName "$1") 26*55e87721SMatt Gilbride 27*55e87721SMatt Gilbride # Append the given module to the generated-main.tf configuration to be 28*55e87721SMatt Gilbride # included in the project's resources during 'terraform apply'. 29*55e87721SMatt Gilbride echo "module \"$friendlyName\" { 30*55e87721SMatt Gilbride source = \"./../$1/.cloud\" 31*55e87721SMatt Gilbride inputs = local.data 32*55e87721SMatt Gilbride depends_on = [time_sleep.for_1m_allowBaseCloudApisToFullyEnable] 33*55e87721SMatt Gilbride }" >>generated-main.tf 34*55e87721SMatt Gilbride 35*55e87721SMatt Gilbride # Append the given module to the generated-output.tf file to provide 36*55e87721SMatt Gilbride # all of this module's outputs as an object. 37*55e87721SMatt Gilbride # See https://www.terraform.io/cli/commands/output 38*55e87721SMatt Gilbride echo "output \"$friendlyName\" { 39*55e87721SMatt Gilbride value = module.$friendlyName 40*55e87721SMatt Gilbride sensitive = true 41*55e87721SMatt Gilbride }" >>generated-outputs.tf 42*55e87721SMatt Gilbride} 43*55e87721SMatt Gilbride 44*55e87721SMatt Gilbridefunction appendAllModules() { 45*55e87721SMatt Gilbride # Either use given module list, or get a list of all modules in the parent directory. 46*55e87721SMatt Gilbride if [ -n "$1" ]; then 47*55e87721SMatt Gilbride modules=$1 48*55e87721SMatt Gilbride else 49*55e87721SMatt Gilbride modules=$(listAllModules) 50*55e87721SMatt Gilbride fi 51*55e87721SMatt Gilbride IFS=',' 52*55e87721SMatt Gilbride for module in $modules; do 53*55e87721SMatt Gilbride # Only include modules with a .cloud subdirectory in the generated config. 54*55e87721SMatt Gilbride if [ -d "../$module/.cloud" ]; then 55*55e87721SMatt Gilbride appendModule "${module%/}" # Remove possible trailing '/' 56*55e87721SMatt Gilbride fi 57*55e87721SMatt Gilbride done 58*55e87721SMatt Gilbride} 59*55e87721SMatt Gilbride 60*55e87721SMatt Gilbride# Ensure current directory is <root>/.cloud 61*55e87721SMatt GilbridegenerateDir="$(cd -P -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd -P)" 62*55e87721SMatt Gilbridepushd "$generateDir/.." >/dev/null 63*55e87721SMatt Gilbride 64*55e87721SMatt Gilbridesource ./helpers/common.sh 65*55e87721SMatt GilbrideinitializeGeneratedFiles 66*55e87721SMatt GilbrideappendAllModules "$1" 67*55e87721SMatt Gilbride 68*55e87721SMatt Gilbridepopd >/dev/null 69