Resolve 2 issues: 1- restrict numric part length in hostname format; 2- resolve db not update timely after calling nodeaddunmgd
git-svn-id: https://svn.code.sf.net/p/xcat/code/xcat-core/trunk@14358 8638fb3e-16cb-4fca-ae20-7b5d299a9bcd
This commit is contained in:
parent
ab3a2ea0bb
commit
5ed353a3ae
@ -70,6 +70,7 @@ sub get_allocable_staticips_innet
|
||||
Description : Generate numric hostnames using numric template name.
|
||||
Arguments : $format - The hostname format string..
|
||||
$rank - The start number.
|
||||
$amount - The total hostname number to be generated.
|
||||
Returns : numric hostname list
|
||||
Example :
|
||||
calling genhosts_with_numric_tmpl("compute#NNnode") will return a list like:
|
||||
@ -79,10 +80,10 @@ sub get_allocable_staticips_innet
|
||||
#-------------------------------------------------------------------------------
|
||||
sub genhosts_with_numric_tmpl
|
||||
{
|
||||
my ($class, $format, $rank) = @_;
|
||||
my ($class, $format, $rank, $amount) = @_;
|
||||
|
||||
my ($prefix, $appendix, $len) = xCAT::ProfiledNodeUtils->split_hostname($format, 'N');
|
||||
return xCAT::ProfiledNodeUtils->gen_numric_hostnames($prefix, $appendix, $len, $rank);
|
||||
return xCAT::ProfiledNodeUtils->gen_numric_hostnames($prefix, $appendix, $len, $rank, $amount);
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
@ -133,6 +134,8 @@ sub split_hostname
|
||||
Arguments : $prefix - The prefix string of the hostname.
|
||||
$appendix - The appendix string of the hostname.
|
||||
$len - the numric number length in hostname.
|
||||
$rank - the start number for numric part
|
||||
$amount - the amount of hostnames to be generated.
|
||||
Returns : numric hostname list
|
||||
Example :
|
||||
calling gen_numric_hostnames("compute", "node",2) will return a list like:
|
||||
@ -142,7 +145,7 @@ sub split_hostname
|
||||
#-------------------------------------------------------------------------------
|
||||
sub gen_numric_hostnames
|
||||
{
|
||||
my ($class, $prefix, $appendix, $len, $rank) = @_;
|
||||
my ($class, $prefix, $appendix, $len, $rank, $amount) = @_;
|
||||
my @hostnames;
|
||||
my $cnt = 0;
|
||||
|
||||
@ -155,6 +158,9 @@ sub gen_numric_hostnames
|
||||
my $fullnum = $maxnum + $cnt;
|
||||
my $hostname = $prefix.(substr $fullnum, 1).$appendix;
|
||||
push (@hostnames, $hostname);
|
||||
if ($amount && (@hostnames == $amount)){
|
||||
last;
|
||||
}
|
||||
$cnt++;
|
||||
}
|
||||
return \@hostnames;
|
||||
@ -177,13 +183,25 @@ sub gen_numric_hostnames
|
||||
sub get_hostname_format_type{
|
||||
my ($class, $format) = @_;
|
||||
my $type;
|
||||
my ($prefix, $appendix, $rlen, $nlen);
|
||||
|
||||
my $ridx = index $format, "#R";
|
||||
my $nidx = index $format, "#N";
|
||||
if ($ridx >= 0){
|
||||
$type = "rack";
|
||||
($prefix, $appendix, $rlen) = xCAT::ProfiledNodeUtils->split_hostname($format, 'R');
|
||||
($prefix, $appendix, $nlen) = xCAT::ProfiledNodeUtils->split_hostname($format, 'N');
|
||||
if ($rlen >= 10 || $nlen >= 10){
|
||||
$type = "unknown";
|
||||
} else{
|
||||
$type = "rack";
|
||||
}
|
||||
} elsif ($nidx >= 0){
|
||||
$type = "numric";
|
||||
($prefix, $appendix, $nlen) = xCAT::ProfiledNodeUtils->split_hostname($format, 'N');
|
||||
if ($nlen >= 10){
|
||||
$type = "unknown";
|
||||
} else{
|
||||
$type = "numric";
|
||||
}
|
||||
} else{
|
||||
$type = "unknown";
|
||||
}
|
||||
|
@ -608,15 +608,20 @@ Usage:
|
||||
return;
|
||||
}
|
||||
|
||||
# run nodeadd to create node records.
|
||||
my $retref = xCAT::Utils->runxcmd({command=>["nodeadd"], arg=>[$args_dict{"hostname"}, "groups=__Unmanaged", "hosts.ip=$args_dict{'ip'}"]}, $request_command, 0, 2);
|
||||
my %updatenodeshash = ();
|
||||
$updatenodeshash{$args_dict{'hostname'}}{'ip'} = $args_dict{'ip'};
|
||||
my $hoststab = xCAT::Table->new('hosts',-create=>1);
|
||||
$hoststab->setNodesAttribs(\%updatenodeshash);
|
||||
$hoststab->close();
|
||||
|
||||
%updatenodeshash = ();
|
||||
$updatenodeshash{$args_dict{'hostname'}}{'groups'} = "__Unmanaged";
|
||||
my $nodetab = xCAT::Table->new('nodelist',-create=>1);
|
||||
$nodetab->setNodesAttribs(\%updatenodeshash);
|
||||
$nodetab->close();
|
||||
|
||||
my $retref = xCAT::Utils->runxcmd({command=>["makehosts"], node=>[$args_dict{"hostname"}]}, $request_command, 0, 2);
|
||||
my $retstrref = parse_runxcmd_ret($retref);
|
||||
if ($::RUNCMD_RC != 0){
|
||||
setrsp_errormsg("Failed to call nodeadd to create node.");
|
||||
return;
|
||||
}
|
||||
$retref = xCAT::Utils->runxcmd({command=>["makehosts"], node=>[$args_dict{"hostname"}]}, $request_command, 0, 2);
|
||||
$retstrref = parse_runxcmd_ret($retref);
|
||||
if ($::RUNCMD_RC != 0){
|
||||
setrsp_progress("Warning: failed to call makehosts.");
|
||||
}
|
||||
@ -1330,6 +1335,11 @@ sub parse_hosts_string{
|
||||
}
|
||||
}
|
||||
# Verify each node entry.
|
||||
my $rank = 0;
|
||||
if (exists($args_dict{'rank'})){
|
||||
$rank = $args_dict{'rank'};
|
||||
}
|
||||
|
||||
foreach (keys %::FILEATTRS){
|
||||
my $errmsg = validate_node_entry($_, $::FILEATTRS{$_});
|
||||
if ($errmsg) {
|
||||
@ -1359,16 +1369,30 @@ sub parse_hosts_string{
|
||||
}
|
||||
|
||||
# Generate hostnames based on numric hostname format.
|
||||
my $hostnamelistref;
|
||||
if (! exists $freehostnames{$numricformat}){
|
||||
my $rank = 0;
|
||||
if (exists($args_dict{'rank'})){
|
||||
$rank = $args_dict{'rank'};
|
||||
$hostnamelistref = xCAT::ProfiledNodeUtils->genhosts_with_numric_tmpl($numricformat, $rank, 10000);
|
||||
$rank = $rank + 10000;
|
||||
if (! @$hostnamelistref){
|
||||
push @invalid_records, ["__hostname__", "Can not generate sufficient hostnames from hostname format."];
|
||||
last;
|
||||
}else{
|
||||
$freehostnames{$numricformat} = $hostnamelistref;
|
||||
}
|
||||
$freehostnames{$numricformat} = xCAT::ProfiledNodeUtils->genhosts_with_numric_tmpl($numricformat, $rank);
|
||||
}
|
||||
my $hostnamelistref = $freehostnames{$numricformat};
|
||||
|
||||
$hostnamelistref = $freehostnames{$numricformat};
|
||||
my $nexthostname = shift @$hostnamelistref;
|
||||
while (exists $allhostnames{$nexthostname}){
|
||||
if (! @$hostnamelistref){
|
||||
$hostnamelistref = xCAT::ProfiledNodeUtils->genhosts_with_numric_tmpl($numricformat, $rank, 10000);
|
||||
$rank = $rank + 10000;
|
||||
if(! @$hostnamelistref){
|
||||
push @invalid_records, ["__hostname__", "Can not generate sufficient hostnames from hostname format."];
|
||||
last;
|
||||
}
|
||||
}
|
||||
|
||||
$nexthostname = shift @$hostnamelistref;
|
||||
}
|
||||
$hostinfo_dict{$nexthostname} = $::FILEATTRS{$_};
|
||||
|
Loading…
Reference in New Issue
Block a user