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'))
Example #2
0
 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'))
Example #3
0
    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)
Example #4
0
    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}
Example #5
0
    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}
Example #6
0
    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}
Example #7
0
    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}
Example #8
0
    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)
Example #9
0
    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)
Example #10
0
    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
Example #11
0
    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}
Example #12
0
    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}
Example #13
0
File: cloud.py Project: yosh/nova
    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}
Example #14
0
    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}
Example #15
0
    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))
Example #16
0
    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)
Example #17
0
 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)
Example #18
0
 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)
Example #19
0
 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']
Example #20
0
 def get_key_pairs(context):
     return db.key_pair_get_all_by_user(context.elevated(), context.user_id)
Example #21
0
 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)
Example #22
0
 def get_key_pairs(context):
     return db.key_pair_get_all_by_user(context.elevated(), context.user_id)
Example #23
0
 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']
Example #24
0
 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)