Add return-request-id-to-caller function(3/5)

Add return-request-id-to-caller function to
resources and resource managers in the following files.
The methods in the resource class and resource manager return
a wrapper class that has 'request_ids' property.
The caller can get request ids of the callee via the property.

* novaclient/v2/keypairs.py
* novaclient/v2/limits.py
* novaclient/v2/networks.py
* novaclient/v2/quota_classes.py
* novaclient/v2/quotas.py
* novaclient/v2/security_group_default_rules.py
* novaclient/v2/security_group_rules.py
* novaclient/v2/security_groups.py
* novaclient/v2/server_groups.py
* novaclient/v2/services.py
* novaclient/v2/usage.py
* novaclient/v2/versions.py

Co-authored-by: Ankit Agrawal <ankit11.agrawal@nttdata.com>
Change-Id: I9203f70a0eef5686b590fbff35563f2cf8b6f586
Implements: blueprint return-request-id-to-caller
This commit is contained in:
Takashi NATSUME 2015-12-25 12:34:02 +09:00
parent 0799238648
commit 0414bab3d3
27 changed files with 249 additions and 99 deletions

View File

@ -24,7 +24,7 @@ class V1(base.Fixture):
super(V1, self).setUp()
keypair = {'fingerprint': 'FAKE_KEYPAIR', 'name': 'test'}
headers = {'Content-Type': 'application/json'}
headers = self.json_headers
self.requests.register_uri('GET', self.url(),
json={'keypairs': [keypair]},
@ -34,7 +34,8 @@ class V1(base.Fixture):
json={'keypair': keypair},
headers=headers)
self.requests.register_uri('DELETE', self.url('test'), status_code=202)
self.requests.register_uri('DELETE', self.url('test'), status_code=202,
headers=headers)
def post_os_keypairs(request, context):
body = jsonutils.loads(request.body)

View File

@ -74,7 +74,7 @@ class Fixture(base.Fixture):
},
}
headers = {'Content-Type': 'application/json'}
headers = self.json_headers
self.requests.register_uri('GET', self.url(),
json=get_limits,
headers=headers)

View File

@ -33,7 +33,7 @@ class Fixture(base.Fixture):
]
}
headers = {'Content-Type': 'application/json'}
headers = self.json_headers
self.requests.register_uri('GET', self.url(),
json=get_os_networks,
@ -55,8 +55,10 @@ class Fixture(base.Fixture):
self.requests.register_uri('DELETE',
self.url('networkdelete'),
status_code=202)
status_code=202,
headers=headers)
for u in ('add', 'networkdisassociate/action', 'networktest/action',
'1/action', '2/action'):
self.requests.register_uri('POST', self.url(u), status_code=202)
self.requests.register_uri('POST', self.url(u), status_code=202,
headers=headers)

View File

@ -23,7 +23,7 @@ class V1(base.Fixture):
uuid = '97f4c221-bff4-4578-b030-0df4ef119353'
uuid2 = '97f4c221bff44578b0300df4ef119353'
test_json = {'quota_set': self.test_quota('test')}
self.headers = {'Content-Type': 'application/json'}
self.headers = self.json_headers
for u in ('test', 'tenant-id', 'tenant-id/defaults',
'%s/defaults' % uuid2):
@ -47,7 +47,8 @@ class V1(base.Fixture):
headers=self.headers)
for u in ('test', uuid2):
self.requests.register_uri('DELETE', self.url(u), status_code=202)
self.requests.register_uri('DELETE', self.url(u), status_code=202,
headers=self.headers)
def test_quota(self, tenant_id='test'):
return {

View File

@ -33,14 +33,15 @@ class Fixture(base.Fixture):
'cidr': '10.0.0.0/8'
}
headers = {'Content-Type': 'application/json'}
headers = self.json_headers
self.requests.register_uri('GET', self.url(),
json={'security_group_rules': [rule]},
headers=headers)
for u in (1, 11, 12):
self.requests.register_uri('DELETE', self.url(u), status_code=202)
self.requests.register_uri('DELETE', self.url(u), status_code=202,
headers=headers)
def post_rules(request, context):
body = jsonutils.loads(request.body)

View File

@ -62,7 +62,7 @@ class Fixture(base.Fixture):
}
get_groups = {'security_groups': [security_group_1, security_group_2]}
headers = {'Content-Type': 'application/json'}
headers = self.json_headers
self.requests.register_uri('GET', self.url(),
json=get_groups,
@ -73,7 +73,8 @@ class Fixture(base.Fixture):
json=get_group_1,
headers=headers)
self.requests.register_uri('DELETE', self.url(1), status_code=202)
self.requests.register_uri('DELETE', self.url(1), status_code=202,
headers=headers)
def post_os_security_groups(request, context):
body = jsonutils.loads(request.body)

View File

@ -52,7 +52,7 @@ class Fixture(base.Fixture):
}
]
headers = {'Content-Type': 'application/json'}
headers = self.json_headers
self.requests.register_uri('GET', self.url(),
json={'server_groups': server_groups},
@ -62,7 +62,8 @@ class Fixture(base.Fixture):
server_j = jsonutils.dumps({'server_group': server})
def _register(method, *args):
self.requests.register_uri(method, self.url(*args), text=server_j)
self.requests.register_uri(method, self.url(*args), text=server_j,
headers=headers)
_register('POST')
_register('POST', server['id'])
@ -71,4 +72,4 @@ class Fixture(base.Fixture):
_register('POST', server['id'], '/action')
self.requests.register_uri('DELETE', self.url(server['id']),
status_code=202)
status_code=202, headers=headers)

