Support glance client can get ipv6 image url correctly

This patch is for fix bug 1208784. In openstack ipv6 environment,
if the os image url is not provided, need use the provided host
to generate literal ipv6 image url.

Fixes bug 1208784

Change-Id: Icb71241a639db02d079348f086bd7bd5f0412609
This commit is contained in:
Dazhao 2013-08-21 12:54:19 +08:00
parent 53d3a0e129
commit 061da46202
2 changed files with 15 additions and 0 deletions
glanceclient
tests

@ -23,6 +23,7 @@ import re
import sys
from keystoneclient.v2_0 import client as ksclient
import netaddr
import glanceclient
from glanceclient import exc
@ -347,6 +348,9 @@ class OpenStackImagesShell(object):
if args.os_image_url:
return args.os_image_url
elif args.host:
# Check if it is legal ipv6 address, if so, need wrap it with '[]'
if netaddr.valid_ipv6(args.host):
args.host = '[%s]' % args.host
scheme = 'https' if args.use_ssl else 'http'
return '%s://%s:%s/' % (scheme, args.host, args.port)
else:

@ -80,3 +80,14 @@ class ShellTest(utils.TestCase):
add_help=False,
formatter_class=openstack_shell.HelpFormatter,)
self.assertTrue(expected, actual_parser)
def test_get_image_url_by_ipv6Addr_host(self):
fake_args = lambda: None
setattr(fake_args, 'os_image_url', None)
setattr(fake_args, 'host', '2011:2013:1:f101::1')
setattr(fake_args, 'use_ssl', True)
setattr(fake_args, 'port', '9292')
expected_image_url = 'https://[2011:2013:1:f101::1]:9292/'
test_shell = openstack_shell.OpenStackImagesShell()
targeted_image_url = test_shell._get_image_url(fake_args)
self.assertEqual(expected_image_url, targeted_image_url)