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