Esempio n. 1
0
 def test_notify_usage_exists(self):
     """Ensure 'exists' notification generates appropriate usage data."""
     instance_id = self._create_instance()
     instance = db.instance_get(self.context, instance_id)
     # Set some system metadata
     sys_metadata = {"image_md_key1": "val1", "image_md_key2": "val2", "other_data": "meow"}
     db.instance_system_metadata_update(self.context, instance["uuid"], sys_metadata, False)
     compute_utils.notify_usage_exists(self.context, instance)
     self.assertEquals(len(test_notifier.NOTIFICATIONS), 1)
     msg = test_notifier.NOTIFICATIONS[0]
     self.assertEquals(msg["priority"], "INFO")
     self.assertEquals(msg["event_type"], "compute.instance.exists")
     payload = msg["payload"]
     self.assertEquals(payload["tenant_id"], self.project_id)
     self.assertEquals(payload["user_id"], self.user_id)
     self.assertEquals(payload["instance_id"], instance.uuid)
     self.assertEquals(payload["instance_type"], "m1.tiny")
     type_id = instance_types.get_instance_type_by_name("m1.tiny")["id"]
     self.assertEquals(str(payload["instance_type_id"]), str(type_id))
     for attr in (
         "display_name",
         "created_at",
         "launched_at",
         "state",
         "state_description",
         "bandwidth",
         "audit_period_beginning",
         "audit_period_ending",
         "image_meta",
     ):
         self.assertTrue(attr in payload, msg="Key %s not in payload" % attr)
     self.assertEquals(payload["image_meta"], {"md_key1": "val1", "md_key2": "val2"})
     image_ref_url = "%s/images/1" % utils.generate_glance_url()
     self.assertEquals(payload["image_ref_url"], image_ref_url)
     self.compute.terminate_instance(self.context, instance["uuid"])
Esempio n. 2
0
 def _create_with_injected_files(self, files):
     FLAGS.image_service = 'nova.image.fake.FakeImageService'
     api = compute.API(image_service=self.StubImageService())
     inst_type = instance_types.get_instance_type_by_name('m1.small')
     api.create(self.context, min_count=1, max_count=1,
             instance_type=inst_type, image_href='3',
             injected_files=files)
Esempio n. 3
0
 def _create_with_injected_files(self, files):
     self.flags(image_service="nova.image.fake.FakeImageService")
     api = compute.API(image_service=self.StubImageService())
     inst_type = instance_types.get_instance_type_by_name("m1.small")
     api.create(
         self.context, min_count=1, max_count=1, instance_type=inst_type, image_href="3", injected_files=files
     )
Esempio n. 4
0
    def test_prep_resize_post_populates_retry(self):
        """Prep resize should add a 'host' entry to the retry dict"""
        sched = fakes.FakeFilterScheduler()

        image = 'image'
        instance = db.instance_create(self.context, {})

        instance_properties = {'project_id': 'fake', 'os_type': 'Linux'}
        instance_type = instance_types.get_instance_type_by_name("m1.tiny")
        request_spec = {'instance_properties': instance_properties,
                        'instance_type': instance_type}
        retry = {'hosts': [], 'num_attempts': 1}
        filter_properties = {'retry': retry}
        reservations = None

        host = fakes.FakeHostState('host', 'node', {})
        weighted_host = least_cost.WeightedHost(1, host)
        hosts = [weighted_host]

        self.mox.StubOutWithMock(sched, '_schedule')
        self.mox.StubOutWithMock(sched.compute_rpcapi, 'prep_resize')

        sched._schedule(self.context, request_spec,
                filter_properties, [instance['uuid']]).AndReturn(hosts)
        sched.compute_rpcapi.prep_resize(self.context, image, instance,
                instance_type, 'host', reservations, request_spec=request_spec,
                filter_properties=filter_properties)

        self.mox.ReplayAll()
        sched.schedule_prep_resize(self.context, image, request_spec,
                filter_properties, instance, instance_type, reservations)

        self.assertEqual(['host'], filter_properties['retry']['hosts'])
Esempio n. 5
0
 def run_instances(self, context, **kwargs):
     max_count = int(kwargs.get('max_count', 1))
     if kwargs.get('kernel_id'):
         kernel = self._get_image(context, kwargs['kernel_id'])
         kwargs['kernel_id'] = kernel['id']
     if kwargs.get('ramdisk_id'):
         ramdisk = self._get_image(context, kwargs['ramdisk_id'])
         kwargs['ramdisk_id'] = ramdisk['id']
     instances = self.compute_api.create(context,
         instance_type=instance_types.get_instance_type_by_name(
             kwargs.get('instance_type', None)),
         image_id=self._get_image(context, kwargs['image_id'])['id'],
         min_count=int(kwargs.get('min_count', max_count)),
         max_count=max_count,
         kernel_id=kwargs.get('kernel_id'),
         ramdisk_id=kwargs.get('ramdisk_id'),
         display_name=kwargs.get('display_name'),
         display_description=kwargs.get('display_description'),
         key_name=kwargs.get('key_name'),
         user_data=kwargs.get('user_data'),
         security_group=kwargs.get('security_group'),
         availability_zone=kwargs.get('placement', {}).get(
                               'AvailabilityZone'))
     return self._format_run_instances(context,
                                       instances[0]['reservation_id'])
Esempio n. 6
0
    def create(self, req, body):
        """Create a new VSA."""
        context = req.environ["nova.context"]

        if not body or "vsa" not in body:
            LOG.debug(_("No body provided"), context=context)
            raise exc.HTTPUnprocessableEntity()

        vsa = body["vsa"]

        display_name = vsa.get("displayName")
        vc_type = vsa.get("vcType", FLAGS.default_vsa_instance_type)
        try:
            instance_type = instance_types.get_instance_type_by_name(vc_type)
        except exception.NotFound:
            raise exc.HTTPNotFound()

        LOG.audit(_("Create VSA %(display_name)s of type %(vc_type)s"), locals(), context=context)

        args = dict(
            display_name=display_name,
            display_description=vsa.get("displayDescription"),
            instance_type=instance_type,
            storage=vsa.get("storage"),
            shared=vsa.get("shared"),
            availability_zone=vsa.get("placement", {}).get("AvailabilityZone"),
        )

        vsa = self.vsa_api.create(context, **args)

        instances = self._get_instances_by_vsa_id(context, vsa.get("id"))
        return {"vsa": _vsa_view(context, vsa, True, instances)}
