Example #1
0
    def test_unmanage_network_nm_running(self):
        self.add_commands(CommandCaptureCommand(('nmcli', 'con', 'load', self.write_ifcfg_result)))

        node_admin.unmanage_network(self.device_name, self.mac_address)

        self.assertRanAllCommandsInOrder()
        self.write_ifcfg_mock.assert_called_with(self.device_name, self.mac_address, None, None)
Example #2
0
    def set_address(self, ipv4_address, prefix):
        ifaddr = "%s/%s" % (ipv4_address, prefix)

        console_log.info("Set %s (%s) up" % (self.name, ifaddr))

        if self.ipv4_address != ipv4_address:
            node_admin.unmanage_network(self.device, self.mac_address)

            AgentShell.try_run(
                ['/sbin/ip', 'link', 'set', 'dev', self.name, 'up'])
            AgentShell.try_run(
                ['/sbin/ip', 'addr', 'add', ifaddr, 'dev', self.name])

            # The link address change is asynchronous, so we need to wait for the
            # address to stick of we have a race condition.
            timeout = 30
            while self.ipv4_address != ipv4_address and timeout != 0:
                self.refresh()
                time.sleep(1)
                timeout -= 1

            if self.ipv4_address != ipv4_address:
                raise RuntimeError(
                    'Unable to set the address %s for interface %s' %
                    (self.ipv4_address, self.name))

            node_admin.write_ifcfg(self.device, self.mac_address,
                                   self.ipv4_address, self.ipv4_netmask)
        else:
            console_log.info("Nothing to do as %s already has address %s" %
                             (self.name, ifaddr))
Example #3
0
    def test_unmanage_network_nm_failures(self):
        for expected_rc in [2, 127, 8]:
            self.reset_command_capture()
            self.add_commands(CommandCaptureCommand(('nmcli', 'con', 'load', self.write_ifcfg_result), rc=expected_rc))

            node_admin.unmanage_network(self.device_name, self.mac_address)

            self.assertRanAllCommandsInOrder()
    def test_unmanage_network_nm_unknown_failures(self):
        for expected_rc in [
                2, 127
        ]:  # Network Manager bad syntax and command unavailable return codes
            self.reset_command_capture()
            self.add_commands(
                CommandCaptureCommand(
                    ('nmcli', 'con', 'load', self.write_ifcfg_result),
                    rc=expected_rc))

            with self.assertRaises(AgentShell.CommandExecutionError):
                node_admin.unmanage_network(self.device_name, self.mac_address)

            self.assertRanAllCommandsInOrder()
    def test_unmanage_network_nm_not_installed(self):
        noent_exception = OSError()
        noent_exception.errno = errno.ENOENT

        with mock.patch('chroma_agent.lib.shell.AgentShell.try_run',
                        side_effect=noent_exception):
            self.assertIsNone(
                node_admin.unmanage_network(self.device_name,
                                            self.mac_address))
    def test_unmanage_network_nm_permission_denied(self):
        noent_exception = OSError()
        noent_exception.errno = errno.EACCES

        with mock.patch('chroma_agent.lib.shell.AgentShell.try_run',
                        side_effect=noent_exception):
            with self.assertRaises(OSError):
                self.assertIsNone(
                    node_admin.unmanage_network(self.device_name,
                                                self.mac_address))
Example #7
0
    def set_address(self, ipv4_address, prefix):
        ifaddr = "%s/%s" % (ipv4_address, prefix)

        if not ipv4_address or not prefix:
            console_log.info(
                "Set {} called with invalid parameters: {}".format(self.name, ifaddr)
            )
            return

        console_log.info("Set %s (%s) up" % (self.name, ifaddr))

        if self.ipv4_address != ipv4_address:
            node_admin.unmanage_network(self.device, self.mac_address)

            AgentShell.try_run(["/sbin/ip", "link", "set", "dev", self.name, "up"])
            AgentShell.try_run(["/sbin/ip", "addr", "add", ifaddr, "dev", self.name])

            # The link address change is asynchronous, so we need to wait for the
            # address to stick of we have a race condition.
            timeout = 30
            while self.ipv4_address != ipv4_address and timeout != 0:
                self.refresh()
                time.sleep(1)
                timeout -= 1

            if self.ipv4_address != ipv4_address:
                raise RuntimeError(
                    "Unable to set the address %s for interface %s"
                    % (self.ipv4_address, self.name)
                )

            node_admin.write_ifcfg(
                self.device, self.mac_address, self.ipv4_address, self.ipv4_netmask
            )
        else:
            console_log.info(
                "Nothing to do as %s already has address %s" % (self.name, ifaddr)
            )