<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta http-equiv="Content-Style-Type" content="text/css">
<title></title>
<meta name="Generator" content="Cocoa HTML Writer">
<meta name="CocoaVersion" content="1038.35">
<style type="text/css">
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 15.0px 'Lucida Grande'}
p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px 'Lucida Grande'; color: #888888}
p.p3 {margin: 0.0px 0.0px 0.0px 0.0px; font: 15.0px 'Lucida Grande'; color: #aa2210}
span.s1 {text-decoration: underline ; color: #0040ee}
</style>


<p class="p1">Trying to get a Swift+Keystone dev environment setup and having some issues. I'm running Swift 1.4.2 and have it pointing at Keystone 0.9 (on the same VM) according to the instructions at <span class="s1"><a href="https://github.com/rackspace/keystone">https://github.com/rackspace/keystone</a></span>, however, Swift is reporting 500s from Keystone (Auth GET failed: <a href="http://127.0.0.1:8080/v1.0">http://127.0.0.1:8080/v1.0</a> 500 Internal Server Error) and the Keystone log says:</p>
<p class="p1"><br></p><p class="p1"></p><p class="p1">eventlet.wsgi.server: DEBUG    Traceback (most recent call last):</p><p class="p1">  File "/usr/lib/python2.6/dist-packages/eventlet/wsgi.py", line 336, in handle_one_response</p>
<p class="p1">    result = self.application(self.environ, start_response)</p><p class="p1">  File "/home/tres/nova/keystone/keystone/frontends/legacy_token_auth.py", line 74, in __call__</p><p class="p1">    new_request.body = json.dumps(params)</p>
<p class="p1">  File "/usr/lib/pymodules/python2.6/webob/request.py", line 1173, in __setattr__</p><p class="p1">    object.__setattr__(self, attr, value)</p><p class="p1">  File "/usr/lib/pymodules/python2.6/webob/request.py", line 498, in _body__set</p>
<p class="p1">    raise ValueError("%s requests cannot have body" % self.method)</p><p class="p1">ValueError: GET requests cannot have body</p><p class="p1"><br></p><p class="p1">(this was specifically when trying "swift -A <a href="http://127.0.0.1:8080/v1.0">http://127.0.0.1:8080/v1.0</a> -U joeuser -K secrete post container" </p>
<p class="p1"><br></p><p class="p1">Here's some relevant configs if it helps:</p><p class="p1"><br></p><p class="p1">-- keystone.conf --</p><p class="p1"><br></p><p class="p1"></p><p class="p1">[DEFAULT]</p><p class="p1">
# Show more verbose log output (sets INFO log level output)</p><p class="p1">verbose = True</p><p class="p1"><br></p><p class="p1"># Show debugging output in logs (sets DEBUG log level output)</p><p class="p1">debug = True</p>
<p class="p1"><br></p><p class="p1"># Which backend store should Keystone use by default.</p><p class="p1"># Default: 'sqlite'</p><p class="p1"># Available choices are 'sqlite' [future will include LDAP, PAM, etc]</p>
<p class="p1">default_store = sqlite</p><p class="p1"><br></p><p class="p1"># Log to this file. Make sure you do not set the same log</p><p class="p1"># file for both the API and registry servers!</p><p class="p1">#log_file = /var/log/keystone.log</p>
<p class="p1">log_file = keystone.log</p><p class="p1"><br></p><p class="p1"># SQLAlchemy connection string for the reference implementation</p><p class="p1"># registry server. Any valid SQLAlchemy connection string is fine.</p>
<p class="p1"># See: <a href="http://www.sqlalchemy.org/docs/05/reference/sqlalchemy/connections.html#sqlalchemy.create_engine">http://www.sqlalchemy.org/docs/05/reference/sqlalchemy/connections.html#sqlalchemy.create_engine</a></p>
<p class="p1">sql_connection = sqlite:///../keystone/keystone.db</p><p class="p1"><br></p><p class="p1"># Period in seconds after which SQLAlchemy should reestablish its connection</p><p class="p1"># to the database.</p><p class="p1">
sql_idle_timeout = 30</p><p class="p1"><br></p><p class="p1">#Dictionary Maps every service to a header.Missing services would get header X_(SERVICE_NAME) Key => Service Name, Value => Header Name</p><p class="p1">service-header-mappings = {'nova' : 'X-Server-Management-Url' , 'swift' : 'X-Storage-Url', 'cdn' : 'X-CDN-Management-Url'}</p>
<p class="p1"><br></p><p class="p1"># Address to bind the API server</p><p class="p1">#TODO Properties defined within app not available via pipeline.Till then server props stay outside.</p><p class="p1">server_bind_host = 0.0.0.0</p>
<p class="p1"><br></p><p class="p1"># Port the bind the API server to</p><p class="p1">server_bind_port = 8080</p><p class="p1">[app:admin]</p><p class="p1">paste.app_factory = keystone.server:admin_app_factory</p><p class="p1">
<br></p><p class="p1"># Address to bind the Admin API server</p><p class="p1">bind_host = 0.0.0.0</p><p class="p1"><br></p><p class="p1"># Port the bind the Admin API server to</p><p class="p1">bind_port = 8081</p><p class="p1">
<br></p><p class="p1">[app:server]</p><p class="p1">paste.app_factory = keystone.server:app_factory</p><p class="p1"><br></p><p class="p1">[pipeline:keystone-legacy-auth]</p><p class="p1">pipeline =</p><p class="p1">    legacy_auth</p>
<p class="p1">    server</p><p class="p1"><br></p><p class="p1">[filter:legacy_auth]</p><p class="p1">paste.filter_factory = keystone.frontends.legacy_token_auth:filter_factory</p><p class="p1"><br></p><p class="p1"><br></p>
<p class="p1">-- proxy-server.conf --</p><p class="p1"><br></p><p class="p1"></p><p class="p1">[DEFAULT]</p><p class="p1">bind_port = 8888</p><p class="p1">user = root</p><p class="p1">log_facility = LOG_LOCAL1</p><p class="p1">
<br></p><p class="p1">[pipeline:main]</p><p class="p1">pipeline = catch_errors healthcheck cache keystone proxy-server</p><p class="p1"><br></p><p class="p1">[app:proxy-server]</p><p class="p1">use = egg:swift#proxy</p><p class="p1">
allow_account_management = true</p><p class="p1"><br></p><p class="p1">[filter:keystone]</p><p class="p1">use = egg:keystone#tokenauth</p><p class="p1">auth_protocol = http</p><p class="p1">auth_host = 127.0.0.1</p><p class="p1">
auth_port = 8081</p><p class="p1">admin_token = 999888777666</p><p class="p1">delay_auth_decision = 0</p><p class="p1">service_protocol = http</p><p class="p1">service_host = 127.0.0.1</p><p class="p1">service_port = 8100</p>
<p class="p1">service_pass = dTpw</p><p class="p1"><br></p><p class="p1">[filter:healthcheck]</p><p class="p1">use = egg:swift#healthcheck</p><p class="p1"><br></p><p class="p1">[filter:cache]</p><p class="p1">use = egg:swift#memcache</p>
<p class="p1"><br></p><p class="p1">[filter:catch_errors]</p><p class="p1">use = egg:swift#catch_errors</p><p></p><p></p><p></p>