Revert "SQUASH samba3.pm"
authorMichael Adam <obnox@samba.org>
Thu, 20 Oct 2011 10:33:17 +0000 (12:33 +0200)
committerMichael Adam <obnox@samba.org>
Thu, 20 Oct 2011 11:17:16 +0000 (13:17 +0200)
This reverts commit eb794da754aa74d60773e5c6ddc53c1851d939e1.

selftest/target/Samba3.pm

index 1a8c54a6cfd1c644304d18314498dc1e4386c644..4be766663f3ead502c784cb55314b784c55bfcde 100755 (executable)
@@ -12,15 +12,14 @@ use POSIX;
 use target::Samba;
 
 sub new($$) {
-       my ($classname, $bindir, $binary_mapping, $srcdir, $exeext, $server_maxtime, $clustering) = @_;
+       my ($classname, $bindir, $binary_mapping, $srcdir, $exeext, $server_maxtime) = @_;
        $exeext = "" unless defined($exeext);
        my $self = { vars => {},
                     bindir => $bindir,
                     binary_mapping => $binary_mapping,
                     srcdir => $srcdir,
                     exeext => $exeext,
-                    server_maxtime => $server_maxtime,
-                    clustering => $clustering,
+                    server_maxtime => $server_maxtime
        };
        bless $self;
        return $self;
@@ -141,9 +140,16 @@ sub setup_env($$$)
                                return undef;
                        }
                }
-               return $self->setup_member("$path/member",
-                                          $self->{vars}->{s3dc},
-                                          "$path/ctdb");
+               return $self->setup_member("$path/member", $self->{vars}->{s3dc});
+       } elsif ($envname eq "clusteredmember") {
+               if (not defined($self->{vars}->{s3dc})) {
+                       if (not defined($self->setup_s3dc("$path/s3dc"))) {
+                               return undef;
+                       }
+               }
+               return $self->setup_clusteredmember("$path/clusteredmember",
+                                                   $self->{vars}->{s3dc},
+                                                   "$path/ctdb");
        } else {
                return undef;
        }
@@ -187,35 +193,70 @@ sub setup_s3dc($$)
        return $vars;
 }
 
