Skip to content

Commit ef99720

Browse files
committed
identity version resource and version fixes
Support for identity version and various version fixes: * Added the notion of an unversioned service for a resource like the version resource. * Changed all of the service filters so they could pass version through. * Changed all the version resources to use unversioned services. Change-Id: I92d6be9661560a8ced2648f1605fc3ffd8eeb91c
1 parent 4d16c02 commit ef99720

File tree

16 files changed

+170
-22
lines changed

16 files changed

+170
-22
lines changed

openstack/auth/service_catalog.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -95,8 +95,7 @@ def get_urls(self, filtration):
9595
urls = []
9696
for url, version in self._get_endpoints(filtration):
9797
if version:
98-
if filtration.version:
99-
version = filtration.version
98+
version = filtration.get_version(version)
10099
url = url % {'version': version}
101100
urls.append(url)
102101
return urls

openstack/auth/service_filter.py

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ def __init__(self, module, path=None):
6767

6868

6969
class ServiceFilter(object):
70+
UNVERSIONED = ''
7071
ANY = 'any'
7172
PUBLIC = 'public'
7273
INTERNAL = 'internal'
@@ -112,11 +113,15 @@ def join(self, default):
112113
:param default: Default service identifier from the resource.
113114
:type default: :class:`~openstack.auth.service_filter.ServiceFilter`
114115
"""
116+
if default.version == self.UNVERSIONED:
117+
version = default.version
118+
else:
119+
version = self.version
115120
return ServiceFilter(service_type=default.service_type,
116121
visibility=self.visibility or default.visibility,
117122
region=self.region,
118123
service_name=self.service_name,
119-
version=self.version)
124+
version=version)
120125

121126
def match_service_type(self, service_type):
122127
"""Service types are equavilent."""
@@ -174,3 +179,12 @@ def get_service_module(self):
174179
is `object_store`.
175180
"""
176181
return self.__class__.__module__.split('.')[1]
182+
183+
def get_version(self, version):
184+
"""Get the desired version.
185+
186+
If the service does not have a version, use the suggested version.
187+
"""
188+
if self.version is None:
189+
return version
190+
return self.version

openstack/compute/compute_service.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ class ComputeService(service_filter.ServiceFilter):
1818

1919
valid_versions = [service_filter.ValidVersion('v2')]
2020

21-
def __init__(self):
21+
def __init__(self, version=None):
2222
"""Create an compute service."""
23-
super(ComputeService, self).__init__(service_type='compute')
23+
super(ComputeService, self).__init__(service_type='compute',
24+
version=version)

openstack/compute/version.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,9 @@ class Version(resource.Resource):
1818
resource_key = 'version'
1919
resources_key = 'versions'
2020
base_path = '/'
21-
service = compute_service.ComputeService()
21+
service = compute_service.ComputeService(
22+
version=compute_service.ComputeService.UNVERSIONED
23+
)
2224

2325
# capabilities
2426
allow_list = True

openstack/database/database_service.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ class DatabaseService(service_filter.ServiceFilter):
1818

1919
valid_versions = [service_filter.ValidVersion('v1')]
2020

21-
def __init__(self):
21+
def __init__(self, version=None):
2222
"""Create an database service."""
23-
super(DatabaseService, self).__init__(service_type='database')
23+
super(DatabaseService, self).__init__(service_type='database',
24+
version=version)

openstack/identity/version.py

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
# Licensed under the Apache License, Version 2.0 (the "License"); you may
2+
# not use this file except in compliance with the License. You may obtain
3+
# a copy of the License at
4+
#
5+
# http://www.apache.org/licenses/LICENSE-2.0
6+
#
7+
# Unless required by applicable law or agreed to in writing, software
8+
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
9+
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
10+
# License for the specific language governing permissions and limitations
11+
# under the License.
12+
13+
from openstack.identity import identity_service
14+
from openstack import resource
15+
16+
17+
class Version(resource.Resource):
18+
resource_key = 'version'
19+
resources_key = 'versions'
20+
base_path = '/'
21+
service = identity_service.IdentityService(
22+
version=identity_service.IdentityService.UNVERSIONED
23+
)
24+
25+
# capabilities
26+
allow_list = True
27+
28+
# Properties
29+
media_types = resource.prop('media-types')
30+
status = resource.prop('status')
31+
updated = resource.prop('updated')
32+
33+
@classmethod
34+
def list(cls, session, **params):
35+
resp = session.get(cls.base_path, service=cls.service, params=params)
36+
for data in resp.body[cls.resources_key]['values']:
37+
yield cls.existing(**data)

openstack/image/image_service.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ class ImageService(service_filter.ServiceFilter):
2121
service_filter.ValidVersion('v2'),
2222
]
2323

24-
def __init__(self):
24+
def __init__(self, version=None):
2525
"""Create an image service."""
26-
super(ImageService, self).__init__(service_type='image')
26+
super(ImageService, self).__init__(service_type='image',
27+
version=version)

openstack/keystore/keystore_service.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ class KeystoreService(service_filter.ServiceFilter):
1818

1919
valid_versions = [service_filter.ValidVersion('v1')]
2020

21-
def __init__(self):
21+
def __init__(self, version=None):
2222
"""Create an image service."""
23-
super(KeystoreService, self).__init__(service_type='keystore')
23+
super(KeystoreService, self).__init__(service_type='keystore',
24+
version=version)

openstack/network/network_service.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ class NetworkService(service_filter.ServiceFilter):
1818

1919
valid_versions = [service_filter.ValidVersion('v2', 'v2.0')]
2020

21-
def __init__(self):
21+
def __init__(self, version=None):
2222
"""Create an network service."""
23-
super(NetworkService, self).__init__(service_type='network')
23+
super(NetworkService, self).__init__(service_type='network',
24+
version=version)

openstack/network/version.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,9 @@ class Version(resource.Resource):
1818
resource_key = 'version'
1919
resources_key = 'versions'
2020
base_path = '/'
21-
service = network_service.NetworkService()
21+
service = network_service.NetworkService(
22+
version=network_service.NetworkService.UNVERSIONED
23+
)
2224

2325
# capabilities
2426
allow_list = True

0 commit comments

Comments
 (0)