Esempio n. 7
0
 def test_notify_usage_exists_deleted_instance(self):
     """Ensure 'exists' notification generates appropriate usage data."""
     instance_id = self._create_instance()
     instance = db.instance_get(self.context, instance_id)
     # Set some system metadata
     sys_metadata = {'image_md_key1': 'val1',
                     'image_md_key2': 'val2',
                     'other_data': 'meow'}
     db.instance_system_metadata_update(self.context, instance['uuid'],
             sys_metadata, False)
     self.compute.terminate_instance(self.context, instance)
     instance = db.instance_get(self.context.elevated(read_deleted='yes'),
                                instance_id)
     compute_utils.notify_usage_exists(self.context, instance)
     msg = test_notifier.NOTIFICATIONS[-1]
     self.assertEquals(msg['priority'], 'INFO')
     self.assertEquals(msg['event_type'], 'compute.instance.exists')
     payload = msg['payload']
     self.assertEquals(payload['tenant_id'], self.project_id)
     self.assertEquals(payload['user_id'], self.user_id)
     self.assertEquals(payload['instance_id'], instance.uuid)
     self.assertEquals(payload['instance_type'], 'm1.tiny')
     type_id = instance_types.get_instance_type_by_name('m1.tiny')['id']
     self.assertEquals(str(payload['instance_type_id']), str(type_id))
     for attr in ('display_name', 'created_at', 'launched_at',
                  'state', 'state_description',
                  'bandwidth', 'audit_period_beginning',
                  'audit_period_ending', 'image_meta'):
         self.assertTrue(attr in payload,
                         msg="Key %s not in payload" % attr)
     self.assertEquals(payload['image_meta'],
             {'md_key1': 'val1', 'md_key2': 'val2'})
     image_ref_url = "%s/images/1" % utils.generate_glance_url()
     self.assertEquals(payload['image_ref_url'], image_ref_url)
Esempio n. 8
0
 def test_notify_about_instance_usage(self):
     instance_id = self._create_instance()
     instance = db.instance_get(self.context, instance_id)
     # Set some system metadata
     sys_metadata = {'image_md_key1': 'val1',
                     'image_md_key2': 'val2',
                     'other_data': 'meow'}
     extra_usage_info = {'image_name': 'fake_name'}
     db.instance_system_metadata_update(self.context, instance['uuid'],
             sys_metadata, False)
     compute_utils.notify_about_instance_usage(self.context, instance,
     'create.start', extra_usage_info=extra_usage_info)
     self.assertEquals(len(test_notifier.NOTIFICATIONS), 1)
     msg = test_notifier.NOTIFICATIONS[0]
     self.assertEquals(msg['priority'], 'INFO')
     self.assertEquals(msg['event_type'], 'compute.instance.create.start')
     payload = msg['payload']
     self.assertEquals(payload['tenant_id'], self.project_id)
     self.assertEquals(payload['user_id'], self.user_id)
     self.assertEquals(payload['instance_id'], instance.uuid)
     self.assertEquals(payload['instance_type'], 'm1.tiny')
     type_id = instance_types.get_instance_type_by_name('m1.tiny')['id']
     self.assertEquals(str(payload['instance_type_id']), str(type_id))
     for attr in ('display_name', 'created_at', 'launched_at',
                  'state', 'state_description', 'image_meta'):
         self.assertTrue(attr in payload,
                         msg="Key %s not in payload" % attr)
     self.assertEquals(payload['image_meta'],
             {'md_key1': 'val1', 'md_key2': 'val2'})
     self.assertEquals(payload['image_name'], 'fake_name')
     image_ref_url = "%s/images/1" % utils.generate_glance_url()
     self.assertEquals(payload['image_ref_url'], image_ref_url)
     self.compute.terminate_instance(self.context, instance)
Esempio n. 9
0
    def test_finish_migrate_no_local_storage(self):
        tiny_type_id = instance_types.get_instance_type_by_name("m1.tiny")["id"]
        self.values.update({"instance_type_id": tiny_type_id, "local_gb": 0})
        instance = db.instance_create(self.context, self.values)

        def fake_vdi_resize(*args, **kwargs):
            raise Exception("This shouldn't be called")

        self.stubs.Set(stubs.FakeSessionForMigrationTests, "VDI_resize_online", fake_vdi_resize)
        stubs.stubout_session(self.stubs, stubs.FakeSessionForMigrationTests)
        stubs.stubout_loopingcall_start(self.stubs)
        conn = xenapi_conn.get_connection(False)
        network_info = [
            (
                {"bridge": "fa0", "id": 0, "injected": False},
                {
                    "broadcast": "192.168.0.255",
                    "dns": ["192.168.0.1"],
                    "gateway": "192.168.0.1",
                    "gateway6": "dead:beef::1",
                    "ip6s": [{"enabled": "1", "ip": "dead:beef::dcad:beff:feef:0", "netmask": "64"}],
                    "ips": [{"enabled": "1", "ip": "192.168.0.100", "netmask": "255.255.255.0"}],
                    "label": "fake",
                    "mac": "DE:AD:BE:EF:00:00",
                    "rxtx_cap": 3,
                },
            )
        ]
        conn.finish_migration(
            self.context, instance, dict(base_copy="hurr", cow="durr"), network_info, resize_instance=True
        )
Esempio n. 10
0
    def test_prep_resize_post_populates_retry(self):
        """Prep resize should add a ('host', 'node') entry to the retry dict"""
        sched = fakes.FakeFilterScheduler()

        image = 'image'
        instance = db.instance_create(self.context, {})

        instance_properties = {'project_id': 'fake', 'os_type': 'Linux'}
        instance_type = instance_types.get_instance_type_by_name("m1.tiny")
        request_spec = {'instance_properties': instance_properties,
                        'instance_type': instance_type}
        retry = {'hosts': [], 'num_attempts': 1}
        filter_properties = {'retry': retry}
        reservations = None

        host = fakes.FakeHostState('host', 'node', {})
        weighed_host = weights.WeighedHost(host, 1)
        weighed_hosts = [weighed_host]

        self.mox.StubOutWithMock(sched, '_schedule')
        self.mox.StubOutWithMock(sched.compute_rpcapi, 'prep_resize')

        sched._schedule(self.context, request_spec, filter_properties,
                [instance['uuid']]).AndReturn(weighed_hosts)
        sched.compute_rpcapi.prep_resize(self.context, image, instance,
                instance_type, 'host', reservations, request_spec=request_spec,
                filter_properties=filter_properties, node='node')

        self.mox.ReplayAll()
        sched.schedule_prep_resize(self.context, image, request_spec,
                filter_properties, instance, instance_type, reservations)

        self.assertEqual([('host', 'node')],
                         filter_properties['retry']['hosts'])
