#!/bin/bash # 미래를 위한 투자.. chef-client 에서 안되는 부분 cp /opt/openstack/src/neutron/etc/neutron/rootwrap.d/linuxbridge-plugin.filters /etc/neutron/rootwrap.d/linuxbridge-plugin.filters source /root/openrc source /opt/openstack/venv/bin/activate GATHER_INFORMATION_PREFIX=/tmp/ovstobridge GATHER_INFORMATION=$GATHER_INFORMATION_PREFIX-if DHCP_GATHER_INFORMATION=$GATHER_INFORMATION_PREFIX-dhcp echo '' > $GATHER_INFORMATION echo '' > $DHCP_GATHER_INFORMATION # local 자원 수집 while read -r _ ID _ IP _ ; do IP=$(echo $IP | cut -d'=' -f2) NET_ID=$(neutron port-list --fixed-ips ip_address=$IP -c network_id | sed '2d' | grep '|' | cut -d' ' -f2) PORT_ID=$(neutron port-list --fixed-ips ip_address=$IP -c id | sed '2d' | grep '|' | cut -d' ' -f2) NET_ID_PREFIX=${NET_ID:0:11} PORT_ID_PREFIX=${PORT_ID:0:11} VLAN=$(neutron net-show $NET_ID -c provider:segmentation_id | sed '2d' | grep '|' | cut -d' ' -f4) echo $VLAN $NET_ID_PREFIX $PORT_ID_PREFIX >> $GATHER_INFORMATION done< <(nova list --all-tenants --fields Networks --host $HOSTNAME | sed '2d' | grep '|') # dhcp 자원 수집 while read -r DHCP_PORT_ID ; do DHCP_NET_ID=$(neutron port-show $DHCP_PORT_ID -F network_id | sed '2d' | grep '|' | cut -d' ' -f4) DHCP_NET_ID_PREFIX=${DHCP_NET_ID:0:11} DHCP_PORT_ID_PREFIX=${DHCP_PORT_ID:0:11} DHCP_VLAN=$(neutron net-show $DHCP_NET_ID -c provider:segmentation_id | sed '2d' | grep '|' | cut -d' ' -f4) echo $DHCP_VLAN $DHCP_NET_ID_PREFIX $DHCP_PORT_ID_PREFIX >> $DHCP_GATHER_INFORMATION done< <(neutron port-list --device-owner=network:dhcp --binding:host_id $HOSTNAME | sed '2d' | grep '|' | cut -d' ' -f2) # bridge 와 vlan 인터페이스 생성 while read -r VLAN NET_ID_PREFIX; do if [ "x$VLAN" == "x" ] ; then continue; fi brctl addbr brq${NET_ID_PREFIX} brctl setfd brq${NET_ID_PREFIX} '0' brctl stp brq${NET_ID_PREFIX} off ip link set brq${NET_ID_PREFIX} up ip link add link eth1 name eth1.$VLAN type vlan id $VLAN ip link set eth1.$VLAN up brctl addif brq${NET_ID_PREFIX} eth1.$VLAN done< <(cat $GATHER_INFORMATION_PREFIX-* | cut -d' ' -f-2 | sort | uniq) # vm vif 옮기기 while read -r VLAN NET_ID_PREFIX PORT_ID_PREFIX; do if [ "x$VLAN" == "x" ] ; then continue; fi brctl delif qbr${PORT_ID_PREFIX} tap${PORT_ID_PREFIX} brctl addif brq${NET_ID_PREFIX} tap${PORT_ID_PREFIX} done< <(cat $GATHER_INFORMATION) # dhcp 옮기기 while read -r DHCP_VLAN DHCP_NET_ID_PREFIX DHCP_PORT_ID_PREFIX; do if [ "x$DHCP_VLAN" == "x" ] ; then continue; fi ovs-vsctl del-port br-int tap$DHCP_PORT_ID_PREFIX brctl addif brq${DHCP_NET_ID_PREFIX} tap${DHCP_PORT_ID_PREFIX} done< <(cat $DHCP_GATHER_INFORMATION)