def test_get_info_when_highlevel_attr_is_missing(self): keystone_v2_component = { "keystone": { "users": [ { "id": "test_user_id", "enabled": True, } ], "version": "v2.0" }, } expected = [ { "id": "test_user_id", "enabled_flag": True, }, ] client_provider_mock = self._prepare_client_provider_mock() self._update_mock_with_complex_dict(client_provider_mock, keystone_v2_component) try: kc_v2_info = helpers.get_info_from_os_resource_manager( client_provider_mock, consts.OSWL_RESOURCE_TYPES.keystone_user ) except KeyError: raise AssertionError("KeyError must not be raised") self.assertItemsEqual(expected, kc_v2_info)
def test_additional_display_opts_supplied(self): expected_display_options = {"search_opts": {"all_tenants": 1}} client_provider_mock = self._prepare_client_provider_mock() self._update_mock_with_complex_dict(client_provider_mock, self.components_to_mock) helpers.get_info_from_os_resource_manager( client_provider_mock, consts.OSWL_RESOURCE_TYPES.vm) client_provider_mock.nova.servers.list.assert_called_once_with( **expected_display_options) helpers.get_info_from_os_resource_manager( client_provider_mock, consts.OSWL_RESOURCE_TYPES.volume) client_provider_mock.cinder.volumes.list.assert_called_once_with( **expected_display_options)
def collect(resource_type): try: operational_clusters = ClusterCollection.filter_by( iterable=None, status=consts.CLUSTER_STATUSES.operational).all() error_clusters = ClusterCollection.filter_by( iterable=None, status=consts.CLUSTER_STATUSES.error).all() all_envs_last_recs = \ OpenStackWorkloadStatsCollection.get_last_by_resource_type( resource_type) ready_or_error_ids = set([c.id for c in operational_clusters] + [c.id for c in error_clusters]) envs_ids_to_clear = set(r.cluster_id for r in all_envs_last_recs) - \ ready_or_error_ids # Clear current resource data for unavailable clusters. # Current OSWL data is cleared for those clusters which status is not # 'operational' nor 'error' or when cluster was removed. Data is # cleared for cluster only if it was updated recently (today or # yesterday). While this collector is running with interval much # smaller than one day it should not miss any unavailable cluster. for id in envs_ids_to_clear: oswl_statistics_save(id, resource_type, []) # Collect current OSWL data and update data in DB for cluster in operational_clusters: try: client_provider = helpers.ClientProvider(cluster) proxy_for_os_api = utils.get_proxy_for_cluster(cluster) version_info = utils.get_version_info(cluster) with utils.set_proxy(proxy_for_os_api): data = helpers.get_info_from_os_resource_manager( client_provider, resource_type) oswl_statistics_save(cluster.id, resource_type, data, version_info=version_info) except errors.StatsException as e: logger.error("Cannot collect OSWL resource {0} for cluster " "with id {1}. Details: {2}." .format(resource_type, cluster.id, six.text_type(e)) ) except Exception as e: logger.exception("Error while collecting OSWL resource {0} " "for cluster with id {1}. Details: {2}." .format(resource_type, cluster.id, six.text_type(e)) ) db.commit() except Exception as e: logger.exception("Exception while collecting OS workloads " "for resource name {0}. Details: {1}" .format(resource_type, six.text_type(e))) finally: db.remove()
def test_different_api_versions_handling_for_users(self): keystone_v2_component = { "keystone": { "users": [ { "id": "test_user_id", "enabled": True, "tenantId": "test_tenant_id", } ], "version": "v2.0" }, } keystone_v3_component = { "keystone": { "users": [ { "id": "test_user_id", "enabled": True, "default_project_id": "test_tenant_id", } ], "version": "v3" }, } client_provider_mock = self._prepare_client_provider_mock() self._update_mock_with_complex_dict(client_provider_mock, keystone_v2_component) kc_v2_info = helpers.get_info_from_os_resource_manager( client_provider_mock, consts.OSWL_RESOURCE_TYPES.keystone_user ) client_provider_mock = self._prepare_client_provider_mock() self._update_mock_with_complex_dict(client_provider_mock, keystone_v3_component) kc_v3_info = helpers.get_info_from_os_resource_manager( client_provider_mock, consts.OSWL_RESOURCE_TYPES.keystone_user ) self.assertEqual(kc_v2_info, kc_v3_info)
def test_additional_display_opts_supplied(self): expected_display_options = {"search_opts": {"all_tenants": 1}} client_provider_mock = self._prepare_client_provider_mock() self._update_mock_with_complex_dict(client_provider_mock, self.components_to_mock) helpers.get_info_from_os_resource_manager( client_provider_mock, consts.OSWL_RESOURCE_TYPES.vm ) client_provider_mock.nova.servers.list.assert_called_once_with( **expected_display_options ) helpers.get_info_from_os_resource_manager( client_provider_mock, consts.OSWL_RESOURCE_TYPES.volume ) client_provider_mock.cinder.volumes.list.assert_called_once_with( **expected_display_options )
def test_get_oswl_info(self): expected = { "vm": [ { "id": 1, "status": "running", "power_state": 1, "created_at": "date_of_creation", "image_id": "test_image_id", "flavor_id": "test_flavor_id", "host_id": "test_host_id", "tenant_id": "test_tenant_id", }, ], "flavor": [ { "id": 2, "ram": 64, "vcpus": 4, "ephemeral": 1, "disk": 1, "swap": 16, }, ], "image": [ { "id": 4, "minDisk": 1, "minRam": 64, "sizeBytes": 13000000, "created_at": "some_date_of_creation", "updated_at": "some_date_of_update" }, ], "volume": [ { "id": 3, "availability_zone": "test_availability_zone", "encrypted_flag": False, "bootable_flag": False, "status": "available", "volume_type": "test_volume", "size": 1, "snapshot_id": None, "attachments": [ { "device": "/dev/sda1", "server_id": "one_test_server_id", "id": "firs_test_id", }, { "device": "/dev/sda2", "server_id": "another_test_server_id", "id": "second_test_id", }, ], "tenant_id": "test_tenant", }, ], "tenant": [ { "id": 5, "enabled_flag": True, }, ], "keystone_user": [ { "id": "test_user_id", "enabled_flag": True, "tenant_id": "test_tenant_id", }, ], } client_provider_mock = self._prepare_client_provider_mock() self._update_mock_with_complex_dict(client_provider_mock, self.components_to_mock) for resource_name, expected_data in six.iteritems(expected): actual = helpers.get_info_from_os_resource_manager( client_provider_mock, resource_name ) self.assertEqual(actual, expected_data)