mirror of
https://github.com/xcat2/xcat-core.git
synced 2025-05-22 03:32:04 +00:00
652 lines
20 KiB
Perl
Executable File
652 lines
20 KiB
Perl
Executable File
#!/usr/bin/env perl
|
|
|
|
#---------------------------------------------------------
|
|
# Configure Ethnet BNT switches
|
|
#---------------------------------------------------------
|
|
|
|
BEGIN
|
|
{
|
|
$::XCATROOT = $ENV{'XCATROOT'} ? $ENV{'XCATROOT'} : '/opt/xcat';
|
|
$::XCATDIR = $ENV{'XCATDIR'} ? $ENV{'XCATDIR'} : '/etc/xcat';
|
|
}
|
|
use lib "$::XCATROOT/lib/perl";
|
|
|
|
|
|
use strict;
|
|
use Socket;
|
|
use Getopt::Long;
|
|
use Expect;
|
|
use Net::Ping;
|
|
use xCAT::Usage;
|
|
use xCAT::NodeRange;
|
|
use xCAT::NetworkUtils;
|
|
use xCAT::Utils;
|
|
use xCAT::Table;
|
|
use xCAT::MsgUtils;
|
|
|
|
Getopt::Long::Configure("bundling");
|
|
$Getopt::Long::ignorecase = 0;
|
|
|
|
#global variables
|
|
my @nodes;
|
|
my @filternodes;
|
|
|
|
|
|
$::SWITCH_TYPE="EthSwitch::BNT";
|
|
|
|
#---------------------------------------------------------
|
|
# Main
|
|
#---------------------------------------------------------
|
|
# parse the options
|
|
if (
|
|
!GetOptions(
|
|
'h|help' => \$::HELP,
|
|
'switches=s' => \$::SWITCH,
|
|
'port=s' => \$::PORT,
|
|
'vlan=s' => \$::VLAN,
|
|
'user=s' => \$::USER,
|
|
'password=s' => \$::PASSWORD,
|
|
'group=s' => \$::GROUP,
|
|
'snmp' => \$::SNMP,
|
|
'ip' => \$::IP,
|
|
'name' => \$::NAME,
|
|
'all' => \$::ALL,
|
|
'V' => \$::VERBOSE,
|
|
'desc=s' => \$::DESC,
|
|
)
|
|
)
|
|
{
|
|
&usage;
|
|
exit(1);
|
|
}
|
|
|
|
# display the usage if -h or --help is specified
|
|
if ($::HELP)
|
|
{
|
|
&usage;
|
|
exit(0);
|
|
}
|
|
|
|
my $current_usr = getpwuid($>);
|
|
if ($current_usr ne "root")
|
|
{
|
|
print "Can't run this command for non-root user\n";
|
|
exit(1);
|
|
}
|
|
|
|
my $switchestab;
|
|
my $switchhash;
|
|
my $passwdtab;
|
|
my @passwd_ent;
|
|
|
|
#set community string for switch
|
|
my $community = "public";
|
|
my @snmpcs = xCAT::TableUtils->get_site_attribute("snmpc");
|
|
my $tmp = $snmpcs[0];
|
|
if (defined($tmp)) { $community = $tmp }
|
|
|
|
if ($::SWITCH) {
|
|
my @filternodes = xCAT::NodeRange::noderange( $::SWITCH );
|
|
if (nodesmissed) {
|
|
my $nodenotdefined = join(',', nodesmissed);
|
|
xCAT::MsgUtils->message("I","The following nodes are not defined in xCAT: $nodenotdefined");
|
|
}
|
|
# check switch attributes
|
|
$switchestab = xCAT::Table->new('switches');
|
|
$switchhash = $switchestab->getNodesAttribs(\@filternodes,['switchtype','sshusername','sshpassword','protocol','password','snmpversion']);
|
|
|
|
# get switch username and password from passwd
|
|
$passwdtab = xCAT::Table->new('passwd');
|
|
@passwd_ent = $passwdtab->getAttribs({ key => "switch" }, [ 'username', 'password' ]);
|
|
|
|
foreach my $fsw (@filternodes) {
|
|
if (($switchhash->{$fsw}->[0]->{switchtype}) =~ /BNT/) {
|
|
# use switches table first
|
|
if ((!defined($switchhash->{$fsw}->[0]->{sshusername})) &&
|
|
(!defined($switchhash->{$fsw}->[0]->{sshpassword})) ) {
|
|
if (defined($passwd_ent[0]->{username})) {
|
|
$switchhash->{$fsw}->[0]->{sshusername} = $passwd_ent[0]->{username};
|
|
}
|
|
if (defined($passwd_ent[0]->{password})) {
|
|
$switchhash->{$fsw}->[0]->{sshpassword} = $passwd_ent[0]->{password};
|
|
}
|
|
}
|
|
if (!defined($switchhash->{$fsw}->[0]->{password})) {
|
|
$switchhash->{$fsw}->[0]->{password} = $community;
|
|
}
|
|
push @nodes, $fsw;
|
|
} else {
|
|
xCAT::MsgUtils->message("E","The $fsw is not BNT switch, will not config");
|
|
}
|
|
}
|
|
unless (@nodes) {
|
|
xCAT::MsgUtils->message("E","No valid switches provided.");
|
|
exit(1);
|
|
}
|
|
} else {
|
|
xCAT::MsgUtils->message("E","A switch must be provided using the --switches keyword");
|
|
&usage;
|
|
exit(1);
|
|
}
|
|
|
|
#get mac address for the switches
|
|
my $mactab = xCAT::Table->new("mac");
|
|
my $machash = $mactab->getNodesAttribs(\@nodes,['mac']);
|
|
|
|
my $switches = join(",",@nodes);
|
|
my $cmd;
|
|
my $vlan;
|
|
my $port;
|
|
my $sub_req;
|
|
my $rc;
|
|
|
|
if (($::IP) || ($::ALL)) {
|
|
config_ip();
|
|
}
|
|
if (($::NAME) || ($::ALL)) {
|
|
config_hostname();
|
|
}
|
|
if (($::SNMP) || ($::ALL)) {
|
|
config_snmp();
|
|
}
|
|
if ($::VLAN) {
|
|
config_vlan();
|
|
}
|
|
if ($::DESC) {
|
|
config_desc();
|
|
}
|
|
|
|
sub config_ip {
|
|
my @config_switches;
|
|
my @discover_switches;
|
|
my $nodetab = xCAT::Table->new('hosts');
|
|
my $nodehash = $nodetab->getNodesAttribs(\@nodes,['ip','otherinterfaces']);
|
|
# get netmask from network table
|
|
my $nettab = xCAT::Table->new("networks");
|
|
my @nets;
|
|
if ($nettab) {
|
|
@nets = $nettab->getAllAttribs('net','mask');
|
|
}
|
|
|
|
foreach my $switch (@nodes) {
|
|
print "change $switch to static IP address\n";
|
|
|
|
#makesure host is in the /etc/hosts
|
|
$cmd = "makehosts $switch";
|
|
$rc= xCAT::Utils->runcmd($cmd, 0);
|
|
|
|
my $dip= $nodehash->{$switch}->[0]->{otherinterfaces};
|
|
my $mac= $machash->{$switch}->[0]->{mac};
|
|
if (!$dip) {
|
|
print "ERROR: Add otherinterfaces attribute for discover IP: chdef $switch otherinterfaces=x.x.x.x\n";
|
|
next;
|
|
}
|
|
|
|
#Validate if this IP is reachable
|
|
my $p = Net::Ping->new();
|
|
if (!$p->ping($dip)) {
|
|
print "$dip is not reachable\n";
|
|
next;
|
|
}
|
|
|
|
my $static_ip= $nodehash->{$switch}->[0]->{ip};
|
|
|
|
# don't need to set if ip addresses are same
|
|
if ($dip eq $static_ip) {
|
|
print "static IP $static_ip and discovery IP $dip is same, will not process command for $switch\n";
|
|
$cmd = "chdef $switch otherinterfaces=";
|
|
$rc= xCAT::Utils->runcmd($cmd, 0);
|
|
next;
|
|
}
|
|
|
|
#get hostname
|
|
my $dswitch = xCAT::NetworkUtils->gethostname($dip);
|
|
|
|
# if hostnames are same, created different one for discovery name
|
|
if ($dswitch eq $switch) {
|
|
$dswitch="$switch-discovery";
|
|
}
|
|
|
|
#if not defined, need to create one for xdsh to use
|
|
if (!$dswitch) {
|
|
my $ip_str = $dip;
|
|
$ip_str =~ s/\./\-/g;
|
|
$dswitch = "switch-$ip_str";
|
|
}
|
|
$cmd = "chdef -t node -o $dswitch groups=switch ip=$dip switchtype=BNT username=root password=admin nodetype=switch";
|
|
$rc= xCAT::Utils->runcmd($cmd, 0);
|
|
$cmd = "makehosts $dswitch";
|
|
$rc= xCAT::Utils->runcmd($cmd, 0);
|
|
|
|
#get netmask
|
|
my $mask;
|
|
foreach my $net (@nets) {
|
|
if (xCAT::NetworkUtils::isInSameSubnet( $net->{'net'}, $static_ip, $net->{'mask'}, 0)) {
|
|
$mask=$net->{'mask'};
|
|
last;
|
|
}
|
|
}
|
|
|
|
print "Changing IP address of $dswitch to $static_ip...\n";
|
|
# For RackSwitch G8124
|
|
if ($mac =~ /fc\:cf\:62/i) {
|
|
$cmd="xdsh $dswitch -t 10 --devicetype EthSwitch::BNT 'enable;configure terminal;show interface ip;interface ip-mgmt enable;interface ip-mgmt address $static_ip $mask;exit' ";
|
|
} elsif ($mac =~ /6c\:ae\:8b/i){
|
|
print "this is BNT G8264-T switch\n";
|
|
$cmd="xdsh $dswitch -t 10 --devicetype EthSwitch::BNT '/cfg/l3/if 128/maskplen $mask;/cfg/l3/if 128/addr $static_ip;apply' ";
|
|
} else {
|
|
$cmd="xdsh $dswitch -t 10 --devicetype EthSwitch::BNT 'enable;configure terminal;show interface ip;interface ip 1;ip address $static_ip;exit;exit' ";
|
|
}
|
|
$rc= xCAT::Utils->runcmd($cmd, 0);
|
|
|
|
# check if static ip address is reachable
|
|
my $retry = 0;
|
|
my $retry_failed = 1;
|
|
while ($retry < 3) {
|
|
if (!$p->ping($static_ip)) {
|
|
$retry = $retry + 1;
|
|
print "sleep 10\n";
|
|
sleep 10;
|
|
} else {
|
|
$retry_failed = 0;
|
|
last;
|
|
}
|
|
}
|
|
print "retry $retry_failed\n";
|
|
if ($retry_failed) {
|
|
print "Failed to set up static IP address: $static_ip for $switch\n";
|
|
push (@discover_switches, $dswitch);
|
|
next;
|
|
}
|
|
|
|
push (@discover_switches, $dswitch);
|
|
push (@config_switches, $switch);
|
|
}
|
|
if (@config_switches) {
|
|
#update switch status
|
|
my $csw = join(",",@config_switches);
|
|
$cmd = "chdef $csw status=ip_configured otherinterfaces=";
|
|
$rc= xCAT::Utils->runcmd($cmd, 0);
|
|
print "$csw: IP address configured\n";
|
|
}
|
|
if (@discover_switches) {
|
|
my $dsw = join(",",@discover_switches);
|
|
#remove discover switch from xCATdb and /etc/hosts
|
|
$cmd = "makehosts -d $dsw";
|
|
$rc= xCAT::Utils->runcmd($cmd, 0);
|
|
$cmd = "rmdef $dsw";
|
|
$rc= xCAT::Utils->runcmd($cmd, 0);
|
|
}
|
|
}
|
|
|
|
sub config_hostname {
|
|
my @config_switches;
|
|
my $switchtab = xCAT::Table->new('switches');
|
|
my $switchhash = $switchtab->getNodesAttribs(\@nodes,['sshusername','sshpassword']);
|
|
|
|
foreach my $switch (@nodes) {
|
|
my $user= $switchhash->{$switch}->[0]->{sshusername};
|
|
my $pwd= $switchhash->{$switch}->[0]->{sshpassword};
|
|
my $mac= $machash->{$switch}->[0]->{mac};
|
|
if ((!$user)||(!$pwd)) {
|
|
print "switch ssh username or password is not define, add default one\n";
|
|
$cmd = "chdef $switch username=root password=admin";
|
|
$rc= xCAT::Utils->runcmd($cmd, 0);
|
|
}
|
|
if ($mac =~ /6c\:ae\:8b/i){
|
|
$cmd="xdsh $switch --devicetype EthSwitch::BNT '/cfg/sys/hprompt enable;/cfg/sys/ssnmp/name $switch;apply' ";
|
|
} else {
|
|
$cmd="xdsh $switch --devicetype EthSwitch::BNT 'enable;configure terminal;hostname $switch;write memory;exit' ";
|
|
}
|
|
$rc= xCAT::Utils->runcmd($cmd, 0);
|
|
if ($::RUNCMD_RC != 0) {
|
|
xCAT::MsgUtils->message("E","Failed to setup hostname for $switch");
|
|
print "$switch: Failed to setup hostname\n";
|
|
next;
|
|
}
|
|
print "$switch: Hostname changed to $switch\n";
|
|
push (@config_switches, $switch);
|
|
}
|
|
if (@config_switches) {
|
|
#update switch status
|
|
my $csw = join(",",@config_switches);
|
|
$cmd = "chdef $csw status=hostname_configured" ;
|
|
$rc= xCAT::Utils->runcmd($cmd, 0);
|
|
}
|
|
}
|
|
|
|
#setup secure SNMP v3
|
|
sub config_snmp {
|
|
my $snmp_user;
|
|
my $snmp_passwd;
|
|
my $snmp_group;
|
|
my @config_switches;
|
|
|
|
if ($::USER) {
|
|
$snmp_user = $::USER;
|
|
} else {
|
|
$snmp_user = "xcatadmin\r";
|
|
}
|
|
if ($::PASSWORD) {
|
|
$snmp_passwd = $::PASSWORD;
|
|
} else {
|
|
# Need a special character
|
|
$snmp_passwd = "xcatadminpassw1rd\@snmp\r";
|
|
}
|
|
if ($::GROUP) {
|
|
$snmp_group = $::GROUP;
|
|
} else {
|
|
$snmp_group = "xcatgroup\r";
|
|
}
|
|
|
|
foreach my $switch (@nodes) {
|
|
my $mysw;
|
|
my $username;
|
|
my $passwd;
|
|
my $protocol;
|
|
my $snmppass;
|
|
my $snmpversion;
|
|
|
|
my $login_cmd;
|
|
|
|
$username = $switchhash->{$switch}->[0]->{sshusername};
|
|
$passwd = $switchhash->{$switch}->[0]->{sshpassword};
|
|
$protocol = $switchhash->{$switch}->[0]->{protocol};
|
|
if ($switchhash->{$switch}->[0]->{snmpversion} =~ /3/) {
|
|
$snmppass=$community;
|
|
} else {
|
|
$snmppass = $switchhash->{$switch}->[0]->{password};
|
|
}
|
|
|
|
if ($protocol =~ /telnet/) {
|
|
$login_cmd = "telnet $switch\r";
|
|
} else {
|
|
$login_cmd = "ssh $username\@$switch\r";
|
|
}
|
|
|
|
#get hostname on the switch in case hostname is different
|
|
my $ccmd = "snmpwalk -Os -v1 -c $snmppass $switch 1.3.6.1.2.1.1.5";
|
|
my $result = xCAT::Utils->runcmd($ccmd, 0);
|
|
my ($desc,$switchhost) = split /: /, $result;
|
|
if (!$switchhost) {
|
|
$switchhost=$switch;
|
|
}
|
|
|
|
my $mac= $machash->{$switch}->[0]->{mac};
|
|
if ($mac =~ /6c\:ae\:8b/i){
|
|
my $rc = config_G8264($switch,$login_cmd, $passwd, $snmp_user,$snmp_passwd,$snmp_group);
|
|
if ($rc == 0){
|
|
push (@config_switches, $switch);
|
|
}
|
|
next;
|
|
}
|
|
|
|
my $enable_cmd="enable\r";
|
|
my $config_cmd="configure terminal\r";
|
|
my $exit_cmd="exit\r";
|
|
|
|
my $user_prompt = "username: ";
|
|
my $pwd_prompt = "assword: ";
|
|
my $sw_prompt = "$switchhost>";
|
|
my $enable_prompt="$switchhost#";
|
|
my $config_prompt="^.*\\\(config\\\)\#";
|
|
|
|
$mysw = new Expect;
|
|
my $timeout = 20;
|
|
#my $login_cmd = "telnet $switch\r";
|
|
|
|
print "Setup SNMP server for $switch, $username, $passwd\n";
|
|
#create a SNMP user
|
|
my $cfg_user1="snmp-server user 5 name $snmp_user\r";
|
|
my $cfg_user2="snmp-server user 5 authentication-protocol sha authentication-password\r";
|
|
#create a SNMP group
|
|
my $cfg_group1="snmp-server group 5 group-name $snmp_group\r";
|
|
my $cfg_group2="snmp-server group 5 user-name $snmp_user\r";
|
|
my $cfg_group3="snmp-server group 5 security usm\r";
|
|
#Add access permission
|
|
my $cfg_access1="snmp-server access 5 name $snmp_group\r";
|
|
my $cfg_access2="snmp-server access 5 level authNoPriv\r";
|
|
my $cfg_access3="snmp-server access 5 security usm\r";
|
|
my $cfg_access4="snmp-server access 5 read-view iso\r";
|
|
|
|
$mysw->debug(0);
|
|
$mysw->log_stdout(0); # suppress stdout output..
|
|
|
|
unless ($mysw->spawn($login_cmd))
|
|
{
|
|
$mysw->soft_close();
|
|
print "Unable to run $login_cmd\n";
|
|
next;
|
|
}
|
|
my @result = $mysw->expect(
|
|
$timeout,
|
|
[
|
|
$user_prompt,
|
|
sub {
|
|
$mysw->clear_accum();
|
|
$mysw->send("$username\r");
|
|
$mysw->clear_accum();
|
|
$mysw->exp_continue();
|
|
}
|
|
],
|
|
[
|
|
$pwd_prompt,
|
|
sub {
|
|
$mysw->clear_accum();
|
|
$mysw->send("$passwd\r");
|
|
$mysw->clear_accum();
|
|
$mysw->exp_continue();
|
|
}
|
|
],
|
|
[
|
|
"-re", $enable_prompt,
|
|
sub {
|
|
$mysw->clear_accum();
|
|
$mysw->send($config_cmd);
|
|
$mysw->exp_continue();
|
|
}
|
|
],
|
|
[
|
|
"-re", $config_prompt,
|
|
sub {
|
|
$mysw->clear_accum();
|
|
$mysw->send($cfg_user1);
|
|
$mysw->send($cfg_user2);
|
|
$mysw->send("$passwd\r");
|
|
$mysw->send($snmp_passwd);
|
|
$mysw->send($snmp_passwd);
|
|
sleep 1;
|
|
$mysw->clear_accum();
|
|
# create snmp group
|
|
$mysw->send($cfg_group1);
|
|
$mysw->send($cfg_group2);
|
|
$mysw->send($cfg_group3);
|
|
$mysw->clear_accum();
|
|
$mysw->send($cfg_access1);
|
|
$mysw->send($cfg_access2);
|
|
$mysw->send($cfg_access3);
|
|
$mysw->send($cfg_access4);
|
|
$mysw->clear_accum();
|
|
$mysw->send("write memory\r");
|
|
$mysw->send($exit_cmd);
|
|
$mysw->send($exit_cmd);
|
|
}
|
|
],
|
|
[
|
|
"-re", $sw_prompt,
|
|
sub {
|
|
$mysw->clear_accum();
|
|
$mysw->send($enable_cmd);
|
|
$mysw->exp_continue();
|
|
}
|
|
],
|
|
);
|
|
##########################################
|
|
# Expect error - report and quit
|
|
##########################################
|
|
if (defined($result[1]))
|
|
{
|
|
my $errmsg = $result[1];
|
|
$mysw->soft_close();
|
|
print "Failed expect command $errmsg\n";
|
|
exit(1);
|
|
}
|
|
$mysw->soft_close();
|
|
push (@config_switches, $switch);
|
|
}
|
|
if (@config_switches) {
|
|
#update switch status
|
|
my $csw = join(",",@config_switches);
|
|
$cmd = "chdef $csw status=switch_configured snmpversion=3 snmpauth=sha snmpprivacy=authNoPriv snmpusername=$snmp_user snmppassword=$snmp_passwd";
|
|
$rc= xCAT::Utils->runcmd($cmd, 0);
|
|
print "$csw: SNMP configured\n";
|
|
}
|
|
}
|
|
|
|
sub config_G8264 {
|
|
my $switch = shift;
|
|
my $login_cmd = shift;
|
|
my $passwd = shift;
|
|
my $snmp_user = shift;
|
|
my $snmp_passwd = shift;
|
|
my $snmp_group = shift;
|
|
my $cmd;
|
|
|
|
$cmd="xdsh $switch --devicetype EthSwitch::BNT '/cfg/sys/ssnmp/snmpv3/usm 5/name $snmp_user;/cfg/sys/ssnmp/snmpv3/usm 5/auth sha;/cfg/sys/ssnmp/snmpv3/usm 5/priv none;/cfg/sys/ssnmp/snmpv3/group 5/model usm;/cfg/sys/ssnmp/snmpv3/group 5/uname $snmp_user;/cfg/sys/ssnmp/snmpv3/group 5/gname $snmp_group;/cfg/sys/ssnmp/snmpv3/access 5/name $snmp_group;/cfg/sys/ssnmp/snmpv3/access 5/model usm;/cfg/sys/ssnmp/snmpv3/access 5/level authNoPriv;apply' ";
|
|
|
|
$rc= xCAT::Utils->runcmd($cmd, 0);
|
|
|
|
#use expect to set password
|
|
my $mysw = new Expect;
|
|
my $timeout = 20;
|
|
my $pwd_prompt = "assword: ";
|
|
my $main_prompt="Main#";
|
|
my $authpw_cmd = "/cfg/sys/ssnmp/snmpv3/usm 5/authpw\r";
|
|
|
|
$mysw->debug(0);
|
|
$mysw->log_stdout(0); # suppress stdout output..
|
|
|
|
unless ($mysw->spawn($login_cmd))
|
|
{
|
|
$mysw->soft_close();
|
|
print "Unable to run $login_cmd\n";
|
|
return 1;
|
|
}
|
|
my @result = $mysw->expect(
|
|
$timeout,
|
|
[
|
|
$pwd_prompt,
|
|
sub {
|
|
$mysw->clear_accum();
|
|
$mysw->send("$passwd\r");
|
|
$mysw->clear_accum();
|
|
$mysw->exp_continue();
|
|
}
|
|
],
|
|
[
|
|
"-re", $main_prompt,
|
|
sub {
|
|
$mysw->clear_accum();
|
|
$mysw->send($authpw_cmd);
|
|
$mysw->send("$passwd\r");
|
|
$mysw->send($snmp_passwd);
|
|
$mysw->send($snmp_passwd);
|
|
sleep 1;
|
|
$mysw->clear_accum();
|
|
$mysw->send("apply\r");
|
|
$mysw->send("save\r");
|
|
$mysw->send("y\r");
|
|
$mysw->send("exit\r");
|
|
}
|
|
],
|
|
);
|
|
if (defined($result[1]))
|
|
{
|
|
my $errmsg = $result[1];
|
|
$mysw->soft_close();
|
|
print "Failed expect command $errmsg\n";
|
|
return 1;
|
|
}
|
|
$mysw->soft_close();
|
|
return 0;
|
|
}
|
|
|
|
sub config_vlan {
|
|
if ($::PORT) {
|
|
$port = $::PORT;
|
|
} else {
|
|
&usage;
|
|
exit(1);
|
|
}
|
|
$vlan = $::VLAN;
|
|
print "Tagging VLAN=$vlan for $switches port $port\n";
|
|
#create vlan, tagged vlan
|
|
$cmd = "xdsh $switches --devicetype EthSwitch::BNT 'enable;configure terminal;vlan $vlan;exit;interface port $port;switchport mode trunk;switchport trunk allowed vlan $vlan;write memory;exit;exit' ";
|
|
$rc= xCAT::Utils->runcmd($cmd, 0);
|
|
if ($::RUNCMD_RC != 0) {
|
|
xCAT::MsgUtils->message("E","Failed to setup VLAN number");
|
|
print "$switches: Failed to setup VLAN\n";
|
|
}
|
|
|
|
}
|
|
|
|
sub config_desc {
|
|
# checking for port number, switches is checked earlier
|
|
if ($::PORT) {
|
|
$port = $::PORT;
|
|
} else {
|
|
xCAT::MsgUtils->message("E","Error - When setting description, a port must be provided.");
|
|
&usage;
|
|
exit(1);
|
|
}
|
|
|
|
my $cmd_prefix = "xdsh $switches --devicetype $::SWITCH_TYPE";
|
|
my $cmd;
|
|
|
|
# Build up the commands for easier readability
|
|
$cmd = $cmd . "enable\;";
|
|
$cmd = $cmd . "configure terminal\;";
|
|
$cmd = $cmd . "interface port $port\;";
|
|
$cmd = $cmd . "description \\\"$::DESC\\\"\;";
|
|
$cmd = $cmd . "write memory\;";
|
|
$cmd = $cmd . "exit\;exit\;";
|
|
|
|
my $final_cmd = $cmd_prefix . " \"" . $cmd . "\"";
|
|
print "Setting description=\"$::DESC\" on port $port of switches=$switches\n";
|
|
if ($::VERBOSE) {
|
|
print "Executing cmd: \n==> $final_cmd\n";
|
|
}
|
|
$rc= xCAT::Utils->runcmd($final_cmd, 0);
|
|
if ($::RUNCMD_RC != 0) {
|
|
xCAT::MsgUtils->message("E","Failed to set a description on the port: $port");
|
|
}
|
|
}
|
|
|
|
#---------------------------------------------------------
|
|
|
|
=head3 usage
|
|
|
|
Displays message for -h option
|
|
|
|
=cut
|
|
|
|
#---------------------------------------------------------
|
|
sub usage
|
|
{
|
|
print "Usage:
|
|
configBNT -h│--help
|
|
configBNT --switches switchnames --ip
|
|
configBNT --switches switchnames --name
|
|
configBNT --switches switchnames --snmp [--user snmp_user] [--password snmp_password] [--group snmp_group]
|
|
configBNT --switches switchnames --port port --vlan vlan
|
|
|
|
To set the IP address, hostname and config snmp:
|
|
configBNT --switches switchnames --all
|
|
|
|
To set the description for a port on the switch:
|
|
configBNT --switches switchnames --port port --desc \"description\"
|
|
\n";
|
|
}
|
|
|
|
|