From 061da46202759f55866d224f9ab8013e747637c7 Mon Sep 17 00:00:00 2001 From: Dazhao <dzyu@cn.ibm.com> Date: Wed, 21 Aug 2013 12:54:19 +0800 Subject: [PATCH] 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 --- glanceclient/shell.py | 4 ++++ tests/test_shell.py | 11 +++++++++++ 2 files changed, 15 insertions(+) diff --git a/glanceclient/shell.py b/glanceclient/shell.py index e0124e5c..7931a1a3 100644 --- a/glanceclient/shell.py +++ b/glanceclient/shell.py @@ -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: diff --git a/tests/test_shell.py b/tests/test_shell.py index a895c2db..91793b25 100644 --- a/tests/test_shell.py +++ b/tests/test_shell.py @@ -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)