| #!/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." |