diff --git a/perl-xCAT/xCAT/Schema.pm b/perl-xCAT/xCAT/Schema.pm index 0621748e3..fa81b9d9f 100755 --- a/perl-xCAT/xCAT/Schema.pm +++ b/perl-xCAT/xCAT/Schema.pm @@ -1496,7 +1496,19 @@ mic => { disable => "Do not use. tabprune will not work if set to yes or 1", }, }, - +capacity => { + cols => [qw(node cputype cpucount memory disksize comments disable)], + keys => [qw(node)], + table_desc => 'The basic node capacity.', + descriptions => { + node => 'The node name or group name.', + cputype => 'The cpu model name for the node.', + cpucount => 'The number of cpus for the node.', + memory => 'The size of the memory for the node.', + disksize => 'The size of the disks for the node.', + comments => 'Any user-provided notes.', + disable => "Set to 'yes' or '1' to comment out this row.", + }, ); # end of tabspec definition @@ -2467,6 +2479,25 @@ my @nodeattrs = ( tabentry => 'mic.powermgt', access_tabentry => 'mic.node=attr:node', }, +##################### +## capacity table # +##################### + {attr_name => 'cputype', + tabentry => 'capacity.cputype', + access_tabentry => 'capacity.node=attr:node', + }, + {attr_name => 'cpucount', + tabentry => 'capacity.cpucount', + access_tabentry => 'capacity.node=attr:node', + }, + {attr_name => 'memory', + tabentry => 'capacity.memory', + access_tabentry => 'capacity.node=attr:node', + }, + {attr_name => 'disksize', + tabentry => 'capacity.disksize', + access_tabentry => 'capacity.node=attr:node', + }, ); # end of @nodeattrs that applies to both nodes and groups diff --git a/xCAT-genesis-scripts/bin/dodiscovery b/xCAT-genesis-scripts/bin/dodiscovery index 40acc6e4e..904e114c2 100755 --- a/xCAT-genesis-scripts/bin/dodiscovery +++ b/xCAT-genesis-scripts/bin/dodiscovery @@ -74,7 +74,17 @@ elif [ -r /proc/device-tree/model ]; then #POWER MTM=`cat /proc/device-tree/model |awk -F, '{print $2}'` fi CPUCOUNT=`cat /proc/cpuinfo |grep "model name"|wc -l` -MEMORY=`cat /proc/meminfo |grep MemTotal|awk '{print $2}'` + +# The MEMORY will look like this: 32868920 +MEMORY=`cat /proc/meminfo |grep MemTotal|awk '{printf "%.0fMB\n", $2/1024}'` +# The MEMORY will look like this: 32GiB +#MEMORY=`lshw -C memory -short |grep "System Memory"|awk -F' ' '{print $3}'` + +# The DISKSIZE will look like this: /dev/sda:250GB,/dev/sdb:250GB +#DISKSIZE=`lshw -C disk -short |grep disk |awk -F' ' '{print $2":"$4}'|sed 'N;s/\n/,/'` +# The DISKSIZE will look like this: sdb:250GB,sda:250GB +DISKSIZE=`cat /proc/partitions |grep -e "sd.\>" |awk -F' ' '{printf "%s:%.0fGB\n", $4, $3*0.000001024}' |sed 'N;s/\n/,/'` + UUID=`sed -e 's/\(..\)\(..\)\(..\)\(..\)-\(..\)\(..\)-\(..\)\(..\)/\4\3\2\1-\6\5-\8\7/' /sys/devices/virtual/dmi/id/product_uuid` grep "model name" /proc/cpuinfo | while read line; do #to avoid pulling in tail, we do a goofy thing echo $line > /tmp/cpumod @@ -89,6 +99,7 @@ fi echo "$CPUCOUNT" >> /tmp/discopacket echo "$CPUTYPE" >> /tmp/discopacket echo "$MEMORY" >> /tmp/discopacket +echo "$DISKSIZE" >> /tmp/discopacket echo "$UUID" >> /tmp/discopacket if [ "$MTM" != "unknown" ]; then echo "$MTM" >> /tmp/discopacket diff --git a/xCAT-server/lib/xcat/plugins/nodediscover.pm b/xCAT-server/lib/xcat/plugins/nodediscover.pm index 34724164b..61268fc9b 100644 --- a/xCAT-server/lib/xcat/plugins/nodediscover.pm +++ b/xCAT-server/lib/xcat/plugins/nodediscover.pm @@ -153,6 +153,27 @@ sub process_request { $vpdtab->setNodeAttribs($node,{serial=>$request->{serial}->[0]}); } } + + # save basic capacities in the capacity table + if (defined($request->{cpucount}) or defined($request->{cputype}) or defined($request->{memory}) or defined($request->{disksize})) { + my $basicdata; + my $cap_tab = xCAT::Table->new("capacity",-create=>1); + if ($request->{memory}->[0]) { + $basicdata->{memory} = $request->{memory}->[0]; + } + if ($request->{disksize}->[0]) { + $basicdata->{disksize} = $request->{disksize}->[0]; + } + if ($request->{cpucount}->[0]) { + $basicdata->{cpucount} = $request->{cpucount}->[0]; + } + if ($request->{cputype}->[0]) { + $basicdata->{cputype} = $request->{cputype}->[0]; + } + $cap_tab->setNodeAttribs($node, $basicdata); + } + + my $nrtab; my @discoverynics; my @forcenics; #list of 'eth' style interface names to require to come up on post-discovery client dhcp restart