summaryrefslogtreecommitdiff
path: root/update.sh
blob: 36ab5fba460f9cecc70a83220892540fc4aca366 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
#!/usr/bin/env bash
set -e

# Not needed but useful to know
function aws_ip_check {

    aws route53 list-resource-record-sets --hosted-zone-id $HOSTED_ZONE_ID \
	--query "ResourceRecordSets[?(Name == 'senders.io.' && Type == 'A')].ResourceRecords[0].Value | [0]" --output text
}

if [ $# -lt 1 ]; then
    echo "Usage: ./update.sh HOSTED_ZONE_ID DOMAIN
       ./update.sh CONFIG_FILE
"
    exit 1
fi
if [ $# -eq 1 ]; then
    source $1
fi
if [ $# -eq 2 ]; then
    HOSTED_ZONE_ID=$1
    DOMAIN=$2
fi
RECORD_CHANGE_JSON=/tmp/aws-ip-update.json

# Fetch IPs

config_ip=$(dig +short $DOMAIN)
actual_ip=$(curl -s https://ipinfo.io/ip)

if [ "$config_ip" != "$actual_ip" ]; then
    echo "Updating IP from $config_id to $actual_ip for $DOMAIN"
    cat <<EOF > $RECORD_CHANGE_JSON
{
  "Changes": [
    {
      "Action": "UPSERT",
      "ResourceRecordSet": {
        "Name": "$DOMAIN",
        "Type": "A",
        "TTL": 300,
        "ResourceRecords": [
          { "Value": "$actual_ip" }
        ]
      }
    }
  ]
}
EOF
    res=$(aws route53 change-resource-record-sets \
	--hosted-zone-id $HOSTED_ZONE_ID \
	--change-batch "file://$RECORD_CHANGE_JSON")
    status=$(echo "$res" | jq -r '.ChangeInfo.Status')

    if [ "$status" == "PENDING" ]; then
	echo "Change submitted. Overall is Pending! (This is expected)"
	exit 0
    else

	if [ "$status" == "SUCCESS" ]; then
	    echo "Change successful"
	    exit 0
	else
	    echo "Non-successful status code: $status"
	    exit 1
	fi
    fi

else
    echo "$DOMAIN is currently registered properly: $config_ip $actual_ip"
fi

exit 0