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