Exemplo n.º 1
0
 def test_custom_security_groups_are_propagated_to_initial_data(self):
     security_group1 = openstack_tenant_factories.SecurityGroupFactory(
         settings=self.fixture.tenant_settings,
     )
     security_group2 = openstack_tenant_factories.SecurityGroupFactory(
         settings=self.fixture.tenant_settings,
     )
     self.client.force_authenticate(self.fixture.owner)
     payload = {
         'security_groups': [
             {
                 'url': openstack_tenant_factories.SecurityGroupFactory.get_url(
                     security_group1
                 )
             },
             {
                 'url': openstack_tenant_factories.SecurityGroupFactory.get_url(
                     security_group2
                 )
             },
         ]
     }
     self._create_request_('new-cluster', add_payload=payload)
     cluster = models.Cluster.objects.get(name='new-cluster')
     self.assertEqual(
         cluster.node_set.first().initial_data['security_groups'],
         [security_group1.uuid.hex, security_group2.uuid.hex],
     )
Exemplo n.º 2
0
    def setUp(self):
        super(BaseClusterCreateTest, self).setUp()
        self.fixture = fixtures.RancherFixture()
        self.url = factories.ClusterFactory.get_list_url()
        openstack_service_settings = openstack_factories.OpenStackServiceSettingsFactory(
            customer=self.fixture.customer
        )
        self.tenant = openstack_factories.TenantFactory(
            service_settings=openstack_service_settings
        )

        openstack_tenant_factories.FlavorFactory(settings=self.fixture.tenant_settings)
        image = openstack_tenant_factories.ImageFactory(
            settings=self.fixture.tenant_settings
        )
        self.default_security_group = openstack_tenant_factories.SecurityGroupFactory(
            name='default', settings=self.fixture.tenant_settings
        )
        self.fixture.settings.options['base_image_name'] = image.name
        self.fixture.settings.save()

        self.network = openstack_tenant_factories.NetworkFactory(
            settings=self.fixture.tenant_settings
        )
        self.subnet = openstack_tenant_factories.SubNetFactory(
            network=self.network, settings=self.fixture.tenant_settings
        )
        self.flavor = Flavor.objects.get(settings=self.fixture.tenant_settings)
        self.flavor.ram = 1024 * 8
        self.flavor.cores = 2
        self.flavor.save()
        self.fixture.settings.options['base_subnet_name'] = self.subnet.name
        self.fixture.settings.save()
Exemplo n.º 3
0
    def setUp(self):
        super(BaseClusterCreateTest, self).setUp()
        self.fixture = fixtures.RancherFixture()
        self.url = factories.ClusterFactory.get_list_url()
        openstack_service_settings = openstack_factories.OpenStackServiceSettingsFactory(
            customer=self.fixture.customer)
        openstack_service = openstack_factories.OpenStackServiceFactory(
            customer=self.fixture.customer,
            settings=openstack_service_settings)
        openstack_spl = openstack_factories.OpenStackServiceProjectLinkFactory(
            project=self.fixture.project, service=openstack_service)
        self.tenant = openstack_factories.TenantFactory(
            service_project_link=openstack_spl)

        settings = ServiceSettings.objects.get(scope=self.tenant)
        project = self.fixture.project
        instance_spl = OpenStackTenantServiceProjectLink.objects.get(
            project=project, service__settings=settings)

        openstack_tenant_factories.FlavorFactory(
            settings=instance_spl.service.settings)
        image = openstack_tenant_factories.ImageFactory(
            settings=instance_spl.service.settings)
        openstack_tenant_factories.SecurityGroupFactory(
            name='default', settings=instance_spl.service.settings)
        self.fixture.settings.options['base_image_name'] = image.name
        self.fixture.settings.save()

        network = openstack_tenant_factories.NetworkFactory(
            settings=instance_spl.service.settings)
        self.subnet = openstack_tenant_factories.SubNetFactory(
            network=network, settings=instance_spl.service.settings)
        self.fixture.settings.options['base_subnet_name'] = self.subnet.name
        self.fixture.settings.save()
