diff -Nru python-glanceclient-2.0.0/debian/changelog python-glanceclient-2.0.0/debian/changelog --- python-glanceclient-2.0.0/debian/changelog 2016-04-04 12:56:33.000000000 +0000 +++ python-glanceclient-2.0.0/debian/changelog 2016-06-14 20:31:32.000000000 +0000 @@ -1,3 +1,10 @@ +python-glanceclient (1:2.0.0-2ubuntu0.16.04.1) xenial; urgency=medium + + * d/p/get-endpoint.patch: Cherry-pick patch from upstream stable/mitaka + branch to get endpoint if os_image_url is not set (LP: #1579768). + + -- Corey Bryant Tue, 14 Jun 2016 16:25:01 -0400 + python-glanceclient (1:2.0.0-2) unstable; urgency=medium * Uploading to unstable. diff -Nru python-glanceclient-2.0.0/debian/patches/get-endpoint.patch python-glanceclient-2.0.0/debian/patches/get-endpoint.patch --- python-glanceclient-2.0.0/debian/patches/get-endpoint.patch 1970-01-01 00:00:00.000000000 +0000 +++ python-glanceclient-2.0.0/debian/patches/get-endpoint.patch 2016-06-14 20:23:34.000000000 +0000 @@ -0,0 +1,195 @@ +From f6b9e791c35a085cd6d9fd5e5a87aa5cc5fadb00 Mon Sep 17 00:00:00 2001 +From: Niall Bunting +Date: Mon, 9 May 2016 16:23:33 +0000 +Subject: [PATCH] Get endpoint if os_image_url is not set + +If env['OS_IMAGE_URL'] is not set then None is returned. This is then +used ignoring the endpoint_type, service_type and region_name. This +patch will use those values if the endpoint is None. + +Change-Id: I76cc527b05d2be75d3dbc33123a0d71be97fe25c +Closes-bug: #1579768 +(cherry picked from commit a862196cfb7f7323b1864b4c1660c39850487a64) +--- + glanceclient/shell.py | 11 ++++- + glanceclient/tests/unit/test_shell.py | 93 +++++++++++++++++++++++++++++------ + 2 files changed, 87 insertions(+), 17 deletions(-) + +diff --git a/glanceclient/shell.py b/glanceclient/shell.py +index 2603aa2..ffcb0cf 100755 +--- a/glanceclient/shell.py ++++ b/glanceclient/shell.py +@@ -441,7 +441,16 @@ class OpenStackImagesShell(object): + } + else: + kwargs = self._get_kwargs_for_create_session(args) +- kwargs = {'session': self._get_keystone_session(**kwargs)} ++ ks_session = self._get_keystone_session(**kwargs) ++ kwargs = {'session': ks_session} ++ ++ if endpoint is None: ++ endpoint_type = args.os_endpoint_type or 'public' ++ service_type = args.os_service_type or 'image' ++ endpoint = ks_session.get_endpoint( ++ service_type=service_type, ++ interface=endpoint_type, ++ region_name=args.os_region_name) + + return glanceclient.Client(api_version, endpoint, **kwargs) + +diff --git a/glanceclient/tests/unit/test_shell.py b/glanceclient/tests/unit/test_shell.py +index 7d0d357..925403b 100644 +--- a/glanceclient/tests/unit/test_shell.py ++++ b/glanceclient/tests/unit/test_shell.py +@@ -30,7 +30,6 @@ import fixtures + from keystoneclient import exceptions as ks_exc + from keystoneclient import fixture as ks_fixture + import mock +-import requests + from requests_mock.contrib import fixture as rm_fixture + import six + +@@ -44,7 +43,8 @@ from glanceclient.v2 import schemas as schemas + import json + + +-DEFAULT_IMAGE_URL = 'http://127.0.0.1:5000/' ++DEFAULT_IMAGE_URL = 'http://127.0.0.1:9292/' ++DEFAULT_IMAGE_URL_INTERNAL = 'http://127.0.0.1:9191/' + DEFAULT_USERNAME = 'username' + DEFAULT_PASSWORD = 'password' + DEFAULT_TENANT_ID = 'tenant_id' +@@ -56,6 +56,8 @@ DEFAULT_V2_AUTH_URL = '%sv2.0' % DEFAULT_UNVERSIONED_AUTH_URL + DEFAULT_V3_AUTH_URL = '%sv3' % DEFAULT_UNVERSIONED_AUTH_URL + DEFAULT_AUTH_TOKEN = ' 3bcc3d3a03f44e3d8377f9247b0ad155' + TEST_SERVICE_URL = 'http://127.0.0.1:5000/' ++DEFAULT_SERVICE_TYPE = 'image' ++DEFAULT_ENDPOINT_TYPE = 'public' + + FAKE_V2_ENV = {'OS_USERNAME': DEFAULT_USERNAME, + 'OS_PASSWORD': DEFAULT_PASSWORD, +@@ -70,6 +72,15 @@ FAKE_V3_ENV = {'OS_USERNAME': DEFAULT_USERNAME, + 'OS_AUTH_URL': DEFAULT_V3_AUTH_URL, + 'OS_IMAGE_URL': DEFAULT_IMAGE_URL} + ++FAKE_V4_ENV = {'OS_USERNAME': DEFAULT_USERNAME, ++ 'OS_PASSWORD': DEFAULT_PASSWORD, ++ 'OS_PROJECT_ID': DEFAULT_PROJECT_ID, ++ 'OS_USER_DOMAIN_NAME': DEFAULT_USER_DOMAIN_NAME, ++ 'OS_AUTH_URL': DEFAULT_V3_AUTH_URL, ++ 'OS_SERVICE_TYPE': DEFAULT_SERVICE_TYPE, ++ 'OS_ENDPOINT_TYPE': DEFAULT_ENDPOINT_TYPE, ++ 'OS_AUTH_TOKEN': DEFAULT_AUTH_TOKEN} ++ + TOKEN_ID = uuid.uuid4().hex + + V2_TOKEN = ks_fixture.V2Token(token_id=TOKEN_ID) +@@ -80,7 +91,8 @@ _s.add_endpoint(DEFAULT_IMAGE_URL) + V3_TOKEN = ks_fixture.V3Token() + V3_TOKEN.set_project_scope() + _s = V3_TOKEN.add_service('image', name='glance') +-_s.add_standard_endpoints(public=DEFAULT_IMAGE_URL) ++_s.add_standard_endpoints(public=DEFAULT_IMAGE_URL, ++ internal=DEFAULT_IMAGE_URL_INTERNAL) + + + class ShellTest(testutils.TestCase): +@@ -102,7 +114,9 @@ class ShellTest(testutils.TestCase): + self.requests = self.useFixture(rm_fixture.Fixture()) + + json_list = ks_fixture.DiscoveryList(DEFAULT_UNVERSIONED_AUTH_URL) +- self.requests.get(DEFAULT_IMAGE_URL, json=json_list, status_code=300) ++ self.requests.get(DEFAULT_UNVERSIONED_AUTH_URL, ++ json=json_list, ++ status_code=300) + + json_v2 = {'version': ks_fixture.V2Discovery(DEFAULT_V2_AUTH_URL)} + self.requests.get(DEFAULT_V2_AUTH_URL, json=json_v2) +@@ -352,18 +366,6 @@ class ShellTest(testutils.TestCase): + glance_shell.main(args) + self.assertEqual(1, mock_client.call_count) + +- @mock.patch('glanceclient.v2.client.Client') +- def test_password_prompted_with_v2(self, v2_client): +- self.requests.post(self.token_url, exc=requests.ConnectionError) +- +- cli2 = mock.MagicMock() +- v2_client.return_value = cli2 +- cli2.http_client.get.return_value = (None, {'versions': []}) +- glance_shell = openstack_shell.OpenStackImagesShell() +- os.environ['OS_PASSWORD'] = 'password' +- self.assertRaises(exc.CommunicationError, +- glance_shell.main, ['image-list']) +- + @mock.patch('sys.stdin', side_effect=mock.MagicMock) + @mock.patch('getpass.getpass', side_effect=EOFError) + @mock.patch('glanceclient.v2.client.Client') +@@ -624,6 +626,65 @@ class ShellTestWithKeystoneV3Auth(ShellTest): + self.assertNotIn(r, stdout.split()) + + ++class ShellTestWithNoOSImageURLPublic(ShellTestWithKeystoneV3Auth): ++ # auth environment to use ++ # default uses public ++ auth_env = FAKE_V4_ENV.copy() ++ ++ def setUp(self): ++ super(ShellTestWithNoOSImageURLPublic, self).setUp() ++ self.image_url = DEFAULT_IMAGE_URL ++ self.requests.get(DEFAULT_IMAGE_URL + 'v2/images', ++ text='{"images": []}') ++ ++ @mock.patch('glanceclient.v1.client.Client') ++ def test_auth_plugin_invocation_with_v1(self, v1_client): ++ args = '--os-image-api-version 1 image-list' ++ glance_shell = openstack_shell.OpenStackImagesShell() ++ glance_shell.main(args.split()) ++ self.assertEqual(1, self.v3_auth.call_count) ++ self._assert_auth_plugin_args() ++ ++ @mock.patch('glanceclient.v2.client.Client') ++ def test_auth_plugin_invocation_with_v2(self, v2_client): ++ args = '--os-image-api-version 2 image-list' ++ glance_shell = openstack_shell.OpenStackImagesShell() ++ glance_shell.main(args.split()) ++ self.assertEqual(1, self.v3_auth.call_count) ++ self._assert_auth_plugin_args() ++ ++ @mock.patch('glanceclient.v2.client.Client') ++ def test_endpoint_from_interface(self, v2_client): ++ args = ('--os-image-api-version 2 image-list') ++ glance_shell = openstack_shell.OpenStackImagesShell() ++ glance_shell.main(args.split()) ++ assert v2_client.called ++ (args, kwargs) = v2_client.call_args ++ self.assertEqual(kwargs['endpoint_override'], self.image_url) ++ ++ def test_endpoint_real_from_interface(self): ++ args = ('--os-image-api-version 2 image-list') ++ glance_shell = openstack_shell.OpenStackImagesShell() ++ glance_shell.main(args.split()) ++ self.assertEqual(self.requests.request_history[2].url, ++ self.image_url + "v2/images?limit=20&" ++ "sort_key=name&sort_dir=asc") ++ ++ ++class ShellTestWithNoOSImageURLInternal(ShellTestWithNoOSImageURLPublic): ++ # auth environment to use ++ # this uses internal ++ FAKE_V5_ENV = FAKE_V4_ENV.copy() ++ FAKE_V5_ENV['OS_ENDPOINT_TYPE'] = 'internal' ++ auth_env = FAKE_V5_ENV.copy() ++ ++ def setUp(self): ++ super(ShellTestWithNoOSImageURLPublic, self).setUp() ++ self.image_url = DEFAULT_IMAGE_URL_INTERNAL ++ self.requests.get(DEFAULT_IMAGE_URL_INTERNAL + 'v2/images', ++ text='{"images": []}') ++ ++ + class ShellCacheSchemaTest(testutils.TestCase): + def setUp(self): + super(ShellCacheSchemaTest, self).setUp() +-- +2.8.1 + diff -Nru python-glanceclient-2.0.0/debian/patches/series python-glanceclient-2.0.0/debian/patches/series --- python-glanceclient-2.0.0/debian/patches/series 2016-04-04 12:56:33.000000000 +0000 +++ python-glanceclient-2.0.0/debian/patches/series 2016-06-14 20:24:20.000000000 +0000 @@ -1,3 +1,4 @@ skip-tests-2.patch skip-tests.patch fix-has-expired-tests.patch +get-endpoint.patch