v1-api: Adapted resouce/user api.
Added project-id support in resource api and source-id support in user api. Change-Id: I3295a36a4b3a57e9451cc042d542ead1354f8e61
This commit is contained in:
@@ -32,7 +32,12 @@ class UserManager(base.Manager):
|
|||||||
resource_class = User
|
resource_class = User
|
||||||
|
|
||||||
def list(self, **kwargs):
|
def list(self, **kwargs):
|
||||||
return self._list('/v1/users', 'users')
|
s = kwargs.get('source')
|
||||||
|
if s:
|
||||||
|
path = '/sources/%s/users' % (s)
|
||||||
|
else:
|
||||||
|
path = '/users'
|
||||||
|
return self._list('/v1%s' % path, 'users')
|
||||||
|
|
||||||
|
|
||||||
class Project(base.Resource):
|
class Project(base.Resource):
|
||||||
@@ -57,7 +62,7 @@ class ProjectManager(base.Manager):
|
|||||||
else:
|
else:
|
||||||
path = '/projects'
|
path = '/projects'
|
||||||
|
|
||||||
return self._list('/v1/%s' % path, 'projects')
|
return self._list('/v1%s' % path, 'projects')
|
||||||
|
|
||||||
|
|
||||||
class Resource(base.Resource):
|
class Resource(base.Resource):
|
||||||
@@ -74,11 +79,14 @@ class ResourceManager(base.Manager):
|
|||||||
def list(self, **kwargs):
|
def list(self, **kwargs):
|
||||||
u = kwargs.get('user_id')
|
u = kwargs.get('user_id')
|
||||||
s = kwargs.get('source')
|
s = kwargs.get('source')
|
||||||
|
p = kwargs.get('project_id')
|
||||||
opts = kwargs.get('metaquery')
|
opts = kwargs.get('metaquery')
|
||||||
if u:
|
if u:
|
||||||
path = '/users/%s/resources' % (u)
|
path = '/users/%s/resources' % (u)
|
||||||
elif s:
|
elif s:
|
||||||
path = '/sources/%s/resources' % (s)
|
path = '/sources/%s/resources' % (s)
|
||||||
|
elif p:
|
||||||
|
path = '/projects/%s/resources' % (p)
|
||||||
else:
|
else:
|
||||||
path = '/resources'
|
path = '/resources'
|
||||||
if opts:
|
if opts:
|
||||||
|
|||||||
@@ -71,9 +71,11 @@ def do_meter_list(cc, args={}):
|
|||||||
sortby=0)
|
sortby=0)
|
||||||
|
|
||||||
|
|
||||||
|
@utils.arg('-s', '--source', metavar='<SOURCE>',
|
||||||
|
help='ID of the resource to show projects for.')
|
||||||
def do_user_list(cc, args={}):
|
def do_user_list(cc, args={}):
|
||||||
'''List the users'''
|
'''List the users'''
|
||||||
kwargs = {}
|
kwargs = {'source': args.source}
|
||||||
users = cc.users.list(**kwargs)
|
users = cc.users.list(**kwargs)
|
||||||
field_labels = ['User ID']
|
field_labels = ['User ID']
|
||||||
fields = ['user_id']
|
fields = ['user_id']
|
||||||
@@ -85,10 +87,16 @@ def do_user_list(cc, args={}):
|
|||||||
help='ID of the resource to show for.')
|
help='ID of the resource to show for.')
|
||||||
@utils.arg('-u', '--user_id', metavar='<USER_ID>',
|
@utils.arg('-u', '--user_id', metavar='<USER_ID>',
|
||||||
help='ID of the user to show resources for.')
|
help='ID of the user to show resources for.')
|
||||||
|
@utils.arg('-p', '--project_id', metavar='<PROJECT_ID>',
|
||||||
|
help='ID of the project to show samples for.')
|
||||||
|
@utils.arg('-m', '--metaquery', metavar='<METAQUERY>',
|
||||||
|
help='Query into the metadata metadata.key=value:..')
|
||||||
def do_resource_list(cc, args={}):
|
def do_resource_list(cc, args={}):
|
||||||
'''List the users'''
|
'''List the users'''
|
||||||
kwargs = {'source': args.source,
|
kwargs = {'source': args.source,
|
||||||
'user_id': args.user_id}
|
'user_id': args.user_id,
|
||||||
|
'project_id': args.project_id,
|
||||||
|
'metaquery': args.metaquery}
|
||||||
resources = cc.resources.list(**kwargs)
|
resources = cc.resources.list(**kwargs)
|
||||||
|
|
||||||
field_labels = ['Resource ID', 'Source', 'User ID', 'Project ID']
|
field_labels = ['Resource ID', 'Source', 'User ID', 'Project ID']
|
||||||
|
|||||||
66
tests/v1/test_projects.py
Normal file
66
tests/v1/test_projects.py
Normal file
@@ -0,0 +1,66 @@
|
|||||||
|
# Copyright 2012 OpenStack LLC.
|
||||||
|
# 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 unittest
|
||||||
|
|
||||||
|
import ceilometerclient.v1.meters
|
||||||
|
from tests import utils
|
||||||
|
|
||||||
|
|
||||||
|
fixtures = {
|
||||||
|
'/v1/projects': {
|
||||||
|
'GET': (
|
||||||
|
{},
|
||||||
|
{'projects': [
|
||||||
|
'a',
|
||||||
|
'b',
|
||||||
|
]},
|
||||||
|
),
|
||||||
|
},
|
||||||
|
'/v1/sources/source_b/projects': {
|
||||||
|
'GET': (
|
||||||
|
{},
|
||||||
|
{'projects': [
|
||||||
|
'b',
|
||||||
|
]},
|
||||||
|
),
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
class ProjectManagerTest(unittest.TestCase):
|
||||||
|
|
||||||
|
def setUp(self):
|
||||||
|
self.api = utils.FakeAPI(fixtures)
|
||||||
|
self.mgr = ceilometerclient.v1.meters.ProjectManager(self.api)
|
||||||
|
|
||||||
|
def test_list_all(self):
|
||||||
|
projects = list(self.mgr.list())
|
||||||
|
expect = [
|
||||||
|
('GET', '/v1/projects', {}, None),
|
||||||
|
]
|
||||||
|
self.assertEqual(self.api.calls, expect)
|
||||||
|
self.assertEqual(len(projects), 2)
|
||||||
|
self.assertEqual(projects[0].project_id, 'a')
|
||||||
|
self.assertEqual(projects[1].project_id, 'b')
|
||||||
|
|
||||||
|
def test_list_by_source(self):
|
||||||
|
projects = list(self.mgr.list(source='source_b'))
|
||||||
|
expect = [
|
||||||
|
('GET', '/v1/sources/source_b/projects', {}, None),
|
||||||
|
]
|
||||||
|
self.assertEqual(self.api.calls, expect)
|
||||||
|
self.assertEqual(len(projects), 1)
|
||||||
|
self.assertEqual(projects[0].project_id, 'b')
|
||||||
@@ -26,7 +26,7 @@ fixtures = {
|
|||||||
{'resources': [
|
{'resources': [
|
||||||
{
|
{
|
||||||
'resource_id': 'a',
|
'resource_id': 'a',
|
||||||
'project_id': 'dig_the_ditch',
|
'project_id': 'project_bla',
|
||||||
'user_id': 'freddy',
|
'user_id': 'freddy',
|
||||||
'timestamp': 'now',
|
'timestamp': 'now',
|
||||||
'meter': ['this', 'that'],
|
'meter': ['this', 'that'],
|
||||||
@@ -73,6 +73,21 @@ fixtures = {
|
|||||||
]},
|
]},
|
||||||
),
|
),
|
||||||
},
|
},
|
||||||
|
'/v1/projects/project_bla/resources': {
|
||||||
|
'GET': (
|
||||||
|
{},
|
||||||
|
{'resources': [
|
||||||
|
{
|
||||||
|
'resource_id': 'a',
|
||||||
|
'project_id': 'project_bla',
|
||||||
|
'user_id': 'freddy',
|
||||||
|
'timestamp': 'now',
|
||||||
|
'meter': ['this', 'that'],
|
||||||
|
'metadata': {'zxc_id': 'bla'},
|
||||||
|
},
|
||||||
|
]},
|
||||||
|
),
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -109,3 +124,12 @@ class ResourceManagerTest(unittest.TestCase):
|
|||||||
self.assertEqual(self.api.calls, expect)
|
self.assertEqual(self.api.calls, expect)
|
||||||
self.assertEqual(len(resources), 1)
|
self.assertEqual(len(resources), 1)
|
||||||
self.assertEqual(resources[0].resource_id, 'b')
|
self.assertEqual(resources[0].resource_id, 'b')
|
||||||
|
|
||||||
|
def test_list_by_project(self):
|
||||||
|
resources = list(self.mgr.list(project_id='project_bla'))
|
||||||
|
expect = [
|
||||||
|
('GET', '/v1/projects/project_bla/resources', {}, None),
|
||||||
|
]
|
||||||
|
self.assertEqual(self.api.calls, expect)
|
||||||
|
self.assertEqual(len(resources), 1)
|
||||||
|
self.assertEqual(resources[0].resource_id, 'a')
|
||||||
|
|||||||
66
tests/v1/test_users.py
Normal file
66
tests/v1/test_users.py
Normal file
@@ -0,0 +1,66 @@
|
|||||||
|
# Copyright 2012 OpenStack LLC.
|
||||||
|
# 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 unittest
|
||||||
|
|
||||||
|
import ceilometerclient.v1.meters
|
||||||
|
from tests import utils
|
||||||
|
|
||||||
|
|
||||||
|
fixtures = {
|
||||||
|
'/v1/users': {
|
||||||
|
'GET': (
|
||||||
|
{},
|
||||||
|
{'users': [
|
||||||
|
'a',
|
||||||
|
'b',
|
||||||
|
]},
|
||||||
|
),
|
||||||
|
},
|
||||||
|
'/v1/sources/source_b/users': {
|
||||||
|
'GET': (
|
||||||
|
{},
|
||||||
|
{'users': [
|
||||||
|
'b',
|
||||||
|
]},
|
||||||
|
),
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
class UserManagerTest(unittest.TestCase):
|
||||||
|
|
||||||
|
def setUp(self):
|
||||||
|
self.api = utils.FakeAPI(fixtures)
|
||||||
|
self.mgr = ceilometerclient.v1.meters.UserManager(self.api)
|
||||||
|
|
||||||
|
def test_list_all(self):
|
||||||
|
users = list(self.mgr.list())
|
||||||
|
expect = [
|
||||||
|
('GET', '/v1/users', {}, None),
|
||||||
|
]
|
||||||
|
self.assertEqual(self.api.calls, expect)
|
||||||
|
self.assertEqual(len(users), 2)
|
||||||
|
self.assertEqual(users[0].user_id, 'a')
|
||||||
|
self.assertEqual(users[1].user_id, 'b')
|
||||||
|
|
||||||
|
def test_list_by_source(self):
|
||||||
|
users = list(self.mgr.list(source='source_b'))
|
||||||
|
expect = [
|
||||||
|
('GET', '/v1/sources/source_b/users', {}, None),
|
||||||
|
]
|
||||||
|
self.assertEqual(self.api.calls, expect)
|
||||||
|
self.assertEqual(len(users), 1)
|
||||||
|
self.assertEqual(users[0].user_id, 'b')
|
||||||
Reference in New Issue
Block a user