SHOW:
|
|
- or go back to the newest paste.
1 | #!/usr/bin/env bash | |
2 | set -o errexit | |
3 | set -o pipefail | |
4 | ||
5 | readonly ENVIRONMENT="${1:-}" | |
6 | readonly USE_IAP="${2:-false}" | |
7 | readonly PROJECT="domain-${ENVIRONMENT}" | |
8 | ||
9 | append() { | |
10 | touch ${SCRIPTDIR}/inventory.yml | |
11 | printf "%s\n" "${1}" >> ${SCRIPTDIR}/inventory.yml | |
12 | } | |
13 | ||
14 | generateHeader() { | |
15 | append '---' | |
16 | } | |
17 | generateJumphostEntry() { | |
18 | append 'group_jumphost:' | |
19 | append ' hosts:' | |
20 | append ' jumphost:' | |
21 | append " ansible_user: ${SSH_USER}" | |
22 | append " ansible_host: jumphost.${ENVIRONMENT}.domain.com" | |
23 | append " ansible_ssh_private_key_file: ${SSH_KEY_FILE}" | |
24 | append ' ansible_python_interpreter: "/usr/bin/python3"' | |
25 | append '' | |
26 | } | |
27 | generateHostEntry() { | |
28 | - | local entry_group=${1:-} |
28 | + | local prior_group=${1:-} |
29 | - | local entry_host=${2:-} |
29 | + | local entry_group=${2:-} |
30 | - | local header_group=${3:-true} |
30 | + | local entry_host=${3:-} |
31 | local header_group=${4:-true} | |
32 | - | # if entry_group !: EXISTING_GROUPS[@] |
32 | + | |
33 | - | if [[ "${EXISTING_GROUPS[@]}" =~ "$entry_group" ]]; then |
33 | + | if [[ "$prior_group" != "$entry_group" ]]; then |
34 | append "$entry_group:" | |
35 | append ' hosts:' | |
36 | fi | |
37 | append " $entry_host:" | |
38 | append ' ansible_python_interpreter: "/usr/bin/python3"' | |
39 | if [ ${USE_IAP} == "false" ]; then | |
40 | local address_host=$(gcloud compute instances list --filter="name=($entry_host)" --format="value(INTERNAL_IP)") | |
41 | append " ansible_user: ${SSH_USER}" | |
42 | append " ansible_host: $address_host" | |
43 | append " ansible_ssh_private_key_file: ${SSH_KEY_FILE}" | |
44 | append " ansible_ssh_common_args: ${SSH_JUMPHOST_SETTINGS}" | |
45 | fi | |
46 | append '' | |
47 | } | |
48 | ||
49 | main() { | |
50 | gcloud config set project ${PROJECT} | |
51 | ||
52 | if [ "${CI}" == "true" ]; then | |
53 | declare SCRIPTDIR=$GITHUB_WORKSPACE | |
54 | readonly SSH_USER="deploy" | |
55 | readonly SSH_KEY_FILE="/home/runner/.ssh/ssh-priv-key" | |
56 | else | |
57 | declare SCRIPTDIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd ) | |
58 | read -p "Enter SSH_USER ($USER if empty): " SSH_USER; SSH_USER=${SSH_USER:-$USER} | |
59 | read -ep "Enter absolute path of SSH_KEY_FILE: " SSH_KEY_FILE # has tab completion, much wow | |
60 | fi | |
61 | ||
62 | declare SSH_JUMPHOST_CON_STR="${SSH_USER}@jumphost.${ENVIRONMENT}.domain.com" | |
63 | declare SSH_JUMPHOST_SETTINGS='-o ProxyCommand="ssh -W %h:%p -q '${SSH_JUMPHOST_CON_STR}'"' | |
64 | ||
65 | rm -f ${SCRIPTDIR}/inventory.yml | |
66 | generateHeader | |
67 | [ ${USE_IAP} == "false" ] && generateJumphostEntry | |
68 | ||
69 | - | declare -a EXISTING_GROUPS |
69 | + | last_group= |
70 | declare header_group | |
71 | declare -a HOSTS=$(gcloud compute instances list --format='value(name)') | |
72 | for host in ${HOSTS}; do | |
73 | [ $(echo $host | cut -f1 -d "-") == "gke" ] && continue # exclude legacy, testing and gke infra | |
74 | [ $(echo $host | cut -f1 -d "-") == "staging" ] && continue | |
75 | [ $(echo $host | cut -f1 -d "-") == "stage" ] && continue | |
76 | [ $(echo $host | cut -f1 -d "-") == "test" ] && continue | |
77 | [ $(echo $host | cut -f1 -d "-") == "jumphost" ] && continue | |
78 | group=group_$(echo $host | cut -f1 -d "-") | |
79 | ||
80 | generateHostEntry "$last_group" "$group" "$host" "$header_group" | |
81 | - | # push $group into $EXISTING_GROUPSfddsfsdfsdfsdfsdf |
81 | + | last_group="$group" |
82 | - | # cond |
82 | + | |
83 | - | if [[ ! "${EXISTING_GROUPS[*]}" =~ "${group}" ]]; then |
83 | + | |
84 | - | EXISTING_GROUPS+=(${group}) |
84 | + | |
85 | - | fi |
85 | + | |
86 | time main | |
87 | - | echo ${EXISTING_GROUPS[*]} |
87 | + |