Merge pull request #624 from ddclient/feature_porkbun_subdomains
Feature porkbun subdomains
This commit is contained in:
commit
34cc8fc70c
2 changed files with 44 additions and 10 deletions
|
@ -301,8 +301,9 @@ ssl=yes # use ssl-support. Works with
|
||||||
# protocol=porkbun
|
# protocol=porkbun
|
||||||
# apikey=APIKey
|
# apikey=APIKey
|
||||||
# secretapikey=SecretAPIKey
|
# secretapikey=SecretAPIKey
|
||||||
|
# root-domain=example.com
|
||||||
# host.example.com,host2.sub.example.com
|
# host.example.com,host2.sub.example.com
|
||||||
# on-root-domain=yes example.com,sub.example.com
|
# example.com,sub.example.com
|
||||||
|
|
||||||
##
|
##
|
||||||
## ClouDNS (https://www.cloudns.net)
|
## ClouDNS (https://www.cloudns.net)
|
||||||
|
|
51
ddclient.in
51
ddclient.in
|
@ -869,6 +869,7 @@ my %services = (
|
||||||
'variables' => {
|
'variables' => {
|
||||||
'apikey' => setv(T_PASSWD, 1, 0, '', undef),
|
'apikey' => setv(T_PASSWD, 1, 0, '', undef),
|
||||||
'secretapikey' => setv(T_PASSWD, 1, 0, '', undef),
|
'secretapikey' => setv(T_PASSWD, 1, 0, '', undef),
|
||||||
|
'root-domain' => setv(T_OFQDN, 0, 0, '', undef),
|
||||||
'on-root-domain' => setv(T_BOOL, 0, 0, 0, undef),
|
'on-root-domain' => setv(T_BOOL, 0, 0, 0, undef),
|
||||||
'login' => setv(T_LOGIN, 0, 0, 'unused', undef),
|
'login' => setv(T_LOGIN, 0, 0, 'unused', undef),
|
||||||
'password' => setv(T_PASSWD, 0, 0, 'unused', undef),
|
'password' => setv(T_PASSWD, 0, 0, 'unused', undef),
|
||||||
|
@ -7114,9 +7115,11 @@ https://kb.porkbun.com/article/190-getting-started-with-the-porkbun-api
|
||||||
Available configuration variables:
|
Available configuration variables:
|
||||||
* apikey (required): API Key of Porkbun API
|
* apikey (required): API Key of Porkbun API
|
||||||
* secretapikey (required): Secret API Key of Porkbun API
|
* secretapikey (required): Secret API Key of Porkbun API
|
||||||
|
* root-domain: The root domain of the specified domain name.
|
||||||
* on-root-domain=yes or no (default: no): Indicates whether the specified domain name (FQDN) is
|
* on-root-domain=yes or no (default: no): Indicates whether the specified domain name (FQDN) is
|
||||||
an unnamed record (Zone APEX) in a zone.
|
an unnamed record (Zone APEX) in a zone.
|
||||||
It is useful to specify it as a local variable as shown in the example.
|
It is useful to specify it as a local variable as shown in the example.
|
||||||
|
This configuration value is deprecated, use root-domain instead!
|
||||||
* usev4, usev6 : These configuration variables can be specified as local variables to override
|
* usev4, usev6 : These configuration variables can be specified as local variables to override
|
||||||
the global settings. It is useful to finely control IPv4 or IPv6 as shown in the example.
|
the global settings. It is useful to finely control IPv4 or IPv6 as shown in the example.
|
||||||
* use (deprecated) : This parameter is deprecated but can be overridden like the above parameters.
|
* use (deprecated) : This parameter is deprecated but can be overridden like the above parameters.
|
||||||
|
@ -7124,13 +7127,19 @@ Available configuration variables:
|
||||||
Limitations:
|
Limitations:
|
||||||
* Multiple same name records (for round robin) are not supported.
|
* Multiple same name records (for round robin) are not supported.
|
||||||
The same IP address is set for all, creating meaningless extra records.
|
The same IP address is set for all, creating meaningless extra records.
|
||||||
|
* If neither root-domain nor on-root-domain are specified, ${program} will split the given
|
||||||
|
hostname into subdomain and domain on the first dot.
|
||||||
|
For example:
|
||||||
|
* sub.example.com -> Subdomain "sub", root domain "example.com"
|
||||||
|
* sub.foo.example.com -> Subdomain "sub", root domain "foo.example.com"
|
||||||
|
If both root-domain and on-root-domain are specified, root-domain takes precedence.
|
||||||
|
|
||||||
Example ${program}.conf file entry:
|
Example ${program}.conf file entry:
|
||||||
protocol=porkbun
|
protocol=porkbun
|
||||||
apikey=APIKey
|
apikey=APIKey
|
||||||
secretapikey=SecretAPIKey
|
secretapikey=SecretAPIKey
|
||||||
host.example.com,host2.sub.example.com
|
root-domain=example.com
|
||||||
on-root-domain=yes example.com,sub.example.com
|
example.com,host.example.com,host2.sub.example.com
|
||||||
|
|
||||||
Additional example to finely control IPv4 or IPv6 :
|
Additional example to finely control IPv4 or IPv6 :
|
||||||
# Example 01 : Global enable both IPv4 and IPv6, and update both records.
|
# Example 01 : Global enable both IPv4 and IPv6, and update both records.
|
||||||
|
@ -7140,6 +7149,7 @@ Additional example to finely control IPv4 or IPv6 :
|
||||||
protocol=porkbun
|
protocol=porkbun
|
||||||
apikey=APIKey
|
apikey=APIKey
|
||||||
secretapikey=SecretAPIKey
|
secretapikey=SecretAPIKey
|
||||||
|
root-domain=example.com
|
||||||
host.example.com,host2.sub.example.com
|
host.example.com,host2.sub.example.com
|
||||||
|
|
||||||
# Example 02 : Global enable only IPv4, and update only IPv6 record.
|
# Example 02 : Global enable only IPv4, and update only IPv6 record.
|
||||||
|
@ -7148,8 +7158,16 @@ Additional example to finely control IPv4 or IPv6 :
|
||||||
protocol=porkbun
|
protocol=porkbun
|
||||||
apikey=APIKey
|
apikey=APIKey
|
||||||
secretapikey=SecretAPIKey
|
secretapikey=SecretAPIKey
|
||||||
|
root-domain=example.com
|
||||||
usev6=ifv6, ifv6=enp1s0, usev4=disabled ipv6.example.com
|
usev6=ifv6, ifv6=enp1s0, usev4=disabled ipv6.example.com
|
||||||
|
|
||||||
|
# Example 03: Update just a root domain
|
||||||
|
protocol=porkbun
|
||||||
|
apikey=APIKey
|
||||||
|
secretapikey=SecretAPIKey
|
||||||
|
root-domain=host.example.com
|
||||||
|
host.example.com
|
||||||
|
|
||||||
EoEXAMPLE
|
EoEXAMPLE
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -7160,6 +7178,28 @@ sub nic_porkbun_update {
|
||||||
debug("\nnic_porkbun_update -------------------");
|
debug("\nnic_porkbun_update -------------------");
|
||||||
|
|
||||||
foreach my $host (@_) {
|
foreach my $host (@_) {
|
||||||
|
my ($sub_domain, $domain);
|
||||||
|
if ($config{$host}{'root-domain'} ne '') {
|
||||||
|
# Process 'root-domain' option
|
||||||
|
$domain = $config{$host}{'root-domain'};
|
||||||
|
$sub_domain = $host;
|
||||||
|
$sub_domain =~ s/\.$domain//;
|
||||||
|
|
||||||
|
if (!defined($sub_domain)) {
|
||||||
|
error("'root-domain' (%s) is not part of the full domain (%s)!", $domain, $host);
|
||||||
|
next;
|
||||||
|
}
|
||||||
|
warning("%s has both 'root-domain' and 'on-root-domain' defined. The latter is ignored") if $config{$host}{'on-root-domain'};
|
||||||
|
} elsif ($config{$host}{'on-root-domain'}) {
|
||||||
|
# Process legacy 'on-root-domain' option
|
||||||
|
$sub_domain = '';
|
||||||
|
$domain = $host;
|
||||||
|
} else {
|
||||||
|
# Default to the subdomain/domain being split at the first dot
|
||||||
|
($sub_domain, $domain) = split(/\./, $host, 2);
|
||||||
|
}
|
||||||
|
verbose("subdomain %s, root domain %s", $sub_domain, $domain) if $sub_domain != '';
|
||||||
|
|
||||||
foreach my $ipv ('ipv4', 'ipv6') {
|
foreach my $ipv ('ipv4', 'ipv6') {
|
||||||
my $ip = delete $config{$host}{"want$ipv"};
|
my $ip = delete $config{$host}{"want$ipv"};
|
||||||
if (!$ip) {
|
if (!$ip) {
|
||||||
|
@ -7167,13 +7207,6 @@ sub nic_porkbun_update {
|
||||||
}
|
}
|
||||||
my $rrset_type = is_ipv6($ip) ? "AAAA" : "A";
|
my $rrset_type = is_ipv6($ip) ? "AAAA" : "A";
|
||||||
|
|
||||||
my ($sub_domain, $domain);
|
|
||||||
if ($config{$host}{'on-root-domain'}) {
|
|
||||||
$sub_domain = '';
|
|
||||||
$domain = $host;
|
|
||||||
} else {
|
|
||||||
($sub_domain, $domain) = split(/\./, $host, 2);
|
|
||||||
}
|
|
||||||
info("setting %s address to %s for %s", $ipv, $ip, $host);
|
info("setting %s address to %s for %s", $ipv, $ip, $host);
|
||||||
verbose("UPDATE:","updating %s", $host);
|
verbose("UPDATE:","updating %s", $host);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue