xref: /aosp_15_r20/external/google-cloud-java/.cloud/helpers/common.sh (revision 55e87721aa1bc457b326496a7ca40f3ea1a63287)
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