Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env bash
- set -o errexit
- set -o pipefail
- readonly ENVIRONMENT="${1:-}"
- readonly USE_IAP="${2:-false}"
- readonly PROJECT="domain-${ENVIRONMENT}"
- append() {
- touch ${SCRIPTDIR}/inventory.yml
- printf "%s\n" "${1}" >> ${SCRIPTDIR}/inventory.yml
- }
- generateHeader() {
- append '---'
- }
- generateJumphostEntry() {
- append 'group_jumphost:'
- append ' hosts:'
- append ' jumphost:'
- append " ansible_user: ${SSH_USER}"
- append " ansible_host: jumphost.${ENVIRONMENT}.domain.com"
- append " ansible_ssh_private_key_file: ${SSH_KEY_FILE}"
- append ' ansible_python_interpreter: "/usr/bin/python3"'
- append ''
- }
- generateHostEntry() {
- local entry_group=${1:-}
- local entry_host=${2:-}
- local header_group=${3:-true}
- # if entry_group !: EXISTING_GROUPS[@]
- if [[ "${EXISTING_GROUPS[@]}" =~ "$entry_group" ]]; then
- append "$entry_group:"
- append ' hosts:'
- fi
- append " $entry_host:"
- append ' ansible_python_interpreter: "/usr/bin/python3"'
- if [ ${USE_IAP} == "false" ]; then
- local address_host=$(gcloud compute instances list --filter="name=($entry_host)" --format="value(INTERNAL_IP)")
- append " ansible_user: ${SSH_USER}"
- append " ansible_host: $address_host"
- append " ansible_ssh_private_key_file: ${SSH_KEY_FILE}"
- append " ansible_ssh_common_args: ${SSH_JUMPHOST_SETTINGS}"
- fi
- append ''
- }
- main() {
- gcloud config set project ${PROJECT}
- if [ "${CI}" == "true" ]; then
- declare SCRIPTDIR=$GITHUB_WORKSPACE
- readonly SSH_USER="deploy"
- readonly SSH_KEY_FILE="/home/runner/.ssh/ssh-priv-key"
- else
- declare SCRIPTDIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )
- read -p "Enter SSH_USER ($USER if empty): " SSH_USER; SSH_USER=${SSH_USER:-$USER}
- read -ep "Enter absolute path of SSH_KEY_FILE: " SSH_KEY_FILE # has tab completion, much wow
- fi
- declare SSH_JUMPHOST_CON_STR="${SSH_USER}@jumphost.${ENVIRONMENT}.domain.com"
- declare SSH_JUMPHOST_SETTINGS='-o ProxyCommand="ssh -W %h:%p -q '${SSH_JUMPHOST_CON_STR}'"'
- rm -f ${SCRIPTDIR}/inventory.yml
- generateHeader
- [ ${USE_IAP} == "false" ] && generateJumphostEntry
- declare -a EXISTING_GROUPS
- declare header_group
- declare -a HOSTS=$(gcloud compute instances list --format='value(name)')
- for host in ${HOSTS}; do
- [ $(echo $host | cut -f1 -d "-") == "gke" ] && continue # exclude legacy, testing and gke infra
- [ $(echo $host | cut -f1 -d "-") == "staging" ] && continue
- [ $(echo $host | cut -f1 -d "-") == "stage" ] && continue
- [ $(echo $host | cut -f1 -d "-") == "test" ] && continue
- [ $(echo $host | cut -f1 -d "-") == "jumphost" ] && continue
- group=group_$(echo $host | cut -f1 -d "-")
- # push $group into $EXISTING_GROUPSfddsfsdfsdfsdfsdf
- # cond
- if [[ ! "${EXISTING_GROUPS[*]}" =~ "${group}" ]]; then
- EXISTING_GROUPS+=(${group})
- fi
- echo ${EXISTING_GROUPS[*]}
- generateHostEntry "$group" "$host" "$header_group"
- done
- cat ${SCRIPTDIR}/inventory.yml
- }
- time main
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement