Add return-request-id-to-caller function(2/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/agents.py
* novaclient/v2/aggregates.py
* novaclient/v2/availability_zones.py
* novaclient/v2/certs.py
* novaclient/v2/cloudpipe.py
* novaclient/v2/fixed_ips.py
* novaclient/v2/flavor_access.py
* novaclient/v2/flavors.py
* novaclient/v2/floating_ip_dns.py
* novaclient/v2/floating_ip_pools.py
* novaclient/v2/floating_ips_bulk.py
* novaclient/v2/floating_ips.py
* novaclient/v2/fping.py
* novaclient/v2/hosts.py
* novaclient/v2/hypervisors.py
* novaclient/v2/images.py

Co-authored-by: Ankit Agrawal <ankit11.agrawal@nttdata.com>
Change-Id: Ic624d532f1a468dd45105bbb5aa6d8a730984338
Implements: blueprint return-request-id-to-caller
This commit is contained in:
Takashi NATSUME 2015-12-25 11:55:05 +09:00
parent f9aa277c62
commit f194a5abad
32 changed files with 328 additions and 93 deletions

View File

@ -49,4 +49,5 @@ class Fixture(base.Fixture):
json=get_aggregates_1,
headers=self.json_headers)
self.requests.register_uri('DELETE', self.url(1), status_code=202)
self.requests.register_uri('DELETE', self.url(1), status_code=202,
headers=self.json_headers)

View File

@ -83,10 +83,11 @@ class DNSFixture(base.Fixture):
headers=self.json_headers,
status_code=205)
self.requests.register_uri('DELETE', self.url('testdomain'))
self.requests.register_uri('DELETE', self.url('testdomain'),
headers=self.json_headers)
url = self.url('testdomain', 'entries', 'testname')
self.requests.register_uri('DELETE', url)
self.requests.register_uri('DELETE', url, headers=self.json_headers)
def put_dns_testdomain_entries_testname(request, context):
body = jsonutils.loads(request.body)

View File

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

View File

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

View File

@ -30,7 +30,7 @@ class V1(base.Fixture):
]
}
headers = {'Content-Type': 'application/json'}
headers = self.json_headers
self.requests.register_uri('GET', self.url(),
json=get_images,
@ -78,7 +78,8 @@ class V1(base.Fixture):
headers=headers)
for u in (1, '1/metadata/test_key'):
self.requests.register_uri('DELETE', self.url(u), status_code=204)
self.requests.register_uri('DELETE', self.url(u), status_code=204,
headers=headers)
class V3(V1):

View File

