Example #1
0
 def list(self, request, *args, **kwargs):
     """Obtain the list of sources."""
     response = super().list(request=request, args=args, kwargs=kwargs)
     _, tenant = self._get_account_and_tenant(request)
     for source in response.data["data"]:
         if source.get("authentication", {}).get("credentials",
                                                 {}).get("client_secret"):
             del source["authentication"]["credentials"]["client_secret"]
         try:
             manager = ProviderManager(source["uuid"])
         except ProviderManagerError:
             source["provider_linked"] = False
             source["infrastructure"] = "Unknown"
             source["cost_models"] = []
         else:
             source["provider_linked"] = True
             source["infrastructure"] = manager.get_infrastructure_name()
             connection.set_tenant(tenant)
             source["cost_models"] = [{
                 "name": model.name,
                 "uuid": model.uuid
             } for model in manager.get_cost_models(tenant)]
             connection.set_schema_to_public()
     connection.set_schema_to_public()
     return response
    def test_provider_statistics_negative_case(self):
        """Test that the provider statistics method returns None for tenant misalignment."""
        # Create Provider
        provider_authentication = ProviderAuthentication.objects.create(provider_resource_name='cluster_id_1001')
        provider = Provider.objects.create(name='ocpprovidername',
                                           type='AWS',
                                           created_by=self.user,
                                           customer=self.customer,
                                           authentication=provider_authentication,)

        data_generator = OCPReportDataGenerator(self.tenant, provider)
        data_generator.add_data_to_tenant(**{'provider_uuid': provider.uuid})

        provider_uuid = provider.uuid
        manager = ProviderManager(provider_uuid)

        stats = manager.provider_statistics(self.tenant)

        self.assertIn(str(data_generator.dh.this_month_start.date()), stats.keys())
        self.assertIn(str(data_generator.dh.last_month_start.date()), stats.keys())

        for key, value in stats.items():
            key_date_obj = parser.parse(key)
            value_data = value.pop()

            self.assertIsNotNone(value_data.get('assembly_id'))
            self.assertIsNotNone(value_data.get('files_processed'))
            self.assertEqual(value_data.get('billing_period_start'), key_date_obj.date())
            self.assertGreater(parser.parse(value_data.get('last_process_start_date')), key_date_obj)
            self.assertGreater(parser.parse(value_data.get('last_process_complete_date')), key_date_obj)
            self.assertIsNone(value_data.get('summary_data_creation_datetime'))
            self.assertIsNone(value_data.get('summary_data_updated_datetime'))
            self.assertIsNone(value_data.get('derived_cost_datetime'))
Example #3
0
    def test_provider_manager_error(self):
        """Raise ProviderManagerError."""
        with self.assertRaises(ProviderManagerError):
            ProviderManager(uuid="4216c8c7-8809-4381-9a24-bd965140efe2")

        with self.assertRaises(ProviderManagerError):
            ProviderManager(uuid="abc")
    def test_delete_report_data(self, mock_delete):
        """Test that the masu API call returns a response."""
        logging.disable(logging.NOTSET)

        response = MockResponse(200, '{"Response": "OK"}')
        mock_delete.return_value = response
        expected_message = f'INFO:api.provider.provider_manager:Response: {response.json()}'

        provider_authentication = ProviderAuthentication.objects.create(
            provider_resource_name='arn:aws:iam::2:role/mg'
        )
        provider_billing = ProviderBillingSource.objects.create(
            bucket='my_s3_bucket'
        )
        provider = Provider.objects.create(name='awsprovidername',
                                           created_by=self.user,
                                           customer=self.customer,
                                           authentication=provider_authentication,
                                           billing_source=provider_billing)
        provider_uuid = provider.uuid
        manager = ProviderManager(provider_uuid)

        with self.assertLogs('api.provider.provider_manager', level='INFO') as logger:
            manager._delete_report_data()
            self.assertIn(expected_message, logger.output)
    def test_remove_aws(self):
        """Remove aws provider."""
        # Create Provider
        provider_authentication = ProviderAuthentication.objects.create(provider_resource_name='arn:aws:iam::2:role/mg')
        provider_billing = ProviderBillingSource.objects.create(bucket='my_s3_bucket')
        provider = Provider.objects.create(name='awsprovidername',
                                           created_by=self.user,
                                           customer=self.customer,
                                           authentication=provider_authentication,
                                           billing_source=provider_billing)
        provider_uuid = provider.uuid

        new_user_dict = self._create_user_data()
        request_context = self._create_request_context(self.customer_data,
                                                       new_user_dict, False)
        user_serializer = UserSerializer(data=new_user_dict, context=request_context)
        other_user = None
        if user_serializer.is_valid(raise_exception=True):
            other_user = user_serializer.save()

        with tenant_context(self.tenant):
            manager = ProviderManager(provider_uuid)
            manager.remove(self._create_delete_request(other_user))

        provider_query = Provider.objects.all().filter(uuid=provider_uuid)
        auth_count = ProviderAuthentication.objects.count()
        billing_count = ProviderBillingSource.objects.count()
        self.assertFalse(provider_query)
        self.assertEqual(auth_count, 0)
        self.assertEqual(billing_count, 0)
