Selaa lähdekoodia

Remove bash, use cron instead of sleep, update docker name

Joshua 8 vuotta sitten
vanhempi
commit
83d68dfabb
4 muutettua tiedostoa jossa 37 lisäystä ja 40 poistoa
  1. 5 6
      Dockerfile
  2. 10 11
      README.md
  3. 21 23
      cloudflare.sh
  4. 1 0
      cron

+ 5 - 6
Dockerfile

@@ -6,10 +6,9 @@ RUN apk add --update curl && \
     apk add --update perl && \
     rm -rf /var/cache/apk/*
 
-RUN mkdir /app
+ADD cloudflare.sh /cloudflare.sh
+RUN chmod +x /cloudflare.sh
+ADD cron /var/spool/cron/crontabs/root
 
-ADD cloudflare.sh /app
-
-WORKDIR "/app"
-
-CMD [ "sh", "cloudflare.sh" ]
+CMD /cloudflare.sh
+CMD crond -f

+ 10 - 11
README.md

@@ -1,13 +1,13 @@
-# joshuaavalon/docker-cloudflare
-[![version](https://images.microbadger.com/badges/version/joshuaavalon/docker-cloudflare.svg)](https://microbadger.com/images/joshuaavalon/docker-cloudflare) 
-[![](https://images.microbadger.com/badges/image/joshuaavalon/docker-cloudflare.svg)](https://microbadger.com/images/joshuaavalon/docker-cloudflare) 
-![Docker Pulls](https://img.shields.io/docker/pulls/joshuaavalon/docker-cloudflare.svg) 
-![Docker Stars](https://img.shields.io/docker/stars/joshuaavalon/docker-cloudflare.svg?colorB=dfb317) 
-[![Docker Automated build](https://img.shields.io/docker/automated/joshuaavalon/docker-cloudflare.svg)](https://hub.docker.com/r/joshuaavalon/docker-cloudflare/) 
-[![Docker build](https://img.shields.io/docker/build/joshuaavalon/docker-cloudflare.svg)](https://hub.docker.com/r/joshuaavalon/docker-cloudflare/) 
-[![MIT](https://img.shields.io/github/license/joshuaavalon/docker-cloudflare.svg)](https://github.com/joshuaavalon/docker-cloudflare/blob/master/LICENSE)
+# joshuaavalon/cloudflare-ddns
+[![version](https://images.microbadger.com/badges/version/joshuaavalon/cloudflare-ddns.svg)](https://microbadger.com/images/joshuaavalon/cloudflare-ddns) 
+[![](https://images.microbadger.com/badges/image/joshuaavalon/cloudflare-ddns.svg)](https://microbadger.com/images/joshuaavalon/cloudflare-ddns) 
+![Docker Pulls](https://img.shields.io/docker/pulls/joshuaavalon/cloudflare-ddns.svg) 
+![Docker Stars](https://img.shields.io/docker/stars/joshuaavalon/cloudflare-ddns.svg?colorB=dfb317) 
+[![Docker Automated build](https://img.shields.io/docker/automated/joshuaavalon/cloudflare-ddns.svg)](https://hub.docker.com/r/joshuaavalon/cloudflare-ddns/) 
+[![Docker build](https://img.shields.io/docker/build/joshuaavalon/cloudflare-ddns.svg)](https://hub.docker.com/r/joshuaavalon/cloudflare-ddns/) 
+[![MIT](https://img.shields.io/github/license/joshuaavalon/cloudflare-ddns.svg)](https://github.com/joshuaavalon/cloudflare-ddns/blob/master/LICENSE)
 
-The is a simple docker using bash and curl to update DNS record on [Cloudflare](https://www.cloudflare.com). Inspired by [rasmusbe/cloudflare-update-record.sh](https://gist.github.com/rasmusbe/fc2e270095f1a3b41348/)
+The is a simple docker using curl to update DNS record on [Cloudflare](https://www.cloudflare.com). Inspired by [rasmusbe/cloudflare-update-record.sh](https://gist.github.com/rasmusbe/fc2e270095f1a3b41348/)
 
 Compare to [nouchka/cloudflare-dyndns](https://hub.docker.com/r/nouchka/cloudflare-dyndns/) (4.0):
  * Smaller size: 12MB vs 54MB
@@ -24,9 +24,8 @@ docker run  \
 	-e EMAIL=example@example.com \
 	-e TTL=1 \
 	-e PROXY=true \
-	-e WAIT=300 \
 	--name cloudflare \
-joshuaavalon/docker-cloudflare
+joshuaavalon/cloudflare-ddns
 ```
 
 ## Parameters

+ 21 - 23
cloudflare.sh

@@ -1,29 +1,27 @@
-#!/bin/bash
+#!/bin/sh
+echo `date "+%Y-%m-%d %H:%M:%S"`
+ip_file="ip.txt"
 
-update_cloudflare() {
-    zone_id=$(curl -s -X GET "https://api.cloudflare.com/client/v4/zones?name=$ZONE" -H "X-Auth-Email: $EMAIL" -H "X-Auth-Key: $API" -H "Content-Type: application/json" | perl -nle'print $& if m{(?<="id":")[^"]*}' | head -1 )
-    record_id=$(curl -s -X GET "https://api.cloudflare.com/client/v4/zones/$zone_id/dns_records?name=$ZONE" -H "X-Auth-Email: $EMAIL" -H "X-Auth-Key: $API" -H "Content-Type: application/json"  | perl -nle'print $& if m{(?<="id":")[^"]*}')
-    update=$(curl -s -X PUT "https://api.cloudflare.com/client/v4/zones/$zone_id/dns_records/$record_id" -H "X-Auth-Email: $EMAIL" -H "X-Auth-Key: $API" -H "Content-Type: application/json" --data "{\"id\":\"$zone_id\",\"type\":\"A\",\"name\":\"$ZONE\",\"content\":\"$ip\",\"ttl\":$TTL,\"proxied\":$PROXY}")
+new_ip=$(curl -s http://ipecho.net/plain)
 
-    if [[ ${update} == *"\"success\":false"* ]]; then
-        echo "API UPDATE FAILED. DUMPING RESULTS:\n$update"
-        exit 1
-    else
-        echo "IP changed to: $ip"
+if [ -f $ip_file ]; then
+    ip=$(cat $ip_file)
+    if [ $ip == $new_ip ]; then
+		echo "Same ip: $ip"
+        exit 0
     fi
-}
+fi
 
-# http://icanhazip.com Also works
-ip=$(curl -s http://ipecho.net/plain)
-update_cloudflare
+ip="$new_ip"
+	zone_id=$(curl -s -X GET "https://api.cloudflare.com/client/v4/zones?name=$ZONE" -H "X-Auth-Email: $EMAIL" -H "X-Auth-Key: $API" -H "Content-Type: application/json" | perl -nle'print $& if m{(?<="id":")[^"]*}' | head -1 )
+record_id=$(curl -s -X GET "https://api.cloudflare.com/client/v4/zones/$zone_id/dns_records?name=$ZONE" -H "X-Auth-Email: $EMAIL" -H "X-Auth-Key: $API" -H "Content-Type: application/json"  | perl -nle'print $& if m{(?<="id":")[^"]*}')
+update=$(curl -s -X PUT "https://api.cloudflare.com/client/v4/zones/$zone_id/dns_records/$record_id" -H "X-Auth-Email: $EMAIL" -H "X-Auth-Key: $API" -H "Content-Type: application/json" --data "{\"id\":\"$zone_id\",\"type\":\"A\",\"name\":\"$ZONE\",\"content\":\"$ip\",\"ttl\":$TTL,\"proxied\":$PROXY}")
 
+if [[ ${update} == *"\"success\":false"* ]]; then
+	echo "API UPDATE FAILED. DUMPING RESULTS:\\n$update"
+	exit 1
+else
+	echo "IP changed to: $ip"	
+    echo "$ip" > $ip_file
+fi
 
-while sleep $WAIT; do
-    new_ip=$(curl -s http://ipecho.net/plain)
-    if [[ "${ip}" == "$new_ip" ]]; then
-        echo "Same ip: $ip"
-    else
-        ip="$new_ip"
-        update_cloudflare
-    fi
-done

+ 1 - 0
cron

@@ -0,0 +1 @@
+*/5 * * * * /cloudflare.sh