diff --git a/netbox.py b/netbox.py index d6ab52d..3ac15e0 100644 --- a/netbox.py +++ b/netbox.py @@ -550,7 +550,7 @@ def update_device_inventory(self, server_inventory): # Controllers if server_inventory.get('Controllers'): - # only get controllers that actually have disitems attached + # only get controllers that actually have disk drives attached server_inventory_controller = [] for item in server_inventory['Controllers']: if item.get('DrivesAttached'): @@ -568,3 +568,20 @@ def update_device_inventory(self, server_inventory): server_inventory = server_inventory_controller, netbox_inventory = netbox_inventory_controller ) + + # Trusted Platform Modules + if server_inventory.get('TrustedModules'): + + server_inventory_tpm = server_inventory['TrustedModules'] + + netbox_inventory_tpm = self.filter_items(netbox_inventory, "TPM") + netbox_inventory_tpm = self._check_item_amount( + server_inventory_tpm, + netbox_inventory_tpm + ) + + self._update_inventory_items( + netbox_device_id = netbox_device_id, + server_inventory = server_inventory_tpm, + netbox_inventory = netbox_inventory_tpm + ) diff --git a/redfish_collector.py b/redfish_collector.py index a83381d..d8316ef 100644 --- a/redfish_collector.py +++ b/redfish_collector.py @@ -770,6 +770,23 @@ def _get_network_info(self, fields): self._inventory.update({'NetworkAdapters': network_cards_updated}) + def _get_tpm_info(self): + logging.info(" Target %s: Get the TPM data.", self.target) + systeminfo = self.connect_server(self._urls['Systems']) + tpm_modules = [] + if systeminfo and systeminfo.get('TrustedModules'): + for tpm in systeminfo['TrustedModules']: + module_type = tpm.get('InterfaceType') + module_state = tpm.get('Status', {}).get('State', 'Unknown') + tpm_info = { + 'Description': f'{module_type} - {module_state}', + 'Manufacturer': self._inventory['Manufacturer'], + 'NetboxName': 'TPM' + } + tpm_modules.append(tpm_info) + + self._inventory.update({'TrustedModules': tpm_modules}) + def _collect_component_data(self, component, method, component_name, fields=None): if component in self._urls and self._urls[component]: if fields: @@ -793,9 +810,10 @@ def collect(self): # Get the System URLs self._get_system_urls() if not self._urls.get('Systems'): - return + return None # Collect data for different components + self._collect_component_data('Systems', self._get_tpm_info, "TPM") self._collect_component_data('Chassis', self._get_chassis_urls, "Chassis") self._collect_component_data( 'Storage', self._get_storage_info, "Storage",