-sub setup_member($$$$)
+sub setup_member($$$)
 {
-       my ($self, $prefix, $s3dcvars, $ctdbprefix) = @_;
+       my ($self, $prefix, $s3dcvars) = @_;
+
+       print "PROVISIONING MEMBER...";
+
+       my $member_options = "
+       security = domain
+       server signing = on
+";
+       my $ret = $self->provision($prefix,
+                                  "LOCALMEMBER3",
+                                  3,
+                                  "localmember3pass",
+                                  $member_options);
 
-       my $ctdb_vars = undef;
+       $ret or return undef;
 
-       if ($self->{clustering}) {
-               $ctdb_vars = $self->setup_ctdb($ctdbprefix);
+       my $net = Samba::bindir_path($self, "net");
+       my $cmd = "";
+       $cmd .= "SOCKET_WRAPPER_DEFAULT_IFACE=\"$ret->{SOCKET_WRAPPER_DEFAULT_IFACE}\" ";
+       $cmd .= "$net join $ret->{CONFIGURATION} $s3dcvars->{DOMAIN} member";
+       $cmd .= " -U$s3dcvars->{USERNAME}\%$s3dcvars->{PASSWORD}";
 
-               $ctdb_vars or return undef;
+       if (system($cmd) != 0) {
+           warn("Join failed\n$cmd");
+           return undef;
        }
 
-       print "PROVISIONING MEMBER...";
+       $self->check_or_start($ret, "yes", "yes", "yes");
+
+       if (not $self->wait_for_start($ret)) {
+              return undef;
+       }
+
+       $ret->{DC_SERVER} = $s3dcvars->{SERVER};
+       $ret->{DC_SERVER_IP} = $s3dcvars->{SERVER_IP};
+       $ret->{DC_NETBIOSNAME} = $s3dcvars->{NETBIOSNAME};
+       $ret->{DC_USERNAME} = $s3dcvars->{USERNAME};
+       $ret->{DC_PASSWORD} = $s3dcvars->{PASSWORD};
+
+       return $ret;
+}
+
+sub setup_clusteredmember($$$$)
+{
+       my ($self, $prefix, $s3dcvars, $ctdbprefix) = @_;
+       my $public_if = 8;
+
+       my $ctdb_vars = $self->setup_ctdb($ctdbprefix, $public_if);
+
+       $ctdb_vars or return undef;
+
+       print "PROVISIONING CLUSTEREDMEMBER...";
 
        my $member_options = "
        security = domain
        server signing = on
-";
-
-       if ($self->{clustering}) {
-               $member_options .= "
        clustering = yes
        ctdbd socket = $ctdb_vars->{SOCKET_FILE}
 ";
-       }
-
        my $ret = $self->provision($prefix,
-                                  "LOCALMEMBER3",
-                                  3,
+                                  "LOCALMEMBER3CLUSTERED",
+                                  $public_if,
                                   "localmember3pass",
                                   $member_options);
 
@@ -244,14 +285,11 @@ sub setup_member($$$$)
        $ret->{DC_USERNAME} = $s3dcvars->{USERNAME};
        $ret->{DC_PASSWORD} = $s3dcvars->{PASSWORD};
 
-       if ($self->{clustering}) {
-               $ret->{CTDB_SOCKET_FILE} = $ctdb_vars->{SOCKET_FILE};
-       }
+       $ret->{CTDB_SOCKET_FILE} = $ctdb_vars->{SOCKET_FILE};
 
        return $ret;
 }
 
-
 sub setup_admember($$$$)
 {
        my ($self, $prefix, $dcvars, $iface) = @_;
@@ -1196,7 +1234,7 @@ sub wait_for_start($$)
 
 sub setup_ctdb($$)
 {
-       my ($self, $prefix) = @_;
+       my ($self, $prefix, $public_if) = @_;
 
        print "PROVISIONING CTDB...";
 
@@ -1204,7 +1242,7 @@ sub setup_ctdb($$)
        # What is the mechanism here?
        my $private_if = 100;
 
-       my $vars = $self->provision_ctdb($prefix, $private_if);
+       my $vars = $self->provision_ctdb($prefix, $public_if, $private_if);
 
        $vars or return undef;
 
@@ -1241,7 +1279,7 @@ sub check_or_start_ctdb($$) {
                        "--reclock=$env_vars->{RECLOCK_FILE}",
                        "--nlist=$env_vars->{NODES_FILE}",
                        "--nopublicipcheck",
-#                      "--public-addresses=$env_vars->{PUBLIC_ADDRESSES_FILE}",
+                       "--public-addresses=$env_vars->{PUBLIC_ADDRESSES_FILE}",
                        "--event-script-dir=$env_vars->{EVENT_SCRIPT_DIR}",
                        "--logfile=$env_vars->{LOG_FILE}",
                        "-d $env_vars->{DEBUG_LEVEL}",
@@ -1258,12 +1296,12 @@ sub check_or_start_ctdb($$) {
 
 sub provision_ctdb($$$$$)
 {
-       my ($self, $prefix, $priviface, $no_delete_prefix) = @_;
+       my ($self, $prefix, $priviface, $pubiface, $no_delete_prefix) = @_;
 
        my %ret = ();
 
        my $internal_ip = "127.0.0.$priviface";
-       #my $public_ip = "127.0.0.$pubiface";
+       my $public_ip = "127.0.0.$pubiface";
 
        my @dirs = ();
 
@@ -1295,7 +1333,7 @@ sub provision_ctdb($$$$$)
        push @dirs, $ctdb_dir;
 
        my $nodes_file = "$ctdb_dir/nodes";
-       #my $public_addresses_file = "$ctdb_dir/public_addresses";
+       my $public_addresses_file = "$ctdb_dir/public_addresses";
 
        my $event_script_dir = "$ctdb_dir/events.d";
        push @dirs, $event_script_dir;
@@ -1323,21 +1361,20 @@ sub provision_ctdb($$$$$)
        print NODES "$internal_ip";
        close(NODES);
 
-       ## - setup public-addresses
-       #unless(open(PUBLIC_ADDR, ">$public_addresses_file")) {
-       #       warn("Unable to open public addresses file '$public_addresses_file'");
-       #       return undef;
-       #}
-       #print PUBLIC_ADDR "$public_addresses_file/128 lo";
-       #close(PUBLIC_ADDR);
+       # - setup public-addresses
+       unless(open(PUBLIC_ADDR, ">$public_addresses_file")) {
+               warn("Unable to open public addresses file '$public_addresses_file'");
+               return undef;
+       }
+       print PUBLIC_ADDR "$public_addresses_file/128 lo";
+       close(PUBLIC_ADDR);
 
 
        $ret{CTDBD_TEST_LOG} = "$prefix/ctdbd_test.log";
        $ret{CTDBD_TEST_LOG_POS} = 0;
 
        $ret{NODES_FILE} = $nodes_file;
-       #$ret{PUBLIC_ADDRESSES_FILE} = $public_addresses_file;
-       #$ret{PUBLIC_INTERFACE} = "lo";
+       $ret{PUBLIC_ADDRESSES_FILE} = $public_addresses_file;
        $ret{RECLOCK_FILE} = $reclock_file;
        $ret{SOCKET_FILE} = $socket_file;
        $ret{DB_DIR} = $db_dir;
@@ -1345,7 +1382,8 @@ sub provision_ctdb($$$$$)
        $ret{DB_DIR_STATE} = $db_dir_state;
        $ret{LOG_FILE} = $log_file;
        $ret{EVENT_SCRIPT_DIR} = $event_script_dir;
-       $ret{DEBUG_LEVEL} = 3;
+       $ret{PUBLIC_INTERFACE} = "lo";
+       $ret{DEBUG_LEVEL} = 2;
        $ret{PIDDIR} = $piddir;
 
        $ret{BINDIR} = "$self->{srcdir}/ctdb/bin";