Permalink
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
executable file 349 lines (348 sloc) 10.2 KB
#!/bin/bash
. /usr/share/fog/lib/funcs.sh
clearScreen
displayBanner
disks=""
disk=""
hd=""
getHardDisk
sysman=""
sysproduct=""
sysversion=""
sysserial=""
sysuuid=""
systype=""
biosversion=""
biosvendor=""
biosdate=""
mbman=""
mbproductname=""
mbversion=""
mbserial=""
mbasset=""
cpuman=""
cpuversion=""
cpucurrent=""
cpumax=""
mem=""
hdinfo=""
caseman=""
casever=""
caseserial=""
caseasset=""
sysman64=""
sysproduct64=""
sysversion64=""
sysserial64=""
sysuuid64=""
systype64=""
biosversion64=""
biosvendor64=""
biosdate64=""
mbman64=""
mbproductname64=""
mbversion64=""
mbserial64=""
mbasset64=""
cpuman64=""
cpuversion64=""
cpucurrent64=""
cpumax64=""
mem64=""
hdinfo64=""
caseman64=""
casever64=""
caseserial64=""
caseasset64=""
dots "Using disk device"
echo $hd
echo " * Starting host registration"
mac=$(getMACAddresses | base64)
sysuuid=$(dmidecode -s system-uuid)
sysuuid=${sysuuid,,}
sysuuid=$(echo $sysuuid | base64)
exists=$(curl -Lks --data "sysuuid=${sysuuid}&mac=$mac" ${web}service/man.hostexists.php 2>/dev/null)
checkAndSet() {
local testvar="$1"
local onlynum="$2"
[[ -z $testvar ]] && return
if [[ $onlynum =~ [Tt][Rr][Uu][Ee] && $testvar =~ ^[0-9]+$ ]]; then
echo $testvar | base64
elif [[ $testvar =~ ^[0-9,]+$ ]]; then
echo $testvar | base64
else
return
fi
}
setIDs() {
local varVar="$1"
local str="$2"
local csvstyle="$3"
local dummy="$4"
local max="$5"
local res=""
local url=""
local oIFS=$IFS
local line=""
while [[ -z ${!varVar} ]]; do
[[ $csvstyle =~ [Tt][Rr][Uu][Ee] ]] && echo -n " Enter the $str IDs separated with , to associate with computer (? for listing): " || echo -n " Enter the $str ID to associate with computer (? for listing): "
read dummy
dummy=$(echo $dummy | sed -e 's/^,//' -e 's/,$//')
case $dummy in
[?])
url="${web}service/${str}listing.php"
clearScreen
res=$(echo -e $(curl -ks $url 2>/dev/null))
i=0
IFS=$'\n'
for line in $res; do
let i+=1
echo $line
if [[ $i -eq $max ]]; then
[[ $csvstyle =~ [Tt][Rr][Uu][Ee] ]] && echo -n " Press [Enter] to proceed or enter the $str IDs separated with , to associate with computer: " || echo -n " Press [Enter] to proceed or enter the $str ID to associate with computer: "
read dummy
case $dummy in
[?]|"")
i=0
clearScreen
continue
;;
esac
case $csvstyle in
[Tt][Rr][Uu][Ee])
[[ $dummy =~ ^[0-9,]+$ ]] && printf -v "$varVar" $(checkAndSet $dummy) || setIDs "$varVar" "$str" "$csvstyle" "$dummy" "$max"
break
;;
*)
[[ $dummy =~ ^[0-9]+$ ]] && printf -v "$varVar" $(checkAndSet $dummy "true") || setIDs "$varVar" "$str" "$csvstyle" "$dummy" "$max"
break
;;
esac
i=0
dummy=$(echo $dummy | sed -e 's/^,//' -e 's/,$//')
clearScreen
fi
done
;;
""|0)
printf -v "$varVar" 0
;;
*)
dummy=$(echo $dummy | sed -e 's/^,//' -e 's/,$//')
[[ -z $dummy ]] && setIDs "$varVar" "$str" "$csvstyle" "$dummy" "$max"
case $csvstyle in
[Tt][Rr][Uu][Ee])
[[ $dummy =~ ^[0-9,]+$ ]] && printf -v "$varVar" $(checkAndSet $dummy) || setIDs "$varVar" "$str" "$csvstyle" "$dummy" "$max"
;;
*)
[[ $dummy =~ ^[0-9]+$ ]] && printf -v "$varVar" $(checkAndSet $dummy "true") || setIDs "$varVar" "$str" "$csvstyle" "$dummy" "$max"
;;
esac
;;
esac
done
IFS=$oIFS
}
[[ $exists != "#!ok" ]] && handleError "Unable to register host: $exists ($0)\n Args Passed: $*"
host=""
ip=""
productKey=""
imageid=""
primaryuser=""
other1=""
other2=""
blImage=""
blDoAddGroup=""
blDoAddSnapin=""
keyEnter=""
blDoAD=""
res=""
while [[ $res != "#!ok" ]]; do
echo -n " * Enter hostname for this computer: "
read host
if [[ ${#host} -gt 15 ]]; then
host=${host:0:15}
echo " | Truncated to 15 characters: $host"
usleep 2000000
fi
host=$(echo $host | base64)
res=$(curl -Lks --data "host=$host" ${web}service/hostnameloop.php 2>/dev/null)
[[ $res != "#!ok" ]] && echo "$res"
done
imageid=""
setIDs "imageid" "image" "" "" 20
if [[ $(curl -Lks ${web}service/locationcheck.php 2>/dev/null) == "##" ]]; then
while [[ -z $askme ]]; do
echo -n " Would you like to assign a location for this host? (y/N) "
read askme
case $askme in
[Nn]|[Nn][Oo]|"")
askme="N"
;;
[Yy]|[Yy][Ee][Ss])
setIDs "locationid" "location" "" "" 20
location64=$locationid
;;
*)
askme=""
echo " * Invalid input, please try again"
;;
esac
done
fi
askme=""
if [[ $(curl -Lks ${web}service/oucheck.php 2>/dev/null) == "##" ]]; then
while [[ -z $askme ]]; do
echo -n " Would you like to assign an ou for this host? (y/N) "
read askme
case $askme in
[Nn]|[Nn][Oo]|"")
askme="N"
;;
[Yy]|[Yy][Ee][Ss])
setIDs "ouid" "ou" "" "" 20
ou64=$ouid
;;
*)
askme=""
echo " * Invalid input, please try again"
;;
esac
done
fi
askme=""
while [[ -z $askme ]]; do
echo -n " Would you like to associate this host with groups? (y/N) "
read askme
case $askme in
[Nn]|[Nn][Oo]|"")
askme="N"
;;
[Yy]|[Yy][Ee][Ss])
setIDs "groupid" "group" "true" "" 20
group64=$groupid
;;
*)
askme=""
echo " * Invalid input, please try again"
;;
esac
done
askme=""
while [[ -z $askme ]]; do
echo -n " Would you like to associate this host with snapins? (y/N) "
read askme
case $askme in
[Nn]|[Nn][Oo]|"")
askme="N"
;;
[Yy]|[Yy][Ee][Ss])
setIDs "snapinid" "snapin" "true" "" 20
snapin64=$snapinid
;;
*)
askme=""
echo " * Invalid input, please try again"
;;
esac
done
askme=""
while [[ -z $askme ]]; do
echo -n " Would you like to associate a product key to this host? (y/N) "
read askme
case $askme in
[Nn]|[Nn][Oo]|"")
askme="N"
;;
[Yy]|[Yy][Ee][Ss])
echo -n " * Enter the product key for this computer: "
read productKey
productKey=$(echo $productKey | base64)
;;
*)
askme=""
echo " * Invalid input, please try again"
;;
esac
done
askme=""
while [[ -z $askme ]]; do
echo -n " Would you like this host to join a domain, (using default settings)? (y/N) "
read askme
case $askme in
[Nn]|[Nn][Oo]|"")
askme="N"
;;
[Yy]|[Yy][Ee][Ss])
blDoAD=$(echo -n 1 | base64)
askme="Y"
;;
*)
askme=""
echo " * Invalid input, please try again"
;;
esac
done
echo -n " * Enter the primary user for this computer: "
read primaryuser
primaryuser=$(echo $primaryuser | base64)
echo -n " * Enter the other tag #1 for this computer: "
read other1
other1=$(echo $other1 | base64)
echo -n " * Enter the other tag #2 for this computer: "
read other2
other2=$(echo $other2 | base64)
echo " * You entered all required information, "
askme=""
while [[ -z $askme ]]; do
echo -n " Would you like to deploy image to this computer now? (y/N) "
read askme
case $askme in
[Nn]|[Nn][Oo]|"")
askme="N"
;;
[Yy]|[Yy][Ee][Ss])
tmp=""
ret=""
retry=3
while [[ $ret != "#!ok" && ! $retry -eq 0 ]]; do
echo " * Enter FOG GUI Username and Password"
echo -n " Username: "
read username
echo -n " Password: "
read -s password
user64=$(echo $username | tr -d '\012' | base64)
pass64=$(echo $password | tr -d '\012' | base64)
ret=$(curl -Lks --data "sysuuid=${sysuuid}&mac=$mac&username=$user64&password=$pass64" ${web}service/checkcredentials.php 2>/dev/null)
case $ret in
'#!ok')
echo
echo " * This host will reboot and deployment will start!"
ret=$tmp
realdoimage=$(echo -n 1 | base64)
break
;;
'#!il')
echo
echo " * Error: Invalid Login! ($retry remaining)"
let retry-=1
;;
esac
done
askme="Y"
;;
*)
askme=""
echo " * Invalid input, please try again"
;;
esac
done
dots "Attempting to register host"
res=""
while [[ -z $res ]]; do
res=$(curl -Lks --data "sysuuid=${sysuuid}&mac=$mac&advanced=$(echo -n 1 | base64)&host=$host&imageid=$imageid&primaryuser=$primaryuser&other1=$other1&other2=$other2&doimage=$realdoimage&doad=$blDoAD&location=$location64&username=$user64&groupid=$group64&snapinid=$snapin64&productKey=$productKey" ${web}service/auto.register.php 2>/dev/null)
echo "$res"
usleep 2000000
done
. /bin/fog.inventory
usleep 2000000