Compare commits

...

2 Commits

Author SHA1 Message Date
Asif Bacchus 532f2abd1e Check and update IP if necessary. 2018-09-12 16:53:36 -06:00
Asif Bacchus 346ea58472 Get current IP and record ID at CloudFlare for specified DNS records 2018-09-12 08:45:33 -06:00
1 changed files with 45 additions and 0 deletions

View File

@ -109,6 +109,8 @@ errorExplain=()
dnsRecords=()
cfDetails=()
cfRecords=()
currentIP=()
recordID=()
ip4=1
ip6=0
@ -242,6 +244,49 @@ else
done
fi
## Get existing IP address and identifier in CloudFlare's DNS records
for recordIdx in "${!cfRecords[@]}"; do
currentIP+=($(echo "${cfRecords[recordIdx]}" | \
grep -Po '(?<="content":")[^"]*'))
recordID+=($(echo "${cfRecords[recordIdx]}" | \
grep -Po '(?<="id":")[^"]*'))
echo -e "\e[1;36mIndex $recordIdx: \e[0mFor record\e[1;33m" \
"${dnsRecords[recordIdx]}\e[0m" \
"with ID: \e[1;33m${recordID[recordIdx]}\e[0m" \
"the current IP is \e[1;35m ${currentIP[recordIdx]}\e[0m"
done
## Check whether new IP matches old IP and update if they do not match
for recordIdx in "${!currentIP[@]}"; do
if [ ${currentIP[recordIdx]} = $ipAddress ]; then
echo -e "\e[0;32m${dnsRecords[recordIdx]} is up-to-date.\e[0m"
else
echo -e "\e[0;31m${dnsRecords[recordIdx]} needs updating...\e[0m"
if [ $ip4 -eq 1 ]; then
# update record at CloudFlare with new IP
update=$(curl -s -X PUT "https://api.cloudflare.com/client/v4/zones/${cfDetails[2]}/dns_records/${recordID[recordIdx]}" -H "X-Auth-Email: ${cfDetails[0]}" -H "X-Auth-Key: ${cfDetails[1]}" -H "Content-Type: application/json" --data "{\"id\":\"${cfDetails[2]}\",\"type\":\"A\",\"proxied\":false,\"name\":\"${dnsRecords[recordIdx]}\",\"content\":\"$ipAddress\"}")
# check for success code from CloudFlare
if [[ $update == *"\"success\":true"* ]]; then
echo -e "\e[1;32m${dnsRecords[recordIdx]} updated.\e[0m]"
else
echo -e "\e[1;31m${dnsRecords[recordIdx]} update failed\e[0m"
fi
elif [ $ip6 -eq 1 ]; then
# update record at CloudFlare with new IP
update=$(curl -s -X PUT "https://api.cloudflare.com/client/v4/zones/${cfDetails[2]}/dns_records/${recordID[recordIdx]}" -H "X-Auth-Email: ${cfDetails[0]}" -H "X-Auth-Key: ${cfDetails[1]}" -H "Content-Type: application/json" --data "{\"id\":\"${cfDetails[2]}\",\"type\":\"AAAA\",\"proxied\":false,\"name\":\"${dnsRecords[recordIdx]}\",\"content\":\"$ipAddress\"}")
# check for success code from CloudFlare
if [[ $update == *"\"success\":true"* ]]; then
echo -e "\e[1;32m${dnsRecords[recordIdx]} updated.\e[0m"
else
echo -e "\e[1;31m${dnsRecords[recordIdx]} update failed\e[0m"
fi
fi
fi
done
quit
# this code should never be executed