diff --git a/netbox_agent/config.py b/netbox_agent/config.py index cf88f69..44d1019 100644 --- a/netbox_agent/config.py +++ b/netbox_agent/config.py @@ -28,6 +28,8 @@ def get_config(): p.add_argument('--update-inventory', action='store_true', help='Update inventory') p.add_argument('--update-location', action='store_true', help='Update location') p.add_argument('--update-psu', action='store_true', help='Update PSU') + p.add_argument('--purge-old-devices', action='store_true', + help='Purge existing (old ?) devices having same name but different serial') p.add_argument('--log_level', default='debug') p.add_argument('--netbox.url', help='Netbox URL') diff --git a/netbox_agent/server.py b/netbox_agent/server.py index 9cedf62..e052a44 100644 --- a/netbox_agent/server.py +++ b/netbox_agent/server.py @@ -228,6 +228,13 @@ class ServerBase(): ) return new_blade + def _netbox_deduplicate_server(self): + serial = self.get_service_tag() + hostname = self.get_hostname() + server = nb.dcim.devices.get(name=hostname) + if server and server.serial != serial: + server.delete() + def _netbox_create_server(self, datacenter, tenant, rack): device_role = get_device_role(config.device.server_role) device_type = get_device_type(self.get_product_name()) @@ -336,6 +343,9 @@ class ServerBase(): rack = self.get_netbox_rack() tenant = self.get_netbox_tenant() + if config.purge_old_devices: + self._netbox_deduplicate_server() + if self.is_blade(): chassis = nb.dcim.devices.get( serial=self.get_chassis_service_tag()