maj dns_alwaysdata.sh
This commit is contained in:
parent
aad57eafae
commit
07f8ef8151
@ -1,14 +1,12 @@
|
|||||||
#!/bin/bash
|
#/bin/bash
|
||||||
|
|
||||||
#koi: gestion des records dns sur AlwaysData
|
#koi: gestion des records dns sur AlwaysData
|
||||||
#ki: fab
|
#ki: fanch&gaël&fab
|
||||||
#kan: 22/03/2025
|
#kan: 06/04/2025
|
||||||
|
|
||||||
#doc: https://api.alwaysdata.com/v1/record/doc/
|
#doc: https://api.alwaysdata.com/v1/record/doc/
|
||||||
#doc: https://help.alwaysdata.com/fr/api/
|
#doc: https://help.alwaysdata.com/fr/api/
|
||||||
|
|
||||||
# list/ajout/supprime/ un sous-domaine
|
|
||||||
|
|
||||||
KAZ_ROOT=$(cd "$(dirname $0)"/..; pwd)
|
KAZ_ROOT=$(cd "$(dirname $0)"/..; pwd)
|
||||||
. "${KAZ_ROOT}/bin/.commonFunctions.sh"
|
. "${KAZ_ROOT}/bin/.commonFunctions.sh"
|
||||||
setKazVars
|
setKazVars
|
||||||
@ -22,6 +20,7 @@ export ETC_HOSTS="/etc/hosts"
|
|||||||
# no more export in .env
|
# no more export in .env
|
||||||
export $(set | grep "domain=")
|
export $(set | grep "domain=")
|
||||||
|
|
||||||
|
#TODO: récupérer la liste des services kaz au lieu des les écrire en dur
|
||||||
declare -a forbidenName
|
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)
|
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
|
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 $@
|
for ARG in $@
|
||||||
do
|
do
|
||||||
case "${ARG}" in
|
case "${ARG}" in
|
||||||
@ -67,81 +75,15 @@ if [ -z "${CMD}" ]; then
|
|||||||
usage
|
usage
|
||||||
fi
|
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(){
|
list(){
|
||||||
if [[ "${domain}" = "kaz.local" ]]; then
|
TARGET=$@
|
||||||
grep --perl-regex "^${IP}\s.*${domain}" "${ETC_HOSTS}" 2> /dev/null | sed -e "s|^${IP}\s*\([0-9a-z.-]${domain}\)$|\1|g"
|
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)"')
|
||||||
return
|
echo ${LISTE}
|
||||||
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
|
|
||||||
}
|
}
|
||||||
|
|
||||||
saveDns () {
|
saveDns () {
|
||||||
for ARG in $@ ; do
|
mkdir -p /root/dns
|
||||||
if [[ "${ARG}" =~ .local$ ]] ; then
|
${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')
|
||||||
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
|
|
||||||
}
|
}
|
||||||
|
|
||||||
badName(){
|
badName(){
|
||||||
@ -164,28 +106,14 @@ add(){
|
|||||||
echo "can't manage '${ARG}'. Use -f option"
|
echo "can't manage '${ARG}'. Use -f option"
|
||||||
continue
|
continue
|
||||||
fi
|
fi
|
||||||
case "${domain}" in
|
${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/"
|
||||||
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
|
|
||||||
ADDED+=("${ARG}")
|
ADDED+=("${ARG}")
|
||||||
done
|
done
|
||||||
echo "Domains added to ${domain}: ${ADDED[@]}"
|
echo "Domains added to ${domain}: ${ADDED[@]}"
|
||||||
}
|
}
|
||||||
|
|
||||||
del(){
|
del(){
|
||||||
|
|
||||||
if [ $# -lt 1 ]; then
|
if [ $# -lt 1 ]; then
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
@ -197,23 +125,11 @@ del(){
|
|||||||
echo "can't manage '${ARG}'. Use -f option"
|
echo "can't manage '${ARG}'. Use -f option"
|
||||||
continue
|
continue
|
||||||
fi
|
fi
|
||||||
case "${domain}" in
|
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")
|
||||||
kaz.local )
|
${SIMU} curl -s -X DELETE --basic --user "${ALWAYSDATA_TOKEN} account=${ALWAYSDATA_ACCOUNT}:" "${ALWAYSDATA_API}/record/${RECORD_ID}/"
|
||||||
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
|
|
||||||
REMOVED+=("${ARG}")
|
REMOVED+=("${ARG}")
|
||||||
done
|
done
|
||||||
echo "Domains removed from ${domain}: ${REMOVED[@]}"
|
echo "Domains removed from ${domain}: ${REMOVED[@]}"
|
||||||
}
|
}
|
||||||
|
|
||||||
#echo "CMD: ${CMD} $*"
|
|
||||||
${CMD} $*
|
${CMD} $*
|
||||||
|
Loading…
x
Reference in New Issue
Block a user