Example #1
0
    def setUp(self):
        asset_model = DataCenterAssetModelFactory()
        self.cloud_provider = CloudProviderFactory(name='openstack')
        self.cloud_flavor = CloudFlavorFactory.create_batch(3)
        self.test_model = ComponentModel(name='delete_test')
        VirtualComponent(model=self.test_model,
                         base_object=self.cloud_flavor[0])

        self.cloud_project = CloudProjectFactory(project_id='project_id1')
        CloudProjectFactory(project_id='project_id2')
        CloudProjectFactory(project_id='project_os_id1')

        host = CloudHostFactory(host_id='host_id1',
                                parent=self.cloud_project,
                                cloudflavor=self.cloud_flavor[1])
        IPAddress.objects.create(base_object=host, address='2.2.3.4')
        IPAddress.objects.create(base_object=host, address='1.2.3.4')

        DataCenterAsset.objects.create(
            hostname='hypervisor_os1.dcn.net',
            model=asset_model,
        )

        self.cmd = Command()
        self.cmd._get_cloud_provider()
        self.cmd.openstack_projects = OPENSTACK_DATA
        self.cmd.openstack_flavors = OPENSTACK_FLAVOR
        self.cmd._get_ralph_data()
        self.cmd.ironic_serial_number_param = 'serial_number'
        self.cmd.ralph_serial_number_param = 'sn'
Example #2
0
    def test_404_sync_disabled(self):
        cloud_provider = CloudProviderFactory(cloud_sync_enabled=False)

        url = reverse('cloud-sync-router', args=(cloud_provider.id, ))
        resp = self.client.post(url, {}, format='json')

        self.assertEqual(404, resp.status_code)
Example #3
0
    def setUp(self):
        asset_model = DataCenterAssetModelFactory()
        self.cloud_provider = CloudProviderFactory(name='openstack')
        self.cloud_flavor = CloudFlavorFactory.create_batch(3)
        self.test_model = ComponentModel(name='delete_test')
        VirtualComponent(model=self.test_model,
                         base_object=self.cloud_flavor[0])

        self.cloud_project_1 = CloudProjectFactory(project_id='project_id1')
        self.cloud_project_2 = CloudProjectFactory(project_id='project_id2')
        self.cloud_project_3 = CloudProjectFactory(project_id='project_os_id1')

        self.host = CloudHostFactory(host_id='host_id1',
                                     parent=self.cloud_project_1,
                                     cloudflavor=self.cloud_flavor[1])
        IPAddress.objects.create(base_object=self.host, address='2.2.3.4')
        IPAddress.objects.create(base_object=self.host, address='1.2.3.4')

        DataCenterAsset.objects.create(
            hostname='hypervisor_os1.dcn.net',
            model=asset_model,
        )

        self.ironic_serial_number_param = 'serial_number'
        self.ralph_serial_number_param = 'sn'
        self.ralph_client = RalphClient('openstack',
                                        self.ironic_serial_number_param,
                                        self.ralph_serial_number_param)
        self.openstack_client = RalphOpenStackInfrastructureClient(
            self.cloud_provider.name)
Example #4
0
    def test_404_processor_not_set(self):
        cloud_provider = CloudProviderFactory(cloud_sync_enabled=True,
                                              cloud_sync_driver=None)

        url = reverse('cloud-sync-router', args=(cloud_provider.id, ))
        resp = self.client.post(url, {}, format='json')

        self.assertEqual(404, resp.status_code)
Example #5
0
    def test_501_processor_not_available(self):
        cloud_provider = CloudProviderFactory(
            cloud_sync_enabled=True,
            cloud_sync_driver='CloudSyncProcessorFactory')

        url = reverse('cloud-sync-router', args=(cloud_provider.id, ))
        resp = self.client.post(url, {}, format='json')

        self.assertEqual(501, resp.status_code)
        self.assertEqual(b'Specified processor is not available', resp.content)
Example #6
0
    def test_empty_cloud_provider_can_be_deleted(self):
        # given
        cloud_provider = CloudProviderFactory(name="test-cloud-provider")

        # when
        url = reverse('cloudprovider-detail', args=(cloud_provider.pk, ))
        resp = self.client.delete(url)

        # then
        self.assertEqual(resp.status_code, status.HTTP_204_NO_CONTENT)
        self.assertRaises(CloudProvider.DoesNotExist,
                          cloud_provider.refresh_from_db)
Example #7
0
    def setUp(self):
        super().setUp()
        self.envs = EnvironmentFactory.create_batch(2)
        self.services = ServiceFactory.create_batch(2)
        self.service_env = []
        for i in range(0, 2):
            self.service_env.append(ServiceEnvironment.objects.create(
                service=self.services[i], environment=self.envs[i]
            ))
        self.service_env[0].service.business_owners = [self.user1]
        self.service_env[0].service.technical_owners = [self.user2]
        self.service_env[0].save()
        self.cloud_provider = CloudProviderFactory(name='openstack')
        self.cloud_flavor = CloudFlavorFactory()
        self.cloud_project = CloudProjectFactory(
            service_env=self.service_env[0]
        )
        self.cloud_host = CloudHostFactory(
            parent=self.cloud_project,
            cloudflavor=self.cloud_flavor
        )
        self.cloud_host2 = CloudHostFactory()

        self.test_cpu = ComponentModel.objects.create(
            name='vcpu1',
            cores=5,
            family='vCPU',
            type=ComponentType.processor,
        )
        self.test_mem = ComponentModel.objects.create(
            name='2000 MiB vMEM',
            size='2000',
            type=ComponentType.memory,
        )
        self.test_disk = ComponentModel.objects.create(
            name='4 GiB vDISK',
            size='4096',
            type=ComponentType.disk,
        )

        VirtualComponent.objects.create(
            base_object=self.cloud_flavor,
            model=self.test_cpu,
        )
        VirtualComponent.objects.create(
            base_object=self.cloud_flavor,
            model=self.test_mem,
        )
        VirtualComponent.objects.create(
            base_object=self.cloud_flavor,
            model=self.test_disk,
        )
