Merge nodechmac enhance from 2.8 branch
This commit is contained in:
		@@ -690,6 +690,7 @@ sub get_nodes_profiles
 | 
			
		||||
{
 | 
			
		||||
    my $class = shift;
 | 
			
		||||
    my $nodelistref = shift;
 | 
			
		||||
    my $groupnamemode = shift;
 | 
			
		||||
    my %profile_dict;
 | 
			
		||||
 | 
			
		||||
    my $nodelisttab = xCAT::Table->new('nodelist');
 | 
			
		||||
@@ -709,8 +710,12 @@ sub get_nodes_profiles
 | 
			
		||||
                if ( $idx == 2 ){
 | 
			
		||||
                    # The group string will like @NetworkProfile_<profile name>
 | 
			
		||||
                    # So, index should +3, 2 for '__', 1 for _.
 | 
			
		||||
                    my $append_index = length($profile) + 3;
 | 
			
		||||
                    $profile_dict{$_}{$profile} = substr $group, $append_index;
 | 
			
		||||
                    if ($groupnamemode) { 
 | 
			
		||||
                        $profile_dict{$_}{$profile} = $group;
 | 
			
		||||
                    } else{
 | 
			
		||||
                        my $append_index = length($profile) + 3;
 | 
			
		||||
                        $profile_dict{$_}{$profile} = substr $group, $append_index;
 | 
			
		||||
                    }
 | 
			
		||||
                    last;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
@@ -739,7 +744,7 @@ sub get_imageprofile_prov_method
 | 
			
		||||
 | 
			
		||||
    my $nodetypestab = xCAT::Table->new('nodetype');
 | 
			
		||||
    my $entry = ($nodetypestab->getAllAttribsWhere("node = '$imgprofilename'", 'ALL' ))[0];
 | 
			
		||||
    my $osimgname = $entry->{'provmethod'};
 | 
			
		||||
    return $entry->{'provmethod'};
 | 
			
		||||
 | 
			
		||||
    #my $osimgtab = xCAT::Table->new('osimage');
 | 
			
		||||
    #my $osimgentry = ($osimgtab->getAllAttribsWhere("imagename = '$osimgname'", 'ALL' ))[0];
 | 
			
		||||
@@ -1148,3 +1153,70 @@ sub check_nicips{
 | 
			
		||||
    return (0, \%nics_hash, "");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#-------------------------------------------------------------------------------
 | 
			
		||||
=head3 gen_chain_for_profiles
 | 
			
		||||
    Description: Generate a chain string based on Network/Hardware/Image profiles.
 | 
			
		||||
    Arguments: $profiles_hash: The reference for profiles hash.
 | 
			
		||||
             For example: 
 | 
			
		||||
             $profiles_hash = { 'HardwareProfile' => 'IBM_NeXtScale_M4',
 | 
			
		||||
                                'ImageProfile' => 'rhels6.5-x86_64-stateful-compute',
 | 
			
		||||
                                'NetworkProfile' => 'default_network_profile',
 | 
			
		||||
                              }
 | 
			
		||||
             $hw_reconfig: the flag shows whether we need re-configure all hardware
 | 
			
		||||
                           relative settings or not: like runcmds, runimg...etc
 | 
			
		||||
    Returns: ($retcode, $chain)
 | 
			
		||||
              $retcode = 1. Generate chain failed, $chain stands for error message.
 | 
			
		||||
              $retcode = 0. Generate chain OK. $chain stands for the chain string.
 | 
			
		||||
 | 
			
		||||
=cut
 | 
			
		||||
#-------------------------------------------------------------------------------
 | 
			
		||||
sub gen_chain_for_profiles{
 | 
			
		||||
    my $class = shift;
 | 
			
		||||
    my $profiles_hashref = shift;
 | 
			
		||||
    my $hw_reconfig = shift;
 | 
			
		||||
    my $final_chain = "";
 | 
			
		||||
    if (! $profiles_hashref){
 | 
			
		||||
        return (1, "Missing parameter for gen_chain_for_profiles.");
 | 
			
		||||
    }
 | 
			
		||||
    # A node must have at least imageprofile and network profile.
 | 
			
		||||
    unless (defined $profiles_hashref->{'ImageProfile'}){
 | 
			
		||||
        return (1, "No imageprofile specified in profiles hash.");
 | 
			
		||||
    }
 | 
			
		||||
    unless (defined $profiles_hashref->{'NetworkProfile'}){
 | 
			
		||||
        return (1, "No networkprofile specified in profiles hash.");
 | 
			
		||||
    }
 | 
			
		||||
    my $hwprofile = $profiles_hashref->{'HardwareProfile'};
 | 
			
		||||
    my $imgprofile = $profiles_hashref->{'ImageProfile'};
 | 
			
		||||
    my $netprofile = $profiles_hashref->{'NetworkProfile'};
 | 
			
		||||
 | 
			
		||||
    # Get node's provisioning method
 | 
			
		||||
    my $provmethod = xCAT::ProfiledNodeUtils->get_imageprofile_prov_method($imgprofile);
 | 
			
		||||
    unless ($provmethod ){
 | 
			
		||||
        return (1, "Can not get provisioning method for image profile $imgprofile");
 | 
			
		||||
    }
 | 
			
		||||
    my $netprofileattr = xCAT::ProfiledNodeUtils->get_nodes_nic_attrs([$netprofile])->{$netprofile};
 | 
			
		||||
    unless ($netprofileattr){
 | 
			
		||||
        return (1, "Can not get attributes for network profile $netprofile");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    $final_chain = 'osimage='.$provmethod.":--noupdateinitrd";
 | 
			
		||||
    # get the chain attribute from hardwareprofile and insert it to node.
 | 
			
		||||
    if (defined $hwprofile and $hwprofile and $hw_reconfig){
 | 
			
		||||
        my $chaintab = xCAT::Table->new('chain');
 | 
			
		||||
        my $chain = $chaintab->getNodeAttribs($hwprofile, ['chain']);
 | 
			
		||||
        if (exists $chain->{'chain'}) {
 | 
			
		||||
               my $hw_chain = $chain->{'chain'};
 | 
			
		||||
               $final_chain = $hw_chain.',osimage='.$provmethod.":--noupdateinitrd";
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    #run bmcsetups.
 | 
			
		||||
    if ((exists $netprofileattr->{"bmc"}) and $hw_reconfig){ 
 | 
			
		||||
        if (index($final_chain, "runcmd=bmcsetup") == -1){
 | 
			
		||||
            $final_chain = 'runcmd=bmcsetup,'.$final_chain.':reboot4deploy';
 | 
			
		||||
        }
 | 
			
		||||
        else{
 | 
			
		||||
            $final_chain = $final_chain.':reboot4deploy';
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    return (0, $final_chain);
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -862,19 +862,9 @@ Usage:
 | 
			
		||||
 | 
			
		||||
    my $retref;
 | 
			
		||||
    my $retstrref;
 | 
			
		||||
    # Call update plugins first.
 | 
			
		||||
    if(exists $args_dict{'hardwareprofile'} || exists $args_dict{'imageprofile'}){
 | 
			
		||||
        setrsp_progress("Configuring nodes...");
 | 
			
		||||
        $retref = "";
 | 
			
		||||
        $retref = xCAT::Utils->runxcmd({command=>["kitnodeupdate"], node=>$nodes, sequential=>[1]}, $request_command, 0, 2);
 | 
			
		||||
        $retstrref = parse_runxcmd_ret($retref);
 | 
			
		||||
        if ($::RUNCMD_RC != 0){
 | 
			
		||||
            setrsp_progress("Warning: failed to call kit commands.");
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    # If network profile specified. Need re-generate IPs for all nodess again.
 | 
			
		||||
     # As new design, ignore BMC/FSP NIC while reinstall nodes
 | 
			
		||||
    # As new design, ignore BMC/FSP NIC while reinstall nodes
 | 
			
		||||
    if(exists $args_dict{'networkprofile'}){
 | 
			
		||||
        my $newNetProfileName = $args_dict{'networkprofile'};
 | 
			
		||||
        my $oldNetProfileName = $nodeoldprofiles{'networkprofile'};
 | 
			
		||||
@@ -903,7 +893,73 @@ Usage:
 | 
			
		||||
            setrsp_progress("Warning: failed to generate IPs for nodes.");
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    # Update node's chain table if we need to re-provisioning OS...
 | 
			
		||||
    # We need to re-provision OS if:
 | 
			
		||||
    # hardware profile changed  or
 | 
			
		||||
    # image profile changed or
 | 
			
		||||
    # network profile changed.
 | 
			
		||||
    if ((exists $args_dict{'networkprofile'}) or 
 | 
			
		||||
        (exists $args_dict{'hardwareprofile'}) or
 | 
			
		||||
        (exists $args_dict{'imageprofile'})){
 | 
			
		||||
 | 
			
		||||
        my $nodetypetab = xCAT::Table->new('nodetype');
 | 
			
		||||
        my $firstnode = $nodes->[0];
 | 
			
		||||
        my $profiles = xCAT::ProfiledNodeUtils->get_nodes_profiles([$firstnode], 1);
 | 
			
		||||
        unless ($profiles){
 | 
			
		||||
            setrsp_errormsg("Can not get node profiles.");
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        # If we have hardware changes, reconfigure everything including BMC.
 | 
			
		||||
        my $chainret = 0;
 | 
			
		||||
        my $chainstr = "";
 | 
			
		||||
        if(exists $args_dict{'hardwareprofile'}){
 | 
			
		||||
            ($chainret, $chainstr) = xCAT::ProfiledNodeUtils->gen_chain_for_profiles($profiles->{$firstnode}, 1);
 | 
			
		||||
        } else {
 | 
			
		||||
            ($chainret, $chainstr) = xCAT::ProfiledNodeUtils->gen_chain_for_profiles($profiles->{$firstnode}, 0);
 | 
			
		||||
        }
 | 
			
		||||
        if ($chainret != 0){
 | 
			
		||||
            setrsp_errormsg("Failed to generate chain string for nodes.");
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        # DB update: chain table.
 | 
			
		||||
        my %chainAttr = {};
 | 
			
		||||
        foreach my $node (@$nodes){
 | 
			
		||||
            $chainAttr{$node}{'chain'} = $chainstr;
 | 
			
		||||
        }
 | 
			
		||||
        my $chaintab = xCAT::Table->new('chain', -create=>1);
 | 
			
		||||
        $chaintab->setNodesAttribs(\%chainAttr);
 | 
			
		||||
        $chaintab->close();
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        # Run node plugins to refresh node relateive configurations.
 | 
			
		||||
        $retref = {};
 | 
			
		||||
        setrsp_progress("Updating DNS entries");
 | 
			
		||||
        $retref = xCAT::Utils->runxcmd({command=>["makedns"], node=>$nodes, arg=>['-d']}, $request_command, 0, 2);
 | 
			
		||||
        my $retstrref = parse_runxcmd_ret($retref);
 | 
			
		||||
        if ($::RUNCMD_RC != 0){
 | 
			
		||||
            setrsp_progress("Warning: failed to call kit commands.");
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        $retref = {};
 | 
			
		||||
        setrsp_progress("Updating hosts entries");
 | 
			
		||||
        $retref = xCAT::Utils->runxcmd({command=>["makehosts"], node=>$nodes, 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=>$nodes, macflag=>[1]}, $request_command, 0, 2);
 | 
			
		||||
        $retstrref = parse_runxcmd_ret($retref);
 | 
			
		||||
        if ($::RUNCMD_RC != 0){
 | 
			
		||||
            setrsp_progress("Warning: failed to call kit commands.");
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
    }
 | 
			
		||||
    setrsp_progress("Updated the image/network/hardware profiles used by nodes.");
 | 
			
		||||
    setrsp_success($nodes);
 | 
			
		||||
}
 | 
			
		||||
@@ -1088,65 +1144,6 @@ Usage:
 | 
			
		||||
        $ppctab->close();
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    #9. If provisioning NIC ip or BMC ip changed for nodes, update chain table
 | 
			
		||||
    # If FSP ip changed for nodes, push the new ip to fsp and establish hardware connection
 | 
			
		||||
    my @kitcommands = ();
 | 
			
		||||
    if ( $provision_flag or  $bmc_flag) {
 | 
			
		||||
        #Get node's provmethod. 
 | 
			
		||||
        my $nodetypetab = xCAT::Table->new('nodetype');
 | 
			
		||||
        my $firstnode = $nodes->[0];
 | 
			
		||||
        my $records = $nodetypetab->getNodeAttribs($firstnode, ['node', 'provmethod']);
 | 
			
		||||
        my $imgname = $records->{provmethod};
 | 
			
		||||
        
 | 
			
		||||
        my $chainstr = "osimage=$imgname";
 | 
			
		||||
        if ( $bmc_flag ) {
 | 
			
		||||
           $chainstr = "runcmd=bmcsetup,osimage=$imgname:reboot4deploy";
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
        # Update chain table
 | 
			
		||||
        my %chainAttr = {};
 | 
			
		||||
        foreach my $node (@$nodes){
 | 
			
		||||
            $chainAttr{$node}{'chain'} = $chainstr;
 | 
			
		||||
        }
 | 
			
		||||
        my $chaintab = xCAT::Table->new('chain', -create=>1);
 | 
			
		||||
        $chaintab->setNodesAttribs(\%chainAttr);
 | 
			
		||||
        $chaintab->close();
 | 
			
		||||
        
 | 
			
		||||
        # Remove all nodes information
 | 
			
		||||
        push(@kitcommands, "removenodes");
 | 
			
		||||
        # Add all nodes information back
 | 
			
		||||
        push(@kitcommands, "kitnodeadd");  
 | 
			
		||||
        
 | 
			
		||||
    } elsif ( $fsp_flag ) {
 | 
			
		||||
        # Remove all nodes information
 | 
			
		||||
        push(@kitcommands, "removenodes");
 | 
			
		||||
        # Add all nodes information back
 | 
			
		||||
        push(@kitcommands, "kitnodeadd");
 | 
			
		||||
    } else {
 | 
			
		||||
        push(@kitcommands, "kitnoderefresh");
 | 
			
		||||
    }    
 | 
			
		||||
 | 
			
		||||
    #10. Call plugins.   
 | 
			
		||||
    foreach my $command (@kitcommands) {
 | 
			
		||||
        my $retref;
 | 
			
		||||
        if ($command eq 'removenodes'){
 | 
			
		||||
            setrsp_progress("Updating DNS entries");
 | 
			
		||||
            $retref = xCAT::Utils->runxcmd({command=>["makedns"], node=>$nodes, arg=>['-d']}, $request_command, 0, 2);
 | 
			
		||||
 | 
			
		||||
            setrsp_progress("Updating hosts entries");
 | 
			
		||||
            $retref = "";
 | 
			
		||||
            $retref = xCAT::Utils->runxcmd({command=>["makehosts"], node=>$nodes, arg=>['-d']}, $request_command, 0, 2);
 | 
			
		||||
            next;
 | 
			
		||||
        }
 | 
			
		||||
        $retref = "";
 | 
			
		||||
        $retref = xCAT::Utils->runxcmd({command=>[$command], node=>$nodes, sequential=>[1]}, $request_command, 0, 2);
 | 
			
		||||
        my $retstrref = parse_runxcmd_ret($retref);
 | 
			
		||||
        if ($::RUNCMD_RC != 0){
 | 
			
		||||
            setrsp_progress("Warning: failed to call kit commands.");
 | 
			
		||||
            last;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    setrsp_progress("Re-generated node's IPs for specified nics.");
 | 
			
		||||
    setrsp_success($nodes);
 | 
			
		||||
}
 | 
			
		||||
@@ -1287,20 +1284,59 @@ Usage:
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    # re-create the chain record as updating mac may means for replacing a new brand hardware...
 | 
			
		||||
    # Call Plugins.
 | 
			
		||||
    my $profiles = xCAT::ProfiledNodeUtils->get_nodes_profiles([$hostname], 1);
 | 
			
		||||
    unless ($profiles){
 | 
			
		||||
        setrsp_errormsg("Can not get node profiles.");
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    (my $chainret, my $chainstr) = xCAT::ProfiledNodeUtils->gen_chain_for_profiles($profiles->{$hostname}, 1);
 | 
			
		||||
    if ($chainret != 0){
 | 
			
		||||
        setrsp_errormsg("Failed to generate chain string for nodes.");
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    # 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();
 | 
			
		||||
 | 
			
		||||
    # Call Plugins.
 | 
			
		||||
    # DB update: chain table.
 | 
			
		||||
    my $chaintab = xCAT::Table->new('chain', -create=>1);
 | 
			
		||||
    $mactab->setNodeAttribs($hostname, {chain=>$chainstr});
 | 
			
		||||
    $chaintab->close();
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    # Run node plugins to refresh node relateive configurations.
 | 
			
		||||
    setrsp_progress("Configuring nodes...");
 | 
			
		||||
    my $retref = xCAT::Utils->runxcmd({command=>["kitnodeupdate"], node=>[$hostname], sequential=>[1]}, $request_command, 0, 2);
 | 
			
		||||
    my $retref = {};
 | 
			
		||||
    setrsp_progress("Updating DNS entries");
 | 
			
		||||
    $retref = xCAT::Utils->runxcmd({command=>["makedns"], node=>[$hostname], arg=>['-d']}, $request_command, 0, 2);
 | 
			
		||||
    my $retstrref = parse_runxcmd_ret($retref);
 | 
			
		||||
    if ($::RUNCMD_RC != 0){
 | 
			
		||||
        setrsp_progress("Warning: failed to call kit commands.");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    $retref = {};
 | 
			
		||||
    setrsp_progress("Updating hosts entries");
 | 
			
		||||
    $retref = xCAT::Utils->runxcmd({command=>["makehosts"], 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);
 | 
			
		||||
    if ($::RUNCMD_RC != 0){
 | 
			
		||||
        setrsp_progress("Warning: failed to call kit commands.");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    # Update node's status.
 | 
			
		||||
    setrsp_progress("Updating node status...");
 | 
			
		||||
    xCAT::Utils->runxcmd({command=>["updatenodestat"], node=>[$hostname], arg=>['defined']}, $request_command, -1, 2);
 | 
			
		||||
@@ -1834,6 +1870,15 @@ sub gen_new_hostinfo_dict{
 | 
			
		||||
    # Get node's provisioning method
 | 
			
		||||
    my $provmethod = xCAT::ProfiledNodeUtils->get_imageprofile_prov_method($args_dict{'imageprofile'});
 | 
			
		||||
 | 
			
		||||
    # Generate node's chain.
 | 
			
		||||
    my %nodeprofiles = ('NetworkProfile' => $args_dict{'networkprofile'}, 
 | 
			
		||||
                        'ImageProfile' => $args_dict{'imageprofile'});
 | 
			
		||||
    if (defined $args_dict{'hardwareprofile'}) {$nodeprofiles{'HardwareProfile'} =  $args_dict{'hardwareprofile'}}
 | 
			
		||||
    (my $errcode, my $chainstr) = xCAT::ProfiledNodeUtils->gen_chain_for_profiles(\%nodeprofiles, 1);
 | 
			
		||||
    if ($errcode != 0){
 | 
			
		||||
        return (0, "Failed to generate chain for nodes.");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    # start to check windows nodes, product will indicate it is a windows node:  win2k8r2.enterprise
 | 
			
		||||
    my ($osvers, $osprofile) = xCAT::ProfiledNodeUtils->get_imageprofile_prov_osvers($provmethod);
 | 
			
		||||
    my $product = undef;
 | 
			
		||||
@@ -1978,23 +2023,10 @@ sub gen_new_hostinfo_dict{
 | 
			
		||||
        my $hardwareprofile = $args_dict{'hardwareprofile'};
 | 
			
		||||
        my $chain = $chaintab->getNodeAttribs($hardwareprofile, ['chain']);
 | 
			
		||||
 | 
			
		||||
        if (exists $chain->{'chain'}) {
 | 
			
		||||
           my $hardwareprofile_chain = $chain->{'chain'};
 | 
			
		||||
           $hostinfo_dict{$item}{"chain"} = $hardwareprofile_chain.',osimage='.$provmethod.":--noupdateinitrd";
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        else {
 | 
			
		||||
           $hostinfo_dict{$item}{"chain"} = 'osimage='.$provmethod.":--noupdateinitrd";
 | 
			
		||||
        }
 | 
			
		||||
        $hostinfo_dict{$item}{"chain"} = $chainstr;
 | 
			
		||||
 | 
			
		||||
        if (exists $netprofileattr{"bmc"}){ # Update BMC records.
 | 
			
		||||
            $hostinfo_dict{$item}{"mgt"} = "ipmi";
 | 
			
		||||
            if (index($hostinfo_dict{$item}{"chain"}, "runcmd=bmcsetup") == -1){
 | 
			
		||||
                $hostinfo_dict{$item}{"chain"} = 'runcmd=bmcsetup,'.$hostinfo_dict{$item}{"chain"}.':reboot4deploy';
 | 
			
		||||
            }
 | 
			
		||||
            else{
 | 
			
		||||
                $hostinfo_dict{$item}{"chain"} = $hostinfo_dict{$item}{"chain"}.':reboot4deploy';
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            if (exists $ipshash{"bmc"}){
 | 
			
		||||
                $hostinfo_dict{$item}{"bmc"} = $ipshash{"bmc"};
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user