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;
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;
}
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);
$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) = @_;
sub setup_ctdb($$)
{
- my ($self, $prefix) = @_;
+ my ($self, $prefix, $public_if) = @_;
print "PROVISIONING 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;
"--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}",
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 = ();
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;
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;
$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";