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): """ Returns server details by server id """ try: instance = self.compute_api.get(req.environ['nova.context'], id) builder = servers_views.get_view_builder(req) return builder.build(instance, is_detail=True) except exception.NotFound: return faults.Fault(exc.HTTPNotFound())
def _items(self, req, is_detail): """Returns a list of servers for a given user. builder - the response model builder """ instance_list = self.compute_api.get_all(req.environ['nova.context']) limited_list = common.limited(instance_list, req) builder = servers_views.get_view_builder(req) servers = [builder.build(inst, is_detail)['server'] for inst in limited_list] return dict(servers=servers)
def _items(self, req, is_detail): """Returns a list of servers for a given user. builder - the response model builder """ instance_list = self.compute_api.get_all(req.environ['nova.context']) limited_list = common.limited(instance_list, req) builder = servers_views.get_view_builder(req) servers = [ builder.build(inst, is_detail)['server'] for inst in limited_list ] return dict(servers=servers)