Пример #1
0
    def test_netns_check_dns(self):

        # Find nameserver address and use it
        fd = open('/etc/resolv.conf', 'r')
        self.nameserver_ip = None
        for elem in fd.readlines():
            match = re.match('nameserver\s+(\S+)', elem)
            if match:
                logger.debug("Nameserver IP is {}".format(match.group(1)))
                self.nameserver_ip = match.group(1)

        if self.nameserver_ip:
            fake_nameserver = "nameserver " + self.nameserver_ip + "\n"
        else:
            fake_nameserver = "nameserver 1.1.1.1\n"
        new_resolvconf_hdl = tempfile.NamedTemporaryFile(delete=False)
        new_resolvconf_hdl_path = new_resolvconf_hdl.name
        new_resolvconf_hdl.write(fake_nameserver)
        new_resolvconf_hdl.close()
        logger.debug("Temp file name is :{}".format(new_resolvconf_hdl_path))

        RwNetns.mount_bind_resolv_conf(new_resolvconf_hdl_path)

        a = urllib2.urlopen("http://www.google.com", timeout=1)
        self.assertEqual(a.getcode(), 200)
        logger.debug("URL return code is :{}".format(a.getcode()))

        os.remove(new_resolvconf_hdl_path)
Пример #2
0
    def test_netns_check_dns(self):

        # Find nameserver address and use it
        fd = open('/etc/resolv.conf','r')
        self.nameserver_ip = None
	for elem in fd.readlines():
	    match = re.match('nameserver\s+(\S+)',elem)
	    if match:
	       logger.debug("Nameserver IP is {}" .format(match.group(1)))
	       self.nameserver_ip = match.group(1)

        if self.nameserver_ip:
           fake_nameserver = "nameserver "+ self.nameserver_ip + "\n"
        else:
	   fake_nameserver = "nameserver 1.1.1.1\n"
        new_resolvconf_hdl = tempfile.NamedTemporaryFile(delete=False)
	new_resolvconf_hdl_path = new_resolvconf_hdl.name
	new_resolvconf_hdl.write(fake_nameserver)
        new_resolvconf_hdl.close()
        logger.debug("Temp file name is :{}".format(new_resolvconf_hdl_path))

        RwNetns.mount_bind_resolv_conf(new_resolvconf_hdl_path)

	a = urllib2.urlopen("http://www.google.com", timeout=1)
        self.assertEqual(a.getcode(),200)
        logger.debug("URL return code is :{}".format(a.getcode()))

        os.remove(new_resolvconf_hdl_path)
Пример #3
0
    def test_netns_create(self):
        create_rc = RwNetns.create_context("foo")
        self.assertTrue(create_rc >= 0)
	logger.debug("Create Context Foo Rc:{}".format(create_rc))

	foo_fd = RwNetns.get_netfd("foo")
	self.assertTrue(foo_fd >= 0)
	logger.debug("Get foo fd: {}".format(foo_fd))

        delete_rc = RwNetns.delete_context("foo")
        self.assertEqual(delete_rc,0)
        logger.debug("Delete Context Foo Rc:{}" .format(delete_rc))
Пример #4
0
    def test_netns_create(self):
        create_rc = RwNetns.create_context("foo")
        self.assertTrue(create_rc >= 0)
        logger.debug("Create Context Foo Rc:{}".format(create_rc))

        foo_fd = RwNetns.get_netfd("foo")
        self.assertTrue(foo_fd >= 0)
        logger.debug("Get foo fd: {}".format(foo_fd))

        delete_rc = RwNetns.delete_context("foo")
        self.assertEqual(delete_rc, 0)
        logger.debug("Delete Context Foo Rc:{}".format(delete_rc))
Пример #5
0
 def _unmount_resolv_conf(self):
     self._log_event(UnmountingResolvConf())
     unbind_rc = RwNetns.unmount_resolv_conf()
     if unbind_rc != 0:
         self._log_event(UnmountingResolvConfFailed(), rc=unbind_rc)
         raise NetworkNamespaceException("Could not unbind netns resolv conf (%s). rc=%s"
                                         % (self.resolv_conf_path, unbind_rc))
