write_recap: Move update-specific %recap
sync to update_nics
This is a step toward separating `%recap` from `%config`.
This commit is contained in:
parent
e478117d4e
commit
0348ded46b
1 changed files with 15 additions and 20 deletions
35
ddclient.in
35
ddclient.in
|
@ -1502,7 +1502,6 @@ sub update_nics {
|
||||||
$0 = sprintf("%s - updating %s", $program, join(',', @hosts));
|
$0 = sprintf("%s - updating %s", $program, join(',', @hosts));
|
||||||
local $_l = pushlogctx($p);
|
local $_l = pushlogctx($p);
|
||||||
for my $h (@hosts) {
|
for my $h (@hosts) {
|
||||||
$config{$h}{'update'} = 1;
|
|
||||||
$config{$h}{'atime'} = $now;
|
$config{$h}{'atime'} = $now;
|
||||||
delete($config{$h}{$_}) for qw(status-ipv4 status-ipv6 wtime
|
delete($config{$h}{$_}) for qw(status-ipv4 status-ipv6 wtime
|
||||||
warned-min-interval warned-min-error-interval);
|
warned-min-interval warned-min-error-interval);
|
||||||
|
@ -1511,7 +1510,21 @@ sub update_nics {
|
||||||
for my $h (@hosts) {
|
for my $h (@hosts) {
|
||||||
delete($config{$h}{$_}) for qw(wantipv4 wantipv6);
|
delete($config{$h}{$_}) for qw(wantipv4 wantipv6);
|
||||||
}
|
}
|
||||||
|
for my $h (@hosts) {
|
||||||
|
# Update `%recap` with the latest values in `%config`. This is done after the
|
||||||
|
# protocol's update method returns in case that method mutates any of the `%config`
|
||||||
|
# values or needs access to the previous iteration's `%recap` values. Entries in
|
||||||
|
# `%recap` with `undef` values are deleted to avoid needing to figure out how to
|
||||||
|
# represent `undef` in the cache file and to simplify testing. Also, entries for
|
||||||
|
# non-recap variables (which can happen after changing a host's protocol or after
|
||||||
|
# switching to a different version of ddclient) are deleted.
|
||||||
|
my $vars = $protocols{$p}{variables};
|
||||||
|
$recap{$h} = {};
|
||||||
|
for my $v (keys(%$vars)) {
|
||||||
|
next if !$vars->{$v}{recap} || !defined(opt($v, $h));
|
||||||
|
$recap{$h}{$v} = opt($v, $h);
|
||||||
|
}
|
||||||
|
}
|
||||||
runpostscript(join ' ', keys %ipsv4, keys %ipsv6);
|
runpostscript(join ' ', keys %ipsv4, keys %ipsv6);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1557,24 +1570,6 @@ sub write_pid {
|
||||||
######################################################################
|
######################################################################
|
||||||
sub write_recap {
|
sub write_recap {
|
||||||
my ($file) = @_;
|
my ($file) = @_;
|
||||||
|
|
||||||
for my $h (keys %config) {
|
|
||||||
# nic_updateable (called from update_nics for each host) sets `$config{$h}{update}`
|
|
||||||
# according to whether an update was attempted.
|
|
||||||
next if !$config{$h}{'update'};
|
|
||||||
delete($config{$h}{'update'});
|
|
||||||
my $vars = $protocols{opt('protocol', $h)}{variables};
|
|
||||||
# Entries in `%recap` with `undef` values are deleted to avoid needing to figure out how to
|
|
||||||
# represent `undef` in the cache file and to simplify testing. Also, entries for non-recap
|
|
||||||
# variables (which can happen after changing a host's protocol or after switching to a
|
|
||||||
# different version of ddclient) are deleted.
|
|
||||||
$recap{$h} = {};
|
|
||||||
for my $v (keys(%$vars)) {
|
|
||||||
next if !$vars->{$v}{recap} || !defined(opt($v, $h));
|
|
||||||
$recap{$h}{$v} = opt($v, $h);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
my $recap = "";
|
my $recap = "";
|
||||||
for my $h (sort keys %recap) {
|
for my $h (sort keys %recap) {
|
||||||
my $opt = join(',', map("$_=$recap{$h}{$_}", sort(keys(%{$recap{$h}}))));
|
my $opt = join(',', map("$_=$recap{$h}{$_}", sort(keys(%{$recap{$h}}))));
|
||||||
|
|
Loading…
Reference in a new issue