Re-factor neutron client for 'update' methods

Currently neutron client is written to auto generate
methods on fly. This is very difficult to debug and
make code very difficult to read.

As neutron client will be moved to lib, it will be better to
have its interfaces more readable and consistent with other
service clients.

This commit re-factor it for 'update_*' methods.

Change-Id: I67039beb934b88a048740a06e06d5a0a5b920942
diff --git a/tempest/services/network/json/network_client.py b/tempest/services/network/json/network_client.py
index 5f85199..2ae9a06 100644
--- a/tempest/services/network/json/network_client.py
+++ b/tempest/services/network/json/network_client.py
@@ -119,24 +119,19 @@
         self.expected_success(201, resp.status)
         return service_client.ResponseBody(resp, body)
 
-    def _updater(self, resource_name):
-        def _update(res_id, **kwargs):
-            plural = self.pluralize(resource_name)
-            uri = '%s/%s' % (self.get_uri(plural), res_id)
-            post_data = self.serialize({resource_name: kwargs})
-            resp, body = self.put(uri, post_data)
-            body = self.deserialize_single(body)
-            self.expected_success(200, resp.status)
-            return service_client.ResponseBody(resp, body)
-
-        return _update
+    def _update_resource(self, uri, post_data):
+        req_uri = self.uri_prefix + uri
+        req_post_data = self.serialize(post_data)
+        resp, body = self.put(req_uri, req_post_data)
+        body = self.deserialize_single(body)
+        self.expected_success(200, resp.status)
+        return service_client.ResponseBody(resp, body)
 
     def __getattr__(self, name):
-        method_prefixes = ["list_", "delete_", "show_", "update_"]
+        method_prefixes = ["list_", "delete_", "show_"]
         method_functors = [self._lister,
                            self._deleter,
-                           self._shower,
-                           self._updater]
+                           self._shower]
         for index, prefix in enumerate(method_prefixes):
             prefix_len = len(prefix)
             if name[:prefix_len] == prefix:
@@ -148,21 +143,41 @@
         post_data = {'network': kwargs}
         return self._create_resource(uri, post_data)
 
+    def update_network(self, network_id, **kwargs):
+        uri = '/networks/%s' % network_id
+        post_data = {'network': kwargs}
+        return self._update_resource(uri, post_data)
+
     def create_subnet(self, **kwargs):
         uri = '/subnets'
         post_data = {'subnet': kwargs}
         return self._create_resource(uri, post_data)
 
+    def update_subnet(self, subnet_id, **kwargs):
+        uri = '/subnets/%s' % subnet_id
+        post_data = {'subnet': kwargs}
+        return self._update_resource(uri, post_data)
+
     def create_port(self, **kwargs):
         uri = '/ports'
         post_data = {'port': kwargs}
         return self._create_resource(uri, post_data)
 
+    def update_port(self, port_id, **kwargs):
+        uri = '/ports/%s' % port_id
+        post_data = {'port': kwargs}
+        return self._update_resource(uri, post_data)
+
     def create_floatingip(self, **kwargs):
         uri = '/floatingips'
         post_data = {'floatingip': kwargs}
         return self._create_resource(uri, post_data)
 
+    def update_floatingip(self, floatingip_id, **kwargs):
+        uri = '/floatingips/%s' % floatingip_id
+        post_data = {'floatingip': kwargs}
+        return self._update_resource(uri, post_data)
+
     def create_metering_label(self, **kwargs):
         uri = '/metering/metering-labels'
         post_data = {'metering_label': kwargs}
@@ -178,6 +193,11 @@
         post_data = {'security_group': kwargs}
         return self._create_resource(uri, post_data)
 
+    def update_security_group(self, security_group_id, **kwargs):
+        uri = '/security-groups/%s' % security_group_id
+        post_data = {'security_group': kwargs}
+        return self._update_resource(uri, post_data)
+
     def create_security_group_rule(self, **kwargs):
         uri = '/security-group-rules'
         post_data = {'security_group_rule': kwargs}