|
@@ -0,0 +1,86 @@
|
|
|
+#!/bin/bash
|
|
|
+
|
|
|
+# More advanced options below
|
|
|
+# The Time-To-Live of this recordset
|
|
|
+TTL=300
|
|
|
+# Change this if you want
|
|
|
+COMMENT="Auto updating @ `date`"
|
|
|
+# Change to AAAA if using an IPv6 address
|
|
|
+TYPE="A"
|
|
|
+
|
|
|
+# Get the external IP address
|
|
|
+IP=`curl -ss http://ipv4.icanhazip.com/`
|
|
|
+
|
|
|
+function valid_ip()
|
|
|
+{
|
|
|
+ local ip=$1
|
|
|
+ local stat=1
|
|
|
+
|
|
|
+ if [[ $ip =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]; then
|
|
|
+ OIFS=$IFS
|
|
|
+ IFS='.'
|
|
|
+ ip=($ip)
|
|
|
+ IFS=$OIFS
|
|
|
+ [[ ${ip[0]} -le 255 && ${ip[1]} -le 255 \
|
|
|
+ && ${ip[2]} -le 255 && ${ip[3]} -le 255 ]]
|
|
|
+ stat=$?
|
|
|
+ fi
|
|
|
+ return $stat
|
|
|
+}
|
|
|
+
|
|
|
+DIR=/scratch/
|
|
|
+LOGFILE="$DIR/update-route53.log"
|
|
|
+IPFILE="$DIR/update-route53.ip"
|
|
|
+
|
|
|
+if ! valid_ip $IP; then
|
|
|
+ echo "Invalid IP address: $IP" >> "$LOGFILE"
|
|
|
+ exit 1
|
|
|
+fi
|
|
|
+
|
|
|
+# Check if the IP has changed
|
|
|
+if [ ! -f "$IPFILE" ]
|
|
|
+ then
|
|
|
+ touch "$IPFILE"
|
|
|
+fi
|
|
|
+
|
|
|
+if grep -Fxq "$IP" "$IPFILE"; then
|
|
|
+ # code if found
|
|
|
+ echo "IP is still $IP. Exiting" >> "$LOGFILE"
|
|
|
+ exit 0
|
|
|
+else
|
|
|
+ echo "IP has changed to $IP" >> "$LOGFILE"
|
|
|
+ # Fill a temp file with valid JSON
|
|
|
+ TMPFILE=$(mktemp /tmp/temporary-file.XXXXXXXX)
|
|
|
+ cat > ${TMPFILE} << EOF
|
|
|
+ {
|
|
|
+ "Comment":"$COMMENT",
|
|
|
+ "Changes":[
|
|
|
+ {
|
|
|
+ "Action":"UPSERT",
|
|
|
+ "ResourceRecordSet":{
|
|
|
+ "ResourceRecords":[
|
|
|
+ {
|
|
|
+ "Value":"$IP"
|
|
|
+ }
|
|
|
+ ],
|
|
|
+ "Name":"$RECORDSET",
|
|
|
+ "Type":"$TYPE",
|
|
|
+ "TTL":$TTL
|
|
|
+ }
|
|
|
+ }
|
|
|
+ ]
|
|
|
+ }
|
|
|
+EOF
|
|
|
+
|
|
|
+ # Update the Hosted Zone record
|
|
|
+ aws route53 change-resource-record-sets \
|
|
|
+ --hosted-zone-id $ZONEID \
|
|
|
+ --change-batch file://"$TMPFILE" >> "$LOGFILE"
|
|
|
+ echo "" >> "$LOGFILE"
|
|
|
+
|
|
|
+ # Clean up
|
|
|
+ rm $TMPFILE
|
|
|
+fi
|
|
|
+
|
|
|
+# All Done - cache the IP address for next time
|
|
|
+echo "$IP" > "$IPFILE"
|