add foreign registry; remove slave setups
This commit is contained in:
2
DDNS.pm
2
DDNS.pm
@@ -29,7 +29,7 @@ sub new {
|
|||||||
sub _validateTypeOrDie {
|
sub _validateTypeOrDie {
|
||||||
my ($t) = @_;
|
my ($t) = @_;
|
||||||
die "Invalid type"
|
die "Invalid type"
|
||||||
unless ($t =~ /^_(vhosts|pureslave|custom|config)$/);
|
unless ($t =~ /^_(vhosts|custom|config|foreign)$/);
|
||||||
}
|
}
|
||||||
|
|
||||||
sub _fqdn {
|
sub _fqdn {
|
||||||
|
|||||||
@@ -11,9 +11,9 @@ WriteMakefile(
|
|||||||
'bin/del-vhost',
|
'bin/del-vhost',
|
||||||
'bin/list-vhosts',
|
'bin/list-vhosts',
|
||||||
'bin/sync-master-vhosts',
|
'bin/sync-master-vhosts',
|
||||||
'bin/add-slave',
|
'bin/add-foreign',
|
||||||
'bin/del-slave',
|
'bin/del-foreign',
|
||||||
'bin/list-slaves',
|
'bin/list-foreign',
|
||||||
'bin/add-custom',
|
'bin/add-custom',
|
||||||
'bin/del-custom',
|
'bin/del-custom',
|
||||||
'bin/list-custom',
|
'bin/list-custom',
|
||||||
|
|||||||
31
bin/add-foreign
Executable file
31
bin/add-foreign
Executable file
@@ -0,0 +1,31 @@
|
|||||||
|
#!/usr/bin/perl
|
||||||
|
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
use Martnet::DDNS;
|
||||||
|
use Regexp::Common qw/net/;
|
||||||
|
use Getopt::Long qw/GetOptions/;
|
||||||
|
use JSON::PP qw/encode_json true false/;
|
||||||
|
|
||||||
|
sub usage {
|
||||||
|
die "Usage: add-foreign <zone.>\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
my $host = shift || die "No zonename provided\n";
|
||||||
|
|
||||||
|
my $ddns = Martnet::DDNS->new();
|
||||||
|
|
||||||
|
die "Zonename must end in a dot\n"
|
||||||
|
unless ($host =~ /^[a-zA-Z0-9\.\-\_]+\.$/);
|
||||||
|
|
||||||
|
my $payload = { };
|
||||||
|
|
||||||
|
my $txt = encode_json($payload);
|
||||||
|
|
||||||
|
if ($edit) {
|
||||||
|
$ddns->set($host, $txt, '_foreign');
|
||||||
|
} else {
|
||||||
|
$ddns->add($host, $txt, '_foreign');
|
||||||
|
}
|
||||||
|
|
||||||
|
exit 0;
|
||||||
@@ -1,69 +0,0 @@
|
|||||||
#!/usr/bin/perl
|
|
||||||
|
|
||||||
use strict;
|
|
||||||
use warnings;
|
|
||||||
use Martnet::DDNS;
|
|
||||||
use Regexp::Common qw/net/;
|
|
||||||
use Getopt::Long qw/GetOptions/;
|
|
||||||
use JSON::PP qw/encode_json true false/;
|
|
||||||
|
|
||||||
sub usage {
|
|
||||||
die "Usage: add-slave [--edit] [--enable-dnssec|--disable-dnssec] --master <IPv4|IPv6> " +
|
|
||||||
("") +
|
|
||||||
"[--ddns-keyname <keyname> ...] <zone.>\n";
|
|
||||||
}
|
|
||||||
|
|
||||||
my $master;
|
|
||||||
my $edit = 0;
|
|
||||||
my $enable_dnssec = 0;
|
|
||||||
my $disable_dnssec = 0;
|
|
||||||
my @ddns_keynames;
|
|
||||||
my $webserver_ip;
|
|
||||||
|
|
||||||
GetOptions(
|
|
||||||
'master|m=s' => \$master,
|
|
||||||
'edit' => \$edit,
|
|
||||||
'enable-dnssec' => \$enable_dnssec,
|
|
||||||
'disable-dnssec' => \$disable_dnssec,
|
|
||||||
'ddns-keyname=s@' => \@ddns_keynames,
|
|
||||||
) or usage();
|
|
||||||
|
|
||||||
usage() unless defined $master;
|
|
||||||
|
|
||||||
die "Cannot specify both --enable-dnssec and --disable-dnssec\n"
|
|
||||||
if ($enable_dnssec && $disable_dnssec);
|
|
||||||
|
|
||||||
my $host = shift || die "No zonename provided\n";
|
|
||||||
|
|
||||||
my $ddns = Martnet::DDNS->new();
|
|
||||||
|
|
||||||
die "Zonename must end in a dot\n"
|
|
||||||
unless ($host =~ /^[a-zA-Z0-9\.\-\_]+\.$/);
|
|
||||||
|
|
||||||
my $regex = $RE{net}{IPv4} . '|' . $RE{net}{IPv6};
|
|
||||||
die "Master must be an IPv4 or IPv6 address\n"
|
|
||||||
unless ($master =~ /^$regex$/);
|
|
||||||
|
|
||||||
my $payload = { master => $master };
|
|
||||||
if ($enable_dnssec) {
|
|
||||||
$payload->{dnssec} = true;
|
|
||||||
} elsif ($disable_dnssec) {
|
|
||||||
$payload->{dnssec} = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (@ddns_keynames) {
|
|
||||||
# Preserve order but de-dupe
|
|
||||||
my %seen;
|
|
||||||
my @uniq = grep { !$seen{$_}++ } @ddns_keynames;
|
|
||||||
$payload->{ddns_keys} = \@uniq;
|
|
||||||
}
|
|
||||||
|
|
||||||
my $txt = encode_json($payload);
|
|
||||||
|
|
||||||
if ($edit) {
|
|
||||||
$ddns->set($host, $txt, '_pureslave');
|
|
||||||
} else {
|
|
||||||
$ddns->add($host, $txt, '_pureslave');
|
|
||||||
}
|
|
||||||
|
|
||||||
exit 0;
|
|
||||||
@@ -5,10 +5,10 @@ use warnings;
|
|||||||
use Martnet::DDNS;
|
use Martnet::DDNS;
|
||||||
use Regexp::Common qw/net/;
|
use Regexp::Common qw/net/;
|
||||||
|
|
||||||
my $host = shift || die "No zonename provided";
|
my $host = shift || die "No foreign host provided";
|
||||||
|
|
||||||
die "Zonename must end in a dot"
|
die "Hostname must end in a dot"
|
||||||
unless ($host =~ /^[a-zA-Z0-9\-\_\.]+\.$/);
|
unless ($host =~ /^[a-zA-Z0-9\-\_\.]+\.$/);
|
||||||
|
|
||||||
my $ddns = Martnet::DDNS->new();
|
my $ddns = Martnet::DDNS->new();
|
||||||
$ddns->del($host, '_pureslave');
|
$ddns->del($host, '_foreign');
|
||||||
@@ -6,7 +6,7 @@ use Martnet::DDNS;
|
|||||||
|
|
||||||
my $ddns = Martnet::DDNS->new();
|
my $ddns = Martnet::DDNS->new();
|
||||||
|
|
||||||
my @vh = $ddns->get('_pureslave');
|
my @vh = $ddns->get('_foreign');
|
||||||
foreach my $i (sort {$a->{zone} cmp $b->{zone}} @vh) {
|
foreach my $i (sort {$a->{zone} cmp $b->{zone}} @vh) {
|
||||||
print $i->{zone}, ". master: ", $i->{master},"\n";
|
print $i->{zone}, ". master: ", $i->{master},"\n";
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user