Example #8
0
    def test_event_routed_correctly(self):
        processor_name = 'proucessah'
        cloud_provider = CloudProviderFactory(cloud_sync_enabled=True,
                                              cloud_sync_driver=processor_name)

        cloudsync.CLOUD_SYNC_DRIVERS[processor_name] = Mock()
        test_data = {'test': True}

        url = reverse('cloud-sync-router', args=(cloud_provider.id, ))
        self.client.post(url, test_data, format='json')

        cloudsync.CLOUD_SYNC_DRIVERS[processor_name].assert_called_once_with(
            cloud_provider, test_data)
Example #9
0
    def test_cleanup_doesnt_remove_cloud_projects_with_different_provider(self):
        CloudProjectFactory(
            project_id='im_not_here',
            cloudprovider=CloudProviderFactory()
        )
        self.cmd._get_ralph_data()

        self.cmd._cleanup()

        try:
            CloudProject.objects.get(project_id='im_not_here')
        except ObjectDoesNotExist:
            self.fail('Project "im_not_here" was deleted.')
Example #10
0
    def test_400_bad_json(self):
        processor_name = 'proucessah'
        cloud_provider = CloudProviderFactory(cloud_sync_enabled=True,
                                              cloud_sync_driver=processor_name)

        cloudsync.CLOUD_SYNC_DRIVERS[processor_name] = Mock()
        test_data = None

        url = reverse('cloud-sync-router', args=(cloud_provider.id, ))
        resp = self.client.post(url, test_data)

        self.assertEqual(400, resp.status_code)
        self.assertEqual(
            0, cloudsync.CLOUD_SYNC_DRIVERS[processor_name].call_count)
Example #11
0
    def test_non_empty_cloud_provider_can_be_deleted_with_force(
            self, child_type):
        # given
        cloud_provider = CloudProviderFactory(name="test-cloud-provider")
        child_type(cloudprovider=cloud_provider)

        # when
        url = reverse('cloudprovider-detail', args=(cloud_provider.pk, ))
        data = {'force': True}
        resp = self.client.delete(url, data=data)

        # then
        self.assertEqual(resp.status_code, status.HTTP_204_NO_CONTENT)
        self.assertRaises(CloudProvider.DoesNotExist,
                          cloud_provider.refresh_from_db)
Example #12
0
    def test_delete_cloud_provider_returns_409_if_has_child_objects(
            self, child_type):
        # given
        cloud_provider = CloudProviderFactory(name="test-cloud-provider")
        child_type(cloudprovider=cloud_provider)

        # when
        url = reverse('cloudprovider-detail', args=(cloud_provider.pk, ))
        resp = self.client.delete(url)

        # then
        self.assertEqual(resp.status_code, status.HTTP_409_CONFLICT)
        self.assertIn('Cloud provider is in use and hence is not deletable.',
                      resp.data['detail'])
        self.assertTrue(
            CloudProvider.objects.filter(pk=cloud_provider.pk).exists())
Example #13
0
    def setUp(self):
        self.envs = EnvironmentFactory.create_batch(2)
        self.services = ServiceFactory.create_batch(2)
        self.service_env = []
        for i in range(0, 2):
            self.service_env.append(
                ServiceEnvironment.objects.create(service=self.services[i],
                                                  environment=self.envs[i]))

        self.cloud_provider = CloudProviderFactory(name='openstack')
        self.cloud_flavor = CloudFlavorFactory()
        self.cloud_project = CloudProjectFactory()
        self.cloud_host = CloudHostFactory(parent=self.cloud_project)

        self.test_cpu = ComponentModel.objects.create(
            name='vcpu1',
            cores=4,
            family='vCPU',
            type=ComponentType.processor,
        )
        self.test_mem = ComponentModel.objects.create(
            name='1024 MiB vMEM',
            size='1024',
            type=ComponentType.memory,
        )
        self.test_disk = ComponentModel.objects.create(
            name='4 GiB vDISK',
            size='4096',
            type=ComponentType.disk,
        )

        VirtualComponent.objects.create(
            base_object=self.cloud_flavor,
            model=self.test_cpu,
        )
        VirtualComponent.objects.create(
            base_object=self.cloud_flavor,
            model=self.test_mem,
        )
        VirtualComponent.objects.create(
            base_object=self.cloud_flavor,
            model=self.test_disk,
        )
Example #14
0
    def test_cleanup_doesnt_remove_cloud_projects_with_different_provider(
            self):
        CloudProjectFactory(
            project_id='im_not_here',
            cloudprovider=CloudProviderFactory(name='some_random_provider'))
        ralph_projects = self.ralph_client.get_ralph_servers_data(
            self.ralph_client.get_ralph_projects())
        ralph_flavors = self.ralph_client.get_ralph_flavors()
        servers_to_delete = self.ralph_client.calculate_servers_to_delete(
            OPENSTACK_DATA,
            ralph_projects,
        )
        self.ralph_client.perform_delete(OPENSTACK_DATA, OPENSTACK_FLAVORS,
                                         ralph_projects, ralph_flavors,
                                         servers_to_delete)

        try:
            CloudProject.objects.get(project_id='im_not_here')
        except ObjectDoesNotExist:
            self.fail('Project "im_not_here" was deleted.')