Merge "Remove deprecated ironic-discoverd-ramdisk" into feature/v2

This commit is contained in:
Jenkins 2016-10-24 03:47:40 +00:00 committed by Gerrit Code Review
commit dd93435b77
5 changed files with 0 additions and 161 deletions

View File

@ -1,27 +0,0 @@
========================
ironic-discoverd-ramdisk
========================
.. warning::
This element is deprecated. Please use the ironic-agent element
instead.
ironic-inspector [1] is a project for conducting hardware properties
discovery via booting a special ramdisk and interrogating hardware
from within it.
This ramdisk collects hardware information from the machine
it's booted on and posts it to the URL provided via
kernel argument 'discoverd_callback_url'.
The hardware information collected by the ramdisk are:
* BMC IP address (may be required for associating with existing node in Ironic)
* CPU count and architecture
* Memory amount in MiB
* Hard drive size in GiB
* IP and mac addresses for all NICs except the loopback
The machine is halted at the end of the process.
[1] https://pypi.python.org/pypi/ironic-inspector

View File

@ -1,7 +0,0 @@
curl
dmidecode
fdisk
ipmitool
jq
lscpu
wc

View File

@ -1 +0,0 @@
package-installs

View File

@ -1,114 +0,0 @@
DISCOVERD_URL=$(get_kernel_parameter discoverd_callback_url)
if [ -z "$DISCOVERD_URL" ]; then
# Some old ramdisks are around
DISCOVERD_URL=$(get_kernel_parameter ironic_callback_url)
if [ -z "$DISCOVERD_URL" ]; then
echo "No discoverd_callback_url supplied"
troubleshoot
else
echo "WARNING: deprecated option ironic_callback_url"
echo "WARNING: use discoverd_callback_url instead"
fi
fi
echo '{"interfaces":{}}' > data.json
function update() {
jq "$1" data.json > temp.json || troubleshoot
mv temp.json data.json
}
for iface in $(ls /sys/class/net/ | grep -v lo)
do
MAC=$(ip link show $iface | awk '/ether/ {print $2}')
IP=$(ip addr show $iface | awk '/inet / { sub(/\/.*/, "", $2); print $2 }')
if [ ! -z "$MAC" ]; then
update ".interfaces[\"$iface\"] = {mac: \"$MAC\", ip: \"$IP\"}"
fi
done
# NOTE(dtantsur): workaround for IPMI device not present on some systems
function modprobe_ipmi() {
modprobe ipmi_$1 || echo "WARNING: modprobe ipmi_$1 failed, ipmitool call may fail later"
}
modprobe_ipmi msghandler
modprobe_ipmi devintf
modprobe_ipmi si
BMC_ADDRESS=$(ipmitool lan print | grep -e "IP Address [^S]" | awk '{ print $4 }')
update ".ipmi_address = \"$BMC_ADDRESS\""
CPU_ARCH=$(lscpu | grep Architecture | awk '{ print $2 }')
update ".cpu_arch = \"$CPU_ARCH\""
RAM=0
if hash dmidecode 2>/dev/null; then
for i in $(dmidecode --type memory | grep Size | awk '{ print $2; }' | grep -E '[0-9]+');
do
RAM=$(( RAM + $i ));
done
elif hash lshw 2>/dev/null; then
# dmidecode does not exist for ppc, but lshw should (for both)
MEMORY=$(lshw -c memory -short -quiet | grep -i 'system memory' | awk '{ print $3; }')
if [[ "${MEMORY}" =~ GiB$ ]]; then
RAMGB=${MEMORY::-3}
RAM=$(( RAMGB * 1024 ));
elif [[ "${MEMORY}" =~ MiB$ ]]; then
RAM=${MEMORY::-3}
fi
fi
[ ${RAM} -gt 0 ] && update ".memory_mb = $RAM"
CPUS=$(cat /proc/cpuinfo | grep processor | wc -l)
update ".cpus = $CPUS"
DISK_BYTES=$(fdisk -l | grep Disk | awk '{print $5}' | head -n 1)
# NOTE(dtantsur): -1 is required to give Ironic some spacing for partitioning and may be removed later
DISK_SIZE=$(($DISK_BYTES/1024/1024/1024 - 1))
update ".local_gb = $DISK_SIZE"
BOOTIF=$(get_kernel_parameter BOOTIF)
update ".boot_interface = \"$BOOTIF\""
echo Collected:
cat data.json
RESULT=$(eval curl -i -X POST \
"-H 'Accept: application/json'" \
"-H 'Content-Type: application/json'" \
"-d @data.json" \
"$DISCOVERD_URL") || troubleshoot
# CURL can't return error code on 4xx error
if echo $RESULT | grep "HTTP/1.0 4"; then
echo "Ironic API returned error: $RESULT"
troubleshoot
fi
JSON_RESP=$(echo $RESULT | tr '\r' '\n' | tail -n1) # drop HTTP headers
if echo "$JSON_RESP" | jq '.ipmi_setup_credentials' | grep -q true; then
USERNAME=$(echo "$JSON_RESP" | jq -r '.ipmi_username')
if [ -z "$USERNAME" ]; then
echo "Empty IPMI user name"
troubleshoot
fi
PASSWORD=$(echo "$JSON_RESP" | jq -r '.ipmi_password')
if [ -z "$PASSWORD" ]; then
echo "Empty IPMI password"
troubleshoot
fi
echo "Assigning IPMI credentials: user $USERNAME"
ipmitool user set name 2 $USERNAME
ipmitool user set password 2 $PASSWORD
# Assign priviledges just in case
ipmitool channel setaccess 1 2 link=on ipmi=on callin=on privilege=4
ipmitool user enable 2
fi
echo "Node is now discovered! Halting..."
# Give user a chance of seeing the output
sleep 5
poweroff -f

View File

@ -1,12 +0,0 @@
curl:
# dmidecode does not exist for ppc* arches so add includes for non ppc
dmidecode:
arch: x86_64
dmidecode:
arch: i386
dmidecode:
arch: amd64
ipmitool:
jq:
lshw:
util-linux: