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"])
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)
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 )
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'])
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'])
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)}
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)
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)
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 )
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'])
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)
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)
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'])
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)
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)
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)
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)
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)}
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)
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)}
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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_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)
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)
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 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)
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)
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])
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)
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, )
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"]
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)
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)
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)
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])
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()
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']
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()
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)
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']
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)
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)
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']
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)
def _get_default_vsa_instance_type(self): return instance_types.get_instance_type_by_name( FLAGS.default_vsa_instance_type)