mirror of
https://github.com/apache/cloudstack.git
synced 2025-10-26 08:42:29 +01:00
111 lines
4.7 KiB
Bash
Executable File
111 lines
4.7 KiB
Bash
Executable File
#!/bin/bash
|
|
# Licensed to the Apache Software Foundation (ASF) under one
|
|
# or more contributor license agreements. See the NOTICE file
|
|
# distributed with this work for additional information
|
|
# regarding copyright ownership. The ASF licenses this file
|
|
# to you under the Apache License, Version 2.0 (the
|
|
# "License"); you may not use this file except in compliance
|
|
# with the License. You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing,
|
|
# software distributed under the License is distributed on an
|
|
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
# KIND, either express or implied. See the License for the
|
|
# specific language governing permissions and limitations
|
|
# under the License.
|
|
|
|
#set -x
|
|
|
|
usage() {
|
|
printf "Usage: %s \n" $(basename $0) >&2
|
|
|
|
}
|
|
moveConfigToBond() {
|
|
bond=$1
|
|
bondMaster=$(xe bond-param-get param-name=master uuid=$bond)
|
|
bondMasterIp=$(xe pif-param-get param-name=IP uuid=$bondMaster)
|
|
if [ -z "$bondMasterIp" ]; then
|
|
bondSlaves=$(xe bond-param-get param-name=slaves uuid=$bond| tr ';' ' ')
|
|
for bondSlave in $bondSlaves; do
|
|
bondSlaveIp=$(xe pif-param-get param-name=IP uuid=$bondSlave)
|
|
if [ -n "$bondSlaveIp" ]; then
|
|
mode=$(xe pif-param-get param-name=IP-configuration-mode uuid=$bondSlave)
|
|
netmask=$(xe pif-param-get param-name=netmask uuid=$bondSlave)
|
|
gateway=$(xe pif-param-get param-name=gateway uuid=$bondSlave)
|
|
DNS=$(xe pif-param-get param-name=DNS uuid=$bondSlave)
|
|
management=$(xe pif-param-get param-name=management uuid=$bondSlave)
|
|
slavedevice=$(xe pif-param-get param-name=device uuid=$bondSlave)
|
|
masterdevice=$(xe pif-param-get param-name=device uuid=$bondMaster)
|
|
echo " --configure $masterdevice($bondMaster) DNS=$DNS gateway=$gateway IP=$bondSlaveIp mode=$mode netmask=$netmask"
|
|
xe pif-reconfigure-ip DNS=$DNS gateway=$gateway IP=$bondSlaveIp mode=$mode netmask=$netmask uuid=$bondMaster
|
|
if [ $? -ne 0 ]; then
|
|
echo " --Failed to configure $masterdevice($bondMaster), please run xe pif-reconfigure-ip DNS=$DNS gateway=$gateway IP=$bondSlaveIp mode=$mode netmask=$netmask uuid=$bondMaster manually"
|
|
exit 1
|
|
fi
|
|
echo " --Succeeded"
|
|
if [ "$management" = "true" ]; then
|
|
echo " --move management interface from $slavedevice($bondSlave) to $masterdevice($bondMaster)"
|
|
xe host-management-reconfigure pif-uuid=$bondMaster
|
|
if [ $? -ne 0 ]; then
|
|
echo " --Failed to move management interface from $bondSlave to $bondMaster, please run xe host-management-reconfigure pif-uuid=$bondMaster manually"
|
|
exit 1
|
|
fi
|
|
echo " --Succeeded"
|
|
fi
|
|
echo " --remove configuration from $slavedevice($bondSlave)"
|
|
xe pif-reconfigure-ip mode=None uuid=$bondSlave
|
|
echo " --Succeeded"
|
|
break
|
|
fi
|
|
xe pif-plug uuid=$bondMaster
|
|
done
|
|
fi
|
|
}
|
|
|
|
poolUuid=$(xe pool-list | grep ^uuid | awk '{print $NF}')
|
|
hostMaster=$(xe pool-param-get uuid=$poolUuid param-name=master)
|
|
masterName=$(xe host-param-get param-name=hostname uuid=$hostMaster)
|
|
masterAddress=$(xe host-param-get param-name=address uuid=$hostMaster)
|
|
|
|
echo "#Begin check"
|
|
echo "##check master $masterName $masterAddress $hostMaster"
|
|
masterPifs=$(xe pif-list host-uuid=$hostMaster| grep ^uuid | awk '{print $NF}')
|
|
for pif in $masterPifs; do
|
|
bond=$(xe pif-param-get param-name=bond-master-of uuid=$pif)
|
|
if [ -n "$bond" ]; then
|
|
moveConfigToBond $bond
|
|
fi
|
|
done
|
|
echo "##done for master $hostMaster"
|
|
|
|
hostSlaves=$(xe host-list | grep ^uuid | awk '{print $NF}')
|
|
|
|
for hostSlave in $hostSlaves; do
|
|
if [ "$hostSlave" != "$hostMaster" ]; then
|
|
slaveName=$(xe host-param-get param-name=hostname uuid=$hostSlave)
|
|
slaverAddress=$(xe host-param-get param-name=address uuid=$hostSlave)
|
|
echo "##check slave $slaveName $slaveAddress $hostSlave"
|
|
slavePifs=$(xe pif-list host-uuid=$hostSlave| grep ^uuid | awk '{print $NF}')
|
|
for slavePif in $slavePifs; do
|
|
bond=$(xe pif-param-get param-name=bond-master-of uuid=$slavePif)
|
|
if [ -n "$bond" ]; then
|
|
moveConfigToBond $bond
|
|
fi
|
|
done
|
|
for masterPif in $masterPifs; do
|
|
network=$(xe pif-param-get param-name=network-uuid uuid=$masterPif)
|
|
management=$(xe pif-param-get param-name=management uuid=$masterPif)
|
|
slavePif=$(xe pif-list host-uuid=$hostSlave network-uuid=$network | grep ^uuid | awk '{print $NF}')
|
|
if [ -z "$slavePif" ]; then
|
|
echo " --ERROR:There is no NIC $device on host $hostSlave on network $network, please check"
|
|
exit 1
|
|
fi
|
|
done
|
|
echo "##done for slave $hostSlave"
|
|
fi
|
|
done
|
|
echo "#check is successful, you can add these hosts to CloudStack."
|
|
|