xcat-core/xCAT/postscripts/confignics

67 lines
2.5 KiB
Perl
Executable File

#!/usr/bin/perl
# IBM(c) 2007 EPL license http://www.eclipse.org/legal/epl-v10.html
# confignics postscript for configuring additional ethernet and ib NIC adapters.
# This module parses NIC environment variables containing data from the nics table
# for the specific node i.e.:
# NICNODE - the node name
# NICIPS - comma separated list of ips per NIC
# NICHOSTNAMESUFFIXES - comma spearated list of hostname suffixes per NIC
# NICTYPES - ethernet or infiniband
# NICCUSTOMSCRIPTS - script to configure nic, i.e. configeth or configib
# NICNETWORKS - network and subnetmask for the adapter.
use strict;
use Socket;
my $nicips = $ENV{NICIPS};
my $niccustomscripts = $ENV{NICCUSTOMSCRIPTS};
my $nictypes = $ENV{NICTYPES};
my $xcatpostdir = "/xcatpost";
system("logger -t xcat -p local4.info 'confignics: CUSTOMSCRIPTS: $niccustomscripts .'");
# niccustomscripts specifies which NICS need to be configured.
# and which script to use to configure it.
# Strip NIC and customscript and then call the custom script with the NIC
# it is up to the custom script to verify information passed in NIC env vars.
# i.e. if customscript is "eth1:configeth eth1, eth2:configeth2"
# then first get eth1 for the nic and "configeth eth1" for the command to run"
# the do the same for eth2.
# the NIC environment variables will still be set for the customscript to use.
if ( defined $niccustomscripts && length $niccustomscripts > 0 ) {
foreach my $customscript (split(/,/,$niccustomscripts)) {
my @script = split(/:/,$customscript);
runcmd("$xcatpostdir/@script[1]");
system("logger -t xcat -p local4.info 'confignics: executed custom script: @script[1] '");
}
}
else {
# determine nic from nictypes and get the nictype. Invoke configeth or configiba based on nictype.
# i.e. $nictypes = "eth1:ethernet,eth2:ethernet"
foreach my $nic_type (split(/,/,$nictypes)) {
my @nic_and_type = split(/:/,$nic_type);
if ("ETHERNET" eq uc(@nic_and_type[1])) {
runcmd("$xcatpostdir/configeth @nic_and_type[0]");
system("logger -t xcat -p local4.info 'confignics: executed script: configeth @nic_and_type[0] '");
}
}
}
exit 0;
sub runcmd {
my $cmd = shift @_;
$cmd .= ' 2>&1';
my @output = `$cmd`;
my $rc = $? >> 8;
if ($rc) {
system("logger -t xcat -p local4.err 'confignics: command $cmd failed with rc $rc: " . join('',@output) . "'");
my $errout= "confignics: command $cmd failed with rc $rc.";
# echo $errout;
exit $rc;
}
}