From d3b2eaa412204ef0941ebe9eeebd8178942fe348 Mon Sep 17 00:00:00 2001 From: caskd Date: Sat, 29 Jun 2019 22:41:26 +0200 Subject: [PATCH] Add cloudflare loadbalancing --- plugins/cloudflare/env.example | 5 +++++ plugins/cloudflare/main.sh | 21 +++++++++++++++++---- 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/plugins/cloudflare/env.example b/plugins/cloudflare/env.example index 967f613..53cc2a1 100644 --- a/plugins/cloudflare/env.example +++ b/plugins/cloudflare/env.example @@ -1,3 +1,8 @@ EMAIL="someone@example.co.uk" AUTH_KEY="cryptic stuff lmao" ZONE="something something letters" +LBIPS=( + "1.1.1.1 A" + "::1 AAAA" + "someip TYPE" +) # Array of IPS to loadbalance (creates dns rr records) diff --git a/plugins/cloudflare/main.sh b/plugins/cloudflare/main.sh index 70308a5..0c0f9a1 100644 --- a/plugins/cloudflare/main.sh +++ b/plugins/cloudflare/main.sh @@ -3,7 +3,7 @@ # Record content $5 (own IP) # Cloudflare Proxy $6 (true) -if FETCH=$(curl -sX GET "https://api.cloudflare.com/client/v4/zones/$ZONE/dns_records" \ +if FETCH=$(curl -sfX GET "https://api.cloudflare.com/client/v4/zones/$ZONE/dns_records" \ -H "X-Auth-Email: ${EMAIL}" \ -H "X-Auth-Key: ${AUTH_KEY}" \ -H "Content-Type: application/json"); then @@ -21,7 +21,7 @@ if FETCH=$(curl -sX GET "https://api.cloudflare.com/client/v4/zones/$ZONE/dns_re ;; "set") if ! (containsElement "$3" "${DOMAIN[@]}"); then - if (curl -sX POST "https://api.cloudflare.com/client/v4/zones/$ZONE/dns_records" \ + if (curl -sfX POST "https://api.cloudflare.com/client/v4/zones/$ZONE/dns_records" \ -H "X-Auth-Email: ${EMAIL}" \ -H "X-Auth-Key: ${AUTH_KEY}" \ -H "Content-Type: application/json" \ @@ -33,7 +33,7 @@ if FETCH=$(curl -sX GET "https://api.cloudflare.com/client/v4/zones/$ZONE/dns_re else for ((i=0;i<${#DOMAIN[@]};++i)); do if [[ "${DOMAIN[$i]}" = "$3" ]]; then - if (curl -sX PUT "https://api.cloudflare.com/client/v4/zones/$ZONE/dns_records/$(echo "${FETCH}" | jq --compact-output -r "{(.result[$i].id): .result[$i].name}" | grep -oP "(?<=\{\")(.*)(?=\"\:\".*\"\})")" \ + if (curl -sfX PUT "https://api.cloudflare.com/client/v4/zones/$ZONE/dns_records/$(echo "${FETCH}" | jq --compact-output -r "{(.result[$i].id): .result[$i].name}" | grep -oP "(?<=\{\")(.*)(?=\"\:\".*\"\})")" \ -H "X-Auth-Email: ${EMAIL}" \ -H "X-Auth-Key: ${AUTH_KEY}" \ -H "Content-Type: application/json" \ @@ -46,11 +46,24 @@ if FETCH=$(curl -sX GET "https://api.cloudflare.com/client/v4/zones/$ZONE/dns_re done fi ;; + "loadbalance") + for ((i=0;i<${#LBIPS[@]};++i)); do + if (curl -sfX POST "https://api.cloudflare.com/client/v4/zones/$ZONE/dns_records" \ + -H "X-Auth-Email: ${EMAIL}" \ + -H "X-Auth-Key: ${AUTH_KEY}" \ + -H "Content-Type: application/json" \ + --data "{\"type\":\"${LBIPS[$i]##* }\",\"name\":\"${3}\",\"content\":\"${LBIPS[$i]%% *}\",\"proxied\":"${6:-true}"}" > /dev/null 2>&1); then + echo "done Registered entry successfully." + else + echo "erro Failed to add entry" + fi + done + ;; "remove") if (containsElement "$3" "${DOMAIN[@]}"); then for ((i=0;i<${#DOMAIN[@]};++i)); do if [[ "${DOMAIN[$i]}" = "$3" ]]; then - if (curl -sX DELETE "https://api.cloudflare.com/client/v4/zones/$ZONE/dns_records/$(echo "${FETCH}" | jq --compact-output -r "{(.result[$i].id): .result[$i].name}" | grep -oP "(?<=\{\")(.*)(?=\"\:\".*\"\})")" \ + if (curl -sfX DELETE "https://api.cloudflare.com/client/v4/zones/$ZONE/dns_records/$(echo "${FETCH}" | jq --compact-output -r "{(.result[$i].id): .result[$i].name}" | grep -oP "(?<=\{\")(.*)(?=\"\:\".*\"\})")" \ -H "X-Auth-Email: ${EMAIL}" \ -H "X-Auth-Key: ${AUTH_KEY}" \ -H "Content-Type: application/json" > /dev/null 2>&1); then