Beispiel #1
0
 def test_isolate_agg_trait_on_flv_img_destination_not_set(
         self, mock_getnotmd):
     mock_getnotmd.return_value = []
     flavor_traits = set(['HW_GPU_API_DXVA'])
     image_traits = set(['HW_NIC_DCB_ETS'])
     fake_flavor = objects.Flavor(vcpus=1,
                                  memory_mb=1024,
                                  root_gb=10,
                                  ephemeral_gb=5,
                                  swap=0,
                                  extra_specs={
                                      'trait:' + trait: 'required'
                                      for trait in flavor_traits
                                  })
     fake_image = objects.ImageMeta(properties=objects.ImageMetaProps(
         traits_required=[trait for trait in image_traits]))
     reqspec = objects.RequestSpec(flavor=fake_flavor, image=fake_image)
     result = request_filter.isolate_aggregates(self.context, reqspec)
     self.assertTrue(result)
     self.assertNotIn('requested_destination', reqspec)
     keys = [
         'trait:%s' % trait for trait in flavor_traits.union(image_traits)
     ]
     mock_getnotmd.assert_called_once_with(self.context,
                                           utils.ItemsMatcher(keys),
                                           'trait:',
                                           value='required')
Beispiel #2
0
 def test_isolate_aggregates(self, mock_getnotmd):
     agg4_traits = {
         'trait:HW_GPU_API_DXVA': 'required',
         'trait:HW_NIC_DCB_ETS': 'required'
     }
     mock_getnotmd.return_value = [
         objects.Aggregate(
             uuid=uuids.agg1,
             metadata={'trait:CUSTOM_WINDOWS_LICENSED_TRAIT': 'required'}),
         objects.Aggregate(uuid=uuids.agg2,
                           metadata={
                               'trait:CUSTOM_WINDOWS_LICENSED_TRAIT':
                               'required',
                               'trait:CUSTOM_XYZ_TRAIT': 'required'
                           }),
         objects.Aggregate(uuid=uuids.agg4, metadata=agg4_traits),
     ]
     fake_flavor = objects.Flavor(vcpus=1,
                                  memory_mb=1024,
                                  root_gb=10,
                                  ephemeral_gb=5,
                                  swap=0,
                                  extra_specs=agg4_traits)
     fake_image = objects.ImageMeta(properties=objects.ImageMetaProps(
         traits_required=[]))
     reqspec = objects.RequestSpec(flavor=fake_flavor, image=fake_image)
     result = request_filter.isolate_aggregates(self.context, reqspec)
     self.assertTrue(result)
     self.assertItemsEqual(
         set([uuids.agg1, uuids.agg2, uuids.agg4]),
         reqspec.requested_destination.forbidden_aggregates)
     mock_getnotmd.assert_called_once_with(self.context,
                                           utils.ItemsMatcher(agg4_traits),
                                           'trait:',
                                           value='required')
Beispiel #3
0
    def test_with_tenant_and_az_and_traits(self, mock_getmd, mock_getnotmd):
        mock_getmd.side_effect = [
            # Tenant filter
            [
                objects.Aggregate(uuid=uuids.agg1,
                                  metadata={'filter_tenant_id': 'owner'}),
                objects.Aggregate(uuid=uuids.agg2,
                                  metadata={'filter_tenant_id:12': 'owner'}),
                objects.Aggregate(uuid=uuids.agg3,
                                  metadata={'other_key': 'owner'})
            ],
            # AZ filter
            [
                objects.Aggregate(uuid=uuids.agg4,
                                  metadata={'availability_zone': 'myaz'})
            ],
        ]

        mock_getnotmd.side_effect = [
            # isolate_aggregates filter
            [
                objects.Aggregate(uuid=uuids.agg1,
                                  metadata={
                                      'trait:CUSTOM_WINDOWS_LICENSED_TRAIT':
                                      'required'
                                  }),
                objects.Aggregate(uuid=uuids.agg2,
                                  metadata={
                                      'trait:CUSTOM_WINDOWS_LICENSED_TRAIT':
                                      'required',
                                      'trait:CUSTOM_XYZ_TRAIT': 'required'
                                  }),
                objects.Aggregate(
                    uuid=uuids.agg3,
                    metadata={'trait:CUSTOM_XYZ_TRAIT': 'required'}),
            ],
        ]

        traits = set(['HW_GPU_API_DXVA', 'HW_NIC_DCB_ETS'])
        fake_flavor = objects.Flavor(
            vcpus=1,
            memory_mb=1024,
            root_gb=10,
            ephemeral_gb=5,
            swap=0,
            extra_specs={'trait:' + trait: 'required'
                         for trait in traits})
        fake_image = objects.ImageMeta(properties=objects.ImageMetaProps(
            traits_required=[]))
        reqspec = objects.RequestSpec(project_id='owner',
                                      availability_zone='myaz',
                                      flavor=fake_flavor,
                                      image=fake_image)
        request_filter.process_reqspec(self.context, reqspec)
        self.assertEqual(
            ','.join(sorted([uuids.agg1, uuids.agg2])), ','.join(
                sorted(
                    reqspec.requested_destination.aggregates[0].split(','))))
        self.assertEqual(
            ','.join(sorted([uuids.agg4])), ','.join(
                sorted(
                    reqspec.requested_destination.aggregates[1].split(','))))
        self.assertItemsEqual(
            set([uuids.agg1, uuids.agg2, uuids.agg3]),
            reqspec.requested_destination.forbidden_aggregates)
        mock_getmd.assert_has_calls([
            mock.call(self.context, value='owner'),
            mock.call(self.context, key='availability_zone', value='myaz')
        ])

        keys = ['trait:%s' % trait for trait in traits]
        mock_getnotmd.assert_called_once_with(self.context,
                                              utils.ItemsMatcher(keys),
                                              'trait:',
                                              value='required')