Howdy,

I've whipped together a very simple module for extracting some SMBIOS
variables to define additional classes, here's some example output:

---------------------------------------------------------------------
Plug-in `module:smbios'
---------------------------------------------------------------------

Exec module [/var/cfengine/modules/module:smbios ]
Activated classes: smbios_vendor_Dell_Computer_Corporation
Activated classes: smbios_model_PowerEdge_1850
Activated classes: smbios_serial_HC98D91
Activated classes: smbios_cpu0_Intel_Xeon_CPU_3_00GHz
Activated classes: smbios_cpu1_Intel_Xeon_CPU_3_00GHz
Activated classes: smbios_total_mem_4294967296

<snip>

Exec module [/var/cfengine/modules/module:smbios ]
Activated classes: smbios_vendor_SiMech
Activated classes: smbios_model_Q300
Activated classes: smbios_serial_SM19974
Activated classes: smbios_cpu0_Intel_Xeon_CPU_3_00GHz
Activated classes: smbios_cpu1_Intel_Xeon_CPU_3_00GHz
Activated classes: smbios_total_mem_4294967296

This script requires lshw (Linux only, dmidecode port welcomed)
and xmlstarlet for parsing.  Also, most "whitebox" servers have a
default serial # of "1234567890" etc; in theory this is not the case
with modern HP, Dell, etc. motherboards.  

I'd appreciate comments and suggestions, thanks. 

-- 
Matt Peterson
#!/bin/sh

# $Id: module:smbios,v 1.1 2006/05/17 23:41:37 root Exp matt $
# Public domain.  Matt Peterson <matt AT peterson D0T org>

# This is a simple Cfengine module for generating some additional classes
# based on SMBIOS data (serial #, model name, CPU's, etc); pre-reqs below:
# lshw          http://ezix.org/project/wiki/HardwareLiSter     
# xmlstarlet    http://xmlstar.sourceforge.net/
# sh, bc, sed

# Define some paths
lshw="/usr/sbin/lshw"
xmlstarlet="/usr/bin/xmlstarlet"

if [ ! -x $lshw ]; then
        echo "Warning: lshw not found, exited `basename $0`"
        exit 0
fi


if [ ! -x $xmlstarlet ]; then
        echo "Warning: xmlstarlet not found, exited `basename $0`"
        exit 0
fi

lshw_xml_dump=`$lshw -xml`

smbios_vendor=`echo $lshw_xml_dump | $xmlstarlet sel -t -v "/node[1]/vendor" -`
smbios_vendor=`echo $smbios_vendor | sed 's/[ \t]/_/g'`

smbios_model=`echo $lshw_xml_dump | $xmlstarlet sel -t -v "/node[1]/product" -`
smbios_model=`echo $smbios_model | sed 's/[ \t]/_/g'`

smbios_serial=`echo $lshw_xml_dump | $xmlstarlet sel -t -v "/node[1]/serial" -`

smbios_cpu0=`echo $lshw_xml_dump | $xmlstarlet sel -t -v "//[EMAIL PROTECTED] = 
'cpu:0']/product" - `
smbios_cpu0=`echo $smbios_cpu0 | sed -e 's/[\(R\)|\(TM\)]//g' -e 's/[ \t]/_/g' 
-e 's/\./_/'`

smbios_cpu1=`echo $lshw_xml_dump | $xmlstarlet sel -t -v "//[EMAIL PROTECTED] = 
'cpu:1']/product" - `
smbios_cpu1=`echo $smbios_cpu1 | sed -e 's/[\(R\)|\(TM\)]//g' -e 's/[ \t]/_/g' 
-e 's/\./_/'`

# Expressed in bytes
smbios_total_mem=`echo $lshw_xml_dump | $xmlstarlet sel -t -v "//[EMAIL 
PROTECTED] = 'bank:0']/size" -o "+0" -v "//[EMAIL PROTECTED] = 'bank:1']/size" 
-o "+0" -v "//[EMAIL PROTECTED] = 'bank:2']/size" -o "+0" -v "//[EMAIL 
PROTECTED] = 'bank:3']/size" -o "+0" -v "//[EMAIL PROTECTED] = 'bank:4']/size" 
-o "+0" -v "//[EMAIL PROTECTED] = 'bank:5']/size" -o "+0" -v "//[EMAIL 
PROTECTED] = 'bank:6']/size" -o "+0" -v "//[EMAIL PROTECTED] = 'bank:7']/size" 
-`
smbios_total_mem=`echo $smbios_total_mem | bc`

echo "+smbios_vendor_$smbios_vendor"
echo "+smbios_model_$smbios_model"
echo "+smbios_serial_$smbios_serial"
echo "+smbios_cpu0_$smbios_cpu0"
echo "+smbios_cpu1_$smbios_cpu1"
echo "+smbios_total_mem_$smbios_total_mem"
_______________________________________________
Help-cfengine mailing list
Help-cfengine@cfengine.org
http://cfengine.org/mailman/listinfo/help-cfengine

Reply via email to