change shape for bind configuration; use one unified file, add new options when adding zones
This commit is contained in:
41
bin/add-slave
Executable file → Normal file
41
bin/add-slave
Executable file → Normal file
@@ -4,16 +4,45 @@ 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/;
|
||||
|
||||
my $host = shift || die "No zonename provided";
|
||||
my $master = shift || die "No master DNS IP provided";
|
||||
sub usage {
|
||||
die "Usage: add-slave [--enable-dnssec|--disable-dnssec] --master <IPv4|IPv6> <zone.>\n";
|
||||
}
|
||||
|
||||
die "Zonename must end in a dot"
|
||||
my $master;
|
||||
my $enable_dnssec = 0;
|
||||
my $disable_dnssec = 0;
|
||||
|
||||
GetOptions(
|
||||
'master|m=s' => \$master,
|
||||
'enable-dnssec' => \$enable_dnssec,
|
||||
'disable-dnssec' => \$disable_dnssec,
|
||||
) 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"
|
||||
die "Master must be an IPv4 or IPv6 address\n"
|
||||
unless ($master =~ /^$regex$/);
|
||||
|
||||
my $ddns = Martnet::DDNS->new();
|
||||
$ddns->add($host, $master, '_pureslave');
|
||||
my $payload = { master => $master };
|
||||
if ($enable_dnssec) {
|
||||
$payload->{dnssec} = true;
|
||||
} elsif ($disable_dnssec) {
|
||||
$payload->{dnssec} = false;
|
||||
}
|
||||
|
||||
$ddns->add($host, encode_json($payload), '_pureslave');
|
||||
|
||||
|
||||
Reference in New Issue
Block a user