neyder
By:
neyder

Can't update record with APIv2

November 8, 2014 945 views

Hi there I'm using this script to update a record in "data" field, but it wont change anything .

PUBLIC_IP=`curl -s http://icanhazip.com`                                                                                                                                
echo "TOKEN $TOKEN"  
IP="$PUBLIC_IP"
echo "IP $IP"                                                                                                                                                           
curl -X PUT -H 'Content-Type: application/json' -H "Authorization: Bearer $TOKEN" -d '{"data":"$IP"}' "https://api.digitalocean.com/v2/domains/$DOMAIN/records/$RECORD" 
curl -X GET -H 'Content-Type: application/json' -H "Authorization: Bearer $TOKEN" "https://api.digitalocean.com/v2/domains/$DOMAIN/records/$RECORD"                     

It gives me this error

IP 181.66.127.36
{"id":"unprocessable_entity","message":"IP address did not match IPv4 format (e.g. 127.0.0.1)."}{"domain_record":{"id":3304482,"type":"A","name":"periquita","data":"23.95.118.100","priority":null,"port":null,"weight":null}}

And if I execute withour qoutes around $IP, like this:

curl -X PUT -H 'Content-Type: application/json' -H "Authorization: Bearer $TOKEN" -d '{"data":$IP}' "https://api.digitalocean.com/v2/domains/$DOMAIN/records/$RECORD" 

goes straigt but no changes.

1 Answer

You need to escape the quotes in the JSON string so that they don't get parsed by bash:

curl -X PUT -H 'Content-Type: application/json' -H "Authorization: Bearer $TOKEN" -d '{\"data\":\"$IP\"}' "https://api.digitalocean.com/v2/domains/$DOMAIN/records/$RECORD" 
  • NO, i still get old IP record :/

  • Sorry, my bad, in order for bash to parse the variable ($IP), you have to use double quotes:

    curl -X PUT -H 'Content-Type: application/json' -H "Authorization: Bearer $TOKEN" -d "{\"data\":\"$IP\"}" "https://api.digitalocean.com/v2/domains/$DOMAIN/records/$RECORD" 
    
Have another answer? Share your knowledge.