Esempio n. 11
0
 def test_notify_usage_exists_deleted_instance(self):
     # Ensure 'exists' notification generates appropriate usage data.
     instance_id = self._create_instance()
     instance = db.instance_get(self.context, instance_id)
     # Set some system metadata
     sys_metadata = {'image_md_key1': 'val1',
                     'image_md_key2': 'val2',
                     'other_data': 'meow'}
     db.instance_system_metadata_update(self.context, instance['uuid'],
             sys_metadata, False)
     self.compute.terminate_instance(self.context, instance)
     instance = db.instance_get(self.context.elevated(read_deleted='yes'),
                                instance_id)
     compute_utils.notify_usage_exists(self.context, instance)
     msg = test_notifier.NOTIFICATIONS[-1]
     self.assertEquals(msg['priority'], 'INFO')
     self.assertEquals(msg['event_type'], 'compute.instance.exists')
     payload = msg['payload']
     self.assertEquals(payload['tenant_id'], self.project_id)
     self.assertEquals(payload['user_id'], self.user_id)
     self.assertEquals(payload['instance_id'], instance['uuid'])
     self.assertEquals(payload['instance_type'], 'm1.tiny')
     type_id = instance_types.get_instance_type_by_name('m1.tiny')['id']
     self.assertEquals(str(payload['instance_type_id']), str(type_id))
     for attr in ('display_name', 'created_at', 'launched_at',
                  'state', 'state_description',
                  'bandwidth', 'audit_period_beginning',
                  'audit_period_ending', 'image_meta'):
         self.assertTrue(attr in payload,
                         msg="Key %s not in payload" % attr)
     self.assertEquals(payload['image_meta'],
             {'md_key1': 'val1', 'md_key2': 'val2'})
     image_ref_url = "%s/images/1" % glance.generate_glance_url()
     self.assertEquals(payload['image_ref_url'], image_ref_url)
Esempio n. 12
0
    def test_resize_instance_notification(self):
        """Ensure notifications on instance migrate/resize"""
        instance_id = self._create_instance()
        context = self.context.elevated()
        inst_ref = db.instance_get(context, instance_id)

        self.compute.run_instance(self.context, instance_id)
        test_notifier.NOTIFICATIONS = []

        db.instance_update(self.context, instance_id, {'host': 'foo'})
        self.compute.prep_resize(context, inst_ref['uuid'], 1)
        migration_ref = db.migration_get_by_instance_and_status(
            context, inst_ref['uuid'], 'pre-migrating')

        self.assertEquals(len(test_notifier.NOTIFICATIONS), 1)
        msg = test_notifier.NOTIFICATIONS[0]
        self.assertEquals(msg['priority'], 'INFO')
        self.assertEquals(msg['event_type'], 'compute.instance.resize.prep')
        payload = msg['payload']
        self.assertEquals(payload['tenant_id'], self.project_id)
        self.assertEquals(payload['user_id'], self.user_id)
        self.assertEquals(payload['instance_id'], instance_id)
        self.assertEquals(payload['instance_type'], 'm1.tiny')
        type_id = instance_types.get_instance_type_by_name('m1.tiny')['id']
        self.assertEquals(str(payload['instance_type_id']), str(type_id))
        self.assertTrue('display_name' in payload)
        self.assertTrue('created_at' in payload)
        self.assertTrue('launched_at' in payload)
        self.assertEquals(payload['image_ref'], '1')
        self.compute.terminate_instance(context, instance_id)
Esempio n. 13
0
 def run_instances(self, context, **kwargs):
     max_count = int(kwargs.get('max_count', 1))
     if kwargs.get('kernel_id'):
         kernel = self._get_image(context, kwargs['kernel_id'])
         kwargs['kernel_id'] = kernel['id']
     if kwargs.get('ramdisk_id'):
         ramdisk = self._get_image(context, kwargs['ramdisk_id'])
         kwargs['ramdisk_id'] = ramdisk['id']
     instances = self.compute_api.create(
         context,
         instance_type=instance_types.get_instance_type_by_name(
             kwargs.get('instance_type', None)),
         image_id=self._get_image(context, kwargs['image_id'])['id'],
         min_count=int(kwargs.get('min_count', max_count)),
         max_count=max_count,
         kernel_id=kwargs.get('kernel_id'),
         ramdisk_id=kwargs.get('ramdisk_id'),
         display_name=kwargs.get('display_name'),
         display_description=kwargs.get('display_description'),
         key_name=kwargs.get('key_name'),
         user_data=kwargs.get('user_data'),
         security_group=kwargs.get('security_group'),
         availability_zone=kwargs.get('placement',
                                      {}).get('AvailabilityZone'))
     return self._format_run_instances(context,
                                       instances[0]['reservation_id'])
Esempio n. 14
0
 def test_notify_about_instance_usage(self):
     instance_id = self._create_instance()
     instance = db.instance_get(self.context, instance_id)
     # Set some system metadata
     sys_metadata = {'image_md_key1': 'val1',
                     'image_md_key2': 'val2',
                     'other_data': 'meow'}
     extra_usage_info = {'image_name': 'fake_name'}
     db.instance_system_metadata_update(self.context, instance['uuid'],
             sys_metadata, False)
     compute_utils.notify_about_instance_usage(self.context, instance,
     'create.start', extra_usage_info=extra_usage_info)
     self.assertEquals(len(test_notifier.NOTIFICATIONS), 1)
     msg = test_notifier.NOTIFICATIONS[0]
     self.assertEquals(msg['priority'], 'INFO')
     self.assertEquals(msg['event_type'], 'compute.instance.create.start')
     payload = msg['payload']
     self.assertEquals(payload['tenant_id'], self.project_id)
     self.assertEquals(payload['user_id'], self.user_id)
     self.assertEquals(payload['instance_id'], instance.uuid)
     self.assertEquals(payload['instance_type'], 'm1.tiny')
     type_id = instance_types.get_instance_type_by_name('m1.tiny')['id']
     self.assertEquals(str(payload['instance_type_id']), str(type_id))
     for attr in ('display_name', 'created_at', 'launched_at',
                  'state', 'state_description', 'image_meta'):
         self.assertTrue(attr in payload,
                         msg="Key %s not in payload" % attr)
     self.assertEquals(payload['image_meta'],
             {'md_key1': 'val1', 'md_key2': 'val2'})
     self.assertEquals(payload['image_name'], 'fake_name')
     image_ref_url = "%s/images/1" % utils.generate_glance_url()
     self.assertEquals(payload['image_ref_url'], image_ref_url)
     self.compute.terminate_instance(self.context, instance)