Example #6
0
    def test_is_removable_by_user(self):
        """Can current user remove provider."""
        # Create Customer
        customer = None
        serializer = CustomerSerializer(data=self.customer_data[0])
        if serializer.is_valid(raise_exception=True):
            customer = serializer.save()

        # Create Provider
        provider = Provider.objects.create(name='providername', created_by=customer.owner, customer=customer)
        provider_uuid = provider.uuid

        # Create another user for negative tests
        # Add another user
        group = Group.objects.get(name=customer.name)

        new_user_dict = self.gen_user_data()
        user_serializer = UserSerializer(data=new_user_dict)
        new_user = None
        if user_serializer.is_valid(raise_exception=True):
            new_user = user_serializer.save()
        group.user_set.add(new_user)

        manager = ProviderManager(provider_uuid)

        self.assertTrue(manager.is_removable_by_user(customer.owner))
        self.assertFalse(manager.is_removable_by_user(new_user))

        superuser = User.objects.filter(is_superuser=True).first()
        self.assertFalse(manager.is_removable_by_user(superuser))
Example #7
0
    def test_ocp_on_azure_infrastructure_type(self):
        """Test that the provider infrastructure returns Azure when running on Azure."""
        credentials = {"cluster_id": "cluster_id_1002"}
        provider_authentication = ProviderAuthentication.objects.create(
            credentials=credentials)
        azure_provider = Provider.objects.filter(type="Azure-local").first()
        infrastructure = ProviderInfrastructureMap.objects.create(
            infrastructure_type=Provider.PROVIDER_AZURE,
            infrastructure_provider=azure_provider)
        with patch("masu.celery.tasks.check_report_updates"):
            provider = Provider.objects.create(
                name="ocpprovidername",
                type=Provider.PROVIDER_OCP,
                created_by=self.user,
                customer=self.customer,
                authentication=provider_authentication,
                infrastructure=infrastructure,
            )

        provider_uuid = provider.uuid
        manager = ProviderManager(provider_uuid)
        infrastructure_info = manager.get_infrastructure_info()
        self.assertEqual(infrastructure_info.get("type", ""),
                         Provider.PROVIDER_AZURE)
        self.assertEqual(infrastructure_info.get("uuid", ""),
                         azure_provider.uuid)
Example #8
0
    def test_update_ocp_added_via_sources(self):
        """Raise error on update to ocp provider added via sources."""
        # Create Provider
        credentials = {"cluster_id": "cluster_id_1001"}
        provider_authentication = ProviderAuthentication.objects.create(
            credentials=credentials)
        with patch("masu.celery.tasks.check_report_updates"):
            provider = Provider.objects.create(
                name="ocpprovidername",
                created_by=self.user,
                customer=self.customer,
                authentication=provider_authentication,
            )
        provider_uuid = provider.uuid

        sources = Sources.objects.create(source_id=1,
                                         auth_header="testheader",
                                         offset=1,
                                         koku_uuid=provider_uuid)
        sources.save()
        put_request = self._create_put_request(self.user)
        with tenant_context(self.tenant):
            manager = ProviderManager(provider_uuid)
            with self.assertRaises(ProviderManagerError):
                manager.update(put_request)
