Skip to content
Snippets Groups Projects
cloudflare.sh 1.67 KiB
Newer Older
Dean Lovett's avatar
Dean Lovett committed
#!/usr/bin/with-contenv sh

cloudflare() {
  curl -sSL \
     -H "Accept: application/json" \
     -H "Authorization: Bearer $API_KEY" \
     -H "Content-Type:application/json" \
     "$@"
}

verifyToken() {
  cloudflare -o /dev/null "$CF_API"/user/tokens/verify
}

getZoneId() {
  Result=$(cloudflare "$CF_API/zones?name=$ZONE")
  echo $Result | jq -rc '.result[0].id'
}

getDnsRecordName() {
  if [ ! -z "$SUBDOMAIN" ]; then
    echo $CI_ENVIRONMENT_SLUG.$ZONE
Dean Lovett's avatar
Dean Lovett committed
  else
    echo $ZONE
  fi
}

getDnsRecordId() {
  cloudflare "$CF_API/zones/$1/dns_records?type=$RRTYPE&name=$2" | jq -r '.result[0].id'
}

createDnsRecord() {
  cloudflare -X POST -d "{\"type\": \"$RRTYPE\",\"name\":\"$2\",\"content\":\"$3\",\"proxied\":true,\"ttl\":1 }" "$CF_API/zones/$1/dns_records" | jq -r '.result.id'
}

updateDnsRecord() {
  cloudflare -X PATCH -d "{\"type\": \"$RRTYPE\",\"name\":\"$3\",\"content\":\"$4\",\"proxied\":true,\"ttl\":1 }" "$CF_API/zones/$1/dns_records/$2" | jq -r '.result.id'
}

echo "Verifying token..."
verifyToken
echo "Token verified!"

echo "Retreiving Zone ID..."
CFZoneId=$(getZoneId)
echo "Zone ID found: $CFZoneId"

echo "Finding DNS record..."
CFDnsRecordName=$(getDnsRecordName)
CFDnsRecordId=$(getDnsRecordId $CFZoneId $CFDnsRecordName)

echo $CFDnsRecordId

if [ "$CFDnsRecordId" != "null" ]; then
  echo "DNS Record found: $CFDnsRecordId, updating..."
  CFDnsRecordId=$(updateDnsRecord $CFZoneId $CFDnsRecordId $CFDnsRecordName $IP_ADDRESS)
  echo "Updated DNS Record: $CFDnsRecordId"
else
  echo "No DNS Record for $CFDnsRecordName, creating..."
  CFDnsRecordId=$(createDnsRecord $CFZoneId $CFDnsRecordName $IP_ADDRESS)

  echo $CFDnsRecordId
  echo "Created DNS Record: $CFDnsRecordId"
fi