bugfix:remove openvswitch when enable opencontrail 41/10741/2
authorchenshuai@huawei.com <chenshuai@huawei.com>
Thu, 25 Feb 2016 09:30:24 +0000 (17:30 +0800)
committerchenshuai@huawei.com <chenshuai@huawei.com>
Fri, 26 Feb 2016 03:33:53 +0000 (11:33 +0800)
JIRA: COMPASS-322

Change-Id: Ie095bbba6e22bb583f3caa56a40feb9157b4150e
Signed-off-by: chenshuai@huawei.com <chenshuai@huawei.com>
deploy/adapters/ansible/roles/open-contrail/files/recover_network_opencontrail.py [new file with mode: 0755]
deploy/adapters/ansible/roles/open-contrail/files/setup_networks_opencontrail.py [new file with mode: 0755]
deploy/adapters/ansible/roles/open-contrail/tasks/install/install-common.yml
deploy/adapters/ansible/roles/open-contrail/tasks/main.yml
deploy/adapters/ansible/roles/open-contrail/tasks/uninstall-openvswitch.yml [new file with mode: 0755]
deploy/deploy_host.sh

diff --git a/deploy/adapters/ansible/roles/open-contrail/files/recover_network_opencontrail.py b/deploy/adapters/ansible/roles/open-contrail/files/recover_network_opencontrail.py
new file mode 100755 (executable)
index 0000000..e829b65
--- /dev/null
@@ -0,0 +1,33 @@
+import yaml
+import netaddr
+import os
+import log as logging
+
+LOG = logging.getLogger("net-recover-opencontrail")
+config_path = os.path.join(os.path.dirname(__file__), "network.cfg")
+
+def setup_bondings(bond_mappings):
+    print bond_mappings
+
+def setup_ips_new(config):
+    LOG.info("setup_ips_new enter")
+    network = netaddr.IPNetwork(config["ip_settings"]["br-prv"]["cidr"])
+    intf_name = config["provider_net_mappings"][0]["interface"]
+    cmd = "ip addr add %s/%s brd %s dev %s;" \
+          % (config["ip_settings"]["br-prv"]["ip"], config["ip_settings"]["br-prv"]["netmask"], str(network.broadcast), intf_name)
+    #cmd = "ip link set br-ex up;"
+    #cmd += "ip addr add %s/%s brd %s dev %s;" \
+    #      % (config["ip_settings"]["br-prv"]["ip"], config["ip_settings"]["br-prv"]["netmask"], str(network.broadcast), 'br-ex')
+    cmd += "route del default;"
+    cmd += "ip route add default via %s dev %s" % (config["ip_settings"]["br-prv"]["gw"], intf_name)
+    #cmd += "ip route add default via %s dev %s" % (config["ip_settings"]["br-prv"]["gw"], 'br-ex')
+    LOG.info("setup_ips_new: cmd=%s" % cmd)
+    os.system(cmd)
+
+
+def main(config):
+    setup_ips_new(config)    
+
+if __name__ == "__main__":
+    config = yaml.load(open(config_path))
+    main(config)
diff --git a/deploy/adapters/ansible/roles/open-contrail/files/setup_networks_opencontrail.py b/deploy/adapters/ansible/roles/open-contrail/files/setup_networks_opencontrail.py
new file mode 100755 (executable)
index 0000000..f8eb306
--- /dev/null
@@ -0,0 +1,97 @@
+import yaml
+import netaddr
+import os
+import log as logging
+
+LOG = logging.getLogger("net-init-opencontrail")
+config_path = os.path.join(os.path.dirname(__file__), "network.cfg")
+
+def setup_bondings(bond_mappings):
+    print bond_mappings
+
+def add_vlan_link(interface, ifname, vlan_id):
+    LOG.info("add_vlan_link enter")
+    cmd = "ip link add link %s name %s type vlan id %s; " % (ifname, interface, vlan_id)
+    cmd += "ip link set %s up; ip link set %s up" % (interface, ifname)
+    LOG.info("add_vlan_link: cmd=%s" % cmd)
+    os.system(cmd)
+
+#def add_ovs_port(ovs_br, ifname, uplink, vlan_id=None):
+#    LOG.info("add_ovs_port enter")
+#    cmd = "ovs-vsctl --may-exist add-port %s %s" % (ovs_br, ifname)
+#    if vlan_id:
+#        cmd += " tag=%s" % vlan_id
+#    cmd += " -- set Interface %s type=internal;" % ifname
+#    cmd += "ip link set dev %s address `ip link show %s |awk '/link\/ether/{print $2}'`;" \
+#            % (ifname, uplink)
+#    cmd += "ip link set %s up;" % ifname
+#    LOG.info("add_ovs_port: cmd=%s" % cmd)
+#    os.system(cmd)
+
+def setup_intfs(sys_intf_mappings, uplink_map):
+    LOG.info("setup_intfs enter")
+    for intf_name, intf_info in sys_intf_mappings.items():
+        if intf_info["type"] == "vlan":
+            add_vlan_link(intf_name, intf_info["interface"], intf_info["vlan_tag"])
+#        elif intf_info["type"] == "ovs":
+#            add_ovs_port(
+#                    intf_info["interface"],
+#                    intf_name,
+#                    uplink_map[intf_info["interface"]],
+#                    vlan_id=intf_info.get("vlan_tag"))
+        else:
+            pass
+
+def setup_ips(ip_settings, sys_intf_mappings):
+    LOG.info("setup_ips enter")
+    for intf_info in ip_settings.values():
+        network = netaddr.IPNetwork(intf_info["cidr"])
+        if sys_intf_mappings[intf_info["name"]]["type"] == "ovs":
+            intf_name = intf_info["name"]
+        else:
+            intf_name = intf_info["alias"]
+        if "gw" in intf_info:
+            continue
+        cmd = "ip addr add %s/%s brd %s dev %s;" \
+              % (intf_info["ip"], intf_info["netmask"], str(network.broadcast),intf_name)
+#        if "gw" in intf_info:
+#            cmd += "route del default;"
+#            cmd += "ip route add default via %s dev %s" % (intf_info["gw"], intf_name)
+        LOG.info("setup_ips: cmd=%s" % cmd)
+        os.system(cmd)
+
+def setup_ips_new(config):
+    LOG.info("setup_ips_new enter")
+    network = netaddr.IPNetwork(config["ip_settings"]["br-prv"]["cidr"])
+    intf_name = config["provider_net_mappings"][0]["interface"]
+    cmd = "ip addr add %s/%s brd %s dev %s;" \
+          % (config["ip_settings"]["br-prv"]["ip"], config["ip_settings"]["br-prv"]["netmask"], str(network.broadcast), intf_name)
+#    cmd = "ip link set br-ex up;"
+#    cmd += "ip addr add %s/%s brd %s dev %s;" \
+#          % (config["ip_settings"]["br-prv"]["ip"], config["ip_settings"]["br-prv"]["netmask"], str(network.broadcast), 'br-ex')
+    cmd += "route del default;"
+    cmd += "ip route add default via %s dev %s" % (config["ip_settings"]["br-prv"]["gw"], intf_name)
+#    cmd += "ip route add default via %s dev %s" % (config["ip_settings"]["br-prv"]["gw"], 'br-ex')
+    LOG.info("setup_ips_new: cmd=%s" % cmd)
+    os.system(cmd)
+
+def remove_ovs_kernel_mod(config):
+    LOG.info("remove_ovs_kernel_mod enter")
+    cmd = "rmmod vport_vxlan; rmmod openvswitch;"
+    LOG.info("remove_ovs_kernel_mod: cmd=%s" % cmd)
+    os.system(cmd)
+
+def main(config):
+    uplink_map = {}
+    setup_bondings(config["bond_mappings"])
+    remove_ovs_kernel_mod(config)
+    for provider_net in config["provider_net_mappings"]:
+        uplink_map[provider_net['name']] = provider_net['interface']
+
+    setup_intfs(config["sys_intf_mappings"], uplink_map)
+    setup_ips(config["ip_settings"], config["sys_intf_mappings"])
+    setup_ips_new(config)
+
+if __name__ == "__main__":
+    config = yaml.load(open(config_path))
+    main(config)
index b1d774e..e94621b 100755 (executable)
@@ -22,7 +22,7 @@
 
 - name: download OpenContrail package file
   get_url: url="http://{{ http_server.stdout_lines[0] }}/packages/open-contrail/{{ package }}"  dest=/tmp/{{ package }}
