From b9feb39e175f59f63a2781e9dd93ffdc1ad58e84 Mon Sep 17 00:00:00 2001 From: Remi Bergsma Date: Sat, 20 Feb 2016 20:05:48 +0100 Subject: [PATCH] apply static routes on change to master state --- .../debian/config/opt/cloud/bin/configure.py | 22 +--------- .../config/opt/cloud/bin/cs/CsRedundant.py | 10 +++-- .../config/opt/cloud/bin/cs/CsStaticRoutes.py | 42 +++++++++++++++++++ 3 files changed, 50 insertions(+), 24 deletions(-) create mode 100755 systemvm/patches/debian/config/opt/cloud/bin/cs/CsStaticRoutes.py diff --git a/systemvm/patches/debian/config/opt/cloud/bin/configure.py b/systemvm/patches/debian/config/opt/cloud/bin/configure.py index ab134fcfca71..0f16b1bf80a5 100755 --- a/systemvm/patches/debian/config/opt/cloud/bin/configure.py +++ b/systemvm/patches/debian/config/opt/cloud/bin/configure.py @@ -42,6 +42,7 @@ from cs.CsLoadBalancer import CsLoadBalancer from cs.CsConfig import CsConfig from cs.CsProcess import CsProcess +from cs.CsStaticRoutes import CsStaticRoutes class CsPassword(CsDataBag): @@ -74,27 +75,6 @@ def __update(self, vm_ip, password): logging.debug("Update password server result ==> %s" % result) -class CsStaticRoutes(CsDataBag): - - def process(self): - logging.debug("Processing CsStaticRoutes file ==> %s" % self.dbag) - for item in self.dbag: - if item == "id": - continue - self.__update(self.dbag[item]) - - def __update(self, route): - if route['revoke']: - command = "ip route del %s via %s" % (route['network'], route['gateway']) - result = CsHelper.execute(command) - else: - command = "ip route show | grep %s | awk '{print $1, $3}'" % route['network'] - result = CsHelper.execute(command) - if not result: - route_command = "ip route add %s via %s" % (route['network'], route['gateway']) - result = CsHelper.execute(route_command) - - class CsAcl(CsDataBag): """ Deal with Network acls diff --git a/systemvm/patches/debian/config/opt/cloud/bin/cs/CsRedundant.py b/systemvm/patches/debian/config/opt/cloud/bin/cs/CsRedundant.py index 77d0a6b9ccf1..3434611e64e4 100755 --- a/systemvm/patches/debian/config/opt/cloud/bin/cs/CsRedundant.py +++ b/systemvm/patches/debian/config/opt/cloud/bin/cs/CsRedundant.py @@ -38,6 +38,7 @@ from CsApp import CsPasswdSvc from CsAddress import CsDevice from CsRoute import CsRoute +from CsStaticRoutes import CsStaticRoutes import socket from time import sleep @@ -298,9 +299,9 @@ def set_master(self): continue dev = ip.get_device() logging.info("Will proceed configuring device ==> %s" % dev) - cmd2 = "ip link set %s up" % dev + cmd = "ip link set %s up" % dev if CsDevice(dev, self.config).waitfordevice(): - CsHelper.execute(cmd2) + CsHelper.execute(cmd) logging.info("Bringing public interface %s up" % dev) try: @@ -312,7 +313,10 @@ def set_master(self): else: logging.error("Device %s was not ready could not bring it up" % dev) - # ip route add default via $gw table Table_$dev proto static + logging.debug("Configuring static routes") + static_routes = CsStaticRoutes("staticroutes", self.config) + static_routes.process() + cmd = "%s -C %s" % (self.CONNTRACKD_BIN, self.CONNTRACKD_CONF) CsHelper.execute("%s -c" % cmd) CsHelper.execute("%s -f" % cmd) diff --git a/systemvm/patches/debian/config/opt/cloud/bin/cs/CsStaticRoutes.py b/systemvm/patches/debian/config/opt/cloud/bin/cs/CsStaticRoutes.py new file mode 100755 index 000000000000..57b259aabc4e --- /dev/null +++ b/systemvm/patches/debian/config/opt/cloud/bin/cs/CsStaticRoutes.py @@ -0,0 +1,42 @@ +#!/usr/bin/python +# -- coding: utf-8 -- +# 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. + +from CsDatabag import CsDataBag +from CsRedundant import * + + +class CsStaticRoutes(CsDataBag): + + def process(self): + logging.debug("Processing CsStaticRoutes file ==> %s" % self.dbag) + for item in self.dbag: + if item == "id": + continue + self.__update(self.dbag[item]) + + def __update(self, route): + if route['revoke']: + command = "ip route del %s via %s" % (route['network'], route['gateway']) + CsHelper.execute(command) + else: + command = "ip route show | grep %s | awk '{print $1, $3}'" % route['network'] + result = CsHelper.execute(command) + if not result: + route_command = "ip route add %s via %s" % (route['network'], route['gateway']) + CsHelper.execute(route_command) \ No newline at end of file