Esempio n. 15
0
    def test_resize_instance_notification(self):
        """Ensure notifications on instance migrate/resize"""
        instance_id = self._create_instance()
        context = self.context.elevated()
        inst_ref = db.instance_get(context, instance_id)

        self.compute.run_instance(self.context, instance_id)
        test_notifier.NOTIFICATIONS = []

        db.instance_update(self.context, instance_id, {'host': 'foo'})
        self.compute.prep_resize(context, inst_ref['uuid'], 1)
        migration_ref = db.migration_get_by_instance_and_status(context,
                inst_ref['uuid'], 'pre-migrating')

        self.assertEquals(len(test_notifier.NOTIFICATIONS), 1)
        msg = test_notifier.NOTIFICATIONS[0]
        self.assertEquals(msg['priority'], 'INFO')
        self.assertEquals(msg['event_type'], 'compute.instance.resize.prep')
        payload = msg['payload']
        self.assertEquals(payload['tenant_id'], self.project_id)
        self.assertEquals(payload['user_id'], self.user_id)
        self.assertEquals(payload['instance_id'], instance_id)
        self.assertEquals(payload['instance_type'], 'm1.tiny')
        type_id = instance_types.get_instance_type_by_name('m1.tiny')['id']
        self.assertEquals(str(payload['instance_type_id']), str(type_id))
        self.assertTrue('display_name' in payload)
        self.assertTrue('created_at' in payload)
        self.assertTrue('launched_at' in payload)
        self.assertEquals(payload['image_ref'], '1')
        self.compute.terminate_instance(context, instance_id)
Esempio n. 16
0
 def test_notify_usage_exists_instance_not_found(self):
     """Ensure 'exists' notification generates appropriate usage data."""
     instance_id = self._create_instance()
     instance = db.instance_get(self.context, instance_id)
     self.compute.terminate_instance(self.context, instance['uuid'])
     compute_utils.notify_usage_exists(self.context, instance)
     msg = test_notifier.NOTIFICATIONS[-1]
     self.assertEquals(msg['priority'], 'INFO')
     self.assertEquals(msg['event_type'], 'compute.instance.exists')
     payload = msg['payload']
     self.assertEquals(payload['tenant_id'], self.project_id)
     self.assertEquals(payload['user_id'], self.user_id)
     self.assertEquals(payload['instance_id'], instance.uuid)
     self.assertEquals(payload['instance_type'], 'm1.tiny')
     type_id = instance_types.get_instance_type_by_name('m1.tiny')['id']
     self.assertEquals(str(payload['instance_type_id']), str(type_id))
     for attr in ('display_name', 'created_at', 'launched_at', 'state',
                  'state_description', 'bandwidth',
                  'audit_period_beginning', 'audit_period_ending',
                  'image_meta'):
         self.assertTrue(attr in payload,
                         msg="Key %s not in payload" % attr)
     self.assertEquals(payload['image_meta'], {})
     image_ref_url = "%s/images/1" % utils.generate_glance_url()
     self.assertEquals(payload['image_ref_url'], image_ref_url)
Esempio n. 17
0
    def test_finish_migrate_no_local_storage(self):
        tiny_type_id = \
                instance_types.get_instance_type_by_name('m1.tiny')['id']
        self.values.update({'instance_type_id': tiny_type_id, 'local_gb': 0})
        instance = db.instance_create(self.context, self.values)

        def fake_vdi_resize(*args, **kwargs):
            raise Exception("This shouldn't be called")

        self.stubs.Set(stubs.FakeSessionForMigrationTests,
                "VDI_resize_online", fake_vdi_resize)
        stubs.stubout_session(self.stubs, stubs.FakeSessionForMigrationTests)
        stubs.stubout_loopingcall_start(self.stubs)
        conn = xenapi_conn.get_connection(False)
        network_info = [({'bridge': 'fa0', 'id': 0, 'injected': False},
                          {'broadcast': '192.168.0.255',
                           'dns': ['192.168.0.1'],
                           'gateway': '192.168.0.1',
                           'gateway6': 'dead:beef::1',
                           'ip6s': [{'enabled': '1',
                                     'ip': 'dead:beef::dcad:beff:feef:0',
                                           'netmask': '64'}],
                           'ips': [{'enabled': '1',
                                    'ip': '192.168.0.100',
                                    'netmask': '255.255.255.0'}],
                           'label': 'fake',
                           'mac': 'DE:AD:BE:EF:00:00',
                           'rxtx_cap': 3})]
        conn.finish_migration(instance, dict(base_copy='hurr', cow='durr'),
                           network_info, resize_instance=True)
Esempio n. 18
0
    def create(self, req, body):
        """Create a new VSA."""
        context = req.environ['nova.context']
        authorize(context)

        if not body or 'vsa' not in body:
            LOG.debug(_("No body provided"), context=context)
            raise exc.HTTPUnprocessableEntity()

        vsa = body['vsa']

        display_name = vsa.get('displayName')
        vc_type = vsa.get('vcType', FLAGS.default_vsa_instance_type)
        try:
            instance_type = instance_types.get_instance_type_by_name(vc_type)
        except exception.NotFound:
            raise exc.HTTPNotFound()

        LOG.audit(_("Create VSA %(display_name)s of type %(vc_type)s"),
                    locals(), context=context)

        _vsa_placement = vsa.get('placement', {})
        args = dict(display_name=display_name,
                    display_description=vsa.get('displayDescription'),
                    instance_type=instance_type,
                    storage=vsa.get('storage'),
                    shared=vsa.get('shared'),
                    availability_zone=_vsa_placement.get('AvailabilityZone'))

        vsa = self.vsa_api.create(context, **args)

        instances = self._get_instances_by_vsa_id(context, vsa.get('id'))
        return {'vsa': _vsa_view(context, vsa, True, instances)}
