From: Xiubo Li Date: Tue, 12 May 2020 03:13:14 +0000 (-0400) Subject: qa/tasks/cephfs/mount.py: always setup the NAT rules X-Git-Tag: v16.1.0~2359^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=refs%2Fpull%2F34978%2Fhead;p=ceph.git qa/tasks/cephfs/mount.py: always setup the NAT rules If the last test failed just after the 'ceph-brx' bridge is created but with setuping the NAT rules in iptables, so if we run the test case again, it will just skip seting the 'ceph-brx' and the NAT rules. Then deleting the NAT rules will get the errors like: iptables: Bad rule (does a matching rule exist in that chain?). Signed-off-by: Xiubo Li --- diff --git a/qa/tasks/cephfs/mount.py b/qa/tasks/cephfs/mount.py index 5b14ba6842d7..7f03fe7641e9 100644 --- a/qa/tasks/cephfs/mount.py +++ b/qa/tasks/cephfs/mount.py @@ -107,29 +107,31 @@ class CephFSMount(object): _ip, _mask = brx[0].split()[1].split('/', 1) if _ip != "{}".format(ip) or _mask != mask: raise RuntimeError("Conflict with existing ceph-brx {0}, new {1}/{2}".format(brx[0].split()[1], ip, mask)) - return - - log.info("Setuping the 'ceph-brx' with {0}/{1}".format(ip, mask)) # Setup the ceph-brx and always use the last valid IP - args = ["sudo", "bash", "-c", "ip link add name ceph-brx type bridge"] - self.client_remote.run(args=args, timeout=(5*60)) - args = ["sudo", "bash", "-c", "ip link set ceph-brx up"] - self.client_remote.run(args=args, timeout=(5*60)) - args = ["sudo", "bash", "-c", - "ip addr add {0}/{1} brd {2} dev ceph-brx".format(ip, mask, brd)] - self.client_remote.run(args=args, timeout=(5*60)) + if not brx: + log.info("Setuping the 'ceph-brx' with {0}/{1}".format(ip, mask)) + + args = ["sudo", "bash", "-c", "ip link add name ceph-brx type bridge"] + self.client_remote.run(args=args, timeout=(5*60)) + args = ["sudo", "bash", "-c", "ip link set ceph-brx up"] + self.client_remote.run(args=args, timeout=(5*60)) + args = ["sudo", "bash", "-c", + "ip addr add {0}/{1} brd {2} dev ceph-brx".format(ip, mask, brd)] + self.client_remote.run(args=args, timeout=(5*60)) - # Save the ip_forward - self.client_remote.run(args=['touch', '/tmp/python-ceph-brx'], - timeout=(5*60)) - p = self.client_remote.run(args=['cat', '/proc/sys/net/ipv4/ip_forward'], - stderr=StringIO(), stdout=StringIO(), - timeout=(5*60)) - val = p.stdout.getvalue().strip() - args = ["sudo", "bash", "-c", - "echo {} > /tmp/python-ceph-brx".format(val)] - self.client_remote.run(args=args, timeout=(5*60)) + # Save the ip_forward's old value + save_path = "/tmp/python-ceph-brx" + if not os.path.exists(save_path): + self.client_remote.run(args=['touch', save_path], timeout=(5*60)) + p = self.client_remote.run(args=['cat', '/proc/sys/net/ipv4/ip_forward'], + stderr=StringIO(), stdout=StringIO(), + timeout=(5*60)) + val = p.stdout.getvalue().strip() + args = ["sudo", "bash", "-c", + "echo {0} > {1}".format(val, save_path)] + self.client_remote.run(args=args, timeout=(5*60)) + args = ["sudo", "bash", "-c", "echo 1 > /proc/sys/net/ipv4/ip_forward"] self.client_remote.run(args=args, timeout=(5*60)) @@ -303,14 +305,15 @@ class CephFSMount(object): self.client_remote.run(args=args, timeout=(5*60)) # Restore the ip_forward - p = self.client_remote.run(args=['cat', '/tmp/python-ceph-brx'], + save_path = "/tmp/python-ceph-brx" + p = self.client_remote.run(args=['cat', save_path], stderr=StringIO(), stdout=StringIO(), timeout=(5*60)) val = p.stdout.getvalue().strip() args = ["sudo", "bash", "-c", "echo {} > /proc/sys/net/ipv4/ip_forward".format(val)] self.client_remote.run(args=args, timeout=(5*60)) - self.client_remote.run(args=['rm', '-f', '/tmp/python-ceph-brx'], + self.client_remote.run(args=['rm', '-f', save_path], timeout=(5*60)) def setup_netns(self):