add instance id password change option

git-svn-id: https://svn.code.sf.net/p/xcat/code/xcat-core/trunk@9757 8638fb3e-16cb-4fca-ae20-7b5d299a9bcd
This commit is contained in:
lissav 2011-06-07 17:23:11 +00:00
parent 7f125d8e2e
commit cf1b14ada8

View File

@ -90,6 +90,7 @@ if (
'h|help' => \$::HELP,
'v|version' => \$::VERSION,
'V|verbose' => \$::VERBOSE,
'p|passwd' => \$::PASSWD,
'r|rm' => \$::RM,
)
)
@ -154,15 +155,21 @@ if ($::RM)
}
if ((!($::INIT)) && (!($::SETUPODBC)))
if ((!($::INIT)) && (!($::SETUPODBC)) && (!($::PASSWD)))
{
xCAT::MsgUtils->message("I", "Either -i or -o flag must be chosen");
xCAT::MsgUtils->message("I", "Either -i,-o or -p flag must be chosen");
&usage;
exit(1);
}
if ((!($::SERVER)) && (!($::CLIENT)))
if (($::PASSWD) && ($::VERBOSE))
{
xCAT::MsgUtils->message("I", "Either -S or -C flag must be chosen");
xCAT::MsgUtils->message("I", "Change password cannot be used with Verbose mode. ");
&usage;
exit(1);
}
if ((!($::SERVER)) && (!($::CLIENT))&& (!($::PASSWD)))
{
xCAT::MsgUtils->message("I", "Either -S, -C, or -p flag must be chosen");
&usage;
exit(1);
}
@ -176,7 +183,7 @@ if (($::SERVER) && ($::CLIENT))
if ((!($::SERVER)) && (!($::CLIENT)) && ($::SETUPODBC))
{
xCAT::MsgUtils->message("I",
"Either -S or -C flag must be chosen with the -o flag");
"Either -S or -C flag must be chosen with the -o flag.");
&usage;
exit(1);
}
@ -224,6 +231,7 @@ $::databaseloc = "/var/lib/db2"; # database location default
if ($ENV{'DATABASELOC'}) # input where xcatdb is located
{
$::databaseloc = $ENV{'DATABASELOC'};
$::databaselocdir = $ENV{'DATABASELOC'};
$::databaseloc .="\/db2";
} else { # use site.databaseloc if set
my $cmd = " XCATBYPASS=1 tabdump site | grep databaseloc";
@ -232,12 +240,11 @@ if ($ENV{'DATABASELOC'}) # input where xcatdb is located
{
(my $attr, my $db) = split(",", $output[0]);
(my $q, $::databaseloc) = split("\"", $db);
$::databaselocdir = $::databaseloc;
$::databaseloc .="\/db2";
}
}
# if we are on the MN ( db2 server)
if ($::SERVER)
{
@ -277,9 +284,10 @@ if ($::SERVER)
# if not just odbc update and xcat MN is not already running on DB2
# or if we are setting up the Client and not just the ODBC
# or change password
# then Get instance password
#
if ((($odbconly == 0) && ($::xcatrunningdb2 == 0)) || (($::CLIENT) && ($odbconly == 0)))
if ((($odbconly == 0) && ($::xcatrunningdb2 == 0)) || (($::CLIENT) && ($odbconly == 0)) || ($::PASSWD))
{
if ($ENV{'XCATDB2PW'}) # passwd supplied
{
@ -306,6 +314,14 @@ if ((($odbconly == 0) && ($::xcatrunningdb2 == 0)) || (($::CLIENT) && ($odbconly
}
}
# if we are just changing the password for the instance
# do it and exit
if ($::PASSWD) {
my $rc=0;
$rc=&updatepasswd;
exit $rc;
}
# initial setup request and not already running db2
if (($::INIT) && ($::xcatrunningdb2 == 0))
{
@ -494,8 +510,8 @@ sub usage
'I',
"Usage:\ndb2sqlsetup - Performs the setup of IBM DB2 for xCAT to use as its database. See man db2sqlsetup for more information."
);
my $msg =
"db2sqlsetup <-h|--help>\n <-v|--version>\n <-i|--init> <-S|-C> [-o|--setupODBC] [-V|--verbose]\n <-o|--setupODBC> <-S|-C> [-V|--verbose]\n <-r|--rm> <-S|-C> [-V|--verbose]";
my $msg=
"db2sqlsetup <-h|--help>\n <-v|--version>\n <-i|--init> <-S|-C> [-o|--setupODBC] [-V|--verbose]\n <-o|--setupODBC> <-S|-C> [-V|--verbose]\n <-p|--passwd> [-S|-C]\n ";
xCAT::MsgUtils->message('I', "$msg");
}
@ -515,7 +531,11 @@ sub startxcatd
my $xcmd;
if ($::osname eq 'AIX')
{
$xcmd = "$::XCATROOT/sbin/restartxcatd";
if ($ENV{'XCATDB2QUIET'} == 1){ # don't show errors
$xcmd = "$::XCATROOT/sbin/restartxcatd >/dev/null 2>&1";
} else {
$xcmd = "$::XCATROOT/sbin/restartxcatd";
}
}
else
@ -2249,6 +2269,84 @@ sub remove
xCAT::MsgUtils->message("I", "Cleanup completely finished. $error errors have got. \n");
}
#-----------------------------------------------------------------------------
=head3 updatepasswd
if -S , then update the xcatdb instance password on the MN
-C , then update the xcatdb instance password on the clients (SN)
if just -p , then update the xcatdb intance password on both
=cut
#-----------------------------------------------------------------------------
sub updatepasswd
{
my $rc=0;
$ENV{'XCATDB2QUIET'} = 1;
my $updateclient=0;
my $updateserver=0;
if ($::SERVER) { # going to update the server MN
$updateserver=1;
}
if ($::CLIENT) { # going to update the clients (SNs)
$updateclient=1;
}
if ((!($::CLIENT)) && (!($::SERVER))) { # update both MN and SNs
$updateserver=1;
$updateclient=1;
}
my $snlist;
# must read the database before we change the password on the MN
# to get the list of Service Nodes
if ($updateclient==1) {
if (xCAT::Utils->isMN()) { # if on Management Node
my @allSN=xCAT::Utils->getAllSN;
foreach my $nodes (@allSN) {
$snlist.=$nodes;
$snlist.="\,";
}
chop $snlist;
}
}
# change password on the MN
if ($updateserver==1) { # we will change the MN
# then shutdown xcatd
# First change xcatd password
# change /etc/xcat/cfgloc
# then restart xcatd
# change odbc password, if it exists
&shutdownxcatd;
&mkdb2user;
&createcfgloc;
&startxcatd;
&setupODBC;
}
# change password on the Service Nodes
# note this routine will be run on the SN's also from xdsh
if ($updateclient==1) { # Update the clients
if (xCAT::Utils->isMN()) { # if on Management Node
# xdsh <servicenodes> -v /opt/xcat/bin/db2sqlsetup -C -p
my $cmd="xdsh $snlist -v DATABASELOC=$::databaselocdir XCATDB2PW=$::adminpassword \/opt\/xcat\/bin\/db2sqlsetup -C -p";
xCAT::Utils->runcmd($cmd, 0);
if ($::RUNCMD_RC != 0)
{
my $cmd2="xdsh $snlist -v DATABASELOC=$::databaselocdir XCATDB2PW=XXXXXX \/opt\/xcat\/bin\/db2sqlsetup -C -p";
my $message =
"$cmd2 failed. Could not change password on all the Service Nodes";
xCAT::MsgUtils->message("E", "$message");
}
} else { # on the SN
&shutdownxcatd;
&mkdb2user;
&createcfgloc;
&startxcatd;
&setupODBC;
}
}
return $::RUNCMD_RC;
}