Exemplo n.º 4
0
    def test_security_group_rules_are_created_when_one_more_rule_is_added(
            self):
        openstack_security_group = openstack_factories.SecurityGroupFactory(
            tenant=self.tenant, state=StateMixin.States.CREATING)
        security_group = factories.SecurityGroupFactory(
            settings=self.service_settings,
            backend_id=openstack_security_group.backend_id,
        )
        openstack_factories.SecurityGroupRuleFactory(
            security_group=openstack_security_group)
        openstack_security_group.set_ok()
        openstack_security_group.save()

        self.assertEqual(security_group.rules.count(), 1,
                         'Security group rule has not been added')
        self.assertEqual(
            security_group.rules.first().protocol,
            openstack_security_group.rules.first().protocol,
        )
        self.assertEqual(
            security_group.rules.first().from_port,
            openstack_security_group.rules.first().from_port,
        )
        self.assertEqual(
            security_group.rules.first().to_port,
            openstack_security_group.rules.first().to_port,
        )
    def test_change_instance_security_groups_single_field(
            self, mocked_execute_method):
        new_security_group = factories.SecurityGroupFactory(
            name='test-group',
            settings=self.settings,
        )

        data = {
            'security_groups': [
                self._get_valid_security_group_payload(new_security_group),
            ]
        }

        response = self.client.post(
            factories.InstanceFactory.get_url(self.instance,
                                              action='update_security_groups'),
            data=data,
        )
        self.assertEqual(response.status_code, status.HTTP_202_ACCEPTED)

        reread_instance = models.Instance.objects.get(pk=self.instance.pk)
        reread_security_groups = list(reread_instance.security_groups.all())

        self.assertEquals(
            reread_security_groups,
            [new_security_group],
            'Security groups should have changed',
        )
        mocked_execute_method.assert_called_once()
Exemplo n.º 6
0
    def test_resource_is_created_when_order_item_is_processed(self):
        service_settings = rancher_factories.RancherServiceSettingsFactory()
        offering = marketplace_factories.OfferingFactory(
            type=PLUGIN_NAME, scope=service_settings)

        openstack_tenant_factories.FlavorFactory(
            settings=self.fixture.openstack_tenant_service_settings,
            ram=1024 * 8,
            cores=8,
        )
        image = openstack_tenant_factories.ImageFactory(
            settings=self.fixture.openstack_tenant_service_settings)
        openstack_tenant_factories.SecurityGroupFactory(
            name='default',
            settings=self.fixture.openstack_tenant_service_settings)
        service_settings.options['base_image_name'] = image.name
        service_settings.save()

        order = marketplace_factories.OrderFactory(
            project=self.fixture.project, created_by=self.fixture.owner)
        ssh_public_key = SshPublicKeyFactory(user=self.fixture.staff)
        order_item = marketplace_factories.OrderItemFactory(
            order=order,
            offering=offering,
            attributes={
                'name':
                'name',
                'tenant_settings':
                openstack_tenant_factories.
                OpenStackTenantServiceSettingsFactory.get_url(
                    self.fixture.openstack_tenant_service_settings),
                'project':
                ProjectFactory.get_url(self.fixture.project),
                'ssh_public_key':
                SshPublicKeyFactory.get_url(ssh_public_key),
                'nodes': [{
                    'subnet':
                    openstack_tenant_factories.SubNetFactory.get_url(
                        self.fixture.subnet),
                    'system_volume_size':
                    1024,
                    'memory':
                    1,
                    'cpu':
                    1,
                    'roles': ['controlplane', 'etcd', 'worker'],
                }],
            },
        )
        serialized_order = core_utils.serialize_instance(order_item.order)
        serialized_user = core_utils.serialize_instance(self.fixture.staff)
        marketplace_tasks.process_order(serialized_order, serialized_user)
        self.assertTrue(
            marketplace_models.Resource.objects.filter(name='name').exists())
        self.assertTrue(
            rancher_models.Cluster.objects.filter(name='name').exists())
Exemplo n.º 7
0
 def test_validate_security_groups_negative(self):
     security_group1 = openstack_tenant_factories.SecurityGroupFactory()
     security_group2 = openstack_tenant_factories.SecurityGroupFactory()
     self.client.force_authenticate(self.fixture.owner)
     payload = {
         'security_groups': [
             {
                 'url': openstack_tenant_factories.SecurityGroupFactory.get_url(
                     security_group1
                 )
             },
             {
                 'url': openstack_tenant_factories.SecurityGroupFactory.get_url(
                     security_group2
                 )
             },
         ]
     }
     response = self._create_request_('new-cluster', add_payload=payload)
     self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