Esempio n. 19
0
 def test_notify_usage_exists_instance_not_found(self):
     # Ensure 'exists' notification generates appropriate usage data.
     instance_id = self._create_instance()
     instance = db.instance_get(self.context, instance_id)
     self.compute.terminate_instance(self.context, instance)
     compute_utils.notify_usage_exists(self.context, instance)
     msg = test_notifier.NOTIFICATIONS[-1]
     self.assertEquals(msg['priority'], 'INFO')
     self.assertEquals(msg['event_type'], 'compute.instance.exists')
     payload = msg['payload']
     self.assertEquals(payload['tenant_id'], self.project_id)
     self.assertEquals(payload['user_id'], self.user_id)
     self.assertEquals(payload['instance_id'], instance['uuid'])
     self.assertEquals(payload['instance_type'], 'm1.tiny')
     type_id = instance_types.get_instance_type_by_name('m1.tiny')['id']
     self.assertEquals(str(payload['instance_type_id']), str(type_id))
     for attr in ('display_name', 'created_at', 'launched_at',
                  'state', 'state_description',
                  'bandwidth', 'audit_period_beginning',
                  'audit_period_ending', 'image_meta'):
         self.assertTrue(attr in payload,
                         msg="Key %s not in payload" % attr)
     self.assertEquals(payload['image_meta'], {})
     image_ref_url = "%s/images/1" % glance.generate_glance_url()
     self.assertEquals(payload['image_ref_url'], image_ref_url)
Esempio n. 20
0
    def create(self, req, body):
        """Create a new VSA."""
        context = req.environ['nova.context']

        if not body or 'vsa' not in body:
            LOG.debug(_("No body provided"), context=context)
            raise exc.HTTPUnprocessableEntity()

        vsa = body['vsa']

        display_name = vsa.get('displayName')
        vc_type = vsa.get('vcType', FLAGS.default_vsa_instance_type)
        try:
            instance_type = instance_types.get_instance_type_by_name(vc_type)
        except exception.NotFound:
            raise exc.HTTPNotFound()

        LOG.audit(_("Create VSA %(display_name)s of type %(vc_type)s"),
                  locals(),
                  context=context)

        args = dict(display_name=display_name,
                display_description=vsa.get('displayDescription'),
                instance_type=instance_type,
                storage=vsa.get('storage'),
                shared=vsa.get('shared'),
                availability_zone=vsa.get('placement', {}).\
                                          get('AvailabilityZone'))

        vsa = self.vsa_api.create(context, **args)

        instances = self._get_instances_by_vsa_id(context, vsa.get('id'))
        return {'vsa': _vsa_view(context, vsa, True, instances)}
Esempio n. 21
0
 def _create_with_injected_files(self, files):
     self.flags(image_service="nova.image.fake.FakeImageService")
     api = compute.API(image_service=self.StubImageService())
     inst_type = instance_types.get_instance_type_by_name("m1.small")
     image_uuid = "cedef40a-ed67-4d10-800e-17455edce175"
     api.create(
         self.context, min_count=1, max_count=1, instance_type=inst_type, image_href=image_uuid, injected_files=files
     )
 def test_no_injected_files(self):
     self.flags(image_service='nova.image.fake.FakeImageService')
     api = compute.API(image_service=self.StubImageService())
     inst_type = instance_types.get_instance_type_by_name('m1.small')
     image_uuid = 'cedef40a-ed67-4d10-800e-17455edce175'
     api.create(self.context,
                instance_type=inst_type,
                image_href=image_uuid)
Esempio n. 23
0
 def test_no_injected_files(self):
     self.flags(image_service='nova.image.fake.FakeImageService')
     api = compute.API(image_service=self.StubImageService())
     inst_type = instance_types.get_instance_type_by_name('m1.small')
     image_uuid = 'cedef40a-ed67-4d10-800e-17455edce175'
     api.create(self.context,
                instance_type=inst_type,
                image_href=image_uuid)
Esempio n. 24
0
 def list(self, name=None):
     """Lists all active or specific instance types / flavors."""
     try:
         if name is None:
             inst_types = instance_types.get_all_types()
         else:
             inst_types = instance_types.get_instance_type_by_name(name)
     except db_exc.DBError, e:
         _db_error(e)
Esempio n. 25
0
 def _create_with_injected_files(self, files):
     api = compute.API(image_service=self.StubImageService())
     inst_type = instance_types.get_instance_type_by_name('m1.small')
     api.create(self.context,
                min_count=1,
                max_count=1,
                instance_type=inst_type,
                image_id='fake',
                injected_files=files)
Esempio n. 26
0
 def _create_with_injected_files(self, files):
     self.flags(image_service='nova.image.fake.FakeImageService')
     api = compute.API(image_service=self.StubImageService())
     inst_type = instance_types.get_instance_type_by_name('m1.small')
     api.create(self.context,
                min_count=1,
                max_count=1,
                instance_type=inst_type,
                image_href='3',
                injected_files=files)
Esempio n. 27
0
 def _wrapped_create(self, params=None):
     inst = {}
     inst['image_ref'] = 1
     inst['user_id'] = self.user_id
     inst['project_id'] = self.project_id
     type_id = instance_types.get_instance_type_by_name('m1.tiny')['id']
     inst['instance_type_id'] = type_id
     inst['root_gb'] = 0
     inst['ephemeral_gb'] = 0
     if params:
         inst.update(params)
     return db.instance_create(self.context, inst)
Esempio n. 28
0
 def test_too_many_metadata_items(self):
     metadata = {}
     for i in range(FLAGS.quota_metadata_items + 1):
         metadata['key%s' % i] = 'value%s' % i
     inst_type = instance_types.get_instance_type_by_name('m1.small')
     self.assertRaises(quota.QuotaError, compute.API().create,
                                         self.context,
                                         min_count=1,
                                         max_count=1,
                                         instance_type=inst_type,
                                         image_href='fake',
                                         metadata=metadata)
Esempio n. 29
0
 def _wrapped_create(self, params=None):
     inst = {}
     inst['image_ref'] = 1
     inst['user_id'] = self.user_id
     inst['project_id'] = self.project_id
     type_id = instance_types.get_instance_type_by_name('m1.tiny')['id']
     inst['instance_type_id'] = type_id
     inst['root_gb'] = 0
     inst['ephemeral_gb'] = 0
     if params:
         inst.update(params)
     return db.instance_create(self.context, inst)
