예제 #1
0
    def test_check_env_with_null_environment_id(self, mock_db_session):
        """Test check env with null environment id throws exception."""
        mock_request = mock.MagicMock(context=test_utils.dummy_context())
        mock_db_session.get_session().query().get.return_value = None

        test_env_id = 'test_env_id'
        expected_error_message = 'Environment with id {env_id} not found'\
                                 .format(env_id=test_env_id)

        with self.assertRaisesRegexp(exc.HTTPNotFound, expected_error_message):
            utils.check_env(mock_request, test_env_id)
예제 #2
0
    def test_check_env_with_mismatching_tenant_id(self, mock_db_session):
        """Test check env without matching tenant ids throws exception."""
        mock_request = mock.MagicMock(context=test_utils.dummy_context())
        mock_env = mock.MagicMock(environment_id='test_env_id',
                                  tenant_id='another_test_tenant_id')
        mock_db_session.get_session().query().get.return_value = mock_env

        expected_error_message = 'User is not authorized to access these '\
                                 'tenant resources'

        with self.assertRaisesRegexp(exc.HTTPForbidden,
                                     expected_error_message):
            utils.check_env(mock_request, mock_env.environment_id)
예제 #3
0
파일: sessions.py 프로젝트: bh016088/murano
    def _check_session(self, request, environment_id, session, session_id):
        if session is None:
            msg = _('Session <SessionId {0}> is not found').format(session_id)
            LOG.error(msg)
            raise exc.HTTPNotFound(explanation=msg)

        if session.environment_id != environment_id:
            msg = _('Session <SessionId {0}> is not tied with Environment '
                    '<EnvId {1}>').format(session_id, environment_id)
            LOG.error(msg)
            raise exc.HTTPNotFound(explanation=msg)

        check_env(request, environment_id)
예제 #4
0
 def delete(self, request, environment_id):
     target = {"environment_id": environment_id}
     policy.check('delete_environment', request.context, target)
     if request.GET.get('abandon', '').lower() == 'true':
         check_env(request, environment_id)
         LOG.debug('Environments:Abandon  <Id: {0}>'.format(environment_id))
         envs.EnvironmentServices.remove(environment_id)
     else:
         LOG.debug('Environments:Delete <Id: {0}>'.format(environment_id))
         sessions_controller = sessions.Controller()
         session = sessions_controller.configure(request, environment_id)
         session_id = session['id']
         envs.EnvironmentServices.delete(environment_id, session_id)
         sessions_controller.deploy(request, environment_id, session_id)
예제 #5
0
 def delete(self, request, environment_id):
     target = {"environment_id": environment_id}
     policy.check("delete_environment", request.context, target)
     if request.GET.get("abandon", "").lower() == "true":
         check_env(request, environment_id)
         LOG.debug("Environments:Abandon  <Id: {0}>".format(environment_id))
         envs.EnvironmentServices.remove(environment_id)
     else:
         LOG.debug("Environments:Delete <Id: {0}>".format(environment_id))
         sessions_controller = sessions.Controller()
         session = sessions_controller.configure(request, environment_id)
         session_id = session["id"]
         envs.EnvironmentServices.delete(environment_id, session_id)
         sessions_controller.deploy(request, environment_id, session_id)
예제 #6
0
 def delete(self, request, environment_id):
     target = {"environment_id": environment_id}
     policy.check('delete_environment', request.context, target)
     if request.GET.get('abandon', '').lower() == 'true':
         check_env(request, environment_id)
         LOG.debug('Environments:Abandon  <Id: {0}>'.format(environment_id))
         envs.EnvironmentServices.remove(environment_id)
     else:
         LOG.debug('Environments:Delete <Id: {0}>'.format(environment_id))
         sessions_controller = sessions.Controller()
         session = sessions_controller.configure(request, environment_id)
         session_id = session['id']
         envs.EnvironmentServices.delete(environment_id, session_id)
         sessions_controller.deploy(request, environment_id, session_id)