-
+#"
 
 - name: "install contrail install package"
 #  sudo: True
index 968148f..6c01f0f 100755 (executable)
   include: provision/provision-compute.yml
   when: groups['opencontrail']|length !=0 and inventory_hostname not in groups['opencontrail']
 
+- name: Remove openvswitch on compute
+  include: uninstall-openvswitch.yml
+  when: groups['opencontrail']|length !=0 and inventory_hostname not in groups['opencontrail']
+
 - name: Enable Service Daemon
   shell: if [ -f “\/opt\/service.bak” ] ; then mv /opt/service.bak /opt/service ; fi
   when: groups['opencontrail']|length !=0
diff --git a/deploy/adapters/ansible/roles/open-contrail/tasks/uninstall-openvswitch.yml b/deploy/adapters/ansible/roles/open-contrail/tasks/uninstall-openvswitch.yml
new file mode 100755 (executable)
index 0000000..195a899
--- /dev/null
@@ -0,0 +1,46 @@
+---
+- name: del ovs bridge
+  shell: ovs-vsctl del-br br-int; ovs-vsctl del-br br-tun; ovs-vsctl del-br br-prv;
+
+- name: remove ovs and ovs-plugin daeman
+  shell: >
+    sed -i '/neutron-plugin-openvswitch-agent/d' /opt/service ;
+    sed -i '/openvswitch-switch/d' /opt/service ;
+
+- name: stop ovs and ovs-plugin
+  shell: service openvswitch-switch stop; service neutron-plugin-openvswitch-agent stop;
+
+- name: remove ovs and ovs-plugin files
+  shell: >
+    update-rc.d -f neutron-plugin-openvswitch-agent remove;
+    mv /etc/init.d/neutron-plugin-openvswitch-agent /home/neutron-plugin-openvswitch-agent;
+    mv /etc/init/neutron-plugin-openvswitch-agent.conf /home/neutron-plugin-openvswitch-agent.conf;
+    update-rc.d -f openvswitch-switch remove ;
+    mv /etc/init.d/openvswitch-switch /home/openvswitch-switch ;
+    mv /etc/init/openvswitch-switch.conf /home/openvswitch-switch.conf ;
+    update-rc.d -f neutron-ovs-cleanup remove ;
+    mv /etc/init.d/neutron-ovs-cleanup /home/neutron-ovs-cleanup ;
+    mv /etc/init/neutron-ovs-cleanup.conf /home/neutron-ovs-cleanup.conf ;
+
+- name: remove ovs kernel module
+  shell: rmmod vport_vxlan; rmmod openvswitch;
+  ignore_errors: True
+
+- name: copy recovery script
+  copy:  src={{ item }} dest=/opt/setup_networks
+  with_items:
+    - recover_network_opencontrail.py
+    - setup_networks_opencontrail.py
+
+- name: recover external script
+  shell: python /opt/setup_networks/recover_network_opencontrail.py
+
+- name: modify net-init
+  shell: sed -i 's/setup_networks.py/setup_networks_opencontrail.py/g' /etc/init.d/net_init
+
+- name: resolve dual NIC problem
+  shell: >
+    echo "net.ipv4.conf.all.arp_ignore=1" >> /etc/sysctl.conf ;
+    /sbin/sysctl -p ;
+    echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore ;
+
index 8e7997e..2e2ec71 100755 (executable)
@@ -49,7 +49,7 @@ function deploy_host(){
 
     RET=$?
     sleep $((AYNC_TIMEOUT+5))
-    if [[ $RET ]]; then
+    if [[ $RET -eq 0 ]]; then
        /bin/true
     else
        /bin/false