From a40eb3d054aeeb0d013ac3393459b8f57ab1507e Mon Sep 17 00:00:00 2001 From: daniceexi Date: Wed, 21 May 2014 04:37:35 -0400 Subject: [PATCH 01/19] defect 4125:support to have parameters in niccustomscripts attribute --- xCAT/postscripts/confignics | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/xCAT/postscripts/confignics b/xCAT/postscripts/confignics index c299c77a6..e1dc2380f 100755 --- a/xCAT/postscripts/confignics +++ b/xCAT/postscripts/confignics @@ -19,16 +19,19 @@ function splitconfig(){ IFS=$',' array_conf_temp=($1) IFS=$old_ifs - for i in ${array_conf_temp[@]} + + i=0 + while [ $i -lt ${#array_conf_temp[@]} ] do + token="${array_conf_temp[$i]}" D= - if [ `echo $i | grep "!"` ];then + if echo "$token" | grep "!"; then D="!" else D=":" fi - key=`echo $i | cut -d"$D" -f 1` - str_temp_value=`echo $i | cut -d"$D" -f 2` + key=`echo "$token" | cut -d"$D" -f 1` + str_temp_value=`echo "$token" | cut -d"$D" -f 2` str_temp=$(hashget hash_defined_nics $key) if [ -n "$str_temp" ];then @@ -37,7 +40,8 @@ function splitconfig(){ str_temp="$str_temp_value" str_all_nics=$str_all_nics"$key " fi - hashset hash_defined_nics $key $str_temp + hashset hash_defined_nics $key "$str_temp" + i=$((i+1)) done } @@ -198,8 +202,8 @@ if [ -z "$NICIPS" ];then exit 0 fi -splitconfig $NICIPS -splitconfig $NICCUSTOMSCRIPTS +splitconfig "$NICIPS" +splitconfig "$NICCUSTOMSCRIPTS" if [ $boot_myscript -eq 1 ];then . $str_dir_name/$myscript From 5de62313a99750302284ee86795c4237dfe3d7f6 Mon Sep 17 00:00:00 2001 From: qyin Date: Wed, 21 May 2014 14:39:26 +0800 Subject: [PATCH 02/19] fix the nodeset - noupdate initrd issue --- xCAT-server/lib/xcat/plugins/destiny.pm | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/xCAT-server/lib/xcat/plugins/destiny.pm b/xCAT-server/lib/xcat/plugins/destiny.pm index ca1872b37..106adc822 100755 --- a/xCAT-server/lib/xcat/plugins/destiny.pm +++ b/xCAT-server/lib/xcat/plugins/destiny.pm @@ -568,6 +568,7 @@ sub nextdestiny { } my $node; + my $noupdate_flag = 0; $chaintab = xCAT::Table->new('chain'); my $chainents = $chaintab->getNodesAttribs(\@nodes,[qw(currstate currchain chain)]); foreach $node (@nodes) { @@ -599,14 +600,24 @@ sub nextdestiny { { my @items = split /[:]/,$ref->{currstate}; $requ{arg}= \@items; + $noupdate_flag = 1; } setdestiny(\%requ, $flag+1); } if ($callnodeset) { + my $args; + if($noupdate_flag) + { + $args = ['enact']; + } + else + { + $args = ['enact', '--noupdateinitrd']; + } $subreq->({command=>['nodeset'], node=> \@nodes, - arg=>['enact', '--noupdateinitrd']}); + arg=>$args}); } } From a966ac3d73df48034f71bbf03872f5f079187da3 Mon Sep 17 00:00:00 2001 From: qyin Date: Wed, 21 May 2014 14:53:05 +0800 Subject: [PATCH 03/19] fix the nodeset - noupdate initrd issue --- xCAT-server/lib/xcat/plugins/destiny.pm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/xCAT-server/lib/xcat/plugins/destiny.pm b/xCAT-server/lib/xcat/plugins/destiny.pm index 106adc822..d19fdd415 100755 --- a/xCAT-server/lib/xcat/plugins/destiny.pm +++ b/xCAT-server/lib/xcat/plugins/destiny.pm @@ -609,11 +609,11 @@ sub nextdestiny { my $args; if($noupdate_flag) { - $args = ['enact']; + $args = ['enact', '--noupdateinitrd']; } else { - $args = ['enact', '--noupdateinitrd']; + $args = ['enact']; } $subreq->({command=>['nodeset'], node=> \@nodes, From cd78dd4ed03d04ba85c9cd0585670b07816dfd8f Mon Sep 17 00:00:00 2001 From: immarvin Date: Wed, 21 May 2014 01:34:43 -0700 Subject: [PATCH 04/19] fix defect #4128 [fvt]2.8.4:ubuntu 12.04 lsxcat -v could get version info --- perl-xCAT/debian/rules | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/perl-xCAT/debian/rules b/perl-xCAT/debian/rules index d98c40834..e5a0aa6fd 100755 --- a/perl-xCAT/debian/rules +++ b/perl-xCAT/debian/rules @@ -48,7 +48,7 @@ binary-arch: build install chmod 644 `pwd`/debian/perl-xcat/opt/xcat/share/doc/man5/* chmod 644 `pwd`/debian/perl-xcat/opt/xcat/share/man/man7/* chmod 644 `pwd`/debian/perl-xcat/opt/xcat/share/doc/man7/* - ./modifyUtils `cat ../Version` `svn info | grep Revision | cut -d" " -f 2` + ./modifyUtils `cat ../Version` `git log -n 1 | head -n 1 | cut -f 2 -d ' '` # dh_installmenu # dh_installdebconf # dh_installlogrotate From bcda93b1f17b98b2aa55c31c218a67dac35843c8 Mon Sep 17 00:00:00 2001 From: lissav Date: Wed, 21 May 2014 08:44:46 -0400 Subject: [PATCH 05/19] defect 4009 support for DB2 --- xCAT-server/lib/xcat/plugins/imgport.pm | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/xCAT-server/lib/xcat/plugins/imgport.pm b/xCAT-server/lib/xcat/plugins/imgport.pm index cec8609d2..d24708fb1 100644 --- a/xCAT-server/lib/xcat/plugins/imgport.pm +++ b/xCAT-server/lib/xcat/plugins/imgport.pm @@ -17,7 +17,7 @@ use warnings; #use xCAT::Table; #use xCAT::Schema; #use xCAT::NodeRange qw/noderange abbreviate_noderange/; -#use xCAT::Utils; +use xCAT::Utils; use xCAT::TableUtils; use Data::Dumper; use XML::Simple; @@ -316,6 +316,7 @@ sub get_image_info { my $kitlist; my $kitrepolist; my $kitcomplist; + my $DBname = xCAT::Utils->get_DBName; # support for DB2 foreach my $kitcomponent (split ',', $attrs0->{kitcomponents}) { (my $kitcomphash) = $kitcomponenttab->getAttribs({kitcompname => $kitcomponent},'kitname'); if (!$kitcomphash) { @@ -325,15 +326,24 @@ sub get_image_info { if ($kitcomphash->{kitname}) { $kitlist->{$kitcomphash->{kitname}} = 1; - - my @kitrepohash = $kitrepotab->getAllAttribsWhere( "kitname = '$kitcomphash->{kitname}'", 'kitreponame'); + my @kitrepohash; + if ($DBname =~ /^DB2/) { + @kitrepohash = $kitrepotab->getAllAttribsWhere( "\"kitname\" = '$kitcomphash->{kitname}'", 'kitreponame'); + } else { + @kitrepohash = $kitrepotab->getAllAttribsWhere( "kitname = '$kitcomphash->{kitname}'", 'kitreponame'); + } foreach my $kitrepo (@kitrepohash) { if ($kitrepo->{kitreponame}) { $kitrepolist->{$kitrepo->{kitreponame}} = 1; } } - my @kitcomponents = $kitcomponenttab->getAllAttribsWhere( "kitname = '$kitcomphash->{kitname}'", 'kitcompname'); + my @kitcomponents; + if ($DBname =~ /^DB2/) { + @kitcomponents = $kitcomponenttab->getAllAttribsWhere( "\"kitname\" = '$kitcomphash->{kitname}'", 'kitcompname'); + } else { + @kitcomponents = $kitcomponenttab->getAllAttribsWhere( "kitname = '$kitcomphash->{kitname}'", 'kitcompname'); + } foreach my $kitcomp (@kitcomponents) { if ($kitcomp->{kitcompname}) { $kitcomplist->{$kitcomp->{kitcompname}} = 1; From 5eaae003d8afe234184881ecda144a1a0ef348ce Mon Sep 17 00:00:00 2001 From: lissav Date: Wed, 21 May 2014 09:17:28 -0400 Subject: [PATCH 06/19] defect 4009 support for DB2 --- xCAT-server/lib/xcat/plugins/seqdiscovery.pm | 38 ++++++++++++++++---- 1 file changed, 32 insertions(+), 6 deletions(-) diff --git a/xCAT-server/lib/xcat/plugins/seqdiscovery.pm b/xCAT-server/lib/xcat/plugins/seqdiscovery.pm index a345fd357..590071920 100755 --- a/xCAT-server/lib/xcat/plugins/seqdiscovery.pm +++ b/xCAT-server/lib/xcat/plugins/seqdiscovery.pm @@ -25,6 +25,7 @@ use xCAT::NodeRange; use xCAT::Table; use xCAT::NetworkUtils; use xCAT::MsgUtils; +use xCAT::Utils; use xCAT::DiscoveryUtils; use xCAT::NodeRange qw/noderange/; require xCAT::data::ibmhwtypes; @@ -701,7 +702,7 @@ Usage: return; } - + my $DBname = xCAT::Utils->get_DBName; # support for DB2 # Go thought discoverydata table and display the sequential disocvery entries my $distab = xCAT::Table->new('discoverydata'); unless ($distab) { @@ -710,7 +711,12 @@ Usage: xCAT::MsgUtils->message("E", $rsp, $callback); return; } - my @disdata = $distab->getAllAttribsWhere("method='sequential'", 'node', 'mtm', 'serial'); + my @disdata; + if ($DBname =~ /^DB2/) { + @disdata = $distab->getAllAttribsWhere("\"method\" = 'sequential'", 'node', 'mtm', 'serial'); + } else { + @disdata = $distab->getAllAttribsWhere("method='sequential'", 'node', 'mtm', 'serial'); + } my @discoverednodes; foreach (@disdata) { @@ -817,6 +823,7 @@ Usage: } } + my $DBname = xCAT::Utils->get_DBName; # support for DB2 # Go thought discoverydata table and display the disocvery entries my $distab = xCAT::Table->new('discoverydata'); unless ($distab) { @@ -837,10 +844,18 @@ Usage: @disdata = $distab->getAllAttribs(@disattrs); } else { $type = "sequential" if ($type =~ /^seq/); - @disdata = $distab->getAllAttribsWhere("method='$type'", @disattrs); + if ($DBname =~ /^DB2/) { + @disdata = $distab->getAllAttribsWhere("\"method\" = '$type'", @disattrs); + } else { + @disdata = $distab->getAllAttribsWhere("method='$type'", @disattrs); + } } } elsif ($uuid) { - @disdata = $distab->getAllAttribsWhere("uuid='$uuid'", @disattrs); + if ($DBname =~ /^DB2/) { + @disdata = $distab->getAllAttribsWhere("\"uuid\" = '$uuid'", @disattrs); + } else { + @disdata = $distab->getAllAttribsWhere("uuid='$uuid'", @disattrs); + } } my $discoverednum = $#disdata + 1; @@ -1002,6 +1017,7 @@ Usage: return; } + my $DBname = xCAT::Utils->get_DBName; # support for DB2 # open the discoverydata table for the subsequent using my $distab = xCAT::Table->new("discoverydata"); unless ($distab) { @@ -1022,7 +1038,12 @@ Usage: if ($uuid) { # handle the -r -u - my @disdata = $distab->getAllAttribsWhere("uuid='$uuid'", 'method'); + my @disdata; + if ($DBname =~ /^DB2/) { + @disdata = $distab->getAllAttribsWhere("\"uuid\" = '$uuid'", 'method'); + } else { + @disdata = $distab->getAllAttribsWhere("uuid='$uuid'", 'method'); + } unless (@disdata) { xCAT::MsgUtils->message("E", {data=>["Cannot find discovery entry with uuid equals [$uuid]."]}, $callback); return; @@ -1089,7 +1110,12 @@ Usage: # get all the attributes for the entry from the discoverydata table my @disattrs = ('uuid', 'node', 'method', 'discoverytime', 'arch', 'cpucount', 'cputype', 'memory', 'mtm', 'serial', 'nicdriver', 'nicipv4', 'nichwaddr', 'nicpci', 'nicloc', 'niconboard', 'nicfirm', 'switchname', 'switchaddr', 'switchdesc', 'switchport', 'otherdata'); - my @disdata = $distab->getAllAttribsWhere("uuid='$uuid'", @disattrs); + my @disdata ; + if ($DBname =~ /^DB2/) { + @disdata = $distab->getAllAttribsWhere("\"uuid\" = '$uuid'", @disattrs); + } else { + @disdata = $distab->getAllAttribsWhere("uuid='$uuid'", @disattrs); + } unless (@disdata) { xCAT::MsgUtils->message("E", {data=>["Cannot find discovery entry with uuid equals $uuid"]}, $callback); return; From 03a880dbf2bbc9d40a69092fc159a914982d815a Mon Sep 17 00:00:00 2001 From: lissav Date: Wed, 21 May 2014 09:42:39 -0400 Subject: [PATCH 07/19] defect 4009 support for DB2 --- xCAT-server/lib/xcat/plugins/osdistro.pm | 1 + 1 file changed, 1 insertion(+) diff --git a/xCAT-server/lib/xcat/plugins/osdistro.pm b/xCAT-server/lib/xcat/plugins/osdistro.pm index 835c93fe7..beccf7f47 100644 --- a/xCAT-server/lib/xcat/plugins/osdistro.pm +++ b/xCAT-server/lib/xcat/plugins/osdistro.pm @@ -95,6 +95,7 @@ sub getOSdistroref { return undef; } + # verified this does work on DB2 my @clause=(); From c7b7c0abd09b1218f4ceacab902ef55d217e6fba Mon Sep 17 00:00:00 2001 From: lissav Date: Wed, 21 May 2014 09:49:11 -0400 Subject: [PATCH 08/19] defect 4009 support for DB2 --- xCAT-server/lib/xcat/plugins/imgcapture.pm | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/xCAT-server/lib/xcat/plugins/imgcapture.pm b/xCAT-server/lib/xcat/plugins/imgcapture.pm index f0aa71fc9..00aa51d96 100644 --- a/xCAT-server/lib/xcat/plugins/imgcapture.pm +++ b/xCAT-server/lib/xcat/plugins/imgcapture.pm @@ -636,15 +636,20 @@ sub sysclone_createosimgdef{ my ($node, $server, $osimage, $callback, $subreq) = @_; my $createnew = 0; my %osimgdef; - + my $DBname = xCAT::Utils->get_DBName; # support for DB2 my $osimgtab = xCAT::Table->new('osimage'); - my $entry = ($osimgtab->getAllAttribsWhere("imagename = '$osimage'", 'ALL' ))[0]; - if($entry){ + my $entry; + if ($DBname =~ /^DB2/) { + $entry = ($osimgtab->getAllAttribsWhere("\"imagename\" = '$osimage'", 'ALL' ))[0]; + } else { + $entry = ($osimgtab->getAllAttribsWhere("imagename = '$osimage'", 'ALL' ))[0]; + } + if($entry){ my $rsp = {}; $rsp->{data}->[0] = qq{Using the existing osimage "$osimage" defined on $server.}; xCAT::MsgUtils->message("I", $rsp, $callback); return 0; - } + } # try to see if we can get the osimage def from golden client. my $nttab = xCAT::Table->new('nodetype'); From 49a534cf532ac108ae893665cbc9186397a30342 Mon Sep 17 00:00:00 2001 From: lissav Date: Wed, 21 May 2014 10:13:41 -0400 Subject: [PATCH 09/19] defect 4009 support for DB2 fix most calls but left one todo --- xCAT-server/lib/xcat/plugins/kit.pm | 65 +++++++++++++++++++++++------ 1 file changed, 53 insertions(+), 12 deletions(-) diff --git a/xCAT-server/lib/xcat/plugins/kit.pm b/xCAT-server/lib/xcat/plugins/kit.pm index 0a074fa70..aec853777 100644 --- a/xCAT-server/lib/xcat/plugins/kit.pm +++ b/xCAT-server/lib/xcat/plugins/kit.pm @@ -1494,6 +1494,7 @@ sub rmkit my %kitnames; my $des = shift @ARGV; my @kits = split ',', $des; + my $DBname = xCAT::Utils->get_DBName; # support for DB2 foreach my $kit (@kits) { # Check if it is a kitname or basename @@ -1508,7 +1509,12 @@ sub rmkit } $kitnames{$kit} = 1; } else { - my @entries = $tabs{kit}->getAllAttribsWhere( "basename = '$kit'", 'kitname', 'isinternal'); + my @entries; + if ($DBname =~ /^DB2/) { + @entries = $tabs{kit}->getAllAttribsWhere( "\"basename\" = '$kit'", 'kitname', 'isinternal'); + } else { + @entries = $tabs{kit}->getAllAttribsWhere( "basename = '$kit'", 'kitname', 'isinternal'); + } unless (@entries) { my %rsp; push@{ $rsp{data} }, "Kit $kit could not be found in DB $t"; @@ -1545,8 +1551,12 @@ sub rmkit # Find all the components in this kit. my $kitcompnames; - my @kitcomphash = $tabs{kitcomponent}->getAllAttribsWhere( "kitname = '$kitname'", 'kitcompname', 'postbootscripts', 'genimage_postinstall'); - + my @kitcomphash; + if ($DBname =~ /^DB2/) { + @kitcomphash = $tabs{kitcomponent}->getAllAttribsWhere( "\"kitname\" = '$kitname'", 'kitcompname', 'postbootscripts', 'genimage_postinstall'); + } else { + @kitcomphash = $tabs{kitcomponent}->getAllAttribsWhere( "kitname = '$kitname'", 'kitcompname', 'postbootscripts', 'genimage_postinstall'); + } if (@entries && (@entries > 0)) { if($::VERBOSE and !$test){ @@ -1682,7 +1692,12 @@ sub rmkit } # Remove kitrepo - my @kitrepohash = $tabs{kitrepo}->getAllAttribsWhere( "kitname = '$kitname'", 'kitreponame'); + my @kitrepohash; + if ($DBname =~ /^DB2/) { + @kitrepohash = $tabs{kitrepo}->getAllAttribsWhere( "\"kitname\" = '$kitname'", 'kitreponame'); + } else { + @kitrepohash = $tabs{kitrepo}->getAllAttribsWhere( "kitname = '$kitname'", 'kitreponame'); + } foreach my $kitrepo ( @kitrepohash ) { my $kitreponame = $kitrepo->{kitreponame}; $tabs{kitrepo}->delEntries({kitreponame => $kitreponame}); @@ -1878,7 +1893,7 @@ sub addkitcomp return 1; } - + my $DBname = xCAT::Utils->get_DBName; # support for DB2 my %tabs = (); my @tables = qw(kit kitrepo kitcomponent osimage osdistro linuximage); foreach my $t ( @tables ) { @@ -1911,7 +1926,12 @@ sub addkitcomp $kitcomps{$kitcomponent}{name} = $kitcomponent; $kitcomps{$kitcomponent}{basename} = $kitcomptable->{'basename'}; } else { - my @entries = $tabs{kitcomponent}->getAllAttribsWhere( "basename = '$kitcomponent'", 'kitcompname' , 'version', 'release'); + my @entries; + if ($DBname =~ /^DB2/) { + @entries = $tabs{kitcomponent}->getAllAttribsWhere( "\"basename\" = '$kitcomponent'", 'kitcompname' , 'version', 'release'); + } else { + @entries = $tabs{kitcomponent}->getAllAttribsWhere( "basename = '$kitcomponent'", 'kitcompname' , 'version', 'release'); + } unless (@entries) { my %rsp; push@{ $rsp{data} }, "$kitcomponent kitcomponent does not exist"; @@ -2101,7 +2121,12 @@ sub addkitcomp my @kitcompdeps = split ',', $kitcomptable->{'kitcompdeps'}; foreach my $kitcompdependency ( @kitcompdeps ) { my ($kitcompdep, $vers) = split /<=|>=|=|<|>/, $kitcompdependency; - my @entries = $tabs{kitcomponent}->getAllAttribsWhere( "basename = '$kitcompdep'", 'kitreponame', 'kitname', 'kitcompname' , 'serverroles', 'kitcompdeps', 'version', 'prerequisite', 'release'); + my @entries; + if ($DBname =~ /^DB2/) { + @entries = $tabs{kitcomponent}->getAllAttribsWhere( "\"basename\" = '$kitcompdep'", 'kitreponame', 'kitname', 'kitcompname' , 'serverroles', 'kitcompdeps', 'version', 'prerequisite', 'release'); + } else { + @entries = $tabs{kitcomponent}->getAllAttribsWhere( "basename = '$kitcompdep'", 'kitreponame', 'kitname', 'kitcompname' , 'serverroles', 'kitcompdeps', 'version', 'prerequisite', 'release'); + } unless (@entries) { my %rsp; push@{ $rsp{data} }, "Cannot find any matched kit component for kit component $kitcomp dependency $kitcompdep"; @@ -2413,7 +2438,7 @@ sub rmkitcomp return 1; } - + my $DBname = xCAT::Utils->get_DBName; # support for DB2 my %tabs = (); my @tables = qw(kit kitrepo kitcomponent osimage osdistro linuximage); foreach my $t ( @tables ) { @@ -2456,7 +2481,12 @@ sub rmkitcomp $kitcomps{$kitcomponent}{driverpacks} = $kitcomptable->{driverpacks}; $kitcomps{$kitcomponent}{genimage_postinstall} = $kitcomptable->{genimage_postinstall}; } else { - my @entries = $tabs{kitcomponent}->getAllAttribsWhere( "basename = '$kitcomponent'", 'kitcompname' , 'version', 'release'); + my @entries; + if ($DBname =~ /^DB2/) { + @entries = $tabs{kitcomponent}->getAllAttribsWhere( "\"basename\" = '$kitcomponent'", 'kitcompname' , 'version', 'release'); + } else { + @entries = $tabs{kitcomponent}->getAllAttribsWhere( "basename = '$kitcomponent'", 'kitcompname' , 'version', 'release'); + } unless (@entries) { my %rsp; push@{ $rsp{data} }, "$kitcomponent kitcomponent does not exist"; @@ -2530,7 +2560,12 @@ sub rmkitcomp my ($kitcompdep, $vers) = split /<=|>=|=|<|>/, $kitcompdependency; # Get the kit component full name from basename. - my @entries = $tabs{kitcomponent}->getAllAttribsWhere( "basename = '$kitcompdep'", 'kitcompname' , 'version', 'release'); + my @entries; + if ($DBname =~ /^DB2/) { + @entries = $tabs{kitcomponent}->getAllAttribsWhere( "\"basename\" = '$kitcompdep'", 'kitcompname' , 'version', 'release'); + } else { + @entries = $tabs{kitcomponent}->getAllAttribsWhere( "basename = '$kitcompdep'", 'kitcompname' , 'version', 'release'); + } unless (@entries) { my %rsp; push@{ $rsp{data} }, "kitcomponent $kitcompdep basename does not exist"; @@ -3214,7 +3249,7 @@ sub chkkitcomp create_version_response('chkkitcomp'); return 1; # no usage - just exit } - + my $DBname = xCAT::Utils->get_DBName; # support for DB2 my %tabs = (); my @tables = qw(kit kitrepo kitcomponent osimage osdistro linuximage); foreach my $t ( @tables ) { @@ -3248,7 +3283,12 @@ sub chkkitcomp $kitcomps{$kitcomponent}{serverroles} = $kitcomptable->{serverroles}; $kitcompbasename{$kitcomptable->{basename}} = 1; } else { - my @entries = $tabs{kitcomponent}->getAllAttribsWhere( "basename = '$kitcomponent'", 'kitcompname' , 'version', 'release'); + my @entries; + if ($DBname =~ /^DB2/) { + @entries = $tabs{kitcomponent}->getAllAttribsWhere( "\"basename\" = '$kitcomponent'", 'kitcompname' , 'version', 'release'); + } else { + @entries = $tabs{kitcomponent}->getAllAttribsWhere( "basename = '$kitcomponent'", 'kitcompname' , 'version', 'release'); + } unless (@entries) { my %rsp; push@{ $rsp{data} }, "$kitcomponent kitcomponent does not exist"; @@ -4660,6 +4700,7 @@ sub db_get_table_rows { my $table = xCAT::Table->new($tablename); my @table_rows = (); + # todo fix for DB2 support if (defined($filter_stmt)) { if (length($filter_stmt) > 0) { @table_rows = $table->getAllAttribsWhere($filter_stmt, @{$attrs}); From 3f691766a6094d50b30ba1da6da3f7c58df81d23 Mon Sep 17 00:00:00 2001 From: lissav Date: Thu, 22 May 2014 09:42:40 -0400 Subject: [PATCH 10/19] defect 4138 --- xCAT-server/lib/xcat/plugins/updatenode.pm | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/xCAT-server/lib/xcat/plugins/updatenode.pm b/xCAT-server/lib/xcat/plugins/updatenode.pm index 2861206e3..c39693c92 100644 --- a/xCAT-server/lib/xcat/plugins/updatenode.pm +++ b/xCAT-server/lib/xcat/plugins/updatenode.pm @@ -1385,6 +1385,13 @@ sub updatenoderunps foreach my $snkey (keys %servernodes) { + if ((!defined($snkey)) or ($snkey eq "")) { # if we could not find the xcatmaster + + my $rsp = {}; + $rsp->{error}->[0] = "Could not find xcatmaster for @{$servernodes{$snkey}}. Will skip this node. "; + $callback->($rsp); + next; + } my $nodestring = join(',', @{$servernodes{$snkey}}); my $args; my $mode; From eb6d32c24422d46272b46399a5f9e3bbb205653b Mon Sep 17 00:00:00 2001 From: daniceexi Date: Fri, 23 May 2014 03:03:30 -0400 Subject: [PATCH 11/19] defect: 4133: fix the code to transfer escape character for the output of getpostscript.awk --- xCAT/postscripts/xcatdsklspost | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/xCAT/postscripts/xcatdsklspost b/xCAT/postscripts/xcatdsklspost index 38b33b28c..c9ac442bc 100755 --- a/xCAT/postscripts/xcatdsklspost +++ b/xCAT/postscripts/xcatdsklspost @@ -508,7 +508,7 @@ if [ ! -x /$xcatpost/mypostscript ]; then useflowcontrol=0 fi fi - /$xcatpost/getpostscript.awk | egrep '' | sed -e 's/<[^>]*>//g'|egrep -v '^ *$'|sed -e 's/^ *//' | sed -e 's/<//' -e 's/&/&/' -e 's/"/"/' -e "s/'/'/" > /$xcatpost/mypostscript; + /$xcatpost/getpostscript.awk | egrep '' | sed -e 's/<[^>]*>//g'|egrep -v '^ *$'|sed -e 's/^ *//' | sed -e 's/<//g' -e 's/&/\&/g' -e 's/"/"/g' -e "s/'/'/g" > /$xcatpost/mypostscript; MYCONT=`grep MASTER /$xcatpost/mypostscript` @@ -539,7 +539,7 @@ if [ ! -x /$xcatpost/mypostscript ]; then useflowcontrol=0 fi fi - /$xcatpost/getpostscript.awk | sed -e 's/<[^>]*>//g'|egrep -v '^ *$'|sed -e 's/^ *//' | sed -e 's/<//' -e 's/&/&/' -e 's/"/"/' -e "s/'/'/" > /$xcatpost/mypostscript; + /$xcatpost/getpostscript.awk | sed -e 's/<[^>]*>//g'|egrep -v '^ *$'|sed -e 's/^ *//' | sed -e 's/<//g' -e 's/&/\&/g' -e 's/"/"/g' -e "s/'/'/g" > /$xcatpost/mypostscript; MYCONT=`grep MASTER /$xcatpost/mypostscript` if [ ! -z "$MYCONT" ]; then break; From e41e21b9b5a6e5765a6bf49ef3b3119a514b288d Mon Sep 17 00:00:00 2001 From: immarvin Date: Fri, 23 May 2014 02:56:39 -0700 Subject: [PATCH 12/19] correct the getNodeNetworkCfg to get the network gateway --- perl-xCAT/xCAT/NetworkUtils.pm | 96 +++++++++++++++++----------------- 1 file changed, 49 insertions(+), 47 deletions(-) diff --git a/perl-xCAT/xCAT/NetworkUtils.pm b/perl-xCAT/xCAT/NetworkUtils.pm index c3555833d..7eea170e6 100755 --- a/perl-xCAT/xCAT/NetworkUtils.pm +++ b/perl-xCAT/xCAT/NetworkUtils.pm @@ -1901,50 +1901,6 @@ sub isIpaddr } -#------------------------------------------------------------------------------- -=head3 getSubnetGateway - Description: - Get gateway from the networks table of the specified net. - - Arguments: - net: the net, ie. the "net" field of the networks table - Returns: - Return a string, of the gateway - undef - Failed to get the gateway - Globals: - none - Error: - none - Example: - my $gateway = xCAT::NetworkUtils::getSubnetGateway('192.168.1.0'); - Comments: - none - -=cut -#------------------------------------------------------------------------------- -sub getSubnetGateway -{ - my $netname=shift; - if( $netname =~ /xCAT::NetworkUtils/) - { - $netname=shift; - } - - my $gateway=undef; - my $nettab = xCAT::Table->new("networks"); - unless($nettab) { die "No entry defined in networks"; } - my @nets = $nettab->getAllAttribs('net','gateway'); - foreach(@nets) - { - if("$_->{net}" eq "$netname") - { - $gateway = $_->{gateway}; - last; - } - } - - return $gateway; -} #------------------------------------------------------------------------------- @@ -2002,6 +1958,50 @@ sub getNodeNameservers{ return \%nodenameservers; } +#------------------------------------------------------------------------------- +=head3 getNodeGateway + Description: + Get gateway from the networks table of the node. + + Arguments: + ip: the ip address of the node + Returns: + Return a string, of the gateway + undef - Failed to get the gateway + Globals: + none + Error: + none + Example: + my $gateway = xCAT::NetworkUtils::getNodeGateway('192.168.1.0'); + Comments: + none + +=cut +#------------------------------------------------------------------------------- +sub getNodeGateway +{ + my $ip=shift; + if( $ip =~ /xCAT::NetworkUtils/) + { + $ip=shift; + } + my $gateway=undef; + + my $nettab = xCAT::Table->new("networks"); + if ($nettab) { + my @nets = $nettab->getAllAttribs('net','mask','gateway'); + foreach my $net (@nets) { + if (xCAT::NetworkUtils::isInSameSubnet( $net->{'net'}, $ip, $net->{'mask'}, 0)) { + $gateway=$net->{'gateway'}; + } + } + } + + + return $gateway; +} + #------------------------------------------------------------------------------- =head3 getNodeNetworkCfg @@ -2031,8 +2031,8 @@ sub getNodeNetworkCfg if( $node =~ /xCAT::NetworkUtils/) { $node =shift; - } - + } + my $nets = xCAT::NetworkUtils::my_nets(); my $ip = xCAT::NetworkUtils->getipaddr($node); my $mask = undef; @@ -2041,12 +2041,14 @@ sub getNodeNetworkCfg { my $netname; ($netname,$mask) = split /\//, $net; - $gateway=xCAT::NetworkUtils::getSubnetGateway($netname); last if ( xCAT::NetworkUtils::isInSameSubnet( $netname, $ip, $mask, 1)); } + $gateway=xCAT::NetworkUtils::getNodeGateway($ip); return ($ip, $node, $gateway, xCAT::NetworkUtils::formatNetmask($mask,1,0)); } + + #------------------------------------------------------------------------------- =head3 get_hdwr_ip From 29457d1177221cc68390904ca86823968678411b Mon Sep 17 00:00:00 2001 From: Bruce Potter Date: Sat, 24 May 2014 05:46:14 -0400 Subject: [PATCH 13/19] softlayer install and sysclone working for strangely ordered nics and cross vlan --- xCAT-SoftLayer/bin/khrem | 87 +++++++++++++++++++ xCAT-SoftLayer/bin/modifygrub | 64 +++++++++++--- xCAT-SoftLayer/bin/pushinitrd | 22 +++-- xCAT-SoftLayer/postscripts/configbond | 13 +-- .../sles/compute.sles11.softlayer.tmpl | 7 ++ .../si-post-install/16all.updatenetwork | 38 ++++++++ .../si-post-install/20all.mkinitrd_for_suse11 | 11 +++ xCAT-genesis-scripts/bin/doxcat | 13 ++- 8 files changed, 224 insertions(+), 31 deletions(-) create mode 100755 xCAT-SoftLayer/bin/khrem create mode 100755 xCAT-SoftLayer/si-post-install/20all.mkinitrd_for_suse11 diff --git a/xCAT-SoftLayer/bin/khrem b/xCAT-SoftLayer/bin/khrem new file mode 100755 index 000000000..7f5f25d1b --- /dev/null +++ b/xCAT-SoftLayer/bin/khrem @@ -0,0 +1,87 @@ +#!/usr/bin/perl + +# remove entries from the .ssh/known_hosts file for a node + +use strict; +use Getopt::Long; +use Data::Dumper; +#$Data::Dumper::Maxdepth=2; + +# Globals - these are set once and then only read. +my $HELP; +my $VERBOSE; +my $file = '~/.ssh/known_hosts'; + +my $usage = sub { + my $exitcode = shift @_; + print "Usage: khrem \n"; + exit $exitcode; +}; + +# Process the cmd line args +Getopt::Long::Configure("bundling"); +#Getopt::Long::Configure("pass_through"); +Getopt::Long::Configure("no_pass_through"); +if (!GetOptions('h|?|help' => \$HELP, 'v|verbose' => \$VERBOSE)) { $usage->(1); } + +if ($HELP) { $usage->(0); } +if (scalar(@ARGV)!=1) { $usage->(1); } +my $node = $ARGV[0]; # if they specified a hostname match, only show svrs that start with that + +my @output = runcmd("host $node"); +my $hostname; +my $line = shift @output; +#print "line=$line\n"; +if ($line =~ m/is an alias for /) { + ($hostname) = $line =~ m/is an alias for ([^\.]+)/; + #print "hostname=$hostname\n"; + $line = shift @output; + } +#print "line=$line\n"; +my ($ip) = $line =~ m/has address (.+)$/; +if (defined($hostname)) { + print "Removing entries from $file for: $node, $hostname, $ip\n"; + runcmd("sed -i '/^$node/d;/^$hostname/d;/^$ip/d' $file"); + } +else { + print "Removing entries from $file for: $node, $ip\n"; + runcmd("sed -i '/^$node/d;/^$ip/d' $file"); +} + +exit(0); + + +# Pring msg only if -v was specified +sub verbose { if ($VERBOSE) { print shift, "\n"; } } + + + + +# Run a command. If called in the context of return an array, it will capture the output +# of the cmd and return it. Otherwise, it will display the output to stdout. +# If the cmd has a non-zero rc, this function will die with a msg. +sub runcmd +{ + my ($cmd) = @_; + my $rc; + + $cmd .= ' 2>&1' ; + verbose($cmd); + + my @output; + if (wantarray) { + @output = `$cmd`; + $rc = $?; + } + else { + system($cmd); + $rc = $?; + } + + if ($rc) { + $rc = $rc >> 8; + if ($rc > 0) { die "Error: rc $rc return from cmd: $cmd\n"; } + else { die "Error: system error returned from cmd: $cmd\n"; } + } + elsif (wantarray) { return @output; } +} diff --git a/xCAT-SoftLayer/bin/modifygrub b/xCAT-SoftLayer/bin/modifygrub index d0ee65475..906699a6b 100755 --- a/xCAT-SoftLayer/bin/modifygrub +++ b/xCAT-SoftLayer/bin/modifygrub @@ -12,13 +12,14 @@ use Socket; # Globals - these are set once and then only read. my $HELP; my $VERBOSE; +my $DRYRUN; my $WAITTIME; my $PROVMETHOD; my $XCATNETBOOTTITLE = 'xCAT network boot kernel and initrd'; my $usage = sub { my $exitcode = shift @_; - print "Usage: modifygrub [-?|-h|--help] [-v|--verbose] [-w ] [-p \n\n"; + print "Usage: modifygrub [-?|-h|--help] [-v|--verbose] [--dryrun] [-w ] [-p \n\n"; if (!$exitcode) { print "Modify the grub config file on the node to boot the specified kernel and initrd.\n"; } @@ -31,7 +32,7 @@ if (-f '/etc/os-release') { die "This script doesn't support ubuntu yet.\n"; } Getopt::Long::Configure("bundling"); #Getopt::Long::Configure("pass_through"); Getopt::Long::Configure("no_pass_through"); -if (!GetOptions('h|?|help' => \$HELP, 'v|verbose' => \$VERBOSE, 'w|waittime=s' => \$WAITTIME, 'p|provmethod=s' => \$PROVMETHOD)) { $usage->(1); } +if (!GetOptions('h|?|help' => \$HELP, 'v|verbose' => \$VERBOSE, 'dryrun' => \$DRYRUN, 'w|waittime=s' => \$WAITTIME, 'p|provmethod=s' => \$PROVMETHOD)) { $usage->(1); } if ($HELP) { $usage->(0); } if (scalar(@ARGV) != 4) { $usage->(1); } @@ -71,13 +72,15 @@ sub addKernelParms { $bootif = "BOOTIF=01-$bootif"; } + #todo: if you are running genesis shell (nodeset shell), this if-else will depend on the nodeset done before that. + # really should check for currstate=shell, or something like that if (defined($PROVMETHOD) && $PROVMETHOD eq 'sysclone') { # add additional parms for sysclone # DEVICE=eth0 IPADDR=10.0.0.99 NETMASK=255.255.255.0 NETWORK=10.0.0.0 BROADCAST=10.0.0.255 GATEWAY=10.0.0.1 GATEWAYDEV=eth0 #todo: should we also add ETHER_SLEEP=$WAITTIME textmode=1 dns=$mnip ? $args->{kernelparms} .= " $bootif IPADDR=$ip NETMASK=$netmask NETWORK=$network BROADCAST=$broadcast GATEWAY=$gateway HOSTNAME=$nodename DEVICE=$nic GATEWAYDEV=$nic"; } - else { # scripted install or genesis shell + else { # scripted install $args->{kernelparms} .= " $bootif hostip=$ip netmask=$netmask gateway=$gateway dns=$mnip hostname=$nodename netdevice=$nic netwait=$WAITTIME textmode=1"; } } @@ -89,7 +92,8 @@ sub getNodeIpInfo { my ($ipprefix) = $args->{mnip}=~m/^(\d+)\./; #todo: this is a hack, just using the 1st octet of the mn ip addr verbose("using IP prefix $ipprefix"); - # parse ip addr show output, looking for ipprefix, to determine nic and ip + # parse ip addr show output, looking for ipprefix, to determine nic, ip, mac + #todo: is there a way to find the actual/individual mac of the nic? When 2 nics are bonded, they both display the same mac. my @output = runcmd("ip addr show"); my ($nic, $mac, $ipandmask); foreach my $line (@output) { @@ -98,22 +102,49 @@ sub getNodeIpInfo { if (($mactmp) = $line=~m|^\s+link/ether\s+(\S+) |) { $mac = $mactmp; } # got mac, remember it if (($iptmp) = $line=~m/^\s+inet\s+($ipprefix\S+) /) { $ipandmask = $iptmp; last; } # got ip, we are done } + if (!defined($ipandmask)) { die "Error: can't find a NIC with a prefix $ipprefix that communicates with".$args->{mnip}.".\n"; } my ($ip, $netmask, $network, $broadcast) = convertIpAndMask($ipandmask); - # if the nic is a bonded nic (common on sl), then find the 1st real nic that is part of it - my $realnic = $nic; + # if the nic is a bonded nic (common on sl), then find the 1st real nic that is up that is part of it. + # also find that real nics real mac + my $realnic; if ($nic =~ /^bond/) { my @nics = grep(m/\s+master\s+$nic\s+/, @output); if (!scalar(@nics)) { die "Error: can't find the NICs that are part of $nic.\n"; } - ($realnic) = $nics[0]=~m/^\d+:\s+(\S+): /; - # do not need to go back thru the ip addr show output and find the mac of this nic because the mac - # of the bond nic is the same. Plus the code below does not work right for some reason anyway. - #foreach my $line (@output) { - # my ($nictmp, $mactmp, $foundnic); - # if (($nictmp) = $line=~m/^\d+:\s+(\S+): / && $nictmp eq $realnic) { $foundnic = 1; } - # if (($mactmp) = $line=~m|^\s+link/ether\s+(\S+) | && $foundnic) { $mac = $mactmp; last; } # got mac, we are done - #} + foreach my $line (@nics) { + my ($nictmp, $state) = $line=~m/^\d+:\s+(\S+): .* state\s+(\S+)/; + if (defined($nictmp) && defined($state) && $state eq 'UP') { $realnic = $nictmp; last; } # got ip, we are done + } + if (!defined($realnic)) { die "Error: can't find a physical NIC that is up and part of $nic.\n"; } + + # now get the real mac of this real nic (when 2 nics are bonded, ip addr show displays one of the nics + # macs for both nics and the bond). So we have to depend on /proc/net/bonding/$bond instead. + my @bondout = runcmd("cat /proc/net/bonding/$nic"); + my $foundnic; + foreach my $line (@bondout) { + my $mactmp; + if ($line=~m/^Slave Interface:\s+$realnic/) { $foundnic = 1; } # found the stanza for this nic, remember it + if ($foundnic && (($mactmp) = $line=~m/^Permanent HW addr:\s+(\S+)/)) { $mac = $mactmp; last; } + } } + else { $realnic = $nic; } + + # centos/redhat seems to name the nic in a different order than sles on some svrs. + # sles seems to name them in the same order as 'ip addr show' displays them, centos does not. + # so if we are on centos right now, we need to count down to determine the number that sles + # will give the nic that we have selected, because it is the sles naming that we care about, + # because that is the initrd that will be running in the scripted install case. + # For the sysclone case, genesis doxcat should be changed to use the mac to find the nic. + if (isRedhat()) { + my @nics = grep(m/^\d+:\s+eth/, @output); + my $i = 0; + foreach my $line (@nics) { + my ($nictmp) = $line=~m/^\d+:\s+(\S+):/; + if (defined($nictmp) && $nictmp eq $realnic) { $realnic = "eth$i"; last; } # got ip, we are done + $i++; + } + } + print "Determined that SLES will call the install NIC $realnic (it has mac $mac)\n"; # finally, find the gateway my $gateway; @@ -198,6 +229,11 @@ sub updateGrub { "\tkernel " . $fileprefix . $args->{kernelpath} . ' ' . $args->{kernelparms} . "\n", "\tinitrd " . $fileprefix . $args->{initrdpath} . "\n", ); + if ($DRYRUN) { + print "Dry run: would add this stanza to $grubfile:\n"; + foreach my $l (@entry) { print $l; } + return; + } my $needtowritefile = 1; if (grep(/^title\s+$XCATNETBOOTTITLE/, @lines)) { $needtowritefile = updateGrubEntry(\@lines, \@entry); } # there is already an entry in there diff --git a/xCAT-SoftLayer/bin/pushinitrd b/xCAT-SoftLayer/bin/pushinitrd index 2485d186c..62c19d8ba 100755 --- a/xCAT-SoftLayer/bin/pushinitrd +++ b/xCAT-SoftLayer/bin/pushinitrd @@ -13,12 +13,13 @@ use Data::Dumper; # Globals - these are set once and then only read. my $HELP; my $VERBOSE; +my $DRYRUN; my $WAITTIME; my $NOAUTOINST; my $usage = sub { my $exitcode = shift @_; - print "Usage: pushinitrd [-?|-h|--help] [-v|--verbose] [-w ] \n\n"; + print "Usage: pushinitrd [-?|-h|--help] [-v|--verbose] [--dryrun] [-w ] \n\n"; if (!$exitcode) { print "Copy the initrd, kernel, params, and static IP info to nodes, so they can net install\n"; print "even across vlans (w/o setting up pxe/dhcp broadcast relay). This assumes a working\n"; @@ -32,7 +33,7 @@ my $usage = sub { Getopt::Long::Configure("bundling"); #Getopt::Long::Configure("pass_through"); Getopt::Long::Configure("no_pass_through"); -if (!GetOptions('h|?|help' => \$HELP, 'v|verbose' => \$VERBOSE, 'w|waittime=s' => \$WAITTIME, 'a|noautoinst' => \$NOAUTOINST)) { $usage->(1); } +if (!GetOptions('h|?|help' => \$HELP, 'v|verbose' => \$VERBOSE, 'dryrun' => \$DRYRUN, 'w|waittime=s' => \$WAITTIME, 'a|noautoinst' => \$NOAUTOINST)) { $usage->(1); } if ($HELP) { $usage->(0); } if (scalar(@ARGV) != 1) { $usage->(1); } @@ -45,6 +46,8 @@ copyFilesToNodes($noderange, \%bootparms); updateGrubOnNodes($noderange, \%bootparms); +if ($DRYRUN) { exit(0); } + if ($bootparms{osimageprovmethod} eq 'install' && !$NOAUTOINST) { modifyAutoinstFiles($noderange, \%bootparms); } if ($bootparms{osimageprovmethod} eq 'sysclone') { copySyscloneFiles(); } @@ -66,6 +69,8 @@ sub getBootParms { # for now just pick the 1st one. They should all be the same, except for the node name in kcmdline chomp($gresults[0]); $gresults[0] =~ s/^\S+:\s+$attr:\s*//; + #print "gresults='$gresults[0]'\n"; + if ($gresults[0] !~ m/\S/) { die "Error: attribute $attr not defined for the noderange. Did you run 'nodeset osimage=' ?\n"; } $bootparms{$a} = $gresults[0]; } $bootparms{kcmdline} =~ s|/install/autoinst/\S+|/install/autoinst/|; @@ -73,6 +78,7 @@ sub getBootParms { # from the nodes provmethod, get the osimage provmethod, so we know the type of install @output = runcmd("lsdef -t osimage $bootparms{provmethod} -ci provmethod"); chomp($output[0]); + if ($output[0] =~ m/^Could not find/) { die "Error: provmethod $bootparms{provmethod} is set for the node, but there is no osimage definition by that name."; } my ($junk, $provmethod) = split(/=/, $output[0]); $bootparms{osimageprovmethod} = $provmethod; @@ -97,8 +103,13 @@ sub copyFilesToNodes { my $localfile = "/tftpboot/$file"; # for the my $remotefile = '/boot/' . remoteFilename($file); - print "Copying $localfile to $nr:$remotefile\n"; - runcmd("xdcp $nr -p $localfile $remotefile"); + if ($DRYRUN) { + print "Dry run: would copy $localfile to $nr:$remotefile\n"; + } + else { + print "Copying $localfile to $nr:$remotefile\n"; + runcmd("xdcp $nr -p $localfile $remotefile"); + } } } @@ -117,10 +128,11 @@ sub updateGrubOnNodes { my $nr = shift @_; my $bootparms = shift @_; my $vtxt = ($VERBOSE ? '-v' : ''); + my $dtxt = ($DRYRUN ? '--dryrun' : ''); my @output = runcmd('which modifygrub'); my $modifygrub = $output[0]; chomp($modifygrub); - my $cmd = "xdsh $nr -e $modifygrub $vtxt -w $WAITTIME -p " . $bootparms->{osimageprovmethod} . ' ' . remoteFilename($bootparms->{kernel}) . ' ' . remoteFilename($bootparms->{initrd}) . ' '; + my $cmd = "xdsh $nr -e $modifygrub $vtxt $dtxt -w $WAITTIME -p " . $bootparms->{osimageprovmethod} . ' ' . remoteFilename($bootparms->{kernel}) . ' ' . remoteFilename($bootparms->{initrd}) . ' '; # we need to quote the kernel parms, both here when passing it to xdsh, and on the node # when xdsh is passing it to modifygrub. The way to get single quotes inside single quotes # is to quote each of the outer single quotes with double quotes. diff --git a/xCAT-SoftLayer/postscripts/configbond b/xCAT-SoftLayer/postscripts/configbond index 0cd4e033d..93162dc7a 100755 --- a/xCAT-SoftLayer/postscripts/configbond +++ b/xCAT-SoftLayer/postscripts/configbond @@ -4,26 +4,29 @@ # Usage: configbond bond1 eth1 [eth3] # # Note: this postscript currently has some assumptions that are specific to the softlayer environment. -# It is only used to configure bond1, because bond0 gets configured by the node provisioning process. +# We only use this to configure bond1, because bond0 gets configured by the node provisioning process. +# (altho this script would work for bond0) use strict; # Check number of args my $nargs = $#ARGV + 1; if (scalar(@ARGV) < 2 || scalar(@ARGV) > 3) { - system("logger -t xcat -p local4.err 'Usage: configbond bond dev0 [dev1]'"); + system("logger -t xcat -p local4.err 'Usage: configbond []'"); exit 1; } my $bond = shift(@ARGV); my $nic = $ARGV[0]; -my @devs = (); -push(@devs,$ARGV[0]); -if (defined($ARGV[1])) { push(@devs,$ARGV[1]); } +my @devs; +push(@devs,@ARGV); my $nicips = $ENV{NICIPS}; my $nicnetworks = $ENV{NICNETWORKS}; my $net_cnt = $ENV{NETWORKS_LINES}; +#todo: change this script so they dont need to specify nicnetworks +if (!$nicips || !$nicnetworks) { system("logger -t xcat -p local4.err 'configbond: must specify attributes nicips and nicnetworks in the xcat db for this node.'"); exit 1; } + #todo: these are specific to softlayer. They should be another attribute or argument my $bondingopts = 'mode=4 miimon=100 downdelay=0 updelay=0 lacp_rate=fast xmit_hash_policy=1'; diff --git a/xCAT-SoftLayer/share/xcat/install/sles/compute.sles11.softlayer.tmpl b/xCAT-SoftLayer/share/xcat/install/sles/compute.sles11.softlayer.tmpl index e0ac43fdd..c95392007 100644 --- a/xCAT-SoftLayer/share/xcat/install/sles/compute.sles11.softlayer.tmpl +++ b/xCAT-SoftLayer/share/xcat/install/sles/compute.sles11.softlayer.tmpl @@ -82,6 +82,7 @@ yes mode=4 miimon=100 downdelay=0 updelay=0 lacp_rate=fast xmit_hash_policy=1 eth0 + eth2 bond0 static auto @@ -95,6 +96,12 @@ Ethernet Card 0 off + + none + eth2 + Ethernet Card 2 + off + false diff --git a/xCAT-SoftLayer/si-post-install/16all.updatenetwork b/xCAT-SoftLayer/si-post-install/16all.updatenetwork index db6830859..e199dc4c5 100755 --- a/xCAT-SoftLayer/si-post-install/16all.updatenetwork +++ b/xCAT-SoftLayer/si-post-install/16all.updatenetwork @@ -39,6 +39,9 @@ fi hostname $HOSTNAME bond=bond0 +if [[ $DEVICE == "eth0" ]]; then + $DEVICE2=eth2 +fi device_names=`ifconfig -a | grep -i hwaddr | grep -i 'Ethernet' | grep -v usb| awk '{print $1}'` str_cfg_file='' @@ -83,9 +86,23 @@ if [ -d "/etc/sysconfig/network-scripts/" ];then echo "SLAVE=yes" >> $str_cfg_file echo "USERCTL=no" >> $str_cfg_file + if [[ $DEVICE2 != "" ]]; then + # write ifcfg-eth0 + i="$DEVICE2" + str_cfg_file="$dir/ifcfg-$i" + echo "DEVICE=$i" > $str_cfg_file + echo "BOOTPROTO=none" >> $str_cfg_file + echo "MASTER=$bond" >> $str_cfg_file + echo "ONBOOT=yes" >> $str_cfg_file + echo "SLAVE=yes" >> $str_cfg_file + echo "USERCTL=no" >> $str_cfg_file + fi + # write modprobe alias config str_cfg_file="/etc/modprobe.d/$bond.conf" echo "alias $bond bonding" > $str_cfg_file + + #todo: figure out how to set the default gateway in rhel else # use dhcp for all nics for i in $device_names;do @@ -122,6 +139,9 @@ elif [ -d "/etc/sysconfig/network/" ];then echo "BROADCAST=$BROADCAST" >> $str_cfg_file echo "USERCONTROL=no" >> $str_cfg_file echo "BONDING_SLAVE_0=$DEVICE" >> $str_cfg_file + if [[ $DEVICE2 != "" ]]; then + echo "BONDING_SLAVE_1=$DEVICE2" >> $str_cfg_file + fi # write ifcfg-eth0 i="$DEVICE" @@ -129,10 +149,28 @@ elif [ -d "/etc/sysconfig/network/" ];then echo "BOOTPROTO=none" > $str_cfg_file echo "STARTMODE=hotplug" >> $str_cfg_file + if [[ $DEVICE2 != "" ]]; then + # write ifcfg-eth2 + i="$DEVICE2" + str_cfg_file="$dir/ifcfg-$i" + echo "BOOTPROTO=none" > $str_cfg_file + echo "STARTMODE=hotplug" >> $str_cfg_file + fi + # write modprobe alias config str_cfg_file="/etc/modprobe.d/$bond.conf" echo "alias $bond bonding" > $str_cfg_file + # set the default gateway (at this point this is the private nic gateway, to handle provision across vlans) + file=/etc/sysconfig/network/routes + if grep -q -E '^default ' $file; then + # replace the default route that is already in there + sed -i 's/^default .*$/default '$GATEWAY' - -/' $file + else + # no default route yet, append to file + echo "default $GATEWAY - -" >>$file + fi + # this was the original config of the eth0 nic (without bonding) #echo "DEVICE=$i" > $str_cfg_file #echo "BOOTPROTO=static" >> $str_cfg_file diff --git a/xCAT-SoftLayer/si-post-install/20all.mkinitrd_for_suse11 b/xCAT-SoftLayer/si-post-install/20all.mkinitrd_for_suse11 new file mode 100755 index 000000000..c18e454f8 --- /dev/null +++ b/xCAT-SoftLayer/si-post-install/20all.mkinitrd_for_suse11 @@ -0,0 +1,11 @@ +#!/bin/bash + +# This SI post-install script is needed because the initrd that autoyast builds when installing +# sles on the golden node may not have the drivers when that initrd runs on the node that is +# being deployed with this image (specifically, drivers to be able to mount the disk). +# So rebuild the initrd on the to-node after putting the image on the disk, but before rebooting. + +#todo: this same issue could occur on other distros too. Make this script work on red hat by +# checking for dracut and using that if it exists. + +mkinitrd diff --git a/xCAT-genesis-scripts/bin/doxcat b/xCAT-genesis-scripts/bin/doxcat index 7e8a0a2f7..7e84e097c 100755 --- a/xCAT-genesis-scripts/bin/doxcat +++ b/xCAT-genesis-scripts/bin/doxcat @@ -126,18 +126,17 @@ for parm in `cat /proc/cmdline`; do netmask=$value elif [[ ${key,,} == "gateway" ]]; then gateway=$value - elif [[ ${key,,} == "netdevice" || ${key,,} == "device" ]]; then - netdevice=$value fi done -if [[ -n $hostip && -n $netmask && -n $gateway && -n $netdevice ]]; then +if [[ -n $hostip && -n $netmask && -n $gateway && -n $bootnic ]]; then # doing static ip + # the device was determined above from the bootif mac, and put in bootnic numbits=$(mask2prefix $netmask) broadcast=$(bcastcalc $hostip $netmask) - echo "Setting static IP=$hostip/$numbits broadcast=$broadcast gateway=$gateway netdevice=$netdevice ..." - ip addr add $hostip/$numbits broadcast $broadcast dev $netdevice scope global label $netdevice - ip link set $netdevice up - ip route replace to default via $gateway dev $netdevice + echo "Setting static IP=$hostip/$numbits broadcast=$broadcast gateway=$gateway device=$bootnic BOOTIF=$BOOTIF ..." + ip addr add $hostip/$numbits broadcast $broadcast dev $bootnic scope global label $bootnic + ip link set $bootnic up + ip route replace to default via $gateway dev $bootnic # in softlayer it takes up to 60 seconds for the nic to actually be able to communicate echo -n Waiting to reach xCAT mgmt node $gateway. xcatretries=60 From 61ce49e6278f444c710b624cfe5adf2dfaeeef3f Mon Sep 17 00:00:00 2001 From: daniceexi Date: Mon, 26 May 2014 01:18:28 -0400 Subject: [PATCH 14/19] defect 4133: continue the fix for the xml escape char conversion when getting mypostscript --- xCAT-server/share/xcat/install/scripts/post.debian | 4 ++-- xCAT-server/share/xcat/install/scripts/post.ubuntu | 4 ++-- xCAT-server/share/xcat/install/scripts/post.xcat | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/xCAT-server/share/xcat/install/scripts/post.debian b/xCAT-server/share/xcat/install/scripts/post.debian index 9e9038d31..5d54bc7d6 100644 --- a/xCAT-server/share/xcat/install/scripts/post.debian +++ b/xCAT-server/share/xcat/install/scripts/post.debian @@ -59,7 +59,7 @@ do mv $i/postscripts /xcatpost rm -rf $i chmod +x /xcatpost/* - /xcatpost/getpostscript.awk |sed -e 's/<[^>]*>//g'|egrep -v '^ *$'|sed -e 's/^ *//' | sed -e 's/<//' -e 's/&/&/' -e 's/"/"/' -e "s/'/'/" > /xcatpost/mypostscript + /xcatpost/getpostscript.awk |sed -e 's/<[^>]*>//g'|egrep -v '^ *$'|sed -e 's/^ *//' | sed -e 's/<//g' -e 's/&/\&/g' -e 's/"/"/g' -e "s/'/'/g" > /xcatpost/mypostscript MYCONT=`grep MASTER /xcatpost/mypostscript` MAX_RETRIES=10 RETRY=0 @@ -72,7 +72,7 @@ do let SLI=$RANDOM%10+10 sleep $SLI - /xcatpost/getpostscript.awk |sed -e 's/<[^>]*>//g'|egrep -v '^ *$'|sed -e 's/^ *//' | sed -e 's/<//' -e 's/&/&/' -e 's/"/"/' -e "s/'/'/" > /xcatpost/mypostscript + /xcatpost/getpostscript.awk |sed -e 's/<[^>]*>//g'|egrep -v '^ *$'|sed -e 's/^ *//' | sed -e 's/<//g' -e 's/&/\&/g' -e 's/"/"/g' -e "s/'/'/g" > /xcatpost/mypostscript MYCONT=`grep MASTER /xcatpost/mypostscript` done diff --git a/xCAT-server/share/xcat/install/scripts/post.ubuntu b/xCAT-server/share/xcat/install/scripts/post.ubuntu index 34f1f4a5f..618ae1aad 100644 --- a/xCAT-server/share/xcat/install/scripts/post.ubuntu +++ b/xCAT-server/share/xcat/install/scripts/post.ubuntu @@ -61,7 +61,7 @@ do mv $i/postscripts /xcatpost rm -rf $i chmod +x /xcatpost/* - /xcatpost/getpostscript.awk |sed -e 's/<[^>]*>//g'|egrep -v '^ *$'|sed -e 's/^ *//' | sed -e 's/<//' -e 's/&/&/' -e 's/"/"/' -e "s/'/'/" > /xcatpost/mypostscript + /xcatpost/getpostscript.awk |sed -e 's/<[^>]*>//g'|egrep -v '^ *$'|sed -e 's/^ *//' | sed -e 's/<//g' -e 's/&/\&/g' -e 's/"/"/g' -e "s/'/'/g" > /xcatpost/mypostscript MYCONT=`grep MASTER /xcatpost/mypostscript` MAX_RETRIES=10 RETRY=0 @@ -74,7 +74,7 @@ do let SLI=$RANDOM%10+10 sleep $SLI - /xcatpost/getpostscript.awk |sed -e 's/<[^>]*>//g'|egrep -v '^ *$'|sed -e 's/^ *//' | sed -e 's/<//' -e 's/&/&/' -e 's/"/"/' -e "s/'/'/" > /xcatpost/mypostscript + /xcatpost/getpostscript.awk |sed -e 's/<[^>]*>//g'|egrep -v '^ *$'|sed -e 's/^ *//' | sed -e 's/<//g' -e 's/&/\&/g' -e 's/"/"/g' -e "s/'/'/g" > /xcatpost/mypostscript MYCONT=`grep MASTER /xcatpost/mypostscript` done diff --git a/xCAT-server/share/xcat/install/scripts/post.xcat b/xCAT-server/share/xcat/install/scripts/post.xcat index 054d74daa..10d406998 100755 --- a/xCAT-server/share/xcat/install/scripts/post.xcat +++ b/xCAT-server/share/xcat/install/scripts/post.xcat @@ -44,7 +44,7 @@ do if [ ! -x /xcatpost/mypostscript ]; then chmod +x /xcatpost/* - /xcatpost/getpostscript.awk |sed -e 's/<[^>]*>//g'|egrep -v '^ *$'|sed -e 's/^ *//' | sed -e 's/<//' -e 's/&/&/' -e 's/"/"/' -e "s/'/'/" > /xcatpost/mypostscript + /xcatpost/getpostscript.awk |sed -e 's/<[^>]*>//g'|egrep -v '^ *$'|sed -e 's/^ *//' | sed -e 's/<//g' -e 's/&/\&/g' -e 's/"/"/g' -e "s/'/'/g" > /xcatpost/mypostscript MYCONT=`grep MASTER /xcatpost/mypostscript` @@ -59,7 +59,7 @@ do let SLI=$RANDOM%10+10 sleep $SLI - /xcatpost/getpostscript.awk |sed -e 's/<[^>]*>//g'|egrep -v '^ *$'|sed -e 's/^ *//' | sed -e 's/<//' -e 's/&/&/' -e 's/"/"/' -e "s/'/'/" > /xcatpost/mypostscript + /xcatpost/getpostscript.awk |sed -e 's/<[^>]*>//g'|egrep -v '^ *$'|sed -e 's/^ *//' | sed -e 's/<//g' -e 's/&/\&/g' -e 's/"/"/g' -e "s/'/'/g" > /xcatpost/mypostscript MYCONT=`grep MASTER /xcatpost/mypostscript` done From 8da129f63387a10cc708637611b823af78071236 Mon Sep 17 00:00:00 2001 From: daniceexi Date: Tue, 27 May 2014 07:46:47 -0400 Subject: [PATCH 15/19] xcatws.cgi: fix the output when slpnodes resource has no output; fix the output message for nodestat resource --- xCAT-server/xCAT-wsapi/xcatws.cgi | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/xCAT-server/xCAT-wsapi/xcatws.cgi b/xCAT-server/xCAT-wsapi/xcatws.cgi index c63a2b164..bc29399a4 100755 --- a/xCAT-server/xCAT-wsapi/xcatws.cgi +++ b/xCAT-server/xCAT-wsapi/xcatws.cgi @@ -124,7 +124,7 @@ my %URIdef = ( GET => { desc => "Get the running status for the node {noderange}.", usage => "||$usagemsg{objreturn}|", - example => "|Get the running status for node node1|GET|/nodes/node1/nodestat|x|", + example => "|Get the running status for node node1|GET|/nodes/node1/nodestat|{\n \"node1\":{\n \"nodestat\":\"noping\"\n }\n}|", cmd => "nodestat", fhandler => \&actionhdl, outhdler => \&actionout, @@ -1401,6 +1401,9 @@ sub defout { $lines = \@alldata; } foreach my $l (@$lines) { + if ($l =~ /No responses/) { # handle the case that no output from lsslp command + return; + } if ($l =~ /^Object name: / || $l =~ /^\S+:$/) { # start new node if ($l =~ /^Object name:\s+(\S+)/) { # handle the output of lsdef -t $nodename = $1; From becd9d1202c858cd9c6f2076164d645f2c28d00b Mon Sep 17 00:00:00 2001 From: root Date: Tue, 27 May 2014 00:19:37 -0700 Subject: [PATCH 16/19] xCATreg enhance --- xCAT-server/share/xcat/tools/xCATreg | 590 ++++++++++++++++++++++----- 1 file changed, 483 insertions(+), 107 deletions(-) diff --git a/xCAT-server/share/xcat/tools/xCATreg b/xCAT-server/share/xcat/tools/xCATreg index dfdf2f3e2..77b28d16d 100755 --- a/xCAT-server/share/xcat/tools/xCATreg +++ b/xCAT-server/share/xcat/tools/xCATreg @@ -39,8 +39,8 @@ my %confhash; my $rootdir = "$::XCATROOT/share/xcat/tools/autotest"; my $needhelp = 0; my $branch = 0; -my $rhppc64configfile = "$rootdir/default.conf"; -my $configfile = "/regression/rhppc64/default.conf"; +my $testconfigfile = "$rootdir/default.conf"; +my $configfile = "/regression/default.conf"; my $MN = undef; my $management_node = undef; my $CN = undef; @@ -92,7 +92,7 @@ sub usage ####################################### # config for rhppc64env ####################################### -sub config_rhppc64 { +sub config_test { send_msg("******************************"); send_msg("Reading Configure"); send_msg("******************************"); @@ -133,6 +133,15 @@ sub config_rhppc64 { }elsif($line =~ /\[\s*rhppc64System|Custom\s*\]/){ $type = "rhppc64Varible"; + }elsif($line =~ /\[\s*slesppc64System|Custom\s*\]/){ + + $type = "slesppc64Varible"; + }elsif($line =~ /\[\s*rhx8664System|Custom\s*\]/){ + + $type = "rhx8664Varible"; + }elsif($line =~ /\[\s*slesx8664System|Custom\s*\]/){ + + $type = "slesx8664Varible"; }elsif ($type eq "rhppc64Table") { ##TABLE BLOCK## if($line =~ /(\w+)\s*=\s*([\w\.\-]+)/) { @@ -145,6 +154,43 @@ sub config_rhppc64 { $rhppc64config{table}{$sub_type}{$name}{__KEY__}=$attr; } } + }elsif ($type eq "slesppc64Table") { + ##TABLE BLOCK## + if($line =~ /(\w+)\s*=\s*([\w\.\-]+)/) { + $attr = $1; + $value = $2; + if($name&&($slesppc64config{table}{$sub_type}{$name}{__KEY__} ne $attr)){ + $slesppc64config{table}{$sub_type}{$name}{$attr}=$value; + } else { + $name = $value; + $slesppc64config{table}{$sub_type}{$name}{__KEY__}=$attr; + } + } + }elsif ($type eq "rhx8664Table") { + ##TABLE BLOCK## + if($line =~ /(\w+)\s*=\s*([\w\.\-]+)/) { + $attr = $1; + $value = $2; + if($name&&($rhx8664config{table}{$sub_type}{$name}{__KEY__} ne $attr)){ + $rhx8664config{table}{$sub_type}{$name}{$attr}=$value; + } else { + $name = $value; + $rhx8664config{table}{$sub_type}{$name}{__KEY__}=$attr; + } + } + }elsif ($type eq "slesx8664Table") { + ##TABLE BLOCK## + if($line =~ /(\w+)\s*=\s*([\w\.\-]+)/) { + $attr = $1; + $value = $2; + if($name&&($slesx8664config{table}{$sub_type}{$name}{__KEY__} ne $attr)){ + $slesx8664config{table}{$sub_type}{$name}{$attr}=$value; + } else { + $name = $value; + $slesx8664config{table}{$sub_type}{$name}{__KEY__}=$attr; + } + } + }elsif ($type eq "rhppc64Object") { ##OBJECT BLOCK## if($line =~ /(\w+)\s*=\s*([\w\.\-]+)/) { @@ -162,6 +208,58 @@ sub config_rhppc64 { $rhppc64config{object}{$sub_type}{$name}{$attr}=$value; } } + }elsif ($type eq "slesppc64Object") { + ##OBJECT BLOCK## + if($line =~ /(\w+)\s*=\s*([\w\.\-]+)/) { + $attr = $1; + $value = $2; + #print "rhppc64node attr is $attr\n"; + #print "rhppc64node value is $value\n"; + if($attr eq "Name"){ + $name = $value; + } elsif(!defined($name)){ + print "Please give name for Object\n"; + close FILE; + return 1; + } else { + $slesppc64config{object}{$sub_type}{$name}{$attr}=$value; + } + } + }elsif ($type eq "rhx8664Object") { + ##OBJECT BLOCK## + if($line =~ /(\w+)\s*=\s*([\w\.\-]+)/) { + $attr = $1; + $value = $2; + #print "rhx8664node attr is $attr\n"; + #print "rhx8664node value is $value\n"; + if($attr eq "Name"){ + $name = $value; + } elsif(!defined($name)){ + print "Please give name for Object\n"; + close FILE; + return 1; + } else { + $rhx8664config{object}{$sub_type}{$name}{$attr}=$value; + } + } + }elsif ($type eq "slesx8664Object") { + ##OBJECT BLOCK## + if($line =~ /(\w+)\s*=\s*([\w\.\-]+)/) { + $attr = $1; + $value = $2; + #print "slesx8664node attr is $attr\n"; + #print "slesx8664node value is $value\n"; + if($attr eq "Name"){ + $name = $value; + } elsif(!defined($name)){ + print "Please give name for Object\n"; + close FILE; + return 1; + } else { + $slesx8664config{object}{$sub_type}{$name}{$attr}=$value; + } + } + }elsif ($type eq "rhppc64Script") { ##SCRIPT_BLOCK## if($sub_type eq "Prev") { @@ -172,14 +270,63 @@ sub config_rhppc64 { $rhppc64config{script_post}->[$c] = $line; $c = $c + 1; } + }elsif ($type eq "slesppc64Script") { + ##SCRIPT_BLOCK## + if($sub_type eq "Prev") { + $slesppc64config{script_prev}->[$c] = $line; + $c = $c + 1; + } + elsif ($sub_type eq "slesppc64Post") { + $slesppc64config{script_post}->[$c] = $line; + $c = $c + 1; + } + }elsif ($type eq "rhx8664Script") { + ##SCRIPT_BLOCK## + if($sub_type eq "Prev") { + $rhx8664config{script_prev}->[$c] = $line; + $c = $c + 1; + } + elsif ($sub_type eq "rhx8664Post") { + $rhx8664config{script_post}->[$c] = $line; + $c = $c + 1; + } + }elsif ($type eq "slesx8664Script") { + ##SCRIPT_BLOCK## + if($sub_type eq "Prev") { + $slesx8664config{script_prev}->[$c] = $line; + $c = $c + 1; + } + elsif ($sub_type eq "slesx8664Post") { + $slesx8664config{script_post}->[$c] = $line; + $c = $c + 1; + } + } elsif ($type eq "rhppc64Varible") { ##NODE_BLOCK## if($line =~ /(\w+)\s*=\s*([\w\.\-\/]+)/) { $rhppc64config{var}{$1} = $2; print "var $1,$2\n"; } + } elsif ($type eq "slesppc64Varible") { + ##NODE_BLOCK## + if($line =~ /(\w+)\s*=\s*([\w\.\-\/]+)/) { + $slesppc64config{var}{$1} = $2; + } + } elsif ($type eq "rhx8664Varible") { + ##NODE_BLOCK## + if($line =~ /(\w+)\s*=\s*([\w\.\-\/]+)/) { + $rhx8664config{var}{$1} = $2; + print "var $1,$2\n"; + } + } elsif ($type eq "slesx8664Varible") { + ##NODE_BLOCK## + if($line =~ /(\w+)\s*=\s*([\w\.\-\/]+)/) { + $slesx8664config{var}{$1} = $2; + print "var $1,$2\n"; + } } } + if(exists $rhppc64config{object}){ foreach my $type (keys %{$rhppc64config{object}}){ foreach my $name (keys %{$rhppc64config{object}{$type}}){ @@ -194,6 +341,49 @@ sub config_rhppc64 { } } } + if(exists $slesppc64config{object}){ + foreach my $type (keys %{$slesppc64config{object}}){ + foreach my $name (keys %{$slesppc64config{object}{$type}}){ + send_msg("OBJECT:$name,TYPE:$type"); + &runcmd( " echo [Object_$type]>>defaultslesppc64.conf"); + &runcmd( " echo Name=$name>>defaultslesppc64.conf"); + #print "$name,TYPE:$type \n"; + foreach my $attr (keys %{$slesppc64config{object}{$type}{$name}}){ + send_msg(" $attr = $slesppc64config{object}{$type}{$name}{$attr};"); + &runcmd( " echo $attr=$slesppc64config{object}{$type}{$name}{$attr}>>defaultslesppc64.conf"); + } + } + } + } + if(exists $rhx8664config{object}){ + foreach my $type (keys %{$rhx8664config{object}}){ + foreach my $name (keys %{$rhx8664config{object}{$type}}){ + send_msg("OBJECT:$name,TYPE:$type"); + &runcmd( " echo [Object_$type]>>defaultrhx8664.conf"); + &runcmd( " echo Name=$name>>defaultrhx8664.conf"); + #print "$name,TYPE:$type \n"; + foreach my $attr (keys %{$rhx8664config{object}{$type}{$name}}){ + send_msg(" $attr = $rhx8664config{object}{$type}{$name}{$attr};"); + &runcmd( " echo $attr=$rhx8664config{object}{$type}{$name}{$attr}>>defaultrhx8664.conf"); + } + } + } + } + if(exists $slesx8664config{object}){ + foreach my $type (keys %{$slesx8664config{object}}){ + foreach my $name (keys %{$slesx8664config{object}{$type}}){ + send_msg("OBJECT:$name,TYPE:$type"); + &runcmd( " echo [Object_$type]>>defaultslesx8664.conf"); + &runcmd( " echo Name=$name>>defaultslesx8664.conf"); + #print "$name,TYPE:$type \n"; + foreach my $attr (keys %{$slesx8664config{object}{$type}{$name}}){ + send_msg(" $attr = $slesx8664config{object}{$type}{$name}{$attr};"); + &runcmd( " echo $attr=$slesx8664config{object}{$type}{$name}{$attr}>>defaultslesx8664.conf"); + } + } + } + } + if(exists $rhppc64config{table}){ foreach my $type (keys %{$rhppc64config{table}}){ send_msg("TABLE:$type"); @@ -214,6 +404,67 @@ sub config_rhppc64 { } } } + if(exists $slesppc64config{table}){ + foreach my $type (keys %{$slesppc64config{table}}){ + send_msg("TABLE:$type"); + &runcmd( " echo [Table_$type]>>defaultslesppc64.conf"); + #&runcmd( " echo key=$type>>default.conf"); + #&runcmd( " echo [Table_site]>>default.conf"); + #&runcmd( " echo key=$type>>default.conf"); + foreach my $name (keys %{$slesppc64config{table}{$type}}){ + send_msg(" $slesppc64config{table}{$type}{$name}{__KEY__} = $name"); + &runcmd( " echo $slesppc64config{table}{$type}{$name}{__KEY__}=$name>>defaultslesppc64.conf"); + foreach my $attr (keys %{$slesppc64config{table}{$type}{$name}}){ + if($attr ne '__KEY__'){ + send_msg(" $attr = $slesppc64config{table}{$type}{$name}{$attr}"); + &runcmd( " echo $attr=$slesppc64config{table}{$type}{$name}{$attr}>>defaultslesppc64.conf"); + } + } + send_msg("\n"); + } + } + } + if(exists $rhx8664config{table}){ + foreach my $type (keys %{$rhx8664config{table}}){ + send_msg("TABLE:$type"); + &runcmd( " echo [Table_$type]>>defaultrhx8664.conf"); + #&runcmd( " echo key=$type>>default.conf"); + #&runcmd( " echo [Table_site]>>default.conf"); + #&runcmd( " echo key=$type>>default.conf"); + foreach my $name (keys %{$rhx8664config{table}{$type}}){ + send_msg(" $rhx8664config{table}{$type}{$name}{__KEY__} = $name"); + &runcmd( " echo $rhx8664config{table}{$type}{$name}{__KEY__}=$name>>defaultrhx8664.conf"); + foreach my $attr (keys %{$rhx8664config{table}{$type}{$name}}){ + if($attr ne '__KEY__'){ + send_msg(" $attr = $rhx8664config{table}{$type}{$name}{$attr}"); + &runcmd( " echo $attr=$rhx8664config{table}{$type}{$name}{$attr}>>defaultrhx8664.conf"); + } + } + send_msg("\n"); + } + } + } + if(exists $slesx8664config{table}){ + foreach my $type (keys %{$slesx8664config{table}}){ + send_msg("TABLE:$type"); + &runcmd( " echo [Table_$type]>>defaultslesx8664.conf"); + #&runcmd( " echo key=$type>>default.conf"); + #&runcmd( " echo [Table_site]>>default.conf"); + #&runcmd( " echo key=$type>>default.conf"); + foreach my $name (keys %{$slesx8664config{table}{$type}}){ + send_msg(" $slesx8664config{table}{$type}{$name}{__KEY__} = $name"); + &runcmd( " echo $slesx8664config{table}{$type}{$name}{__KEY__}=$name>>defaultslesx8664.conf"); + foreach my $attr (keys %{$slesx8664config{table}{$type}{$name}}){ + if($attr ne '__KEY__'){ + send_msg(" $attr = $slesx8664config{table}{$type}{$name}{$attr}"); + &runcmd( " echo $attr=$slesx8664config{table}{$type}{$name}{$attr}>>defaultslesx8664.conf"); + } + } + send_msg("\n"); + } + } + } + if(exists $rhppc64config{script_prev}){ send_msg("Script_Prev:"); foreach $cmd (@{$rhppc64config{script_prev}}){ @@ -240,7 +491,46 @@ sub config_rhppc64 { #print "var is $rhppc64config{var}\n"; } } - + if (exists $slesppc64config{var}){ + #my $MN=$slesppc64config{var}{MN}; + #my $MNIP=$rhppc64config{var}{MNIP}; + #&runcmd( "echo $MN $MN.$DOMAIN $MNIP>>/etc/hosts"); + #print "MN is $MN\n";} + send_msg("Varible:"); + &runcmd( " echo [System]>>defaultslesppc64.conf"); + foreach my $varname (keys %{$slesppc64config{var}}){ + send_msg(" $varname = $slesppc64config{var}{$varname}"); + &runcmd( " echo $varname=$slesppc64config{var}{$varname}>>defaultslesppc64.conf"); + #print "var is $slesppc64config{var}\n"; + } + } + if (exists $rhx8664config{var}){ + #my $MN=$rhppc64config{var}{MN}; + #my $MNIP=$rhppc64config{var}{MNIP}; + #&runcmd( "echo $MN $MN.$DOMAIN $MNIP>>/etc/hosts"); + #print "MN is $MN\n";} + send_msg("Varible:"); + &runcmd( " echo [System]>>defaultrhx8664.conf"); + foreach my $varname (keys %{$rhx8664config{var}}){ + send_msg(" $varname = $rhx8664config{var}{$varname}"); + &runcmd( " echo $varname=$rhx8664config{var}{$varname}>>defaultrhx8664.conf"); + #print "var is $rhppc64config{var}\n"; + } + } + if (exists $slesx8664config{var}){ + #my $MN=$rhppc64config{var}{MN}; + #my $MNIP=$rhppc64config{var}{MNIP}; + #&runcmd( "echo $MN $MN.$DOMAIN $MNIP>>/etc/hosts"); + #print "MN is $MN\n";} + send_msg("Varible:"); + &runcmd( " echo [System]>>defaultslesx8664.conf"); + foreach my $varname (keys %{$slesx8664config{var}}){ + send_msg(" $varname = $slesx8664config{var}{$varname}"); + &runcmd( " echo $varname=$slesx8664config{var}{$varname}>>defaultslesx8664.conf"); + #print "var is $rhppc64config{var}\n"; + } + } + close FILE; return 0; @@ -359,23 +649,35 @@ sub config_mn { ####################################### # install xcat and init rhppc64 env ####################################### +sub gettestinfo { +my $testenvinfo = undef; +my @osname = runcmd("xdsh mn uname -a "); +my @release = runcmd("xdsh mn cat /etc/*release"); +my @osinfo = runcmd("xdsh mn lsb_release -a"); +if ( $osname [0] =~ /Linux/ && $osname [0] =~ /ppc64/ && $release [1] =~ /Red Hat Enterprise Linux Server release 6.5/){ + print "MN info is redhat ppc 64 "; + $testenvinfo = "rhppc64"; +}elsif ( $osinfo [2] =~ /SUSE Linux Enterprise Server 11/ && $osinfo [2] =~ /ppc64/){ + print " MN info is sles 11.3 ppc64 "; + $testenvinfo = "slesppc64"; +}elsif ( $osinfo [2] =~ /SUSE Linux Enterprise Server 11/ && $osinfo [2] =~ /x86_64/){ + print " MN info is sles 11.3 x86_64 "; + $testenvinfo = "slesx8664"; +}elsif ( $osinfo [0] =~ /amd64/ && $osinfo [2] =~ /Red Hat Enterprise Linux Server release 6.5/){ + print "MN info is redhat 6.5 x86_64 \n"; + $testenvinfo = "rhx8664"; +}else + {print "no machine info ";} + return $testenvinfo; +} + sub init { my $mn = shift; - if (exists $rhppc64config{var}){ + my $MN=$mn; + my $envoutput = &gettestinfo; + if ($envoutput eq 'rhppc64'){ #my $MN=$rhppc64config{var}{MN}; - my $MN=$mn; - my $MNIP=$rhppc64config{var}{MNIP}; - my $CN=$rhppc64config{var}{CN}; - my $CNIP=$rhppc64config{var}{CNIP}; - my $SN=$rhppc64config{var}{SN}; - my $SNIP=$rhppc64config{var}{SNIP}; - my $SNCN=$rhppc64config{var}{SNCN}; - my $SNCNIP=$rhppc64config{var}{SNCNIP}; - my $HMC=$rhppc64config{var}{HMC}; - my $HMCIP=$rhppc64config{var}{HMCIP}; - my $MOUNTIP=$rhppc64config{var}{MOUNTIP}; - my $DOMAIN=$rhppc64config{var}{DOMAIN}; my $nodedir=$rhppc64config{var}{nodedir}; system("xdsh $MN mkdir -p /iso/mountpoint"); print "--prepareing redhat iso file.......\n"; @@ -389,8 +691,8 @@ sub init system("xdsh $MN rm -rf /etc/yum.repos.d/*"); # $res = system("scp -r $nodedir/xcat-dep $MN:/"); &repo(); - system("scp -r rhel6.4.repo $MN:/etc/yum.repos.d/rhel6.4.repo"); - #system("scp -r default.conf $MN:$rhppc64configfile"); + system("scp -r rhel6.5.repo $MN:/etc/yum.repos.d/rhel6.5.repo"); + #system("scp -r default.conf $MN:$testconfigfile"); #system("xdsh $MN perl $nodedir/xcatbuild/xcat-core/mklocalrepo.sh"); system("xdsh $MN perl /xcat-dep/rh6/ppc64/mklocalrepo.sh"); print "--install XCAT .......\n"; @@ -403,7 +705,7 @@ sub init system("xdsh $MN yum -y install perl-xCAT xCAT-client xCAT-server xCAT"); print "--install XCATTEST .......\n"; system("xdsh $MN yum -y install xCAT-test"); - system("scp -r default.conf $MN:$rhppc64configfile"); + system("scp -r default.conf $MN:$testconfigfile"); print "--install createrepo .......\n"; #system("xdsh $MN yum -y install createrepo"); @@ -418,11 +720,90 @@ sub init #} send_msg( " rhppc64 env is ready\n"); - } + }elsif ($envoutput eq 'slesppc64'){ + system(" xdsh $MN mkdir -p /iso/mountpoint"); + print "--prepareing SLES iso file.......\n"; + system("scp -r /iso/SLES-11-SP3-DVD-ppc64-GM-DVD1.iso $MN:/iso/"); + system("xdsh $MN mount -o loop /iso/SLES-11-SP3-DVD-ppc64-GM-DVD1.iso /iso/mountpoint"); #### + print "[OK]\n"; - return 0; + print "--prepareing /etc/hosts /etc/resolv.conf......."; + system ("scp -r /etc/hosts $MN:/etc/hosts"); + system ("scp -r /etc/resolv.conf $MN:/etc/resolv.conf"); + print "[OK]\n"; + print "--get the latest XCAT tarball.......\n"; + system("xdsh $MN rm -rf /etc/yum.repos.d/*"); +# $res = system("scp -r $nodedir/xcat-dep $MN:/"); + + print "[OK]\n--deploy zypper...."; + system("xdsh $MN rm -rf /etc/zypp/repos.d/*"); + # system(xdsh $MN zypper ar file:///autotest/wjx/xcat-core xCAT-core); + system("xdsh $MN zypper ar file:///xcat-dep/sles11/ppc64 xCAT-dep"); + system("xdsh $MN zypper ar file:///iso/mountpoint sles11"); + print "[OK]\n--install xcat...."; + system("xdsh $MN zypper sl -U"); + system("xdsh $MN zypper --gpg-auto-import-keys search --match-exact -s screen"); + system("xdsh $MN zypper -n install xCAT"); + system("xdsh $MN zypper -n install xCAT-test"); + system("scp -r defaultslesppc64.conf $MN:$testconfigfile"); + print "--prepare test environment....\n"; + print "[OK]\n"; +}elsif ($envoutput eq 'rhx8664'){ + system("xdsh $MN mkdir -p /iso/mountpoint"); + print "--prepareing redhat iso file.......\n"; + print "[OK]\n--copy ISO file....."; + system(" scp -r /iso/RHEL6.5-20131111.0-Server-x86_64-DVD1.iso $MN:/iso"); + print "--prepareing /etc/hosts /etc/resolv.conf......."; + system ("scp -r /etc/hosts $MN:/etc/hosts"); + system ("scp -r /etc/resolv.conf $MN:/etc/resolv.conf"); + print "[OK]\n"; + print "--get the latest XCAT tarball.......\n"; + #system("scp -r $nodedir/xcat-dep $MN:/"); + system("xdsh $MN rm -rf /etc/yum.repos.d/*"); + &repo(); + system("scp -r rhel6.5.repo $MN:/etc/yum.repos.d/"); + system("xdsh $MN perl /xcat-dep/rh6/ppc64/mklocalrepo.sh"); + print "--install XCAT .......\n"; + system("xdsh $MN yum clean metadata"); + system("xdsh $MN rpm --import /iso/RPM-GPG-KEY-redhat-release"); + system("xdsh $MN yum -y install xCAT"); + print "--install XCATTEST .......\n"; + system("xdsh $MN yum -y install xCAT-test"); + print "--install createrepo .......\n"; + system("xdsh $MN yum -y install createrepo"); + system("xdsh $MN yum -y install screen"); + system("xdsh $MN yum -y install mysql-server mysql mysql-bench mysql-devel mysql-connector-odbc"); + system("xdsh $MN yum -y install iscsi-initiator-utils bridge-utils kvm perl-Sys-Virt perl-Sys-Virt.x86_64 libvirt.x86_64 qemu-kvm.x86_64 "); + system("scp -r defaultrhx8664.conf $MN:$testconfigfile"); +}elsif ($envoutput eq 'slesx8664'){ + system("xdsh $MN mkdir -p /iso/mountpoint"); + print "--prepareing SLES iso file.......\n"; + system(" scp -r /iso/SLES-11-SP3-DVD-x86_64-GM-DVD1.iso $MN:/iso"); + print "[OK]\n--mount ISO file....."; + system("mount -o loop /iso/SLES-11-SP3-DVD-x86_64-GM-DVD1.iso /iso/mountpoint"); #### + print "[OK]\n"; + print "--prepareing /etc/hosts /etc/resolv.conf......."; + system ("scp -r /etc/hosts $MN:/etc/hosts"); + system ("scp -r /etc/resolv.conf $MN:/etc/resolv.conf"); + print "[OK]\n"; + print "--get the latest XCAT tarball.......\n"; + print "[OK]\n--deploy zypper...."; + system("xdsh $MN rm -rf /etc/zypp/repos.d/*"); + system("xdsh $MN zypper ar file:///xcat-dep/sles11/x86_64 xCAT-dep"); + system("xdsh $MN zypper ar file:///iso/mountpoint sles11"); + print "[OK]\n--install xcat...."; + system("xdsh $MN zypper sl -U"); + system("xdsh $MN zypper --gpg-auto-import-keys search --match-exact -s screen"); + system("xdsh $MN zypper -n install xCAT"); + system("xdsh $MN zypper -n xCAT-test*"); + print "--prepare test environment....\n"; + system("xdsh $MN zypper -n install iscsi-initiator-utils bridge-utils kvm perl-Sys-Virt perl-Sys-Virt.x86_64 libvirt.x86_64 qemu-kvm.x86_64"); + system("scp -r defaultslesx8664.conf $MN:$testconfigfile"); + print "--prepare vmtest environment....\n"; + print "[OK]\n";} + return 0; } ####################################### # do test @@ -431,6 +812,10 @@ sub do_test { my $mn = shift; # step 7.1 Install xcat and init mn send_msg("began to install xCAT and initialize mn"); + $res = &config_test(); + if ($res != 0){ + exit 1; + } $res = &init($mn); if ($res != 0){ exit 1; @@ -453,83 +838,26 @@ sub do_test1 my $mn = shift; #my $MN=$rhppc64config{var}{MN}; my $MN=$mn; + my $envoutput = &gettestinfo; + if ($envoutput eq 'rhppc64'){ my $nodedir=$rhppc64config{var}{nodedir}; print "copy config file "; - system("scp -r default.conf $MN:$rhppc64configfile"); + system("scp -r default.conf $MN:$testconfigfile"); - print "Start to run diskless installation $MN ...\n"; send_msg("******************************"); - send_msg("start diskless test"); + send_msg("start test"); send_msg("******************************"); - #if($dsklsinst){ -# system("xdsh $MN perl /opt/xcat/bin/xcattest -f /opt/xcat/share/xcat/tools/autotest/default.conf -t Linux_diskless_installation_flat_ppc64"); -# system("xdsh $MN mv /opt/xcat/share/xcat/tools/autotest/result/* /autotest/result/"); - # exit 1; - #} - #if($bundlerun){ - # print "Start to run the automation test bucket ....\n"; - # system("xdsh $MN mkdir -p /autotest/result"); - # system("xdsh $MN /opt/xcat/bin/xcattest -b /opt/xcat/share/xcat/tools/autotest/bundle/bat.bundle"); - # system("xdsh $MN mv /opt/xcat/share/xcat/tools/autotest/result/* /autotest/result/"); - # system("xdsh $MN cp /autotest/result/xcattest.log.$timestamp /autotest/result/log/xcattest.log.$timestamp.current"); - # $output = ("xdsh $MN tail /autotest/result/xcattest.log.$timestamp"); - # if($output =~ /Total: (\d+) , Failed: (\d+)/){ - # send_msg{command}{total} = $1; - # send_msg{command}{fail} = $2; - # send_msg{command}{timestamp} = $timestamp; - # if(send_msg{command}{fail} != 0){ - # send_msg{command}{failcase} = "| | | Failed cases:"."\n"; - # $output = (xdsh $MN cat /autotest/result/failedcases.$timestamp | grep END); - # while($output =~ /END::(\w+)/g){ - # send_msg{command}{failcase} = $send_msg{command}{failcase}."| | | ".$1."\n"; - # print "$msg{command}{failcase}"; - # } - # print "$send_msg{command}{failcase}"; - # } - # } - # } - #if($stateliteinst){ - # system("xdsh $MN /opt/xcat/bin/xcattest -f /opt/xcat/share/xcat/tools/autotest/default.conf -t Linux_statelite_installation_flat_ppc64"); - # system("xdsh $MN mv /opt/xcat/share/xcat/tools/autotest/result/* /autotest/result/"); - # system("xdsh $MN cp /autotest/result/xcattest.log.$timestamp /autotest/result/log/xcattest.log.$timestamp.current"); - # $output = system(" xdsh $MN tail /autotest/result/xcattest.log.$timestamp"); - # if($output =~ /Failed: (\d+)/){ - # if($1 != 0){ - # send_msg{linux_statelite_installation_flat}{pass} = 0; - # send_msg{linux_statelite_installation_flat}{timestamp} = $timestamp; - # } else { - # send_msg{linux_statelite_installation_flat}{pass} = 1; - # } - # } - #} - #if($fullinst){ - system("xdsh $MN /opt/xcat/bin/xcattest -f /opt/xcat/share/xcat/tools/autotest/default.conf -t Linux_full_installation_flat_ppc64"); - system("xdsh $MN mv /opt/xcat/share/xcat/tools/autotest/result/* /autotest/result/"); - # system("xdsh $MN cp /autotest/result/xcattest.log.$timestamp /autotest/result/log/xcattest.log.$timestamp.current"); - # $output = xdsh $MN tail /autotest/result/xcattest.log.$timestamp; - # if($output =~ /Failed: (\d+)/){ - # if($1 != 0){ - # send_msg{linux_full_installation_flat}{pass} = 0; - # send_msg{linux_full_installation_flat}{timestamp} = $timestamp; - # } else { - # send_msg{linux_full_installation_flat}{pass} = 1; - # } - # } - #} - #if($snfullinst){ - # system("xdsh $MN /opt/xcat/bin/xcattest -f /opt/xcat/share/xcat/tools/autotest/default.conf -t Linux_sn_installation_flat_x86_vm"); - # system("xdsh $MN mv /opt/xcat/share/xcat/tools/autotest/result/* /autotest/result/"); - # system("xdsh $MN cp /autotest/result/xcattest.log.$timestamp /autotest/result/log/xcattest.log.$timestamp.current"); - # $output = xdsh $MN tail /autotest/result/xcattest.log.$timestamp; - # if($output =~ /Failed: (\d+)/){ - # if($1 != 0){ - # send_msg{linux_sn_installation_flat}{pass} = 0; - # send_msg{linux_sn_installation_flat}{timestamp} = $timestamp; - # } else { - # send_msg{linux_sn_installation_flat}{pass} = 1; - # } - # } - #} + system("xdsh $MN perl /opt/xcat/bin/xcattest -f /opt/xcat/share/xcat/tools/autotest/default.conf -t Linux_diskless_installation_flat_ppc64"); + system("xdsh $MN mv /opt/xcat/share/xcat/tools/autotest/result/* /autotest/result/"); + + system("xdsh $MN /opt/xcat/bin/xcattest -b /opt/xcat/share/xcat/tools/autotest/bundle/bat.bundle"); + system("xdsh $MN mv /opt/xcat/share/xcat/tools/autotest/result/* /autotest/result/"); + system("xdsh $MN /opt/xcat/bin/xcattest -f /opt/xcat/share/xcat/tools/autotest/default.conf -t Linux_statelite_installation_flat_ppc64"); + system("xdsh $MN mv /opt/xcat/share/xcat/tools/autotest/result/* /autotest/result/"); + system("xdsh $MN /opt/xcat/bin/xcattest -f /opt/xcat/share/xcat/tools/autotest/default.conf -t Linux_full_installation_flat_ppc64"); + system("xdsh $MN mv /opt/xcat/share/xcat/tools/autotest/result/* /autotest/result/"); + system("xdsh $MN /opt/xcat/bin/xcattest -f /opt/xcat/share/xcat/tools/autotest/default.conf -t Linux_sn_installation_flat_x86_vm"); + system("xdsh $MN mv /opt/xcat/share/xcat/tools/autotest/result/* /autotest/result/"); #if($dsklscnsninst){ # system("xdsh $MN /opt/xcat/bin/xcattest -f /opt/xcat/share/xcat/tools/autotest/default.conf -t Linux_cn_with_sn_diskless_installation_flat_x86_vm"); # system("xdsh $MN mv /opt/xcat/share/xcat/tools/autotest/result/* /autotest/result/"); @@ -555,6 +883,62 @@ sub do_test1 #} #system("mkdir -p $nodedir/result"); # system("scp -r $MN:/autotest/result /regression/rhppc64"); + }elsif ($envoutput eq 'slesppc64'){ + my $nodedir=$slesppc64config{var}{nodedir}; + print "copy config file "; + system("scp -r defaultslesppc64.conf $MN:$testconfigfile"); + send_msg("******************************"); + send_msg("start test"); + send_msg("******************************"); + system("xdsh $MN perl /opt/xcat/bin/xcattest -f /opt/xcat/share/xcat/tools/autotest/default.conf -t Linux_sles_diskless_installation_ppc64_flat"); + system("xdsh $MN mv /opt/xcat/share/xcat/tools/autotest/result/* /autotest/result/"); + system("xdsh $MN /opt/xcat/bin/xcattest -b /opt/xcat/share/xcat/tools/autotest/bundle/bat.bundle"); + system("xdsh $MN mv /opt/xcat/share/xcat/tools/autotest/result/* /autotest/result/"); + system("xdsh $MN /opt/xcat/bin/xcattest -f /opt/xcat/share/xcat/tools/autotest/default.conf -t Linux_sles_statelite_installation_flat_ppc64"); + system("xdsh $MN mv /opt/xcat/share/xcat/tools/autotest/result/* /autotest/result/"); + system("xdsh $MN /opt/xcat/bin/xcattest -f /opt/xcat/share/xcat/tools/autotest/default.conf -t Linux_full_installation_flat_ppc64"); + system("xdsh $MN mv /opt/xcat/share/xcat/tools/autotest/result/* /autotest/result/"); + # system("xdsh $MN /opt/xcat/bin/xcattest -f /opt/xcat/share/xcat/tools/autotest/default.conf -t Linux_sn_installation_flat_x86_vm"); + # system("xdsh $MN mv /opt/xcat/share/xcat/tools/autotest/result/* /autotest/result/"); + +}elsif ($envoutput eq 'rhx8664'){ + my $nodedir=$rhx8664config{var}{nodedir}; + print "copy config file "; + system("scp -r defaultrhx8664.conf $MN:$testconfigfile"); + send_msg("******************************"); + send_msg("start test"); + send_msg("******************************"); + #system("xdsh $MN perl /opt/xcat/bin/xcattest -f /opt/xcat/share/xcat/tools/autotest/default.conf -t Linux_diskless_installation_flat_ppc64"); + #system("xdsh $MN mv /opt/xcat/share/xcat/tools/autotest/result/* /autotest/result/"); + + system("xdsh $MN /opt/xcat/bin/xcattest -b /opt/xcat/share/xcat/tools/autotest/bundle/bat.bundle"); + system("xdsh $MN mv /opt/xcat/share/xcat/tools/autotest/result/* /autotest/result/"); + # system("xdsh $MN /opt/xcat/bin/xcattest -f /opt/xcat/share/xcat/tools/autotest/default.conf -t Linux_statelite_installation_flat_ppc64"); + # system("xdsh $MN mv /opt/xcat/share/xcat/tools/autotest/result/* /autotest/result/"); + # system("xdsh $MN /opt/xcat/bin/xcattest -f /opt/xcat/share/xcat/tools/autotest/default.conf -t Linux_full_installation_flat_ppc64"); + # system("xdsh $MN mv /opt/xcat/share/xcat/tools/autotest/result/* /autotest/result/"); + # system("xdsh $MN /opt/xcat/bin/xcattest -f /opt/xcat/share/xcat/tools/autotest/default.conf -t Linux_sn_installation_flat_x86_vm"); + # system("xdsh $MN mv /opt/xcat/share/xcat/tools/autotest/result/* /autotest/result/"); + +}elsif ($envoutput eq 'slesx8664'){ + my $nodedir=$slesx8664config{var}{nodedir}; + print "copy config file "; + system("scp -r defaultslesx8664.conf $MN:$testconfigfile"); + send_msg("******************************"); + send_msg("start test"); + send_msg("******************************"); + #system("xdsh $MN perl /opt/xcat/bin/xcattest -f /opt/xcat/share/xcat/tools/autotest/default.conf -t "); + #system("xdsh $MN mv /opt/xcat/share/xcat/tools/autotest/result/* /autotest/result/"); + + system("xdsh $MN /opt/xcat/bin/xcattest -b /opt/xcat/share/xcat/tools/autotest/bundle/bat.bundle"); + system("xdsh $MN mv /opt/xcat/share/xcat/tools/autotest/result/* /autotest/result/"); + #system("xdsh $MN /opt/xcat/bin/xcattest -f /opt/xcat/share/xcat/tools/autotest/default.conf -t Linux_statelite_installation_flat_ppc64"); + #system("xdsh $MN mv /opt/xcat/share/xcat/tools/autotest/result/* /autotest/result/"); + # system("xdsh $MN /opt/xcat/bin/xcattest -f /opt/xcat/share/xcat/tools/autotest/default.conf -t Linux_full_installation_flat_ppc64"); + # system("xdsh $MN mv /opt/xcat/share/xcat/tools/autotest/result/* /autotest/result/"); + # system("xdsh $MN /opt/xcat/bin/xcattest -f /opt/xcat/share/xcat/tools/autotest/default.conf -t Linux_sn_installation_flat_x86_vm"); + # system("xdsh $MN mv /opt/xcat/share/xcat/tools/autotest/result/* /autotest/result/"); + } ####################################### @@ -620,21 +1004,13 @@ sub trim { #repo #################################### sub repo{ -my @osname = &runcmd("uname -a"); -if ( $osname [0] =~ /^Linux\s*/ && -f "/etc/redhat-release" && $osname [0] =~ /ppc64/){ - send_msg ("ppc64 redhat env\n"); - my $os="rhels6.4"; - my $arch="ppc64"; - send_msg ("os is $os,arch is $arch\n"); - &runcmd( " echo [rhe-6.4-server]>>rhel6.4.repo"); - &runcmd( " echo name=RHEL 6.4 SERVER packages>>rhel6.4.repo"); - &runcmd(" echo baseurl=file:///iso/mountpoint/Server/>>rhel6.4.repo"); - &runcmd(" echo enabled=1>>rhel6.4.repo"); - &runcmd(" echo gpgcheck=1>>rhel6.4.repo"); - # system("scp -r rhel6.4.repo $MN:/etc/yum.repos.d/rhel6.4.repo"); + &runcmd( " echo [rhe-6.5-server]>>rhel6.5.repo"); + &runcmd( " echo name=RHEL 6.5 SERVER packages>>rhel6.5.repo"); + &runcmd(" echo baseurl=file:///iso/mountpoint/Server/>>rhel6.5.repo"); + &runcmd(" echo enabled=1>>rhel6.5.repo"); + &runcmd(" echo gpgcheck=1>>rhel6.5.repo"); } -} ####################################### # send messages From a58254991604f45fe47ec0e749f8ba238566b03d Mon Sep 17 00:00:00 2001 From: daniceexi Date: Tue, 27 May 2014 09:44:35 -0400 Subject: [PATCH 17/19] defect 4083: the dash and busybox rpm packages have been removed from rh7 iso and xcat stateless and satelite do not need them any more for rh7, so remove them from the stateless and statelite pkglist --- xCAT-server/share/xcat/netboot/rh/compute.rhels7.ppc64.pkglist | 2 -- xCAT-server/share/xcat/netboot/rh/compute.rhels7.x86_64.pkglist | 2 -- 2 files changed, 4 deletions(-) diff --git a/xCAT-server/share/xcat/netboot/rh/compute.rhels7.ppc64.pkglist b/xCAT-server/share/xcat/netboot/rh/compute.rhels7.ppc64.pkglist index 452804038..aee31ff58 100644 --- a/xCAT-server/share/xcat/netboot/rh/compute.rhels7.ppc64.pkglist +++ b/xCAT-server/share/xcat/netboot/rh/compute.rhels7.ppc64.pkglist @@ -5,10 +5,8 @@ dhclient kernel openssh-server openssh-clients -busybox wget rsyslog -dash vim-minimal ntp rsyslog diff --git a/xCAT-server/share/xcat/netboot/rh/compute.rhels7.x86_64.pkglist b/xCAT-server/share/xcat/netboot/rh/compute.rhels7.x86_64.pkglist index 18ceb3e33..410cd004c 100644 --- a/xCAT-server/share/xcat/netboot/rh/compute.rhels7.x86_64.pkglist +++ b/xCAT-server/share/xcat/netboot/rh/compute.rhels7.x86_64.pkglist @@ -6,8 +6,6 @@ dhclient kernel openssh-server openssh-clients -busybox -dash iputils bc irqbalance From 5399ef92582c5a88732984a367d7f538309c2757 Mon Sep 17 00:00:00 2001 From: ligc Date: Tue, 27 May 2014 16:58:08 -0500 Subject: [PATCH 18/19] fix for bug 4142: add vios as a new device type --- perl-xCAT/xCAT/RemoteShellExp.pm | 4 ++++ xCAT-server/share/xcat/devicetype/vios/config | 5 +++++ 2 files changed, 9 insertions(+) create mode 100644 xCAT-server/share/xcat/devicetype/vios/config diff --git a/perl-xCAT/xCAT/RemoteShellExp.pm b/perl-xCAT/xCAT/RemoteShellExp.pm index 90b15ed43..df62c73fa 100755 --- a/perl-xCAT/xCAT/RemoteShellExp.pm +++ b/perl-xCAT/xCAT/RemoteShellExp.pm @@ -810,6 +810,10 @@ sub senddeviceskeys # add to the command $setupcmd .=$key; $setupcmd .="\""; + # Special case for vios + if ($ENV{DEVICETYPE} eq 'vios') { + $setupcmd = "\"echo $key | tee -a ~/.ssh/authorized_keys2\""; + } # For each input device my @nodelist=split(/,/,$nodes); foreach my $node (@nodelist) { diff --git a/xCAT-server/share/xcat/devicetype/vios/config b/xCAT-server/share/xcat/devicetype/vios/config new file mode 100644 index 000000000..da9165090 --- /dev/null +++ b/xCAT-server/share/xcat/devicetype/vios/config @@ -0,0 +1,5 @@ +[main] +ssh-setup-command=echo +[xdsh] +pre-command=NULL +post-command=NULL From eff65a7f3fc76abaee7a15dcc58f7a5dd6763830 Mon Sep 17 00:00:00 2001 From: yinle Date: Tue, 27 May 2014 14:28:55 -0700 Subject: [PATCH 19/19] Fix some bugs --- xCAT-test/restapitest | 70 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) diff --git a/xCAT-test/restapitest b/xCAT-test/restapitest index 1e0682fc2..c37c2995b 100755 --- a/xCAT-test/restapitest +++ b/xCAT-test/restapitest @@ -144,6 +144,11 @@ for my $u (@users) { $i++; for my $t (@tokens) { for my $c (@certs){ + if ($method eq "POST" and ($resource =~ /^\/nodes\/(\w+)$/)) { + `/opt/xcat/bin/rmdef $1`; + print_debug("restapi test rmdef $1\n"); + } + my $res = run_restapi($method, $resource, $data, $c, $port, $host, $u, $p, $t); if($res){ my $reshash = parse_json($res); @@ -276,6 +281,49 @@ sub parse_json print "[:] content is $content \n" if($debug); parse_json($content); } + # for those who look like: + # {"Vc68m4hsp01":{"parent":"Server-9119-590-SN02C5F9E","pprofile":"Vc68m4hsp01"},"p5ih_c75vios":{"parent":"P5IH-SN02012EB-A","mgt":"hmc","id":"2"},"p5ih_lpar04":{"parent":"P5IH-SN02013EB-A","pprofile":"p5ih_lpar04"}} + elsif($input =~ /^"(\S+?)\":{\S+},/){ + $input =~ s/},/}%/; + my @contents = split /%/, $input; + my @reval; + # record result + foreach my $t (@contents) { + print ":{}, content is $t \n" if($debug); + my $re = parse_json($t); + push @reval, $re; + } + # merge hash + foreach my $t (@reval) { + if(ref($t) =~ "HASH") { + foreach my $k (keys %$t){ + $hash{$k} = $$t{$k}; + } + } + } + return \%hash; + } + elsif( $input =~ /^{\S+},{\S+}/ and !($input =~ /]/)){ + $input =~ s/},{/}%{/; + my @contents = split /%/, $input; + my @reval; + # record result + foreach my $t (@contents) { + print "{},{}, content is $t \n" if($debug); + my $re = parse_json($t); + push @reval, $re; + } + # merge hash + foreach my $t (@reval) { + if(ref($t) =~ "HASH") { + foreach my $k (keys %$t){ + $hash{$k} = $$t{$k}; + } + } + } + return \%hash; + } + # for those who look like # {"clustersite":{"domain":"cluster.com","master":"192.168.1.15"}} elsif ($input =~ /^\s*{(.*)}\s*$/s) { @@ -283,6 +331,26 @@ sub parse_json print "{} content is $content \n" if($debug); parse_json($content); } + elsif( $input =~ /],\"\S+\":/)){ + $input =~ s/],\"\S+\":/]%\"\S+\":/; + my @contents = split /%/, $input; + my @reval; + # record result + foreach my $t (@contents) { + print "],:, content is $t \n" if($debug); + my $re = parse_json($t); + push @reval, $re; + } + # merge hash + foreach my $t (@reval) { + if(ref($t) =~ "HASH") { + foreach my $k (keys %$t){ + $hash{$k} = $$t{$k}; + } + } + } + return \%hash; + } # for those who look like # "domain":"cluster.com","master":"192.168.1.15" elsif ($input =~ /,/ and !($input =~ /}/)) { @@ -505,3 +573,5 @@ sub transf_hash + +