mirror of
				https://github.com/xcat2/xcat-core.git
				synced 2025-11-04 13:22:36 +00:00 
			
		
		
		
	Xeon Phi support. Support nfs mount to any server which set in statelite table. Support power management setting.
This commit is contained in:
		@@ -1465,7 +1465,7 @@ cfgmgt => {
 | 
			
		||||
   },
 | 
			
		||||
},
 | 
			
		||||
mic => {
 | 
			
		||||
    cols => [qw(node host id nodetype bridge onboot vlog comments disable)],
 | 
			
		||||
    cols => [qw(node host id nodetype bridge onboot vlog powermgt comments disable)],
 | 
			
		||||
    keys => [qw(node)],
 | 
			
		||||
    table_desc => 'The host, slot id and configuraton of the mic (Many Integrated Core).',
 | 
			
		||||
    descriptions => {
 | 
			
		||||
@@ -1476,6 +1476,7 @@ mic => {
 | 
			
		||||
        bridge => 'The virtual bridge on the host node which the mic connected to.',
 | 
			
		||||
        onboot => 'Set mic to autoboot when mpss start. Valid values: yes|no. Default is yes.',
 | 
			
		||||
        vlog => 'Set the Verbose Log to console. Valid values: yes|no. Default is no.',
 | 
			
		||||
        powermgt => 'Set the Power Management for mic node. The value must be the [cpufreq=<on | off>]![corec6=<on | off>]![pc3=<on | off>]![pc6=<on | off>].',
 | 
			
		||||
        comments => 'Any user-provided notes.',
 | 
			
		||||
        disable => "Do not use.  tabprune will not work if set to yes or 1",
 | 
			
		||||
    },
 | 
			
		||||
@@ -2446,6 +2447,11 @@ my @nodeattrs = (
 | 
			
		||||
		tabentry => 'mic.vlog',
 | 
			
		||||
		access_tabentry => 'mic.node=attr:node',
 | 
			
		||||
	},
 | 
			
		||||
	{attr_name => 'micpowermgt',
 | 
			
		||||
		only_if => 'mgt=mic',
 | 
			
		||||
		tabentry => 'mic.powermgt',
 | 
			
		||||
		access_tabentry => 'mic.node=attr:node',
 | 
			
		||||
	},
 | 
			
		||||
	
 | 
			
		||||
  );	# end of @nodeattrs that applies to both nodes and groups
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -674,7 +674,7 @@ sub nodeset {
 | 
			
		||||
        xCAT::MsgUtils->message("E", {error=>["Cannot open the mic table."], errorcode=>["1"]}, $callback);
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
    my $michash = $mictab->getNodesAttribs($nodes, ['bridge', 'onboot', 'vlog']);
 | 
			
		||||
    my $michash = $mictab->getNodesAttribs($nodes, ['bridge', 'onboot', 'vlog', 'powermgt']);
 | 
			
		||||
 | 
			
		||||
    # get ip for the mic nodes from hosts table
 | 
			
		||||
    my $hosttab = xCAT::Table->new("hosts");
 | 
			
		||||
@@ -711,6 +711,13 @@ sub nodeset {
 | 
			
		||||
    }
 | 
			
		||||
    my @lfentall = $lftab->getAttribs({'image'=>'ALL'}, 'file', 'options');
 | 
			
		||||
 | 
			
		||||
    # get the nfs server from statelite table
 | 
			
		||||
    my $sltab = xCAT::Table->new('statelite');
 | 
			
		||||
    unless ($sltab) {
 | 
			
		||||
        xCAT::MsgUtils->message("E", {error=>["Cannot open the statelite table."], errorcode=>["1"]}, $callback);
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
    my $slhash = $sltab->getNodesAttribs($nodes, ['statemnt']);
 | 
			
		||||
 | 
			
		||||
    # get the tftp dir and create the path for mic configuration
 | 
			
		||||
    my $tftpdir = "/tftpboot";
 | 
			
		||||
@@ -801,6 +808,12 @@ sub nodeset {
 | 
			
		||||
            if (defined ($michash->{$micname}->[0]->{'vlog'})) {
 | 
			
		||||
                $micattrs .= "|vlog=$michash->{$micname}->[0]->{'vlog'}";
 | 
			
		||||
            }
 | 
			
		||||
            if (defined ($michash->{$micname}->[0]->{'powermgt'})) {
 | 
			
		||||
                $micattrs .= "|powermgt=$michash->{$micname}->[0]->{'powermgt'}";
 | 
			
		||||
            }
 | 
			
		||||
            if (defined ($slhash->{$micname}->[0]->{'statemnt'})) {
 | 
			
		||||
                $micattrs .= "|statemnt=$slhash->{$micname}->[0]->{statemnt}";
 | 
			
		||||
            }
 | 
			
		||||
            push @cfgfile, $micattrs;
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
 
 | 
			
		||||
@@ -100,7 +100,7 @@ while (<CFGFILE>) {
 | 
			
		||||
        my $deviceid = $1;
 | 
			
		||||
        my @params = split (/\|/, $2);
 | 
			
		||||
        foreach (@params) {
 | 
			
		||||
            my ($n, $v) = split (/=/, $_);
 | 
			
		||||
            my ($n, $v) = split (/=/, $_, 2);
 | 
			
		||||
            $miccfg{$deviceid}{$n} = $v;
 | 
			
		||||
            if ($n eq 'br') {
 | 
			
		||||
                $brgname = $v;
 | 
			
		||||
@@ -290,10 +290,11 @@ foreach my $micid (keys %miccfg) {
 | 
			
		||||
    # set the autoboot
 | 
			
		||||
    if ($miccfg{$micid}{'onboot'} =~ /no/i) {
 | 
			
		||||
        $cmd = "micctrl --autoboot=no mic$micid";
 | 
			
		||||
        runsyscmd ($cmd, "Error: failed to set the autoboot for mic.\n", 106);
 | 
			
		||||
    } elsif($miccfg{$micid}{'onboot'} =~ /yes/i) {
 | 
			
		||||
        $cmd = "micctrl --autoboot=yes mic$micid";
 | 
			
		||||
        runsyscmd ($cmd, "Error: failed to set the autoboot for mic.\n", 106);
 | 
			
		||||
    }
 | 
			
		||||
    runsyscmd ($cmd, "Error: failed to set the autoboot for mic.\n", 106);
 | 
			
		||||
 | 
			
		||||
    # set the hostname
 | 
			
		||||
    $cmd = "sed \"s/Hostname .*/Hostname \"$micname\"/\" /etc/mpss/mic$micid.conf > $tmppath/mic$micid.conf";
 | 
			
		||||
@@ -307,14 +308,44 @@ foreach my $micid (keys %miccfg) {
 | 
			
		||||
        copy ("$tmppath/mic$micid.conf", "/etc/mpss/mic$micid.conf");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    # configure the power management
 | 
			
		||||
    if (defined ($miccfg{$micid}{'powermgt'})) {
 | 
			
		||||
        $cmd = "micctrl --pm=set ";
 | 
			
		||||
        foreach my $item (split (/!/, $miccfg{$micid}{'powermgt'})) {
 | 
			
		||||
            $cmd .= " --$item ";
 | 
			
		||||
        }
 | 
			
		||||
        $cmd .= " mic$micid";
 | 
			
		||||
        runsyscmd ($cmd, "Error: failed to set power management for mic.\n", 109);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    # configure network for each mic
 | 
			
		||||
    $cmd = "micctrl --network=static --bridge=".$miccfg{$micid}{br}." --ip=".$miccfg{$micid}{ip}." mic$micid";
 | 
			
		||||
    runsyscmd ($cmd, "Error: failed to generate IP configuration for mic.\n", 104);
 | 
			
		||||
 | 
			
		||||
    # configure nfs mount for each mic
 | 
			
		||||
    foreach my $msrc (keys %{$miccfg{'micmount'}}) {
 | 
			
		||||
        $cmd = "micctrl --addnfs=$brgip:/$msrc --dir=$miccfg{micmount}{$msrc} mic$micid";
 | 
			
		||||
        my $mntsrc;
 | 
			
		||||
        if (defined $miccfg{$micid}{'statemnt'}) {
 | 
			
		||||
            if ($miccfg{$micid}{'statemnt'} =~ /:/) {
 | 
			
		||||
                # for 'statemnt' is a nfs server plus dir like 192.168.1:/nfs
 | 
			
		||||
                $mntsrc = $miccfg{$micid}{'statemnt'}."/$msrc";
 | 
			
		||||
            } else {
 | 
			
		||||
                # for 'statemnt' is a nfs server ip 192.168.0.1
 | 
			
		||||
                $mntsrc = $miccfg{$micid}{'statemnt'}.":/$msrc";
 | 
			
		||||
            }
 | 
			
		||||
        } else {
 | 
			
		||||
            $mntsrc = "$brgip:/$msrc";
 | 
			
		||||
        }
 | 
			
		||||
        $cmd = "micctrl --addnfs=$mntsrc --dir=$miccfg{micmount}{$msrc} mic$micid";
 | 
			
		||||
        runsyscmd ($cmd, "Error: failed to add nfs mount for mic.\n", 104);
 | 
			
		||||
 | 
			
		||||
        # since there's a bug that nfsserver cannot be set, just manully change it
 | 
			
		||||
        if ($mntsrc =~ /^(.+):/) {
 | 
			
		||||
            if ($1 ne $brgip) {
 | 
			
		||||
                $cmd = "sed -i \'s/$brgip/$1/g\' /var/mpss/mic$micid/etc/fstab";
 | 
			
		||||
                runsyscmd ($cmd, "Error: failed to hack nfs mount for mic.\n", 104);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    # take the configuration to effect
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user