Luiz Gustavo Nascimento
8 years ago
3 changed files with 1211 additions and 0 deletions
-
458README.md
-
541dnsapi/README.md.1
-
212dnsapi/dns_bluemix.sh
@ -0,0 +1,458 @@ |
|||
# An ACME Shell script: acme.sh [![Build Status](https://travis-ci.org/Neilpang/acme.sh.svg?branch=master)](https://travis-ci.org/Neilpang/acme.sh) |
|||
|
|||
[![Join the chat at https://gitter.im/acme-sh/Lobby](https://badges.gitter.im/acme-sh/Lobby.svg)](https://gitter.im/acme-sh/Lobby?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) |
|||
- An ACME protocol client written purely in Shell (Unix shell) language. |
|||
- Full ACME protocol implementation. |
|||
- Simple, powerful and very easy to use. You only need 3 minutes to learn it. |
|||
- Bash, dash and sh compatible. |
|||
- Simplest shell script for Let's Encrypt free certificate client. |
|||
- Purely written in Shell with no dependencies on python or the official Let's Encrypt client. |
|||
- Just one script to issue, renew and install your certificates automatically. |
|||
- DOES NOT require `root/sudoer` access. |
|||
- Docker friendly |
|||
- IPv6 support |
|||
|
|||
It's probably the `easiest & smartest` shell script to automatically issue & renew the free certificates from Let's Encrypt. |
|||
|
|||
Wiki: https://github.com/Neilpang/acme.sh/wiki |
|||
|
|||
For Docker Fans: [acme.sh :two_hearts: Docker ](https://github.com/Neilpang/acme.sh/wiki/Run-acme.sh-in-docker) |
|||
|
|||
Twitter: [@neilpangxa](https://twitter.com/neilpangxa) |
|||
|
|||
|
|||
# [中文说明](https://github.com/Neilpang/acme.sh/wiki/%E8%AF%B4%E6%98%8E) |
|||
|
|||
# Who are using **acme.sh** |
|||
- [FreeBSD.org](https://blog.crashed.org/letsencrypt-in-freebsd-org/) |
|||
- [ruby-china.org](https://ruby-china.org/topics/31983) |
|||
- [Proxmox](https://pve.proxmox.com/wiki/HTTPS_Certificate_Configuration_(Version_4.x_and_newer)) |
|||
- [pfsense](https://github.com/pfsense/FreeBSD-ports/pull/89) |
|||
- [webfaction](https://community.webfaction.com/questions/19988/using-letsencrypt) |
|||
- [Loadbalancer.org](https://www.loadbalancer.org/blog/loadbalancer-org-with-lets-encrypt-quick-and-dirty) |
|||
- [discourse.org](https://meta.discourse.org/t/setting-up-lets-encrypt/40709) |
|||
- [Centminmod](http://centminmod.com/letsencrypt-acmetool-https.html) |
|||
- [splynx](https://forum.splynx.com/t/free-ssl-cert-for-splynx-lets-encrypt/297) |
|||
- [archlinux](https://aur.archlinux.org/packages/acme.sh-git/) |
|||
- [opnsense.org](https://github.com/opnsense/plugins/tree/master/security/acme-client/src/opnsense/scripts/OPNsense/AcmeClient) |
|||
- [more...](https://github.com/Neilpang/acme.sh/wiki/Blogs-and-tutorials) |
|||
|
|||
# Tested OS |
|||
|
|||
| NO | Status| Platform| |
|||
|----|-------|---------| |
|||
|1|[![](https://cdn.rawgit.com/Neilpang/acmetest/master/status/ubuntu-latest.svg)](https://github.com/Neilpang/letest#here-are-the-latest-status)| Ubuntu |
|||
|2|[![](https://cdn.rawgit.com/Neilpang/acmetest/master/status/debian-latest.svg)](https://github.com/Neilpang/letest#here-are-the-latest-status)| Debian |
|||
|3|[![](https://cdn.rawgit.com/Neilpang/acmetest/master/status/centos-latest.svg)](https://github.com/Neilpang/letest#here-are-the-latest-status)|CentOS |
|||
|4|[![](https://cdn.rawgit.com/Neilpang/acmetest/master/status/windows-cygwin.svg)](https://github.com/Neilpang/letest#here-are-the-latest-status)|Windows (cygwin with curl, openssl and crontab included) |
|||
|5|[![](https://cdn.rawgit.com/Neilpang/acmetest/master/status/freebsd.svg)](https://github.com/Neilpang/letest#here-are-the-latest-status)|FreeBSD |
|||
|6|[![](https://cdn.rawgit.com/Neilpang/acmetest/master/status/pfsense.svg)](https://github.com/Neilpang/letest#here-are-the-latest-status)|pfsense |
|||
|7|[![](https://cdn.rawgit.com/Neilpang/acmetest/master/status/opensuse-latest.svg)](https://github.com/Neilpang/letest#here-are-the-latest-status)|openSUSE |
|||
|8|[![](https://cdn.rawgit.com/Neilpang/acmetest/master/status/alpine-latest.svg)](https://github.com/Neilpang/letest#here-are-the-latest-status)|Alpine Linux (with curl) |
|||
|9|[![](https://cdn.rawgit.com/Neilpang/acmetest/master/status/base-archlinux.svg)](https://github.com/Neilpang/letest#here-are-the-latest-status)|Archlinux |
|||
|10|[![](https://cdn.rawgit.com/Neilpang/acmetest/master/status/fedora-latest.svg)](https://github.com/Neilpang/letest#here-are-the-latest-status)|fedora |
|||
|11|[![](https://cdn.rawgit.com/Neilpang/acmetest/master/status/kalilinux-kali-linux-docker.svg)](https://github.com/Neilpang/letest#here-are-the-latest-status)|Kali Linux |
|||
|12|[![](https://cdn.rawgit.com/Neilpang/acmetest/master/status/oraclelinux-latest.svg)](https://github.com/Neilpang/letest#here-are-the-latest-status)|Oracle Linux |
|||
|13|[![](https://cdn.rawgit.com/Neilpang/acmetest/master/status/proxmox.svg)](https://github.com/Neilpang/letest#here-are-the-latest-status)| Proxmox https://pve.proxmox.com/wiki/HTTPSCertificateConfiguration#Let.27s_Encrypt_using_acme.sh |
|||
|14|-----| Cloud Linux https://github.com/Neilpang/le/issues/111 |
|||
|15|[![](https://cdn.rawgit.com/Neilpang/acmetest/master/status/openbsd.svg)](https://github.com/Neilpang/letest#here-are-the-latest-status)|OpenBSD |
|||
|16|[![](https://cdn.rawgit.com/Neilpang/acmetest/master/status/mageia.svg)](https://github.com/Neilpang/letest#here-are-the-latest-status)|Mageia |
|||
|17|-----| OpenWRT: Tested and working. See [wiki page](https://github.com/Neilpang/acme.sh/wiki/How-to-run-on-OpenWRT) |
|||
|18|[![](https://cdn.rawgit.com/Neilpang/acmetest/master/status/solaris.svg)](https://github.com/Neilpang/letest#here-are-the-latest-status)|SunOS/Solaris |
|||
|19|[![](https://cdn.rawgit.com/Neilpang/acmetest/master/status/gentoo-stage3-amd64.svg)](https://github.com/Neilpang/letest#here-are-the-latest-status)|Gentoo Linux |
|||
|20|[![Build Status](https://travis-ci.org/Neilpang/acme.sh.svg?branch=master)](https://travis-ci.org/Neilpang/acme.sh)|Mac OSX |
|||
|
|||
For all build statuses, check our [daily build project](https://github.com/Neilpang/acmetest): |
|||
|
|||
https://github.com/Neilpang/acmetest |
|||
|
|||
|
|||
# Supported modes |
|||
|
|||
- Webroot mode |
|||
- Standalone mode |
|||
- Apache mode |
|||
- Nginx mode ( Beta ) |
|||
- DNS mode |
|||
- [Stateless mode](https://github.com/Neilpang/acme.sh/wiki/Stateless-Mode) |
|||
|
|||
|
|||
# 1. How to install |
|||
|
|||
### 1. Install online |
|||
|
|||
Check this project: https://github.com/Neilpang/get.acme.sh |
|||
|
|||
```bash |
|||
curl https://get.acme.sh | sh |
|||
``` |
|||
|
|||
Or: |
|||
|
|||
```bash |
|||
wget -O - https://get.acme.sh | sh |
|||
``` |
|||
|
|||
|
|||
### 2. Or, Install from git |
|||
|
|||
Clone this project and launch installation: |
|||
|
|||
```bash |
|||
git clone https://github.com/Neilpang/acme.sh.git |
|||
cd ./acme.sh |
|||
./acme.sh --install |
|||
``` |
|||
|
|||
You `don't have to be root` then, although `it is recommended`. |
|||
|
|||
Advanced Installation: https://github.com/Neilpang/acme.sh/wiki/How-to-install |
|||
|
|||
The installer will perform 3 actions: |
|||
|
|||
1. Create and copy `acme.sh` to your home dir (`$HOME`): `~/.acme.sh/`. |
|||
All certs will be placed in this folder too. |
|||
2. Create alias for: `acme.sh=~/.acme.sh/acme.sh`. |
|||
3. Create daily cron job to check and renew the certs if needed. |
|||
|
|||
Cron entry example: |
|||
|
|||
```bash |
|||
0 0 * * * "/home/user/.acme.sh"/acme.sh --cron --home "/home/user/.acme.sh" > /dev/null |
|||
``` |
|||
|
|||
After the installation, you must close the current terminal and reopen it to make the alias take effect. |
|||
|
|||
Ok, you are ready to issue certs now. |
|||
|
|||
Show help message: |
|||
|
|||
``` |
|||
root@v1:~# acme.sh -h |
|||
``` |
|||
|
|||
# 2. Just issue a cert |
|||
|
|||
**Example 1:** Single domain. |
|||
|
|||
```bash |
|||
acme.sh --issue -d example.com -w /home/wwwroot/example.com |
|||
``` |
|||
|
|||
or: |
|||
|
|||
```bash |
|||
acme.sh --issue -d example.com -w /home/username/public_html |
|||
``` |
|||
|
|||
or: |
|||
|
|||
```bash |
|||
acme.sh --issue -d example.com -w /var/www/html |
|||
``` |
|||
|
|||
**Example 2:** Multiple domains in the same cert. |
|||
|
|||
```bash |
|||
acme.sh --issue -d example.com -d www.example.com -d cp.example.com -w /home/wwwroot/example.com |
|||
``` |
|||
|
|||
The parameter `/home/wwwroot/example.com` or `/home/username/public_html` or `/var/www/html` is the web root folder where you host your website files. You **MUST** have `write access` to this folder. |
|||
|
|||
Second argument **"example.com"** is the main domain you want to issue the cert for. |
|||
You must have at least one domain there. |
|||
|
|||
You must point and bind all the domains to the same webroot dir: `/home/wwwroot/example.com`. |
|||
|
|||
Generated/issued certs will be placed in `~/.acme.sh/example.com/` |
|||
|
|||
The issued cert will be renewed automatically every **60** days. |
|||
|
|||
More examples: https://github.com/Neilpang/acme.sh/wiki/How-to-issue-a-cert |
|||
|
|||
|
|||
# 3. Install the issued cert to Apache/Nginx etc. |
|||
|
|||
After you issue a cert, you probably want to install/copy the cert to your Apache/Nginx or other servers. |
|||
You **MUST** use this command to copy the certs to the target files, **DO NOT** use the certs files in **~/.acme.sh/** folder, they are for internal use only, the folder structure may change in the future. |
|||
|
|||
**Apache** example: |
|||
```bash |
|||
acme.sh --install-cert -d example.com \ |
|||
--cert-file /path/to/certfile/in/apache/cert.pem \ |
|||
--key-file /path/to/keyfile/in/apache/key.pem \ |
|||
--fullchain-file /path/to/fullchain/certfile/apache/fullchain.pem \ |
|||
--reloadcmd "service apache2 force-reload" |
|||
``` |
|||
|
|||
**Nginx** example: |
|||
```bash |
|||
acme.sh --install-cert -d example.com \ |
|||
--key-file /path/to/keyfile/in/nginx/key.pem \ |
|||
--fullchain-file /path/to/fullchain/nginx/cert.pem \ |
|||
--reloadcmd "service nginx force-reload" |
|||
``` |
|||
|
|||
Only the domain is required, all the other parameters are optional. |
|||
|
|||
The ownership and permission info of existing files are preserved. You may want to precreate the files to have defined ownership and permission. |
|||
|
|||
Install/copy the issued cert/key to the production Apache or Nginx path. |
|||
|
|||
The cert will be `renewed every **60** days by default` (which is configurable). Once the cert is renewed, the Apache/Nginx service will be restarted automatically by the command: `service apache2 restart` or `service nginx restart`. |
|||
|
|||
|
|||
# 4. Use Standalone server to issue cert |
|||
|
|||
**(requires you to be root/sudoer or have permission to listen on port 80 (TCP))** |
|||
|
|||
Port `80` (TCP) **MUST** be free to listen on, otherwise you will be prompted to free it and try again. |
|||
|
|||
```bash |
|||
acme.sh --issue --standalone -d example.com -d www.example.com -d cp.example.com |
|||
``` |
|||
|
|||
More examples: https://github.com/Neilpang/acme.sh/wiki/How-to-issue-a-cert |
|||
|
|||
|
|||
# 5. Use Standalone TLS server to issue cert |
|||
|
|||
**(requires you to be root/sudoer or have permission to listen on port 443 (TCP))** |
|||
|
|||
acme.sh supports `tls-sni-01` validation. |
|||
|
|||
Port `443` (TCP) **MUST** be free to listen on, otherwise you will be prompted to free it and try again. |
|||
|
|||
```bash |
|||
acme.sh --issue --tls -d example.com -d www.example.com -d cp.example.com |
|||
``` |
|||
|
|||
More examples: https://github.com/Neilpang/acme.sh/wiki/How-to-issue-a-cert |
|||
|
|||
|
|||
# 6. Use Apache mode |
|||
|
|||
**(requires you to be root/sudoer, since it is required to interact with Apache server)** |
|||
|
|||
If you are running a web server, Apache or Nginx, it is recommended to use the `Webroot mode`. |
|||
|
|||
Particularly, if you are running an Apache server, you should use Apache mode instead. This mode doesn't write any files to your web root folder. |
|||
|
|||
Just set string "apache" as the second argument and it will force use of apache plugin automatically. |
|||
|
|||
``` |
|||
acme.sh --issue --apache -d example.com -d www.example.com -d cp.example.com |
|||
``` |
|||
|
|||
More examples: https://github.com/Neilpang/acme.sh/wiki/How-to-issue-a-cert |
|||
|
|||
# 7. Use Nginx mode |
|||
|
|||
**(requires you to be root/sudoer, since it is required to interact with Nginx server)** |
|||
|
|||
If you are running a web server, Apache or Nginx, it is recommended to use the `Webroot mode`. |
|||
|
|||
Particularly, if you are running an nginx server, you can use nginx mode instead. This mode doesn't write any files to your web root folder. |
|||
|
|||
Just set string "nginx" as the second argument. |
|||
|
|||
It will configure nginx server automatically to verify the domain and then restore the nginx config to the original version. |
|||
|
|||
So, the config is not changed. |
|||
|
|||
``` |
|||
acme.sh --issue --nginx -d example.com -d www.example.com -d cp.example.com |
|||
``` |
|||
|
|||
More examples: https://github.com/Neilpang/acme.sh/wiki/How-to-issue-a-cert |
|||
|
|||
# 8. Use DNS mode: |
|||
|
|||
Support the `dns-01` challenge. |
|||
|
|||
```bash |
|||
acme.sh --issue --dns -d example.com -d www.example.com -d cp.example.com |
|||
``` |
|||
|
|||
You should get an output like below: |
|||
|
|||
``` |
|||
Add the following txt record: |
|||
Domain:_acme-challenge.example.com |
|||
Txt value:9ihDbjYfTExAYeDs4DBUeuTo18KBzwvTEjUnSwd32-c |
|||
|
|||
Add the following txt record: |
|||
Domain:_acme-challenge.www.example.com |
|||
Txt value:9ihDbjxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
|||
|
|||
Please add those txt records to the domains. Waiting for the dns to take effect. |
|||
``` |
|||
|
|||
Then just rerun with `renew` argument: |
|||
|
|||
```bash |
|||
acme.sh --renew -d example.com |
|||
``` |
|||
|
|||
Ok, it's finished. |
|||
|
|||
|
|||
# 9. Automatic DNS API integration |
|||
|
|||
If your DNS provider supports API access, we can use that API to automatically issue the certs. |
|||
|
|||
You don't have to do anything manually! |
|||
|
|||
### Currently acme.sh supports: |
|||
|
|||
1. CloudFlare.com API |
|||
1. DNSPod.cn API |
|||
1. CloudXNS.com API |
|||
1. GoDaddy.com API |
|||
1. PowerDNS.com API |
|||
1. OVH, kimsufi, soyoustart and runabove API |
|||
1. nsupdate API |
|||
1. LuaDNS.com API |
|||
1. DNSMadeEasy.com API |
|||
1. AWS Route 53 |
|||
1. aliyun.com(阿里云) API |
|||
1. ISPConfig 3.1 API |
|||
1. Alwaysdata.com API |
|||
1. Linode.com API |
|||
1. FreeDNS (https://freedns.afraid.org/) |
|||
1. cyon.ch |
|||
1. Domain-Offensive/Resellerinterface/Domainrobot API |
|||
1. Gandi LiveDNS API |
|||
1. Knot DNS API |
|||
1. DigitalOcean API (native) |
|||
1. ClouDNS.net API |
|||
1. Infoblox NIOS API (https://www.infoblox.com/) |
|||
1. VSCALE (https://vscale.io/) |
|||
1. Dynu API (https://www.dynu.com) |
|||
1. DNSimple API |
|||
1. NS1.com API |
|||
1. IBM Bluemix API (formerly SoftLayer) |
|||
|
|||
|
|||
|
|||
And: |
|||
|
|||
1. lexicon DNS API: https://github.com/Neilpang/acme.sh/wiki/How-to-use-lexicon-dns-api |
|||
(DigitalOcean, DNSimple, DNSMadeEasy, DNSPark, EasyDNS, Namesilo, NS1, PointHQ, Rage4 and Vultr etc.) |
|||
|
|||
|
|||
|
|||
**More APIs coming soon...** |
|||
|
|||
If your DNS provider is not on the supported list above, you can write your own DNS API script easily. If you do, please consider submitting a [Pull Request](https://github.com/Neilpang/acme.sh/pulls) and contribute it to the project. |
|||
|
|||
For more details: [How to use DNS API](dnsapi) |
|||
|
|||
|
|||
# 10. Issue ECC certificates |
|||
|
|||
`Let's Encrypt` can now issue **ECDSA** certificates. |
|||
|
|||
And we support them too! |
|||
|
|||
Just set the `length` parameter with a prefix `ec-`. |
|||
|
|||
For example: |
|||
|
|||
### Single domain ECC certificate |
|||
|
|||
```bash |
|||
acme.sh --issue -w /home/wwwroot/example.com -d example.com --keylength ec-256 |
|||
``` |
|||
|
|||
### SAN multi domain ECC certificate |
|||
|
|||
```bash |
|||
acme.sh --issue -w /home/wwwroot/example.com -d example.com -d www.example.com --keylength ec-256 |
|||
``` |
|||
|
|||
Please look at the last parameter above. |
|||
|
|||
Valid values are: |
|||
|
|||
1. **ec-256 (prime256v1, "ECDSA P-256")** |
|||
2. **ec-384 (secp384r1, "ECDSA P-384")** |
|||
3. **ec-521 (secp521r1, "ECDSA P-521", which is not supported by Let's Encrypt yet.)** |
|||
|
|||
|
|||
# 11. How to renew the issued certs |
|||
|
|||
No, you don't need to renew the certs manually. All the certs will be renewed automatically every **60** days. |
|||
|
|||
However, you can also force to renew any cert: |
|||
|
|||
``` |
|||
acme.sh --renew -d example.com --force |
|||
``` |
|||
|
|||
or, for ECC cert: |
|||
|
|||
``` |
|||
acme.sh --renew -d example.com --force --ecc |
|||
``` |
|||
|
|||
|
|||
# 12. How to upgrade `acme.sh` |
|||
|
|||
acme.sh is in constant development, so it's strongly recommended to use the latest code. |
|||
|
|||
You can update acme.sh to the latest code: |
|||
|
|||
``` |
|||
acme.sh --upgrade |
|||
``` |
|||
|
|||
You can also enable auto upgrade: |
|||
|
|||
``` |
|||
acme.sh --upgrade --auto-upgrade |
|||
``` |
|||
|
|||
Then **acme.sh** will be kept up to date automatically. |
|||
|
|||
Disable auto upgrade: |
|||
|
|||
``` |
|||
acme.sh --upgrade --auto-upgrade 0 |
|||
``` |
|||
|
|||
|
|||
# 13. Issue a cert from an existing CSR |
|||
|
|||
https://github.com/Neilpang/acme.sh/wiki/Issue-a-cert-from-existing-CSR |
|||
|
|||
|
|||
# 14. Under the Hood |
|||
|
|||
Speak ACME language using shell, directly to "Let's Encrypt". |
|||
|
|||
TODO: |
|||
|
|||
|
|||
# 15. Acknowledgments |
|||
|
|||
1. Acme-tiny: https://github.com/diafygi/acme-tiny |
|||
2. ACME protocol: https://github.com/ietf-wg-acme/acme |
|||
3. Certbot: https://github.com/certbot/certbot |
|||
|
|||
|
|||
# 16. License & Others |
|||
|
|||
License is GPLv3 |
|||
|
|||
Please Star and Fork me. |
|||
|
|||
[Issues](https://github.com/Neilpang/acme.sh/issues) and [pull requests](https://github.com/Neilpang/acme.sh/pulls) are welcome. |
|||
|
|||
|
|||
# 17. Donate |
|||
Your donation makes **acme.sh** better: |
|||
|
|||
1. PayPal/Alipay(支付宝)/Wechat(微信): [https://donate.acme.sh/](https://donate.acme.sh/) |
|||
|
|||
[Donate List](https://github.com/Neilpang/acme.sh/wiki/Donate-list) |
@ -0,0 +1,541 @@ |
|||
# How to use DNS API |
|||
|
|||
## 1. Use CloudFlare domain API to automatically issue cert |
|||
|
|||
First you need to login to your CloudFlare account to get your API key. |
|||
|
|||
``` |
|||
export CF_Key="sdfsdfsdfljlbjkljlkjsdfoiwje" |
|||
export CF_Email="xxxx@sss.com" |
|||
``` |
|||
|
|||
Ok, let's issue a cert now: |
|||
``` |
|||
acme.sh --issue --dns dns_cf -d example.com -d www.example.com |
|||
``` |
|||
|
|||
The `CF_Key` and `CF_Email` will be saved in `~/.acme.sh/account.conf` and will be reused when needed. |
|||
|
|||
|
|||
## 2. Use DNSPod.cn domain API to automatically issue cert |
|||
|
|||
First you need to login to your DNSPod account to get your API Key and ID. |
|||
|
|||
``` |
|||
export DP_Id="1234" |
|||
export DP_Key="sADDsdasdgdsf" |
|||
``` |
|||
|
|||
Ok, let's issue a cert now: |
|||
``` |
|||
acme.sh --issue --dns dns_dp -d example.com -d www.example.com |
|||
``` |
|||
|
|||
The `DP_Id` and `DP_Key` will be saved in `~/.acme.sh/account.conf` and will be reused when needed. |
|||
|
|||
|
|||
## 3. Use CloudXNS.com domain API to automatically issue cert |
|||
|
|||
First you need to login to your CloudXNS account to get your API Key and Secret. |
|||
|
|||
``` |
|||
export CX_Key="1234" |
|||
export CX_Secret="sADDsdasdgdsf" |
|||
``` |
|||
|
|||
Ok, let's issue a cert now: |
|||
``` |
|||
acme.sh --issue --dns dns_cx -d example.com -d www.example.com |
|||
``` |
|||
|
|||
The `CX_Key` and `CX_Secret` will be saved in `~/.acme.sh/account.conf` and will be reused when needed. |
|||
|
|||
|
|||
## 4. Use GoDaddy.com domain API to automatically issue cert |
|||
|
|||
First you need to login to your GoDaddy account to get your API Key and Secret. |
|||
|
|||
https://developer.godaddy.com/keys/ |
|||
|
|||
Please create a Production key, instead of a Test key. |
|||
|
|||
``` |
|||
export GD_Key="sdfsdfsdfljlbjkljlkjsdfoiwje" |
|||
export GD_Secret="asdfsdafdsfdsfdsfdsfdsafd" |
|||
``` |
|||
|
|||
Ok, let's issue a cert now: |
|||
``` |
|||
acme.sh --issue --dns dns_gd -d example.com -d www.example.com |
|||
``` |
|||
|
|||
The `GD_Key` and `GD_Secret` will be saved in `~/.acme.sh/account.conf` and will be reused when needed. |
|||
|
|||
|
|||
## 5. Use PowerDNS embedded API to automatically issue cert |
|||
|
|||
First you need to login to your PowerDNS account to enable the API and set your API-Token in the configuration. |
|||
|
|||
https://doc.powerdns.com/md/httpapi/README/ |
|||
|
|||
``` |
|||
export PDNS_Url="http://ns.example.com:8081" |
|||
export PDNS_ServerId="localhost" |
|||
export PDNS_Token="0123456789ABCDEF" |
|||
export PDNS_Ttl=60 |
|||
``` |
|||
|
|||
Ok, let's issue a cert now: |
|||
``` |
|||
acme.sh --issue --dns dns_pdns -d example.com -d www.example.com |
|||
``` |
|||
|
|||
The `PDNS_Url`, `PDNS_ServerId`, `PDNS_Token` and `PDNS_Ttl` will be saved in `~/.acme.sh/account.conf` and will be reused when needed. |
|||
|
|||
|
|||
## 6. Use OVH/kimsufi/soyoustart/runabove API to automatically issue cert |
|||
|
|||
https://github.com/Neilpang/acme.sh/wiki/How-to-use-OVH-domain-api |
|||
|
|||
|
|||
## 7. Use nsupdate to automatically issue cert |
|||
|
|||
First, generate a key for updating the zone |
|||
``` |
|||
b=$(dnssec-keygen -a hmac-sha512 -b 512 -n USER -K /tmp foo) |
|||
cat > /etc/named/keys/update.key <<EOF |
|||
key "update" { |
|||
algorithm hmac-sha512; |
|||
secret "$(awk '/^Key/{print $2}' /tmp/$b.private)"; |
|||
}; |
|||
EOF |
|||
rm -f /tmp/$b.{private,key} |
|||
``` |
|||
|
|||
Include this key in your named configuration |
|||
``` |
|||
include "/etc/named/keys/update.key"; |
|||
``` |
|||
|
|||
Next, configure your zone to allow dynamic updates. |
|||
|
|||
Depending on your named version, use either |
|||
``` |
|||
zone "example.com" { |
|||
type master; |
|||
allow-update { key "update"; }; |
|||
}; |
|||
``` |
|||
or |
|||
``` |
|||
zone "example.com" { |
|||
type master; |
|||
update-policy { |
|||
grant update subdomain example.com.; |
|||
}; |
|||
} |
|||
``` |
|||
|
|||
Finally, make the DNS server and update Key available to `acme.sh` |
|||
|
|||
``` |
|||
export NSUPDATE_SERVER="dns.example.com" |
|||
export NSUPDATE_KEY="aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa==" |
|||
``` |
|||
|
|||
Ok, let's issue a cert now: |
|||
``` |
|||
acme.sh --issue --dns dns_nsupdate -d example.com -d www.example.com |
|||
``` |
|||
|
|||
The `NSUPDATE_SERVER` and `NSUPDATE_KEY` settings will be saved in `~/.acme.sh/account.conf` and will be reused when needed. |
|||
|
|||
|
|||
## 8. Use LuaDNS domain API |
|||
|
|||
Get your API token at https://api.luadns.com/settings |
|||
|
|||
``` |
|||
export LUA_Key="sdfsdfsdfljlbjkljlkjsdfoiwje" |
|||
export LUA_Email="xxxx@sss.com" |
|||
``` |
|||
|
|||
To issue a cert: |
|||
``` |
|||
acme.sh --issue --dns dns_lua -d example.com -d www.example.com |
|||
``` |
|||
|
|||
The `LUA_Key` and `LUA_Email` will be saved in `~/.acme.sh/account.conf` and will be reused when needed. |
|||
|
|||
|
|||
## 9. Use DNSMadeEasy domain API |
|||
|
|||
Get your API credentials at https://cp.dnsmadeeasy.com/account/info |
|||
|
|||
``` |
|||
export ME_Key="sdfsdfsdfljlbjkljlkjsdfoiwje" |
|||
export ME_Secret="qdfqsdfkjdskfj" |
|||
``` |
|||
|
|||
To issue a cert: |
|||
``` |
|||
acme.sh --issue --dns dns_me -d example.com -d www.example.com |
|||
``` |
|||
|
|||
The `ME_Key` and `ME_Secret` will be saved in `~/.acme.sh/account.conf` and will be reused when needed. |
|||
|
|||
|
|||
## 10. Use Amazon Route53 domain API |
|||
|
|||
https://github.com/Neilpang/acme.sh/wiki/How-to-use-Amazon-Route53-API |
|||
|
|||
``` |
|||
export AWS_ACCESS_KEY_ID=XXXXXXXXXX |
|||
export AWS_SECRET_ACCESS_KEY=XXXXXXXXXXXXXXX |
|||
``` |
|||
|
|||
To issue a cert: |
|||
``` |
|||
acme.sh --issue --dns dns_aws -d example.com -d www.example.com |
|||
``` |
|||
|
|||
The `AWS_ACCESS_KEY_ID` and `AWS_SECRET_ACCESS_KEY` will be saved in `~/.acme.sh/account.conf` and will be reused when needed. |
|||
|
|||
## 11. Use Aliyun domain API to automatically issue cert |
|||
|
|||
First you need to login to your Aliyun account to get your API key. |
|||
[https://ak-console.aliyun.com/#/accesskey](https://ak-console.aliyun.com/#/accesskey) |
|||
|
|||
``` |
|||
export Ali_Key="sdfsdfsdfljlbjkljlkjsdfoiwje" |
|||
export Ali_Secret="jlsdflanljkljlfdsaklkjflsa" |
|||
``` |
|||
|
|||
Ok, let's issue a cert now: |
|||
``` |
|||
acme.sh --issue --dns dns_ali -d example.com -d www.example.com |
|||
``` |
|||
|
|||
The `Ali_Key` and `Ali_Secret` will be saved in `~/.acme.sh/account.conf` and will be reused when needed. |
|||
|
|||
## 12. Use ISPConfig 3.1 API |
|||
|
|||
This only works for ISPConfig 3.1 (and newer). |
|||
|
|||
Create a Remote User in the ISPConfig Control Panel. The Remote User must have access to at least `DNS zone functions` and `DNS txt functions`. |
|||
|
|||
``` |
|||
export ISPC_User="xxx" |
|||
export ISPC_Password="xxx" |
|||
export ISPC_Api="https://ispc.domain.tld:8080/remote/json.php" |
|||
export ISPC_Api_Insecure=1 |
|||
``` |
|||
If you have installed ISPConfig on a different port, then alter the 8080 accordingly. |
|||
Leaver ISPC_Api_Insecure set to 1 if you have not a valid ssl cert for your installation. Change it to 0 if you have a valid ssl cert. |
|||
|
|||
To issue a cert: |
|||
``` |
|||
acme.sh --issue --dns dns_ispconfig -d example.com -d www.example.com |
|||
``` |
|||
|
|||
The `ISPC_User`, `ISPC_Password`, `ISPC_Api`and `ISPC_Api_Insecure` will be saved in `~/.acme.sh/account.conf` and will be reused when needed. |
|||
|
|||
## 13. Use Alwaysdata domain API |
|||
|
|||
First you need to login to your Alwaysdata account to get your API Key. |
|||
|
|||
```sh |
|||
export AD_API_KEY="myalwaysdataapikey" |
|||
``` |
|||
|
|||
Ok, let's issue a cert now: |
|||
|
|||
```sh |
|||
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 |
|||
when needed. |
|||
|
|||
## 14. Use Linode domain API |
|||
|
|||
First you need to login to your Linode account to get your API Key. |
|||
[https://manager.linode.com/profile/api](https://manager.linode.com/profile/api) |
|||
|
|||
Then add an API key with label *ACME* and copy the new key. |
|||
|
|||
```sh |
|||
export LINODE_API_KEY="..." |
|||
``` |
|||
|
|||
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. |
|||
|
|||
Ok, let's issue a cert now: |
|||
|
|||
```sh |
|||
acme.sh --issue --dns dns_linode --dnssleep 900 -d example.com -d www.example.com |
|||
``` |
|||
|
|||
The `LINODE_API_KEY` will be saved in `~/.acme.sh/account.conf` and will be reused when needed. |
|||
|
|||
## 15. Use FreeDNS |
|||
|
|||
FreeDNS (https://freedns.afraid.org/) does not provide an API to update DNS records (other than IPv4 and IPv6 |
|||
dynamic DNS addresses). The acme.sh plugin therefore retrieves and updates domain TXT records by logging |
|||
into the FreeDNS website to read the HTML and posting updates as HTTP. The plugin needs to know your |
|||
userid and password for the FreeDNS website. |
|||
|
|||
```sh |
|||
export FREEDNS_User="..." |
|||
export FREEDNS_Password="..." |
|||
``` |
|||
|
|||
You need only provide this the first time you run the acme.sh client with FreeDNS validation and then again |
|||
whenever you change your password at the FreeDNS site. The acme.sh FreeDNS plugin does not store your userid |
|||
or password but rather saves an authentication token returned by FreeDNS in `~/.acme.sh/account.conf` and |
|||
reuses that when needed. |
|||
|
|||
Now you can issue a certificate. |
|||
|
|||
```sh |
|||
acme.sh --issue --dns dns_freedns -d example.com -d www.example.com |
|||
``` |
|||
|
|||
Note that you cannot use acme.sh automatic DNS validation for FreeDNS public domains or for a subdomain that |
|||
you create under a FreeDNS public domain. You must own the top level domain in order to automatically |
|||
validate with acme.sh at FreeDNS. |
|||
|
|||
## 16. Use cyon.ch |
|||
|
|||
You only need to set your cyon.ch login credentials. |
|||
If you also have 2 Factor Authentication (OTP) enabled, you need to set your secret token too and have `oathtool` installed. |
|||
|
|||
``` |
|||
export CY_Username="your_cyon_username" |
|||
export CY_Password="your_cyon_password" |
|||
export CY_OTP_Secret="your_otp_secret" # Only required if using 2FA |
|||
``` |
|||
|
|||
To issue a cert: |
|||
``` |
|||
acme.sh --issue --dns dns_cyon -d example.com -d www.example.com |
|||
``` |
|||
|
|||
The `CY_Username`, `CY_Password` and `CY_OTP_Secret` will be saved in `~/.acme.sh/account.conf` and will be reused when needed. |
|||
|
|||
## 17. Use Domain-Offensive/Resellerinterface/Domainrobot API |
|||
|
|||
You will need your login credentials (Partner ID+Password) to the Resellerinterface, and export them before you run `acme.sh`: |
|||
``` |
|||
export DO_PID="KD-1234567" |
|||
export DO_PW="cdfkjl3n2" |
|||
``` |
|||
|
|||
Ok, let's issue a cert now: |
|||
``` |
|||
acme.sh --issue --dns dns_do -d example.com -d www.example.com |
|||
``` |
|||
|
|||
## 18. Use Gandi LiveDNS API |
|||
|
|||
You must enable the new Gandi LiveDNS API first and the create your api key, See: http://doc.livedns.gandi.net/ |
|||
|
|||
``` |
|||
export GANDI_LIVEDNS_KEY="fdmlfsdklmfdkmqsdfk" |
|||
``` |
|||
|
|||
Ok, let's issue a cert now: |
|||
``` |
|||
acme.sh --issue --dns dns_gandi_livedns -d example.com -d www.example.com |
|||
``` |
|||
|
|||
## 19. Use Knot (knsupdate) DNS API to automatically issue cert |
|||
|
|||
First, generate a TSIG key for updating the zone. |
|||
|
|||
``` |
|||
keymgr tsig generate acme_key algorithm hmac-sha512 > /etc/knot/acme.key |
|||
``` |
|||
|
|||
Include this key in your knot configuration file. |
|||
|
|||
``` |
|||
include: /etc/knot/acme.key |
|||
``` |
|||
|
|||
Next, configure your zone to allow dynamic updates. |
|||
|
|||
Dynamic updates for the zone are allowed via proper ACL rule with the `update` action. For in-depth instructions, please see [Knot DNS's documentation](https://www.knot-dns.cz/documentation/). |
|||
|
|||
``` |
|||
acl: |
|||
- id: acme_acl |
|||
address: 192.168.1.0/24 |
|||
key: acme_key |
|||
action: update |
|||
|
|||
zone: |
|||
- domain: example.com |
|||
file: example.com.zone |
|||
acl: acme_acl |
|||
``` |
|||
|
|||
Finally, make the DNS server and TSIG Key available to `acme.sh` |
|||
|
|||
``` |
|||
export KNOT_SERVER="dns.example.com" |
|||
export KNOT_KEY=`grep \# /etc/knot/acme.key | cut -d' ' -f2` |
|||
``` |
|||
|
|||
Ok, let's issue a cert now: |
|||
``` |
|||
acme.sh --issue --dns dns_knot -d example.com -d www.example.com |
|||
``` |
|||
|
|||
The `KNOT_SERVER` and `KNOT_KEY` settings will be saved in `~/.acme.sh/account.conf` and will be reused when needed. |
|||
|
|||
## 20. Use DigitalOcean API (native) |
|||
|
|||
You need to obtain a read and write capable API key from your DigitalOcean account. See: https://www.digitalocean.com/help/api/ |
|||
|
|||
``` |
|||
export DO_API_KEY="75310dc4ca779ac39a19f6355db573b49ce92ae126553ebd61ac3a3ae34834cc" |
|||
``` |
|||
|
|||
Ok, let's issue a cert now: |
|||
``` |
|||
acme.sh --issue --dns dns_dgon -d example.com -d www.example.com |
|||
``` |
|||
|
|||
## 21. Use ClouDNS.net API |
|||
|
|||
You need to set the HTTP API user ID and password credentials. See: https://www.cloudns.net/wiki/article/42/ |
|||
|
|||
``` |
|||
export CLOUDNS_AUTH_ID=XXXXX |
|||
export CLOUDNS_AUTH_PASSWORD="YYYYYYYYY" |
|||
``` |
|||
|
|||
Ok, let's issue a cert now: |
|||
``` |
|||
acme.sh --issue --dns dns_cloudns -d example.com -d www.example.com |
|||
``` |
|||
|
|||
## 22. Use Infoblox API |
|||
|
|||
First you need to create/obtain API credentials on your Infoblox appliance. |
|||
|
|||
``` |
|||
export Infoblox_Creds="username:password" |
|||
export Infoblox_Server="ip or fqdn of infoblox appliance" |
|||
``` |
|||
|
|||
Ok, let's issue a cert now: |
|||
``` |
|||
acme.sh --issue --dns dns_infoblox -d example.com -d www.example.com |
|||
``` |
|||
|
|||
Note: This script will automatically create and delete the ephemeral txt record. |
|||
The `Infoblox_Creds` and `Infoblox_Server` will be saved in `~/.acme.sh/account.conf` and will be reused when needed. |
|||
|
|||
|
|||
## 23. Use VSCALE API |
|||
|
|||
First you need to create/obtain API tokens on your [settings panel](https://vscale.io/panel/settings/tokens/). |
|||
|
|||
``` |
|||
VSCALE_API_KEY="sdfsdfsdfljlbjkljlkjsdfoiwje" |
|||
``` |
|||
|
|||
Ok, let's issue a cert now: |
|||
``` |
|||
acme.sh --issue --dns dns_vscale -d example.com -d www.example.com |
|||
``` |
|||
|
|||
## 24. Use Dynu API |
|||
|
|||
First you need to create/obtain API credentials from your Dynu account. See: https://www.dynu.com/resources/api/documentation |
|||
|
|||
``` |
|||
export Dynu_ClientId="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" |
|||
export Dynu_Secret="yyyyyyyyyyyyyyyyyyyyyyyyy" |
|||
``` |
|||
|
|||
Ok, let's issue a cert now: |
|||
``` |
|||
acme.sh --issue --dns dns_dynu -d example.com -d www.example.com |
|||
``` |
|||
|
|||
The `Dynu_ClientId` and `Dynu_Secret` will be saved in `~/.acme.sh/account.conf` and will be reused when needed. |
|||
|
|||
## 25. Use DNSimple API |
|||
|
|||
First you need to login to your DNSimple account and generate a new oauth token. |
|||
|
|||
https://dnsimple.com/a/{your account id}/account/access_tokens |
|||
|
|||
Note that this is an _account_ token and not a user token. The account token is |
|||
needed to infer the `account_id` used in requests. A user token will not be able |
|||
to determine the correct account to use. |
|||
|
|||
``` |
|||
export DNSimple_OAUTH_TOKEN="sdfsdfsdfljlbjkljlkjsdfoiwje" |
|||
``` |
|||
|
|||
To issue the cert just specify the `dns_dnsimple` API. |
|||
|
|||
``` |
|||
acme.sh --issue --dns dns_dnsimple -d example.com |
|||
``` |
|||
|
|||
The `DNSimple_OAUTH_TOKEN` will be saved in `~/.acme.sh/account.conf` and will |
|||
be reused when needed. |
|||
|
|||
If you have any issues with this integration please report them to |
|||
https://github.com/pho3nixf1re/acme.sh/issues. |
|||
|
|||
## 26. Use NS1.com API |
|||
|
|||
``` |
|||
export NS1_Key="fdmlfsdklmfdkmqsdfk" |
|||
``` |
|||
|
|||
Ok, let's issue a cert now: |
|||
``` |
|||
acme.sh --issue --dns dns_nsone -d example.com -d www.example.com |
|||
``` |
|||
|
|||
## 27. Use IBM Bluemix API (formerly SoftLayer) |
|||
|
|||
First you need to create/obtain API credentials on your IBM Bluemix account. |
|||
|
|||
``` |
|||
export BLUEMIX_USER="<username>" |
|||
export BLUEMIX_KEY="<api_key>" |
|||
``` |
|||
|
|||
Ok, let's issue a cert now: |
|||
``` |
|||
acme.sh --issue --dns dns_bluemix -d example.com -d www.example.com |
|||
``` |
|||
|
|||
# Use custom API |
|||
|
|||
If your API is not supported yet, you can write your own DNS API. |
|||
|
|||
Let's assume you want to name it 'myapi': |
|||
|
|||
1. Create a bash script named `~/.acme.sh/dns_myapi.sh`, |
|||
2. In the script you must have a function named `dns_myapi_add()` which will be called by acme.sh to add the DNS records. |
|||
3. Then you can use your API to issue cert like this: |
|||
|
|||
``` |
|||
acme.sh --issue --dns dns_myapi -d example.com -d www.example.com |
|||
``` |
|||
|
|||
For more details, please check our sample script: [dns_myapi.sh](dns_myapi.sh) |
|||
|
|||
|
|||
# Use lexicon DNS API |
|||
|
|||
https://github.com/Neilpang/acme.sh/wiki/How-to-use-lexicon-dns-api |
@ -0,0 +1,212 @@ |
|||
#!/usr/bin/env sh |
|||
# |
|||
# DNS Integration for IBM Bluemix (formerly SoftLayer) |
|||
# |
|||
# Author: luizgn |
|||
# Based on sample from Neilpang |
|||
# Report Bugs here: https://github.com/luizgn/acme.sh |
|||
# |
|||
######## Public functions ##################### |
|||
|
|||
BLUEMIX_API_URL="https://${BLUEMIX_USER}:${BLUEMIX_KEY}@api.softlayer.com/rest/v3" |
|||
|
|||
domainId= |
|||
domain= |
|||
host= |
|||
recordId= |
|||
|
|||
dns_bluemix_add() { |
|||
fulldomain=$1 |
|||
txtvalue=$2 |
|||
|
|||
_info "Attempting to add ${fulldomain} with ${txtvalue} into Bluemix's DNS." |
|||
|
|||
# BLUEMIX_USER is required |
|||
if [ -z "${BLUEMIX_USER}" ]; then |
|||
_err "Environment variable BLUEMIX_USER not defined" |
|||
return 1 |
|||
fi |
|||
|
|||
# BLUEMIX_KEY is required |
|||
if [ -z "${BLUEMIX_KEY}" ]; then |
|||
_err "Environment variable BLUEMIX_KEY not defined" |
|||
return 1 |
|||
fi |
|||
|
|||
# Check BLUEMIX_USER and BLUEMIX_KEY access |
|||
if ! hasAccess; then |
|||
_err "Error accessing BlueMix API. Check \$BLUEMIX_USER and \$BLUEMIX_KEY and ensure there is access to https://api.softlayer.com/" |
|||
return 1 |
|||
fi |
|||
|
|||
# Get right domain and domain id |
|||
if ! getDomain ${fulldomain}; then |
|||
_err "Domain for ${fulldomain} was not found in this Bluemix account" |
|||
return 1 |
|||
fi |
|||
|
|||
# Check if this DNS entry already exists |
|||
if getRecordId "${domainId}" "${host}"; then |
|||
# Update Record if it already exists |
|||
updateTxtRecord "${recordId}" "${txtvalue}" |
|||
else |
|||
# Create record if it doesn't exist |
|||
createTxtRecord "${domainId}" "${host}" "${txtvalue}" |
|||
fi |
|||
|
|||
return 0 |
|||
} |
|||
|
|||
#Usage: fulldomain txtvalue |
|||
#Remove the txt record after validation. |
|||
dns_bluemix_rm() { |
|||
fulldomain=$1 |
|||
|
|||
_info "Attempting to delete ${fulldomain} from Bluemix" |
|||
|
|||
# BLUEMIX_USER is required |
|||
if [ -z "${BLUEMIX_USER}" ]; then |
|||
_err "Environment variable BLUEMIX_USER not defined" |
|||
return 1 |
|||
fi |
|||
|
|||
# BLUEMIX_KEY is required |
|||
if [ -z "${BLUEMIX_KEY}" ]; then |
|||
_err "Environment variable BLUEMIX_KEY not defined" |
|||
return 1 |
|||
fi |
|||
|
|||
# Check BLUEMIX_USER and BLUEMIX_KEY access |
|||
if ! hasAccess; then |
|||
_err "Error accessing BlueMix API. Check \$BLUEMIX_USER and \$BLUEMIX_KEY and ensure there is access to https://api.softlayer.com/" |
|||
return 1 |
|||
fi |
|||
|
|||
# Get Domain ID |
|||
if ! getDomain ${fulldomain}; then |
|||
_err "Domain for ${fulldomain} was not found in this Bluemix account" |
|||
return 1 |
|||
fi |
|||
|
|||
# Get DNS entry in this Domain |
|||
if getRecordId "${domainId}" "${host}"; then |
|||
|
|||
# Remove record |
|||
deleteRecordId "${recordId}" |
|||
|
|||
fi |
|||
|
|||
return 0 |
|||
|
|||
} |
|||
|
|||
#################### Private functions below ################################## |
|||
|
|||
function hasAccess { |
|||
response=$(_get "${BLUEMIX_API_URL}/SoftLayer_Account/getDomains") |
|||
|
|||
if [[ -z "${response}" || "${response}" =~ 'Access Denied' ]]; then |
|||
_debug "Code=${code}, Response=${response}" |
|||
return 1 |
|||
else |
|||
return 0 |
|||
fi |
|||
} |
|||
|
|||
function getDomain { |
|||
fulldomain=$1 |
|||
|
|||
response=$(_get "${BLUEMIX_API_URL}/SoftLayer_Account/getDomains") |
|||
_debug "Code=${code}, Response=${response}" |
|||
|
|||
for domain_item in $(echo "${response}" | tr , \\n | grep "^\"name\":" | cut -f4 -d'"'); do |
|||
if [[ "${fulldomain}" =~ ${domain_item}$ ]]; then |
|||
domain="${domain_item}" |
|||
break |
|||
fi |
|||
done |
|||
|
|||
if [ -z "${domain}" ]; then |
|||
return 1 |
|||
fi |
|||
|
|||
domainId=$(echo "${response}" | tr \} \\n | grep "\"name\":\"${domain}\"" | sed -n 's/.*\"id\":\([0-9]*\).*/\1/p') |
|||
|
|||
host=$(echo "${fulldomain}" | sed "s/\.${domain}\$//g") |
|||
|
|||
_debug "Host is ${host}, domain is ${domain} and domain id is ${domainId}" |
|||
|
|||
return 0 |
|||
} |
|||
|
|||
function getRecordId { |
|||
domainId=$1 |
|||
host=$2 |
|||
|
|||
response=$(_get "${BLUEMIX_API_URL}/SoftLayer_Dns_Domain/${domainId}/getResourceRecords") |
|||
_debug "Code=${code}, Response=${response}" |
|||
|
|||
recordId=$(echo "${response}" | tr \} \\n | grep "\"host\":\"${host}\"" | sed -n 's/.*\"id\":\([0-9]*\).*/\1/p') |
|||
|
|||
if [ -z "${recordId}" ]; then |
|||
return 1 |
|||
else |
|||
_debug "RecordId is ${recordId}" |
|||
return 0 |
|||
fi |
|||
|
|||
} |
|||
|
|||
function createTxtRecord { |
|||
domainId=$1 |
|||
host=$2 |
|||
txtvalue=$3 |
|||
|
|||
payload="{\"parameters\":[{\"host\":\"${host}\",\"data\":\"${txtvalue}\",\"ttl\":\"60\",\"type\":\"txt\",\"domainId\":\"${domainId}\"}]}" |
|||
response=$(_post "${payload}" "${BLUEMIX_API_URL}/SoftLayer_Dns_Domain_ResourceRecord" "") |
|||
_debug "Code=${code}, Response=${response}" |
|||
|
|||
if [[ "${response}" =~ \"host\":\"${host}\" ]]; then |
|||
_info "${fulldomain} added into Bluemix's DNS." |
|||
return 0 |
|||
else |
|||
_err "Error adding ${fulldomain} in Bluemix's DNS. Details: ${response}" |
|||
return 1 |
|||
fi |
|||
|
|||
} |
|||
|
|||
function updateTxtRecord { |
|||
recordId=$1 |
|||
txtvalue=$2 |
|||
|
|||
payload="{\"parameters\":[{\"data\":\"${txtvalue}\"}]}" |
|||
response=$(_post "${payload}" "${BLUEMIX_API_URL}/SoftLayer_Dns_Domain_ResourceRecord/${recordId}" "" "PUT") |
|||
_debug "Code=${code}, Response=${response}" |
|||
|
|||
if [ "${response}" == "true" ]; then |
|||
_info "${fulldomain} updated in Bluemix's DNS." |
|||
return 0 |
|||
else |
|||
_err "Error adding ${fulldomain} in Bluemix's DNS. Details: ${response}" |
|||
return 1 |
|||
fi |
|||
|
|||
} |
|||
|
|||
function deleteRecordId { |
|||
recordId=$1 |
|||
|
|||
response=$(_post "" "${BLUEMIX_API_URL}/SoftLayer_Dns_Domain_ResourceRecord/${recordId}" "" "DELETE") |
|||
_debug "Code=${code}, Response=${response}" |
|||
|
|||
if [ "${response}" == "true" ]; then |
|||
_info "${fulldomain} deleted from Bluemix's DNS." |
|||
return 0 |
|||
else |
|||
_err "Error deleting ${fulldomain}. Details: ${response}." |
|||
return 1 |
|||
fi |
|||
|
|||
} |
|||
|
Write
Preview
Loading…
Cancel
Save
Reference in new issue