Hi Noel,

One thing to try could perhaps be the vcloud driver which predates
vCloud 1.5 overhaul. This is due to the fact we modified a couple of
shared chunks of code between non-1.5 and 1.5 versions of the vcloud
driver. This could indicate whether it's a regression problem we were
unable to test out or the Terremark service no longer works with the
original driver version (assuming it worked before - which it should
have).

Try revision 1210045 of vcloud.py with Python 2.7.x and see if it
behaves the same way:
https://svn.apache.org/viewvc/libcloud/trunk/libcloud/compute/drivers/vcloud.py?view=log

That revision is just before we started modifications for vCloud 1.5.
I hope this helps us progress further.


On 26 June 2012 08:59, Noel Milton Vega <nmv...@computingarchitects.com> wrote:
> Hi Sengor:
>
> Thanks for the replies.
>
> I manually patched vcloud.py by appending ".decide('utf-8')" in two
> the places needing it, and that worked (... and makes sense ... I had
> to the same decode() step in my non-libcloud httplib2/ReST case for
> python-3).
>
> So let me move onto the subsequent parsing exceptions I mentioned...
> which is raised during processing of the HTTP XML Response
> (indicating malformed). Tracking it down, this happens in
> vcloud.py, here:
>
>   =================
>   class VCloudConnection(ConnectionUserAndKey):
>   <snip>
>
>       def _get_auth_token(self):
>         ...
>         <snip>
>             body = ET.XML(resp.read())  <---
>         <snip>
>         ...
>   <snip>
>   =================
>
>
> Through various print() and type() statements, I see that "resp.read()", which
> when expanded translates to "http.client.HTTPResponse.read()", returns a
> bytes string. However, I'm wondering if this may also need to be similarly
> ".decode('utf-8')", like this:
>
>      body = ET.XML(resp.read().decode('utf-8'))
>
>
> since the Python-3 documentation for "xml.etree.ElementTree.XML()"
> (which is what ET.XML() expands to), indicates that it is expecting a string
> (not a bytes encoded string).
>
> So I tried the modification above. Here is the before and after:
>
>    resp.read()  [ BEFORE .decode() inserted ]
>
> <class 'bytes'>  <--- types is 'bytes', and the following is the actual bytes 
> string...
>
> b'b\'<OrgList xmlns="http://www.vmware.com/vcloud/v0.8"; 
> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; 
> xmlns:xsd="http://www.w3.org/2001/XMLSchema";>\\n  <Org 
> href="https://services.vcloudexpress.terremark.com/api/v0.8/org/xxxx"; 
> type="application/vnd.vmware.vcloud.org+xml" 
> name="em...@example.com"/>\\n</OrgL'
>
>
>   resp.read().decode('utf-8')  [ AFTER .decode() inserted ]
>
>
> <class 'str'>  <--- types is 'str', and the following is the actual string...
>
> b'<OrgList xmlns="http://www.vmware.com/vcloud/v0.8"; 
> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; 
> xmlns:xsd="http://www.w3.org/2001/XMLSchema";>\n  <Org 
> href="https://services.vcloudexpress.terremark.com/api/v0.8/org/xxxx"; 
> type="application/vnd.vmware.vcloud.org+xml" 
> name="em...@example.com"/>\n</OrgL
>
>
> Looking carefully at both the bytes string (un-decoded) and the string 
> (decoded) above -- forgetting about whether we
> decode() it or not for the moment -- both sequences appear to be malformed... 
> They both have an extra "b'"
> pre-pending it, and both are truncated at the end (i.e. the enclosing 
> "</OrgL" ... doesn't end correctly). Note: Just
>
> in case this was a print() artefact, I also wrote the output to a file (same 
> truncation issue).
>
> This above issue is only true for python-3. Python 2, (decode()ed or not) 
> emits output correctly as:
>
>    <OrgList xmlns="http://www.vmware.com/vcloud/v0.8"; 
> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; 
> xmlns:xsd="http://www.w3.org/2001/XMLSchema";> <Org 
> href="https://services.vcloudexpress.terremark.com/api/v0.8/org/xxxx"; 
> type="application/vnd.vmware.vcloud.org+xml" 
> name="em...@example.com"/></OrgList>
>
>
> So there appears to be two problems here:
>    (1) missing ".decode('utf-8')" method call.
>    (2) the output of "resp.read()", with or without  the ".decode('utf-8')" 
> part, appears to be malformed.
>
>
> To make matters more interesting, note that the python-3 case curl(1) output 
> shows a result that is not truncated,
> but still, however, has the pre-pending "b'" (so it's still malformed). And 
> here is that curl(1) output
> (remembering that the above were from print() debug statements of mine, not 
> from curl(1)):
>
> b'<OrgList xmlns="http://www.vmware.com/vcloud/v0.8"; 
> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; 
> xmlns:xsd="http://www.w3.org/2001/XMLSchema";>\n  <Org 
> href="https://services.vcloudexpress.terremark.com/api/v0.8/org/xxxx"; 
> type="application/vnd.vmware.vcloud.org+xml" 
> name="em...@example.com"/>\n</OrgList>'
>
>
> As I look more for the cause, any helpful feedback is appreciated.
>
>
> Again,... the libcloud API is v0.10.1 with Python v3.2.3
>
>
> Thank you,
> Noel
>
>
>>________________________________
>> From: Sengor <seng...@gmail.com>
>>To: users@libcloud.apache.org; Noel Milton Vega 
>><nmv...@computingarchitects.com>
>>Sent: Thursday, June 21, 2012 10:21 PM
>>Subject: Re: Terremark authentication example using libcloud ...
>>
>>Hi Noel,
>>
>>Replies in line below:
>>
>>On 22 June 2012 09:30, Noel Milton Vega <nmv...@computingarchitects.com> 
>>wrote:
>>> (1) I was surprised that that base64 line worked at all (even in Python 2)
>>>     since I always thought use of "b" only worked for string literals
>>>     (not generated strings).
>>
>>Patch has been applied to trunk which now works for both Python 2 & 3.
>>For more info see: https://issues.apache.org/jira/browse/LIBCLOUD-204
>>
>>
>>> (2) Not an issue for this specific thread, but even when I hard-coded
>>>     my auth string (just to get past the Python-3 related auth issue), sadly
>>>     another unrelated (xml parsing) issue arose almost immediately.
>>>     Just as a heads up, it was this:
>>>
>>>
>>> Traceback (most recent call last):
>>>   File "/usr/lib64/python3.2/xml/etree/ElementTree.py", line 1668, in feed
>>>     self._parser.Parse(data, 0)
>>> xml.parsers.expat.ExpatError: not well-formed (invalid token): line 1, 
>>> column 1
>>>
>>>    (So I never got my list_images() output.)
>>>
>>> (3) Similar to the last point, python-2 gets much further along, but also
>>>     eventually experiences an parse-related exception too (as it's
>>>     iterating through the list the of images too I believe). Again, as a 
>>> heads-up fyi:
>>>
>>>
>>>   File "/usr/lib/python2.7/site-packages/libcloud/common/base.py", line 76, 
>>> in __init__
>>>     raise Exception(self.parse_error())
>>> Exception: <Element '{http://www.w3.org/1999/xhtml}html'; at 0x118dd10>
>>
>>Hard to say what the issue could be for these two. Could you post the
>>debugging output for these two (don't forget to remove the private
>>contents such as base64 encoded auth):
>>http://libcloud.apache.org/docs/debugging.html
>>
>>Note I've only used the vCloud module under Python 2.x at the moment
>>and don't have access to Terremark. We did slightly change the VDC
>>object model when vCloud v1.5 support has been introduced. If this is
>>related to what you see it'd be good to fix it up, otherwise it's
>>something else getting in the way.
>>
>>--
>>sengork
>>
>>
>>



-- 
sengork

Reply via email to