[pmg-devel] [PATCH pmg-api 11/12] add /etc/pmg/dkim to cluster-sync
Dominik Csapak
d.csapak at proxmox.com
Mon Oct 14 11:47:22 CEST 2019
lgtm, but maybe we could rewrite that sync logic
using PVE::Tools::dir_glob_foreach or rsync?
On 10/7/19 9:28 PM, Stoiko Ivanov wrote:
> The clustersync already uses rsync to sync most files (there are excludes
> for '*.db', '*~', and the certificates of the node) from the master's
> '/etc/pmg' directory to all nodes. Moving files from the syncdir to the node's
> actual '/etc/pmg' happen only for explicitly listed files.
>
> This patch factors out the moving of '/etc/pmg/templates' into a generic
> directory-sync sub and adds 'templates' and 'dkim' to the directories that
> should get moved to '/etc/pmg' on the node.
>
> Signed-off-by: Stoiko Ivanov <s.ivanov at proxmox.com>
> ---
> src/PMG/Cluster.pm | 67 +++++++++++++++++++++++++++-------------------
> 1 file changed, 40 insertions(+), 27 deletions(-)
>
> diff --git a/src/PMG/Cluster.pm b/src/PMG/Cluster.pm
> index 3f055a0..897a73e 100644
> --- a/src/PMG/Cluster.pm
> +++ b/src/PMG/Cluster.pm
> @@ -279,6 +279,38 @@ my $cond_commit_synced_file = sub {
> return 1;
> };
>
> +my $cond_commit_synced_dir = sub {
> + my ($dirname, $dstdir) = @_;
> +
> + $dstdir = "$cfgdir/$dirname" if !defined($dstdir);
> + my $srcdir = "$syncdir/$dirname";
> +
> + if (-d $srcdir) {
> + mkdir $dstdir;
> + my $names_hash = {};
> + foreach my $fn (<$srcdir/*>) {
> + next if $fn !~ m|^($srcdir/(.*))$|;
> + $fn = $1; # untaint;
> + my $name = $2;
> + $names_hash->{$name} = 1;
> + my $target = "$dstdir/$name";
> + if (-f $fn) {
> + $cond_commit_synced_file->("$dirname/$name", $target);
> + } elsif (-l $fn) {
> + warn "update $target failed - $!\n" if !rename($fn, $target);
> + }
> + }
> + # remove vanished files
> + foreach my $fn (<$dstdir/*>) {
> + next if $fn !~ m|^($dstdir/(.*))$|;
> + $fn = $1; # untaint;
> + my $name = $2;
> + next if $names_hash->{$name};
> + warn "unlink $fn failed - $!\n" if !unlink($fn);
> + }
> + }
> +};
> +
> my $rsync_command = sub {
> my ($host_key_alias, @args) = @_;
>
> @@ -404,6 +436,14 @@ sub sync_config_from_master {
> $cond_commit_synced_file->($filename);
> }
>
> + my $dirs = [
> + 'templates',
> + 'dkim',
> + ];
> +
> + foreach my $dir (@$dirs) {
> + $cond_commit_synced_dir->($dir);
> + }
>
> my $force_restart = {};
>
> @@ -413,33 +453,6 @@ sub sync_config_from_master {
>
> $cond_commit_synced_file->('pmg.conf');
>
> - # sync user templates files/symlinks (not recursive)
> - my $srcdir = "$syncdir/templates";
> - if (-d $srcdir) {
> - my $dstdir = "$cfgdir/templates";
> - mkdir $dstdir;
> - my $names_hash = {};
> - foreach my $fn (<$srcdir/*>) {
> - next if $fn !~ m|^($srcdir/(.*))$|;
> - $fn = $1; # untaint;
> - my $name = $2;
> - $names_hash->{$name} = 1;
> - my $target = "$dstdir/$name";
> - if (-f $fn) {
> - $cond_commit_synced_file->("templates/$name", $target);
> - } elsif (-l $fn) {
> - warn "update $target failed - $!\n" if !rename($fn, $target);
> - }
> - }
> - # remove vanished files
> - foreach my $fn (<$dstdir/*>) {
> - next if $fn !~ m|^($dstdir/(.*))$|;
> - $fn = $1; # untaint;
> - my $name = $2;
> - next if $names_hash->{$name};
> - warn "unlink $fn failed - $!\n" if !unlink($fn);
> - }
> - }
> }
>
> sub sync_ruledb_from_master {
>
More information about the pmg-devel
mailing list