View File

@ -151,7 +151,7 @@ class FakeHTTPClient(base_client.HTTPClient):
"http://nova-api:8774/v2.1/190a755eef2e4aac9f06aa6be9786385")
def get_versions(self):
return (200, {}, {
return (200, FAKE_RESPONSE_HEADERS, {
"versions": [
{"status": "SUPPORTED", "updated": "2011-01-21T11:33:21Z",
"links": [{"href": "http://nova-api:8774/v2/",
@ -208,7 +208,7 @@ class FakeHTTPClient(base_client.HTTPClient):
raise AssertionError(
"Unknown endpoint_type:%s" % self.endpoint_type)
return (200, {}, versions[endpoint])
return (200, FAKE_RESPONSE_HEADERS, versions[endpoint])
#
# agents
@ -1402,7 +1402,7 @@ class FakeHTTPClient(base_client.HTTPClient):
#
def get_os_quota_class_sets_test(self, **kw):
return (200, {}, {
return (200, FAKE_RESPONSE_HEADERS, {
'quota_class_set': {
'id': 'test',
'metadata_items': 1,
@ -1589,7 +1589,7 @@ class FakeHTTPClient(base_client.HTTPClient):
# Tenant Usage
#
def get_os_simple_tenant_usage(self, **kw):
return (200, {},
return (200, FAKE_RESPONSE_HEADERS,
{six.u('tenant_usages'): [{
six.u('total_memory_mb_usage'): 25451.762807466665,
six.u('total_vcpus_usage'): 49.71047423333333,
@ -1615,7 +1615,7 @@ class FakeHTTPClient(base_client.HTTPClient):
six.u('total_local_gb_usage'): 0.0}]})
def get_os_simple_tenant_usage_tenantfoo(self, **kw):
return (200, {},
return (200, FAKE_RESPONSE_HEADERS,
{six.u('tenant_usage'): {
six.u('total_memory_mb_usage'): 25451.762807466665,
six.u('total_vcpus_usage'): 49.71047423333333,
@ -1756,44 +1756,47 @@ class FakeHTTPClient(base_client.HTTPClient):
def get_os_services(self, **kw):
host = kw.get('host', 'host1')
binary = kw.get('binary', 'nova-compute')
return (200, {}, {'services': [{'binary': binary,
'host': host,
'zone': 'nova',
'status': 'enabled',
'state': 'up',
'updated_at': datetime.datetime(
2012, 10, 29, 13, 42, 2)},
{'binary': binary,
'host': host,
'zone': 'nova',
'status': 'disabled',
'state': 'down',
'updated_at': datetime.datetime(
2012, 9, 18, 8, 3, 38)},
]})
return (200, FAKE_RESPONSE_HEADERS,
{'services': [{'binary': binary,
'host': host,
'zone': 'nova',
'status': 'enabled',
'state': 'up',
'updated_at': datetime.datetime(
2012, 10, 29, 13, 42, 2)},
{'binary': binary,
'host': host,
'zone': 'nova',
'status': 'disabled',
'state': 'down',
'updated_at': datetime.datetime(
2012, 9, 18, 8, 3, 38)},
]})
def put_os_services_enable(self, body, **kw):
return (200, {}, {'service': {'host': body['host'],
'binary': body['binary'],
'status': 'enabled'}})
return (200, FAKE_RESPONSE_HEADERS,
{'service': {'host': body['host'],
'binary': body['binary'],
'status': 'enabled'}})
def put_os_services_disable(self, body, **kw):
return (200, {}, {'service': {'host': body['host'],
'binary': body['binary'],
'status': 'disabled'}})
return (200, FAKE_RESPONSE_HEADERS,
{'service': {'host': body['host'],
'binary': body['binary'],
'status': 'disabled'}})
def put_os_services_disable_log_reason(self, body, **kw):
return (200, {}, {'service': {
return (200, FAKE_RESPONSE_HEADERS, {'service': {
'host': body['host'],
'binary': body['binary'],
'status': 'disabled',
'disabled_reason': body['disabled_reason']}})
def delete_os_services_1(self, **kw):
return (204, {}, None)
return (204, FAKE_RESPONSE_HEADERS, None)
def put_os_services_force_down(self, body, **kw):
return (200, {}, {'service': {
return (200, FAKE_RESPONSE_HEADERS, {'service': {
'host': body['host'],
'binary': body['binary'],
'forced_down': False}})

View File

@ -15,6 +15,7 @@ from novaclient import api_versions
from novaclient.tests.unit.fixture_data import client
from novaclient.tests.unit.fixture_data import keypairs as data
from novaclient.tests.unit import utils
from novaclient.tests.unit.v2 import fakes
from novaclient.v2 import keypairs
@ -36,23 +37,28 @@ class KeypairsTest(utils.FixturedTestCase):
def test_get_keypair(self):
kp = self.cs.keypairs.get('test')
self.assert_request_id(kp, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('GET', '/%s/test' % self.keypair_prefix)
self.assertIsInstance(kp, keypairs.Keypair)
self.assertEqual('test', kp.name)
def test_list_keypairs(self):
kps = self.cs.keypairs.list()
self.assert_request_id(kps, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('GET', '/%s' % self.keypair_prefix)
for kp in kps:
self.assertIsInstance(kp, keypairs.Keypair)
def test_delete_keypair(self):
kp = self.cs.keypairs.list()[0]
kp.delete()
ret = kp.delete()
self.assert_request_id(ret, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('DELETE', '/%s/test' % self.keypair_prefix)
self.cs.keypairs.delete('test')
ret = self.cs.keypairs.delete('test')
self.assert_request_id(ret, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('DELETE', '/%s/test' % self.keypair_prefix)
self.cs.keypairs.delete(kp)
ret = self.cs.keypairs.delete(kp)
self.assert_request_id(ret, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('DELETE', '/%s/test' % self.keypair_prefix)
@ -64,6 +70,7 @@ class KeypairsV2TestCase(KeypairsTest):
def test_create_keypair(self):
name = "foo"
kp = self.cs.keypairs.create(name)
self.assert_request_id(kp, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('POST', '/%s' % self.keypair_prefix,
body={'keypair': {'name': name}})
self.assertIsInstance(kp, keypairs.Keypair)
@ -72,6 +79,7 @@ class KeypairsV2TestCase(KeypairsTest):
name = "foo"
pub_key = "fake-public-key"
kp = self.cs.keypairs.create(name, pub_key)
self.assert_request_id(kp, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('POST', '/%s' % self.keypair_prefix,
body={'keypair': {'name': name,
'public_key': pub_key}})
@ -87,6 +95,7 @@ class KeypairsV22TestCase(KeypairsTest):
name = "foo"
key_type = "some_type"
kp = self.cs.keypairs.create(name, key_type=key_type)
self.assert_request_id(kp, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('POST', '/%s' % self.keypair_prefix,
body={'keypair': {'name': name,
'type': key_type}})
@ -96,6 +105,7 @@ class KeypairsV22TestCase(KeypairsTest):
name = "foo"
pub_key = "fake-public-key"
kp = self.cs.keypairs.create(name, pub_key)
self.assert_request_id(kp, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('POST', '/%s' % self.keypair_prefix,
body={'keypair': {'name': name,
'public_key': pub_key,

View File

@ -14,6 +14,7 @@
from novaclient.tests.unit.fixture_data import client
from novaclient.tests.unit.fixture_data import limits as data
from novaclient.tests.unit import utils
from novaclient.tests.unit.v2 import fakes
from novaclient.v2 import limits
@ -24,16 +25,19 @@ class LimitsTest(utils.FixturedTestCase):
def test_get_limits(self):
obj = self.cs.limits.get()
self.assert_request_id(obj, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('GET', '/limits')
self.assertIsInstance(obj, limits.Limits)
def test_get_limits_for_a_tenant(self):
obj = self.cs.limits.get(tenant_id=1234)
self.assert_request_id(obj, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('GET', '/limits?tenant_id=1234')
self.assertIsInstance(obj, limits.Limits)
def test_absolute_limits_reserved(self):
obj = self.cs.limits.get(reserved=True)
self.assert_request_id(obj, fakes.FAKE_REQUEST_ID_LIST)
expected = (
limits.AbsoluteLimit("maxTotalRAMSize", 51200),
@ -52,6 +56,7 @@ class LimitsTest(utils.FixturedTestCase):
def test_rate_absolute_limits(self):
obj = self.cs.limits.get()
self.assert_request_id(obj, fakes.FAKE_REQUEST_ID_LIST)
expected = (
limits.RateLimit('POST', '*', '.*', 10, 2, 'MINUTE',

View File

@ -14,6 +14,7 @@
from novaclient.tests.unit.fixture_data import client
from novaclient.tests.unit.fixture_data import networks as data
from novaclient.tests.unit import utils
from novaclient.tests.unit.v2 import fakes
from novaclient.v2 import networks
@ -24,21 +25,25 @@ class NetworksTest(utils.FixturedTestCase):
def test_list_networks(self):
fl = self.cs.networks.list()
self.assert_request_id(fl, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('GET', '/os-networks')
for f in fl:
self.assertIsInstance(f, networks.Network)
def test_get_network(self):
f = self.cs.networks.get(1)
self.assert_request_id(f, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('GET', '/os-networks/1')
self.assertIsInstance(f, networks.Network)
def test_delete(self):
self.cs.networks.delete('networkdelete')
ret = self.cs.networks.delete('networkdelete')
self.assert_request_id(ret, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('DELETE', '/os-networks/networkdelete')
def test_create(self):
f = self.cs.networks.create(label='foo')
self.assert_request_id(f, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('POST', '/os-networks',
{'network': {'label': 'foo'}})
self.assertIsInstance(f, networks.Network)
@ -70,38 +75,45 @@ class NetworksTest(utils.FixturedTestCase):
}
f = self.cs.networks.create(**params)
self.assert_request_id(f, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('POST', '/os-networks', {'network': params})
self.assertIsInstance(f, networks.Network)
def test_associate_project(self):
self.cs.networks.associate_project('networktest')
f = self.cs.networks.associate_project('networktest')
self.assert_request_id(f, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('POST', '/os-networks/add',
{'id': 'networktest'})
def test_associate_host(self):
self.cs.networks.associate_host('networktest', 'testHost')
f = self.cs.networks.associate_host('networktest', 'testHost')
self.assert_request_id(f, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('POST', '/os-networks/networktest/action',
{'associate_host': 'testHost'})
def test_disassociate(self):
self.cs.networks.disassociate('networkdisassociate')
f = self.cs.networks.disassociate('networkdisassociate')
self.assert_request_id(f, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('POST',
'/os-networks/networkdisassociate/action',
{'disassociate': None})
def test_disassociate_host_only(self):
self.cs.networks.disassociate('networkdisassociate', True, False)
f = self.cs.networks.disassociate('networkdisassociate', True, False)
self.assert_request_id(f, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('POST',
'/os-networks/networkdisassociate/action',
{'disassociate_host': None})
def test_disassociate_project(self):
self.cs.networks.disassociate('networkdisassociate', False, True)
f = self.cs.networks.disassociate('networkdisassociate', False, True)
self.assert_request_id(f, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('POST',
'/os-networks/networkdisassociate/action',
{'disassociate_project': None})
def test_add(self):
self.cs.networks.add('networkadd')
f = self.cs.networks.add('networkadd')
self.assert_request_id(f, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('POST', '/os-networks/add',
{'id': 'networkadd'})

View File

@ -24,11 +24,13 @@ class QuotaClassSetsTest(utils.TestCase):
def test_class_quotas_get(self):
class_name = 'test'
cs.quota_classes.get(class_name)
q = cs.quota_classes.get(class_name)
self.assert_request_id(q, fakes.FAKE_REQUEST_ID_LIST)
cs.assert_called('GET', '/os-quota-class-sets/%s' % class_name)
def test_update_quota(self):
q = cs.quota_classes.get('test')
self.assert_request_id(q, fakes.FAKE_REQUEST_ID_LIST)
q.update(cores=2)
cs.assert_called('PUT', '/os-quota-class-sets/test')

View File

@ -16,6 +16,7 @@
from novaclient.tests.unit.fixture_data import client
from novaclient.tests.unit.fixture_data import quotas as data
from novaclient.tests.unit import utils
from novaclient.tests.unit.v2 import fakes
class QuotaSetsTest(utils.FixturedTestCase):
@ -25,36 +26,42 @@ class QuotaSetsTest(utils.FixturedTestCase):
def test_tenant_quotas_get(self):
tenant_id = 'test'
self.cs.quotas.get(tenant_id)
q = self.cs.quotas.get(tenant_id)
self.assert_request_id(q, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('GET', '/os-quota-sets/%s' % tenant_id)
def test_user_quotas_get(self):
tenant_id = 'test'
user_id = 'fake_user'
self.cs.quotas.get(tenant_id, user_id=user_id)
q = self.cs.quotas.get(tenant_id, user_id=user_id)
self.assert_request_id(q, fakes.FAKE_REQUEST_ID_LIST)
url = '/os-quota-sets/%s?user_id=%s' % (tenant_id, user_id)
self.assert_called('GET', url)
def test_tenant_quotas_defaults(self):
tenant_id = '97f4c221bff44578b0300df4ef119353'
self.cs.quotas.defaults(tenant_id)
q = self.cs.quotas.defaults(tenant_id)
self.assert_request_id(q, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('GET', '/os-quota-sets/%s/defaults' % tenant_id)
def test_force_update_quota(self):
q = self.cs.quotas.get('97f4c221bff44578b0300df4ef119353')
q.update(cores=2, force=True)
qu = q.update(cores=2, force=True)
self.assert_request_id(qu, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called(
'PUT', '/os-quota-sets/97f4c221bff44578b0300df4ef119353',
{'quota_set': {'force': True, 'cores': 2}})
def test_quotas_delete(self):
tenant_id = 'test'
self.cs.quotas.delete(tenant_id)
ret = self.cs.quotas.delete(tenant_id)
self.assert_request_id(ret, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('DELETE', '/os-quota-sets/%s' % tenant_id)
def test_user_quotas_delete(self):
tenant_id = 'test'
user_id = 'fake_user'
self.cs.quotas.delete(tenant_id, user_id=user_id)
ret = self.cs.quotas.delete(tenant_id, user_id=user_id)
self.assert_request_id(ret, fakes.FAKE_REQUEST_ID_LIST)
url = '/os-quota-sets/%s?user_id=%s' % (tenant_id, user_id)
self.assert_called('DELETE', url)

View File

@ -15,6 +15,7 @@ from novaclient import exceptions
from novaclient.tests.unit.fixture_data import client
from novaclient.tests.unit.fixture_data import security_group_rules as data
from novaclient.tests.unit import utils
from novaclient.tests.unit.v2 import fakes
from novaclient.v2 import security_group_rules
@ -24,12 +25,14 @@ class SecurityGroupRulesTest(utils.FixturedTestCase):
data_fixture_class = data.Fixture
def test_delete_security_group_rule(self):
self.cs.security_group_rules.delete(1)
ret = self.cs.security_group_rules.delete(1)
self.assert_request_id(ret, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('DELETE', '/os-security-group-rules/1')
def test_create_security_group_rule(self):
sg = self.cs.security_group_rules.create(1, "tcp", 1, 65535,
"10.0.0.0/16")
self.assert_request_id(sg, fakes.FAKE_REQUEST_ID_LIST)
body = {
"security_group_rule": {
@ -48,6 +51,7 @@ class SecurityGroupRulesTest(utils.FixturedTestCase):
def test_create_security_group_group_rule(self):
sg = self.cs.security_group_rules.create(1, "tcp", 1, 65535,
"10.0.0.0/16", 101)
self.assert_request_id(sg, fakes.FAKE_REQUEST_ID_LIST)
body = {
"security_group_rule": {
@ -80,10 +84,12 @@ class SecurityGroupRulesTest(utils.FixturedTestCase):
def test_security_group_rule_str(self):
sg = self.cs.security_group_rules.create(1, "tcp", 1, 65535,
"10.0.0.0/16")
self.assert_request_id(sg, fakes.FAKE_REQUEST_ID_LIST)
self.assertEqual('1', str(sg))
def test_security_group_rule_del(self):
sg = self.cs.security_group_rules.create(1, "tcp", 1, 65535,
"10.0.0.0/16")
sg.delete()
ret = sg.delete()
self.assert_request_id(ret, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('DELETE', '/os-security-group-rules/1')

View File

@ -14,6 +14,7 @@
from novaclient.tests.unit.fixture_data import client
from novaclient.tests.unit.fixture_data import security_groups as data
from novaclient.tests.unit import utils
from novaclient.tests.unit.v2 import fakes
from novaclient.v2 import security_groups
@ -24,6 +25,7 @@ class SecurityGroupsTest(utils.FixturedTestCase):
def _do_test_list_security_groups(self, search_opts, path):
sgs = self.cs.security_groups.list(search_opts=search_opts)
self.assert_request_id(sgs, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('GET', path)
for sg in sgs:
self.assertIsInstance(sg, security_groups.SecurityGroup)
@ -42,27 +44,33 @@ class SecurityGroupsTest(utils.FixturedTestCase):
def test_get_security_groups(self):
sg = self.cs.security_groups.get(1)
self.assert_request_id(sg, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('GET', '/os-security-groups/1')
self.assertIsInstance(sg, security_groups.SecurityGroup)
self.assertEqual('1', str(sg))
def test_delete_security_group(self):
sg = self.cs.security_groups.list()[0]
sg.delete()
ret = sg.delete()
self.assert_request_id(ret, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('DELETE', '/os-security-groups/1')
self.cs.security_groups.delete(1)
ret = self.cs.security_groups.delete(1)
self.assert_request_id(ret, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('DELETE', '/os-security-groups/1')
self.cs.security_groups.delete(sg)
ret = self.cs.security_groups.delete(sg)
self.assert_request_id(ret, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('DELETE', '/os-security-groups/1')
def test_create_security_group(self):
sg = self.cs.security_groups.create("foo", "foo barr")
self.assert_request_id(sg, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('POST', '/os-security-groups')
self.assertIsInstance(sg, security_groups.SecurityGroup)
def test_update_security_group(self):
sg = self.cs.security_groups.list()[0]
secgroup = self.cs.security_groups.update(sg, "update", "update")
self.assert_request_id(secgroup, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('PUT', '/os-security-groups/1')
self.assertIsInstance(secgroup, security_groups.SecurityGroup)

View File

@ -16,6 +16,7 @@
from novaclient.tests.unit.fixture_data import client
from novaclient.tests.unit.fixture_data import server_groups as data
from novaclient.tests.unit import utils
from novaclient.tests.unit.v2 import fakes
from novaclient.v2 import server_groups
@ -26,6 +27,7 @@ class ServerGroupsTest(utils.FixturedTestCase):
def test_list_server_groups(self):
result = self.cs.server_groups.list()
self.assert_request_id(result, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('GET', '/os-server-groups')
for server_group in result:
self.assertIsInstance(server_group,
@ -33,6 +35,7 @@ class ServerGroupsTest(utils.FixturedTestCase):
def test_list_server_groups_with_all_projects(self):
result = self.cs.server_groups.list(all_projects=True)
self.assert_request_id(result, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('GET', '/os-server-groups?all_projects')
for server_group in result:
self.assertIsInstance(server_group,
@ -42,6 +45,7 @@ class ServerGroupsTest(utils.FixturedTestCase):
kwargs = {'name': 'ig1',
'policies': ['anti-affinity']}
server_group = self.cs.server_groups.create(**kwargs)
self.assert_request_id(server_group, fakes.FAKE_REQUEST_ID_LIST)
body = {'server_group': kwargs}
self.assert_called('POST', '/os-server-groups', body)
self.assertIsInstance(server_group,
@ -50,17 +54,20 @@ class ServerGroupsTest(utils.FixturedTestCase):
def test_get_server_group(self):
id = '2cbd51f4-fafe-4cdb-801b-cf913a6f288b'
server_group = self.cs.server_groups.get(id)
self.assert_request_id(server_group, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('GET', '/os-server-groups/%s' % id)
self.assertIsInstance(server_group,
server_groups.ServerGroup)
def test_delete_server_group(self):
id = '2cbd51f4-fafe-4cdb-801b-cf913a6f288b'
self.cs.server_groups.delete(id)
ret = self.cs.server_groups.delete(id)
self.assert_request_id(ret, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('DELETE', '/os-server-groups/%s' % id)
def test_delete_server_group_object(self):
id = '2cbd51f4-fafe-4cdb-801b-cf913a6f288b'
server_group = self.cs.server_groups.get(id)
server_group.delete()
ret = server_group.delete()
self.assert_request_id(ret, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('DELETE', '/os-server-groups/%s' % id)

View File

@ -33,6 +33,7 @@ class ServicesTest(utils.TestCase):
def test_list_services(self):
svs = self.cs.services.list()
self.assert_request_id(svs, fakes.FAKE_REQUEST_ID_LIST)
self.cs.assert_called('GET', '/os-services')
for s in svs:
self.assertIsInstance(s, self._get_service_type())
@ -42,6 +43,7 @@ class ServicesTest(utils.TestCase):
def test_list_services_with_hostname(self):
svs = self.cs.services.list(host='host2')
self.assert_request_id(svs, fakes.FAKE_REQUEST_ID_LIST)
self.cs.assert_called('GET', '/os-services?host=host2')
for s in svs:
self.assertIsInstance(s, self._get_service_type())
@ -50,6 +52,7 @@ class ServicesTest(utils.TestCase):
def test_list_services_with_binary(self):
svs = self.cs.services.list(binary='nova-cert')
self.assert_request_id(svs, fakes.FAKE_REQUEST_ID_LIST)
self.cs.assert_called('GET', '/os-services?binary=nova-cert')
for s in svs:
self.assertIsInstance(s, self._get_service_type())
@ -58,6 +61,7 @@ class ServicesTest(utils.TestCase):
def test_list_services_with_host_binary(self):
svs = self.cs.services.list(host='host2', binary='nova-cert')
self.assert_request_id(svs, fakes.FAKE_REQUEST_ID_LIST)
self.cs.assert_called('GET',
'/os-services?host=host2&binary=nova-cert')
for s in svs:
@ -74,17 +78,20 @@ class ServicesTest(utils.TestCase):
def test_services_enable(self):
service = self.cs.services.enable('host1', 'nova-cert')
self.assert_request_id(service, fakes.FAKE_REQUEST_ID_LIST)
values = self._update_body("host1", "nova-cert")
self.cs.assert_called('PUT', '/os-services/enable', values)
self.assertIsInstance(service, self._get_service_type())
self.assertEqual('enabled', service.status)
def test_services_delete(self):
self.cs.services.delete('1')
ret = self.cs.services.delete('1')
self.assert_request_id(ret, fakes.FAKE_REQUEST_ID_LIST)
self.cs.assert_called('DELETE', '/os-services/1')
def test_services_disable(self):
service = self.cs.services.disable('host1', 'nova-cert')
self.assert_request_id(service, fakes.FAKE_REQUEST_ID_LIST)
values = self._update_body("host1", "nova-cert")
self.cs.assert_called('PUT', '/os-services/disable', values)
self.assertIsInstance(service, self._get_service_type())
@ -93,6 +100,7 @@ class ServicesTest(utils.TestCase):
def test_services_disable_log_reason(self):
service = self.cs.services.disable_log_reason(
'compute1', 'nova-compute', 'disable bad host')
self.assert_request_id(service, fakes.FAKE_REQUEST_ID_LIST)
values = self._update_body("compute1", "nova-compute",
"disable bad host")
self.cs.assert_called('PUT', '/os-services/disable-log-reason', values)
@ -118,6 +126,7 @@ class ServicesV211TestCase(ServicesTest):
def test_services_force_down(self):
service = self.cs.services.force_down(
'compute1', 'nova-compute', False)
self.assert_request_id(service, fakes.FAKE_REQUEST_ID_LIST)
values = self._update_body("compute1", "nova-compute",
force_down=False)
self.cs.assert_called('PUT', '/os-services/force-down', values)

View File

@ -33,6 +33,7 @@ class UsageTest(utils.TestCase):
def test_usage_list(self, detailed=False):
now = datetime.datetime.now()
usages = self.cs.usage.list(now, now, detailed)
self.assert_request_id(usages, fakes.FAKE_REQUEST_ID_LIST)
self.cs.assert_called(
'GET',
@ -49,6 +50,7 @@ class UsageTest(utils.TestCase):
def test_usage_get(self):
now = datetime.datetime.now()
u = self.cs.usage.get("tenantfoo", now, now)
self.assert_request_id(u, fakes.FAKE_REQUEST_ID_LIST)
self.cs.assert_called(
'GET',

View File

@ -30,13 +30,15 @@ class VersionsTest(utils.TestCase):
@mock.patch.object(versions.VersionManager, '_is_session_client',
return_value=False)
def test_list_services_with_http_client(self, mock_is_session_client):
self.cs.versions.list()
vl = self.cs.versions.list()
self.assert_request_id(vl, fakes.FAKE_REQUEST_ID_LIST)
self.cs.assert_called('GET', None)
@mock.patch.object(versions.VersionManager, '_is_session_client',
return_value=True)
def test_list_services_with_session_client(self, mock_is_session_client):
self.cs.versions.list()
vl = self.cs.versions.list()
self.assert_request_id(vl, fakes.FAKE_REQUEST_ID_LIST)
self.cs.assert_called('GET', 'http://nova-api:8774/')
@mock.patch.object(versions.VersionManager, '_is_session_client',
@ -44,6 +46,8 @@ class VersionsTest(utils.TestCase):
@mock.patch.object(versions.VersionManager, 'list')
def test_get_current_with_http_client(self, mock_list,
mock_is_session_client):
headers = {'x-openstack-request-id': fakes.FAKE_REQUEST_ID}
resp = utils.TestResponse({"headers": headers})
current_version = versions.Version(
None, {"links": [{"href": "http://nova-api:8774/v2.1"}]},
loaded=True)
@ -58,14 +62,17 @@ class VersionsTest(utils.TestCase):
current_version,
versions.Version(
None, {"links": [{"href": "http://url/v21"}]}, loaded=True)]
mock_list.return_value = base.ListWithMeta(all_versions, None)
self.assertEqual(current_version, self.cs.versions.get_current())
mock_list.return_value = base.ListWithMeta(all_versions, resp)
v = self.cs.versions.get_current()
self.assert_request_id(v, fakes.FAKE_REQUEST_ID_LIST)
self.assertEqual(current_version, v)
@mock.patch.object(versions.VersionManager, '_is_session_client',
return_value=True)
def test_get_current_with_session_client(self, mock_is_session_client):
self.cs.callback = []
self.cs.versions.get_current()
v = self.cs.versions.get_current()
self.assert_request_id(v, fakes.FAKE_REQUEST_ID_LIST)
self.cs.assert_called('GET', 'http://nova-api:8774/v2.1/')
@mock.patch.object(versions.VersionManager, '_is_session_client',
@ -94,6 +101,7 @@ class VersionsTest(utils.TestCase):
cs_2_1 = fakes.FakeClient(endpoint_type=endpoint_type)
result = cs_2_1.versions.get_current()
self.assert_request_id(result, fakes.FAKE_REQUEST_ID_LIST)
self.assertEqual(result.manager.api.client.endpoint_type,
endpoint_type, "Check endpoint_type was set")
self.assertEqual(result.manager.api.client.management_url,
@ -112,6 +120,7 @@ class VersionsTest(utils.TestCase):
cs_2 = fakes.FakeClient(endpoint_type=endpoint_type)
result = cs_2.versions.get_current()
self.assert_request_id(result, fakes.FAKE_REQUEST_ID_LIST)
self.assertEqual(result.manager.api.client.endpoint_type,
endpoint_type, "Check v2 endpoint_type was set")
self.assertEqual(result.manager.api.client.management_url,

View File

@ -48,7 +48,12 @@ class Keypair(base.Resource):
return self.name
def delete(self):
self.manager.delete(self)
"""
Delete this keypair.
:returns: An instance of novaclient.base.TupleWithMeta
"""
return self.manager.delete(self)
class KeypairManager(base.ManagerWithFind):
@ -133,8 +138,9 @@ class KeypairManager(base.ManagerWithFind):
Delete a keypair
:param key: The :class:`Keypair` (or its ID) to delete.
:returns: An instance of novaclient.base.TupleWithMeta
"""
self._delete('/%s/%s' % (self.keypair_prefix, base.getid(key)))
return self._delete('/%s/%s' % (self.keypair_prefix, base.getid(key)))
@api_versions.wraps("2.10")
def delete(self, key, user_id=None):
@ -143,10 +149,11 @@ class KeypairManager(base.ManagerWithFind):
:param key: The :class:`Keypair` (or its ID) to delete.
:param user_id: Id of key-pair owner (Admin only).
:returns: An instance of novaclient.base.TupleWithMeta
"""
query_string = "?user_id=%s" % user_id if user_id else ""
url = '/%s/%s%s' % (self.keypair_prefix, base.getid(key), query_string)
self._delete(url)
return self._delete(url)
@api_versions.wraps("2.0", "2.9")
def list(self):

View File

@ -33,7 +33,12 @@ class Network(base.Resource):
return "<Network: %s>" % self.label
def delete(self):
self.manager.delete(self)
"""
Delete this network.
:returns: An instance of novaclient.base.TupleWithMeta
"""
return self.manager.delete(self)
class NetworkManager(base.ManagerWithFind):
@ -65,8 +70,9 @@ class NetworkManager(base.ManagerWithFind):
Delete a specific network.
:param network: The ID of the :class:`Network` to delete.
:returns: An instance of novaclient.base.TupleWithMeta
"""
self._delete("/os-networks/%s" % base.getid(network))
return self._delete("/os-networks/%s" % base.getid(network))
def create(self, **kwargs):
"""
@ -109,6 +115,7 @@ class NetworkManager(base.ManagerWithFind):
:param network: The ID of the :class:`Network`.
:param disassociate_host: Whether to disassociate the host
:param disassociate_project: Whether to disassociate the project
:returns: An instance of novaclient.base.TupleWithMeta
"""
if disassociate_host and disassociate_project:
body = {"disassociate": None}
@ -120,8 +127,10 @@ class NetworkManager(base.ManagerWithFind):
raise exceptions.CommandError(
_("Must disassociate either host or project or both"))
self.api.client.post("/os-networks/%s/action" %
base.getid(network), body=body)
resp, body = self.api.client.post("/os-networks/%s/action" %
base.getid(network), body=body)
return self.convert_into_with_meta(body, resp)
def associate_host(self, network, host):
"""
@ -129,10 +138,13 @@ class NetworkManager(base.ManagerWithFind):
:param network: The ID of the :class:`Network`.
:param host: The name of the host to associate the network with
:returns: An instance of novaclient.base.TupleWithMeta
"""
self.api.client.post("/os-networks/%s/action" %
base.getid(network),
body={"associate_host": host})
resp, body = self.api.client.post("/os-networks/%s/action" %
base.getid(network),
body={"associate_host": host})
return self.convert_into_with_meta(body, resp)
def associate_project(self, network):
"""
@ -141,8 +153,12 @@ class NetworkManager(base.ManagerWithFind):
The project is defined by the project authenticated against
:param network: The ID of the :class:`Network`.
:returns: An instance of novaclient.base.TupleWithMeta
"""
self.api.client.post("/os-networks/add", body={"id": network})
resp, body = self.api.client.post("/os-networks/add",
body={"id": network})
return self.convert_into_with_meta(body, resp)
def add(self, network=None):
"""
@ -150,7 +166,10 @@ class NetworkManager(base.ManagerWithFind):
automatically or provided explicitly.
:param network: The ID of the :class:`Network` to associate (optional).
:returns: An instance of novaclient.base.TupleWithMeta
"""
self.api.client.post(
"/os-networks/add",
body={"id": base.getid(network) if network else None})
resp, body = self.api.client.post("/os-networks/add",
body={"id": base.getid(network)
if network else None})
return self.convert_into_with_meta(body, resp)

View File

@ -61,8 +61,15 @@ class QuotaSetManager(base.Manager):
'quota_set')
def delete(self, tenant_id, user_id=None):
"""
Delete quota for a tenant or for a user.
:param tenant_id: A tenant for which quota is to be deleted
:param user_id: A user for which quota is to be deleted
:returns: An instance of novaclient.base.TupleWithMeta
"""
if user_id:
url = '/os-quota-sets/%s?user_id=%s' % (tenant_id, user_id)
else:
url = '/os-quota-sets/%s' % tenant_id
self._delete(url)
return self._delete(url)

View File

@ -24,7 +24,12 @@ class SecurityGroupDefaultRule(base.Resource):
return str(self.id)
def delete(self):
self.manager.delete(self)
"""
Delete this security group default rule.
:returns: An instance of novaclient.base.TupleWithMeta
"""
return self.manager.delete(self)
class SecurityGroupDefaultRuleManager(base.Manager):
@ -67,8 +72,10 @@ class SecurityGroupDefaultRuleManager(base.Manager):
Delete a security group default rule
:param rule: The security group default rule to delete (ID or Class)
:returns: An instance of novaclient.base.TupleWithMeta
"""
self._delete('/os-security-group-default-rules/%s' % base.getid(rule))
return self._delete('/os-security-group-default-rules/%s' %
base.getid(rule))
def list(self):
"""

View File

@ -27,7 +27,12 @@ class SecurityGroupRule(base.Resource):
return str(self.id)
def delete(self):
self.manager.delete(self)
"""
Delete this security group rule.
:returns: An instance of novaclient.base.TupleWithMeta
"""
return self.manager.delete(self)
class SecurityGroupRuleManager(base.Manager):
@ -74,5 +79,6 @@ class SecurityGroupRuleManager(base.Manager):
Delete a security group rule
:param rule: The security group rule to delete (ID or Class)
:returns: An instance of novaclient.base.TupleWithMeta
"""
self._delete('/os-security-group-rules/%s' % base.getid(rule))
return self._delete('/os-security-group-rules/%s' % base.getid(rule))

View File

@ -28,10 +28,20 @@ class SecurityGroup(base.Resource):
return str(self.id)
def delete(self):
self.manager.delete(self)
"""
Delete this security group.
:returns: An instance of novaclient.base.TupleWithMeta
"""
return self.manager.delete(self)
def update(self):
self.manager.update(self)
"""
Update this security group.
:returns: :class:`SecurityGroup`
"""
return self.manager.update(self)
class SecurityGroupManager(base.ManagerWithFind):
@ -66,9 +76,9 @@ class SecurityGroupManager(base.ManagerWithFind):
Delete a security group
:param group: The security group to delete (group or ID)
:rtype: None
:returns: An instance of novaclient.base.TupleWithMeta
"""
self._delete('/os-security-groups/%s' % base.getid(group))
return self._delete('/os-security-groups/%s' % base.getid(group))
def get(self, group_id):
"""

View File

@ -30,7 +30,12 @@ class ServerGroup(base.Resource):
return '<ServerGroup: %s>' % self.id
def delete(self):
self.manager.delete(self.id)
"""
Delete this server group.
:returns: An instance of novaclient.base.TupleWithMeta
"""
return self.manager.delete(self.id)
class ServerGroupsManager(base.ManagerWithFind):
@ -60,8 +65,9 @@ class ServerGroupsManager(base.ManagerWithFind):
"""Delete a specific server group.
:param id: The ID of the :class:`ServerGroup` to delete.
:returns: An instance of novaclient.base.TupleWithMeta
"""
self._delete('/os-server-groups/%s' % id)
return self._delete('/os-server-groups/%s' % id)
def create(self, **kwargs):
"""Create (allocate) a server group.

View File

@ -76,6 +76,7 @@ class VersionManager(base.ManagerWithFind):
for version in all_versions:
for link in version.links:
if link["href"].rstrip('/') == url:
version.append_request_ids(all_versions.request_ids)
return version
def get_current(self):