Merge lp:~smoser/simplestreams/keystone-v3-support into lp:~thedac/simplestreams/keystone-v3-support

Proposed by Scott Moser
Status: Merged
Merged at revision: 452
Proposed branch: lp:~smoser/simplestreams/keystone-v3-support
Merge into: lp:~thedac/simplestreams/keystone-v3-support
Diff against target: 106 lines (+39/-9)
2 files modified
simplestreams/mirrors/glance.py (+2/-1)
simplestreams/openstack.py (+37/-8)
To merge this branch: bzr merge lp:~smoser/simplestreams/keystone-v3-support
Reviewer Review Type Date Requested Status
David Ames Pending
Review via email: mp+329379@code.launchpad.net

Description of the change

  support running on Ubuntu 14.04

  This seems generally functional with 14.04 versions of libraries.
  Tested in a 14.04 container using 'example-sync' from
    https://code.launchpad.net/~smoser/simplestreams/example-sync

  One unrelated change.. in order to be able to sync cirros images
  we needed to not rely on 'os' in the stream metadata.

To post a comment you must log in.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'simplestreams/mirrors/glance.py'
2--- simplestreams/mirrors/glance.py 2017-06-15 22:22:20 +0000
3+++ simplestreams/mirrors/glance.py 2017-08-22 17:42:32 +0000
4@@ -272,7 +272,8 @@
5 name_old, name_new = carry_over_property
6 else:
7 name_old = name_new = carry_over_property
8- properties[name_new] = image_metadata[name_old]
9+ if name_new in image_metadata:
10+ properties[name_new] = image_metadata[name_old]
11
12 if 'arch' in image_metadata:
13 properties['architecture'] = canonicalize_arch(
14
15=== modified file 'simplestreams/openstack.py'
16--- simplestreams/openstack.py 2017-06-15 22:22:20 +0000
17+++ simplestreams/openstack.py 2017-08-22 17:42:32 +0000
18@@ -20,11 +20,15 @@
19
20 from keystoneclient.v2_0 import client as ksclient_v2
21 from keystoneclient.v3 import client as ksclient_v3
22-from keystoneauth1 import session
23-from keystoneauth1.identity import (
24- v2,
25- v3,
26-)
27+try:
28+ from keystoneauth1 import session
29+ from keystoneauth1.identity import (v2, v3)
30+ _LEGACY_CLIENTS = False
31+except ImportError:
32+ # 14.04 level packages do not have this.
33+ session, v2, v3 = (None, None, None)
34+ _LEGACY_CLIENTS = True
35+
36
37 OS_ENV_VARS = (
38 'OS_AUTH_TOKEN', 'OS_AUTH_URL', 'OS_CACERT', 'OS_IMAGE_API_VERSION',
39@@ -124,12 +128,21 @@
40 return list(regions)
41
42
43-def get_ks_api_version(auth_url):
44+def get_ks_api_version(auth_url=None, env=None):
45 """Get the keystone api version based on the end of the auth url.
46
47 @param auth_url: String
48 @returns: 2 or 3 (int)
49 """
50+ if env is None:
51+ env = os.environ
52+
53+ if env.get('OS_IDENTITY_API_VERSION'):
54+ return int(env['OS_IDENTITY_API_VERSION'])
55+
56+ if auth_url is None:
57+ auth_url = ""
58+
59 if auth_url.endswith('/v3'):
60 return 3
61 elif auth_url.endswith('/v2.0'):
62@@ -138,8 +151,17 @@
63 return None
64
65
66+def _legacy_ksclient(**kwargs):
67+ """14.04 does not have session available."""
68+ kskw = {k: kwargs.get(k) for k in PT_V2 if k in kwargs}
69+ return ksclient_v2.Client(**kskw)
70+
71+
72 def get_ksclient(**kwargs):
73 # api version will be force to 3 or 2
74+ if _LEGACY_CLIENTS:
75+ return _legacy_ksclient(**kwargs)
76+
77 api_version = get_ks_api_version(kwargs.get('auth_url', '')) or 2
78 arg_set = KS_VERSION_RESOLVER[api_version].arg_set
79 # Filter/select the args for the api version from the kwargs dictionary
80@@ -156,10 +178,15 @@
81 if not client:
82 client = get_ksclient(**kwargs)
83
84+ print("kwargs: %s" % kwargs)
85 endpoint = _get_endpoint(client, service, **kwargs)
86- return {'token': client.auth_token, 'insecure': kwargs.get('insecure'),
87+ info = {'token': client.auth_token, 'insecure': kwargs.get('insecure'),
88 'cacert': kwargs.get('cacert'), 'endpoint': endpoint,
89- 'tenant_id': client.tenant_id, 'session': client.session}
90+ 'tenant_id': client.tenant_id}
91+ if not _LEGACY_CLIENTS:
92+ info['session'] = client.session
93+
94+ return info
95
96
97 def _get_endpoint(client, service, **kwargs):
98@@ -169,6 +196,8 @@
99 'interface': kwargs.get('endpoint_type') or 'publicURL',
100 'region_name': kwargs.get('region_name'),
101 }
102+ if _LEGACY_CLIENTS:
103+ del endpoint_kwargs['interface']
104
105 endpoint = client.service_catalog.url_for(**endpoint_kwargs)
106 return endpoint

Subscribers

People subscribed via source and target branches

to all changes: