#!/bin/bash # # 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 -