Add versions list function

This patch add a function to query the Glance API versions.

DocImpact

Change-Id: I21eeaee3db4ae23f608b68bb319772ac612975b4
Closes-bug: #1511180
This commit is contained in:
wangxiyuan 2015-10-29 17:50:36 +08:00
parent 4969251288
commit 1f1934eb82
6 changed files with 211 additions and 0 deletions

View File

@ -0,0 +1,79 @@
# Copyright 2015 OpenStack Foundation
# Copyright 2015 Huawei Corp.
# All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
import testtools
from glanceclient.tests import utils
import glanceclient.v1.versions
fixtures = {
'/versions': {
'GET': (
{},
{"versions": [
{
"status": "EXPERIMENTAL",
"id": "v3.0",
"links": [
{
"href": "http://10.229.45.145:9292/v3/",
"rel": "self"
}
]
},
{
"status": "CURRENT",
"id": "v2.3",
"links": [
{
"href": "http://10.229.45.145:9292/v2/",
"rel": "self"
}
]
},
{
"status": "SUPPORTED",
"id": "v1.0",
"links": [
{
"href": "http://10.229.45.145:9292/v1/",
"rel": "self"
}
]
}
]}
)
}
}
class TestVersions(testtools.TestCase):
def setUp(self):
super(TestVersions, self).setUp()
self.api = utils.FakeAPI(fixtures)
self.mgr = glanceclient.v1.versions.VersionManager(self.api)
def test_version_list(self):
versions = self.mgr.list()
expect = [('GET', '/versions', {}, None)]
self.assertEqual(expect, self.api.calls)
self.assertEqual(3, len(versions))
self.assertEqual('v3.0', versions[0]['id'])
self.assertEqual('EXPERIMENTAL', versions[0]['status'])
self.assertEqual([{"href": "http://10.229.45.145:9292/v3/",
"rel": "self"}], versions[0]['links'])

View File

@ -0,0 +1,75 @@
# Copyright 2015 OpenStack Foundation
# Copyright 2015 Huawei Corp.
# All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
import testtools
from glanceclient.tests import utils
from glanceclient.v2 import versions
fixtures = {
'/versions': {
'GET': (
{},
{"versions": [
{
"status": "EXPERIMENTAL",
"id": "v3.0",
"links": [
{
"href": "http://10.229.45.145:9292/v3/",
"rel": "self"
}
]
},
{
"status": "CURRENT",
"id": "v2.3",
"links": [
{
"href": "http://10.229.45.145:9292/v2/",
"rel": "self"
}
]
},
{
"status": "SUPPORTED",
"id": "v1.0",
"links": [
{
"href": "http://10.229.45.145:9292/v1/",
"rel": "self"
}
]
}
]}
)
}
}
class TestVersions(testtools.TestCase):
def setUp(self):
super(TestVersions, self).setUp()
self.api = utils.FakeAPI(fixtures)
self.controller = versions.VersionController(self.api)
def test_version_list(self):
version = list(self.controller.list())
self.assertEqual('v3.0', version[0]['id'])
self.assertEqual('EXPERIMENTAL', version[0]['status'])
self.assertEqual([{"href": "http://10.229.45.145:9292/v3/",
"rel": "self"}], version[0]['links'])

View File

@ -17,6 +17,7 @@ from glanceclient.common import http
from glanceclient.common import utils from glanceclient.common import utils
from glanceclient.v1 import image_members from glanceclient.v1 import image_members
from glanceclient.v1 import images from glanceclient.v1 import images
from glanceclient.v1 import versions
class Client(object): class Client(object):
@ -37,3 +38,4 @@ class Client(object):
self.http_client = http.get_http_client(endpoint=endpoint, **kwargs) self.http_client = http.get_http_client(endpoint=endpoint, **kwargs)
self.images = images.ImageManager(self.http_client) self.images = images.ImageManager(self.http_client)
self.image_members = image_members.ImageMemberManager(self.http_client) self.image_members = image_members.ImageMemberManager(self.http_client)
self.versions = versions.VersionManager(self.http_client)

View File

@ -0,0 +1,26 @@
# Copyright 2015 OpenStack Foundation
# Copyright 2015 Huawei Corp.
# All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
from glanceclient.openstack.common.apiclient import base
class VersionManager(base.ManagerWithFind):
def list(self):
"""List all versions."""
url = '/versions'
resp, body = self.client.get(url)
return body.get('versions', None)

View File

@ -22,6 +22,7 @@ from glanceclient.v2 import images
from glanceclient.v2 import metadefs from glanceclient.v2 import metadefs
from glanceclient.v2 import schemas from glanceclient.v2 import schemas
from glanceclient.v2 import tasks from glanceclient.v2 import tasks
from glanceclient.v2 import versions
class Client(object): class Client(object):
@ -63,3 +64,5 @@ class Client(object):
self.metadefs_namespace = ( self.metadefs_namespace = (
metadefs.NamespaceController(self.http_client, self.schemas)) metadefs.NamespaceController(self.http_client, self.schemas))
self.versions = versions.VersionController(self.http_client)

View File

@ -0,0 +1,26 @@
# Copyright 2015 OpenStack Foundation
# Copyright 2015 Huawei Corp.
# All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
class VersionController(object):
def __init__(self, http_client):
self.http_client = http_client
def list(self):
"""List all versions."""
url = '/versions'
resp, body = self.http_client.get(url)
return body.get('versions', None)