def test_add_and_delete_network(dbm): address = '192.168.1.0' netmask = '255.255.255.0' network = Network() network.setAddress(address) network.setNetmask(netmask) network.setType('provision') with dbm.session() as session: NetworkDbApi().addNetwork(session, network) # attempt to add the same network twice.. with pytest.raises(NetworkAlreadyExists): NetworkDbApi().addNetwork(session, network) stored_network = NetworkDbApi().getNetwork(session, address, netmask) assert stored_network new_netmask = '255.255.0.0' stored_network.setNetmask(new_netmask) assert NetworkDbApi().updateNetwork(session, stored_network) updated_network = NetworkDbApi().getNetworkById( session, stored_network.getId()) assert updated_network.getNetmask() == new_netmask NetworkDbApi().deleteNetwork(session, updated_network.getId()) # attempt to delete network already deleted with pytest.raises(NetworkNotFound): NetworkDbApi().getNetwork(session, address, new_netmask)
def runCommand(self): self.parseArgs() if not self.getArgs().name and \ not self.getArgs().hardwareProfileName: self.getParser().error( 'the following arguments are required: NAME') if self.getArgs().name and self.getArgs().hardwareProfileName: self.getParser().error( 'argument name: not allowed with argument --name') name = self.getArgs().name \ if self.getArgs().name else self.getArgs().hardwareProfileName api = HardwareProfileWsApi(username=self.getUsername(), password=self.getPassword(), baseurl=self.getUrl(), verify=self._verify) spApi = SoftwareProfileWsApi(username=self.getUsername(), password=self.getPassword(), baseurl=self.getUrl(), verify=self._verify) nodeApi = NodeWsApi(username=self.getUsername(), password=self.getPassword(), baseurl=self.getUrl(), verify=self._verify) hp = api.getHardwareProfile(name, UpdateHardwareProfileCli.optionDict) if self.getArgs().newName is not None: hp.setName(self.getArgs().newName) if self.getArgs().description is not None: hp.setDescription(self.getArgs().description) if self.getArgs().nameFormat is not None: hp.setNameFormat(self.getArgs().nameFormat) if self.getArgs().kernel is not None: hp.setKernel(self.getArgs().kernel) if self.getArgs().kernelParameters is not None: hp.setKernelParams(self.getArgs().kernelParameters) if self.getArgs().initrd is not None: hp.setInitrd(self.getArgs().initrd) if self.getArgs().soAllowed is not None: if self.getArgs().soAllowed.lower() == _('true'): hp.setSoftwareOverrideAllowed(True) elif self.getArgs().soAllowed.lower() == _('false'): hp.setSoftwareOverrideAllowed(False) else: raise InvalidCliRequest( _('--software-override-allowed must be either "true" or' ' "false".')) if self.getArgs().idleProfile is not None and \ self.getArgs().bUnsetIdleProfile: raise InvalidCliRequest( _('Conflicting options --idle-software-profile and' ' --unset-idle-software-profile')) if self.getArgs().idleProfile is not None: sp = spApi.getSoftwareProfile(self.getArgs().idleProfile) hp.setIdleSoftwareProfileId(sp.getId()) if self.getArgs().bUnsetIdleProfile: hp.setIdleSoftwareProfileId(None) if self.getArgs().location is not None: hp.setLocation(self.getArgs().location) if self.getArgs().localBootParameters is not None: hp.setLocalBootParams(self.getArgs().localBootParameters) if self.getArgs().cost is not None: hp.setCost(self.getArgs().cost) if self.getArgs().resourceAdapter: resourceAdapter = ResourceAdapter( name=self.getArgs().resourceAdapter) hp.setResourceAdapter(resourceAdapter) if self.getArgs().default_adapter_config: hp.setDefaultResourceAdapterConfig( self.getArgs().default_adapter_config) if self.getArgs().deletePNic is not None: out = TortugaObjectList() for nic in hp.getProvisioningNics(): for dnic in self.getArgs().deletePNic: if dnic == nic.getIp(): # Skip over this item..its getting deleted break else: # Not a NIC we are deleting out.append(nic) hp.setProvisioningNics(out) if self.getArgs().addPNic is not None: for nicIp in self.getArgs().addPNic: nicsNode = nodeApi.getNodeByIp(nicIp) if nicsNode is not None: for nic in nicsNode.getNics(): if nic.getIp() == nicIp: hp.getProvisioningNics().append(nic) break if self.getArgs().deleteNetwork is not None: # Make sure we actually delete a network out = TortugaObjectList() out.extend(hp.getNetworks()) for netstring in self.getArgs().deleteNetwork: try: dnet, dmask, ddev = netstring.split('/') except ValueError: raise InvalidCliRequest( _('Incorrect input format for --delete-network' ' ("address/mask/device")')) for network in hp.getNetworks(): if dnet == network.getAddress() and \ dmask == network.getNetmask() and \ ddev == network.getNetworkDevice().getName(): # Skip over this item..its getting deleted for n in out: if n.getId() == network.getId(): out.remove(n) break break else: # Not a NIC we are deleting print('Ignoring deletion of non-existent network:' ' %s/%s/%s' % (dnet, dmask, ddev)) hp.setNetworks(out) if self.getArgs().addNetwork: for netstring in self.getArgs().addNetwork: try: anet, amask, adev = netstring.split('/') except ValueError: raise InvalidCliRequest( _('Incorrect input format for --add-network' ' ("address/mask/device")')) network = Network() networkDevice = NetworkDevice() networkDevice.setName(adev) network.setAddress(anet) network.setNetmask(amask) network.setNetworkDevice(networkDevice) hp.getNetworks().append(network) if self.getArgs().tags: tags = hp.getTags() tags.update(parse_tags(self.getArgs().tags)) hp.setTags(tags) if self.getArgs().remove_tags: tags = hp.getTags() for string in self.getArgs().remove_tags: for tag_name in string.split(','): if tag_name in tags.keys(): tags.pop(tag_name) hp.setTags(tags) api.updateHardwareProfile(hp)