Example #9
0
    def test_provider_statistics(self):
        """Test that the provider statistics method returns report stats."""
        provider = Provider.objects.filter(data_updated_timestamp__isnull=False).first()

        self.assertIsNotNone(provider)

        provider_uuid = provider.uuid
        manager = ProviderManager(provider_uuid)
        stats = manager.provider_statistics(self.tenant)

        self.assertIn(str(self.dh.this_month_start.date()), stats.keys())
        self.assertIn(str(self.dh.last_month_start.date()), stats.keys())

        for key, value in stats.items():
            if key == "data_updated_date":
                value_data = value
                self.assertIsInstance(parser.parse(value_data), date)
                continue
            key_date_obj = parser.parse(key)
            value_data = value.pop()

            self.assertIsNotNone(value_data.get("assembly_id"))
            self.assertIsNotNone(value_data.get("files_processed"))
            self.assertEqual(value_data.get("billing_period_start"), key_date_obj.date())
            self.assertGreater(parser.parse(value_data.get("last_process_start_date")), key_date_obj)
            self.assertGreater(parser.parse(value_data.get("last_process_complete_date")), key_date_obj)
            self.assertGreater(parser.parse(value_data.get("last_manifest_complete_date")), key_date_obj)
Example #10
0
    def test_provider_statistics_ocp_on_cloud(self):
        """Test that the provider statistics method returns report stats."""
        provider_uuid = ProviderInfrastructureMap.objects.first(
        ).infrastructure_provider_id
        provider = Provider.objects.filter(uuid=provider_uuid).first()

        self.assertIsNotNone(provider)

        provider_uuid = provider.uuid
        manager = ProviderManager(provider_uuid)
        stats = manager.provider_statistics(self.tenant)

        self.assertIn(str(self.dh.this_month_start.date()), stats.keys())
        self.assertIn(str(self.dh.last_month_start.date()), stats.keys())

        for key, value in stats.items():
            if key == "data_updated_date":
                value_data = value
                self.assertIsInstance(parser.parse(value_data), date)
                continue
            elif key == "ocp_on_cloud_data_updated_date":
                self.assertIsInstance(parser.parse(value_data), date)
                continue
            ocp_on_cloud = value.get("ocp_on_cloud")
            for record in ocp_on_cloud:
                self.assertIsNotNone(record.get("ocp_source_uuid"))
                self.assertIsNotNone(
                    record.get("ocp_on_cloud_updated_datetime"))
Example #11
0
    def test_remove_not_removeable(self, _):
        """Test error raised if user without capability tries to remove a provider."""
        # Create Provider
        credentials = {"role_arn": "arn:aws:iam::2:role/mg"}
        provider_authentication = ProviderAuthentication.objects.create(credentials=credentials)
        data_source = {"bucket": "my_s3_bucket"}
        provider_billing = ProviderBillingSource.objects.create(data_source=data_source)
        with patch("masu.celery.tasks.check_report_updates"):
            provider = Provider.objects.create(
                name="awsprovidername",
                created_by=self.user,
                customer=self.customer,
                authentication=provider_authentication,
                billing_source=provider_billing,
            )
        provider_uuid = provider.uuid

        new_user_dict = self._create_user_data()
        request_context = self._create_request_context(self.customer_data, new_user_dict, False, create_user=False)
        user_serializer = UserSerializer(data=new_user_dict, context=request_context)
        other_user = None
        if user_serializer.is_valid(raise_exception=True):
            other_user = user_serializer.save()

        with tenant_context(self.tenant):
            manager = ProviderManager(provider_uuid)
            with self.assertRaises(ProviderManagerError):
                manager.remove(self._create_delete_request(other_user))
Example #12
0
    def test_remove_ocp_added_via_sources(self, mock_delete_report):
        """Remove ocp provider added via sources."""
        # Create Provider
        provider_authentication = ProviderAuthentication.objects.create(
            provider_resource_name='cluster_id_1001')
        provider = Provider.objects.create(
            name='ocpprovidername',
            created_by=self.user,
            customer=self.customer,
            authentication=provider_authentication,
        )
        provider_uuid = provider.uuid

        sources = Sources.objects.create(source_id=1,
                                         auth_header='testheader',
                                         offset=1,
                                         koku_uuid=provider_uuid)
        sources.save()
        delete_request = self._create_delete_request(
            self.user, {'Sources-Client': 'True'})
        with tenant_context(self.tenant):
            manager = ProviderManager(provider_uuid)
            manager.remove(delete_request)
        provider_query = Provider.objects.all().filter(uuid=provider_uuid)
        self.assertFalse(provider_query)
