]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
selftest:clusteredmember: Build a unclist for every share
authorMartin Schwenke <martin@meltin.net>
Tue, 4 Feb 2020 08:44:11 +0000 (19:44 +1100)
committerMartin Schwenke <martins@samba.org>
Wed, 19 Feb 2020 09:38:40 +0000 (09:38 +0000)
This is fairly cheap and it is simple to do.  This allows the Python
code to be able to specify a unclist quite simply.  The level of
coupling doesn't seem worse than anything else in the
selftest/autobuild code.

There may be cleverer ways of doing this (e.g. a wrapper in
testprogs/blackbox/clusteredmember_smbtorture or similar) but cleverer
code isn't necessarily better code... and they'll probably involve
code duplication.

Signed-off-by: Martin Schwenke <martin@meltin.net>
Reviewed-by: Volker Lendecke <vl@samba.org>
selftest/target/Samba3.pm

index 2a6786d90a6090e143d4631412ecb0139d45dc27..5a23715b19985fe21cbb726ed2fbd9cfdb8ef7cd 100755 (executable)
@@ -553,6 +553,48 @@ sub setup_clusteredmember
                }
        }
 
+       #
+       # Build a unclist for every share
+       #
+       unless (open(NODES, "<$ret->{CTDB_NODES_FILE}")) {
+               warn("Unable to open CTDB nodes file");
+               teardown_env($self, $ret);
+               return undef;
+       }
+       my @nodes = <NODES>;
+       close(NODES);
+       chomp @nodes;
+
+       my $conffile = $ret->{SERVERCONFFILE};
+       $cmd = "";
+       $cmd .= 'sed -n -e \'s|^\[\(.*\)\]$|\1|p\'';
+       $cmd .= " \"$conffile\"";
+       $cmd .= " | grep -vx 'global'";
+
+       my @shares = `$cmd`;
+       $rc = $?;
+       if ($rc != 0) {
+               warn("Listing shares failed\n$cmd");
+               teardown_env($self, $ret);
+               return undef;
+       }
+       chomp @shares;
+
+       my $unclistdir = "${prefix_abs}/unclists";
+       mkdir($unclistdir, 0777);
+       foreach my $share (@shares) {
+               my $l = "${unclistdir}/${share}.txt";
+               unless (open(UNCLIST, ">${l}")) {
+                       warn("Unable to open UNC list ${l}");
+                       teardown_env($self, $ret);
+                       return undef;
+               }
+               foreach my $node (@nodes) {
+                       print UNCLIST "//${node}/${share}\n";
+               }
+               close(UNCLIST);
+       }
+
        $ret->{DOMSID} = $nt4_dc_vars->{DOMSID};
        $ret->{DC_SERVER} = $nt4_dc_vars->{SERVER};
        $ret->{DC_SERVER_IP} = $nt4_dc_vars->{SERVER_IP};
@@ -3091,6 +3133,7 @@ sub provision_ctdb($$$$)
        $ret{CTDB_PREFIX} = "$prefix";
        $ret{NUM_NODES} = $num_nodes;
        $ret{CTDB_NODES} = \@nodes;
+       $ret{CTDB_NODES_FILE} = $nodes_file;
 
        return \%ret;
 }