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 show(self, req, id): """Return data about the given image id""" image_id = common.get_image_id_from_image_hash(self._service, req.environ['nova.context'], id) image = self._service.show(req.environ['nova.context'], image_id) _convert_image_id_to_hash(image) return dict(image=image)
def show(self, req, id): """Return data about the given image id""" image_id = common.get_image_id_from_image_hash( self._service, req.environ['nova.context'], id) image = self._service.show(req.environ['nova.context'], image_id) _convert_image_id_to_hash(image) self._format_image_dates(image) return dict(image=image)
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 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'] password = self._get_server_admin_password(env['server']) 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'] requested_image_id = self._image_id_from_req_data(env) try: image_id = common.get_image_id_from_image_hash(self._image_service, context, requested_image_id) except: msg = _("Can not find requested image") return faults.Fault(exc.HTTPBadRequest(msg)) kernel_id, ramdisk_id = self._get_kernel_ramdisk_from_image( req, image_id) personality = env['server'].get('personality') injected_files = [] if personality: injected_files = self._get_injected_files(personality) flavor_id = self._flavor_id_from_req_data(env) if not 'name' in env['server']: msg = _("Server name is not defined") return exc.HTTPBadRequest(msg) name = env['server']['name'] self._validate_server_name(name) name = name.strip() try: inst_type = \ instance_types.get_instance_type_by_flavor_id(flavor_id) (inst,) = self.compute_api.create( context, inst_type, image_id, kernel_id=kernel_id, ramdisk_id=ramdisk_id, display_name=name, display_description=name, key_name=key_name, key_data=key_data, metadata=env['server'].get('metadata', {}), injected_files=injected_files) except quota.QuotaError as error: self._handle_quota_error(error) inst['instance_type'] = inst_type inst['image_id'] = requested_image_id builder = self._get_view_builder(req) server = builder.build(inst, is_detail=True) 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'] password = self._get_server_admin_password(env['server']) 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'] requested_image_id = self._image_id_from_req_data(env) try: image_id = common.get_image_id_from_image_hash( self._image_service, context, requested_image_id) except: msg = _("Can not find requested image") return faults.Fault(exc.HTTPBadRequest(msg)) kernel_id, ramdisk_id = self._get_kernel_ramdisk_from_image( req, image_id) personality = env['server'].get('personality') injected_files = [] if personality: injected_files = self._get_injected_files(personality) flavor_id = self._flavor_id_from_req_data(env) if not 'name' in env['server']: msg = _("Server name is not defined") return exc.HTTPBadRequest(msg) name = env['server']['name'] self._validate_server_name(name) name = name.strip() try: inst_type = \ instance_types.get_instance_type_by_flavor_id(flavor_id) (inst, ) = self.compute_api.create(context, inst_type, image_id, kernel_id=kernel_id, ramdisk_id=ramdisk_id, display_name=name, display_description=name, key_name=key_name, key_data=key_data, metadata=env['server'].get( 'metadata', {}), injected_files=injected_files) except quota.QuotaError as error: self._handle_quota_error(error) inst['instance_type'] = inst_type inst['image_id'] = requested_image_id builder = self._get_view_builder(req) server = builder.build(inst, is_detail=True) server['server']['adminPass'] = password self.compute_api.set_admin_password(context, server['server']['id'], password) return server