예제 #1
0
 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()
예제 #2
0
 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()
예제 #3
0
파일: address.py 프로젝트: skripkar/noc
 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
예제 #4
0
파일: dnszone.py 프로젝트: nbashev/noc
 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()
예제 #5
0
파일: ipreport.py 프로젝트: fossabot/noc
 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()