예제 #1
0
    def _application(self, environment, start_response):
        """WSGI application for conductor JSON RPC."""
        request = webob.Request(environment)
        if request.method != 'POST':
            body = {
                'error': {
                    'code': 405,
                    'message': _('Only POST method can be used')
                }
            }
            return webob.Response(status_code=405,
                                  json_body=body)(environment, start_response)

        if json_rpc.require_authentication():
            roles = (request.headers.get('X-Roles') or '').split(',')
            if 'admin' not in roles:
                LOG.debug(
                    'Roles %s do not contain "admin", rejecting '
                    'request', roles)
                body = {'error': {'code': 403, 'message': _('Forbidden')}}
                return webob.Response(status_code=403,
                                      json_body=body)(environment,
                                                      start_response)

        result = self._call(request)
        if result is not None:
            response = webob.Response(content_type='application/json',
                                      charset='UTF-8',
                                      json_body=result)
        else:
            response = webob.Response(status_code=204)
        return response(environment, start_response)
예제 #2
0
def _get_session():
    global _SESSION

    if _SESSION is None:
        if json_rpc.require_authentication():
            auth = keystone.get_auth('json_rpc')
        else:
            auth = None

        _SESSION = keystone.get_session('json_rpc', auth=auth)
        _SESSION.headers = {'Content-Type': 'application/json'}

    return _SESSION
예제 #3
0
 def __init__(self, manager, serializer):
     self.manager = manager
     self.serializer = serializer
     self._method_map = _build_method_map(manager)
     if json_rpc.require_authentication():
         conf = dict(CONF.keystone_authtoken)
         app = auth_token.AuthProtocol(self._application, conf)
     else:
         app = self._application
     self.server = wsgi.Server(CONF,
                               'ironic-json-rpc',
                               app,
                               host=CONF.json_rpc.host_ip,
                               port=CONF.json_rpc.port,
                               use_ssl=CONF.json_rpc.use_ssl)
예제 #4
0
def _get_session():
    global _SESSION

    if _SESSION is None:
        if json_rpc.require_authentication():
            auth = keystone.get_auth('json_rpc')
        else:
            auth = None

        _SESSION = keystone.get_session('json_rpc', auth=auth)
        _SESSION.headers = {
            'Content-Type': 'application/json'
        }

    return _SESSION
예제 #5
0
def _get_session():
    global _SESSION

    if _SESSION is None:
        if json_rpc.require_authentication():
            auth = keystone.get_auth('json_rpc')
        else:
            auth = None

        session = keystone.get_session('json_rpc', auth=auth)
        session.headers = {'Content-Type': 'application/json'}

        # Adds options like connect_retries
        _SESSION = keystone.get_adapter('json_rpc', session=session)

    return _SESSION