Esempio n. 30
0
 def test_too_many_cores(self):
     instance_ids = []
     instance_id = self._create_instance(cores=4)
     instance_ids.append(instance_id)
     inst_type = instance_types.get_instance_type_by_name('m1.small')
     self.assertRaises(quota.QuotaError, compute.API().create,
                                         self.context,
                                         min_count=1,
                                         max_count=1,
                                         instance_type=inst_type,
                                         image_href=1)
     for instance_id in instance_ids:
         db.instance_destroy(self.context, instance_id)
Esempio n. 31
0
 def _create_instance(self, params={}):
     """Create a test instance"""
     inst = {}
     inst['image_ref'] = 1
     inst['reservation_id'] = 'r-fakeres'
     inst['launch_time'] = '10'
     inst['user_id'] = self.user_id
     inst['project_id'] = self.project_id
     type_id = instance_types.get_instance_type_by_name('m1.tiny')['id']
     inst['instance_type_id'] = type_id
     inst['ami_launch_index'] = 0
     inst.update(params)
     return db.instance_create(self.context, inst)['id']
 def test_too_many_metadata_items(self):
     metadata = {}
     for i in range(FLAGS.quota_metadata_items + 1):
         metadata['key%s' % i] = 'value%s' % i
     inst_type = instance_types.get_instance_type_by_name('m1.small')
     image_uuid = 'cedef40a-ed67-4d10-800e-17455edce175'
     self.assertRaises(exception.QuotaError, compute.API().create,
                                         self.context,
                                         min_count=1,
                                         max_count=1,
                                         instance_type=inst_type,
                                         image_href=image_uuid,
                                         metadata=metadata)
Esempio n. 33
0
 def test_too_many_metadata_items(self):
     metadata = {}
     for i in range(FLAGS.quota_metadata_items + 1):
         metadata['key%s' % i] = 'value%s' % i
     inst_type = instance_types.get_instance_type_by_name('m1.small')
     self.assertRaises(quota.QuotaError,
                       compute.API().create,
                       self.context,
                       min_count=1,
                       max_count=1,
                       instance_type=inst_type,
                       image_href='fake',
                       metadata=metadata)
Esempio n. 34
0
 def _create_instance(self, params={}):
     """Create a test instance"""
     inst = {}
     inst['image_ref'] = 1
     inst['reservation_id'] = 'r-fakeres'
     inst['launch_time'] = '10'
     inst['user_id'] = self.user_id
     inst['project_id'] = self.project_id
     type_id = instance_types.get_instance_type_by_name('m1.tiny')['id']
     inst['instance_type_id'] = type_id
     inst['ami_launch_index'] = 0
     inst.update(params)
     return db.instance_create(self.context, inst)['id']
Esempio n. 35
0
    def test_resize_down_fails(self):
        """Ensure resizing down raises and fails"""
        context = self.context.elevated()
        instance_id = self._create_instance()

        self.compute.run_instance(self.context, instance_id)
        inst_type = instance_types.get_instance_type_by_name('m1.xlarge')
        db.instance_update(self.context, instance_id,
                           {'instance_type_id': inst_type['id']})

        self.assertRaises(exception.ApiError, self.compute_api.resize, context,
                          instance_id, 1)

        self.compute.terminate_instance(context, instance_id)
 def test_too_many_cores(self):
     instance_ids = []
     instance_id = self._create_instance(cores=4)
     instance_ids.append(instance_id)
     inst_type = instance_types.get_instance_type_by_name('m1.small')
     image_uuid = 'cedef40a-ed67-4d10-800e-17455edce175'
     self.assertRaises(exception.QuotaError, compute.API().create,
                                         self.context,
                                         min_count=1,
                                         max_count=1,
                                         instance_type=inst_type,
                                         image_href=image_uuid)
     for instance_id in instance_ids:
         db.instance_destroy(self.context, instance_id)
Esempio n. 37
0
 def test_too_many_cores(self):
     instance_ids = []
     instance_id = self._create_instance(cores=4)
     instance_ids.append(instance_id)
     inst_type = instance_types.get_instance_type_by_name('m1.small')
     self.assertRaises(quota.QuotaError,
                       compute.API().create,
                       self.context,
                       min_count=1,
                       max_count=1,
                       instance_type=inst_type,
                       image_href=1)
     for instance_id in instance_ids:
         db.instance_destroy(self.context, instance_id)
Esempio n. 38
0
    def test_resize_down_fails(self):
        """Ensure resizing down raises and fails"""
        context = self.context.elevated()
        instance_id = self._create_instance()

        self.compute.run_instance(self.context, instance_id)
        inst_type = instance_types.get_instance_type_by_name('m1.xlarge')
        db.instance_update(self.context, instance_id,
                {'instance_type_id': inst_type['id']})

        self.assertRaises(exception.ApiError, self.compute_api.resize,
                context, instance_id, 1)

        self.compute.terminate_instance(context, instance_id)
Esempio n. 39
0
 def list(self, name=None):
     """Lists all active or specific instance types / flavors."""
     try:
         if name is None:
             inst_types = instance_types.get_all_types()
         else:
             inst_types = instance_types.get_instance_type_by_name(name)
     except db_exc.DBError as e:
         _db_error(e)
     if isinstance(inst_types.values()[0], dict):
         for k, v in inst_types.iteritems():
             self._print_instance_types(k, v)
     else:
         self._print_instance_types(name, inst_types)
Esempio n. 40
0
 def test_too_many_metadata_items(self):
     metadata = {}
     for i in range(FLAGS.quota_metadata_items + 1):
         metadata['key%s' % i] = 'value%s' % i
     inst_type = instance_types.get_instance_type_by_name('m1.small')
     image_uuid = 'cedef40a-ed67-4d10-800e-17455edce175'
     self.assertRaises(exception.QuotaError,
                       compute.API().create,
                       self.context,
                       min_count=1,
                       max_count=1,
                       instance_type=inst_type,
                       image_href=image_uuid,
                       metadata=metadata)
