diff --git a/distributedcloud/dcmanager/audit/firmware_audit.py b/distributedcloud/dcmanager/audit/firmware_audit.py index dd331f44e..caf921448 100644 --- a/distributedcloud/dcmanager/audit/firmware_audit.py +++ b/distributedcloud/dcmanager/audit/firmware_audit.py @@ -34,6 +34,31 @@ from dcmanager.common import consts LOG = logging.getLogger(__name__) +class FirmwareAuditData(object): + def __init__(self, uuid, applied, pci_vendor, + pci_device, applied_labels): + self.uuid = uuid + self.applied = applied + self.pci_vendor = pci_vendor + self.pci_device = pci_device + self.applied_labels = applied_labels + + def to_dict(self): + return { + 'uuid': self.uuid, + 'applied': self.applied, + 'pci_vendor': self.pci_vendor, + 'pci_device': self.pci_device, + 'applied_labels': self.applied_labels, + } + + @classmethod + def from_dict(cls, values): + if values is None: + return None + return cls(**values) + + class FirmwareAudit(object): """Manages tasks related to firmware audits.""" @@ -77,7 +102,11 @@ class FirmwareAudit(object): # Filter images which have been applied on RegionOne for image in local_device_images: if image.applied: - filtered_images.append(image) + filtered_images.append(FirmwareAuditData(image.uuid, + image.applied, + image.pci_vendor, + image.pci_device, + image.applied_labels)) LOG.debug("RegionOne applied_images: %s" % filtered_images) except Exception: LOG.exception('Cannot retrieve device images for RegionOne, ' @@ -224,7 +253,10 @@ class FirmwareAudit(object): # Check that all device images applied in RegionOne # are applied and installed on this subcloud + # The audit_data for region one is a dictionary for image in audit_data: + # audit_data will be a dict from passing through RPC, so objectify + image = FirmwareAuditData.from_dict(image) proceed = self._check_subcloud_device_has_image(image, enabled_host_device_list, subcloud_device_image_states, diff --git a/distributedcloud/dcmanager/tests/unit/audit/test_firmware_audit_manager.py b/distributedcloud/dcmanager/tests/unit/audit/test_firmware_audit_manager.py index c8842627d..9f9ed23c5 100644 --- a/distributedcloud/dcmanager/tests/unit/audit/test_firmware_audit_manager.py +++ b/distributedcloud/dcmanager/tests/unit/audit/test_firmware_audit_manager.py @@ -376,6 +376,13 @@ class TestFirmwareAudit(base.DCManagerTestCase): self.mock_audit_worker_api.return_value = self.fake_audit_worker_api self.addCleanup(p.stop) + def _rpc_convert(self, object_list): + # Convert to dict like what would happen calling via RPC + dict_results = [] + for result in object_list: + dict_results.append(result.to_dict()) + return dict_results + def test_init(self): fm = firmware_audit.FirmwareAudit(self.ctxt, self.fake_dcmanager_api) @@ -406,6 +413,9 @@ class TestFirmwareAudit(base.DCManagerTestCase): patch_audit_data, firmware_audit_data, kubernetes_audit_data = \ am._get_audit_data(True, True, True) + # Convert to dict like what would happen calling via RPC + firmware_audit_data = self._rpc_convert(firmware_audit_data) + for name in ['subcloud1', 'subcloud2']: fm.subcloud_firmware_audit(name, firmware_audit_data) expected_calls = [ @@ -439,6 +449,9 @@ class TestFirmwareAudit(base.DCManagerTestCase): patch_audit_data, firmware_audit_data, kubernetes_audit_data = \ am._get_audit_data(True, True, True) + # Convert to dict like what would happen calling via RPC + firmware_audit_data = self._rpc_convert(firmware_audit_data) + for name in ['subcloud1', 'subcloud2']: fm.subcloud_firmware_audit(name, firmware_audit_data) expected_calls = [ @@ -472,6 +485,9 @@ class TestFirmwareAudit(base.DCManagerTestCase): patch_audit_data, firmware_audit_data, kubernetes_audit_data = \ am._get_audit_data(True, True, True) + # Convert to dict like what would happen calling via RPC + firmware_audit_data = self._rpc_convert(firmware_audit_data) + for name in ['subcloud1', 'subcloud2']: fm.subcloud_firmware_audit(name, firmware_audit_data) expected_calls = [ @@ -505,6 +521,9 @@ class TestFirmwareAudit(base.DCManagerTestCase): patch_audit_data, firmware_audit_data, kubernetes_audit_data = \ am._get_audit_data(True, True, True) + # Convert to dict like what would happen calling via RPC + firmware_audit_data = self._rpc_convert(firmware_audit_data) + for name in ['subcloud1', 'subcloud2']: fm.subcloud_firmware_audit(name, firmware_audit_data) expected_calls = [ @@ -538,6 +557,9 @@ class TestFirmwareAudit(base.DCManagerTestCase): patch_audit_data, firmware_audit_data, kubernetes_audit_data = \ am._get_audit_data(True, True, True) + # Convert to dict like what would happen calling via RPC + firmware_audit_data = self._rpc_convert(firmware_audit_data) + for name in ['subcloud1', 'subcloud2']: fm.subcloud_firmware_audit(name, firmware_audit_data) expected_calls = [ @@ -571,6 +593,9 @@ class TestFirmwareAudit(base.DCManagerTestCase): patch_audit_data, firmware_audit_data, kubernetes_audit_data = \ am._get_audit_data(True, True, True) + # Convert to dict like what would happen calling via RPC + firmware_audit_data = self._rpc_convert(firmware_audit_data) + for name in ['subcloud1', 'subcloud2']: fm.subcloud_firmware_audit(name, firmware_audit_data) expected_calls = [ @@ -604,6 +629,9 @@ class TestFirmwareAudit(base.DCManagerTestCase): patch_audit_data, firmware_audit_data, kubernetes_audit_data = \ am._get_audit_data(True, True, True) + # Convert to dict like what would happen calling via RPC + firmware_audit_data = self._rpc_convert(firmware_audit_data) + for name in ['subcloud1', 'subcloud2']: fm.subcloud_firmware_audit(name, firmware_audit_data) expected_calls = [ @@ -637,6 +665,9 @@ class TestFirmwareAudit(base.DCManagerTestCase): patch_audit_data, firmware_audit_data, kubernetes_audit_data = \ am._get_audit_data(True, True, True) + # Convert to dict like what would happen calling via RPC + firmware_audit_data = self._rpc_convert(firmware_audit_data) + for name in ['subcloud1', 'subcloud2']: fm.subcloud_firmware_audit(name, firmware_audit_data) expected_calls = [