Browse Source

Added support for Linode DNS API.

Philipp Grosswiler 8 years ago
parent
commit
38f2334360
3 changed files with 80 additions and 0 deletions
  1. 1 0
      README.md
  2. 19 0
      dnsapi/README.md
  3. 60 0
      dnsapi/dns_linode.sh

+ 1 - 0
README.md

@@ -266,6 +266,7 @@ You don't have to do anything manually!
 1. aliyun.com(阿里云) API
 1. aliyun.com(阿里云) API
 1. ISPConfig 3.1 API
 1. ISPConfig 3.1 API
 1. Alwaysdata.com API
 1. Alwaysdata.com API
+1. Linode.com API
 
 
 **More APIs coming soon...**
 **More APIs coming soon...**
 
 

+ 19 - 0
dnsapi/README.md

@@ -257,6 +257,25 @@ acme.sh --issue --dns dns_ad -d example.com -d www.example.com
 The `AD_API_KEY` will be saved in `~/.acme.sh/account.conf` and will be reused
 The `AD_API_KEY` will be saved in `~/.acme.sh/account.conf` and will be reused
 when needed.
 when needed.
 
 
+## 14. Use Linode domain API
+
+You will need to install the Linode CLI and set it up accordingly.
+
+[https://www.linode.com/docs/platform/linode-cli](https://www.linode.com/docs/platform/linode-cli)
+
+Follow the installation instructions appropriate for your platform and then run the configuration.
+
+```linode configure
+```
+
+Make sure Linode CLI is working correctly before proceeding.
+
+Due to the reload time of any changes in the DNS records, we have to use the `dnssleep` option to wait at least 15 minutes for the changes to take effect.
+
+```sh
+acme.sh --issue --dns dns_linode --dnssleep 900 -d example.com -d www.example.com
+```
+
 # Use custom API
 # Use custom API
 
 
 If your API is not supported yet, you can write your own DNS API.
 If your API is not supported yet, you can write your own DNS API.

+ 60 - 0
dnsapi/dns_linode.sh

@@ -0,0 +1,60 @@
+#!/usr/bin/env bash
+
+linode_cmd="/usr/bin/linode"
+
+########  Public functions #####################
+
+#Usage: dns_linode_add   _acme-challenge.www.domain.com   "XKrxpRBosdIKFzxW_CT3KLZNf6q0HG9i01zxXp5CPBs"
+dns_linode_add() {
+  fulldomain="${1}"
+  txtvalue="${2}"
+
+  _info "Using Linode"
+  _debug "Calling: dns_linode_add() '${fulldomain}' '${txtvalue}'"
+
+  domain=$(printf "%s" "${fulldomain}" | cut -d . -f 3-999)
+  name=$(printf "%s" "${fulldomain}" | cut -d . -f 1-2)
+  _debug name "${name}"
+  _debug domain "${domain}"
+
+  _Linode_CLI && _Linode_addTXT
+}
+
+#Usage: dns_linode_rm   _acme-challenge.www.domain.com
+dns_linode_rm() {
+  fulldomain="${1}"
+
+  _info "Using Linode"
+  _debug "Calling: dns_linode_rm() '${fulldomain}'"
+
+  domain=$(printf "%s" "${fulldomain}" | cut -d . -f 3-999)
+  name=$(printf "%s" "${fulldomain}" | cut -d . -f 1-2)
+  _debug name "${name}"
+  _debug domain "${domain}"
+
+  _Linode_CLI && _Linode_rmTXT
+}
+
+####################  Private functions below ##################################
+
+_Linode_CLI() {
+  if [ ! -f "${linode_cmd}" ]; then
+    _err "Please install the Linode CLI package and set it up accordingly before using this DNS API."
+    return 1
+  fi
+}
+
+_Linode_addTXT() {
+  _debug "$linode_cmd domain record-update ${domain} TXT ${name} --target ${txtvalue}"
+  $linode_cmd domain record-update ${domain} TXT ${name} --target ${txtvalue}
+
+  if [ $? -ne 0 ]; then
+    _debug "$linode_cmd domain record-create ${domain} TXT ${name} ${txtvalue}"
+    $linode_cmd domain record-create ${domain} TXT ${name} ${txtvalue}
+  fi
+}
+
+_Linode_rmTXT() {
+  _debug "$linode_cmd domain record-delete ${domain} TXT ${name}"
+  $linode_cmd domain record-delete ${domain} TXT ${name}
+}