Merge "Remove deprecated ironic-discoverd-ramdisk" into feature/v2
This commit is contained in:
commit
dd93435b77
@ -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
|
@ -1,7 +0,0 @@
|
||||
curl
|
||||
dmidecode
|
||||
fdisk
|
||||
ipmitool
|
||||
jq
|
||||
lscpu
|
||||
wc
|
@ -1 +0,0 @@
|
||||
package-installs
|
@ -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
|
@ -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:
|
Loading…
Reference in New Issue
Block a user