fix issue 241844 The added os packages are not installed when reinstall nodes.
This commit is contained in:
		@@ -1302,26 +1302,50 @@ Usage:
 | 
			
		||||
    my $nodelist = $request->{node};
 | 
			
		||||
    my $hostname = $nodelist->[0];
 | 
			
		||||
 | 
			
		||||
    # Validate MAC address
 | 
			
		||||
    my $recordsref = xCAT::ProfiledNodeUtils->get_allnode_singleattrib_hash('mac', 'mac');
 | 
			
		||||
    %allmacs = %$recordsref;
 | 
			
		||||
    foreach (keys %allmacs){
 | 
			
		||||
        my @hostentries = split(/\|/, $_);
 | 
			
		||||
        foreach my $hostandmac ( @hostentries){
 | 
			
		||||
            my ($macstr, $machostname) = split("!", $hostandmac);
 | 
			
		||||
            $allmacs{$macstr} = 0;
 | 
			
		||||
    if("__NOMAC__" eq $args_dict{"mac"}) {
 | 
			
		||||
        # Validate if node is bind on a switch
 | 
			
		||||
        my $switch_table = xCAT::Table->new("switch");
 | 
			
		||||
        my @item = $switch_table->getAttribs({'node' => $hostname}, 'switch', 'port');
 | 
			
		||||
        my $item_num = @item;
 | 
			
		||||
        my $switch_valid = 0;
 | 
			
		||||
        unless($item[0])
 | 
			
		||||
        {
 | 
			
		||||
            setrsp_errormsg("Failed to replace node <$hostname>.  Switch information cannot be retrieved. Ensure that the switch is configured correctly.");
 | 
			
		||||
            return;
 | 
			
		||||
        } else {
 | 
			
		||||
            foreach my $switch_item (@item){
 | 
			
		||||
                if($switch_item->{'switch'} && $switch_item->{'port'}){
 | 
			
		||||
                    $switch_valid = 1;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        unless ($switch_valid)
 | 
			
		||||
        {
 | 
			
		||||
            setrsp_errormsg("Failed to replace node <$hostname>. Switch information cannot be retrieved. Ensure that the switch is configured correctly.");
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
    } else {
 | 
			
		||||
        #Validate MAC address
 | 
			
		||||
        my $recordsref = xCAT::ProfiledNodeUtils->get_allnode_singleattrib_hash('mac', 'mac');
 | 
			
		||||
        %allmacs = %$recordsref;
 | 
			
		||||
        foreach (keys %allmacs){
 | 
			
		||||
            my @hostentries = split(/\|/, $_);
 | 
			
		||||
            foreach my $hostandmac ( @hostentries){
 | 
			
		||||
                my ($macstr, $machostname) = split("!", $hostandmac);
 | 
			
		||||
                $allmacs{$macstr} = 0;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        %allmacsupper = ();
 | 
			
		||||
        foreach (keys %allmacs){
 | 
			
		||||
            $allmacsupper{uc($_)} = 0;
 | 
			
		||||
        }
 | 
			
		||||
        if (exists $allmacsupper{uc($args_dict{"mac"})}){
 | 
			
		||||
            setrsp_errormsg("The specified MAC address $args_dict{'mac'} already exists. You must use a different MAC address.");
 | 
			
		||||
            return;
 | 
			
		||||
        } elsif(! xCAT::NetworkUtils->isValidMAC($args_dict{'mac'})) {
 | 
			
		||||
            setrsp_errormsg("The specified MAC address $args_dict{'mac'} is invalid. You must use a valid MAC address.");
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    %allmacsupper = ();
 | 
			
		||||
    foreach (keys %allmacs){
 | 
			
		||||
        $allmacsupper{uc($_)} = 0;
 | 
			
		||||
    }
 | 
			
		||||
    if (exists $allmacsupper{uc($args_dict{"mac"})}){
 | 
			
		||||
        setrsp_errormsg("The specified MAC address $args_dict{'mac'} already exists. You must use a different MAC address.");
 | 
			
		||||
        return;
 | 
			
		||||
    } elsif(! xCAT::NetworkUtils->isValidMAC($args_dict{'mac'})){
 | 
			
		||||
        setrsp_errormsg("The specified MAC address $args_dict{'mac'} is invalid. You must use a valid MAC address.");
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    # re-create the chain record as updating mac may means for replacing a new brand hardware...
 | 
			
		||||
@@ -1341,9 +1365,19 @@ Usage:
 | 
			
		||||
    # Update database records.
 | 
			
		||||
    setrsp_progress("Updating database...");
 | 
			
		||||
    # MAC table
 | 
			
		||||
    my $mactab = xCAT::Table->new('mac',-create=>1);
 | 
			
		||||
    $mactab->setNodeAttribs($hostname, {mac=>$args_dict{'mac'}});
 | 
			
		||||
    $mactab->close();
 | 
			
		||||
    if("__NOMAC__" eq $args_dict{"mac"})
 | 
			
		||||
	{
 | 
			
		||||
        my $mactab = xCAT::Table->new('mac',-create=>1);
 | 
			
		||||
        my %keyhash;
 | 
			
		||||
        $keyhash{'node'} = $hostname;
 | 
			
		||||
        $mactab->delEntries(\%keyhash);
 | 
			
		||||
        $mactab->commit();
 | 
			
		||||
        $mactab->close();
 | 
			
		||||
	} else {
 | 
			
		||||
        my $mactab = xCAT::Table->new('mac',-create=>1);
 | 
			
		||||
        $mactab->setNodeAttribs($hostname, {mac=>$args_dict{'mac'}});
 | 
			
		||||
        $mactab->close();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
    # DB update: chain table.
 | 
			
		||||
    my $chaintab = xCAT::Table->new('chain', -create=>1);
 | 
			
		||||
@@ -1370,6 +1404,17 @@ Usage:
 | 
			
		||||
        setrsp_progress("Warning: failed to call kit commands.");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if("__NOMAC__" eq $args_dict{"mac"})
 | 
			
		||||
    {
 | 
			
		||||
        setrsp_progress("Updating DHCP entries");
 | 
			
		||||
        $retref = xCAT::Utils->runxcmd({command=>["makedhcp"], node=>[$hostname], arg=>['-d']}, $request_command, 0, 2);
 | 
			
		||||
        $retref = {};
 | 
			
		||||
        $retstrref = parse_runxcmd_ret($retref);
 | 
			
		||||
        if ($::RUNCMD_RC != 0){
 | 
			
		||||
            setrsp_progress("Warning: failed to call kit commands.");
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    setrsp_progress("Re-creating nodes...");
 | 
			
		||||
    $retref = xCAT::Utils->runxcmd({command=>["kitnodeadd"], node=>[$hostname], macflag=>[1]}, $request_command, 0, 2);
 | 
			
		||||
    $retstrref = parse_runxcmd_ret($retref);
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user