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)
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))
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))
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) )