Пример #6
0
    def setUp(self):
        self.original_fd = RwNetns.get_current_netfd()
        logger.debug("Original netfd: {}".format(self.original_fd))

        if os.geteuid() != 0:
            exit(
                "You need to have root privileges to run this script. Exiting."
            )
Пример #7
0
 def _unmount_resolv_conf(self):
     self._log_event(UnmountingResolvConf())
     unbind_rc = RwNetns.unmount_resolv_conf()
     if unbind_rc != 0:
         self._log_event(UnmountingResolvConfFailed(), rc=unbind_rc)
         raise NetworkNamespaceException(
             "Could not unbind netns resolv conf (%s). rc=%s" %
             (self.resolv_conf_path, unbind_rc))
Пример #8
0
    def exit(self):
        self._log_event(ExitingNetns())

        if self._bind_resolv_conf:
            self._unmount_resolv_conf()

        change_rc = RwNetns.change_fd(self._current_fd)
        if change_rc != 0:
            self._log_event(ChangeNetnsFdFailed(), rc=change_rc)
            raise NetworkNamespaceException("Change back to default namespace fd (%s) failed with rc == %s."
                                            % (self._current_fd, change_rc))
Пример #9
0
    def exit(self):
        self._log_event(ExitingNetns())

        if self._bind_resolv_conf:
            self._unmount_resolv_conf()

        change_rc = RwNetns.change_fd(self._current_fd)
        if change_rc != 0:
            self._log_event(ChangeNetnsFdFailed(), rc=change_rc)
            raise NetworkNamespaceException(
                "Change back to default namespace fd (%s) failed with rc == %s."
                % (self._current_fd, change_rc))
Пример #10
0
    def __init__(self, netns_name, bind_resolv_conf=True):
        if not isinstance(netns_name, six.string_types):
            raise TypeError("netns is expected to be a string: %s", netns_name)

        self._netns_name = netns_name
        self._current_fd = RwNetns.get_current_netfd()
        self._bind_resolv_conf = bind_resolv_conf

        if self._current_fd <= 0:
            self._log_event(GetNetnsFdFailed(), rc=self._current_fd)
            raise NetworkNamespaceException("Get current namespace fd failed with rc == %s."
                                            % self._current_fd)
Пример #11
0
    def test_netns_change(self):
        create_rc = RwNetns.create_context("bar")
        self.assertTrue(create_rc >= 0)
        logger.debug("Create Context Bar Rc:{}".format(create_rc))

        bar_fd = RwNetns.get_netfd("bar")
        self.assertTrue(bar_fd >= 0)
        logger.debug("Get bar fd: {}".format(bar_fd))

        change_rc = RwNetns.change("bar")
        self.assertEqual(change_rc, 0)
        logger.debug("Change Context Bar Rc:{}".format(change_rc))

        current_fd = RwNetns.get_current_netfd()
        self.assertTrue(current_fd >= 0)
        logger.debug("Current netfd:{}".format(current_fd))

        change_fd_rc = RwNetns.change_fd(self.original_fd)
        self.assertEqual(change_fd_rc, 0)
        logger.debug("Change fd {} Rc: {}".format(self.original_fd,
                                                  change_fd_rc))

        delete_rc = RwNetns.delete_context("bar")
        self.assertEqual(delete_rc, 0)
        logger.debug("Delete Context Foo Rc: {}".format(delete_rc))
Пример #12
0
    def __init__(self, netns_name, bind_resolv_conf=True):
        if not isinstance(netns_name, six.string_types):
            raise TypeError("netns is expected to be a string: %s", netns_name)

        self._netns_name = netns_name
        self._current_fd = RwNetns.get_current_netfd()
        self._bind_resolv_conf = bind_resolv_conf

        if self._current_fd <= 0:
            self._log_event(GetNetnsFdFailed(), rc=self._current_fd)
            raise NetworkNamespaceException(
                "Get current namespace fd failed with rc == %s." %
                self._current_fd)
