Unit tests for API completed
fixed pep8 errors
This commit is contained in:
parent
74727d29d9
commit
6feacc0c6d
@ -162,7 +162,6 @@ class Controller(common.QuantumController):
|
||||
except exception.AlreadyAttached as e:
|
||||
return faults.Fault(faults.AlreadyAttached(e))
|
||||
|
||||
#TODO - Complete implementation of these APIs
|
||||
def detach_resource(self, request, tenant_id, network_id, id):
|
||||
try:
|
||||
self._plugin.unplug_interface(tenant_id,
|
||||
|
@ -195,6 +195,14 @@ def port_set_attachment(port_id, new_interface_id):
|
||||
% (new_interface_id))
|
||||
|
||||
|
||||
def port_unset_attachment(port_id):
|
||||
session = get_session()
|
||||
port = port_get(port_id)
|
||||
port.interface_id = None
|
||||
session.merge(port)
|
||||
session.flush
|
||||
|
||||
|
||||
def port_destroy(port_id):
|
||||
session = get_session()
|
||||
try:
|
||||
|
@ -387,7 +387,6 @@ class FakePlugin(object):
|
||||
'port-state': new_state}
|
||||
return port_item
|
||||
|
||||
|
||||
def delete_port(self, tenant_id, net_id, port_id):
|
||||
"""
|
||||
Deletes a port on a specified Virtual Network,
|
||||
@ -430,6 +429,7 @@ class FakePlugin(object):
|
||||
specified Virtual Network.
|
||||
"""
|
||||
LOG.debug("FakePlugin.unplug_interface() called")
|
||||
self._get_port(tenant_id, net_id, port_id)
|
||||
# TODO(salvatore-orlando):
|
||||
# Should unplug on port without attachment raise an Error?
|
||||
db.port_set_attachment(port_id, None)
|
||||
db.port_unset_attachment(port_id)
|
||||
|
@ -20,35 +20,18 @@
|
||||
import logging
|
||||
import unittest
|
||||
|
||||
|
||||
import tests.unit.testlib as testlib
|
||||
import tests.unit.testlib_api as testlib
|
||||
|
||||
from quantum import api as server
|
||||
from quantum.db import api as db
|
||||
from quantum.common.wsgi import Serializer
|
||||
|
||||
|
||||
# Fault names copied here for reference
|
||||
#
|
||||
# _fault_names = {
|
||||
# 400: "malformedRequest",
|
||||
# 401: "unauthorized",
|
||||
# 420: "networkNotFound",
|
||||
# 421: "networkInUse",
|
||||
# 430: "portNotFound",
|
||||
# 431: "requestedStateInvalid",
|
||||
# 432: "portInUse",
|
||||
# 440: "alreadyAttached",
|
||||
# 470: "serviceUnavailable",
|
||||
# 471: "pluginFault"}
|
||||
|
||||
|
||||
LOG = logging.getLogger('quantum.tests.test_api')
|
||||
|
||||
|
||||
class APITest(unittest.TestCase):
|
||||
|
||||
|
||||
def _create_network(self, format, name=None, custom_req_body=None,
|
||||
expected_res_status=200):
|
||||
LOG.debug("Creating network")
|
||||
@ -96,11 +79,13 @@ class APITest(unittest.TestCase):
|
||||
LOG.debug("_test_create_network - format:%s - END", format)
|
||||
|
||||
def _test_create_network_badrequest(self, format):
|
||||
LOG.debug("_test_create_network_badrequest - format:%s - START", format)
|
||||
LOG.debug("_test_create_network_badrequest - format:%s - START",
|
||||
format)
|
||||
bad_body = {'network': {'bad-attribute': 'very-bad'}}
|
||||
self._create_network(format, custom_req_body=bad_body,
|
||||
expected_res_status=400)
|
||||
LOG.debug("_test_create_network_badrequest - format:%s - END", format)
|
||||
LOG.debug("_test_create_network_badrequest - format:%s - END",
|
||||
format)
|
||||
|
||||
def _test_list_networks(self, format):
|
||||
LOG.debug("_test_list_networks - format:%s - START", format)
|
||||
@ -164,19 +149,22 @@ class APITest(unittest.TestCase):
|
||||
LOG.debug("_test_rename_network - format:%s - END", format)
|
||||
|
||||
def _test_rename_network_badrequest(self, format):
|
||||
LOG.debug("_test_rename_network_badrequest - format:%s - START", format)
|
||||
LOG.debug("_test_rename_network_badrequest - format:%s - START",
|
||||
format)
|
||||
network_id = self._create_network(format)
|
||||
bad_body = {'network': {'bad-attribute': 'very-bad'}}
|
||||
update_network_req = testlib.update_network_request(self.tenant_id,
|
||||
network_id,
|
||||
format,
|
||||
update_network_req = testlib.\
|
||||
update_network_request(self.tenant_id,
|
||||
network_id, format,
|
||||
custom_req_body=bad_body)
|
||||
update_network_res = update_network_req.get_response(self.api)
|
||||
self.assertEqual(update_network_res.status_int, 400)
|
||||
LOG.debug("_test_rename_network_badrequest - format:%s - END", format)
|
||||
LOG.debug("_test_rename_network_badrequest - format:%s - END",
|
||||
format)
|
||||
|
||||
def _test_rename_network_not_found(self, format):
|
||||
LOG.debug("_test_rename_network_not_found - format:%s - START", format)
|
||||
LOG.debug("_test_rename_network_not_found - format:%s - START",
|
||||
format)
|
||||
new_name = 'new_network_name'
|
||||
update_network_req = testlib.update_network_request(self.tenant_id,
|
||||
"A BAD ID",
|
||||
@ -184,7 +172,8 @@ class APITest(unittest.TestCase):
|
||||
format)
|
||||
update_network_res = update_network_req.get_response(self.api)
|
||||
self.assertEqual(update_network_res.status_int, 420)
|
||||
LOG.debug("_test_rename_network_not_found - format:%s - END", format)
|
||||
LOG.debug("_test_rename_network_not_found - format:%s - END",
|
||||
format)
|
||||
|
||||
def _test_delete_network(self, format):
|
||||
LOG.debug("_test_delete_network - format:%s - START", format)
|
||||
@ -197,7 +186,8 @@ class APITest(unittest.TestCase):
|
||||
format)
|
||||
delete_network_res = delete_network_req.get_response(self.api)
|
||||
self.assertEqual(delete_network_res.status_int, 202)
|
||||
list_network_req = testlib.network_list_request(self.tenant_id, format)
|
||||
list_network_req = testlib.network_list_request(self.tenant_id,
|
||||
format)
|
||||
list_network_res = list_network_req.get_response(self.api)
|
||||
network_list_data = Serializer().deserialize(list_network_res.body,
|
||||
content_type)
|
||||
@ -267,7 +257,8 @@ class APITest(unittest.TestCase):
|
||||
LOG.debug("_test_show_port - format:%s - END", format)
|
||||
|
||||
def _test_show_port_networknotfound(self, format):
|
||||
LOG.debug("_test_show_port_networknotfound - format:%s - START", format)
|
||||
LOG.debug("_test_show_port_networknotfound - format:%s - START",
|
||||
format)
|
||||
port_state = "ACTIVE"
|
||||
network_id = self._create_network(format)
|
||||
port_id = self._create_port(network_id, port_state, format)
|
||||
@ -276,13 +267,15 @@ class APITest(unittest.TestCase):
|
||||
format)
|
||||
show_port_res = show_port_req.get_response(self.api)
|
||||
self.assertEqual(show_port_res.status_int, 420)
|
||||
LOG.debug("_test_show_port_networknotfound - format:%s - END", format)
|
||||
LOG.debug("_test_show_port_networknotfound - format:%s - END",
|
||||
format)
|
||||
|
||||
def _test_show_port_portnotfound(self, format):
|
||||
LOG.debug("_test_show_port_portnotfound - format:%s - START", format)
|
||||
network_id = self._create_network(format)
|
||||
show_port_req = testlib.show_port_request(self.tenant_id,
|
||||
network_id,"A_BAD_ID",
|
||||
network_id,
|
||||
"A_BAD_ID",
|
||||
format)
|
||||
show_port_res = show_port_req.get_response(self.api)
|
||||
self.assertEqual(show_port_res.status_int, 430)
|
||||
@ -294,8 +287,8 @@ class APITest(unittest.TestCase):
|
||||
port_state = "ACTIVE"
|
||||
network_id = self._create_network(format)
|
||||
port_id = self._create_port(network_id, port_state, format)
|
||||
show_port_req = testlib.show_port_request(self.tenant_id, network_id,
|
||||
port_id, format)
|
||||
show_port_req = testlib.show_port_request(self.tenant_id,
|
||||
network_id, port_id, format)
|
||||
show_port_res = show_port_req.get_response(self.api)
|
||||
self.assertEqual(show_port_res.status_int, 200)
|
||||
port_data = Serializer().deserialize(show_port_res.body, content_type)
|
||||
@ -303,10 +296,13 @@ class APITest(unittest.TestCase):
|
||||
LOG.debug("_test_create_port - format:%s - END", format)
|
||||
|
||||
def _test_create_port_networknotfound(self, format):
|
||||
LOG.debug("_test_create_port_networknotfound - format:%s - START", format)
|
||||
LOG.debug("_test_create_port_networknotfound - format:%s - START",
|
||||
format)
|
||||
port_state = "ACTIVE"
|
||||
self._create_port("A_BAD_ID", port_state, format, expected_res_status=420)
|
||||
LOG.debug("_test_create_port_networknotfound - format:%s - END", format)
|
||||
self._create_port("A_BAD_ID", port_state, format,
|
||||
expected_res_status=420)
|
||||
LOG.debug("_test_create_port_networknotfound - format:%s - END",
|
||||
format)
|
||||
|
||||
def _test_create_port_badrequest(self, format):
|
||||
LOG.debug("_test_create_port_badrequest - format:%s - START", format)
|
||||
@ -362,10 +358,10 @@ class APITest(unittest.TestCase):
|
||||
delete_port_res = delete_port_req.get_response(self.api)
|
||||
self.assertEqual(delete_port_res.status_int, 432)
|
||||
LOG.debug("_test_delete_port_in_use - format:%s - END", format)
|
||||
pass
|
||||
|
||||
def _test_delete_port_with_bad_id(self, format):
|
||||
LOG.debug("_test_delete_port_with_bad_id - format:%s - START", format)
|
||||
LOG.debug("_test_delete_port_with_bad_id - format:%s - START",
|
||||
format)
|
||||
port_state = "ACTIVE"
|
||||
network_id = self._create_network(format)
|
||||
self._create_port(network_id, port_state, format)
|
||||
@ -378,7 +374,8 @@ class APITest(unittest.TestCase):
|
||||
LOG.debug("_test_delete_port_with_bad_id - format:%s - END", format)
|
||||
|
||||
def _test_delete_port_networknotfound(self, format):
|
||||
LOG.debug("_test_delete_port_networknotfound - format:%s - START", format)
|
||||
LOG.debug("_test_delete_port_networknotfound - format:%s - START",
|
||||
format)
|
||||
port_state = "ACTIVE"
|
||||
network_id = self._create_network(format)
|
||||
port_id = self._create_port(network_id, port_state, format)
|
||||
@ -387,7 +384,8 @@ class APITest(unittest.TestCase):
|
||||
format)
|
||||
delete_port_res = delete_port_req.get_response(self.api)
|
||||
self.assertEqual(delete_port_res.status_int, 420)
|
||||
LOG.debug("_test_delete_port_networknotfound - format:%s - END", format)
|
||||
LOG.debug("_test_delete_port_networknotfound - format:%s - END",
|
||||
format)
|
||||
|
||||
def _test_set_port_state(self, format):
|
||||
LOG.debug("_test_set_port_state - format:%s - START", format)
|
||||
@ -414,7 +412,8 @@ class APITest(unittest.TestCase):
|
||||
LOG.debug("_test_set_port_state - format:%s - END", format)
|
||||
|
||||
def _test_set_port_state_networknotfound(self, format):
|
||||
LOG.debug("_test_set_port_state_networknotfound - format:%s - START", format)
|
||||
LOG.debug("_test_set_port_state_networknotfound - format:%s - START",
|
||||
format)
|
||||
port_state = 'DOWN'
|
||||
new_port_state = 'ACTIVE'
|
||||
network_id = self._create_network(format)
|
||||
@ -425,24 +424,29 @@ class APITest(unittest.TestCase):
|
||||
format)
|
||||
update_port_res = update_port_req.get_response(self.api)
|
||||
self.assertEqual(update_port_res.status_int, 420)
|
||||
LOG.debug("_test_set_port_state_networknotfound - format:%s - END", format)
|
||||
LOG.debug("_test_set_port_state_networknotfound - format:%s - END",
|
||||
format)
|
||||
|
||||
def _test_set_port_state_portnotfound(self, format):
|
||||
LOG.debug("_test_set_port_state_portnotfound - format:%s - START", format)
|
||||
LOG.debug("_test_set_port_state_portnotfound - format:%s - START",
|
||||
format)
|
||||
port_state = 'DOWN'
|
||||
new_port_state = 'ACTIVE'
|
||||
network_id = self._create_network(format)
|
||||
self._create_port(network_id, port_state, format)
|
||||
update_port_req = testlib.update_port_request(self.tenant_id,
|
||||
network_id,"A_BAD_ID",
|
||||
network_id,
|
||||
"A_BAD_ID",
|
||||
new_port_state,
|
||||
format)
|
||||
update_port_res = update_port_req.get_response(self.api)
|
||||
self.assertEqual(update_port_res.status_int, 430)
|
||||
LOG.debug("_test_set_port_state_portnotfound - format:%s - END", format)
|
||||
LOG.debug("_test_set_port_state_portnotfound - format:%s - END",
|
||||
format)
|
||||
|
||||
def _test_set_port_state_stateinvalid(self, format):
|
||||
LOG.debug("_test_set_port_state_stateinvalid - format:%s - START", format)
|
||||
LOG.debug("_test_set_port_state_stateinvalid - format:%s - START",
|
||||
format)
|
||||
port_state = 'DOWN'
|
||||
new_port_state = 'A_BAD_STATE'
|
||||
network_id = self._create_network(format)
|
||||
@ -453,10 +457,11 @@ class APITest(unittest.TestCase):
|
||||
format)
|
||||
update_port_res = update_port_req.get_response(self.api)
|
||||
self.assertEqual(update_port_res.status_int, 431)
|
||||
LOG.debug("_test_set_port_state_stateinvalid - format:%s - END", format)
|
||||
LOG.debug("_test_set_port_state_stateinvalid - format:%s - END",
|
||||
format)
|
||||
|
||||
def _test_put_attachment(self, format):
|
||||
LOG.debug("_test_put_attachment - format:%s - START", format)
|
||||
def _test_show_attachment(self, format):
|
||||
LOG.debug("_test_show_attachment - format:%s - START", format)
|
||||
content_type = "application/%s" % format
|
||||
port_state = "ACTIVE"
|
||||
network_id = self._create_network(format)
|
||||
@ -477,10 +482,56 @@ class APITest(unittest.TestCase):
|
||||
attachment_data = Serializer().deserialize(get_attachment_res.body,
|
||||
content_type)
|
||||
self.assertEqual(attachment_data['attachment'], interface_id)
|
||||
LOG.debug("_test_show_attachment - format:%s - END", format)
|
||||
|
||||
def _test_show_attachment_networknotfound(self, format):
|
||||
LOG.debug("_test_show_attachment_networknotfound - format:%s - START",
|
||||
format)
|
||||
port_state = "ACTIVE"
|
||||
network_id = self._create_network(format)
|
||||
port_id = self._create_port(network_id, port_state, format)
|
||||
get_attachment_req = testlib.get_attachment_request(self.tenant_id,
|
||||
"A_BAD_ID",
|
||||
port_id,
|
||||
format)
|
||||
get_attachment_res = get_attachment_req.get_response(self.api)
|
||||
self.assertEqual(get_attachment_res.status_int, 420)
|
||||
LOG.debug("_test_show_attachment_networknotfound - format:%s - END",
|
||||
format)
|
||||
|
||||
def _test_show_attachment_portnotfound(self, format):
|
||||
LOG.debug("_test_show_attachment_portnotfound - format:%s - START",
|
||||
format)
|
||||
port_state = "ACTIVE"
|
||||
network_id = self._create_network(format)
|
||||
self._create_port(network_id, port_state, format)
|
||||
get_attachment_req = testlib.get_attachment_request(self.tenant_id,
|
||||
network_id,
|
||||
"A_BAD_ID",
|
||||
format)
|
||||
get_attachment_res = get_attachment_req.get_response(self.api)
|
||||
self.assertEqual(get_attachment_res.status_int, 430)
|
||||
LOG.debug("_test_show_attachment_portnotfound - format:%s - END",
|
||||
format)
|
||||
|
||||
def _test_put_attachment(self, format):
|
||||
LOG.debug("_test_put_attachment - format:%s - START", format)
|
||||
port_state = "ACTIVE"
|
||||
network_id = self._create_network(format)
|
||||
interface_id = "test_interface"
|
||||
port_id = self._create_port(network_id, port_state, format)
|
||||
put_attachment_req = testlib.put_attachment_request(self.tenant_id,
|
||||
network_id,
|
||||
port_id,
|
||||
interface_id,
|
||||
format)
|
||||
put_attachment_res = put_attachment_req.get_response(self.api)
|
||||
self.assertEqual(put_attachment_res.status_int, 202)
|
||||
LOG.debug("_test_put_attachment - format:%s - END", format)
|
||||
|
||||
def _test_put_attachment_networknotfound(self, format):
|
||||
LOG.debug("_test_put_attachment_networknotfound - format:%s - START", format)
|
||||
LOG.debug("_test_put_attachment_networknotfound - format:%s - START",
|
||||
format)
|
||||
port_state = 'DOWN'
|
||||
interface_id = "test_interface"
|
||||
network_id = self._create_network(format)
|
||||
@ -492,10 +543,12 @@ class APITest(unittest.TestCase):
|
||||
format)
|
||||
put_attachment_res = put_attachment_req.get_response(self.api)
|
||||
self.assertEqual(put_attachment_res.status_int, 420)
|
||||
LOG.debug("_test_put_attachment_networknotfound - format:%s - END", format)
|
||||
LOG.debug("_test_put_attachment_networknotfound - format:%s - END",
|
||||
format)
|
||||
|
||||
def _test_put_attachment_portnotfound(self, format):
|
||||
LOG.debug("_test_put_attachment_portnotfound - format:%s - START", format)
|
||||
LOG.debug("_test_put_attachment_portnotfound - format:%s - START",
|
||||
format)
|
||||
port_state = 'DOWN'
|
||||
interface_id = "test_interface"
|
||||
network_id = self._create_network(format)
|
||||
@ -507,7 +560,59 @@ class APITest(unittest.TestCase):
|
||||
format)
|
||||
put_attachment_res = put_attachment_req.get_response(self.api)
|
||||
self.assertEqual(put_attachment_res.status_int, 430)
|
||||
LOG.debug("_test_put_attachment_portnotfound - format:%s - END", format)
|
||||
LOG.debug("_test_put_attachment_portnotfound - format:%s - END",
|
||||
format)
|
||||
|
||||
def _test_delete_attachment(self, format):
|
||||
LOG.debug("_test_delete_attachment - format:%s - START", format)
|
||||
port_state = "ACTIVE"
|
||||
network_id = self._create_network(format)
|
||||
interface_id = "test_interface"
|
||||
port_id = self._create_port(network_id, port_state, format)
|
||||
put_attachment_req = testlib.put_attachment_request(self.tenant_id,
|
||||
network_id,
|
||||
port_id,
|
||||
interface_id,
|
||||
format)
|
||||
put_attachment_res = put_attachment_req.get_response(self.api)
|
||||
self.assertEqual(put_attachment_res.status_int, 202)
|
||||
del_attachment_req = testlib.delete_attachment_request(self.tenant_id,
|
||||
network_id,
|
||||
port_id,
|
||||
format)
|
||||
del_attachment_res = del_attachment_req.get_response(self.api)
|
||||
self.assertEqual(del_attachment_res.status_int, 202)
|
||||
LOG.debug("_test_delete_attachment - format:%s - END", format)
|
||||
|
||||
def _test_delete_attachment_networknotfound(self, format):
|
||||
LOG.debug("_test_delete_attachment_networknotfound -" \
|
||||
" format:%s - START", format)
|
||||
port_state = "ACTIVE"
|
||||
network_id = self._create_network(format)
|
||||
port_id = self._create_port(network_id, port_state, format)
|
||||
del_attachment_req = testlib.delete_attachment_request(self.tenant_id,
|
||||
"A_BAD_ID",
|
||||
port_id,
|
||||
format)
|
||||
del_attachment_res = del_attachment_req.get_response(self.api)
|
||||
self.assertEqual(del_attachment_res.status_int, 420)
|
||||
LOG.debug("_test_delete_attachment_networknotfound -" \
|
||||
" format:%s - END", format)
|
||||
|
||||
def _test_delete_attachment_portnotfound(self, format):
|
||||
LOG.debug("_test_delete_attachment_portnotfound - " \
|
||||
" format:%s - START", format)
|
||||
port_state = "ACTIVE"
|
||||
network_id = self._create_network(format)
|
||||
self._create_port(network_id, port_state, format)
|
||||
del_attachment_req = testlib.delete_attachment_request(self.tenant_id,
|
||||
network_id,
|
||||
"A_BAD_ID",
|
||||
format)
|
||||
del_attachment_res = del_attachment_req.get_response(self.api)
|
||||
self.assertEqual(del_attachment_res.status_int, 430)
|
||||
LOG.debug("_test_delete_attachment_portnotfound - " \
|
||||
"format:%s - END", format)
|
||||
|
||||
def setUp(self):
|
||||
self.db_file = ':memory:'
|
||||
@ -673,6 +778,24 @@ class APITest(unittest.TestCase):
|
||||
def test_set_port_state_stateinvalid_json(self):
|
||||
self._test_set_port_state_stateinvalid('json')
|
||||
|
||||
def test_show_attachment_xml(self):
|
||||
self._test_show_attachment('xml')
|
||||
|
||||
def test_show_attachment_json(self):
|
||||
self._test_show_attachment('json')
|
||||
|
||||
def test_show_attachment_networknotfound_xml(self):
|
||||
self._test_show_attachment_networknotfound('xml')
|
||||
|
||||
def test_show_attachment_networknotfound_json(self):
|
||||
self._test_show_attachment_networknotfound('json')
|
||||
|
||||
def test_show_attachment_portnotfound_xml(self):
|
||||
self._test_show_attachment_portnotfound('xml')
|
||||
|
||||
def test_show_attachment_portnotfound_json(self):
|
||||
self._test_show_attachment_portnotfound('json')
|
||||
|
||||
def test_put_attachment_xml(self):
|
||||
self._test_put_attachment('xml')
|
||||
|
||||
@ -690,3 +813,21 @@ class APITest(unittest.TestCase):
|
||||
|
||||
def test_put_attachment_portnotfound_json(self):
|
||||
self._test_put_attachment_portnotfound('json')
|
||||
|
||||
def test_delete_attachment_xml(self):
|
||||
self._test_delete_attachment('xml')
|
||||
|
||||
def test_delete_attachment_json(self):
|
||||
self._test_delete_attachment('json')
|
||||
|
||||
def test_delete_attachment_networknotfound_xml(self):
|
||||
self._test_delete_attachment_networknotfound('xml')
|
||||
|
||||
def test_delete_attachment_networknotfound_json(self):
|
||||
self._test_delete_attachment_networknotfound('json')
|
||||
|
||||
def test_delete_attachment_portnotfound_xml(self):
|
||||
self._test_delete_attachment_portnotfound('xml')
|
||||
|
||||
def test_delete_attachment_portnotfound_json(self):
|
||||
self._test_delete_attachment_portnotfound('json')
|
||||
|
@ -91,8 +91,8 @@ def port_delete_request(tenant_id, network_id, port_id, format='xml'):
|
||||
return create_request(path, None, content_type, method)
|
||||
|
||||
|
||||
def update_port_request(tenant_id, network_id, port_id, port_state, format='xml',
|
||||
custom_req_body=None):
|
||||
def update_port_request(tenant_id, network_id, port_id, port_state,
|
||||
format='xml', custom_req_body=None):
|
||||
method = 'PUT'
|
||||
path = "/tenants/%(tenant_id)s/networks" \
|
||||
"/%(network_id)s/ports/%(port_id)s.%(format)s" % locals()
|
||||
@ -119,3 +119,12 @@ def put_attachment_request(tenant_id, network_id, port_id,
|
||||
content_type = "application/%s" % format
|
||||
body = Serializer().serialize(data, content_type)
|
||||
return create_request(path, body, content_type, method)
|
||||
|
||||
|
||||
def delete_attachment_request(tenant_id, network_id, port_id,
|
||||
attachment_id, format='xml'):
|
||||
method = 'DELETE'
|
||||
path = "/tenants/%(tenant_id)s/networks/" \
|
||||
"%(network_id)s/ports/%(port_id)s/attachment.%(format)s" % locals()
|
||||
content_type = "application/%s" % format
|
||||
return create_request(path, None, content_type, method)
|
Loading…
x
Reference in New Issue
Block a user