def create_address(self, zone, vrf, afi, address, fqdn, is_test): """ Create IPAM record """ try: a = Address.objects.get( vrf=vrf, afi=afi, address=address ) if self.force: if a.fqdn != fqdn: self.info("Updating FQDN %s (%s)" % (a.address, a.fqdn)) a.fqdn = fqdn a.save() else: self.info("Address %s (%s) is already exists in IPAM, ignoring" % (a.address, a.fqdn)) except Address.DoesNotExist: a = Address( vrf=vrf, afi=afi, address=address, fqdn=fqdn, description="Imported from %s zone" % zone ) self.info("Creating address %s (%s)" % (a.address, a.fqdn)) if not is_test: a.save()
def sync_ipam(self): """ Synchronize FQDN and address with IPAM """ from noc.ip.models.address import Address from noc.ip.models.vrf import VRF # Generate FQDN from template fqdn = self.object_profile.get_fqdn(self) # Get existing IPAM record vrf = self.vrf if self.vrf else VRF.get_global() try: a = Address.objects.get(vrf=vrf, address=self.address) except Address.DoesNotExist: # Create new address Address( vrf=vrf, address=self.address, fqdn=fqdn, managed_object=self ).save() return # Update existing address if (a.managed_object != self or a.address != self.address or a.fqdn != fqdn): a.managed_object = self a.address = self.address a.fqdn = fqdn a.save()
def create_address(self, address): """ Create new address :param address: DiscoveredAddress instance :return: """ if self.is_ignored_address(address): return vrf = VRF.get_by_vpn_id(address.vpn_id) self.ensure_afi(vrf, address) if not self.has_address_permission(vrf, address): self.logger.debug( "Do not creating vpn_id=%s address=%s: Disabled by policy", address.vpn_id, address.address) metrics["address_creation_denied"] += 1 return a = Address(vrf=vrf, address=address.address, name=self.get_address_name(address), fqdn=address.fqdn, profile=address.profile, description=address.description, source=address.source, mac=address.mac) if address.source in LOCAL_SRC: a.managed_object = self.object a.subinterface = address.subinterface self.logger.info( "Creating address %s (%s): name=%s fqdn=%s mac=%s profile=%s source=%s", a.address, a.vrf.name, a.name, a.fqdn, a.mac, a.profile.name, a.source) a.save() self.fire_seen(a) metrics["address_created"] += 1
def create_address(self, zone, vrf, address, fqdn, address_profile, dry_run=False, force=False): """ Create IPAM record """ afi = "6" if ":" in address else "4" a = Address.objects.filter(vrf=vrf, afi=afi, address=address).first() if a: if force: if a.fqdn != fqdn: self.print("Updating FQDN %s (%s)" % (a.address, a.fqdn)) a.fqdn = fqdn a.name = fqdn if not dry_run: a.save() else: self.print( "Address %s (%s) is already exists in IPAM, ignoring" % (a.address, a.fqdn)) else: # Not found a = Address( vrf=vrf, afi=afi, address=address, profile=address_profile, fqdn=fqdn, name=fqdn, description="Imported from %s zone" % zone, ) self.print("Creating address %s (%s)" % (a.address, a.fqdn)) if not dry_run: a.save()
def new_address(self, vrf, afi, address, interface=None, description=None, mac=None): # Enable IPv4 AFI on VRF, if not set if afi == "4" and not vrf.afi_ipv4: self.info("Enabling IPv4 AFI on VRF %s (%s)" % (vrf.name, vrf.rd)) if self.to_save: vrf.afi_ipv4 = True vrf.save() # Enable IPv6 AFI on VRF, if not set if afi == "6" and not vrf.afi_ipv6: self.info("Enabling IPv6 AFI on VRF %s (%s)" % (vrf.name, vrf.rd)) if self.to_save: vrf.afi_ipv6 = True vrf.save() # Check constraints and save address if self.check_address_constraint(vrf, afi, address, interface): self.info("IP address found: %s:%s at %s" % (vrf, address, interface)) self.new_addresses += [{ "vrf": vrf, "address": address, "description": description, "object": self.object, "interface": interface }] if self.to_save: if not description: description = self.get_description(self.object, interface) Address(vrf=vrf, afi=afi, fqdn=self.get_fqdn(interface, vrf, address, self.context), mac=mac, address=address, description=description).save()