add missing files

This commit is contained in:
2026-01-24 14:40:24 -05:00
parent 27ba76a1b8
commit 87874b6523
2 changed files with 101 additions and 0 deletions

14
bin/dump-config Executable file
View 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
View 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;