Example #13
0
    def test_ocp_infrastructure_type_error(self):
        """Test that the provider infrastructure returns Unknown when running stand alone."""
        provider_authentication = ProviderAuthentication.objects.create(
            provider_resource_name='cluster_id_1001')
        provider = Provider.objects.create(
            name='ocpprovidername',
            type=Provider.PROVIDER_OCP,
            created_by=self.user,
            customer=self.customer,
            authentication=provider_authentication,
        )
        data_generator = OCPAWSReportDataGenerator(self.tenant,
                                                   provider,
                                                   current_month_only=True)
        data_generator.create_ocp_provider('cool-cluster-id', 'awesome-alias')

        provider_uuid = data_generator.provider_uuid
        manager = ProviderManager(provider_uuid)
        with patch.object(ProviderAccessor,
                          'infrastructure_type',
                          side_effect=ProviderAccessorError('mock_error')):
            infrastructure_name = manager.get_infrastructure_name(self.tenant)
            self.assertEqual(infrastructure_name, 'Unknown-Error')

        data_generator.remove_data_from_tenant()
Example #14
0
    def test_ocp_infrastructure_type(self):
        """Test that the provider infrastructure returns Unknown when running stand alone."""
        provider_authentication = ProviderAuthentication.objects.create(
            provider_resource_name='cluster_id_1001')
        provider = Provider.objects.create(
            name='ocpprovidername',
            type=Provider.PROVIDER_OCP,
            created_by=self.user,
            customer=self.customer,
            authentication=provider_authentication,
        )
        ocp_aws_data_generator = OCPAWSReportDataGenerator(
            self.tenant, provider, current_month_only=True)
        data_generator = OCPReportDataGenerator(self.tenant,
                                                provider,
                                                current_month_only=True)
        data_generator.add_data_to_tenant()
        ocp_aws_data_generator.create_ocp_provider(
            data_generator.cluster_id, data_generator.cluster_alias)

        provider_uuid = ocp_aws_data_generator.provider_uuid
        manager = ProviderManager(provider_uuid)
        infrastructure_name = manager.get_infrastructure_name(self.tenant)
        self.assertEqual(infrastructure_name, 'Unknown')

        data_generator.remove_data_from_tenant()
        ocp_aws_data_generator.remove_data_from_tenant()
Example #15
0
    def test_remove(self):
        """Remove provider."""
        # Create Customer
        customer = None
        serializer = CustomerSerializer(data=self.customer_data[0])
        if serializer.is_valid(raise_exception=True):
            customer = serializer.save()

        # Create Provider
        provider = Provider.objects.create(name='providername', created_by=customer.owner, customer=customer)
        provider_uuid = provider.uuid

        # Create another user for negative tests
        # Add another user
        group = Group.objects.get(name=customer.name)

        new_user_dict = self.gen_user_data()
        user_serializer = UserSerializer(data=new_user_dict)
        other_user = None
        if user_serializer.is_valid(raise_exception=True):
            other_user = user_serializer.save()
        group.user_set.add(other_user)

        manager = ProviderManager(provider_uuid)

        with self.assertRaises(ProviderManagerError):
            self.assertFalse(manager.remove(other_user))

        manager.remove(customer.owner)
        provider_query = Provider.objects.all().filter(uuid=provider_uuid)
        self.assertFalse(provider_query)
Example #16
0
    def test_remove_ocp_added_via_sources(self):
        """Remove ocp provider added via sources."""
        # Create Provider
        credentials = {"cluster_id": "cluster_id_1001"}
        provider_authentication = ProviderAuthentication.objects.create(
            credentials=credentials)
        with patch("masu.celery.tasks.check_report_updates"):
            provider = Provider.objects.create(
                name="ocpprovidername",
                created_by=self.user,
                customer=self.customer,
                authentication=provider_authentication,
            )
        provider_uuid = provider.uuid

        sources = Sources.objects.create(source_id=1,
                                         auth_header="testheader",
                                         offset=1,
                                         koku_uuid=provider_uuid)
        sources.save()
        delete_request = self._create_delete_request(
            self.user, {"Sources-Client": "True"})
        with tenant_context(self.tenant):
            manager = ProviderManager(provider_uuid)
            manager.remove(delete_request, from_sources=True)
        provider_query = Provider.objects.all().filter(uuid=provider_uuid)
        self.assertFalse(provider_query)
