<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<meta name="Generator" content="Microsoft Word 14 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Tahoma;
        panose-1:2 11 6 4 3 5 4 4 2 4;}
@font-face
        {font-family:Consolas;
        panose-1:2 11 6 9 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman","serif";
        color:black;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
pre
        {mso-style-priority:99;
        mso-style-link:"HTML Preformatted Char";
        margin:0in;
        margin-bottom:.0001pt;
        font-size:10.0pt;
        font-family:"Courier New";
        color:black;}
span.HTMLPreformattedChar
        {mso-style-name:"HTML Preformatted Char";
        mso-style-priority:99;
        mso-style-link:"HTML Preformatted";
        font-family:Consolas;
        color:black;}
span.apple-tab-span
        {mso-style-name:apple-tab-span;}
span.EmailStyle20
        {mso-style-type:personal;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
span.EmailStyle21
        {mso-style-type:personal-reply;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body bgcolor="white" lang="EN-US" link="blue" vlink="purple">
<div class="WordSection1">
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">I was able to pin down the image upload problem today:<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">The Store.add file input read loop using chunkreadable throws an error on the very last read. Apparently the mod_wsgi.Input behaves differently than its eventlet
 counterpart in that it throws an error if the requested data length is greater than what is avalible. When I replaced the chunkreadable for loop with a while loop that modified the size of the last data read request, it works. Does anyone know if this is a
 code bug or rather a WSGI configuration setting that I missed?<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">Regards,<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">Mark<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">-------
<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">I made the following chages to file /usr/lib/python2.7/dist-packages/glance/store/filesystem.py:<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal" style="margin-left:.5in;background:#F2F2F2">    def add(self, image_id, image_file, image_size):<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in;background:#F2F2F2">        """<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in;background:#F2F2F2">        Stores an image file with supplied identifier to the backend<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in;background:#F2F2F2">        storage system and returns a tuple containing information<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in;background:#F2F2F2">        about the stored image.<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in;background:#F2F2F2"><o:p> </o:p></p>
<p class="MsoNormal" style="margin-left:.5in;background:#F2F2F2">        :param image_id: The opaque image identifier<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in;background:#F2F2F2">        :param image_file: The image data to write, as a file-like object<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in;background:#F2F2F2">        :param image_size: The size of the image data to write, in bytes<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in;background:#F2F2F2"><o:p> </o:p></p>
<p class="MsoNormal" style="margin-left:.5in;background:#F2F2F2">        :retval tuple of URL in backing store, bytes written, and checksum<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in;background:#F2F2F2">        :raises `glance.common.exception.Duplicate` if the image already<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in;background:#F2F2F2">                existed<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in;background:#F2F2F2"><o:p> </o:p></p>
<p class="MsoNormal" style="margin-left:.5in;background:#F2F2F2">        :note By default, the backend writes the image data to a file<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in;background:#F2F2F2">              `/<DATADIR>/<ID>`, where <DATADIR> is the value of<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in;background:#F2F2F2">              the filesystem_store_datadir configuration option and <ID><o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in;background:#F2F2F2">              is the supplied image ID.<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in;background:#F2F2F2">        """<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in;background:#F2F2F2"><o:p> </o:p></p>
<p class="MsoNormal" style="margin-left:.5in;background:#F2F2F2">        filepath = os.path.join(self.datadir, str(image_id))<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in;background:#F2F2F2"><o:p> </o:p></p>
<p class="MsoNormal" style="margin-left:.5in;background:#F2F2F2">        if os.path.exists(filepath):<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in;background:#F2F2F2">            raise exception.Duplicate(_("Image file %s already exists!")<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in;background:#F2F2F2">                                      % filepath)<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in;background:#F2F2F2"><o:p> </o:p></p>
<p class="MsoNormal" style="margin-left:.5in;background:#F2F2F2">        checksum = hashlib.md5()<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in;background:#F2F2F2">        bytes_written = 0<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in;background:#F2F2F2">        bytes_to_read = ChunkedFile.CHUNKSIZE<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in;background:#F2F2F2">        try:<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in;background:#F2F2F2">            with open(filepath, 'wb') as f:<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in;background:#F2F2F2"><o:p> </o:p></p>
<p class="MsoNormal" style="margin-left:.5in;background:#F2F2F2">                <span style="background:yellow;mso-highlight:yellow">
while bytes_written < image_size:<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left:.5in;background:#F2F2F2"><span style="background:yellow;mso-highlight:yellow">                    if (image_size - bytes_written) < ChunkedFile.CHUNKSIZE:<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left:.5in;background:#F2F2F2"><span style="background:yellow;mso-highlight:yellow">                        bytes_to_read = image_size - bytes_written<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left:.5in;background:#F2F2F2"><span style="background:yellow;mso-highlight:yellow">                    buf = image_file.read(bytes_to_read)<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left:.5in;background:#F2F2F2"><span style="background:yellow;mso-highlight:yellow">                    bytes_written += len(buf)<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left:.5in;background:#F2F2F2"><span style="background:yellow;mso-highlight:yellow">                    checksum.update(buf)<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left:.5in;background:#F2F2F2"><span style="background:yellow;mso-highlight:yellow">                    f.write(buf)</span><o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in;background:#F2F2F2"><span style="background:yellow;mso-highlight:yellow"><o:p> </o:p></span></p>
<p class="MsoNormal" style="margin-left:.5in;background:#F2F2F2"><span style="background:yellow;mso-highlight:yellow">                """<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left:.5in;background:#F2F2F2"><span style="background:yellow;mso-highlight:yellow">                for buf in utils.chunkreadable(image_file,<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left:.5in;background:#F2F2F2"><span style="background:yellow;mso-highlight:yellow">                                               ChunkedFile.CHUNKSIZE):<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left:.5in;background:#F2F2F2"><span style="background:yellow;mso-highlight:yellow">                    bytes_written += len(buf)<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left:.5in;background:#F2F2F2"><span style="background:yellow;mso-highlight:yellow">                    checksum.update(buf)<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left:.5in;background:#F2F2F2"><span style="background:yellow;mso-highlight:yellow">                    f.write(buf)<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left:.5in;background:#F2F2F2"><span style="background:yellow;mso-highlight:yellow">                """</span><o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in;background:#F2F2F2">        except IOError as e:<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in;background:#F2F2F2">            if e.errno != errno.EACCES:<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in;background:#F2F2F2">                self._delete_partial(filepath, image_id)<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in;background:#F2F2F2">            exceptions = {errno.EFBIG: exception.StorageFull(),<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in;background:#F2F2F2">                          errno.ENOSPC: exception.StorageFull(),<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in;background:#F2F2F2">                          errno.EACCES: exception.StorageWriteDenied()}<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in;background:#F2F2F2">            raise exceptions.get(e.errno, e)<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in"><o:p> </o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p> </o:p></span></p>
<div style="border:none;border-left:solid blue 1.5pt;padding:0in 0in 0in 4.0pt">
<div>
<div style="border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif";color:windowtext">From:</span></b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif";color:windowtext"> Miller, Mark M (EB SW Cloud - R&D - Corvallis)
<br>
<b>Sent:</b> Tuesday, December 17, 2013 12:32 AM<br>
<b>To:</b> OpenStack Development Mailing List (not for usage questions)<br>
<b>Subject:</b> [openstack-dev] Glance mod_wsgi.input Question<o:p></o:p></span></p>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">Hello,<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">I am trying to get the Grizzly Glance service working with Apache2 through the WSGI interface. I am having problems with the “_upload” method of file “glance/api/v1/images.py”
 It appears that the req.body_file pointer is invalid as I get the following error: (9, 'Bad file descriptor').<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">I have tried adding inline test code attempting to read the image_data object but have been unsuccessful. The req.content_length = None. Has anyone come across
 this issue? Below are a few variable values as well as the req.environ:<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal">scheme = file<o:p></o:p></p>
<p class="MsoNormal">image size = 8<o:p></o:p></p>
<p class="MsoNormal">image data = <mod_wsgi.Input object at 0x7f5fb08931f0><o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">-------------<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">key=HTTP_X_TENANT_NAME, value=u'AdminProject'<o:p></o:p></p>
<p class="MsoNormal">key=routes.route, value=<routes.route.Route object at 0x7f5fb181fc90><o:p></o:p></p>
<p class="MsoNormal">key=webob.is_body_readable, value=True<o:p></o:p></p>
<p class="MsoNormal">key=mod_wsgi.listener_port, value='9292'<o:p></o:p></p>
<p class="MsoNormal">key=HTTP_X_PROJECT_NAME, value=u'AdminProject'<o:p></o:p></p>
<p class="MsoNormal">key=SERVER_SOFTWARE, value='Apache'<o:p></o:p></p>
<p class="MsoNormal">key=content-length, value=8<o:p></o:p></p>
<p class="MsoNormal">key=SCRIPT_NAME, value='/v1/v1'<o:p></o:p></p>
<p class="MsoNormal">key=HTTP_TRANSFER_ENCODING, value='chunked'<o:p></o:p></p>
<p class="MsoNormal">key=mod_wsgi.handler_script, value=''<o:p></o:p></p>
<p class="MsoNormal">key=SERVER_SIGNATURE, value='<address>Apache Server at 10.1.184.1 Port 9292</address>\n'<o:p></o:p></p>
<p class="MsoNormal">key=REQUEST_METHOD, value='POST'<o:p></o:p></p>
<p class="MsoNormal">key=PATH_INFO, value='/images'<o:p></o:p></p>
<p class="MsoNormal">key=SERVER_PROTOCOL, value='HTTP/1.1'<o:p></o:p></p>
<p class="MsoNormal">key=QUERY_STRING, value=''<o:p></o:p></p>
<p class="MsoNormal">key=Content_Length, value=8<o:p></o:p></p>
<p class="MsoNormal">key=HTTP_X_USER_ID, value=u'0dd0361fe85a43deb456dd47ed55c2e2'<o:p></o:p></p>
<p class="MsoNormal">key=HTTP_X_IMAGE_META_MIN_RAM, value='0'<o:p></o:p></p>
<p class="MsoNormal">key=HTTP_X_AUTH_TOKEN, value='de169f1045f8d306a750d28e8e33172e'<o:p></o:p></p>
<p class="MsoNormal">key=HTTP_USER_AGENT, value='python-glanceclient'<o:p></o:p></p>
<p class="MsoNormal">key=HTTP_X_DOMAIN_NAME, value=None<o:p></o:p></p>
<p class="MsoNormal">key=SERVER_NAME, value='10.1.184.1'<o:p></o:p></p>
<p class="MsoNormal">key=REMOTE_ADDR, value='10.1.184.1'<o:p></o:p></p>
<p class="MsoNormal">key=HTTP_X_ROLE, value=u'admin'<o:p></o:p></p>
<p class="MsoNormal">key=mod_wsgi.request_handler, value='wsgi-script'<o:p></o:p></p>
<p class="MsoNormal">key=HTTP_X_IDENTITY_STATUS, value='Confirmed'<o:p></o:p></p>
<p class="MsoNormal">key=wsgi.url_scheme, value='https'<o:p></o:p></p>
<p class="MsoNormal">key=SERVER_ADMIN, value='[no address given]'<o:p></o:p></p>
<p class="MsoNormal">key=CONTENT_LENGTH, value=8<o:p></o:p></p>
<p class="MsoNormal">key=HTTP_X_DOMAIN_ID, value=None<o:p></o:p></p>
<p class="MsoNormal">key=PATH_TRANSLATED, value='/etc/apache2/wsgi/glance/glance-api.py/v1/images'<o:p></o:p></p>
<p class="MsoNormal">key=SERVER_PORT, value='9292'<o:p></o:p></p>
<p class="MsoNormal">key=HTTP_X_PROJECT_DOMAIN_ID, value=None<o:p></o:p></p>
<p class="MsoNormal">key=wsgiorg.routing_args, value=(<routes.util.URLGenerator object at 0x7f5fb1765a90>, {'action': u'create', 'controller': <glance.common.wsgi.Resource object at 0x7f5fb181fc10>})<o:p></o:p></p>
<p class="MsoNormal">key=HTTP_X_USER_DOMAIN_ID, value=None<o:p></o:p></p>
<p class="MsoNormal">key=wsgi.multiprocess, value=True<o:p></o:p></p>
<p class="MsoNormal">key=mod_wsgi.input_chunked, value='1'<o:p></o:p></p>
<p class="MsoNormal">key=SERVER_ADDR, value='10.1.184.1'<o:p></o:p></p>
<p class="MsoNormal">key=DOCUMENT_ROOT, value='/etc/apache2/htdocs'<o:p></o:p></p>
<p class="MsoNormal">key=HTTP_X_IMAGE_META_SIZE, value='8'<o:p></o:p></p>
<p class="MsoNormal">key=mod_wsgi.process_group, value='glance-api'<o:p></o:p></p>
<p class="MsoNormal">key=HTTP_X_PROJECT_DOMAIN_NAME, value=None<o:p></o:p></p>
<p class="MsoNormal">key=HTTP_X_SERVICE_CATALOG, value='[{"endpoints_links": [], "endpoints": [{"adminURL": "<a href="https://192.168.124.81:8774/v2/eba7179c427f4c8bb177e4b37e6b4fcf">https://192.168.124.81:8774/v2/eba7179c427f4c8bb177e4b37e6b4fcf</a>", "region":
 "Region1", "publicURL": "<a href="https://10.1.184.2:8774/v2/eba7179c427f4c8bb177e4b37e6b4fcf">https://10.1.184.2:8774/v2/eba7179c427f4c8bb177e4b37e6b4fcf</a>", "internalURL": "<a href="https://192.168.124.81:8774/v2/eba7179c427f4c8bb177e4b37e6b4fcf">https://192.168.124.81:8774/v2/eba7179c427f4c8bb177e4b37e6b4fcf</a>",
 "id": "7d60c1b83ee9434cac1a799ff912bd71"}], "type": "compute", "name": "nova"}, {"endpoints_links": [], "endpoints": [{"adminURL": "<a href="https://192.168.124.82:9696/">https://192.168.124.82:9696/</a>", "region": "Region1", "publicURL": "<a href="https://10.1.184.1:9696/">https://10.1.184.1:9696/</a>",
 "internalURL": "<a href="https://192.168.124.82:9696/">https://192.168.124.82:9696/</a>", "id": "23e53efd167c49c683a4d97900f781e6"}, {"adminURL": "<a href="https://192.168.124.82:9696/">https://192.168.124.82:9696/</a>", "region": "domain", "publicURL": "<a href="https://10.1.184.1:9696/">https://10.1.184.1:9696/</a>",
 "internalURL": "<a href="https://192.168.124.82:9696/">https://192.168.124.82:9696/</a>", "id": "82bbe0e5b6954ea1a599582188c0197d"}], "type": "network", "name": "quantum"}, {"endpoints_links": [], "endpoints": [{"adminURL": "<a href="http://192.168.124.82:21062/">http://192.168.124.82:21062/</a>",
 "region": "domain", "publicURL": "<a href="http://10.1.184.1:21061/1">http://10.1.184.1:21061/1</a>", "internalURL": "<a href="http://192.168.124.82:21061/1">http://192.168.124.82:21061/1</a>", "id": "c302d392551649c187a0f58d2cc6b3f4"}], "type": "repository",
 "name": "focus"}, {"endpoints_links": [], "endpoints": [{"adminURL": "<a href="https://192.168.124.82:9292">https://192.168.124.82:9292</a>", "region": "Region1", "publicURL": "<a href="https://10.1.184.1:9292">https://10.1.184.1:9292</a>", "internalURL":
 "<a href="https://192.168.124.82:9292">https://192.168.124.82:9292</a>", "id": "33a17baeb73644af8f45ebe631ab9788"}, {"adminURL": "<a href="https://192.168.124.82:9292">https://192.168.124.82:9292</a>", "region": "domain", "publicURL": "<a href="https://10.1.184.1:9292">https://10.1.184.1:9292</a>",
 "internalURL": "<a href="https://192.168.124.82:9292">https://192.168.124.82:9292</a>", "id": "4b0827ac48824f60b508fdb1edb3a401"}], "type": "image", "name": "glance"}, {"endpoints_links": [], "endpoints": [{"adminURL": "<a href="https://192.168.124.82:8776/v1/eba7179c427f4c8bb177e4b37e6b4fcf">https://192.168.124.82:8776/v1/eba7179c427f4c8bb177e4b37e6b4fcf</a>",
 "region": "Region1", "publicURL": "<a href="https://10.1.184.1:8776/v1/eba7179c427f4c8bb177e4b37e6b4fcf">https://10.1.184.1:8776/v1/eba7179c427f4c8bb177e4b37e6b4fcf</a>", "internalURL": "<a href="https://192.168.124.82:8776/v1/eba7179c427f4c8bb177e4b37e6b4fcf">https://192.168.124.82:8776/v1/eba7179c427f4c8bb177e4b37e6b4fcf</a>",
 "id": "f4ab866d10ef4bc297dbe1c7c747557c"}, {"adminURL": "<a href="https://192.168.124.82:8776/v1/eba7179c427f4c8bb177e4b37e6b4fcf">https://192.168.124.82:8776/v1/eba7179c427f4c8bb177e4b37e6b4fcf</a>", "region": "domain", "publicURL": "<a href="https://10.1.184.1:8776/v1/eba7179c427f4c8bb177e4b37e6b4fcf">https://10.1.184.1:8776/v1/eba7179c427f4c8bb177e4b37e6b4fcf</a>",
 "internalURL": "<a href="https://192.168.124.82:8776/v1/eba7179c427f4c8bb177e4b37e6b4fcf">https://192.168.124.82:8776/v1/eba7179c427f4c8bb177e4b37e6b4fcf</a>", "id": "e813d4f2ab8d49119146ba313645a37e"}], "type": "volume", "name": "cinder"}, {"endpoints_links":
 [], "endpoints": [{"adminURL": "<a href="https://192.168.124.81:8773/services/Admin">https://192.168.124.81:8773/services/Admin</a>", "region": "Region1", "publicURL": "<a href="https://10.1.184.2:8773/services/Cloud">https://10.1.184.2:8773/services/Cloud</a>",
 "internalURL": "<a href="https://192.168.124.81:8773/services/Clouds">https://192.168.124.81:8773/services/Clouds</a>", "id": "c77f6aacaaa64c68af48cc9b073ea81f"}], "type": "ec2", "name": "ec2"}, {"endpoints_links": [], "endpoints": [{"adminURL": "<a href="http://192.168.124.82:21051/1">http://192.168.124.82:21051/1</a>",
 "region": "domain", "publicURL": "<a href="http://10.1.184.1:21051/1">http://10.1.184.1:21051/1</a>", "internalURL": "<a href="http://192.168.124.82:21051/1">http://192.168.124.82:21051/1</a>", "id": "d01820a022e44b0c9f8011a608d852dc"}], "type": "provisioner",
 "name": "eve"}, {"endpoints_links": [], "endpoints": [{"adminURL": "<a href="https://192.168.124.82:35357/v2.0">https://192.168.124.82:35357/v2.0</a>", "region": "Region1", "publicURL": "<a href="https://10.1.184.1:5000/v2.0">https://10.1.184.1:5000/v2.0</a>",
 "internalURL": "<a href="https://192.168.124.82:5000/v2.0">https://192.168.124.82:5000/v2.0</a>", "id": "b9adc8ffaf224fc6b078273caa11376c"}, {"adminURL": "<a href="https://192.168.124.82:35357/v2.0">https://192.168.124.82:35357/v2.0</a>", "region": "domain",
 "publicURL": "<a href="https://10.1.184.1:5000/v2.0">https://10.1.184.1:5000/v2.0</a>", "internalURL": "<a href="https://192.168.124.82:5000/v2.0">https://192.168.124.82:5000/v2.0</a>", "id": "41a4936c4d974f15b039fc53d8d5d0ae"}], "type": "identity", "name":
 "keystone"}, {"endpoints_links": [], "endpoints": [{"adminURL": "<a href="http://192.168.124.82:21072/">http://192.168.124.82:21072/</a>", "region": "domain", "publicURL": "<a href="http://10.1.184.1:21071/1">http://10.1.184.1:21071/1</a>", "internalURL":
 "<a href="http://192.168.124.82:21071/1">http://192.168.124.82:21071/1</a>", "id": "1e18cbf52b0845ecb914877e30637ee6"}], "type": "registry", "name": "graffiti"}]'<o:p></o:p></p>
<p class="MsoNormal">key=HTTP_X_TENANT, value=u'AdminProject'<o:p></o:p></p>
<p class="MsoNormal">key=HTTP_X_USER, value=u'Admin'<o:p></o:p></p>
<p class="MsoNormal">key=SCRIPT_FILENAME, value='/etc/apache2/wsgi/glance/glance-api.py'<o:p></o:p></p>
<p class="MsoNormal">key=HTTP_X_IMAGE_META_PROTECTED, value='False'<o:p></o:p></p>
<p class="MsoNormal">key=HTTP_X_IMAGE_META_DISK_FORMAT, value='qcow2'<o:p></o:p></p>
<p class="MsoNormal">key=HTTP_X_IMAGE_META_IS_PUBLIC, value='True'<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">key=wsgi.input, value=<mod_wsgi.Input object at 0x7f5fb08931f0><o:p></o:p></p>
<p class="MsoNormal">key=keystone.token_info, value={u'access': {u'token': {u'issued_at': u'2013-12-17T12:14:36.329480', u'expires': u'2013-12-18T12:11:28Z', u'id': u'de169f1045f8d306a750d28e8e33172e', u'tenant': {u'enabled': True, u'id': u'eba7179c427f4c8bb177e4b37e6b4fcf',
 u'name': u'AdminProject', u'description': u''}}, u'serviceCatalog': [{u'endpoints_links': [], u'endpoints': [{u'adminURL': u'https://192.168.124.81:8774/v2/eba7179c427f4c8bb177e4b37e6b4fcf', u'region': u'Region1', u'publicURL': u'https://10.1.184.2:8774/v2/eba7179c427f4c8bb177e4b37e6b4fcf',
 u'internalURL': u'https://192.168.124.81:8774/v2/eba7179c427f4c8bb177e4b37e6b4fcf', u'id': u'7d60c1b83ee9434cac1a799ff912bd71'}], u'type': u'compute', u'name': u'nova'}, {u'endpoints_links': [], u'endpoints': [{u'adminURL': u'https://192.168.124.82:9696/',
 u'region': u'Region1', u'publicURL': u'https://10.1.184.1:9696/', u'internalURL': u'https://192.168.124.82:9696/', u'id': u'23e53efd167c49c683a4d97900f781e6'}, {u'adminURL': u'https://192.168.124.82:9696/', u'region': u'domain', u'publicURL': u'https://10.1.184.1:9696/',
 u'internalURL': u'https://192.168.124.82:9696/', u'id': u'82bbe0e5b6954ea1a599582188c0197d'}], u'type': u'network', u'name': u'quantum'}, {u'endpoints_links': [], u'endpoints': [{u'adminURL': u'http://192.168.124.82:21062/', u'region': u'domain', u'publicURL':
 u'http://10.1.184.1:21061/1', u'internalURL': u'http://192.168.124.82:21061/1', u'id': u'c302d392551649c187a0f58d2cc6b3f4'}], u'type': u'repository', u'name': u'focus'}, {u'endpoints_links': [], u'endpoints': [{u'adminURL': u'https://192.168.124.82:9292',
 u'region': u'Region1', u'publicURL': u'https://10.1.184.1:9292', u'internalURL': u'https://192.168.124.82:9292', u'id': u'33a17baeb73644af8f45ebe631ab9788'}, {u'adminURL': u'https://192.168.124.82:9292', u'region': u'domain', u'publicURL': u'https://10.1.184.1:9292',
 u'internalURL': u'https://192.168.124.82:9292', u'id': u'4b0827ac48824f60b508fdb1edb3a401'}], u'type': u'image', u'name': u'glance'}, {u'endpoints_links': [], u'endpoints': [{u'adminURL': u'https://192.168.124.82:8776/v1/eba7179c427f4c8bb177e4b37e6b4fcf',
 u'region': u'Region1', u'publicURL': u'https://10.1.184.1:8776/v1/eba7179c427f4c8bb177e4b37e6b4fcf', u'internalURL': u'https://192.168.124.82:8776/v1/eba7179c427f4c8bb177e4b37e6b4fcf', u'id': u'f4ab866d10ef4bc297dbe1c7c747557c'}, {u'adminURL': u'https://192.168.124.82:8776/v1/eba7179c427f4c8bb177e4b37e6b4fcf',
 u'region': u'domain', u'publicURL': u'https://10.1.184.1:8776/v1/eba7179c427f4c8bb177e4b37e6b4fcf', u'internalURL': u'https://192.168.124.82:8776/v1/eba7179c427f4c8bb177e4b37e6b4fcf', u'id': u'e813d4f2ab8d49119146ba313645a37e'}], u'type': u'volume', u'name':
 u'cinder'}, {u'endpoints_links': [], u'endpoints': [{u'adminURL': u'https://192.168.124.81:8773/services/Admin', u'region': u'Region1', u'publicURL': u'https://10.1.184.2:8773/services/Cloud', u'internalURL': u'https://192.168.124.81:8773/services/Clouds',
 u'id': u'c77f6aacaaa64c68af48cc9b073ea81f'}], u'type': u'ec2', u'name': u'ec2'}, {u'endpoints_links': [], u'endpoints': [{u'adminURL': u'http://192.168.124.82:21051/1', u'region': u'domain', u'publicURL': u'http://10.1.184.1:21051/1', u'internalURL': u'http://192.168.124.82:21051/1',
 u'id': u'd01820a022e44b0c9f8011a608d852dc'}], u'type': u'provisioner', u'name': u'eve'}, {u'endpoints_links': [], u'endpoints': [{u'adminURL': u'https://192.168.124.82:35357/v2.0', u'region': u'Region1', u'publicURL': u'https://10.1.184.1:5000/v2.0', u'internalURL':
 u'https://192.168.124.82:5000/v2.0', u'id': u'b9adc8ffaf224fc6b078273caa11376c'}, {u'adminURL': u'https://192.168.124.82:35357/v2.0', u'region': u'domain', u'publicURL': u'https://10.1.184.1:5000/v2.0', u'internalURL': u'https://192.168.124.82:5000/v2.0',
 u'id': u'41a4936c4d974f15b039fc53d8d5d0ae'}], u'type': u'identity', u'name': u'keystone'}, {u'endpoints_links': [], u'endpoints': [{u'adminURL': u'http://192.168.124.82:21072/', u'region': u'domain', u'publicURL': u'http://10.1.184.1:21071/1', u'internalURL':
 u'http://192.168.124.82:21071/1', u'id': u'1e18cbf52b0845ecb914877e30637ee6'}], u'type': u'registry', u'name': u'graffiti'}], u'user': {u'username': u'Admin', u'roles_links': [], u'id': u'0dd0361fe85a43deb456dd47ed55c2e2', u'roles': [{u'id': u'fbd220a4f1f842cfa7ef5cd48bb78e2d',
 u'name': u'admin'}], u'name': u'Admin'}, u'metadata': {u'is_admin': 0, u'roles': [u'fbd220a4f1f842cfa7ef5cd48bb78e2d']}}}<o:p></o:p></p>
<p class="MsoNormal">key=HTTP_HOST, value='10.1.184.1:9292'<o:p></o:p></p>
<p class="MsoNormal">key=HTTP_X_ROLES, value=u'admin'<o:p></o:p></p>
<p class="MsoNormal">key=HTTPS, value='1'<o:p></o:p></p>
<p class="MsoNormal">key=wsgi.multithread, value=True<o:p></o:p></p>
<p class="MsoNormal">key=mod_wsgi.callable_object, value='application'<o:p></o:p></p>
<p class="MsoNormal">key=routes.url, value=<routes.util.URLGenerator object at 0x7f5fb1765a90><o:p></o:p></p>
<p class="MsoNormal">key=HTTP_X_IMAGE_META_MIN_DISK, value='0'<o:p></o:p></p>
<p class="MsoNormal">key=REQUEST_URI, value='/v1/images'<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">key=HTTP_X_TENANT_ID, value=u'eba7179c427f4c8bb177e4b37e6b4fcf'<o:p></o:p></p>
<p class="MsoNormal">key=webob.adhoc_attrs, value={'response': <Response at 0x7f5fb1765cd0 200 OK>, 'context': <glance.context.RequestContext object at 0x7f5fb17658d0>}<o:p></o:p></p>
<p class="MsoNormal">key=wsgi.file_wrapper, value=<built-in method file_wrapper of mod_wsgi.Adapter object at 0x7f5fb1607378><o:p></o:p></p>
<p class="MsoNormal">key=wsgi.version, value=(1, 1)<o:p></o:p></p>
<p class="MsoNormal">key=api.version, value=1<o:p></o:p></p>
<p class="MsoNormal">key=GATEWAY_INTERFACE, value='CGI/1.1'<o:p></o:p></p>
<p class="MsoNormal">key=wsgi.run_once, value=False<o:p></o:p></p>
<p class="MsoNormal">key=HTTPCONTENT_LENGTH, value=8<o:p></o:p></p>
<p class="MsoNormal">key=wsgi.errors, value=<mod_wsgi.Log object at 0x7f5fb087f6b0><o:p></o:p></p>
<p class="MsoNormal">key=REMOTE_PORT, value='14055'<o:p></o:p></p>
<p class="MsoNormal">key=mod_wsgi.listener_host, value=''<o:p></o:p></p>
<p class="MsoNormal">key=mod_wsgi.version, value=(3, 3)<o:p></o:p></p>
<p class="MsoNormal">key=HTTP_X_IMAGE_META_CONTAINER_FORMAT, value='bare'<o:p></o:p></p>
<p class="MsoNormal">key=HTTP_X_PROJECT_ID, value=u'eba7179c427f4c8bb177e4b37e6b4fcf'<o:p></o:p></p>
<p class="MsoNormal">key=HTTP_X_USER_DOMAIN_NAME, value=None<o:p></o:p></p>
<p class="MsoNormal">key=HTTP_X_USER_NAME, value=u'Admin'<o:p></o:p></p>
<p class="MsoNormal">key=CONTENT_TYPE, value='application/octet-stream'<o:p></o:p></p>
<p class="MsoNormal">key=mod_wsgi.application_group, value='d00-50-56-8e-75-82.cloudos.org:9292|'<o:p></o:p></p>
<p class="MsoNormal">key=mod_wsgi.script_reloading, value='1'<o:p></o:p></p>
<p class="MsoNormal">key=HTTP_X_IMAGE_META_NAME, value='CirrosTiny'<o:p></o:p></p>
<p class="MsoNormal">key=HTTP_ACCEPT_ENCODING, value='identity'<o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p> </o:p></span></p>
</div>
</div>
</body>
</html>