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 Gilbride# Find all directories starting with 'java-', sort them, then join 19*55e87721SMatt Gilbride# with ',' as the delimiter. 20*55e87721SMatt Gilbridefunction listAllModules() { 21*55e87721SMatt Gilbride # Ensure current directory is repo root. 22*55e87721SMatt Gilbride helperDir="$(cd -P -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd -P)" 23*55e87721SMatt Gilbride pushd "$helperDir/../.." >/dev/null 24*55e87721SMatt Gilbride 25*55e87721SMatt Gilbride ls -1 -d java-* | sort | paste -s -d, - 26*55e87721SMatt Gilbride 27*55e87721SMatt Gilbride popd >/dev/null 28*55e87721SMatt Gilbride} 29*55e87721SMatt Gilbride 30*55e87721SMatt Gilbride# Replaces '-' with '_' to get a Terraform output-friendly label 31*55e87721SMatt Gilbridefunction getFriendlyOutputName() { 32*55e87721SMatt Gilbride echo "$1" | tr '-' _ 33*55e87721SMatt Gilbride} 34*55e87721SMatt Gilbride 35*55e87721SMatt Gilbride# Get the output object in JSON format for the given module. 36*55e87721SMatt Gilbridefunction getOutput() { 37*55e87721SMatt Gilbride friendlyName=$(getFriendlyOutputName "$1") 38*55e87721SMatt Gilbride terraform output -json "$friendlyName" 39*55e87721SMatt Gilbride} 40*55e87721SMatt Gilbride 41*55e87721SMatt Gilbride# Parse stdin and get the value associated with the given key. 42*55e87721SMatt Gilbridefunction parseJson() { 43*55e87721SMatt Gilbride jq ".$1" -r 44*55e87721SMatt Gilbride} 45*55e87721SMatt Gilbride 46*55e87721SMatt Gilbride# Example use: getModuleOutput java-redis redis_network 47*55e87721SMatt Gilbridefunction getModuleOutput() { 48*55e87721SMatt Gilbride getOutput "$1" | parseJson "$2" 49*55e87721SMatt Gilbride} 50*55e87721SMatt Gilbride 51*55e87721SMatt Gilbride# @returns exit code 0 if list $1 contains entry $2. 52*55e87721SMatt Gilbridefunction contains() { 53*55e87721SMatt Gilbride echo "$1" | grep -w -q "$2" 54*55e87721SMatt Gilbride} 55*55e87721SMatt Gilbride 56*55e87721SMatt Gilbride# @returns a "new line"-delimited list of active terraform modules 57*55e87721SMatt Gilbridefunction getActiveTerraformModules() { 58*55e87721SMatt Gilbride terraform state list | awk -F'[/.]' '{print $2}' | uniq 59*55e87721SMatt Gilbride} 60*55e87721SMatt Gilbride 61*55e87721SMatt Gilbridefunction getTerraformServiceAccountName() { 62*55e87721SMatt Gilbride echo "terraform-service-account" 63*55e87721SMatt Gilbride} 64*55e87721SMatt Gilbride 65*55e87721SMatt Gilbridefunction getTerraformServiceAccountEmail() { 66*55e87721SMatt Gilbride if [ -z "${GOOGLE_CLOUD_PROJECT}" ]; then 67*55e87721SMatt Gilbride echo "GOOGLE_CLOUD_PROJECT must be defined." 68*55e87721SMatt Gilbride exit 1 69*55e87721SMatt Gilbride fi 70*55e87721SMatt Gilbride echo "$(getTerraformServiceAccountName)@$GOOGLE_CLOUD_PROJECT.iam.gserviceaccount.com" 71*55e87721SMatt Gilbride} 72