From 67d1402c75e562af34058d0021cf6a14b5588d22 Mon Sep 17 00:00:00 2001 From: Jannik Schönartz Date: Wed, 20 Mar 2019 04:22:50 +0000 Subject: [server/registration/backends] Rework addClient and updateClient to receive json Add idoit workaround for saving floats again Rework the grepSystemInfo bash script to match the new api --- server/ipxe/bash_scripts/addServer.sh | 6 +- server/ipxe/bash_scripts/grepSystemInfoRework.sh | 171 +++++++++++++++++++++++ 2 files changed, 174 insertions(+), 3 deletions(-) create mode 100755 server/ipxe/bash_scripts/grepSystemInfoRework.sh (limited to 'server/ipxe') diff --git a/server/ipxe/bash_scripts/addServer.sh b/server/ipxe/bash_scripts/addServer.sh index 13f81d1..ad6e3aa 100755 --- a/server/ipxe/bash_scripts/addServer.sh +++ b/server/ipxe/bash_scripts/addServer.sh @@ -9,7 +9,7 @@ json_data() "type": "SERVER", "uuid": "$(dmidecode -q -s system-uuid | grep -v '^#' | head -n 1 | tr '[a-z]' '[A-Z]')", "network": { - "mac": "$(cat /sys/class/net/ens3/address)", + "mac": "$(ip addr show | grep -Eo -m 1 'ether\s.*\sbrd' | awk '{print $2}')", "ip": "$(hostname -I | awk '{print $1}')" }, "location": { @@ -27,5 +27,5 @@ json_data() EOF } -#curl -d "$(json_data)" -H "Content-Type: application/json" -X POST --insecure https://bas.intra.uni-freiburg.de/api/registration -curl --data "$(json_data)" -H "Content-Type: application/json" -X POST --insecure https://bas.stfu-kthx.net:8888/api/registration \ No newline at end of file +curl -d "$(json_data)" -H "Content-Type: application/json" -X POST --insecure https://bas.intra.uni-freiburg.de/api/registration +# curl --data "$(json_data)" -H "Content-Type: application/json" -X POST --insecure https://bas.stfu-kthx.net:8888/api/registration \ No newline at end of file diff --git a/server/ipxe/bash_scripts/grepSystemInfoRework.sh b/server/ipxe/bash_scripts/grepSystemInfoRework.sh new file mode 100755 index 0000000..bdc59b8 --- /dev/null +++ b/server/ipxe/bash_scripts/grepSystemInfoRework.sh @@ -0,0 +1,171 @@ +#!/bin/bash +. /lib/dracut-lib.sh +# http://git.openslx.org/openslx-ng/mltk.git/tree/core/modules/hardware-stats/data/opt/openslx/scripts/systemd-hardware_stats +# dmidecode | grep -i UUID +TYPE="CLIENT" + +cpu() { + cat << EOF +{ + "model": "$1", + "manufacturer": "$2", + "type": "$3", + "cores": "$4", + "frequency": "$5", + "unit": "$6" +} +EOF +} + +getCpus() { + readarray -t CPU_MODEL <<< "$(dmidecode -q -s processor-version)" + readarray -t CPU_MANUFACTURER <<< "$(dmidecode -q -s processor-manufacturer)" + readarray -t CPU_TYPE <<< "$(dmidecode -q -s processor-family)" + readarray -t CPU_CORES <<< "$(dmidecode -t processor | grep -o 'Core Count:.*' | cut -f3- -d ' ')" + readarray -t CPU_FREQUENCY <<< "$(dmidecode -q -s processor-frequency | cut -f1- -d ' ')" + + CPUS=() + FIRST=true + for i in ${!CPU_MODEL[@]}; do + if [ "$FIRST" == "true" ]; then + FIRST=false + else + CPUS+=", " + fi + + frequency=$(echo ${CPU_FREQUENCY[i]} | awk '{print $1}') + unit=$(echo ${CPU_FREQUENCY[i]} | awk '{print $2}') + CPUS+=$(cpu "${CPU_MODEL[i]}" "${CPU_MANUFACTURER[i]}" "${CPU_TYPE[i]}" "${CPU_CORES[i]}" "$frequency" "$unit") + done + echo ${CPUS[*]} +} + +# CPU +CPU_MODEL=$(dmidecode -q -s processor-version) +# CPUMODEL=$(grep -m1 '^model name\s*:' /proc/cpuinfo | sed 's/^model name\s*:\s*//;s/\s\s*/ /g;s/^ //;s/ $//') +CPU_MANUFACTURER=$(dmidecode -q -s processor-manufacturer) +CPU_TYPE=$(dmidecode -q -s processor-family) +CPU_CORES=$(cat /sys/devices/system/cpu/cpu*/topology/thread_siblings_list | sort -u | wc -l) +CPU_FREQUENCY=$(dmidecode -q -s processor-frequency) +CPU_FREQUENCY=${CPU_FREQUENCY%" MHz"} + +ram() { + cat << EOF +{ + "capacity": "$1", + "unit": "$2", + "manufacturer": "$3", + "type": "$4", + "formfactor": "$5" +} +EOF +} + +getRamModules() { + readarray -t RAM_SIZE <<< "$(dmidecode -t 17 | grep -o 'Size:.*' | cut -f2- -d ' ')" + readarray -t RAM_MANUFACTURER <<< "$(dmidecode -t 17 | grep -o 'Manufacturer:.*' | cut -f2- -d ' ')" + readarray -t RAM_TYPE <<< "$(dmidecode -t 17 | grep -o 'Type:.*' | cut -f2- -d ' ')" + readarray -t RAM_FORMFACTOR <<< "$(dmidecode -t 17 | grep -o 'Form Factor:.*' | cut -f3- -d ' ')" + RAM_MODULES=() + FIRST=true + for i in ${!RAM_SIZE[@]}; do + if [ "${RAM_SIZE[i]}" == 'No Module Installed' ] + then + continue + fi + + if [ "$FIRST" == "true" ]; then + FIRST=false + else + RAM_MODULES+=", " + fi + + size=$(echo ${RAM_SIZE[i]} | awk '{print $1}') + unit=$(echo ${RAM_SIZE[i]} | awk '{print $2}') + RAM_MODULES+=$(ram "$size" "$unit" "${RAM_MANUFACTURER[i]}" "${RAM_TYPE[i]}" "${RAM_FORMFACTOR[i]}") + done + echo ${RAM_MODULES[*]} +} + +drive() { + cat << EOF +{ + "model": "$1", + "serial": "$2", + "capacity": "$3", + "unit": "$4", + "type": "$5", + "formfactor": "$6", + "connection": "$7" +} +EOF +} + +getDrives() { +# HDD / SSD +# hd parm or smartctl from smartmontools +drives=$(ls /dev/sd* | grep -o '/dev/sd.$') + +DRIVES=() +FIRST=true +for drive in $drives; do + if [ "$FIRST" == "true" ]; then + FIRST=false + else + DRIVES+=", " + fi + drivedata=$(mktemp) + smartctl -i $drive >> $drivedata + + DRIVE_MODEL=$(cat $drivedata | grep -o "Device Model: .*" | cut -f2- -d ":" | sed -e 's/^[[:space:]]*//') + DRIVE_SERIAL=$(cat $drivedata | grep -o "Serial Number: .*" | cut -f2- -d ":" | sed -e 's/^[[:space:]]*//') + DRIVE_CAPACITY=$(cat $drivedata | grep -o "User Capacity: .*" | grep -Pzo '(?<=\[)(.*?)(?=\])' | awk '{print $1}') + DRIVE_UNIT=$(cat $drivedata | grep -o "User Capacity: .*" | grep -Pzo '(?<=\[)(.*?)(?=\])' | awk '{print $2}') + DRIVE_TYPE=$(cat $drivedata | grep -o "Rotation Rate: .*" | cut -f2- -d ":" | sed -e 's/^[[:space:]]*//') + DRIVE_FORMFACTOR=$(cat $drivedata | grep -o "Form Factor: .*" | cut -f2- -d ":" | sed -e 's/^[[:space:]]*//') + DRIVE_CONNECTION=$(cat $drivedata | grep -o "SATA Version is: .*" | cut -f2- -d ":" | sed -e 's/^[[:space:]]*//') + DRIVES+=$(drive "$DRIVE_MODEL" "$DRIVE_SERIAL" "$DRIVE_CAPACITY" "$DRIVE_UNIT" "$DRIVE_TYPE" "$DRIVE_FORMFACTOR" "$DRIVE_CONNECTION") +done +echo ${DRIVES[*]} +} + +# System +# VENDOR=$(dmidecode | grep -Eo '(Vendor).*' | cut -f 2 -d ":") + +# Mainboard +# MAINBOARD_MANUFACTURER=$(dmidecode -q -s baseboard-manufacturer) +# MAINBOARD_MODEL=$(dmidecode -q -s baseboard-product-name) +# MAINBOARD_SERIAL_NUMBER=$(dmidecode -q -s baseboard-serial-number) +UUID=$(dmidecode -q -s system-uuid | grep -v '^#' | head -n 1 | tr '[a-z]' '[A-Z]') +json_data() { + cat << EOF +{ + "client": { + "parents": [], + "type": "$TYPE", + "uuid": "$UUID", + "network": { + "mac": "$(ip addr show | grep -Eo -m 1 'ether\s.*\sbrd' | awk '{print $2}')", + "ip": "$(hostname -I | awk '{print $1}')" + }, + "system": { + "model": "$(dmidecode -q -s system-product-name)", + "manufacturer": "$(dmidecode -q -s system-manufacturer)", + "serialnumber": "$(dmidecode -q -s system-serial-number)" + }, + "cpus": [$(getCpus)], + "ram": { + "modules": [$(getRamModules)], + "isEcc": "$(dmidecode -t 16 | grep -o 'Error Correction Type:.*' | cut -f4- -d ' ')" + }, + "drives": [$(getDrives)] + } +} +EOF +} + +# Curl +# curl --data "state=6" --insecure https://bas.stfu-kthx.net:8888/api/registrations/$UUID/state +# curl -d "name=Client_$UUID&sys_manufacturer=$MANUFACTURER&sys_model=$MODEL&sys_serial=$SERIAL&cpu_model=$CPU_MODEL&cpu_manufacturer=$CPU_MANUFACTURER&cpu_type=$CPU_TYPE&cpu_cores=$CPU_CORES&cpu_frequency=$CPU_FREQUENCY&ram_size=$RAM_SIZE&ram_manufacturer=$RAM_MANUFACTURER&ram_type=$RAM_TYPE&ram_isecc=$RAM_ISECC&ram_formfactor=$RAM_FORMFACTOR&drives=${DRIVES[*]}" -H "Content-Type: application/x-www-form-urlencoded" -X POST --insecure https://bas.intra.uni-freiburg.de/api/registration/$UUID/update +#echo $(json_data) +curl -d "$(json_data)" -H "Content-Type: application/json" -X POST --insecure https://bas.intra.uni-freiburg.de/api/registration/$UUID \ No newline at end of file -- cgit v1.2.3-55-g7522