def _set_network_subnet(self, params): netaddr = params.get('subnet', '') net_addrs = [] # lookup a free network address for nat and isolated automatically if not netaddr: for net_name in self.get_list(): network = NetworkModel.get_network(self.conn.get(), net_name) xml = network.XMLDesc(0) subnet = NetworkModel.get_network_from_xml(xml)['subnet'] subnet and net_addrs.append(ipaddr.IPNetwork(subnet)) netaddr = knetwork.get_one_free_network(net_addrs) if not netaddr: raise OperationFailed("KCHNET0009E", {'name': params['name']}) try: ip = ipaddr.IPNetwork(netaddr) except ValueError: raise InvalidParameter("KCHNET0003E", {'subent': netaddr, 'network': params['name']}) if ip.ip == ip.network: ip.ip = ip.ip + 1 dhcp_start = str(ip.ip + ip.numhosts / 2) dhcp_end = str(ip.ip + ip.numhosts - 2) params.update({'net': str(ip), 'dhcp': {'range': {'start': dhcp_start, 'end': dhcp_end}}})
def _get_available_address(self, addr_pools=[]): invalid_addrs = [] for net_name in self.get_list(): network = NetworkModel.get_network(self.conn.get(), net_name) xml = network.XMLDesc(0) subnet = NetworkModel.get_network_from_xml(xml)['subnet'] subnet and invalid_addrs.append(ipaddr.IPNetwork(subnet)) addr_pools = addr_pools if addr_pools else knetwork.PrivateNets return knetwork.get_one_free_network(invalid_addrs, addr_pools)