2
0
mirror of https://github.com/xcat2/xcat-core.git synced 2025-05-30 09:36:41 +00:00

Merge pull request #5482 from immarvin/onztp

skip  discovery if the static dhcp lease of switch already exists
This commit is contained in:
cxhong 2018-08-08 16:32:41 -04:00 committed by GitHub
commit 23eaf2096b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -1,7 +1,6 @@
#!/bin/bash
#this script will be invoked by ZTP(zero touch provision) process in the onie switch
#this script finish the discovery and configuration after the switch is pluged in the cluster and powered on
function error() {
echo -e "\e[0;33mERROR: The Zero Touch Provisioning script failed while running the command $BASH_COMMAND at line $BASH_LINENO.\e[0m" >&2
exit 1
@ -17,8 +16,26 @@ exec >/var/log/autoprovision 2>&1
#echo "deb http://http.us.debian.org/debian jessie main" >> /etc/apt/sources.list
#echo "deb http://security.debian.org/ jessie/updates main" >> /etc/apt/sources.list
# $1 - The name of the network interface
function get_last_lease()
{
local ifname="$1"
local lease=""
while read -r
do
if [[ $REPLY =~ ^lease ]]
then
lease="$REPLY"$'\n'
else
lease+="$REPLY"$'\n'
fi
done <"/var/lib/dhcp/dhclient.${ifname}.leases" 2>/dev/null
echo "${lease}"
}
#get ip address for server node
server_ip=`grep cumulus-provision-url /var/lib/dhcp/dhclient.eth0.leases | tail -1 | awk -F/ '{print $3}'`
server_ip="$(grep 'cumulus-provision-url' < <(get_last_lease eth0) | awk -F/ '{print $3}')"
hashostname="$(grep 'host-name' < <(get_last_lease eth0))"
#download /install/postscripts from MN
max_retries=5
@ -72,34 +89,42 @@ chmod -R +x `find /xcatpost/ -maxdepth 1 -print | grep -E -v '^(/xcatpost/|/xcat
cd /xcatpost
rc=0
./documulusdiscovery
rc=$?
if [ "$rc" != "0" ];then
ztp -R
exit 1
#if 'host-name' appears in dhcp lease, it means that the node definition and dhcp lease
#have been created on MN, no need to invoke discovery process
if [ -n "$hashostname" ]; then
echo "My definition and dhcp lease exist, skip discovery and begin configuring..."
logger -s -t "xcat.cumulusztp" -p local4.info "My definition and dhcp lease exist, skip discovery and begin configuring..."
else
./documulusdiscovery
rc=$?
if [ "$rc" != "0" ];then
ztp -R
exit 1
fi
logger -s -t "xcat.cumulusztp" -p local4.info "switch discovered!"
#restart mgt interface to apply the specified IP address
ifdown eth0;ifup eth0
retry=0
while true; do
#check whether the network access between MN/CN and the node is ready
ping $server_ip -c 1 >/dev/null && break
retry=$[ $retry + 1 ]
if [ $retry -eq 90 ];then
#timeout, complain and exit
logger -s -t "xcat.cumulusztp" -p local4.err " the network between the node and $server_ip is not ready, please check[retry=$retry]..." "/var/log/xcat/xcat.log"
ztp -R
exit 1
fi
#sleep sometime before the next scan
sleep 2
done
fi
logger -s -t "xcat.cumulusztp" -p local4.info "switch discovered!"
#restart mgt interface to apply the specified IP address
ifdown eth0;ifup eth0
retry=0
while true; do
#check whether the network access between MN/CN and the node is ready
ping $server_ip -c 1 >/dev/null && break
retry=$[ $retry + 1 ]
if [ $retry -eq 90 ];then
#timeout, complain and exit
logger -s -t "xcat.cumulusztp" -p local4.err " the network between the node and $server_ip is not ready, please check[retry=$retry]..." "/var/log/xcat/xcat.log"
ztp -R
exit 1
fi
#sleep sometime before the next scan
sleep 2
done
echo "installstatus configuring" | socat STDIN TCP:$server_ip:3002,sourceport=301,reuseaddr,retry=5
#push root ssh keys, config passwordless
mkdir -p /root/.ssh
mv _ssh/authorized_keys /root/.ssh/authorized_keys