def test_get_by_user(self): self.mox.StubOutWithMock(db, 'key_pair_get_all_by_user') self.mox.StubOutWithMock(db, 'key_pair_count_by_user') db.key_pair_get_all_by_user(self.context, 'fake-user').AndReturn( [fake_keypair]) db.key_pair_count_by_user(self.context, 'fake-user').AndReturn(1) self.mox.ReplayAll() keypairs = keypair.KeyPairList.get_by_user(self.context, 'fake-user') self.assertEqual(1, len(keypairs)) self.compare_obj(keypairs[0], fake_keypair) self.assertEqual(1, keypair.KeyPairList.get_count_by_user(self.context, 'fake-user'))
def test_get_by_user(self): self.mox.StubOutWithMock(db, 'key_pair_get_all_by_user') self.mox.StubOutWithMock(db, 'key_pair_count_by_user') db.key_pair_get_all_by_user(self.context, 'fake-user').AndReturn( [fake_keypair]) db.key_pair_count_by_user(self.context, 'fake-user').AndReturn(1) self.mox.ReplayAll() keypairs = keypair.KeyPairList.get_by_user(self.context, 'fake-user') self.assertEqual(1, len(keypairs)) self._compare(keypairs[0], fake_keypair) self.assertEqual(1, keypair.KeyPairList.get_count_by_user(self.context, 'fake-user'))
def get_by_user(cls, context, user_id, limit=None, marker=None): try: api_db_keypairs = cls._get_from_db(context, user_id, limit=limit, marker=marker) # NOTE(pkholkin): If we were asked for a marker and found it in # results from the API DB, we must continue our pagination with # just the limit (if any) to the main DB. marker = None except exception.MarkerNotFound: api_db_keypairs = [] if limit is not None: limit_more = limit - len(api_db_keypairs) else: limit_more = None if limit_more is None or limit_more > 0: main_db_keypairs = db.key_pair_get_all_by_user(context, user_id, limit=limit_more, marker=marker) else: main_db_keypairs = [] return base.obj_make_list(context, cls(context), objects.KeyPair, api_db_keypairs + main_db_keypairs)
def index(self, req): context = req.environ["nova.context"] key_pairs = db.key_pair_get_all_by_user(context, context.user_id) result = [] for key_pair in key_pairs: # filter out the vpn keys suffix = FLAGS.vpn_key_suffix if context.is_admin or not key_pair["name"].endswith(suffix): result.append( {"name": key_pair["name"], "key_name": key_pair["name"], "fingerprint": key_pair["fingerprint"]} ) return {"keypairs": result}
def index(self, req): """ List of keypairs for a user """ context = req.environ['nova.context'] key_pairs = db.key_pair_get_all_by_user(context, context.user_id) rval = [] for key_pair in key_pairs: rval.append({'keypair': { 'name': key_pair['name'], 'public_key': key_pair['public_key'], 'fingerprint': key_pair['fingerprint'], }}) return {'keypairs': rval}
def index(self, req): context = req.environ['nova.context'] key_pairs = db.key_pair_get_all_by_user(context, context.user_id) result = [] for key_pair in key_pairs: # filter out the vpn keys suffix = FLAGS.vpn_key_suffix if context.is_admin or \ not key_pair['name'].endswith(suffix): result.append({ 'name': key_pair['name'], 'key_name': key_pair['name'], 'fingerprint': key_pair['fingerprint'], }) return {'keypairs': result}
def create_instance(self, req, body, create_method): """Creates a new server for the given user. The approach used depends on the create_method. For example, the standard POST /server call uses compute.api.create(), while POST /zones/server uses compute.api.create_all_at_once(). The problem is, both approaches return different values (i.e. [instance dicts] vs. reservation_id). So the handling of the return type from this method is left to the caller. """ if not body: raise exc.HTTPUnprocessableEntity() if not 'server' in body: raise exc.HTTPUnprocessableEntity() server_dict = body['server'] context = req.environ['nova.context'] password = self.controller._get_server_admin_password(server_dict) key_name = None key_data = None # TODO(vish): Key pair access should move into a common library # instead of being accessed directly from the db. key_pairs = db.key_pair_get_all_by_user(context.elevated(), context.user_id) if key_pairs: key_pair = key_pairs[0] key_name = key_pair['name'] key_data = key_pair['public_key'] image_href = self.controller._image_ref_from_req_data(body) # If the image href was generated by nova api, strip image_href # down to an id and use the default glance connection params if str(image_href).startswith(req.application_url): image_href = image_href.split('/').pop() try: image_service, image_id = nova.image.get_image_service(image_href) kernel_id, ramdisk_id = self._get_kernel_ramdisk_from_image( req, image_id) images = set([str(x['id']) for x in image_service.index(context)]) assert str(image_id) in images except Exception, e: msg = _("Cannot find requested image %(image_href)s: %(e)s" % locals()) raise exc.HTTPBadRequest(explanation=msg)
def index(self, req, resp_obj): """ List all keypairs of this user, additional add created_at and private_key_url to response. """ context = req.environ['nova.context'] authorize(context) self._init_nos_api(context) keypairs = db.key_pair_get_all_by_user(context, context.user_id) rval = [] for keypair in keypairs: # NOTE(hzyangtk): when fingerprint is end with '.create', remove it is_create = keypair['fingerprint'].endswith('.create') if is_create: keypair['fingerprint'] = keypair['fingerprint'][:-7] keypair_element = { 'name': keypair['name'], 'public_key': keypair['public_key'], 'fingerprint': keypair['fingerprint'] } created_at_local_tz = self._tz_utc_to_local(keypair['created_at']) create_timestamp = self._datetime_to_timestamp(created_at_local_tz) if FLAGS.keypairs_connect_nos and is_create: if not self._expire_time_check(create_timestamp): expires = long(create_timestamp + self.expires_time) if context.user_name is not None: private_key_name = context.user_name + '_' \ + keypair['name'] \ + '.private' else: private_key_name = \ keypair['fingerprint'].replace(':', '') keypair['private_key_url'] = self.call_nos.get_object_url( self.bucket_name, private_key_name, expires, self.use_domain) keypair_element['private_key_url'] = keypair.get( 'private_key_url', 'expired') keypair_element['created_at'] = self._datetime_to_string( created_at_local_tz) rval.append({'keypair': keypair_element}) resp_obj.obj['keypairs'] = rval
def describe_key_pairs(self, context, key_name=None, **kwargs): key_pairs = db.key_pair_get_all_by_user(context, context.user_id) if not key_name is None: key_pairs = [x for x in key_pairs if x['name'] in key_name] result = [] for key_pair in key_pairs: # filter out the vpn keys suffix = FLAGS.vpn_key_suffix if context.is_admin or \ not key_pair['name'].endswith(suffix): result.append({ 'keyName': key_pair['name'], 'keyFingerprint': key_pair['fingerprint'], }) return {'keySet': result}
def index(self, req): """ List of keypairs for a user """ context = req.environ["nova.context"] key_pairs = db.key_pair_get_all_by_user(context, context.user_id) rval = [] for key_pair in key_pairs: rval.append( { "keypair": { "name": key_pair["name"], "public_key": key_pair["public_key"], "fingerprint": key_pair["fingerprint"], } } ) return {"keypairs": rval}
def create_instance(self, req, body, create_method): if not body: raise faults.Fault(exc.HTTPUnprocessableEntity()) context = req.environ['nova.context'] password = self.controller._get_server_admin_password(body['server']) key_name = body['server'].get('key_name') key_data = None if key_name: try: key_pair = db.key_pair_get(context, context.user_id, key_name) key_name = key_pair['name'] key_data = key_pair['public_key'] except: msg = _("Can not load the requested key %s" % key_name) return faults.Fault(exc.HTTPBadRequest(msg)) else: key_name = None key_data = None key_pairs = db.key_pair_get_all_by_user(context, context.user_id) if key_pairs: key_pair = key_pairs[0] key_name = key_pair['name'] key_data = key_pair['public_key'] image_href = self.controller._image_ref_from_req_data(body) try: image_service, image_id = nova.image.get_image_service(image_href) kernel_id, ramdisk_id = self._get_kernel_ramdisk_from_image(req, image_service, image_id) images = set([str(x['id']) for x in image_service.index(context)]) assert str(image_id) in images except Exception, e: msg = _("Cannot find requested image %(image_href)s: %(e)s" % locals()) raise faults.Fault(exc.HTTPBadRequest(explanation=msg))
def get_by_user(cls, context, user_id, limit=None, marker=None): try: api_db_keypairs = cls._get_from_db( context, user_id, limit=limit, marker=marker) # NOTE(pkholkin): If we were asked for a marker and found it in # results from the API DB, we must continue our pagination with # just the limit (if any) to the main DB. marker = None except exception.MarkerNotFound: api_db_keypairs = [] if limit is not None: limit_more = limit - len(api_db_keypairs) else: limit_more = None if limit_more is None or limit_more > 0: main_db_keypairs = db.key_pair_get_all_by_user( context, user_id, limit=limit_more, marker=marker) else: main_db_keypairs = [] return base.obj_make_list(context, cls(context), objects.KeyPair, api_db_keypairs + main_db_keypairs)
def get_by_user(cls, context, user_id): db_keypairs = db.key_pair_get_all_by_user(context, user_id) return base.obj_make_list(context, cls(context), objects.KeyPair, db_keypairs)
def get_by_user(cls, context, user_id): db_keypairs = db.key_pair_get_all_by_user(context, user_id) return base.obj_make_list(context, KeyPairList(), KeyPair, db_keypairs)
def _get_key_name(self, req, body): context = req.environ["nova.context"] keypairs = db.key_pair_get_all_by_user(context, context.user_id) if keypairs: return keypairs[0]['name']
def get_key_pairs(context): return db.key_pair_get_all_by_user(context.elevated(), context.user_id)
def get_by_user(cls, context, user_id): api_db_keypairs = cls._get_from_db(context, user_id) main_db_keypairs = db.key_pair_get_all_by_user(context, user_id) return base.obj_make_list(context, cls(context), objects.KeyPair, api_db_keypairs + main_db_keypairs)
def get_by_user(cls, context, user_id): db_keypairs = db.key_pair_get_all_by_user(context, user_id) return _make_list(context, KeyPairList(), KeyPair, db_keypairs)