lsdef enhancements to support nics, display and set nics info more easily
git-svn-id: https://svn.code.sf.net/p/xcat/code/xcat-core/branches/2.8@15507 8638fb3e-16cb-4fca-ae20-7b5d299a9bcd
This commit is contained in:
		| @@ -2592,4 +2592,88 @@ sub judge_node | ||||
|        | ||||
|     return $flag;             | ||||
| } | ||||
|  | ||||
|  | ||||
| #------------------------------------------------------------------------------- | ||||
|  | ||||
| =head3   expandnicsattr | ||||
|     Expand the nics related attributes into the readable format, | ||||
|     for example, the nicsips=eth0!1.1.1.1|2.1.1.1,eth1!3.1.1.1|4.1.1.1 | ||||
|     expanded format: | ||||
|     nicsips.eth0=1.1.1.1|2.1.1.1 | ||||
|     nicsips.eth1=3.1.1.1|4.1.1.1 | ||||
|  | ||||
|     Arguments: | ||||
|         nicsattr value, like niccsips=eth0!1.1.1.1|2.1.1.1,eth1!3.1.1.1|4.1.1.1  | ||||
|         nicnames: only return the value for specific nics, like "eth0,eth1" | ||||
|     Returns: | ||||
|         expanded format, like: | ||||
|         nicsips.eth0=1.1.1.1|2.1.1.1 | ||||
|         nicsips.eth1=3.1.1.1|4.1.1.1 | ||||
|     Error: | ||||
|         none | ||||
|  | ||||
|     Example: | ||||
|         my $nicsstr = xCAT::DBobjUtils->expandnicsattr($attrval); | ||||
|  | ||||
|     Comments: | ||||
|         none | ||||
| =cut | ||||
|  | ||||
| #------------------------------------------------------------------------------- | ||||
| sub expandnicsattr() | ||||
| { | ||||
|     my $nicstr = shift; | ||||
|     if (($nicstr) && ($nicstr =~ /xCAT::/)) | ||||
|     { | ||||
|         $nicstr = shift; | ||||
|     } | ||||
|     my $nicnames = shift; | ||||
|  | ||||
|     my $ret;  | ||||
|  | ||||
|     $nicstr =~ /^(.*?)=(.*?)$/; | ||||
|  | ||||
|     #Attribute: nicips, nichostnamesuffix, etc. | ||||
|     my $nicattr = $1; | ||||
|  | ||||
|     # Value: eth0!1.1.1.1|2.1.1.1,eth1!3.1.1.1|4.1.1.1 | ||||
|     my $nicval=$2; | ||||
|  | ||||
|     # $nicarr[0]: eth0!1.1.1.1|2.1.1.1 | ||||
|     # $nicarr[1]: eth1!3.1.1.1|4.1.1.1  | ||||
|     my @nicarr = split(/,/, $nicval); | ||||
|      | ||||
|     foreach my $nicentry (@nicarr) | ||||
|     { | ||||
|         #nicentry: eth0!1.1.1.1|2.1.1.1 | ||||
|         # $nicv[0]: eth0 | ||||
|         # $nicv[1]: 1.1.1.1|2.1.1.1 | ||||
|         my @nicv = split(/!/, $nicentry); | ||||
|  | ||||
|         # only return nic* attr for these specific nics | ||||
|         if ($nicnames) | ||||
|         { | ||||
|             my @nics = split(/,/, $nicnames); | ||||
|             if ($nicv[0]) | ||||
|             { | ||||
|                 # Do not need to return the nic attr for this nic | ||||
|                 if (!grep(/^$nicv[0]$/, @nics)) | ||||
|                 { | ||||
|                     next; | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         # ignore the line that does not have nicname or value | ||||
|         if ($nicv[0] && $nicv[1]) | ||||
|         { | ||||
|             $ret .= "    $nicattr.$nicv[0]=$nicv[1]\n"; | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     chomp($ret); | ||||
|     return $ret; | ||||
|  | ||||
| } | ||||
| 1; | ||||
|   | ||||
| @@ -4,11 +4,12 @@ B<lsdef> - Use this command to list xCAT data object definitions. | ||||
|  | ||||
| =head1 SYNOPSIS | ||||
|  | ||||
| B<lsdef> [B<-h>|B<--help>] [B<-t> I<object-types>] | ||||
| B<lsdef> [B<-h>|B<--help>] [B<-t> I<object-types>] [B<-i> I<attr-list>] | ||||
|  | ||||
| B<lsdef> [B<-V>|B<--verbose>] [B<-l>|B<--long>] [B<-s>|B<--short>] [B<-a>|B<--all>] [B<-S>]  | ||||
| [B<-t> I<object-types>] [B<-o> I<object-names>] [B<-z>|B<--stanza>] [B<-i> I<attr-list>] | ||||
| [B<-c>|B<--compress>] [B<--osimage>][[B<-w> I<attr>==I<val>] [B<-w> I<attr>=~I<val>] ...] [I<noderange>] | ||||
| [B<-c>|B<--compress>] [B<--osimage>] [B<--nics>] [[B<-w> I<attr>==I<val>] | ||||
| [B<-w> I<attr>=~I<val>] ...] [I<noderange>] | ||||
|  | ||||
|  | ||||
| =head1 DESCRIPTION | ||||
| @@ -66,6 +67,10 @@ A set of comma delimited object names. | ||||
|  | ||||
| Show all the osimage information for the node. | ||||
|  | ||||
| =item B<--nics> | ||||
|  | ||||
| Show the nics configuration information for the node. | ||||
|  | ||||
| =item B<-t> I<object-types> | ||||
|  | ||||
| A set of comma delimited object types. Use the help option to get a list of valid objects. | ||||
| @@ -211,6 +216,12 @@ when defining an xCAT node. | ||||
|  | ||||
|  lsdef -t node -h -i profile,pprofile | ||||
|  | ||||
| =item 17. | ||||
|  | ||||
| To display the nics configuration information for node cn1. | ||||
|  | ||||
|  lsdef cn1 --nics | ||||
|  | ||||
| =back | ||||
|  | ||||
| =head1 FILES | ||||
|   | ||||
| @@ -40,6 +40,8 @@ $Getopt::Long::ignorecase = 0; | ||||
|  | ||||
| %::WhereHash;     # hash of attr=val from "-w" option | ||||
| @::AttrList;      # list of attrs from "-i" option | ||||
| %::NicsAttrHash;  # hash of nics attributes specified with "-i" option | ||||
|                   # e.g. $::NicsAttrHash{'nicips'} = ("eth0","eth1"); | ||||
|  | ||||
| # object type lists | ||||
| @::clobjtypes;      # list of object types derived from the command line. | ||||
| @@ -266,6 +268,7 @@ sub processArgs | ||||
|                     'nocache'  => \$::opt_nc, | ||||
|                     'S'        => \$::opt_S, | ||||
|                     'osimage'  => \$::opt_osimg, | ||||
|                     'nics'  => \$::opt_nics, | ||||
|         ) | ||||
|       ) | ||||
|     { | ||||
| @@ -331,6 +334,19 @@ sub processArgs | ||||
|         return 2; | ||||
|     } | ||||
|  | ||||
|     # -i and --nics cannot be used together | ||||
|     if ($::opt_nics && $::opt_i) { | ||||
|         my $rsp; | ||||
|         $rsp->{data}->[0] = "The flags \'-i'\ and \'--nics'\ cannot be used together."; | ||||
|         xCAT::MsgUtils->message("E", $rsp, $::callback); | ||||
|         return 2; | ||||
|     } | ||||
|  | ||||
|     # --nics is the equivalent of -i nicips,nichostnamesuffixes... | ||||
|     if ($::opt_nics) { | ||||
|         $::opt_i="nicips,nichostnamesuffixes,nictypes,niccustomscripts,nicnetworks,nicaliases"; | ||||
|     } | ||||
|  | ||||
|     # -i and -s cannot be used together | ||||
|     if ($::opt_i && $::opt_s) { | ||||
|         my $rsp; | ||||
| @@ -619,6 +635,11 @@ sub processArgs | ||||
|                 @dispattrs = split(/,/, $::opt_i); | ||||
|                 foreach my $dattr (@dispattrs) | ||||
|                 { | ||||
|                     # lsdef -t node -h -i nicips.eth0 | ||||
|                     if($dattr =~ /^(nic\w+)\.\w+$/) | ||||
|                     { | ||||
|                         $dattr = $1; | ||||
|                     } | ||||
|                     $dispattrhash{$dattr} = 1; | ||||
|                 } | ||||
|             } | ||||
| @@ -909,6 +930,16 @@ sub processArgs | ||||
|     if ($::opt_i) | ||||
|     { | ||||
|         @::AttrList = split(',', $::opt_i); | ||||
|         # nicips.<nic> should be changed to nicips | ||||
|         my $i = 0; | ||||
|         for ($i=0; $i < (scalar @::AttrList) ; $i++ ) | ||||
|         { | ||||
|             if($::AttrList[$i] =~ /^(nic\w+)\.(\w+)$/) | ||||
|             { | ||||
|                 $::AttrList[$i] = $1;  | ||||
|                 push @{$::NicsAttrHash{$::AttrList[$i]}}, $2; | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     return 0; | ||||
| @@ -3123,18 +3154,49 @@ sub defls | ||||
|                                 } | ||||
|                                 else | ||||
|                                 { | ||||
|  | ||||
|                                     # since they asked for this attr | ||||
|                                     #   show it even if not set | ||||
|                                     if (!$::opt_c) | ||||
|                                     # nics attributes, like nicips, nichostnamesuffix. | ||||
|                                     if ($showattr =~ /^nic/) | ||||
|                                     { | ||||
|                                         push (@{$rsp_info->{data}}, "    $showattr=$attrval"); | ||||
|                                     }  | ||||
|                                         my $nicval = "$showattr=$attrval"; | ||||
|                                         my $nicnames; | ||||
|                                         if (defined($::NicsAttrHash{$showattr})) | ||||
|                                         { | ||||
|                                             $nicnames = join(',', @{$::NicsAttrHash{$showattr}}); | ||||
|                                         } | ||||
|                                         my $nicsstr; | ||||
|                                         if ($nicnames) | ||||
|                                         { | ||||
|                                             $nicsstr = xCAT::DBobjUtils->expandnicsattr($nicval, $nicnames); | ||||
|                                         } | ||||
|                                         else | ||||
|                                         { | ||||
|                                             $nicsstr = xCAT::DBobjUtils->expandnicsattr($nicval); | ||||
|                                         } | ||||
|                                         # Compress mode, format the output | ||||
|                                         if ($::opt_c) | ||||
|                                         { | ||||
|                                             $nicsstr =~ s/^\s+/$obj: /; | ||||
|                                             $nicsstr =~ s/\n\s+/\n$obj: /g; | ||||
|                                         } | ||||
|                                         if ($nicsstr) | ||||
|                                         { | ||||
|                                             push (@{$rsp_info->{data}}, "$nicsstr"); | ||||
|                                         } | ||||
|                                     } | ||||
|                                     else | ||||
|                                     { | ||||
|                                         push (@{$rsp_info->{data}}, "$obj: $showattr=$attrval"); | ||||
|                                         # since they asked for this attr | ||||
|                                         #   show it even if not set | ||||
|                                         if (!$::opt_c) | ||||
|                                         { | ||||
|                                             push (@{$rsp_info->{data}}, "    $showattr=$attrval"); | ||||
|                                         }  | ||||
|                                         else | ||||
|                                         { | ||||
|                                             push (@{$rsp_info->{data}}, "$obj: $showattr=$attrval"); | ||||
|  | ||||
|                                     }  | ||||
|                                         }  | ||||
|                                     } | ||||
|                                 } | ||||
|                             } | ||||
|                         } | ||||
| @@ -3156,7 +3218,20 @@ sub defls | ||||
|                                 # don't print unless set | ||||
|                                 if ( (defined($attrval)) && ($attrval ne '') ) | ||||
|                                 { | ||||
|                                     push (@{$rsp_info->{data}}, "    $showattr=$attrval"); | ||||
|                                     # nics attributes, like nicips, nichostnamesuffix. | ||||
|                                     if ($showattr =~ /^nic/) | ||||
|                                     { | ||||
|                                         my $nicval = "$showattr=$attrval"; | ||||
|                                         my $nicsstr = xCAT::DBobjUtils->expandnicsattr($nicval); | ||||
|                                         if ($nicsstr) | ||||
|                                         { | ||||
|                                             push (@{$rsp_info->{data}}, "$nicsstr"); | ||||
|                                         } | ||||
|                                     } | ||||
|                                     else | ||||
|                                     { | ||||
|                                         push (@{$rsp_info->{data}}, "    $showattr=$attrval"); | ||||
|                                     } | ||||
|                                 } | ||||
|                             } | ||||
|                         } | ||||
| @@ -3801,6 +3876,7 @@ sub initialize_variables | ||||
|     %::objfilehash = (); | ||||
|     %::WhereHash = (); | ||||
|     @::AttrList = (); | ||||
|     %::NicsAttrHash = (); | ||||
|     @::clobjtypes = (); | ||||
|     @::fileobjtypes = (); | ||||
|     @::clobjnames = (); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user