Пример #1
0
    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)
Пример #2
0
    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)
Пример #3
0
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()
Пример #4
0
    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)
Пример #5
0
    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
        )
Пример #6
0
    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)