netbox-scanner icon indicating copy to clipboard operation
netbox-scanner copied to clipboard

Is there a way to have dns_name field populated instead of description?

Open sholland opened this issue 5 years ago • 1 comments

Is there a way to have dns_name field populated instead of description? Or unless I am misreading this looks like its hard coded in https://github.com/lopes/netbox-scanner/blob/master/nbs/netxms.py#L37

sholland avatar Jan 19 '21 22:01 sholland

hey, It would be better when the dns_name is set and the description is something like autodiscovered or you can decide by you own with relation you want.

i changed it in my fork but only for the nmap option and it´s also hard coded. I guess for the class NetXMS it could be similar. I extended the tuple for the possibility to add a word (i used the unknown value) as the description.

nmap.py class Nmap

import os
import xml.etree.ElementTree as ET


class Nmap(object):

    def __init__(self, path, unknown):
        self.unknown = unknown
        self.path = path
        self.hosts = list()

    def run(self):
        for f in os.listdir(self.path):
            if not f.endswith('.xml'):
                continue
            abspath = os.path.join(self.path, f)
            tree = ET.parse(abspath)
            root = tree.getroot()

            for host in root.findall('host'):
                try:
                    self.hosts.append((
                        host.find('address').attrib['addr'],
                        host.find('hostnames').find('hostname').attrib['name'],
                        self.unknown
                    ))
                except AttributeError:
                    self.hosts.append((
                        host.find('address').attrib['addr'],
                        self.unknown
                    ))

init.py function sync_host

     def sync_host(self, host):
         '''Syncs a single host to NetBox
 
         host: a tuple like ('10.0.0.1','Gateway')
         returns: True if syncing is good or False for errors
         '''
         try:
             nbhost = self.netbox.ipam.ip_addresses.get(address=host[0])
         except ValueError:
             logging.error(f'duplicated: {host[0]}/32')
             self.stats['errors'] += 1
             return False
         try: 
             hostindex=host[2] 
         except IndexError: 
             hostindex=host[1]
 
         if nbhost:
             if (self.tag in nbhost.tags):
                 if (host[1] != nbhost.description):
                     aux = nbhost.description
                     nbhost.description = hostindex
                     nbhost.dns_name=host[1]
                     nbhost.save()
                     logging.info(
                         f'updated: {host[0]}/32 "{aux}" -> "{host[1]}"')
                     self.stats['updated'] += 1
                 else:
                     logging.info(f'unchanged: {host[0]}/32 "{host[1]}"')
                     self.stats['unchanged'] += 1
             else:
                 logging.info(f'unchanged: {host[0]}/32 "{host[1]}"')
                 self.stats['unchanged'] += 1
         else:
             
             self.netbox.ipam.ip_addresses.create(
                 address=host[0],
                 tags=[{"name": self.tag}],
                 dns_name=host[1],
                 description=hostindex
             )
             logging.info(f'created: {host[0]}/32 "{host[1]}"')
             self.stats['created'] += 1
 
         return True

that's my result

grafik

@lopes I can change it for more individual Option for the nmap function, but I should extend the netbox-scanner.conf with new values for a clean style that's it also works with netxms.

florianow avatar May 17 '21 15:05 florianow