Пример #13
0
    def _mount_resolv_conf(self):
        if not os.path.isfile(self.resolv_conf_path):
            self._log_event(MissingResolvConf())
            raise NetworkNamespaceException("Network namespace resolv.conf file does not exist: %s"
                                            % self.resolv_conf_path)

        with open(self.resolv_conf_path) as resolv_conf_hdl:
            self._log_event(MountingResolvConf(), content=resolv_conf_hdl.read())

        bind_rc = RwNetns.mount_bind_resolv_conf(self.resolv_conf_path)
        if bind_rc != 0:
            self._log_event(MountingResolvConfFailed, rc=bind_rc)
            raise NetworkNamespaceException("Could not mount netns resolv conf (%s). rc=%s"
                                            % (self.resolv_conf_path, bind_rc))
Пример #14
0
    def _mount_resolv_conf(self):
        if not os.path.isfile(self.resolv_conf_path):
            self._log_event(MissingResolvConf())
            raise NetworkNamespaceException(
                "Network namespace resolv.conf file does not exist: %s" %
                self.resolv_conf_path)

        with open(self.resolv_conf_path) as resolv_conf_hdl:
            self._log_event(MountingResolvConf(),
                            content=resolv_conf_hdl.read())

        bind_rc = RwNetns.mount_bind_resolv_conf(self.resolv_conf_path)
        if bind_rc != 0:
            self._log_event(MountingResolvConfFailed, rc=bind_rc)
            raise NetworkNamespaceException(
                "Could not mount netns resolv conf (%s). rc=%s" %
                (self.resolv_conf_path, bind_rc))
Пример #15
0
    def enter(self):
        self._log_event(EnteringNetns())

        if NetnsEnvironment.current_netns is not None:
            self._log_event(MultipleNetnsError(),
                            current_netns_name=NetnsEnvironment.current_netns.name)
            raise NetworkNamespaceException("Cannot enter more than one network namespace (already in %s)",
                                            NetnsEnvironment.current_netns.name)

        change_rc = RwNetns.change(self._netns_name)
        if change_rc != 0:
            self._log_event(ChangeNetnsFailed(), rc=change_rc)
            raise NetworkNamespaceException("Change to namespace (%s) failed with rc == %s."
                                            % (self._netns_name, change_rc))

        if self._bind_resolv_conf:
            self._mount_resolv_conf()
Пример #16
0
    def enter(self):
        self._log_event(EnteringNetns())

        if NetnsEnvironment.current_netns is not None:
            self._log_event(
                MultipleNetnsError(),
                current_netns_name=NetnsEnvironment.current_netns.name)
            raise NetworkNamespaceException(
                "Cannot enter more than one network namespace (already in %s)",
                NetnsEnvironment.current_netns.name)

        change_rc = RwNetns.change(self._netns_name)
        if change_rc != 0:
            self._log_event(ChangeNetnsFailed(), rc=change_rc)
            raise NetworkNamespaceException(
                "Change to namespace (%s) failed with rc == %s." %
                (self._netns_name, change_rc))

        if self._bind_resolv_conf:
            self._mount_resolv_conf()
Пример #17
0
    def test_netns_change(self):
        create_rc = RwNetns.create_context("bar")
        self.assertTrue(create_rc >= 0)
	logger.debug("Create Context Bar Rc:{}" .format(create_rc))

	bar_fd = RwNetns.get_netfd("bar")
	self.assertTrue(bar_fd >= 0)
	logger.debug("Get bar fd: {}" .format(bar_fd))

	change_rc = RwNetns.change("bar")
	self.assertEqual(change_rc,0)
	logger.debug("Change Context Bar Rc:{}" .format(change_rc))

        current_fd = RwNetns.get_current_netfd()
	self.assertTrue(current_fd >= 0)
	logger.debug("Current netfd:{}" .format(current_fd))

        change_fd_rc = RwNetns.change_fd(self.original_fd)
        self.assertEqual(change_fd_rc,0)
        logger.debug("Change fd {} Rc: {}" .format(self.original_fd, change_fd_rc))

        delete_rc = RwNetns.delete_context("bar")
        self.assertEqual(delete_rc,0)
        logger.debug("Delete Context Foo Rc: {}" .format(delete_rc))
Пример #18
0
    def setUp(self):
        self.original_fd = RwNetns.get_current_netfd()
        logger.debug("Original netfd: {}" .format(self.original_fd))
 
        if os.geteuid() != 0:
           exit("You need to have root privileges to run this script. Exiting.")