From f65df2752535a26b6b99afabca3b77aef6659c4a Mon Sep 17 00:00:00 2001 From: Dave Compton Date: Thu, 8 Aug 2024 17:12:48 -0700 Subject: [PATCH] added working version of scripts --- set_digitalocean_dns_a_record.bash | 47 +++++++++++++++++++ update_digitalocean_dns_a_record.bash | 30 ++++++++++++ update_digitalocean_dns_a_record_to_myip.bash | 14 ++++++ 3 files changed, 91 insertions(+) create mode 100755 set_digitalocean_dns_a_record.bash create mode 100755 update_digitalocean_dns_a_record.bash create mode 100755 update_digitalocean_dns_a_record_to_myip.bash diff --git a/set_digitalocean_dns_a_record.bash b/set_digitalocean_dns_a_record.bash new file mode 100755 index 0000000..f795894 --- /dev/null +++ b/set_digitalocean_dns_a_record.bash @@ -0,0 +1,47 @@ +#! /bin/bash +SCRIPT="${BASH_SOURCE[0]}" +SCRIPT_DIR=${SCRIPT%/*} + +DIGITALOCEAN_DOMAIN=$1 +IP=$2 + +DIGITALOCEAN_TOKEN=`cat $SCRIPT_DIR/DO_TOKEN` + +get_a_record_ids() { + curl -X GET \ + -H "Content-Type: application/json" \ + -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \ + "https://api.digitalocean.com/v2/domains/$DIGITALOCEAN_DOMAIN/records" 2> /dev/null | jq '.domain_records | map(select(.type == "A" and .name == "@")) | map(.id) | .[]' +} + +add_a_record() { + echo adding new A record for $DIGITALOCEAN_DOMAIN with value : $IP + curl -X POST \ + -H "Content-Type: application/json" \ + -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \ + -d "{\"type\":\"A\" \ + ,\"name\":\"@\" \ + ,\"data\":\"$IP\" \ + ,\"priority\":null \ + ,\"port\":null \ + ,\"ttl\":1800 \ + ,\"weight\":null \ + ,\"flags\":null \ + ,\"tag\":null \ + }" \ + "https://api.digitalocean.com/v2/domains/$DIGITALOCEAN_DOMAIN/records" > /dev/null 2>&1 +} + +delete_record_by_id() { + echo deleting existing A record for $DIGITALOCEAN_DOMAIN + curl -X DELETE \ + -H "Content-Type: application/json" \ + -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \ + "https://api.digitalocean.com/v2/domains/$DIGITALOCEAN_DOMAIN/records/$1" > /dev/null 2>&1 +} + +for s in `get_a_record_ids`; do + delete_record_by_id $s +done + +add_a_record diff --git a/update_digitalocean_dns_a_record.bash b/update_digitalocean_dns_a_record.bash new file mode 100755 index 0000000..3dc3edf --- /dev/null +++ b/update_digitalocean_dns_a_record.bash @@ -0,0 +1,30 @@ +#! /bin/bash + +# set an A record but first check to make sure we didn't just do this. + +DIGITALOCEAN_DOMAIN=$1 +IP=$2 + +SCRIPT="${BASH_SOURCE[0]}" +SCRIPT_DIR=${SCRIPT%/*} +SCRIPT_NAME=${SCRIPT##*/} + +REPEAT_CHECK_DIR=$HOME/repeat_check +REPEAT_CHECK=$REPEAT_CHECK_DIR/$SCRIPT_NAME # file to save argument in if successful + +# exit if previous successful call was with same argument +if [[ -e $REPEAT_CHECK ]]; then + PREVIOUS_ARGUMENTS=`cat $REPEAT_CHECK` + if [[ "$*" == "$PREVIOUS_ARGUMENTS" ]]; then + echo previous call to $SCRIPT was also with arguments: \"$*\" so exiting now to avoid duplicate work. + exit + fi +fi + +if $SCRIPT_DIR/set_digitalocean_dns_a_record.bash $@; then + # if successful then save arguments. + echo call to $SCRIPT worked so saving arguments \"$*\" in $REPEAT_CHECK + mkdir -p $REPEAT_CHECK_DIR + echo "$*" > $REPEAT_CHECK +fi + diff --git a/update_digitalocean_dns_a_record_to_myip.bash b/update_digitalocean_dns_a_record_to_myip.bash new file mode 100755 index 0000000..178b269 --- /dev/null +++ b/update_digitalocean_dns_a_record_to_myip.bash @@ -0,0 +1,14 @@ +#! /bin/bash +SCRIPT="${BASH_SOURCE[0]}" +SCRIPT_DIR=${SCRIPT%/*} + +DIGITALOCEAN_DOMAIN=$1 +IP=`curl -4 icanhazip.com 2> /dev/null` + +# thank you for regular expression to : https://tecadmin.net/shell-script-validate-ipv4-addresses/ +if [[ $IP =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]; then + $SCRIPT_DIR/update_digitalocean_dns_a_record.bash $DIGITALOCEAN_DOMAIN $IP +fi + + +