From 9e6867574a3fe46486eeb906f26888be43c7a96e Mon Sep 17 00:00:00 2001 From: Szilard Cserey Date: Thu, 24 Sep 2015 14:10:07 +0200 Subject: Fixes and updates for clean.sh and setup.sh Remove PXE interface (VLAN 0) and check IP Forwarding is enabled Add/Clean VLAN 300 interface Swap IP address from Base interface to VLAN interface Change-Id: Ia6ce76b220518f979dc2e3e9acd8e53540cbaef1 Signed-off-by: Szilard Cserey --- common/ci/clean.sh | 64 ++++++++++++++++++++++++++- common/ci/setup.sh | 128 ++++++++++++++++++++++++++++++++++++++++------------- 2 files changed, 160 insertions(+), 32 deletions(-) diff --git a/common/ci/clean.sh b/common/ci/clean.sh index 4cbc67b..6bc39f5 100755 --- a/common/ci/clean.sh +++ b/common/ci/clean.sh @@ -16,6 +16,9 @@ red=`tput setaf 1` green=`tput setaf 2` pxe_bridge='pxebr' vm_dir=/var/opt/opnfv +private_interface='enp6s0' +management_vid=300 +management_interface="${private_interface}.${management_vid}" ##END VARS ##FUNCTIONS @@ -26,6 +29,27 @@ display_usage() { echo -e "\n -base_config : Full path of ksgen settings file to parse. Required. Will provide BMC info to shutdown hosts. Example: -base_config /opt/myinventory.yml \n" } +remove_interface_with_name_pattern() { + if [ -z $1 ]; then + echo "${red}Cannot remove interface. No interface name pattern specified!${reset}" + exit 1 + fi + local interface_name_pattern=$1 + echo "${blue} Looking for interface with name pattern: ${interface_name_pattern}${reset}" + interface=$(ip link show | grep -oP ${interface_name_pattern}) + if [ ! -z "${interface}" ]; then + echo "${blue}Interface ${interface} detected! Removing...${reset}" + ip link del ${interface} + if ip link show | grep -oP ${interface_name_pattern}; then + echo "${red}Could not remove interface ${interface} ${reset}" + exit 1 + else + echo "${blue}Interface ${interface} successfully removed${reset}" + fi + else + echo "${blue}Interface with name pattern ${interface_name_pattern} does not exist, nothing to remove${reset}" + fi +} ##END FUNCTIONS if [[ ( $1 == "--help") || $1 == "-h" ]]; then @@ -241,10 +265,10 @@ for kernel_mod in vboxnetadp vboxnetflt vboxpci vboxdrv kvm_intel kvm; do fi done -###remove pxebr +###remove PXE bridge echo "${blue}Checking whether PXE bridge ${pxe_bridge} exists${reset}" if ! brctl show ${pxe_bridge} 2>&1 | grep -i 'No such device'; then - echo "${blue}PXE bridge detected. Removing...${reset}" + echo "${blue}PXE bridge ${pxe_bridge} detected! Removing...${reset}" link_state=$(ip link show ${pxe_bridge} | grep -oP 'state \K[^ ]+') if [[ ${link_state} != 'DOWN' ]]; then ip link set dev ${pxe_bridge} down @@ -265,3 +289,39 @@ if ! brctl show ${pxe_bridge} 2>&1 | grep -i 'No such device'; then else echo "${blue}PXE bridge ${pxe_bridge} does not exist${reset}" fi + +###remove PXE interface (VLAN 0) +echo "${blue}Checking whether PXE interface (VLAN 0) exists and remove it${reset}" +remove_interface_with_name_pattern "enp.+s.+\.0" + +###moving IP Address from Openstack Management interface back to base interface +echo "${blue}Moving IP addresses from VLAN ${management_vid} interface ${management_interface} back to interface ${private_interface}${reset}" +management_interface_ip_addr_list=$(ip addr show ${management_interface} | grep -oP 'inet \K[^ ]+') +if [[ ! -z ${management_interface_ip_addr_list} ]]; then + echo -e "${blue}Found IP addresses on VLAN ${management_vid} interface ${management_interface}:\n${management_interface_ip_addr_list}${reset}" + for management_interface_ip_addr in ${management_interface_ip_addr_list} + do + echo "${blue}Removing IP address ${management_interface_ip_addr} from VLAN ${management_vid} interface ${management_interface}${reset}" + ip addr del ${management_interface_ip_addr} dev ${management_interface} + if ip addr show ${management_interface} | grep ${management_interface_ip_addr}; then + echo "${red}Could not remove IP address ${management_interface_ip_addr} from VLAN ${management_vid} interface ${management_interface}${reset}" + exit 1 + fi + if ! ip addr show ${private_interface} | grep ${management_interface_ip_addr}; then + echo "${blue}Adding IP address ${management_interface_ip_addr} to interface ${private_interface}${reset}" + ip addr add ${management_interface_ip_addr} dev ${private_interface} + if ! ip addr show ${private_interface} | grep ${management_interface_ip_addr}; then + echo "${red}Could not set IP address ${management_interface_ip_addr} to interface ${private_interface}${reset}" + exit 1 + fi + else + echo "${blue}Interface ${private_interface} already has assigned to itself this IP address ${management_interface_ip_addr}${reset}" + fi + done +else + echo "${red}No IP Address is assigned to VLAN ${management_vid} interface ${management_interface}, there isn't any IP address to move to interface ${private_interface}${reset}" +fi + +###remove Openstack Management interface (VLAN 300) +echo "${blue}Checking whether Openstack Management interface (VLAN 300) exists and remove it${reset}" +remove_interface_with_name_pattern "enp.+s.+\.${management_vid}" diff --git a/common/ci/setup.sh b/common/ci/setup.sh index 82fede4..bb54147 100755 --- a/common/ci/setup.sh +++ b/common/ci/setup.sh @@ -14,6 +14,8 @@ private_interface='enp6s0' public_interface='enp8s0' pxe_bridge='pxebr' fuel_gw_ip='10.20.0.1/16' +management_vid=300 +management_interface="${private_interface}.${management_vid}" ##END VARS ##FUNCTIONS @@ -77,13 +79,33 @@ start_libvirtd_service() { fi } + +#Check whether interface exists +check_interface_exists() { + if [ -z $1 ]; then + echo "${red}Cannot check whether interface exists! No interface specified!${reset}" + exit 1 + fi + local interface=$1 + #Check whether interface exists + echo "${blue}Checking whether interface ${interface} exists${reset}" + if ! ip link show ${interface}; then + echo "${red}Interface ${interface} does not exists!${reset}" + exit 1 + else + echo "${green}OK!${reset}" + fi +} + #Check whether interface is UP -check_interface() { +check_interface_up() { if [ -z $1 ]; then - echo "${red}Cannot bring UP, No interface specified${reset}" + echo "${red}Cannot check whether interface is UP! No interface specified!${reset}" exit 1 fi local interface=$1 + + #Check whether interface is UP echo "${blue}Checking whether interface ${interface} is UP${reset}" link_state=$(ip link show ${interface} | grep -oP 'state \K[^ ]+') if [[ ${link_state} != 'UP' ]]; then @@ -100,33 +122,39 @@ check_interface() { fi } -setup_pxe_bridge() { - #Check whether private interface exists - echo "${blue}Checking whether private interface ${private_interface} exists${reset}" - if ! ip link show ${private_interface}; then - echo "${red}Private interface ${private_interface} does not exists!${reset}" +#Create VLAN interface +create_vlan_interface() { + if [ -z $1 ]; then + echo "${red}Cannot create VLAN interface. No base interface specified!${reset}" + exit 1 + fi + if [ -z $2 ]; then + echo "${red}Cannot create VLAN interface. No VLAN ID specified!${reset}" exit 1 - else - echo "${green}OK!${reset}" fi - #Check whether private interface is UP - check_interface ${private_interface} + local base_interface=$1 + local vid=$2 + local interface="${base_interface}.${vid}" - pxe_vid=0 - pxe_interface="${private_interface}.${pxe_vid}" - - #Check whether VLAN 0 (PXE) interface exists - echo "${blue}Checking whether VLAN 0 (PXE) interface ${pxe_interface} exists${reset}" - if ! ip link show ${pxe_interface}; then - echo "${blue}Creating VLAN 0 (PXE) interface ${pxe_interface}${reset}" - ip link add link ${private_interface} name ${pxe_interface} type vlan id ${pxe_vid} + echo "${blue}Checking whether VLAN ${vid} interface ${interface} exists, otherwise create it${reset}" + if ! ip link show ${interface}; then + echo "${blue}Creating VLAN ${vid} interface ${interface}${reset}" + ip link add link ${base_interface} name ${interface} type vlan id ${vid} else echo "${green}OK!${reset}" fi - #Check whether VLAN 0 (PXE) interface is UP - check_interface ${pxe_interface} + #Check whether VLAN interface is UP + check_interface_up ${interface} +} + +###setup PXE Bridge +setup_pxe_bridge() { + pxe_vid=0 + pxe_interface="${private_interface}.${pxe_vid}" + #Check whether VLAN 0 (PXE) interface exists, otherwise create it + create_vlan_interface ${private_interface} ${pxe_vid} #Check whether PXE bridge exists echo "${blue}Checking whether PXE bridge ${pxe_bridge} exists${reset}" @@ -151,7 +179,7 @@ setup_pxe_bridge() { fi #Check whether PXE bridge is UP - check_interface ${pxe_bridge} + check_interface_up ${pxe_bridge} #Add Fuel Gateway IP Address to PXE bridge echo "${blue}Checking whether Fuel Gateway IP Address ${fuel_gw_ip} is assigned to PXE bridge ${pxe_bridge}${reset}" @@ -166,20 +194,21 @@ setup_pxe_bridge() { echo "${green}OK!${reset}" fi } + ###check whether access to public network is granted check_access_enabled_to_public_network() { - #Check whether public interface exists - echo "${blue}Checking whether public interface ${public_interface} exists${reset}" - if ! ip link show ${public_interface}; then - echo "${red}Public interface ${public_interface} does not exists!${reset}" - exit 1 + #Check whether IP forwarding is enabled + echo "${blue}Checking whether IP Forwarding is enabled ${reset}" + if ! sysctl net.ipv4.ip_forward | grep "net.ipv4.ip_forward = 1"; then + sysctl -w net.ipv4.ip_forward=1 + if ! sysctl net.ipv4.ip_forward | grep "net.ipv4.ip_forward = 1"; then + echo "${red}IP Forwarding could not be enabled!${reset}" + exit 1 + fi else echo "${green}OK!${reset}" fi - #Check whether public interface ${public_interface} is UP - check_interface ${public_interface} - echo "${blue}Checking whether access is granted to public network through interface ${public_interface}${reset}" if ! sudo iptables -t nat -L POSTROUTING -v | grep "MASQUERADE.*${public_interface}.*anywhere.*anywhere"; then echo "${blue}Enable access to public network through interface ${public_interface}${reset}" @@ -188,6 +217,40 @@ check_access_enabled_to_public_network() { echo "${green}OK!${reset}" fi } + +###setup Openstack Management Interface +create_openstack_management_interface() { + #Check whether Openstack Management interface exists, otherwise create it + create_vlan_interface ${private_interface} ${management_vid} + + echo "${blue}Moving IP addresses from interface ${private_interface} to VLAN ${management_vid} interface ${management_interface}${reset}" + private_interface_ip_addr_list=$(ip addr show ${private_interface} | grep -oP 'inet \K[^ ]+') + if [[ ! -z ${private_interface_ip_addr_list} ]]; then + echo -e "${blue}Found IP addresses on interface ${private_interface}:\n${private_interface_ip_addr_list}${reset}" + for private_interface_ip_addr in ${private_interface_ip_addr_list} + do + echo "${blue}Removing IP address ${private_interface_ip_addr} from interface ${private_interface}${reset}" + ip addr del ${private_interface_ip_addr} dev ${private_interface} + if ip addr show ${private_interface} | grep ${private_interface_ip_addr}; then + echo "${red}Could not remove IP address ${private_interface_ip_addr} from interface ${private_interface}${reset}" + exit 1 + fi + if ! ip addr show ${management_interface} | grep ${private_interface_ip_addr}; then + echo "${blue}Adding IP address ${private_interface_ip_addr} to VLAN ${management_vid} interface ${management_interface}${reset}" + ip addr add ${private_interface_ip_addr} dev ${management_interface} + if ! ip addr show ${management_interface} | grep ${private_interface_ip_addr}; then + echo "${red}Could not set IP address ${private_interface_ip_addr} to VLAN ${management_vid} interface ${management_interface}${reset}" + exit 1 + fi + else + echo "${blue}VLAN ${management_vid} interface ${management_interface} already has assigned to itself this IP address ${private_interface_ip_addr}${reset}" + fi + done + else + echo "${red}No IP Address is assigned to interface ${private_interface}, there isn't any IP address to move to interface ${management_interface}${reset}" + fi +} + ##END FUNCTIONS main() { @@ -195,8 +258,13 @@ main() { install_libvirt load_kvm_kernel_mod start_libvirtd_service + check_interface_exists ${private_interface} + check_interface_up ${private_interface} + check_interface_exists ${public_interface} + check_interface_up ${public_interface} setup_pxe_bridge check_access_enabled_to_public_network + create_openstack_management_interface } main "$@" -- cgit 1.2.3-korg