Beispiel #1
0
    def test_create_raise_exception_by_operator_rpcapi(self):
        name = "test_key"
        request_body = {
            "keypair": {
                "name": name,
            }
        }
        self.mox.StubOutWithMock(db, "keypair_update")
        db.keypair_update(
            IsA(context.RequestContext),
            GID,
            IsA(str),
            {"status": "ERROR"}
        )
        scheduler_rpcapi.SchedulerAPI.select_destinations(
            IsA(context.RequestContext),
            request_spec={},
            filter_properties={})\
            .AndReturn({"host": "fake_host"})
        operator_rpcapi.ResourceOperatorAPI.keypair_create(
            IsA(context.RequestContext),
            "fake_host", gid=GID, keypair_id=IsA(unicode), name=name)\
            .AndRaise(Exception())
        self.mox.ReplayAll()

        url = '/v1/groups/' + GID + '/keypairs'
        req = get_request(url, 'POST', request_body)
        res = req.get_response(self.app)
        self.assertEqual(res.status_code, 500)
Beispiel #2
0
    def test_keypair_create(self):
        self.stubs.Set(
            self.manager.keypair_client, "keypair_create", fake_keypair_create)
        self.mox.StubOutWithMock(db, "keypair_update")
        db.keypair_update(self.context, GID, KEYPAIR_ID, mox.IsA(dict))
        self.mox.ReplayAll()

        self.manager.keypair_create(
            self.context, GID, KEYPAIR_ID, "fake_keypair")
Beispiel #3
0
    def test_keypair_create_keypair_not_found(self):
        self.stubs.Set(
            self.manager.keypair_client, "keypair_create", fake_keypair_create)
        self.mox.StubOutWithMock(db, "keypair_update")
        db.keypair_update(self.context, GID, KEYPAIR_ID, mox.IsA(dict))\
            .AndRaise(exception.KeypairNotFound(keypair_id=KEYPAIR_ID))
        self.mox.ReplayAll()

        self.manager.keypair_create(
            self.context, GID, KEYPAIR_ID, "fake_keypair")
Beispiel #4
0
    def test_keypair_create_raise_keypair_create_failed(self):
        self.mox.StubOutWithMock(self.manager.keypair_client, "keypair_create")
        self.manager.keypair_client.keypair_create(mox.IsA(str))\
            .AndRaise(exception.KeypairCreateFailed())
        self.mox.StubOutWithMock(db, "keypair_update")
        db.keypair_update(self.context, GID, KEYPAIR_ID, {"status": "ERROR"})
        self.mox.ReplayAll()

        self.manager.keypair_create(
            self.context, GID, KEYPAIR_ID, "fake_keypair")
Beispiel #5
0
 def keypair_create(self, context, gid, keypair_id, name):
     try:
         values = self.keypair_client.keypair_create(name)
         values["status"] = "ACTIVE"
     except Exception as e:
         LOG.exception(e)
         values = {"status": "ERROR"}
     try:
         db.keypair_update(context, gid, keypair_id, values)
     except Exception as e:
         LOG.exception(e)
Beispiel #6
0
    def update(self, req, body, gid, keypair_id):
        def _validate(body, gid, keypair_id):
            if not self.is_valid_body(body, "keypair"):
                msg = _("Invalid request body")
                raise exception.InvalidInput(reason=msg)

            self._uuid_check(gid, keypair_id)
            values = body["keypair"]
            is_default = values.get("is_default")

            if is_default:
                try:
                    is_default = strutils.bool_from_string(is_default, strict=True)
                except ValueError:
                    msg = _("is_default must be a boolean")
                    raise exception.InvalidInput(reason=msg)
            else:
                msg = _("is_default is required")
                raise exception.InvalidInput(reason=msg)

            valid_values = {"is_default": is_default}
            return valid_values

        context = req.environ["rack.context"]

        try:
            values = _validate(body, gid, keypair_id)
            keypair = db.keypair_update(context, gid, keypair_id, values)
        except exception.InvalidInput as e:
            raise webob.exc.HTTPBadRequest(explanation=e.format_message())
        except exception.NotFound as e:
            raise webob.exc.HTTPNotFound(explanation=e.format_message())

        return self._view_builder.update(keypair)
