def check_reserved_addresses_in_use(self): """TODO: DOC """ # Need to import Utils here, since Utils imports this module, # and we cannot have circular module dependencies. from Cerebrum.modules.dns.Utils import Find default_zone = self.const.DnsZone(getattr(cereconf, 'DNS_DEFAULT_ZONE', 'uio')) find = Find(self._db, default_zone) ip_number = IPNumber.IPNumber(self._db) ip_number.clear() res_adr_in_use = [] for row in ip_number.find_in_range(self.ip_min, self.ip_max): current_address = long(row['ipnr']) if current_address in self.reserved_adr: res_adr_in_use.append(IPCalc.long_to_ip(current_address)) if res_adr_in_use: res_adr_in_use.sort() raise SubnetError( "The following reserved ip's are already in use " + "on (new?) subnet %s/%s: " % (self.subnet_ip, self.subnet_mask) + "'%s'." % (', '.join(res_adr_in_use)))
def check_reserved_addresses_in_use(self): """TODO: DOC """ ip_number = IPNumber.IPNumber(self._db) ip_number.clear() res_adr_in_use = [] for row in ip_number.find_in_range(self.ip_min, self.ip_max): current_address = long(row['ipnr']) if current_address in self.reserved_adr: res_adr_in_use.append(IPCalc.long_to_ip(current_address)) if res_adr_in_use: res_adr_in_use.sort() raise SubnetError( "The following reserved ip's are already in use" " on (new?) subnet %s/%s: '%s'." % (self.subnet_ip, self.subnet_mask, ', '.join(res_adr_in_use)))
def subnet_info(self, operator, identifier): """Lists the following information about the given subnet: * Subnett * Netmask * Entity ID * Description * Name-prefix * VLAN number * DNS-delegation status * Range of IPs on subnet * Number of reserved addresses * A list of the reserved adresses """ s = Subnet(self.db) s.find(identifier) if s.dns_delegated: delegated = "Yes" else: delegated = "No" data = { 'subnet': "%s/%s" % (s.subnet_ip, s.subnet_mask), 'entity_id': str(s.entity_id), 'netmask': IPCalc.netmask_to_ip(s.subnet_mask), 'desc': s.description, 'delegated': delegated, 'name_prefix': s.name_prefix, 'no_of_res_adr': str(s.no_of_reserved_adr) } if s.vlan_number is not None: data['vlan'] = str(s.vlan_number) else: data['vlan'] = "(None)" data['ip_range'] = "%s - %s" % (IPCalc.long_to_ip(s.ip_min), IPCalc.long_to_ip(s.ip_max)) # Calculate number of used and unused IP-addresses on this subnet # ^^^^^^ excluding reserved addresses data['used'] = str(len(self._find.find_used_ips(s.subnet_ip))) try: data['unused'] = str(len(self._find.find_free_ip(s.subnet_ip))) except CerebrumError: data['unused'] = "0" reserved_adresses = list(s.reserved_adr) if reserved_adresses: reserved_adresses.sort() data["res_adr1"] = "%s (net)" % IPCalc.long_to_ip(reserved_adresses.pop(0)) else: data["res_adr1"] = "(None)" ret = [data, ] if reserved_adresses: last_ip = reserved_adresses.pop() for address in reserved_adresses: ret.append({'res_adr': IPCalc.long_to_ip(address)}) ret.append({'res_adr': "%s (broadcast)" % IPCalc.long_to_ip(last_ip)}) return ret