def create(self, req): """ Creates a new server for a given user """ env = self._deserialize(req.body, req) if not env: return faults.Fault(exc.HTTPUnprocessableEntity()) key_pairs = auth_manager.AuthManager.get_key_pairs( req.environ['nova.context']) if not key_pairs: raise exception.NotFound(_("No keypairs defined")) key_pair = key_pairs[0] image_id = common.get_image_id_from_image_hash(self._image_service, req.environ['nova.context'], env['server']['imageId']) kernel_id, ramdisk_id = self._get_kernel_ramdisk_from_image( req, image_id) instances = self.compute_api.create( req.environ['nova.context'], instance_types.get_by_flavor_id(env['server']['flavorId']), image_id, kernel_id=kernel_id, ramdisk_id=ramdisk_id, display_name=env['server']['name'], display_description=env['server']['name'], key_name=key_pair['name'], key_data=key_pair['public_key'], onset_files=env.get('onset_files', [])) return _translate_keys(instances[0])
def create(self, req): """ Creates a new server for a given user """ env = self._deserialize_create(req) if not env: return faults.Fault(exc.HTTPUnprocessableEntity()) context = req.environ['nova.context'] key_name = None key_data = None key_pairs = auth_manager.AuthManager.get_key_pairs(context) if key_pairs: key_pair = key_pairs[0] key_name = key_pair['name'] key_data = key_pair['public_key'] image_id = common.get_image_id_from_image_hash( self._image_service, context, env['server']['imageId']) kernel_id, ramdisk_id = self._get_kernel_ramdisk_from_image( req, image_id) # Metadata is a list, not a Dictionary, because we allow duplicate keys # (even though JSON can't encode this) # In future, we may not allow duplicate keys. # However, the CloudServers API is not definitive on this front, # and we want to be compatible. metadata = [] if env['server'].get('metadata'): for k, v in env['server']['metadata'].items(): metadata.append({'key': k, 'value': v}) personality = env['server'].get('personality') injected_files = [] if personality: injected_files = self._get_injected_files(personality) try: instances = self.compute_api.create( context, instance_types.get_by_flavor_id(env['server']['flavorId']), image_id, kernel_id=kernel_id, ramdisk_id=ramdisk_id, display_name=env['server']['name'], display_description=env['server']['name'], key_name=key_name, key_data=key_data, metadata=metadata, injected_files=injected_files) except QuotaError as error: self._handle_quota_errors(error) builder = servers_views.get_view_builder(req) server = builder.build(instances[0], is_detail=False) password = "******" % (server['server']['name'][:4], utils.generate_password(12)) server['server']['adminPass'] = password self.compute_api.set_admin_password(context, server['server']['id'], password) return server
def create(self, req): """ Creates a new server for a given user """ env = self._deserialize_create(req) if not env: return faults.Fault(exc.HTTPUnprocessableEntity()) context = req.environ['nova.context'] key_name = None key_data = None key_pairs = auth_manager.AuthManager.get_key_pairs(context) if key_pairs: key_pair = key_pairs[0] key_name = key_pair['name'] key_data = key_pair['public_key'] image_id = common.get_image_id_from_image_hash(self._image_service, context, env['server']['imageId']) kernel_id, ramdisk_id = self._get_kernel_ramdisk_from_image( req, image_id) # Metadata is a list, not a Dictionary, because we allow duplicate keys # (even though JSON can't encode this) # In future, we may not allow duplicate keys. # However, the CloudServers API is not definitive on this front, # and we want to be compatible. metadata = [] if env['server'].get('metadata'): for k, v in env['server']['metadata'].items(): metadata.append({'key': k, 'value': v}) personality = env['server'].get('personality') injected_files = [] if personality: injected_files = self._get_injected_files(personality) try: instances = self.compute_api.create( context, instance_types.get_by_flavor_id(env['server']['flavorId']), image_id, kernel_id=kernel_id, ramdisk_id=ramdisk_id, display_name=env['server']['name'], display_description=env['server']['name'], key_name=key_name, key_data=key_data, metadata=metadata, injected_files=injected_files) except QuotaError as error: self._handle_quota_errors(error) builder = servers_views.get_view_builder(req) server = builder.build(instances[0], is_detail=False) password = "******" % (server['server']['name'][:4], utils.generate_password(12)) server['server']['adminPass'] = password self.compute_api.set_admin_password(context, server['server']['id'], password) return server
def test_resize_same_source_fails(self): """Ensure instance fails to migrate when source and destination are the same host""" instance_id = self._create_instance() self.compute.run_instance(self.context, instance_id) self.assertRaises(exception.Error, self.compute.prep_resize, self.context, instance_id) self.compute.terminate_instance(self.context, instance_id) type = instance_types.get_by_flavor_id("1") self.assertEqual(type, 'm1.tiny')
def create(self, req): """ Creates a new server for a given user """ env = self._deserialize(req.body, req) if not env: return faults.Fault(exc.HTTPUnprocessableEntity()) context = req.environ['nova.context'] key_pairs = auth_manager.AuthManager.get_key_pairs(context) if not key_pairs: raise exception.NotFound(_("No keypairs defined")) key_pair = key_pairs[0] image_id = common.get_image_id_from_image_hash(self._image_service, context, env['server']['imageId']) kernel_id, ramdisk_id = self._get_kernel_ramdisk_from_image( req, image_id) # Metadata is a list, not a Dictionary, because we allow duplicate keys # (even though JSON can't encode this) # In future, we may not allow duplicate keys. # However, the CloudServers API is not definitive on this front, # and we want to be compatible. metadata = [] if env['server'].get('metadata'): for k, v in env['server']['metadata'].items(): metadata.append({'key': k, 'value': v}) instances = self.compute_api.create( context, instance_types.get_by_flavor_id(env['server']['flavorId']), image_id, kernel_id=kernel_id, ramdisk_id=ramdisk_id, display_name=env['server']['name'], display_description=env['server']['name'], key_name=key_pair['name'], key_data=key_pair['public_key'], metadata=metadata, onset_files=env.get('onset_files', [])) return _translate_keys(instances[0])
def test_get_by_flavor_id(self): type = instance_types.get_by_flavor_id(1) self.assertEqual(type, 'm1.tiny')