Esempio n. 41
0
 def launch_vpn_instance(self, context):
     LOG.debug(_("Launching VPN for %s") % (context.project_id))
     key_name = self.setup_key_pair(context)
     group_name = self.setup_security_group(context)
     instance_type = instance_types.get_instance_type_by_name(
             FLAGS.vpn_instance_type)
     instance_name = '%s%s' % (context.project_id, FLAGS.vpn_key_suffix)
     user_data = self.get_encoded_zip(context.project_id)
     return self.compute_api.create(context,
                                    instance_type,
                                    FLAGS.vpn_image_id,
                                    display_name=instance_name,
                                    user_data=user_data,
                                    key_name=key_name,
                                    security_group=[group_name])
Esempio n. 42
0
 def _wrapped_create(self, params=None):
     inst = {}
     inst["image_ref"] = 1
     inst["user_id"] = self.user_id
     inst["project_id"] = self.project_id
     type_id = instance_types.get_instance_type_by_name("m1.tiny")["id"]
     inst["instance_type_id"] = type_id
     inst["root_gb"] = 0
     inst["ephemeral_gb"] = 0
     inst["access_ip_v4"] = "1.2.3.4"
     inst["access_ip_v6"] = "feed:5eed"
     inst["display_name"] = "test_instance"
     if params:
         inst.update(params)
     return db.instance_create(self.context, inst)
Esempio n. 43
0
 def test_too_many_metadata_items(self):
     metadata = {}
     for i in range(FLAGS.quota_metadata_items + 1):
         metadata["key%s" % i] = "value%s" % i
     inst_type = instance_types.get_instance_type_by_name("m1.small")
     self.assertRaises(
         quota.QuotaError,
         compute.API().create,
         self.context,
         min_count=1,
         max_count=1,
         instance_type=inst_type,
         image_id="fake",
         metadata=metadata,
     )
Esempio n. 44
0
 def _create_instance(self, params={}):
     """Create a test instance"""
     inst = {}
     inst["image_ref"] = 1
     inst["reservation_id"] = "r-fakeres"
     inst["launch_time"] = "10"
     inst["user_id"] = self.user_id
     inst["project_id"] = self.project_id
     type_id = instance_types.get_instance_type_by_name("m1.tiny")["id"]
     inst["instance_type_id"] = type_id
     inst["ami_launch_index"] = 0
     inst["root_gb"] = 0
     inst["ephemeral_gb"] = 0
     inst.update(params)
     return db.instance_create(self.context, inst)["id"]
Esempio n. 45
0
 def test_too_many_cores(self):
     instance_ids = []
     instance_id = self._create_instance(cores=4)
     instance_ids.append(instance_id)
     inst_type = instance_types.get_instance_type_by_name('m1.small')
     image_uuid = 'cedef40a-ed67-4d10-800e-17455edce175'
     self.assertRaises(exception.QuotaError,
                       compute.API().create,
                       self.context,
                       min_count=1,
                       max_count=1,
                       instance_type=inst_type,
                       image_href=image_uuid)
     for instance_id in instance_ids:
         db.instance_destroy(self.context, instance_id)
Esempio n. 46
0
 def _wrapped_create(self, params=None):
     inst = {}
     inst['image_ref'] = 1
     inst['user_id'] = self.user_id
     inst['project_id'] = self.project_id
     type_id = instance_types.get_instance_type_by_name('m1.tiny')['id']
     inst['instance_type_id'] = type_id
     inst['root_gb'] = 0
     inst['ephemeral_gb'] = 0
     inst['access_ip_v4'] = '1.2.3.4'
     inst['access_ip_v6'] = 'feed:5eed'
     inst['display_name'] = 'test_instance'
     if params:
         inst.update(params)
     return db.instance_create(self.context, inst)
Esempio n. 47
0
 def _wrapped_create(self, params=None):
     inst = {}
     inst['image_ref'] = 1
     inst['user_id'] = self.user_id
     inst['project_id'] = self.project_id
     type_id = instance_types.get_instance_type_by_name('m1.tiny')['id']
     inst['instance_type_id'] = type_id
     inst['root_gb'] = 0
     inst['ephemeral_gb'] = 0
     inst['access_ip_v4'] = '1.2.3.4'
     inst['access_ip_v6'] = 'feed:5eed'
     inst['display_name'] = 'test_instance'
     if params:
         inst.update(params)
     return db.instance_create(self.context, inst)
Esempio n. 48
0
 def launch_vpn_instance(self, context):
     LOG.debug(_("Launching VPN for %s") % (context.project_id))
     key_name = self.setup_key_pair(context)
     group_name = self.setup_security_group(context)
     instance_type = instance_types.get_instance_type_by_name(
         CONF.vpn_instance_type)
     instance_name = '%s%s' % (context.project_id, CONF.vpn_key_suffix)
     user_data = self.get_encoded_zip(context.project_id)
     return self.compute_api.create(context,
                                    instance_type,
                                    CONF.vpn_image_id,
                                    display_name=instance_name,
                                    user_data=user_data,
                                    key_name=key_name,
                                    security_group=[group_name])
Esempio n. 49
0
    def unset_key(self, name, key):
        """Delete the specified extra spec for instance type."""
        try:
            try:
                inst_type = instance_types.get_instance_type_by_name(name)
            except exception.InstanceTypeNotFoundByName, e:
                print e
                return(2)

            ctxt = context.get_admin_context()
            db.instance_type_extra_specs_delete(
                        ctxt,
                        inst_type["flavorid"],
                        key)

            print _("Key %(key)s on instance type %(name)s unset") % locals()
Esempio n. 50
0
def create_instance(context, instance={}):
        """Create a test instance"""

        instance.setdefault('user_id', create_user(context))
        instance.setdefault('project_id', create_project(context, {'project_manager':instance['user_id']}))
        instance.setdefault('instance_type_id', instance_types.get_instance_type_by_name('m1.tiny')['id'])
        instance.setdefault('image_id', 1)
        instance.setdefault('image_ref', 1)
        instance.setdefault('reservation_id', 'r-fakeres')
        instance.setdefault('launch_time', '10')
        instance.setdefault('mac_address', "ca:ca:ca:01")
        instance.setdefault('ami_launch_index', 0)
        instance.setdefault('vm_state', vm_states.ACTIVE)

        context.elevated()
        return db.instance_create(context, instance)['id']