예제 #7
0
    def test_check_env(self, mock_db_session):
        """Test check env."""
        mock_request = mock.MagicMock(context=test_utils.dummy_context())
        mock_env = mock.MagicMock(environment_id='test_env_id',
                                  tenant_id=mock_request.context.tenant)
        mock_db_session.get_session().query().get.return_value = mock_env

        env = utils.check_env(mock_request, mock_env.environment_id)
        self.assertEqual(mock_env, env)
예제 #8
0
파일: sessions.py 프로젝트: bh016088/murano
    def configure(self, request, environment_id):
        LOG.debug('Session:Configure <EnvId: {0}>'.format(environment_id))

        check_env(request, environment_id)

        # no new session can be opened if environment has deploying status
        env_status = envs.EnvironmentServices.get_status(environment_id)
        if env_status in (states.EnvironmentStatus.DEPLOYING,
                          states.EnvironmentStatus.DELETING):
            msg = _('Could not open session for environment <EnvId: {0}>,'
                    'environment has deploying status.').format(environment_id)
            LOG.error(msg)
            raise exc.HTTPForbidden(explanation=msg)

        user_id = request.context.user
        session = sessions.SessionServices.create(environment_id, user_id)

        return session.to_dict()
예제 #9
0
    def configure(self, request, environment_id):
        LOG.debug('Session:Configure <EnvId: {0}>'.format(environment_id))

        check_env(request, environment_id)

        # no new session can be opened if environment has deploying status
        env_status = envs.EnvironmentServices.get_status(environment_id)
        if env_status in (states.EnvironmentStatus.DEPLOYING,
                          states.EnvironmentStatus.DELETING):
            msg = _('Could not open session for environment <EnvId: {0}>,'
                    'environment has deploying status.').format(environment_id)
            LOG.error(msg)
            raise exc.HTTPForbidden(explanation=msg)

        user_id = request.context.user
        session = sessions.SessionServices.create(environment_id, user_id)

        return session.to_dict()
예제 #10
0
    def index(self, request, environment_id=None):
        all_environments = environment_id is None
        LOG.debug('Deployments:List <all_environments: {0}>'.format(
            all_environments))

        if all_environments:
            policy.check("list_deployments_all_environments", request.context)
        else:
            check_env(request, environment_id)
            target = {"environment_id": environment_id}
            policy.check("list_deployments", request.context, target)

        unit = db_session.get_session()

        if all_environments:
            query = unit.query(models.Environment) \
                .options(load_only('tenant_id')) \
                .filter_by(tenant_id=request.context.tenant) \
                .join(models.Task) \
                .order_by(desc(models.Task.created))
            result = query.all()
            # The join statement above fetches the deployments into
            # Environment.tasks. Iterate over that to get the deployments.
            deployments = []
            for row in result:
                for deployment in row.tasks:
                    deployment = set_dep_state(deployment, unit).to_dict()
                    deployments.append(deployment)
        else:
            query = unit.query(models.Task) \
                .filter_by(environment_id=environment_id) \
                .order_by(desc(models.Task.created))
            result = query.all()
            deployments = [
                set_dep_state(deployment, unit).to_dict()
                for deployment in result
            ]
        return {'deployments': deployments}
예제 #11
0
    def delete(self, request, environment_id):
        target = {"environment_id": environment_id}
        policy.check('delete_environment', request.context, target)
        environment = check_env(request, environment_id)

        if request.GET.get('abandon', '').lower() == 'true':
            LOG.debug(
                'Environments:Abandon  <Id: {id}>'.format(id=environment_id))
            envs.EnvironmentServices.remove(environment_id)
        else:
            LOG.debug(
                'Environments:Delete <Id: {id}>'.format(id=environment_id))
            sessions_controller = sessions.Controller()
            session = sessions_controller.configure(request, environment_id)
            session_id = session['id']
            envs.EnvironmentServices.delete(environment_id, session_id)
            sessions_controller.deploy(request, environment_id, session_id)

        env = environment.to_dict()
        env['deleted'] = datetime.datetime.utcnow()
        self._notifier.report('environment.delete.end', env)