67 lines
2.5 KiB
Plaintext
67 lines
2.5 KiB
Plaintext
|
#!/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;
|
||
|
}
|
||
|
}
|
||
|
|