Esempio n. 51
0
    def set_key(self, name, key, value=None):
        """Add key/value pair to specified instance type's extra_specs."""
        try:
            try:
                inst_type = instance_types.get_instance_type_by_name(name)
            except exception.InstanceTypeNotFoundByName, e:
                print e
                return(2)

            ctxt = context.get_admin_context()
            ext_spec = {key: value}
            db.instance_type_extra_specs_update_or_create(
                            ctxt,
                            inst_type["flavorid"],
                            ext_spec)
            print _("Key %(key)s set to %(value)s on instance"
                    " type %(name)s") % locals()
Esempio n. 52
0
    def _create_fake_instance(self, params=None, type_name='m1.tiny'):
        """Create a test instance"""
        if not params:
            params = {}

        inst = {}
        inst['vm_state'] = vm_states.ACTIVE
        inst['image_ref'] = 1
        inst['reservation_id'] = 'r-fakeres'
        inst['launch_time'] = '10'
        inst['user_id'] = 'fake'
        inst['project_id'] = 'fake'
        type_id = instance_types.get_instance_type_by_name(type_name)['id']
        inst['instance_type_id'] = type_id
        inst['ami_launch_index'] = 0
        inst.update(params)
        return db.instance_create(self.context, inst)
Esempio n. 53
0
 def _create_instance(self, params={}):
     """Create a test instance."""
     instance_type = instance_types.get_instance_type_by_name('m1.tiny')
     sys_meta = instance_types.save_instance_type_info({}, instance_type)
     inst = {}
     inst['image_ref'] = 1
     inst['reservation_id'] = 'r-fakeres'
     inst['launch_time'] = '10'
     inst['user_id'] = self.user_id
     inst['project_id'] = self.project_id
     inst['instance_type_id'] = instance_type['id']
     inst['system_metadata'] = sys_meta
     inst['ami_launch_index'] = 0
     inst['root_gb'] = 0
     inst['ephemeral_gb'] = 0
     inst.update(params)
     return db.instance_create(self.context, inst)['id']
Esempio n. 54
0
 def _wrapped_create(self, params=None):
     instance_type = instance_types.get_instance_type_by_name('m1.tiny')
     sys_meta = instance_types.save_instance_type_info({}, instance_type)
     inst = {}
     inst['image_ref'] = 1
     inst['user_id'] = self.user_id
     inst['project_id'] = self.project_id
     inst['instance_type_id'] = instance_type['id']
     inst['root_gb'] = 0
     inst['ephemeral_gb'] = 0
     inst['access_ip_v4'] = '1.2.3.4'
     inst['access_ip_v6'] = 'feed:5eed'
     inst['display_name'] = 'test_instance'
     inst['hostname'] = 'test_instance_hostname'
     inst['system_metadata'] = sys_meta
     if params:
         inst.update(params)
     return db.instance_create(self.context, inst)
Esempio n. 55
0
 def test_run_instance_usage_notification(self):
     """Ensure run instance generates apropriate usage notification"""
     instance_id = self._create_instance()
     self.compute.run_instance(self.context, instance_id)
     self.assertEquals(len(test_notifier.NOTIFICATIONS), 1)
     msg = test_notifier.NOTIFICATIONS[0]
     self.assertEquals(msg['priority'], 'INFO')
     self.assertEquals(msg['event_type'], 'compute.instance.create')
     payload = msg['payload']
     self.assertEquals(payload['tenant_id'], self.project_id)
     self.assertEquals(payload['user_id'], self.user_id)
     self.assertEquals(payload['instance_id'], instance_id)
     self.assertEquals(payload['instance_type'], 'm1.tiny')
     type_id = instance_types.get_instance_type_by_name('m1.tiny')['id']
     self.assertEquals(str(payload['instance_type_id']), str(type_id))
     self.assertTrue('display_name' in payload)
     self.assertTrue('created_at' in payload)
     self.assertTrue('launched_at' in payload)
     self.assertEquals(payload['image_ref'], '1')
     self.compute.terminate_instance(self.context, instance_id)
Esempio n. 56
0
def create_instance(context, instance=None, driver=None):
    """Create a test instance"""

    if instance == None:
        instance = {}

    instance.setdefault('user_id', context.user_id)
    instance.setdefault('project_id', context.project_id)
    instance.setdefault(
        'instance_type_id',
        instance_types.get_instance_type_by_name('m1.tiny')['id'])
    instance.setdefault('image_id', 1)
    instance.setdefault('image_ref', 1)
    instance.setdefault('reservation_id', 'r-fakeres')
    instance.setdefault('launch_time', '10')
    instance.setdefault('mac_address', "ca:ca:ca:01")
    instance.setdefault('ami_launch_index', 0)
    instance.setdefault('vm_state', vm_states.ACTIVE)
    instance.setdefault('root_gb', 10)
    instance.setdefault('ephemeral_gb', 10)
    instance.setdefault('memory_mb', 512)
    instance.setdefault('vcpus', 1)

    # We should record in the quotas information about this instance.
    reservations = quota.QUOTAS.reserve(context,
                                        instances=1,
                                        ram=instance['memory_mb'],
                                        cores=instance['vcpus'])

    context.elevated()
    instance_ref = db.instance_create(context, instance)

    if driver:
        # Add this instance to the driver
        driver.instances[instance_ref.name] = FakeInstance(
            instance_ref.name,
            instance_ref.get('power_state', power_state.RUNNING))

    quota.QUOTAS.commit(context, reservations)

    return instance_ref['uuid']
Esempio n. 57
0
    def _create_fake_instance(self, params=None, type_name='m1.tiny'):
        if not params:
            params = {}

        inst = {}
        inst['vm_state'] = vm_states.ACTIVE
        inst['image_ref'] = FAKE_IMAGE_REF
        inst['reservation_id'] = 'r-fakeres'
        inst['launch_time'] = '10'
        inst['user_id'] = self.user_id
        inst['project_id'] = self.project_id
        inst['host'] = 'fake_host'
        type_id = instance_types.get_instance_type_by_name(type_name)['id']
        inst['instance_type_id'] = type_id
        inst['ami_launch_index'] = 0
        inst['memory_mb'] = 0
        inst['vcpus'] = 0
        inst['root_gb'] = 0
        inst['ephemeral_gb'] = 0
        inst['architecture'] = 'x86_64'
        inst['os_type'] = 'Linux'
        inst.update(params)
        return db.instance_create(self.context, inst)
Esempio n. 58
0
 def _get_default_vsa_instance_type(self):
     return instance_types.get_instance_type_by_name(
         FLAGS.default_vsa_instance_type)