blob: b4e7e35ab88d4d1a5b9f33755cb69b179166d054 [file] [log] [blame]
#!/bin/sh
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
#
# $Id$
#
DEBUG () {
if [ $VERBOSE ] && [ $VERBOSE -eq 1 ];then
echo DEBUG: $*
echo DEBUG: $* >> /tmp/output.log
fi
}
# Capture vars passed via kernal args
for x in $(cat /proc/cmdline); do
case $x in
imagename=*)
IMAGENAME=${x#imagename=}
;;
pxeserver=*)
PXESERVER=${x#pxeserver=}
;;
defaultimage=*)
DEFAULTIMAGE=${x#defaultimage=}
;;
zoniroot=*)
ZONIROOT=${x#zoniroot=}
;;
configipmi=*)
CONFIGIPMI=${x#configipmi=}
;;
verbose=*)
VERBOSE=${x#verbose=}
;;
esac
done
IMAGE_URL="${PXESERVER}/${ZONIROOT}/"
# Scrape system for specs
#/sbin/getSystemId > /tmp/sysinfo
# moving to dmidecode because getSystemId is now python code and
# I don't want to include python in the image if I dont have to
cat /proc/cpuinfo > /tmp/sysinfo
cat /proc/meminfo >> /tmp/sysinfo
ifconfig eth0 >> /tmp/sysinfo
fdisk -l | grep Disk | grep dev 1>> /tmp/sysinfo
DEBUG "pxeserver is " ${PXESERVER}
#(echo -n "MAC: "; ifconfig eth0 | grep "HWaddr" | awk '{print $5}') >> /tmp/sysinfo
DEBUG $(cat /tmp/sysinfo)
sleep 1
IPADDR=$(cat /tmp/sysinfo | grep "inet addr" | awk '{print $2}' | awk -F: '{print $2}')
MAC=$(cat /tmp/sysinfo | grep "HWaddr" | awk '{print $5}')
DEBUG MAC - $MAC
MOD_MAC=$(echo ${MAC} | sed 's/:/-/g' | sed 'y/ABCDEF/abcdef/')
DEBUG MOD_MAC - $MOD_MAC
SYS_MODEL=$(/sbin/dmidecode -s system-product-name | sed 's/ /+/g')
DEBUG SYS_MODEL is $SYS_MODEL
SYSTEM_SERIAL_NUMBER=$(/sbin/dmidecode -s system-serial-number | sed 's/ /+/g')
DEBUG SYSTEM_SERIAL_NUMBER is $SYSTEM_SERIAL_NUMBER
CHASSIS_SERIAL_NUMBER=$(/sbin/dmidecode -s chassis-serial-number | sed 's/ /+/g')
DEBUG CHASSIS_SERIAL_NUMBER is $CHASSIS_SERIAL_NUMBER
SYSTEM_UUID=$(/sbin/dmidecode -s system-uuid | sed 's/ /+/g')
DEBUG SYSTEM_UUID is $SYSTEM_UUID
BIOS_REV=$(/sbin/dmidecode -s bios-version | sed 's/ /+/g')
DEBUG BIOS_REV - $BIOS_REV
SYS_VENDOR=$(/sbin/dmidecode -s system-manufacturer | sed 's/ /+/g')
DEBUG SYS_VENDOR - $SYS_VENDOR
PROC_VENDOR=$(cat /tmp/sysinfo | grep vendor_id | cut -d ":" -f 2 | tail -n1 | sed 's/ /+/g');
DEBUG PROC_VENDOR - $PROC_VENDOR
PROC_MODEL=$(cat /tmp/sysinfo | grep "model name"| cut -d ":" -f 2 | tail -n1 | sed 's/ /+/g');
DEBUG PROC_MODEL - $PROC_MODEL
CLOCK_SPEED=$(cat /tmp/sysinfo | grep "cpu MHz"| cut -d ":" -f 2 | tail -n1 | sed 's/ /+/g');
DEBUG CLOCK_SPEED - $CLOCK_SPEED
PROC_CACHE=$(cat /tmp/sysinfo | grep "cache size"| cut -d ":" -f 2 | tail -n1 | sed 's/ /+/g');
DEBUG PROC_CACHE - $PROC_CACHE
CPU_FLAGS=$(cat /tmp/sysinfo | grep "flags"| cut -d ":" -f 2 | tail -n1 | sed 's/ /+/g');
DEBUG CPU_FLAGS - $CPU_FLAGS
NUM_PROCS=$(cat /tmp/sysinfo | grep "physical id" | sort | uniq | wc -l | sed 's/ /+/g');
DEBUG NUM_PROCS - $NUM_PROCS
DA_PROCS=$(cat /tmp/sysinfo | grep "physical id" | sort | uniq | wc -l);
DEBUG DA_PROCS - $DA_PROCS
#NUM_CORES=$(cat /tmp/sysinfo | grep "cpu cores"| cut -d ":" -f 2 | tail -n1 | sed 's/ /+/g');
DA_CORES=$(cat /tmp/sysinfo | grep "cpu cores"| cut -d ":" -f 2 | tail -n1);
DEBUG DA_CORES - $DA_CORES
NUM_CORES=$(echo $(($DA_PROCS * $DA_CORES)))
DEBUG NUM_CORES - $NUM_CORES
MEM_TOTAL=$(cat /tmp/sysinfo | grep "MemTotal"| awk '{print $2}' | sed 's/ /+/g');
DEBUG MEM_TOTAL - $MEM_TOTAL
NUM_DISKS=$(cat /tmp/sysinfo | grep "Disk"| grep "dev" | wc -l)
DEBUG NUM_DISKS - $NUM_DISKS
DISK_INFO=""
i=1
while [ $i -le ${NUM_DISKS} ];do
val=$(cat /tmp/sysinfo | tail -n $i | head -n 1 | awk '{print $2$5}')
echo $val
if [ $i -eq 1 ];then
DISK_INFO=$val
else
DISK_INFO="${DISK_INFO} $val"
fi
i=$(($i+1))
done
tmp=$(echo $DISK_INFO | sed 's/ /+/g')
DISK_INFO=$tmp
DEBUG DISK_INFO - ${DISK_INFO}
#disk_size=$(cat /tmp/sysinfo | grep "Disk"| awk '{print $5}');
# Register sysinfo to DB
DEBUG "wget -O- http://${IMAGE_URL}/zoni-register.php?action=register_system&mac=$MAC&mod_mac=$MOD_MAC&sys_model=$SYS_MODEL&bios_rev=$BIOS_REV&system_serial_number=$SYSTEM_SERIAL_NUMBER&chassis_serial_number=${CHASSIS_SERIAL_NUMBER}&system_uuid=$SYSTEM_UUID&sys_vendor=$SYS_VENDOR&proc_vendor=$PROC_VENDOR&proc_model=$PROC_MODEL&clock_speed=$CLOCK_SPEED&proc_cache=$PROC_CACHE&num_procs=$NUM_PROCS&num_cores=$NUM_CORES&mem_total=$MEM_TOTAL&cpu_flags=$CPU_FLAGS&num_disks=${NUM_DISKS}&disk_info=${DISK_INFO}"
wget -O- "http://${IMAGE_URL}/zoni-register.php?action=register_system&mac=$MAC&mod_mac=$MOD_MAC&sys_model=$SYS_MODEL&bios_rev=$BIOS_REV&system_serial_number=$SYSTEM_SERIAL_NUMBER&chassis_serial_number=${CHASSIS_SERIAL_NUMBER}&system_uuid=$SYSTEM_UUID&sys_vendor=$SYS_VENDOR&proc_vendor=$PROC_VENDOR&proc_model=$PROC_MODEL&clock_speed=$CLOCK_SPEED&proc_cache=$PROC_CACHE&num_procs=$NUM_PROCS&num_cores=$NUM_CORES&mem_total=$MEM_TOTAL&cpu_flags=$CPU_FLAGS&num_disks=${NUM_DISKS}&disk_info=${DISK_INFO}"
# Get more info either from cheat file or from user entered info
ec=1
if [ -e /register_automate ]; then
switchinfo=`/register_automate $SYSTEM_SERIAL_NUMBER switchinfo`
switchport=$(echo $switchinfo | cut -d ":" -f 2)
switch=$(echo $switchinfo | cut -d ":" -f 1)
pduinfo=`/register_automate $SYSTEM_SERIAL_NUMBER pduinfo`
pduport=$(echo $pduinfo | cut -d ":" -f 2)
pdu_name=$(echo $pduinfo | cut -d ":" -f 1)
location=`/register_automate $SYSTEM_SERIAL_NUMBER location`
#ip_addr=`/register_automate $SYSTEM_SERIAL_NUMBER ipaddr`
daimage=`/register_automate $SYSTEM_SERIAL_NUMBER image`
ec=$?
DEBUG "Register automate completed"
DEBUG "ec is $ec"
fi
# If we have no information about this node in cheat file
# Ask user for the info
# rgass, leaving this out for now. Haven't tested and not sure if we want a timer on this
#echo "Hit any key (except enter) to begin interactive node entry (timeout in 10 seconds)"
#stty -icanon min 0 time 100
#answer=$(dd bs=1 count=1 2>/dev/null)
#val=${#answer}
#if [ $val -gt 0 ];then
# No automate entry found, prompt user for info
if [ $ec -ne 0 ]; then
ans=n;
while [ $ans = "n" ] || [ $ans = "N" ]; do
echo -n "Please enter the location/hostname for this node: "
read location
#echo -n "Please enter the IP address for this node: "
#read ip_addr
echo -n "Enter Switch name:port e.g. sw0-r3r2:8: "
read switchinfo
echo -n "Enter PDU name:port e.g. pdu0-r3r2:8: "
read pduinfo
echo -n "if you know what image you want, enter it here: "
read daimage
## Confirm summary
echo "-- Summary --"
echo "Location: $location"
#echo "Hostname: $hn"
#echo "IP address: $ip_addr"
echo "SwitchInfo: $switchinfo"
echo "PDUInfo: $pduinfo"
echo "Image name: $daimage"
echo "Save Configuation? [y/n]"
read ans
## Submit some stuff that was entered
switchport=$(echo $switchinfo | cut -d ":" -f 2)
switch=$(echo $switchinfo | cut -d ":" -f 1)
pduport=$(echo $pduinfo | cut -d ":" -f 2)
pdu_name=$(echo $pduinfo | cut -d ":" -f 1)
done
fi
# Update IP_ADDR
# Removing IP address. Let DHCP do the work
#if [ $ip_addr ];then
#DEBUG "Update ip $ip_addr"
#wget -O- "http://${IMAGE_URL}/zoni-register.php?action=addip&mac=$MAC&ip_addr=$ip_addr"
#fi
if [ $location ];then
DEBUG "Set location ${location}"
echo "wget -O- http://${IMAGE_URL}/zoni-register.php?action=addlocation&verbose=${VERBOSE}&mac=$MAC&location=$location"
wget -O- "http://${IMAGE_URL}/zoni-register.php?action=addlocation&verbose=${VERBOSE}&mac=$MAC&location=$location"
fi
# If we set the imagename, register it
if [ $daimage ];then
DEBUG "setting image name"
wget -O- "http://${IMAGE_URL}/zoni-register.php?action=assign_image&verbose=${VERBOSE}&mac=$MAC&image_name=$daimage&location=$location"
fi
if [ $switchport ];then
DEBUG "setting switchport : ${switch} ${switchport}"
wget -O- "http://${IMAGE_URL}/zoni-register.php?action=addhardwareinfo&verbose=${VERBOSE}&mac=$MAC&hwdev=${switch}&hwport=${switchport}"
fi
if [ $pduport ];then
DEBUG "setting pduport : ${pdu_name} ${pduport}"
wget -O- "http://${IMAGE_URL}/zoni-register.php?action=addhardwareinfo&verbose=${VERBOSE}&mac=$MAC&hwdev=${pdu_name}&hwport=${pduport}"
fi
#wget -O- "http://${IMAGE_URL}/zoni-register.php?action=addip&mac=$MAC&ip_addr=$ip_addr"
#fi
if [ $location ];then
# Add dns and dhcp
DEBUG "adding to dhcp and dns"
wget -O- "http://${IMAGE_URL}/zoni-register.php?action=updatednsdhcp&verbose=${VERBOSE}&mac=${MAC}&location=$location&ip_addr=$IPADDR"
fi
# Setup the management interface, if any
if [ $configipmi ] && [ $configipmi -eq 1 ];then
# Check for ipmi
# Check for the existance of the module.
cat /proc/modules | grep ipmi_si
if [ $? -eq 0 ];then
# Assigning IP address to IPMI card since they don't seem to every accept an address from DHCP
# Subnet is selected from config file
# Get IPMI card mac address
ipmi_mac=$(ipmitool lan print | grep -i "MAC Address" | awk -F ": " '{print $2}')
ipmi_ver=$(ipmitool mc info | grep -i "IPMI Version" | awk -F ": " '{print $2}')
ipmi_rev=$(ipmitool mc info | grep -i "Firmware Revision" | awk -F ": " '{print $2}')
vlan_disable=$(ipmitool lan print | grep -i "Vlan" | awk -F ": " '{print $2}')
# Add IPMI info
echo "wget -O/outfile.txt 'http://${IMAGE_URL}/zoni-register.php?action=add_ipmi&verbose=${VERBOSE}&mac=$MAC&location=${location}&ip_addr=${IPADDR}&ipmi_mac=${ipmi_mac}&ipmi_ver=${ipmi_ver}&ipmi_rev=${ipmi_rev}'"
wget -O/outfile.txt "http://${IMAGE_URL}/zoni-register.php?action=add_ipmi&verbose=${VERBOSE}&mac=$MAC&location=${location}&ip_addr=${IPADDR}&ipmi_mac=${ipmi_mac}&ipmi_ver=${ipmi_ver}&ipmi_rev=${ipmi_rev}"
IPMI_ADDR=$(cat /outfile.txt | grep IPMI_ADDR | awk '{print $2}')
IPMI_PASSWORD=$(cat /outfile.txt | grep IPMI_PASSWORD | awk '{print $2}')
IPMI_DOMAIN=$(cat /outfile.txt | grep IPMI_DOMAIN| awk '{print $2}')
IPMI_NETMASK=$(cat /outfile.txt | grep IPMI_NETMASK| awk '{print $2}')
IPMI_GATEWAY=$(cat /outfile.txt | grep IPMI_GATEWAY| awk '{print $2}')
if [ ${IPMI_DOMAIN} -eq 1 ];then
IPMI_DOMAIN="off"
fi
DEBUG "ip $IPMI_ADDR pass $IPMI_PASSWORD domain $IPMI_DOMAIN netmask $IPMI_NETMASK gateway $IPMI_GATEWAY "
ipmitool lan set 1 ipsrc static
ipmitool lan set 1 ipaddr ${IPMI_ADDR}
ipmitool lan set 1 vlan id ${IPMI_DOMAIN}
ipmitool lan set 1 defgw ipaddr ${IPMI_GATEWAY}
ipmitool lan set 1 netmask ${IPMI_NETMASK}
ipmitool lan set 1 password ${IPMI_PASSWORD}
ipmitool lan set 1 access on
# Make user 2 be root with random password
ipmitool user set name 2 root
ipmitool user set password 2 $IPMI_PASSWORD
ipmitool channel setaccess 1 2 callin=on ipmi=on link=on privilege=4
ipmitool user enable 2
#Already done in add_ipmi
#DEBUG "adding to dhcp and dns"
#DEBUG "wget -O- http://${IMAGE_URL}/zoni-register.php?action=updatednsdhcp&verbose=${VERBOSE}&mac=${ipmi_mac}&location=${location}$&ip_addr=${IPMI_ADDR}"
#wget -O- "http://${IMAGE_URL}/zoni-register.php?action=updatednsdhcp&verbose=${VERBOSE}&mac=${ipmi_mac}&location=${location}&ip_addr=${IPMI_ADDR}"
else
DEBUG "IPMI interface not found"
fi
fi
# check for iLo
# Code for ilo goes here...
# If default image is set as kernel opt, override automate file
#DEBUG "def image is $DEFAULTIMAGE "
#if [ $DEFAULTIMAGE ] ; then
#wget -O- "http://${IMAGE_URL}/zoni-register.php?action=assign_image&mac=$MAC&image_name=$DEFAULTIMAGE&location=$location"
#fi
#else
#echo "Interactive mode canceled due to no keyboard input"