Exemplo n.º 8
0
 def test_validate_security_groups_positive(self):
     security_group1 = openstack_tenant_factories.SecurityGroupFactory(
         settings=self.fixture.tenant_spl.service.settings, )
     security_group2 = openstack_tenant_factories.SecurityGroupFactory(
         settings=self.fixture.tenant_spl.service.settings, )
     self.client.force_authenticate(self.fixture.staff)
     payload = {
         'security_groups': [
             {
                 'url':
                 openstack_tenant_factories.SecurityGroupFactory.get_url(
                     security_group1)
             },
             {
                 'url':
                 openstack_tenant_factories.SecurityGroupFactory.get_url(
                     security_group2)
             },
         ]
     }
     response = self._create_request_('new-cluster', add_payload=payload)
     self.assertEqual(response.status_code, status.HTTP_201_CREATED,
                      response.data)
Exemplo n.º 9
0
    def test_security_group_has_been_associated_with_an_instance(self):
        security_group1 = factories.SecurityGroupFactory(settings=self.service_settings)
        payload = self._get_valid_payload(
            security_groups=[
                {'url': factories.SecurityGroupFactory.get_url(security_group1)}
            ]
        )

        response = self.client.post(self.url, payload)

        self.assertEqual(response.status_code, status.HTTP_201_CREATED)
        self.assertIsNotNone(response.data['security_groups'])
        self.assertEqual(
            response.data['security_groups'][0]['name'], security_group1.name
        )
Exemplo n.º 10
0
    def test_security_groups_cannot_be_associated_if_they_belong_to_another_settings(
        self,
    ):
        security_group = factories.SecurityGroupFactory()
        self.assertNotEqual(self.backup.service_settings, security_group.settings)
        payload = self._get_valid_payload(
            security_groups=[
                {'url': factories.SecurityGroupFactory.get_url(security_group)}
            ]
        )

        response = self.client.post(self.url, payload)

        self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
        self.assertIn('security_groups', response.data)
Exemplo n.º 11
0
    def setUp(self):
        self.fixture = openstack_tenant_fixtures.OpenStackTenantFixture()
        self.patcher = mock.patch(
            'waldur_rancher.backend.RancherBackend.get_cluster_nodes')
        self.mocked_get_cluster_nodes = self.patcher.start()
        self.mocked_get_cluster_nodes.return_value = [{
            'backend_id':
            'node_backend_id',
            'name':
            'name-rancher-node-1'
        }]

        self.patcher_client = mock.patch(
            'waldur_rancher.backend.RancherBackend.client')
        self.mock_client = self.patcher_client.start()
        self.mock_client.get_node.return_value = backend_node_response

        service = rancher_factories.RancherServiceFactory(
            customer=self.fixture.customer)
        spl = rancher_factories.RancherServiceProjectLinkFactory(
            project=self.fixture.project, service=service)
        service_settings = spl.service.settings
        self.offering = marketplace_factories.OfferingFactory(
            type=PLUGIN_NAME, scope=service_settings)
        self.plan = marketplace_factories.PlanFactory(offering=self.offering, )
        self.offering_component = marketplace_factories.OfferingComponentFactory(
            offering=self.offering,
            type='node',
            billing_type=marketplace_models.OfferingComponent.BillingTypes.
            USAGE,
        )
        self.plan_component = marketplace_factories.PlanComponentFactory(
            plan=self.plan,
            component=self.offering_component,
        )
        openstack_tenant_factories.FlavorFactory(
            settings=self.fixture.spl.service.settings, ram=1024 * 8, cores=8)
        image = openstack_tenant_factories.ImageFactory(
            settings=self.fixture.spl.service.settings)
        openstack_tenant_factories.SecurityGroupFactory(
            name='default', settings=self.fixture.spl.service.settings)
        service_settings.options['base_image_name'] = image.name
        service_settings.save()

        self.resource = None
        self.cluster = None
        self.plan_period = None
