mirror of
https://github.com/xcat2/xcat-core.git
synced 2025-05-22 11:42:05 +00:00
enhance bmcsetup logic for openbmc
This commit is contained in:
parent
ed0ed0a1cf
commit
fe8e4b800c
@ -112,6 +112,13 @@ fi
|
||||
# Add ipmi_devintf module to allow the ipmitool operation in-band
|
||||
modprobe ipmi_devintf
|
||||
|
||||
for parm in `cat /proc/cmdline`; do
|
||||
key=`echo $parm|awk -F= '{print $1}'`
|
||||
if [ "$key" = "xcatd" ]; then
|
||||
XCATMASTER=`echo $parm|awk -F= '{print $2}'|awk -F: '{print $1}'`
|
||||
fi
|
||||
done
|
||||
|
||||
allowcred.awk &
|
||||
CREDPID=$!
|
||||
sleep 5
|
||||
@ -161,6 +168,7 @@ logger -s -t $log_label -p local4.info "IPMIVER=$IPMIVER, IPMIMFG=$IPMIMFG, XPRO
|
||||
#
|
||||
# IPMIMFG=2 = IBM
|
||||
# IPMIMFG=0 = OpenPower
|
||||
# IPMIMFG=42817 and XPROD=16975 = OpenBMC
|
||||
#
|
||||
if [ "$IPMIMFG" == 2 ]; then #IBM
|
||||
if [ "$XPROD" == "220" ]; then
|
||||
@ -258,13 +266,20 @@ elif [ "$IPMIMFG" == "674" ]; then # DELL
|
||||
ipmitool delloem lan set shared with lom$BMCPORT &>/dev/null
|
||||
ipmitool delloem lan set shared with failover all loms &>dev/null
|
||||
fi
|
||||
elif [ "$IPMIMFG" == "42817" -a "$XPROD" == "16975" ]; then
|
||||
ISOPENBMC=1
|
||||
fi
|
||||
|
||||
if [ -z "$ISOPENBMC" ]; then
|
||||
LAN_MED_TYPE="802.3"
|
||||
else
|
||||
LAN_MED_TYPE="Other LAN"
|
||||
fi
|
||||
while [ -z "$LANCHAN" ]; do
|
||||
logger -s -t $log_label -p local4.info "Auto detecting LAN channel..."
|
||||
for TLANCHAN in {1..16}; do
|
||||
# Try to get the channel information; then get the MAC which is used for the channel
|
||||
if ipmitool channel info $TLANCHAN 2> /dev/null | grep 802.3 > /dev/null 2>&1 && ipmitool raw 0xc 2 $TLANCHAN 5 0 0 > /dev/null 2>&1; then
|
||||
if ipmitool channel info $TLANCHAN 2> /dev/null | grep "$LAN_MED_TYPE" > /dev/null 2>&1 && ipmitool raw 0xc 2 $TLANCHAN 5 0 0 > /dev/null 2>&1; then
|
||||
LANCHAN=$TLANCHAN
|
||||
break;
|
||||
fi;
|
||||
@ -279,6 +294,9 @@ logger -s -t $log_label -p local4.info "Detected LAN channel $LANCHAN"
|
||||
|
||||
let idev=NUMBMCS
|
||||
if [ $IPCFGMETHOD="static" ]; then
|
||||
if [ ! -z "$ISOPENBMC" ]; then
|
||||
let idev=0
|
||||
fi
|
||||
while [ $idev -gt 0 ]; do
|
||||
let idev=idev-1
|
||||
TRIES=0
|
||||
@ -334,7 +352,11 @@ if [ $IPCFGMETHOD="static" ]; then
|
||||
done
|
||||
fi
|
||||
else
|
||||
let idev=NUMBMCS
|
||||
if [ -z "$ISOPENBMC" ];then
|
||||
let idev=NUMBMCS
|
||||
else
|
||||
let idev=0
|
||||
fi
|
||||
while [ $idev -gt 0 ]; do
|
||||
let idev=idev-1
|
||||
TRIES=0
|
||||
@ -366,6 +388,16 @@ done
|
||||
# After network commands are issued, pause to allow the BMC to apply (OpenPower)
|
||||
snooze
|
||||
|
||||
# update the node status to 'bmcready' for openbmc, no more configuration is needed.
|
||||
if [ ! -z "$ISOPENBMC" ]; then
|
||||
# update the node status to 'bmcready'
|
||||
if [ ! -z "$XCATMASTER" ]; then
|
||||
updateflag.awk $XCATMASTER 3002 "installstatus bmcready"
|
||||
fi
|
||||
rm -f /tmp/ipmicfg.xml
|
||||
exit 0
|
||||
fi
|
||||
|
||||
let idev=NUMBMCS-1
|
||||
for user in $BMCUS; do
|
||||
if [ "$user" = "" ]; then
|
||||
@ -587,12 +619,6 @@ while [ $idev -gt 0 ]; do
|
||||
cold_reset_bmc
|
||||
|
||||
# update the node status to 'bmcready'
|
||||
for parm in `cat /proc/cmdline`; do
|
||||
key=`echo $parm|awk -F= '{print $1}'`
|
||||
if [ "$key" = "xcatd" ]; then
|
||||
XCATMASTER=`echo $parm|awk -F= '{print $2}'|awk -F: '{print $1}'`
|
||||
fi
|
||||
done
|
||||
if [ ! -z "$XCATMASTER" ]; then
|
||||
updateflag.awk $XCATMASTER 3002 "installstatus bmcready"
|
||||
fi
|
||||
|
@ -29,10 +29,17 @@ for LANCHAN in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16; do
|
||||
done
|
||||
BMCMAC=`ipmitool lan print $LANCHAN|grep ^MAC|awk '{print $4}'` #bmcconfig may opt to use DHCP, if so we need to feed up the mac address
|
||||
#TODO: need a way to get the DUID the service processor may use, perhaps reserve that for 'ibmsetup' since spec doesn't touch ipv6?
|
||||
|
||||
IPMIMFG=`ipmitool mc info |grep "^Manufacturer ID"|awk '{print $4}'`
|
||||
XPROD=`ipmitool mc info | grep "^Product ID"|awk '{print $4}'`
|
||||
if [ "$IPMIMFG" == "42817" -a "$XPROD" == "16975" ]; then
|
||||
ISOPENBMC=1
|
||||
else
|
||||
ISOPENBMC=0
|
||||
fi
|
||||
echo "<xcatrequest>
|
||||
<command>getbmcconfig</command>
|
||||
<callback_port>300</callback_port>
|
||||
<isopenbmc>$ISOPENBMC</isopenbmc>
|
||||
<bmcmac>$BMCMAC</bmcmac>
|
||||
</xcatrequest>" > /tmp/bmcreq.xml
|
||||
rm -f /tmp/ipmicfg.xml
|
||||
|
@ -30,10 +30,14 @@ sub getIPMIAuth {
|
||||
my $noderange = $args{noderange};
|
||||
my $ipmihash = $args{ipmihash};
|
||||
my $mphash = $args{mphash};
|
||||
my $key = $args{keytype};
|
||||
unless($key) {
|
||||
$key = "ipmi";
|
||||
}
|
||||
my $tmp;
|
||||
my %authmap;
|
||||
unless ($ipmihash) { #in the event that calling code does not pass us a prefetched set of values, pull it ourselves
|
||||
my $ipmitab = xCAT::Table->new('ipmi', -create => 0);
|
||||
my $ipmitab = xCAT::Table->new("$key", -create => 0);
|
||||
if ($ipmitab) { $ipmihash = $ipmitab->getNodesAttribs($noderange, [ 'username', 'password' ]); }
|
||||
}
|
||||
unless ($mphash) {
|
||||
@ -42,7 +46,7 @@ sub getIPMIAuth {
|
||||
}
|
||||
my $passtab = xCAT::Table->new('passwd');
|
||||
if ($passtab) {
|
||||
($tmp) = $passtab->getAttribs({ 'key' => 'ipmi' }, 'username', 'password');
|
||||
($tmp) = $passtab->getAttribs({ 'key' => "$key" }, 'username', 'password');
|
||||
if (defined($tmp)) {
|
||||
$ipmiuser = $tmp->{username};
|
||||
$ipmipass = $tmp->{password};
|
||||
|
@ -96,20 +96,24 @@ sub process_request {
|
||||
my $request = shift;
|
||||
my $callback = shift;
|
||||
my $node = $request->{'_xcat_clienthost'}->[0];
|
||||
my $open_table = "ipmi";
|
||||
if ($request->{isopenbmc}->[0]) {
|
||||
$open_table = "openbmc";
|
||||
}
|
||||
unless (ok_with_node($node, 300)) {
|
||||
$callback->({ error => ["Unable to prove root on your IP approves of this request"], errorcode => [1] });
|
||||
return;
|
||||
}
|
||||
|
||||
#my $sitetable = xCAT::Table->new('site');
|
||||
my $ipmitable = xCAT::Table->new('ipmi');
|
||||
my $ipmitable = xCAT::Table->new("$open_table");
|
||||
my $tmphash;
|
||||
my $username;
|
||||
my $gennedpassword = 0;
|
||||
my $bmc;
|
||||
my $password;
|
||||
$tmphash = $ipmitable->getNodesAttribs([$node], [ 'bmc', 'username', 'bmcport', 'password', 'taggedvlan' ]);
|
||||
my $authmap = xCAT::PasswordUtils::getIPMIAuth(noderange => [$node], ipmihash => $tmphash);
|
||||
my $authmap = xCAT::PasswordUtils::getIPMIAuth(noderange => [$node], ipmihash => $tmphash, keytype => $open_table);
|
||||
|
||||
if ($::XCATSITEVALS{genpasswords} eq "1" or $::XCATSITEVALS{genpasswords} =~ /y(es)?/i) {
|
||||
$password = genpassword(10) . "1cA!";
|
||||
|
Loading…
x
Reference in New Issue
Block a user