Revisit (add|remove)_subports request body

The neutronclient [1] expects to serialize a dictionary any
time there is a body in the request. The (add|remove)_subports
methods were expecting a list of dicts instead.

This patch rectifies the issue by assuming a dict in the
body of the format {'sub_ports': [<my-subports]}. This is
indeed the most conventional way to pass request data to
Neutron server, and it was overlooked during a past review.

This was discovered during development of the client side
patch [2].

[1] https://github.com/openstack/python-neutronclient/blob/master/neutronclient/v2_0/client.py#L292
[2] https://review.openstack.org/#/c/340624/

Partially-implements: blueprint vlan-aware-vms
Change-Id: I8d36c61dd877d0ccb73c18702ed64897b71f001b
diff --git a/neutron/tests/tempest/services/network/json/network_client.py b/neutron/tests/tempest/services/network/json/network_client.py
index 36a7f5b..12ba685 100644
--- a/neutron/tests/tempest/services/network/json/network_client.py
+++ b/neutron/tests/tempest/services/network/json/network_client.py
@@ -713,7 +713,7 @@
 
     def _subports_action(self, action, trunk_id, subports):
         uri = '%s/trunks/%s/%s' % (self.uri_prefix, trunk_id, action)
-        resp, body = self.put(uri, jsonutils.dumps(subports))
+        resp, body = self.put(uri, jsonutils.dumps({'sub_ports': subports}))
         body = self.deserialize_single(body)
         self.expected_success(200, resp.status)
         return service_client.ResponseBody(resp, body)