Beispiel #7
0
    def update(self, req, body, gid, keypair_id):
        def _validate(body, gid, keypair_id):
            if not self.is_valid_body(body, 'keypair'):
                msg = _("Invalid request body")
                raise exception.InvalidInput(reason=msg)

            self._uuid_check(gid, keypair_id)
            values = body["keypair"]
            is_default = values.get("is_default")

            if is_default is not None:
                try:
                    is_default = strutils.bool_from_string(is_default,
                                                           strict=True)
                except ValueError:
                    msg = _("is_default must be a boolean")
                    raise exception.InvalidInput(reason=msg)
            else:
                msg = _("is_default is required")
                raise exception.InvalidInput(reason=msg)

            valid_values = {"is_default": is_default}
            return valid_values

        context = req.environ['rack.context']

        try:
            values = _validate(body, gid, keypair_id)
            keypair = db.keypair_update(context, gid, keypair_id, values)
        except exception.InvalidInput as e:
            raise webob.exc.HTTPBadRequest(explanation=e.format_message())
        except exception.NotFound as e:
            raise webob.exc.HTTPNotFound(explanation=e.format_message())

        return self._view_builder.update(keypair)
Beispiel #8
0
    def test_create_raise_exception_by_scheduler_rpcapi(self):
        self.mox.StubOutWithMock(db, "keypair_update")
        db.keypair_update(
            IsA(context.RequestContext), GID, IsA(str), {"status": "ERROR"})
        scheduler_rpcapi.SchedulerAPI.select_destinations(
            IsA(context.RequestContext),
            request_spec={},
            filter_properties={})\
            .AndRaise(Exception())
        self.mox.ReplayAll()

        request_body = {
            "keypair": {
                "name": "test_key",
            }
        }

        url = '/v1/groups/' + GID + '/keypairs'
        req = get_request(url, 'POST', request_body)
        res = req.get_response(self.app)
        self.assertEqual(res.status_code, 500)
Beispiel #9
0
 def test_keypair_update(self):
     gid = "12345678-1234-5678-9123-123456789012"
     self._create_group(gid)
     values_before = self._get_base_values(gid)
     keypair = db.keypair_create(self.user_ctxt, values_before)
     values = {
         "is_default": False,
         "status": "ACTIVE",
     }
     keypair_after = db.keypair_update(
         self.user_ctxt, gid, keypair["keypair_id"], values)
     self.assertEqual(keypair_after["is_default"], False)
     self.assertEqual(keypair_after["status"], "ACTIVE")
Beispiel #10
0
    def create(self, req, body, gid):
        def _validate(body, gid):
            if not self.is_valid_body(body, "keypair"):
                msg = _("Invalid request body")
                raise exception.InvalidInput(reason=msg)

            self._uuid_check(gid)
            values = body["keypair"]
            name = values.get("name")
            is_default = values.get("is_default")

            if name:
                if isinstance(name, six.string_types):
                    name = name.strip()
                utils.check_string_length(name, "name", min_length=1, max_length=255)

            if is_default:
                try:
                    is_default = strutils.bool_from_string(is_default, strict=True)
                except ValueError:
                    msg = _("is_default must be a boolean")
                    raise exception.InvalidInput(reason=msg)
            else:
                is_default = False

            valid_values = {}
            valid_values["gid"] = gid
            valid_values["display_name"] = name
            valid_values["is_default"] = is_default
            return valid_values

        try:
            values = _validate(body, gid)
        except exception.InvalidInput as e:
            raise webob.exc.HTTPBadRequest(explanation=e.format_message())
        except exception.GroupNotFound as e:
            raise webob.exc.HTTPNotFound(explanation=e.format_message())

        context = req.environ["rack.context"]
        values["keypair_id"] = unicode(uuid.uuid4())
        if not values["display_name"]:
            values["display_name"] = "keypair-" + values["keypair_id"]
        values["user_id"] = context.user_id
        values["project_id"] = context.project_id
        values["status"] = "BUILDING"

        try:
            db.group_get_by_gid(context, gid)
            keypair = db.keypair_create(context, values)
            host = self.scheduler_rpcapi.select_destinations(context, request_spec={}, filter_properties={})
            self.operator_rpcapi.keypair_create(
                context, host["host"], gid=gid, keypair_id=values["keypair_id"], name=values["display_name"]
            )
        except exception.GroupNotFound as e:
            raise webob.exc.HTTPNotFound(explanation=e.format_message())
        except Exception:
            keypair_id = values["keypair_id"]
            db.keypair_update(context, gid, keypair_id, {"status": "ERROR"})
            raise exception.KeypairCreateFailed()

        return self._view_builder.create(keypair)