When I run this simple code:

from pprint import pprint
from libcloud.compute.types import Provider
from libcloud.compute.providers import get_driver
import libcloud.security
import time

libcloud.security.VERIFY_SSL_CERT = False
OpenStack = get_driver(Provider.OPENSTACK)
driver = OpenStack('user', 'xxxx',
                   ex_tenant_name ='user',
                   ex_force_auth_url='http://192.168.16.10:5000',
                   ex_force_auth_version='2.0_password')

pprint(driver.list_sizes())
pprint(driver.list_nodes())
pprint(driver.list_images())
pprint(driver.ex_list_networks())
pprint(driver.ex_list_floating_ip_pools())
pprint(driver.ex_list_floating_ips())

tiny = driver.list_sizes()[0]
small = driver.list_sizes()[1]
ubuntu = driver.list_images()[0]
net = driver.ex_list_networks()[1]
ip = driver.ex_list_floating_ips()[0]

newNode =
driver.create_node(name="test3",image=ubuntu,size=small,networks=(net,),ex_keyname="cloud")


I got the following error:


Traceback (most recent call last):
  File "mycloud.py", line 22, in <module>
    pprint(driver.list_sizes())
  File
"/usr/local/lib/python2.7/dist-packages/apache_libcloud-0.17.1_dev-py2.7.egg/libcloud/compute/drivers/openstack.py",
line 283, in list_sizes
    self.connection.request('/flavors/detail').object)
  File
"/usr/local/lib/python2.7/dist-packages/apache_libcloud-0.17.1_dev-py2.7.egg/libcloud/common/openstack.py",
line 200, in request
    raw=raw)
  File
"/usr/local/lib/python2.7/dist-packages/apache_libcloud-0.17.1_dev-py2.7.egg/libcloud/common/base.py",
line 738, in request
    headers=headers)
  File "/usr/lib/python2.7/httplib.py", line 973, in request
    self._send_request(method, url, body, headers)
  File "/usr/lib/python2.7/httplib.py", line 1007, in _send_request
    self.endheaders(body)
  File "/usr/lib/python2.7/httplib.py", line 969, in endheaders
    self._send_output(message_body)
  File "/usr/lib/python2.7/httplib.py", line 829, in _send_output
    self.send(msg)
  File "/usr/lib/python2.7/httplib.py", line 791, in send
    self.connect()
  File "/usr/lib/python2.7/httplib.py", line 772, in connect
    self.timeout, self.source_address)
  File "/usr/lib/python2.7/socket.py", line 553, in create_connection
    for res in getaddrinfo(host, port, 0, SOCK_STREAM):
socket.error: getaddrinfo() argument 2 must be integer or string


I realized the port number was of type unicode.
I traced it back to openstack driver class  OpenStackServiceCatalog  inside
 libcloud/common/openstack_identity.py which parses everything as unicode.

Currently, I changed the _tuple_from_url() function inside
libcloud/common/base.py to return (host, int(port), secure, request_path)
and convert the unicode port number back to integer.
However, I'm wondering if there is a cleaner solution or permanent solution.

regards,
chun hui

Reply via email to