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