Exemplo n.º 12
0
    def test_resource_is_created_when_order_item_is_processed(self):
        service = rancher_factories.RancherServiceFactory(
            customer=self.fixture.customer)
        spl = rancher_factories.RancherServiceProjectLinkFactory(
            project=self.fixture.project, service=service)
        service_settings = spl.service.settings
        offering = marketplace_factories.OfferingFactory(
            type=PLUGIN_NAME, scope=service_settings)

        openstack_tenant_factories.FlavorFactory(
            settings=self.fixture.spl.service.settings)
        image = openstack_tenant_factories.ImageFactory(
            settings=self.fixture.spl.service.settings)
        openstack_tenant_factories.SecurityGroupFactory(
            name='default', settings=self.fixture.spl.service.settings)
        service_settings.options['base_image_name'] = image.name
        service_settings.save()

        order = marketplace_factories.OrderFactory(
            project=self.fixture.project, created_by=self.fixture.owner)
        order_item = marketplace_factories.OrderItemFactory(
            order=order,
            offering=offering,
            attributes={
                'name':
                'name',
                'nodes': [{
                    'subnet':
                    openstack_tenant_factories.SubNetFactory.get_url(
                        self.fixture.subnet),
                    'storage':
                    1024,
                    'memory':
                    1,
                    'cpu':
                    1,
                    'roles': ['controlplane', 'etcd', 'worker']
                }],
            })
        serialized_order = core_utils.serialize_instance(order_item.order)
        serialized_user = core_utils.serialize_instance(self.fixture.staff)
        marketplace_tasks.process_order(serialized_order, serialized_user)
        self.assertTrue(
            marketplace_models.Resource.objects.filter(name='name').exists())
        self.assertTrue(
            rancher_models.Cluster.objects.filter(name='name').exists())
Exemplo n.º 13
0
    def test_security_group_rules_are_deleted(self):
        # Arrange
        openstack_security_group = openstack_factories.SecurityGroupFactory(
            tenant=self.tenant, state=StateMixin.States.UPDATING)
        rule = openstack_factories.SecurityGroupRuleFactory(
            security_group=openstack_security_group)
        security_group = factories.SecurityGroupFactory(
            settings=self.service_settings,
            backend_id=openstack_security_group.backend_id,
        )

        # Act
        openstack_security_group.set_ok()
        openstack_security_group.save()
        rule.delete()

        # Assert
        self.assertEqual(security_group.rules.count(), 0,
                         'Security group rule has not been deleted')
Exemplo n.º 14
0
    def test_security_group_update(self):
        openstack_security_group = openstack_factories.SecurityGroupFactory(
            tenant=self.tenant,
            name='New name',
            description='New description',
            state=StateMixin.States.UPDATING,
        )
        security_group = factories.SecurityGroupFactory(
            settings=self.service_settings,
            backend_id=openstack_security_group.backend_id,
        )

        openstack_security_group.set_ok()
        openstack_security_group.save()
        security_group.refresh_from_db()

        self.assertIn(openstack_security_group.name, security_group.name)
        self.assertIn(openstack_security_group.description,
                      security_group.description)
Exemplo n.º 15
0
    def test_if_security_group_already_exists_duplicate_is_not_created(self):
        """
        Consider the following case: there are two objects:
        security group as a property and security group as a resource.
        Property has been created by pull_security_groups method.
        When resource switches state, property should be created too via signal handler.
        But as security group already exists as a property it should not be created twice,
        because otherwise it violates uniqueness constraint.
        """
        security_group = factories.SecurityGroupFactory(
            settings=self.service_settings,
            backend_id='backend_id',
        )
        openstack_security_group = openstack_factories.SecurityGroupFactory(
            tenant=self.tenant,
            state=StateMixin.States.CREATING,
            backend_id=security_group.backend_id,
        )
        openstack_security_group.set_ok()
        openstack_security_group.save()

        self.assertEqual(models.SecurityGroup.objects.count(), 1)
    def test_change_instance_security_groups(self, mocked_execute_method):
        response = self.client.get(
            factories.InstanceFactory.get_url(self.instance))
        self.assertEqual(response.status_code, status.HTTP_200_OK)

        security_group = factories.SecurityGroupFactory(settings=self.settings)
        data = {
            'security_groups':
            [self._get_valid_security_group_payload(security_group)]
        }

        response = self.client.post(
            factories.InstanceFactory.get_url(self.instance,
                                              action='update_security_groups'),
            data=data,
        )
        self.assertEqual(response.status_code, status.HTTP_202_ACCEPTED)

        reread_instance = models.Instance.objects.get(pk=self.instance.pk)
        reread_security_groups = list(reread_instance.security_groups.all())

        self.assertEquals(reread_security_groups, [security_group])
        mocked_execute_method.assert_called_once()