Skip to content

Instantly share code, notes, and snippets.

@leoh0
Created October 10, 2016 05:55
Show Gist options
  • Save leoh0/eb8fee126563651f6c1bde813ed92619 to your computer and use it in GitHub Desktop.
Save leoh0/eb8fee126563651f6c1bde813ed92619 to your computer and use it in GitHub Desktop.
#!/opt/openstack/venv/bin/python
import MySQLdb
import sys
import json
connection = MySQLdb.connect(
host=sys.argv[1], user="nova",
passwd=sys.argv[2], db="nova")
cursor = connection.cursor()
cursor.execute("select network_info, instance_uuid from instance_info_caches where deleted=0")
h = {}
for f in cursor.fetchall():
d = json.loads(f[0])[0]
d['details'].pop('ovs_hybrid_plug', None)
net_prefix = d['network']['id'][:11]
d['network']['bridge'] = "brq%s" % net_prefix
d['network']['meta']['should_create_bridge'] = True
d['ovs_interfaceid'] = None
d['type'] = "bridge"
h[f[1]] = json.dumps([d])
cursor.close()
cursor = connection.cursor()
for k in h.keys():
cursor.execute("update instance_info_caches set network_info='%s' where instance_uuid='%s'" % (h[k], k))
cursor.close()
connection.commit()
connection.close()
connection = MySQLdb.connect(
host=sys.argv[1], user="neutron",
passwd=sys.argv[3], db="neutron")
cursor = connection.cursor()
cursor.execute("update ml2_port_bindings set vif_type='bridge', driver='linuxbridge', vif_details='{\"port_filter\": true}'")
cursor.close()
connection.commit()
connection.close()
#!/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)
@leoh0
Copy link
Author

leoh0 commented Oct 10, 2016

2015 3월. 달리는기차의 엔진 갈아끼우기

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment