136 lines
3.5 KiB
Bash
Executable File
136 lines
3.5 KiB
Bash
Executable File
#/bin/bash
|
|
|
|
#koi: gestion des records dns sur AlwaysData
|
|
#ki: fanch&gaël&fab
|
|
#kan: 06/04/2025
|
|
|
|
#doc: https://api.alwaysdata.com/v1/record/doc/
|
|
#doc: https://help.alwaysdata.com/fr/api/
|
|
|
|
KAZ_ROOT=$(cd "$(dirname $0)"/..; pwd)
|
|
. "${KAZ_ROOT}/bin/.commonFunctions.sh"
|
|
setKazVars
|
|
. "${DOCKERS_ENV}"
|
|
|
|
cd "${KAZ_ROOT}"
|
|
export PRG="$0"
|
|
export IP="127.0.0.1"
|
|
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)
|
|
|
|
export FORCE="NO"
|
|
export CMD=""
|
|
export SIMU=""
|
|
|
|
usage(){
|
|
echo "Usage: ${PRG} list [sub-domain...]"
|
|
echo " ${PRG} [-n] [-f] {add/del} sub-domain..."
|
|
echo " -h help"
|
|
echo " -n simulation"
|
|
echo " -f force protected domain"
|
|
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
|
|
'-h' | '-help' )
|
|
usage
|
|
;;
|
|
'-f' )
|
|
shift
|
|
export FORCE="YES"
|
|
;;
|
|
'-n' )
|
|
shift
|
|
export SIMU="echo"
|
|
;;
|
|
'list'|'add'|'del' )
|
|
shift
|
|
CMD="${ARG}"
|
|
break
|
|
;;
|
|
* )
|
|
usage
|
|
;;
|
|
esac
|
|
done
|
|
|
|
if [ -z "${CMD}" ]; then
|
|
usage
|
|
fi
|
|
|
|
list(){
|
|
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 () {
|
|
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(){
|
|
[[ -z "$1" ]] && return 0;
|
|
for item in "${forbidenName[@]}"; do
|
|
[[ "${item}" == "$1" ]] && [[ "${FORCE}" == "NO" ]] && return 0
|
|
done
|
|
return 1
|
|
}
|
|
|
|
add(){
|
|
if [ $# -lt 1 ]; then
|
|
exit
|
|
fi
|
|
saveDns $@
|
|
declare -a ADDED
|
|
for ARG in $@
|
|
do
|
|
if badName "${ARG}" ; then
|
|
echo "can't manage '${ARG}'. Use -f option"
|
|
continue
|
|
fi
|
|
${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
|
|
saveDns $@
|
|
declare -a REMOVED
|
|
for ARG in $@
|
|
do
|
|
if badName "${ARG}" ; then
|
|
echo "can't manage '${ARG}'. Use -f option"
|
|
continue
|
|
fi
|
|
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[@]}"
|
|
}
|
|
|
|
${CMD} $*
|