Example #17
0
    def test_get_providers_queryset_for_customer(self):
        """Verify all providers returned by a customer."""
        # Create Customer
        customer = None
        serializer = CustomerSerializer(data=self.customer_data[0])
        if serializer.is_valid(raise_exception=True):
            customer = serializer.save()

        # Verify no providers are returned
        self.assertFalse(ProviderManager.get_providers_queryset_for_customer(customer).exists())

        # Create Providers
        provider_1 = Provider.objects.create(name='provider1', created_by=customer.owner, customer=customer)
        provider_2 = Provider.objects.create(name='provider2', created_by=customer.owner, customer=customer)

        providers = ProviderManager.get_providers_queryset_for_customer(customer)
        # Verify providers are returned
        provider_1_found = False
        provider_2_found = False

        for provider in providers:
            if provider.uuid == provider_1.uuid:
                provider_1_found = True
            elif provider.uuid == provider_2.uuid:
                provider_2_found = True

        self.assertTrue(provider_1_found)
        self.assertTrue(provider_2_found)
        self.assertEqual((len(providers)), 2)
    def test_get_providers_queryset_for_customer(self):
        """Verify all providers returned by a customer."""
        # Verify no providers are returned
        self.assertFalse(ProviderManager.get_providers_queryset_for_customer(self.customer).exists())

        # Create Providers
        provider_1 = Provider.objects.create(name='provider1',
                                             created_by=self.user,
                                             customer=self.customer)
        provider_2 = Provider.objects.create(name='provider2',
                                             created_by=self.user,
                                             customer=self.customer)

        providers = ProviderManager.get_providers_queryset_for_customer(self.customer)
        # Verify providers are returned
        provider_1_found = False
        provider_2_found = False

        for provider in providers:
            if provider.uuid == provider_1.uuid:
                provider_1_found = True
            elif provider.uuid == provider_2.uuid:
                provider_2_found = True

        self.assertTrue(provider_1_found)
        self.assertTrue(provider_2_found)
        self.assertEqual((len(providers)), 2)
Example #19
0
 def retrieve(self, request, *args, **kwargs):
     """Get a source."""
     response = super().retrieve(request=request, args=args, kwargs=kwargs)
     _, tenant = self._get_account_and_tenant(request)
     if response.data.get("authentication",
                          {}).get("credentials", {}).get("client_secret"):
         del response.data["authentication"]["credentials"]["client_secret"]
     try:
         manager = ProviderManager(response.data["uuid"])
     except ProviderManagerError:
         response.data["provider_linked"] = False
         response.data["active"] = False
         response.data["infrastructure"] = "Unknown"
         response.data["cost_models"] = []
     else:
         response.data["provider_linked"] = True
         response.data["active"] = manager.get_active_status()
         response.data["infrastructure"] = manager.get_infrastructure_name()
         connection.set_tenant(tenant)
         response.data["cost_models"] = [{
             "name": model.name,
             "uuid": model.uuid
         } for model in manager.get_cost_models(tenant)]
     connection.set_schema_to_public()
     return response