@ -809,7 +809,7 @@ class FakeHTTPClient(base_client.HTTPClient):
if k not in ['id', 'name']:
del flavor[k]
return (200, {}, flavors)
return (200, FAKE_RESPONSE_HEADERS, flavors)
def get_flavors_detail(self, **kw):
flavors = {'flavors': [
@ -852,12 +852,12 @@ class FakeHTTPClient(base_client.HTTPClient):
if not v['os-flavor-access:is_public']
]
return (200, {}, flavors)
return (200, FAKE_RESPONSE_HEADERS, flavors)
def get_flavors_1(self, **kw):
return (
200,
{},
FAKE_RESPONSE_HEADERS,
{'flavor':
self.get_flavors_detail(is_public='None')[2]['flavors'][0]}
)
@ -874,7 +874,7 @@ class FakeHTTPClient(base_client.HTTPClient):
# Diablo has no ephemeral
return (
200,
{},
FAKE_RESPONSE_HEADERS,
{'flavor': {
'id': 3,
'name': '256 MB Server',
@ -896,7 +896,7 @@ class FakeHTTPClient(base_client.HTTPClient):
# Alphanumeric flavor id are allowed.
return (
200,
{},
FAKE_RESPONSE_HEADERS,
{'flavor':
self.get_flavors_detail(is_public='None')[2]['flavors'][3]}
)
@ -910,15 +910,15 @@ class FakeHTTPClient(base_client.HTTPClient):
)
def delete_flavors_flavordelete(self, **kw):
return (202, {}, None)
return (202, FAKE_RESPONSE_HEADERS, None)
def delete_flavors_2(self, **kw):
return (202, {}, None)
return (202, FAKE_RESPONSE_HEADERS, None)
def post_flavors(self, body, **kw):
return (
202,
{},
FAKE_RESPONSE_HEADERS,
{'flavor':
self.get_flavors_detail(is_public='None')[2]['flavors'][0]}
)
@ -952,7 +952,7 @@ class FakeHTTPClient(base_client.HTTPClient):
required=['k1'])
return (
200,
{},
FAKE_RESPONSE_HEADERS,
{'extra_specs': {"k1": "v1"}})
def post_flavors_4_os_extra_specs(self, body, **kw):
@ -960,7 +960,7 @@ class FakeHTTPClient(base_client.HTTPClient):
return (
200,
{},
FAKE_RESPONSE_HEADERS,
body)
def delete_flavors_1_os_extra_specs_k1(self, **kw):
@ -975,12 +975,13 @@ class FakeHTTPClient(base_client.HTTPClient):
def get_flavors_2_os_flavor_access(self, **kw):
return (
200, {},
200, FAKE_RESPONSE_HEADERS,
{'flavor_access': [{'flavor_id': '2', 'tenant_id': 'proj1'},
{'flavor_id': '2', 'tenant_id': 'proj2'}]})
def post_flavors_2_action(self, body, **kw):
return (202, {}, self.get_flavors_2_os_flavor_access()[2])
return (202, FAKE_RESPONSE_HEADERS,
self.get_flavors_2_os_flavor_access()[2])
#
# Floating IPs

View File

@ -16,6 +16,7 @@
from novaclient.tests.unit.fixture_data import agents as data
from novaclient.tests.unit.fixture_data import client
from novaclient.tests.unit import utils
from novaclient.tests.unit.v2 import fakes
from novaclient.v2 import agents
@ -50,7 +51,8 @@ class AgentsTest(utils.FixturedTestCase):
]
}
headers = {'Content-Type': 'application/json'}
headers = {'Content-Type': 'application/json',
'x-openstack-request-id': fakes.FAKE_REQUEST_ID}
self.requests.register_uri('GET', self.data_fixture.url(),
json=get_os_agents,
headers=headers)
@ -59,6 +61,7 @@ class AgentsTest(utils.FixturedTestCase):
self.stub_hypervisors()
ags = self.cs.agents.list()
self.assert_called('GET', '/os-agents')
self.assert_request_id(ags, fakes.FAKE_REQUEST_ID_LIST)
for a in ags:
self.assertIsInstance(a, agents.Agent)
self.assertEqual('kvm', a.hypervisor)
@ -67,6 +70,7 @@ class AgentsTest(utils.FixturedTestCase):
self.stub_hypervisors('xen')
ags = self.cs.agents.list('xen')
self.assert_called('GET', '/os-agents?hypervisor=xen')
self.assert_request_id(ags, fakes.FAKE_REQUEST_ID_LIST)
for a in ags:
self.assertIsInstance(a, agents.Agent)
self.assertEqual('xen', a.hypervisor)
@ -76,6 +80,7 @@ class AgentsTest(utils.FixturedTestCase):
'/xxx/xxx/xxx',
'add6bb58e139be103324d04d82d8f546',
'xen')
self.assert_request_id(ag, fakes.FAKE_REQUEST_ID_LIST)
body = {'agent': {'url': '/xxx/xxx/xxx',
'hypervisor': 'xen',
'md5hash': 'add6bb58e139be103324d04d82d8f546',
@ -86,7 +91,8 @@ class AgentsTest(utils.FixturedTestCase):
self.assertEqual(1, ag._info.copy()['id'])
def test_agents_delete(self):
self.cs.agents.delete('1')
ret = self.cs.agents.delete('1')
self.assert_request_id(ret, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('DELETE', '/os-agents/1')
def _build_example_update_body(self):
@ -99,6 +105,7 @@ class AgentsTest(utils.FixturedTestCase):
ag = self.cs.agents.update('1', '8.0',
'/yyy/yyyy/yyyy',
'add6bb58e139be103324d04d82d8f546')
self.assert_request_id(ag, fakes.FAKE_REQUEST_ID_LIST)
body = self._build_example_update_body()
self.assert_called('PUT', '/os-agents/1', body)
self.assertEqual(1, ag.id)

View File

@ -16,6 +16,7 @@
from novaclient.tests.unit.fixture_data import aggregates as data
from novaclient.tests.unit.fixture_data import client
from novaclient.tests.unit import utils
from novaclient.tests.unit.v2 import fakes
from novaclient.v2 import aggregates
@ -28,6 +29,7 @@ class AggregatesTest(utils.FixturedTestCase):
def test_list_aggregates(self):
result = self.cs.aggregates.list()
self.assert_request_id(result, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('GET', '/os-aggregates')
for aggregate in result:
self.assertIsInstance(aggregate, aggregates.Aggregate)
@ -35,24 +37,29 @@ class AggregatesTest(utils.FixturedTestCase):
def test_create_aggregate(self):
body = {"aggregate": {"name": "test", "availability_zone": "nova1"}}
aggregate = self.cs.aggregates.create("test", "nova1")
self.assert_request_id(aggregate, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('POST', '/os-aggregates', body)
self.assertIsInstance(aggregate, aggregates.Aggregate)
def test_get(self):
aggregate = self.cs.aggregates.get("1")
self.assert_request_id(aggregate, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('GET', '/os-aggregates/1')
self.assertIsInstance(aggregate, aggregates.Aggregate)
aggregate2 = self.cs.aggregates.get(aggregate)
self.assert_request_id(aggregate2, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('GET', '/os-aggregates/1')
self.assertIsInstance(aggregate2, aggregates.Aggregate)
def test_get_details(self):
aggregate = self.cs.aggregates.get_details("1")
self.assert_request_id(aggregate, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('GET', '/os-aggregates/1')
self.assertIsInstance(aggregate, aggregates.Aggregate)
aggregate2 = self.cs.aggregates.get_details(aggregate)
self.assert_request_id(aggregate2, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('GET', '/os-aggregates/1')
self.assertIsInstance(aggregate2, aggregates.Aggregate)
@ -62,10 +69,12 @@ class AggregatesTest(utils.FixturedTestCase):
body = {"aggregate": values}
result1 = aggregate.update(values)
self.assert_request_id(result1, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('PUT', '/os-aggregates/1', body)
self.assertIsInstance(result1, aggregates.Aggregate)
result2 = self.cs.aggregates.update(2, values)
self.assert_request_id(result2, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('PUT', '/os-aggregates/2', body)
self.assertIsInstance(result2, aggregates.Aggregate)
@ -75,6 +84,7 @@ class AggregatesTest(utils.FixturedTestCase):
body = {"aggregate": values}
result3 = self.cs.aggregates.update(aggregate, values)
self.assert_request_id(result3, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('PUT', '/os-aggregates/1', body)
self.assertIsInstance(result3, aggregates.Aggregate)
@ -84,14 +94,17 @@ class AggregatesTest(utils.FixturedTestCase):
body = {"add_host": {"host": "host1"}}
result1 = aggregate.add_host(host)
self.assert_request_id(result1, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('POST', '/os-aggregates/1/action', body)
self.assertIsInstance(result1, aggregates.Aggregate)
result2 = self.cs.aggregates.add_host("2", host)
self.assert_request_id(result2, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('POST', '/os-aggregates/2/action', body)
self.assertIsInstance(result2, aggregates.Aggregate)
result3 = self.cs.aggregates.add_host(aggregate, host)
self.assert_request_id(result3, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('POST', '/os-aggregates/1/action', body)
self.assertIsInstance(result3, aggregates.Aggregate)
@ -101,14 +114,17 @@ class AggregatesTest(utils.FixturedTestCase):
body = {"remove_host": {"host": "host1"}}
result1 = aggregate.remove_host(host)
self.assert_request_id(result1, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('POST', '/os-aggregates/1/action', body)
self.assertIsInstance(result1, aggregates.Aggregate)
result2 = self.cs.aggregates.remove_host("2", host)
self.assert_request_id(result2, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('POST', '/os-aggregates/2/action', body)
self.assertIsInstance(result2, aggregates.Aggregate)
result3 = self.cs.aggregates.remove_host(aggregate, host)
self.assert_request_id(result3, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('POST', '/os-aggregates/1/action', body)
self.assertIsInstance(result3, aggregates.Aggregate)
@ -118,24 +134,30 @@ class AggregatesTest(utils.FixturedTestCase):
body = {"set_metadata": {"metadata": metadata}}
result1 = aggregate.set_metadata(metadata)
self.assert_request_id(result1, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('POST', '/os-aggregates/1/action', body)
self.assertIsInstance(result1, aggregates.Aggregate)
result2 = self.cs.aggregates.set_metadata(2, metadata)
self.assert_request_id(result2, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('POST', '/os-aggregates/2/action', body)
self.assertIsInstance(result2, aggregates.Aggregate)
result3 = self.cs.aggregates.set_metadata(aggregate, metadata)
self.assert_request_id(result3, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('POST', '/os-aggregates/1/action', body)
self.assertIsInstance(result3, aggregates.Aggregate)
def test_delete_aggregate(self):
aggregate = self.cs.aggregates.list()[0]
aggregate.delete()
result1 = aggregate.delete()
self.assert_request_id(result1, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('DELETE', '/os-aggregates/1')
self.cs.aggregates.delete('1')
result2 = self.cs.aggregates.delete('1')
self.assert_request_id(result2, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('DELETE', '/os-aggregates/1')
self.cs.aggregates.delete(aggregate)
result3 = self.cs.aggregates.delete(aggregate)
self.assert_request_id(result3, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('DELETE', '/os-aggregates/1')

View File

@ -19,6 +19,7 @@ import six
from novaclient.tests.unit.fixture_data import availability_zones as data
from novaclient.tests.unit.fixture_data import client
from novaclient.tests.unit import utils
from novaclient.tests.unit.v2 import fakes
from novaclient.v2 import availability_zones
@ -45,6 +46,7 @@ class AvailabilityZoneTest(utils.FixturedTestCase):
def test_list_availability_zone(self):
zones = self.cs.availability_zones.list(detailed=False)
self.assert_request_id(zones, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('GET', '/os-availability-zone')
for zone in zones:
@ -65,6 +67,7 @@ class AvailabilityZoneTest(utils.FixturedTestCase):
def test_detail_availability_zone(self):
zones = self.cs.availability_zones.list(detailed=True)
self.assert_request_id(zones, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('GET', '/os-availability-zone/detail')
for zone in zones:

View File

@ -14,6 +14,7 @@
from novaclient.tests.unit.fixture_data import certs as data
from novaclient.tests.unit.fixture_data import client
from novaclient.tests.unit import utils
from novaclient.tests.unit.v2 import fakes
from novaclient.v2 import certs
@ -27,10 +28,12 @@ class CertsTest(utils.FixturedTestCase):
def test_create_cert(self):
cert = self.cs.certs.create()
self.assert_request_id(cert, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('POST', '/os-certificates')
self.assertIsInstance(cert, self.cert_type)
def test_get_root_cert(self):
cert = self.cs.certs.get()
self.assert_request_id(cert, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('GET', '/os-certificates/root')
self.assertIsInstance(cert, self.cert_type)

View File

@ -16,6 +16,7 @@ import six
from novaclient.tests.unit.fixture_data import client
from novaclient.tests.unit.fixture_data import cloudpipe as data
from novaclient.tests.unit import utils
from novaclient.tests.unit.v2 import fakes
from novaclient.v2 import cloudpipe
@ -28,6 +29,7 @@ class CloudpipeTest(utils.FixturedTestCase):
def test_list_cloudpipes(self):
cp = self.cs.cloudpipe.list()
self.assert_request_id(cp, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('GET', '/os-cloudpipe')
for c in cp:
self.assertIsInstance(c, cloudpipe.Cloudpipe)
@ -35,12 +37,14 @@ class CloudpipeTest(utils.FixturedTestCase):
def test_create(self):
project = "test"
cp = self.cs.cloudpipe.create(project)
self.assert_request_id(cp, fakes.FAKE_REQUEST_ID_LIST)
body = {'cloudpipe': {'project_id': project}}
self.assert_called('POST', '/os-cloudpipe', body)
self.assertIsInstance(cp, six.string_types)
def test_update(self):
self.cs.cloudpipe.update("192.168.1.1", 2345)
cp = self.cs.cloudpipe.update("192.168.1.1", 2345)
self.assert_request_id(cp, fakes.FAKE_REQUEST_ID_LIST)
body = {'configure_project': {'vpn_ip': "192.168.1.1",
'vpn_port': 2345}}
self.assert_called('PUT', '/os-cloudpipe/configure-project', body)

View File

@ -16,6 +16,7 @@
from novaclient.tests.unit.fixture_data import client
from novaclient.tests.unit.fixture_data import fixedips as data
from novaclient.tests.unit import utils
from novaclient.tests.unit.v2 import fakes
class FixedIpsTest(utils.FixturedTestCase):
@ -27,6 +28,7 @@ class FixedIpsTest(utils.FixturedTestCase):
def test_get_fixed_ip(self):
info = self.cs.fixed_ips.get(fixed_ip='192.168.1.1')
self.assert_request_id(info, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('GET', '/os-fixed-ips/192.168.1.1')
self.assertEqual('192.168.1.0/24', info.cidr)
self.assertEqual('192.168.1.1', info.address)
@ -35,10 +37,12 @@ class FixedIpsTest(utils.FixturedTestCase):
def test_reserve_fixed_ip(self):
body = {"reserve": None}
self.cs.fixed_ips.reserve(fixed_ip='192.168.1.1')
fixedip = self.cs.fixed_ips.reserve(fixed_ip='192.168.1.1')
self.assert_request_id(fixedip, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('POST', '/os-fixed-ips/192.168.1.1/action', body)
def test_unreserve_fixed_ip(self):
body = {"unreserve": None}
self.cs.fixed_ips.unreserve(fixed_ip='192.168.1.1')
fixedip = self.cs.fixed_ips.unreserve(fixed_ip='192.168.1.1')
self.assert_request_id(fixedip, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('POST', '/os-fixed-ips/192.168.1.1/action', body)

View File

@ -26,6 +26,7 @@ class FlavorAccessTest(utils.TestCase):
def test_list_access_by_flavor_private(self):
kwargs = {'flavor': cs.flavors.get(2)}
r = cs.flavor_access.list(**kwargs)
self.assert_request_id(r, fakes.FAKE_REQUEST_ID_LIST)
cs.assert_called('GET', '/flavors/2/os-flavor-access')
for a in r:
self.assertIsInstance(a, flavor_access.FlavorAccess)
@ -34,6 +35,7 @@ class FlavorAccessTest(utils.TestCase):
flavor = cs.flavors.get(2)
tenant = 'proj2'
r = cs.flavor_access.add_tenant_access(flavor, tenant)
self.assert_request_id(r, fakes.FAKE_REQUEST_ID_LIST)
body = {
"addTenantAccess": {
@ -49,6 +51,7 @@ class FlavorAccessTest(utils.TestCase):
flavor = cs.flavors.get(2)
tenant = 'proj2'
r = cs.flavor_access.remove_tenant_access(flavor, tenant)
self.assert_request_id(r, fakes.FAKE_REQUEST_ID_LIST)
body = {
"removeTenantAccess": {

View File

@ -15,6 +15,7 @@
import mock
from novaclient import base
from novaclient import exceptions
from novaclient.tests.unit import utils
from novaclient.tests.unit.v2 import fakes
@ -35,45 +36,53 @@ class FlavorsTest(utils.TestCase):
def test_list_flavors(self):
fl = self.cs.flavors.list()
self.assert_request_id(fl, fakes.FAKE_REQUEST_ID_LIST)
self.cs.assert_called('GET', '/flavors/detail')
for flavor in fl:
self.assertIsInstance(flavor, self.flavor_type)
def test_list_flavors_undetailed(self):
fl = self.cs.flavors.list(detailed=False)
self.assert_request_id(fl, fakes.FAKE_REQUEST_ID_LIST)
self.cs.assert_called('GET', '/flavors')
for flavor in fl:
self.assertIsInstance(flavor, self.flavor_type)
def test_list_flavors_with_marker_limit(self):
self.cs.flavors.list(marker=1234, limit=4)
fl = self.cs.flavors.list(marker=1234, limit=4)
self.assert_request_id(fl, fakes.FAKE_REQUEST_ID_LIST)
self.cs.assert_called('GET', '/flavors/detail?limit=4&marker=1234')
def test_list_flavors_with_sort_key_dir(self):
self.cs.flavors.list(sort_key='id', sort_dir='asc')
fl = self.cs.flavors.list(sort_key='id', sort_dir='asc')
self.assert_request_id(fl, fakes.FAKE_REQUEST_ID_LIST)
self.cs.assert_called('GET',
'/flavors/detail?sort_dir=asc&sort_key=id')
def test_list_flavors_is_public_none(self):
fl = self.cs.flavors.list(is_public=None)
self.assert_request_id(fl, fakes.FAKE_REQUEST_ID_LIST)
self.cs.assert_called('GET', '/flavors/detail?is_public=None')
for flavor in fl:
self.assertIsInstance(flavor, self.flavor_type)
def test_list_flavors_is_public_false(self):
fl = self.cs.flavors.list(is_public=False)
self.assert_request_id(fl, fakes.FAKE_REQUEST_ID_LIST)
self.cs.assert_called('GET', '/flavors/detail?is_public=False')
for flavor in fl:
self.assertIsInstance(flavor, self.flavor_type)
def test_list_flavors_is_public_true(self):
fl = self.cs.flavors.list(is_public=True)
self.assert_request_id(fl, fakes.FAKE_REQUEST_ID_LIST)
self.cs.assert_called('GET', '/flavors/detail')
for flavor in fl:
self.assertIsInstance(flavor, self.flavor_type)
def test_get_flavor_details(self):
f = self.cs.flavors.get(1)
self.assert_request_id(f, fakes.FAKE_REQUEST_ID_LIST)
self.cs.assert_called('GET', '/flavors/1')
self.assertIsInstance(f, self.flavor_type)
self.assertEqual(256, f.ram)
@ -83,6 +92,7 @@ class FlavorsTest(utils.TestCase):
def test_get_flavor_details_alphanum_id(self):
f = self.cs.flavors.get('aa1')
self.assert_request_id(f, fakes.FAKE_REQUEST_ID_LIST)
self.cs.assert_called('GET', '/flavors/aa1')
self.assertIsInstance(f, self.flavor_type)
self.assertEqual(128, f.ram)
@ -92,6 +102,7 @@ class FlavorsTest(utils.TestCase):
def test_get_flavor_details_diablo(self):
f = self.cs.flavors.get(3)
self.assert_request_id(f, fakes.FAKE_REQUEST_ID_LIST)
self.cs.assert_called('GET', '/flavors/3')
self.assertIsInstance(f, self.flavor_type)
self.assertEqual(256, f.ram)
@ -101,10 +112,12 @@ class FlavorsTest(utils.TestCase):
def test_find(self):
f = self.cs.flavors.find(ram=256)
self.assert_request_id(f, fakes.FAKE_REQUEST_ID_LIST)
self.cs.assert_called('GET', '/flavors/detail')
self.assertEqual('256 MB Server', f.name)
f = self.cs.flavors.find(disk=0)
self.assert_request_id(f, fakes.FAKE_REQUEST_ID_LIST)
self.assertEqual('128 MB Server', f.name)
self.assertRaises(exceptions.NotFound, self.cs.flavors.find,
@ -129,6 +142,7 @@ class FlavorsTest(utils.TestCase):
def test_create(self):
f = self.cs.flavors.create("flavorcreate", 512, 1, 10, 1234,
ephemeral=10, is_public=False)
self.assert_request_id(f, fakes.FAKE_REQUEST_ID_LIST)
body = self._create_body("flavorcreate", 512, 1, 10, 10, 1234, 0, 1.0,
False)
@ -141,6 +155,7 @@ class FlavorsTest(utils.TestCase):
f = self.cs.flavors.create("flavorcreate", 512,
1, 10, flavor_id, ephemeral=10,
is_public=False)
self.assert_request_id(f, fakes.FAKE_REQUEST_ID_LIST)
body = self._create_body("flavorcreate", 512, 1, 10, 10, flavor_id, 0,
1.0, False)
@ -150,6 +165,7 @@ class FlavorsTest(utils.TestCase):
def test_create_ephemeral_ispublic_defaults(self):
f = self.cs.flavors.create("flavorcreate", 512, 1, 10, 1234)
self.assert_request_id(f, fakes.FAKE_REQUEST_ID_LIST)
body = self._create_body("flavorcreate", 512, 1, 10, 0, 1234, 0,
1.0, True)
@ -181,22 +197,26 @@ class FlavorsTest(utils.TestCase):
ephemeral=0, rxtx_factor=1.0, is_public='invalid')
def test_delete(self):
self.cs.flavors.delete("flavordelete")
ret = self.cs.flavors.delete("flavordelete")
self.assert_request_id(ret, fakes.FAKE_REQUEST_ID_LIST)
self.cs.assert_called('DELETE', '/flavors/flavordelete')
def test_delete_with_flavor_instance(self):
f = self.cs.flavors.get(2)
self.cs.flavors.delete(f)
ret = self.cs.flavors.delete(f)
self.assert_request_id(ret, fakes.FAKE_REQUEST_ID_LIST)
self.cs.assert_called('DELETE', '/flavors/2')
def test_delete_with_flavor_instance_method(self):
f = self.cs.flavors.get(2)
f.delete()
ret = f.delete()
self.assert_request_id(ret, fakes.FAKE_REQUEST_ID_LIST)
self.cs.assert_called('DELETE', '/flavors/2')
def test_set_keys(self):
f = self.cs.flavors.get(1)
f.set_keys({'k1': 'v1'})
fk = f.set_keys({'k1': 'v1'})
self.assert_request_id(fk, fakes.FAKE_REQUEST_ID_LIST)
self.cs.assert_called('POST', '/flavors/1/os-extra_specs',
{"extra_specs": {'k1': 'v1'}})
@ -206,7 +226,8 @@ class FlavorsTest(utils.TestCase):
f = self.cs.flavors.get(4)
for key in valid_keys:
f.set_keys({key: 'v4'})
fk = f.set_keys({key: 'v4'})
self.assert_request_id(fk, fakes.FAKE_REQUEST_ID_LIST)
self.cs.assert_called('POST', '/flavors/4/os-extra_specs',
{"extra_specs": {key: 'v4'}})
@ -221,7 +242,10 @@ class FlavorsTest(utils.TestCase):
def test_unset_keys(self, mock_delete):
f = self.cs.flavors.get(1)
keys = ['k1', 'k2']
f.unset_keys(keys)
mock_delete.return_value = base.TupleWithMeta(
(), fakes.FAKE_REQUEST_ID_LIST)
fu = f.unset_keys(keys)
self.assert_request_id(fu, fakes.FAKE_REQUEST_ID_LIST)
mock_delete.assert_has_calls([
mock.call("/flavors/1/os-extra_specs/k1"),
mock.call("/flavors/1/os-extra_specs/k2")

View File

@ -14,6 +14,7 @@
from novaclient.tests.unit.fixture_data import client
from novaclient.tests.unit.fixture_data import floatingips as data
from novaclient.tests.unit import utils
from novaclient.tests.unit.v2 import fakes
from novaclient.v2 import floating_ip_dns
@ -25,6 +26,7 @@ class FloatingIPDNSDomainTest(utils.FixturedTestCase):
def test_dns_domains(self):
domainlist = self.cs.dns_domains.domains()
self.assert_request_id(domainlist, fakes.FAKE_REQUEST_ID_LIST)
self.assertEqual(2, len(domainlist))
for entry in domainlist:
@ -34,17 +36,20 @@ class FloatingIPDNSDomainTest(utils.FixturedTestCase):
self.assertEqual('example.com', domainlist[1].domain)
def test_create_private_domain(self):
self.cs.dns_domains.create_private(self.testdomain, 'test_avzone')
pd = self.cs.dns_domains.create_private(self.testdomain, 'test_avzone')
self.assert_request_id(pd, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('PUT', '/os-floating-ip-dns/%s' %
self.testdomain)
def test_create_public_domain(self):
self.cs.dns_domains.create_public(self.testdomain, 'test_project')
pd = self.cs.dns_domains.create_public(self.testdomain, 'test_project')
self.assert_request_id(pd, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('PUT', '/os-floating-ip-dns/%s' %
self.testdomain)
def test_delete_domain(self):
self.cs.dns_domains.delete(self.testdomain)
ret = self.cs.dns_domains.delete(self.testdomain)
self.assert_request_id(ret, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('DELETE', '/os-floating-ip-dns/%s' %
self.testdomain)
@ -61,6 +66,7 @@ class FloatingIPDNSEntryTest(utils.FixturedTestCase):
def test_get_dns_entries_by_ip(self):
entries = self.cs.dns_entries.get_for_ip(self.testdomain,
ip=self.testip)
self.assert_request_id(entries, fakes.FAKE_REQUEST_ID_LIST)
self.assertEqual(2, len(entries))
for entry in entries:
@ -73,19 +79,22 @@ class FloatingIPDNSEntryTest(utils.FixturedTestCase):
def test_get_dns_entry_by_name(self):
entry = self.cs.dns_entries.get(self.testdomain,
self.testname)
self.assert_request_id(entry, fakes.FAKE_REQUEST_ID_LIST)
self.assertIsInstance(entry, floating_ip_dns.FloatingIPDNSEntry)
self.assertEqual(entry.name, self.testname)
def test_create_entry(self):
self.cs.dns_entries.create(self.testdomain,
self.testname,
self.testip,
self.testtype)
entry = self.cs.dns_entries.create(self.testdomain,
self.testname,
self.testip,
self.testtype)
self.assert_request_id(entry, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('PUT', '/os-floating-ip-dns/%s/entries/%s' %
(self.testdomain, self.testname))
def test_delete_entry(self):
self.cs.dns_entries.delete(self.testdomain, self.testname)
ret = self.cs.dns_entries.delete(self.testdomain, self.testname)
self.assert_request_id(ret, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('DELETE', '/os-floating-ip-dns/%s/entries/%s' %
(self.testdomain, self.testname))

View File

@ -17,6 +17,7 @@
from novaclient.tests.unit.fixture_data import client
from novaclient.tests.unit.fixture_data import floatingips as data
from novaclient.tests.unit import utils
from novaclient.tests.unit.v2 import fakes
from novaclient.v2 import floating_ip_pools
@ -27,6 +28,7 @@ class TestFloatingIPPools(utils.FixturedTestCase):
def test_list_floating_ips(self):
fl = self.cs.floating_ip_pools.list()
self.assert_request_id(fl, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('GET', '/os-floating-ip-pools')
for f in fl:
self.assertIsInstance(f, floating_ip_pools.FloatingIPPool)

View File

@ -17,6 +17,7 @@
from novaclient.tests.unit.fixture_data import client
from novaclient.tests.unit.fixture_data import floatingips as data
from novaclient.tests.unit import utils
from novaclient.tests.unit.v2 import fakes
from novaclient.v2 import floating_ips
@ -27,27 +28,33 @@ class FloatingIPsTest(utils.FixturedTestCase):
def test_list_floating_ips(self):
fips = self.cs.floating_ips.list()
self.assert_request_id(fips, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('GET', '/os-floating-ips')
for fip in fips:
self.assertIsInstance(fip, floating_ips.FloatingIP)
def test_delete_floating_ip(self):
fl = self.cs.floating_ips.list()[0]
fl.delete()
ret = fl.delete()
self.assert_request_id(ret, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('DELETE', '/os-floating-ips/1')
self.cs.floating_ips.delete(1)
ret = self.cs.floating_ips.delete(1)
self.assert_request_id(ret, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('DELETE', '/os-floating-ips/1')
self.cs.floating_ips.delete(fl)
ret = self.cs.floating_ips.delete(fl)
self.assert_request_id(ret, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('DELETE', '/os-floating-ips/1')
def test_create_floating_ip(self):
fl = self.cs.floating_ips.create()
self.assert_request_id(fl, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('POST', '/os-floating-ips')
self.assertIsNone(fl.pool)
self.assertIsInstance(fl, floating_ips.FloatingIP)
def test_create_floating_ip_with_pool(self):
fl = self.cs.floating_ips.create('nova')
self.assert_request_id(fl, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('POST', '/os-floating-ips')
self.assertEqual('nova', fl.pool)
self.assertIsInstance(fl, floating_ips.FloatingIP)

View File

@ -16,6 +16,7 @@
from novaclient.tests.unit.fixture_data import client
from novaclient.tests.unit.fixture_data import floatingips as data
from novaclient.tests.unit import utils
from novaclient.tests.unit.v2 import fakes
from novaclient.v2 import floating_ips
@ -26,18 +27,21 @@ class FloatingIPsBulkTest(utils.FixturedTestCase):
def test_list_floating_ips_bulk(self):
fl = self.cs.floating_ips_bulk.list()
self.assert_request_id(fl, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('GET', '/os-floating-ips-bulk')
for f in fl:
self.assertIsInstance(f, floating_ips.FloatingIP)
def test_list_floating_ips_bulk_host_filter(self):
fl = self.cs.floating_ips_bulk.list('testHost')
self.assert_request_id(fl, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('GET', '/os-floating-ips-bulk/testHost')
for f in fl:
self.assertIsInstance(f, floating_ips.FloatingIP)
def test_create_floating_ips_bulk(self):
fl = self.cs.floating_ips_bulk.create('192.168.1.0/30')
self.assert_request_id(fl, fakes.FAKE_REQUEST_ID_LIST)
body = {'floating_ips_bulk_create': {'ip_range': '192.168.1.0/30'}}
self.assert_called('POST', '/os-floating-ips-bulk', body)
self.assertEqual(fl.ip_range,
@ -46,6 +50,7 @@ class FloatingIPsBulkTest(utils.FixturedTestCase):
def test_create_floating_ips_bulk_with_pool_and_host(self):
fl = self.cs.floating_ips_bulk.create('192.168.1.0/30', 'poolTest',
'interfaceTest')
self.assert_request_id(fl, fakes.FAKE_REQUEST_ID_LIST)
body = {'floating_ips_bulk_create': {
'ip_range': '192.168.1.0/30', 'pool': 'poolTest',
'interface': 'interfaceTest'}}
@ -59,6 +64,7 @@ class FloatingIPsBulkTest(utils.FixturedTestCase):
def test_delete_floating_ips_bulk(self):
fl = self.cs.floating_ips_bulk.delete('192.168.1.0/30')
self.assert_request_id(fl, fakes.FAKE_REQUEST_ID_LIST)
body = {'ip_range': '192.168.1.0/30'}
self.assert_called('PUT', '/os-floating-ips-bulk/delete', body)
self.assertEqual(fl.floating_ips_bulk_delete, body['ip_range'])

View File

@ -16,6 +16,7 @@
from novaclient.tests.unit.fixture_data import client
from novaclient.tests.unit.fixture_data import fping as data
from novaclient.tests.unit import utils
from novaclient.tests.unit.v2 import fakes
from novaclient.v2 import fping
@ -26,10 +27,12 @@ class FpingTest(utils.FixturedTestCase):
def test_fping_repr(self):
r = self.cs.fping.get(1)
self.assert_request_id(r, fakes.FAKE_REQUEST_ID_LIST)
self.assertEqual("<Fping: 1>", repr(r))
def test_list_fpings(self):
fl = self.cs.fping.list()
self.assert_request_id(fl, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('GET', '/os-fping')
for f in fl:
self.assertIsInstance(f, fping.Fping)
@ -38,24 +41,28 @@ class FpingTest(utils.FixturedTestCase):
def test_list_fpings_all_tenants(self):
fl = self.cs.fping.list(all_tenants=True)
self.assert_request_id(fl, fakes.FAKE_REQUEST_ID_LIST)
for f in fl:
self.assertIsInstance(f, fping.Fping)
self.assert_called('GET', '/os-fping?all_tenants=1')
def test_list_fpings_exclude(self):
fl = self.cs.fping.list(exclude=['1'])
self.assert_request_id(fl, fakes.FAKE_REQUEST_ID_LIST)
for f in fl:
self.assertIsInstance(f, fping.Fping)
self.assert_called('GET', '/os-fping?exclude=1')
def test_list_fpings_include(self):
fl = self.cs.fping.list(include=['1'])
self.assert_request_id(fl, fakes.FAKE_REQUEST_ID_LIST)
for f in fl:
self.assertIsInstance(f, fping.Fping)
self.assert_called('GET', '/os-fping?include=1')
def test_get_fping(self):
f = self.cs.fping.get(1)
self.assert_request_id(f, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('GET', '/os-fping/1')
self.assertIsInstance(f, fping.Fping)
self.assertEqual("fake-project", f.project_id)

View File

@ -14,6 +14,7 @@
from novaclient.tests.unit.fixture_data import client
from novaclient.tests.unit.fixture_data import hosts as data
from novaclient.tests.unit import utils
from novaclient.tests.unit.v2 import fakes
from novaclient.v2 import hosts
@ -24,12 +25,14 @@ class HostsTest(utils.FixturedTestCase):
def test_describe_resource(self):
hs = self.cs.hosts.get('host')
self.assert_request_id(hs, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('GET', '/os-hosts/host')
for h in hs:
self.assertIsInstance(h, hosts.Host)
def test_list_host(self):
hs = self.cs.hosts.list()
self.assert_request_id(hs, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('GET', '/os-hosts')
for h in hs:
self.assertIsInstance(h, hosts.Host)
@ -37,6 +40,7 @@ class HostsTest(utils.FixturedTestCase):
def test_list_host_with_zone(self):
hs = self.cs.hosts.list('nova')
self.assert_request_id(hs, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('GET', '/os-hosts?zone=nova')
for h in hs:
self.assertIsInstance(h, hosts.Host)
@ -46,6 +50,7 @@ class HostsTest(utils.FixturedTestCase):
host = self.cs.hosts.get('sample_host')[0]
values = {"status": "enabled"}
result = host.update(values)
self.assert_request_id(result, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('PUT', '/os-hosts/sample_host', values)
self.assertIsInstance(result, hosts.Host)
@ -53,6 +58,7 @@ class HostsTest(utils.FixturedTestCase):
host = self.cs.hosts.get('sample_host')[0]
values = {"maintenance_mode": "enable"}
result = host.update(values)
self.assert_request_id(result, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('PUT', '/os-hosts/sample_host', values)
self.assertIsInstance(result, hosts.Host)
@ -61,24 +67,28 @@ class HostsTest(utils.FixturedTestCase):
values = {"status": "enabled",
"maintenance_mode": "enable"}
result = host.update(values)
self.assert_request_id(result, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('PUT', '/os-hosts/sample_host', values)
self.assertIsInstance(result, hosts.Host)
def test_host_startup(self):
host = self.cs.hosts.get('sample_host')[0]
host.startup()
resp, result = host.startup()
self.assert_request_id(result, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called(
'GET', '/os-hosts/sample_host/startup')
def test_host_reboot(self):
host = self.cs.hosts.get('sample_host')[0]
host.reboot()
resp, result = host.reboot()
self.assert_request_id(result, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called(
'GET', '/os-hosts/sample_host/reboot')
def test_host_shutdown(self):
host = self.cs.hosts.get('sample_host')[0]
host.shutdown()
resp, result = host.shutdown()
self.assert_request_id(result, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called(
'GET', '/os-hosts/sample_host/shutdown')

View File

@ -16,6 +16,7 @@
from novaclient.tests.unit.fixture_data import client
from novaclient.tests.unit.fixture_data import hypervisors as data
from novaclient.tests.unit import utils
from novaclient.tests.unit.v2 import fakes
class HypervisorsTest(utils.FixturedTestCase):
@ -33,6 +34,7 @@ class HypervisorsTest(utils.FixturedTestCase):
dict(id=5678, hypervisor_hostname='hyper2')]
result = self.cs.hypervisors.list(False)
self.assert_request_id(result, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('GET', '/os-hypervisors')
for idx, hyper in enumerate(result):
@ -76,6 +78,7 @@ class HypervisorsTest(utils.FixturedTestCase):
disk_available_least=100)]
result = self.cs.hypervisors.list()
self.assert_request_id(result, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('GET', '/os-hypervisors/detail')
for idx, hyper in enumerate(result):
@ -87,6 +90,7 @@ class HypervisorsTest(utils.FixturedTestCase):
dict(id=5678, hypervisor_hostname='hyper2')]
result = self.cs.hypervisors.search('hyper')
self.assert_request_id(result, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('GET', '/os-hypervisors/hyper/search')
for idx, hyper in enumerate(result):
@ -107,6 +111,7 @@ class HypervisorsTest(utils.FixturedTestCase):
]
result = self.cs.hypervisors.search('hyper', True)
self.assert_request_id(result, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('GET', '/os-hypervisors/hyper/servers')
for idx, hyper in enumerate(result):
@ -133,6 +138,7 @@ class HypervisorsTest(utils.FixturedTestCase):
disk_available_least=100)
result = self.cs.hypervisors.get(1234)
self.assert_request_id(result, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('GET', '/os-hypervisors/1234')
self.compare_to_expected(expected, result)
@ -144,6 +150,7 @@ class HypervisorsTest(utils.FixturedTestCase):
uptime="fake uptime")
result = self.cs.hypervisors.uptime(1234)
self.assert_request_id(result, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('GET', '/os-hypervisors/1234/uptime')
self.compare_to_expected(expected, result)
@ -165,12 +172,14 @@ class HypervisorsTest(utils.FixturedTestCase):
)
result = self.cs.hypervisors.statistics()
self.assert_request_id(result, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('GET', '/os-hypervisors/statistics')
self.compare_to_expected(expected, result)
def test_hypervisor_statistics_data_model(self):
result = self.cs.hypervisor_stats.statistics()
self.assert_request_id(result, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('GET', '/os-hypervisors/statistics')
# Test for Bug #1370415, the line below used to raise AttributeError

View File

@ -14,6 +14,7 @@
from novaclient.tests.unit.fixture_data import client
from novaclient.tests.unit.fixture_data import images as data
from novaclient.tests.unit import utils
from novaclient.tests.unit.v2 import fakes
from novaclient.v2 import images
@ -24,6 +25,7 @@ class ImagesTest(utils.FixturedTestCase):
def test_list_images(self):
il = self.cs.images.list()
self.assert_request_id(il, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('GET', '/images/detail')
for i in il:
self.assertIsInstance(i, images.Image)
@ -31,39 +33,47 @@ class ImagesTest(utils.FixturedTestCase):
def test_list_images_undetailed(self):
il = self.cs.images.list(detailed=False)
self.assert_request_id(il, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('GET', '/images')
for i in il:
self.assertIsInstance(i, images.Image)
def test_list_images_with_marker_limit(self):
self.cs.images.list(marker=1234, limit=4)
il = self.cs.images.list(marker=1234, limit=4)
self.assert_request_id(il, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('GET', '/images/detail?limit=4&marker=1234')
def test_get_image_details(self):
i = self.cs.images.get(1)
self.assert_request_id(i, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('GET', '/images/1')
self.assertIsInstance(i, images.Image)
self.assertEqual(1, i.id)
self.assertEqual('CentOS 5.2', i.name)
def test_delete_image(self):
self.cs.images.delete(1)
i = self.cs.images.delete(1)
self.assert_request_id(i, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('DELETE', '/images/1')
def test_delete_meta(self):
self.cs.images.delete_meta(1, {'test_key': 'test_value'})
i = self.cs.images.delete_meta(1, {'test_key': 'test_value'})
self.assert_request_id(i, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('DELETE', '/images/1/metadata/test_key')
def test_set_meta(self):
self.cs.images.set_meta(1, {'test_key': 'test_value'})
i = self.cs.images.set_meta(1, {'test_key': 'test_value'})
self.assert_request_id(i, fakes.FAKE_REQUEST_ID_LIST)
self.assert_called('POST', '/images/1/metadata',
{"metadata": {'test_key': 'test_value'}})
def test_find(self):
i = self.cs.images.find(name="CentOS 5.2")
self.assert_request_id(i, fakes.FAKE_REQUEST_ID_LIST)
self.assertEqual(1, i.id)
self.assert_called('GET', '/images/1')
iml = self.cs.images.findall(status='SAVING')
self.assert_request_id(iml, fakes.FAKE_REQUEST_ID_LIST)
self.assertEqual(1, len(iml))
self.assertEqual('My Server Backup', iml[0].name)

View File

@ -63,5 +63,10 @@ class AgentsManager(base.ManagerWithFind):
return self._create('/os-agents', body, 'agent')
def delete(self, id):
"""Deletes an existing agent build."""
self._delete('/os-agents/%s' % id)
"""
Deletes an existing agent build.
:param id: The agent's id to delete
:returns: An instance of novaclient.base.TupleWithMeta
"""
return self._delete('/os-agents/%s' % id)

View File

@ -38,7 +38,12 @@ class Aggregate(base.Resource):
return self.manager.set_metadata(self, metadata)
def delete(self):
self.manager.delete(self)
"""
Delete the own aggregate.
:returns: An instance of novaclient.base.TupleWithMeta
"""
return self.manager.delete(self)
class AggregateManager(base.ManagerWithFind):
@ -91,5 +96,10 @@ class AggregateManager(base.ManagerWithFind):
body, "aggregate")
def delete(self, aggregate):
"""Delete the specified aggregate."""
self._delete('/os-aggregates/%s' % (base.getid(aggregate)))
"""
Delete the specified aggregate.
:param aggregate: The aggregate to delete
:returns: An instance of novaclient.base.TupleWithMeta
"""
return self._delete('/os-aggregates/%s' % (base.getid(aggregate)))

View File

@ -25,7 +25,12 @@ class Cloudpipe(base.Resource):
return "<Cloudpipe: %s>" % self.project_id
def delete(self):
self.manager.delete(self)
"""
Delete the own cloudpipe instance
:returns: An instance of novaclient.base.TupleWithMeta
"""
return self.manager.delete(self)
class CloudpipeManager(base.ManagerWithFind):
@ -52,8 +57,9 @@ class CloudpipeManager(base.ManagerWithFind):
:param address: IP address
:param port: Port number
:returns: An instance of novaclient.base.TupleWithMeta
"""
body = {'configure_project': {'vpn_ip': address,
'vpn_port': port}}
self._update("/os-cloudpipe/configure-project", body)
return self._update("/os-cloudpipe/configure-project", body)

View File

@ -40,16 +40,20 @@ class FixedIPsManager(base.Manager):
"""Reserve a Fixed IP.
:param fixed_ip: Fixed IP address to reserve
:returns: An instance of novaclient.base.TupleWithMeta
"""
body = {"reserve": None}
self.api.client.post('/os-fixed-ips/%s/action' % base.getid(fixed_ip),
body=body)
resp, body = self.api.client.post('/os-fixed-ips/%s/action' %
base.getid(fixed_ip), body=body)
return self.convert_into_with_meta(body, resp)
def unreserve(self, fixed_ip):
"""Unreserve a Fixed IP.
:param fixed_ip: Fixed IP address to unreserve
:returns: An instance of novaclient.base.TupleWithMeta
"""
body = {"unreserve": None}
self.api.client.post('/os-fixed-ips/%s/action' % base.getid(fixed_ip),
body=body)
resp, body = self.api.client.post('/os-fixed-ips/%s/action' %
base.getid(fixed_ip), body=body)
return self.convert_into_with_meta(body, resp)

View File

@ -62,7 +62,9 @@ class FlavorAccessManager(base.ManagerWithFind):
body = {action: info}
self.run_hooks('modify_body_for_action', body, **kwargs)
url = '/flavors/%s/action' % base.getid(flavor)
_resp, body = self.api.client.post(url, body=body)
resp, body = self.api.client.post(url, body=body)
return [self.resource_class(self, res)
for res in body['flavor_access']]
items = [self.resource_class(self, res)
for res in body['flavor_access']]
return base.ListWithMeta(items, resp)

View File

@ -43,10 +43,14 @@ class Flavor(base.Resource):
return self._info.get("os-flavor-access:is_public", 'N/A')
def get_keys(self):
"""Get extra specs from a flavor."""
_resp, body = self.manager.api.client.get(
"""
Get extra specs from a flavor.
:returns: An instance of novaclient.base.DictWithMeta
"""
resp, body = self.manager.api.client.get(
"/flavors/%s/os-extra_specs" % base.getid(self))
return body["extra_specs"]
return self.manager.convert_into_with_meta(body["extra_specs"], resp)
def set_keys(self, metadata):
"""Set extra specs on a flavor.
@ -64,14 +68,23 @@ class Flavor(base.Resource):
"""Unset extra specs on a flavor.
:param keys: A list of keys to be unset
:returns: An instance of novaclient.base.TupleWithMeta
"""
result = base.TupleWithMeta((), None)
for k in keys:
self.manager._delete(
ret = self.manager._delete(
"/flavors/%s/os-extra_specs/%s" % (base.getid(self), k))
result.append_request_ids(ret.request_ids)
return result
def delete(self):
"""Delete this flavor."""
self.manager.delete(self)
"""
Delete this flavor.
:returns: An instance of novaclient.base.TupleWithMeta
"""
return self.manager.delete(self)
class FlavorManager(base.ManagerWithFind):
@ -130,8 +143,9 @@ class FlavorManager(base.ManagerWithFind):
"""Delete a specific flavor.
:param flavor: The ID of the :class:`Flavor` to get.
:returns: An instance of novaclient.base.TupleWithMeta
"""
self._delete("/flavors/%s" % base.getid(flavor))
return self._delete("/flavors/%s" % base.getid(flavor))
def _build_body(self, name, ram, vcpus, disk, id, swap,
ephemeral, rxtx_factor, is_public):

View File

@ -30,21 +30,38 @@ def _quote_domain(domain):
class FloatingIPDNSDomain(base.Resource):
def delete(self):
self.manager.delete(self.domain)
"""
Delete the own Floating IP DNS domain.
:returns: An instance of novaclient.base.TupleWithMeta
"""
return self.manager.delete(self.domain)
def create(self):
"""
Create a Floating IP DNS domain.
:returns: An instance of novaclient.base.DictWithMeta
"""
if self.scope == 'public':
self.manager.create_public(self.domain, self.project)
return self.manager.create_public(self.domain, self.project)
else:
self.manager.create_private(self.domain, self.availability_zone)
return self.manager.create_private(self.domain,
self.availability_zone)
def get(self):
"""
Get the own Floating IP DNS domain.
:returns: An instance of novaclient.base.TupleWithMeta or
novaclient.base.ListWithMeta
"""
entries = self.manager.domains()
for entry in entries:
if entry.get('domain') == self.domain:
return entry
return None
return base.TupleWithMeta((), entries.request_ids)
class FloatingIPDNSDomainManager(base.Manager):
@ -70,16 +87,32 @@ class FloatingIPDNSDomainManager(base.Manager):
body, 'domain_entry')
def delete(self, fqdomain):
"""Delete the specified domain."""
self._delete("/os-floating-ip-dns/%s" % _quote_domain(fqdomain))
"""
Delete the specified domain.
:param fqdomain: The domain to delete
:returns: An instance of novaclient.base.TupleWithMeta
"""
return self._delete("/os-floating-ip-dns/%s" % _quote_domain(fqdomain))
class FloatingIPDNSEntry(base.Resource):
def delete(self):
self.manager.delete(self.name, self.domain)
"""
Delete the own Floating IP DNS entry.
:returns: An instance of novaclient.base.TupleWithMeta
"""
return self.manager.delete(self.name, self.domain)
def create(self):
self.manager.create(self.domain, self.name, self.ip, self.dns_type)
"""
Create a Floating IP DNS entry.
:returns: :class:`FloatingIPDNSEntry`
"""
return self.manager.create(self.domain, self.name, self.ip,
self.dns_type)
def get(self):
return self.manager.get(self.domain, self.name)
@ -116,6 +149,10 @@ class FloatingIPDNSEntryManager(base.Manager):
(_quote_domain(domain), name), body, "dns_entry")
def delete(self, domain, name):
"""Delete entry specified by name and domain."""
self._delete("/os-floating-ip-dns/%s/entries/%s" %
(_quote_domain(domain), name))
"""
Delete entry specified by name and domain.
:returns: An instance of novaclient.base.TupleWithMeta
"""
return self._delete("/os-floating-ip-dns/%s/entries/%s" %
(_quote_domain(domain), name))

View File

@ -19,8 +19,12 @@ from novaclient import base
class FloatingIP(base.Resource):
def delete(self):
"""Delete this floating IP"""
self.manager.delete(self)
"""
Delete this floating IP
:returns: An instance of novaclient.base.TupleWithMeta
"""
return self.manager.delete(self)
class FloatingIPManager(base.ManagerWithFind):
@ -38,8 +42,9 @@ class FloatingIPManager(base.ManagerWithFind):
"""Delete (deallocate) a floating IP for a tenant
:param floating_ip: The floating IP address to delete.
:returns: An instance of novaclient.base.TupleWithMeta
"""
self._delete("/os-floating-ips/%s" % base.getid(floating_ip))
return self._delete("/os-floating-ips/%s" % base.getid(floating_ip))
def get(self, floating_ip):
"""Retrieve a floating IP"""

View File

@ -69,9 +69,18 @@ class HostManager(base.ManagerWithFind):
return self._update("/os-hosts/%s" % host, values)
def host_action(self, host, action):
"""Perform an action on a host."""
"""
Perform an action on a host.
:param host: The host to perform an action
:param actiob: The action to perform
:returns: A Response object and an instance of
novaclient.base.DictWithMeta
"""
url = '/os-hosts/{0}/{1}'.format(host, action)
return self.api.client.get(url)
resp, body = self.api.client.get(url)
# For compatibility, return Response object as a first return value
return resp, self.convert_into_with_meta(body, resp)
def list(self, zone=None):
url = '/os-hosts'

View File

@ -33,8 +33,10 @@ class Image(base.Resource):
def delete(self):
"""
Delete this image.
:returns: An instance of novaclient.base.TupleWithMeta
"""
self.manager.delete(self)
return self.manager.delete(self)
class ImageManager(base.ManagerWithFind):
@ -81,8 +83,9 @@ class ImageManager(base.ManagerWithFind):
that you didn't create.
:param image: The :class:`Image` (or its ID) to delete.
:returns: An instance of novaclient.base.TupleWithMeta
"""
self._delete("/images/%s" % base.getid(image))
return self._delete("/images/%s" % base.getid(image))
def set_meta(self, image, metadata):
"""
@ -101,6 +104,12 @@ class ImageManager(base.ManagerWithFind):
:param image: The :class:`Image` to delete metadata
:param keys: A list of metadata keys to delete from the image
:returns: An instance of novaclient.base.TupleWithMeta
"""
result = base.TupleWithMeta((), None)
for k in keys:
self._delete("/images/%s/metadata/%s" % (base.getid(image), k))
ret = self._delete("/images/%s/metadata/%s" %
(base.getid(image), k))
result.append_request_ids(ret.request_ids)
return result