|
- #!/bin/bash
- #
- # Copyright (c) 2020 Bubble, Inc. All rights reserved. For personal (non-commercial) use, see license: https://bubblev.com/bubble-license/
- #
- #
- # Update a role on a remote node
- #
- # Usage:
- #
- # update_role domain role-dir
- #
- # domain : a bubble domain
- # role-dir : the role directory
- #
- # Environment variables
- #
- # BUBBLE_API : which API to use. Default is local (http://127.0.0.1:PORT, where PORT is found in .bubble.env)
- # BUBBLE_USER : account to use. Default is root
- # BUBBLE_PASS : password for account. Default is root
- # BUBBLE_INCLUDE : path to look for JSON include files. default value is to assume we are being run from
- # bubble repo, bubble-models repo, or bubble-client and use include files from minimal model.
- #
-
- SCRIPT="${0}"
- SCRIPT_DIR=$(cd $(dirname ${SCRIPT}) && pwd)
- . ${SCRIPT_DIR}/bubble_common
-
- DOMAIN=${1:?no domain provided}
- ROLE_DIR="${2:?no role dir provided}"
- ROLE_TO_UPDATE="$(basename "${ROLE_DIR}")"
- ROLE_JSON="${ROLE_DIR}/files/bubble_role.json"
-
- if [[ ! -d "${ROLE_DIR}" ]] ; then
- die "Role dir does not exist or is not a directory: ${ROLE_DIR}"
- fi
- if [[ ! -f "${ROLE_DIR}/tasks/main.yml" ]] ; then
- die "Role dir is invalid (missing tasks/main.yml): ${ROLE_DIR}"
- fi
- if [[ ! -f "${ROLE_JSON}" ]] ; then
- die "Role json does not exist: ${ROLE_JSON}"
- fi
-
- role_json_name="$(cat ${ROLE_JSON} | jq -r .name)"
- if [[ -z "${role_json_name}" ]] ; then
- die "Role json does not have a name field"
- fi
-
- role_name="$(echo -n ${role_json_name} | cut -d- -f1)"
- if [[ "${role_name}" != "${ROLE_TO_UPDATE}" ]] ; then
- die "Role name in JSON (${role_name}) does not match dir basename: ${ROLE_DIR}"
- fi
-
- # update tgzB64 in JSON
- temp_tar_b64="$(mktemp /tmp/${role_name}.XXXXXXX.tgz.b64)"
- echo -n '"' > "${temp_tar_b64}"
- cd ${ROLE_DIR}/.. && tar cz $(basename ${ROLE_DIR}) | base64 -w0 >> ${temp_tar_b64} && cd - > /dev/null
- echo -n '"' >> "${temp_tar_b64}"
-
- ROLE_JSON="$(cat ${ROLE_JSON} | jq --argfile tgzB64 "${temp_tar_b64}" '. + {tgzB64: $tgzB64}')"
-
- rm -f "${temp_tar_b64}"
- #echo "${temp_tar_b64}"
- #exit 0
-
- echo "{\"domain\": \"${DOMAIN}\", \"update_role\": \"${ROLE_TO_UPDATE}\", \"role\": ${ROLE_JSON} }" | \
- exec ${SCRIPT_DIR}/bscript ${SCRIPT_DIR}/../scripts/update_role.json --vars -
|