add missing files
This commit is contained in:
14
bin/dump-config
Executable file
14
bin/dump-config
Executable file
@@ -0,0 +1,14 @@
|
|||||||
|
#!/usr/bin/perl
|
||||||
|
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
use Martnet::DDNS;
|
||||||
|
use JSON::PP qw/encode_json/;
|
||||||
|
|
||||||
|
my $ddns = Martnet::DDNS->new();
|
||||||
|
my $cfg = $ddns->get_config();
|
||||||
|
|
||||||
|
my $json = JSON::PP->new->canonical(1)->pretty(1);
|
||||||
|
print $json->encode($cfg);
|
||||||
|
|
||||||
|
exit 0;
|
||||||
87
bin/update-config
Executable file
87
bin/update-config
Executable file
@@ -0,0 +1,87 @@
|
|||||||
|
#!/usr/bin/perl
|
||||||
|
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
use Martnet::DDNS;
|
||||||
|
use Getopt::Long qw/GetOptions/;
|
||||||
|
use JSON::PP qw//;
|
||||||
|
|
||||||
|
sub usage {
|
||||||
|
die "Usage: update-config [--default-master IP] [--vhost-default-web-ip IP] [--soa-mname FQDN] [--soa-rname FQDN]\n"
|
||||||
|
. " [--ns FQDN --ns FQDN ...] [--mx PRIORITY:FQDN --mx PRIORITY:FQDN ...]\n"
|
||||||
|
. " [--master-ddns-keyname NAME] [--master-ddns-keyfile PATH]\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
my $default_master;
|
||||||
|
my $vhost_default_web_ip;
|
||||||
|
my $soa_mname;
|
||||||
|
my $soa_rname;
|
||||||
|
my @ns;
|
||||||
|
my @mx;
|
||||||
|
my $master_ddns_keyname;
|
||||||
|
my $master_ddns_keyfile;
|
||||||
|
|
||||||
|
GetOptions(
|
||||||
|
'default-master=s' => \$default_master,
|
||||||
|
'vhost-default-web-ip=s' => \$vhost_default_web_ip,
|
||||||
|
'soa-mname=s' => \$soa_mname,
|
||||||
|
'soa-rname=s' => \$soa_rname,
|
||||||
|
'ns=s@' => \@ns,
|
||||||
|
'mx=s@' => \@mx,
|
||||||
|
'master-ddns-keyname=s' => \$master_ddns_keyname,
|
||||||
|
'master-ddns-keyfile=s' => \$master_ddns_keyfile,
|
||||||
|
) or usage();
|
||||||
|
|
||||||
|
my $ddns = Martnet::DDNS->new();
|
||||||
|
my $old = $ddns->get_config();
|
||||||
|
|
||||||
|
my $json = JSON::PP->new->canonical(1)->pretty(1);
|
||||||
|
|
||||||
|
print "Current _config:\n";
|
||||||
|
print $json->encode($old);
|
||||||
|
|
||||||
|
# Build new config (copy then modify)
|
||||||
|
my %new = %$old;
|
||||||
|
|
||||||
|
$new{default_master} = $default_master if defined $default_master;
|
||||||
|
$new{vhost_default_web_ip} = $vhost_default_web_ip if defined $vhost_default_web_ip;
|
||||||
|
$new{soa_mname} = $soa_mname if defined $soa_mname;
|
||||||
|
$new{soa_rname} = $soa_rname if defined $soa_rname;
|
||||||
|
$new{master_ddns_keyname} = $master_ddns_keyname if defined $master_ddns_keyname;
|
||||||
|
$new{master_ddns_keyfile} = $master_ddns_keyfile if defined $master_ddns_keyfile;
|
||||||
|
|
||||||
|
if (@ns) {
|
||||||
|
$new{ns} = \@ns;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (@mx) {
|
||||||
|
my @mx_arr;
|
||||||
|
foreach my $m (@mx) {
|
||||||
|
die "Invalid --mx format (expected PRIORITY:FQDN): $m\n"
|
||||||
|
unless ($m =~ /^(\d+):(\S+)$/);
|
||||||
|
push @mx_arr, { priority => int($1), host => $2 };
|
||||||
|
}
|
||||||
|
$new{vhost_mx} = \@mx_arr;
|
||||||
|
}
|
||||||
|
|
||||||
|
print "\nNew _config to apply:\n";
|
||||||
|
print $json->encode(\%new);
|
||||||
|
|
||||||
|
print "\nApplying...\n";
|
||||||
|
$ddns->set_config(\%new);
|
||||||
|
|
||||||
|
my $after = $ddns->get_config();
|
||||||
|
|
||||||
|
print "Applied. Current _config after update:\n";
|
||||||
|
print $json->encode($after);
|
||||||
|
|
||||||
|
# Basic success check
|
||||||
|
foreach my $k (keys %new) {
|
||||||
|
next unless exists $after->{$k};
|
||||||
|
if (JSON::PP->new->canonical(1)->encode($after->{$k}) ne JSON::PP->new->canonical(1)->encode($new{$k})) {
|
||||||
|
die "Update failed for key '$k'\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
print "Update succeeded.\n";
|
||||||
|
exit 0;
|
||||||
Reference in New Issue
Block a user