Example #20
0
    def test_remove_aws_auth_billing_remain(self):
        """Remove aws provider."""
        # Create Provider
        credentials = {"role_arn": "arn:aws:iam::2:role/mg"}
        provider_authentication = ProviderAuthentication.objects.create(
            credentials=credentials)

        expected_auth_count = ProviderAuthentication.objects.count()
        credentials = {"role_arn": "arn:aws:iam::3:role/mg"}
        provider_authentication2 = ProviderAuthentication.objects.create(
            credentials=credentials)

        data_source = {"bucket": "my_s3_bucket"}
        provider_billing = ProviderBillingSource.objects.create(
            data_source=data_source)
        expected_billing_count = ProviderBillingSource.objects.count()
        with patch("masu.celery.tasks.check_report_updates"):
            provider = Provider.objects.create(
                name="awsprovidername",
                created_by=self.user,
                customer=self.customer,
                authentication=provider_authentication,
                billing_source=provider_billing,
            )
            provider2 = Provider.objects.create(
                name="awsprovidername2",
                created_by=self.user,
                customer=self.customer,
                authentication=provider_authentication2,
                billing_source=provider_billing,
            )
        provider_uuid = provider2.uuid

        self.assertNotEqual(provider.uuid, provider2.uuid)
        new_user_dict = self._create_user_data()
        request_context = self._create_request_context(self.customer_data,
                                                       new_user_dict,
                                                       False,
                                                       create_user=False)
        user_serializer = UserSerializer(data=new_user_dict,
                                         context=request_context)
        other_user = None
        if user_serializer.is_valid(raise_exception=True):
            other_user = user_serializer.save()

        with tenant_context(self.tenant):
            manager = ProviderManager(provider_uuid)
            manager.remove(self._create_delete_request(other_user))
        auth_count = ProviderAuthentication.objects.count()
        billing_count = ProviderBillingSource.objects.count()
        provider_query = Provider.objects.all().filter(uuid=provider_uuid)

        self.assertFalse(provider_query)
        self.assertEqual(auth_count, expected_auth_count)
        self.assertEqual(billing_count, expected_billing_count)
Example #21
0
 def stats(self, request, pk=None):
     """Get source stats."""
     source = self.get_object()
     stats = {}
     try:
         manager = ProviderManager(source.source_uuid)
     except ProviderManagerError:
         stats["provider_linked"] = False
     else:
         stats["provider_linked"] = True
         stats.update(manager.provider_statistics(request.tenant))
     return Response(stats)
Example #22
0
    def test_get_name(self):
        """Can the provider name be returned."""
        # Create Provider
        provider_name = "sample_provider"
        provider = Provider.objects.create(name=provider_name, created_by=self.user, customer=self.customer)

        # Get Provider UUID
        provider_uuid = provider.uuid

        # Get Provider Manager
        manager = ProviderManager(provider_uuid)
        self.assertEqual(manager.get_name(), provider_name)
    def test_ocp_infrastructure_type_error(self):
        """Test that the provider infrastructure returns Unknown when running stand alone."""
        data_generator = OCPAWSReportDataGenerator(self.tenant, current_month_only=True)
        data_generator.create_ocp_provider('cool-cluster-id', 'awesome-alias')

        provider_uuid = data_generator.provider_uuid
        manager = ProviderManager(provider_uuid)
        with patch.object(ProviderAccessor, 'infrastructure_type', side_effect=ProviderAccessorError('mock_error')):
            infrastructure_name = manager.get_infrastructure_name(self.tenant)
            self.assertEqual(infrastructure_name, 'Unknown-Error')

        data_generator.remove_data_from_tenant()
Example #24
0
 def destroy_provider(self, provider_uuid):
     """Call to destroy provider."""
     connection.set_schema_to_public()
     _, customer, user = self._create_context()
     tenant = Tenant.objects.get(schema_name=customer.schema_name)
     connection.set_tenant(tenant)
     try:
         manager = ProviderManager(provider_uuid)
     except ProviderManagerError:
         LOG.info("Provider does not exist, skipping Provider delete.")
     else:
         manager.remove(user=user, from_sources=True)
     connection.set_schema_to_public()
Example #25
0
    def test_get_name(self):
        """Can the provider name be returned."""
        # Create Provider
        provider_name = "sample_provider"
        with patch("masu.celery.tasks.check_report_updates"):
            provider = Provider.objects.create(name=provider_name, created_by=self.user, customer=self.customer)

        # Get Provider UUID
        provider_uuid = provider.uuid

        # Get Provider Manager
        manager = ProviderManager(provider_uuid)
        self.assertEqual(manager.get_name(), provider_name)
