From 07f8ef815111127f90704b5a04076efc507b2a4b Mon Sep 17 00:00:00 2001 From: nom Date: Sun, 6 Apr 2025 00:38:16 +0200 Subject: [PATCH] maj dns_alwaysdata.sh --- bin/dns_alwaysdata.sh | 130 ++++++++---------------------------------- 1 file changed, 23 insertions(+), 107 deletions(-) diff --git a/bin/dns_alwaysdata.sh b/bin/dns_alwaysdata.sh index 753f24b..dab559d 100755 --- a/bin/dns_alwaysdata.sh +++ b/bin/dns_alwaysdata.sh @@ -1,14 +1,12 @@ -#!/bin/bash +#/bin/bash #koi: gestion des records dns sur AlwaysData -#ki: fab -#kan: 22/03/2025 +#ki: fanch&gaël&fab +#kan: 06/04/2025 #doc: https://api.alwaysdata.com/v1/record/doc/ #doc: https://help.alwaysdata.com/fr/api/ -# list/ajout/supprime/ un sous-domaine - KAZ_ROOT=$(cd "$(dirname $0)"/..; pwd) . "${KAZ_ROOT}/bin/.commonFunctions.sh" setKazVars @@ -22,6 +20,7 @@ export ETC_HOSTS="/etc/hosts" # no more export in .env export $(set | grep "domain=") +#TODO: récupérer la liste des services kaz au lieu des les écrire en dur declare -a forbidenName forbidenName=(${calcHost} calc ${cloudHost} bureau ${dateHost} date ${dokuwikiHost} dokuwiki ${fileHost} file ${ldapHost} ${pahekoHost} ${gitHost} ${gravHost} ${matterHost} ${officeHost} collabora ${padHost} ${sympaHost} listes ${webmailHost} ${wordpressHost} www ${vigiloHost} form) @@ -38,6 +37,15 @@ usage(){ exit 1 } +. "${KAZ_KEY_DIR}/env-alwaysdata" + +if [[ -z "${ALWAYSDATA_TOKEN}" ]] ; then + echo "no ALWAYSDATA_TOKEN set in ${KAZ_KEY_DIR}/env-alwaysdata" + usage +fi + +DOMAIN_ID=$(curl -s -X GET --basic --user "${ALWAYSDATA_TOKEN} account=${ALWAYSDATA_ACCOUNT}:" ${ALWAYSDATA_API}/domain/?name=${domain} | jq '.[0].id') + for ARG in $@ do case "${ARG}" in @@ -67,81 +75,15 @@ if [ -z "${CMD}" ]; then usage fi -. "${KAZ_KEY_DIR}/env-alwaysdata" - -if [[ -z "${ALWAYSDATA_TOKEN}" ]] ; then - echo - echo "no ALWAYSDATA_TOKEN set in ${KAZ_KEY_DIR}/env-alwaysdata" - usage -fi - - -waitNet () { -#on sort tout de suite -return - - if [[ "${domain}" = "kaz.local" ]]; then - return - fi - - ### wait when error code 503 - if [[ $(curl -H "authorization: Apikey ${ALWAYSDATA_TOKEN}" --connect-timeout 2 -s -D - "${ALWAYSDATA_API}" -o /dev/null 2>/dev/null | head -n1) != *200* ]]; then - echo "DNS not available. Please wait..." - while [[ $(curl -H "authorization: Apikey ${ALWAYSDATA_TOKEN}" --connect-timeout 2 -s -D - "${ALWAYSDATA_API}" -o /dev/null 2>/dev/null | head -n1) != *200* ]] - do - sleep 5 - done - exit - fi -} - list(){ - if [[ "${domain}" = "kaz.local" ]]; then - grep --perl-regex "^${IP}\s.*${domain}" "${ETC_HOSTS}" 2> /dev/null | sed -e "s|^${IP}\s*\([0-9a-z.-]${domain}\)$|\1|g" - return - fi - waitNet - trap 'rm -f "${TMPFILE}"' EXIT - TMPFILE="$(mktemp)" || exit 1 - if [[ -n "${SIMU}" ]] ; then - ${SIMU} curl -X GET "${ALWAYSDATA_API}/records" -H "authorization: Apikey ${ALWAYSDATA_TOKEN}" - else - curl -X GET "${ALWAYSDATA_API}/records" -H "authorization: Apikey ${ALWAYSDATA_TOKEN}" 2>/dev/null | \ - sed "s/,{/\n/g" | \ - sed 's/.*rrset_name":"\([^"]*\)".*rrset_values":\["\([^"]*\)".*/\1:\2/g'| \ - grep -v '^[_@]'| \ - grep -e ":${domain}\.*$" -e ":prod[0-9]*$" > ${TMPFILE} - fi - if [ $# -lt 1 ]; then - cat ${TMPFILE} - else - for ARG in $@ - do - cat ${TMPFILE} | grep "${ARG}.*:" - done - fi + TARGET=$@ + LISTE=$(curl -s -X GET --basic --user "${ALWAYSDATA_TOKEN} account=${ALWAYSDATA_ACCOUNT}:" "${ALWAYSDATA_API}/record/?domain=${DOMAIN_ID}&type=CNAME&name=${TARGET}" | jq '.[] | "\(.name):\(.value)"') + echo ${LISTE} } saveDns () { - for ARG in $@ ; do - if [[ "${ARG}" =~ .local$ ]] ; then - echo "${PRG}: old fasion style (remove .local at the end)" - usage; - fi - if [[ "${ARG}" =~ .bzh$ ]] ; then - echo "${PRG}: old fasion style (remove .bzh at the end)" - usage; - fi - if [[ "${ARG}" =~ .dev$ ]] ; then - echo "${PRG}: old fasion style (remove .dev at the end)" - usage; - fi - done - if [[ "${domain}" = "kaz.local" ]]; then - return - fi - waitNet - ${SIMU} curl -X POST "${ALWAYSDATA_API}/snapshots" -H "authorization: Apikey ${ALWAYSDATA_TOKEN}" 2>/dev/null + mkdir -p /root/dns + ${SIMU} curl -s -X GET --basic --user "${ALWAYSDATA_TOKEN} account=${ALWAYSDATA_ACCOUNT}:" "${ALWAYSDATA_API}/record/?domain=${DOMAIN_ID}" -o /root/dns/dns_save_$(date +'%Y%m%d%H%M%S') } badName(){ @@ -164,28 +106,14 @@ add(){ echo "can't manage '${ARG}'. Use -f option" continue fi - case "${domain}" in - kaz.local ) - if grep -q --perl-regex "^${IP}.*[ \t]${ARG}.${domain}" "${ETC_HOSTS}" 2> /dev/null ; then - break - fi - if grep -q --perl-regex "^${IP}[ \t]" "${ETC_HOSTS}" 2> /dev/null ; then - ${SIMU} sudo sed -i -e "0,/^${IP}[ \t]/s/^\(${IP}[ \t]\)/\1${ARG}.${domain} /g" "${ETC_HOSTS}" - else - ${SIMU} sudo sed -i -e "$ a ${IP}\t${ARG}.${domain}" "${ETC_HOSTS}" 2> /dev/null - fi - ;; - *) - ${SIMU} curl -X POST "${ALWAYSDATA_API}/records" -H "authorization: Apikey ${ALWAYSDATA_TOKEN}" -H 'content-type: application/json' -d '{"rrset_type":"CNAME", "rrset_name":"'${ARG}'", "rrset_values":["'${site}'"]}' - echo - ;; - esac + ${SIMU} curl -s -X POST -d "{\"domain\":\"${DOMAIN_ID}\", \"type\":\"CNAME\", \"name\":\"${ARG}\", \"value\":\"${site}.${domain}\"}" --basic --user "${ALWAYSDATA_TOKEN} account=${ALWAYSDATA_ACCOUNT}:" "${ALWAYSDATA_API}/record/" ADDED+=("${ARG}") done echo "Domains added to ${domain}: ${ADDED[@]}" -} +} del(){ + if [ $# -lt 1 ]; then exit fi @@ -197,23 +125,11 @@ del(){ echo "can't manage '${ARG}'. Use -f option" continue fi - case "${domain}" in - kaz.local ) - if !grep -q --perl-regex "^${IP}.*[ \t]${ARG}.${domain}" "${ETC_HOSTS}" 2> /dev/null ; then - break - fi - ${SIMU} sudo sed -i -e "/^${IP}[ \t]*${ARG}.${domain}[ \t]*$/d" \ - -e "s|^\(${IP}.*\)[ \t]${ARG}.${domain}|\1|g" "${ETC_HOSTS}" - ;; - * ) - ${SIMU} curl -X DELETE "${ALWAYSDATA_API}/records/${ARG}" -H "authorization: Apikey ${ALWAYSDATA_TOKEN}" - echo - ;; - esac + RECORD_ID=$(curl -s -X GET --basic --user "${ALWAYSDATA_TOKEN} account=${ALWAYSDATA_ACCOUNT}:" "${ALWAYSDATA_API}/record/?name=${ARG}&type=CNAME&domain=${DOMAIN_ID}" | jq ".[] | select(.name==\"${ARG}\").id") + ${SIMU} curl -s -X DELETE --basic --user "${ALWAYSDATA_TOKEN} account=${ALWAYSDATA_ACCOUNT}:" "${ALWAYSDATA_API}/record/${RECORD_ID}/" REMOVED+=("${ARG}") done echo "Domains removed from ${domain}: ${REMOVED[@]}" } -#echo "CMD: ${CMD} $*" ${CMD} $*