Example #26
0
    def test_remove_all_aws_providers(self):
        """Remove all AWS providers."""
        provider_query = Provider.objects.all().filter(type="AWS-local")

        customer = None
        for provider in provider_query:
            customer = provider.customer
            with tenant_context(provider.customer):
                manager = ProviderManager(provider.uuid)
                manager.remove(self._create_delete_request(self.user, {"Sources-Client": "False"}))
        for view in AWS_MATERIALIZED_VIEWS:
            with tenant_context(customer):
                self.assertFalse(view.objects.count())
    def test_ocp_on_aws_infrastructure_type(self):
        """Test that the provider infrastructure returns AWS when running on AWS."""
        data_generator = OCPAWSReportDataGenerator(self.tenant, current_month_only=True)
        data_generator.add_data_to_tenant()
        data_generator.add_aws_data_to_tenant()
        data_generator.create_ocp_provider(data_generator.cluster_id, data_generator.cluster_alias)

        provider_uuid = data_generator.provider_uuid
        manager = ProviderManager(provider_uuid)
        infrastructure_name = manager.get_infrastructure_name(self.tenant)
        self.assertEqual(infrastructure_name, 'AWS')

        data_generator.remove_data_from_tenant()
Example #28
0
    def destroy(self, request, *args, **kwargs):
            """Delete a customer.

            @api {delete} /api/v1/customers/:uuid/ Delete a customer
            @apiName DeleteCustomers
            @apiGroup Customer
            @apiVersion 1.0.0
            @apiDescription Delete a customer.

            @apiHeader {String} token Service Admin authorization token.
            @apiHeaderExample {json} Header-Example:
                {
                    "Authorization": "Token 45138a913da44ab89532bab0352ef84b"
                }

            @apiParam {String} uuid Customer unique ID.

            @apiSuccessExample {json} Success-Response:
                HTTP/1.1 204 NO CONTENT
            """
            user_savepoint = transaction.savepoint()
            customer_manager = None
            try:
                customer_manager = CustomerManager(kwargs['uuid'])
            except (CustomerManagerDoesNotExist, CustomerManagerValidationError):
                LOG.error('Unable to find provider for uuid {}.'.format(kwargs['uuid']))
                raise NotFound

            providers = ProviderManager.get_providers_queryset_for_customer(customer_manager.get_model())

            try:
                customer_manager.remove_users(request.user)
                customer_manager.remove_tenant(request.user)
            except DatabaseError:
                transaction.savepoint_rollback(user_savepoint)
                LOG.error('Failed to remove assets for customer {}.'.format(customer_manager.get_name()))
                raise UserDeleteException

            try:
                for provider in providers:
                    provider_manager = ProviderManager(provider.uuid)
                    provider_manager.remove(request.user, customer_remove_context=True)
            except (DatabaseError, ProviderManagerError):
                transaction.savepoint_rollback(user_savepoint)
                LOG.error('{} failed to remove provider {}.'.format(request.user.username, provider_manager.get_name()))
                raise ProviderDeleteException

            http_response = super().destroy(request=request, args=args, kwargs=kwargs)
            if http_response.status_code is not 204:
                transaction.savepoint_rollback(user_savepoint)
            return http_response
Example #29
0
 def destroy_provider(self, provider_uuid, retry_count=None):
     """Call to destroy provider."""
     connection.set_schema_to_public()
     _, customer, user = self._create_context()
     tenant = self._tenant_for_schema(customer.schema_name)
     connection.set_tenant(tenant)
     try:
         manager = ProviderManager(provider_uuid)
     except ProviderManagerError:
         LOG.info("Provider does not exist, skipping Provider delete.")
     else:
         manager.remove(user=user, from_sources=True, retry_count=retry_count)
         invalidate_view_cache_for_tenant_and_cache_key(customer.schema_name, SOURCES_CACHE_PREFIX)
     connection.set_schema_to_public()
    def test_update_ocp_not_added_via_sources(self):
        """Return None on update to ocp provider not added via sources."""
        # Create Provider
        provider_authentication = ProviderAuthentication.objects.create(provider_resource_name='cluster_id_1001')
        provider = Provider.objects.create(name='ocpprovidername',
                                           created_by=self.user,
                                           customer=self.customer,
                                           authentication=provider_authentication,)
        provider_uuid = provider.uuid

        put_request = self._create_put_request(self.user)
        with tenant_context(self.tenant):
            manager = ProviderManager(provider_uuid)
            self.assertIsNone(manager.update(put_request))