Merge "Make volume volume_client to use **kwargs-part2"
diff --git a/tempest/api/volume/admin/test_volume_types.py b/tempest/api/volume/admin/test_volume_types.py
index acb591d..c032d9c 100644
--- a/tempest/api/volume/admin/test_volume_types.py
+++ b/tempest/api/volume/admin/test_volume_types.py
@@ -70,7 +70,7 @@
 
         # Update volume with new volume_type
         self.volumes_client.retype_volume(volume['id'],
-                                          volume_type=volume_types[1]['id'])
+                                          new_type=volume_types[1]['id'])
         self.volumes_client.wait_for_volume_status(volume['id'], 'available')
 
         # Get volume details and Verify
diff --git a/tempest/api/volume/admin/test_volumes_actions.py b/tempest/api/volume/admin/test_volumes_actions.py
index 6c32321..253a3e1 100644
--- a/tempest/api/volume/admin/test_volumes_actions.py
+++ b/tempest/api/volume/admin/test_volumes_actions.py
@@ -48,12 +48,12 @@
     def _reset_volume_status(self, volume_id, status):
         # Reset the volume status
         body = self.admin_volume_client.reset_volume_status(volume_id,
-                                                            status)
+                                                            status=status)
         return body
 
     def tearDown(self):
         # Set volume's status to available after test
-        self._reset_volume_status(self.volume['id'], 'available')
+        self._reset_volume_status(self.volume['id'], status='available')
         super(VolumesActionsV2Test, self).tearDown()
 
     def _create_temp_volume(self):
diff --git a/tempest/api/volume/test_volume_transfers.py b/tempest/api/volume/test_volume_transfers.py
index c0b6b7e..7046dcf 100644
--- a/tempest/api/volume/test_volume_transfers.py
+++ b/tempest/api/volume/test_volume_transfers.py
@@ -47,7 +47,8 @@
         self.addCleanup(self._delete_volume, volume['id'])
 
         # Create a volume transfer
-        transfer = self.client.create_volume_transfer(volume['id'])['transfer']
+        transfer = self.client.create_volume_transfer(
+            volume_id=volume['id'])['transfer']
         transfer_id = transfer['id']
         auth_key = transfer['auth_key']
         self.client.wait_for_volume_status(volume['id'],
@@ -63,8 +64,8 @@
         self.assertThat(len(body), matchers.GreaterThan(0))
 
         # Accept a volume transfer by alt_tenant
-        body = self.alt_client.accept_volume_transfer(transfer_id,
-                                                      auth_key)['transfer']
+        body = self.alt_client.accept_volume_transfer(
+            transfer_id, auth_key=auth_key)['transfer']
         self.alt_client.wait_for_volume_status(volume['id'], 'available')
 
     @test.idempotent_id('ab526943-b725-4c07-b875-8e8ef87a2c30')
@@ -74,7 +75,8 @@
         self.addCleanup(self._delete_volume, volume['id'])
 
         # Create a volume transfer
-        body = self.client.create_volume_transfer(volume['id'])['transfer']
+        body = self.client.create_volume_transfer(
+            volume_id=volume['id'])['transfer']
         transfer_id = body['id']
         self.client.wait_for_volume_status(volume['id'],
                                            'awaiting-transfer')
diff --git a/tempest/api/volume/test_volumes_actions.py b/tempest/api/volume/test_volumes_actions.py
index 5a6d215..5f9ea7f 100644
--- a/tempest/api/volume/test_volumes_actions.py
+++ b/tempest/api/volume/test_volumes_actions.py
@@ -74,7 +74,8 @@
     def test_volume_bootable(self):
         # Verify that a volume bootable flag is retrieved
         for bool_bootable in [True, False]:
-            self.client.set_bootable_volume(self.volume['id'], bool_bootable)
+            self.client.set_bootable_volume(self.volume['id'],
+                                            bootable=bool_bootable)
             fetched_volume = self.client.show_volume(
                 self.volume['id'])['volume']
             # Get Volume information
@@ -142,7 +143,7 @@
         # Update volume readonly true
         readonly = True
         self.client.update_volume_readonly(self.volume['id'],
-                                           readonly)
+                                           readonly=readonly)
         # Get Volume information
         fetched_volume = self.client.show_volume(self.volume['id'])['volume']
         bool_flag = self._is_true(fetched_volume['metadata']['readonly'])
@@ -150,7 +151,8 @@
 
         # Update volume readonly false
         readonly = False
-        self.client.update_volume_readonly(self.volume['id'], readonly)
+        self.client.update_volume_readonly(self.volume['id'],
+                                           readonly=readonly)
 
         # Get Volume information
         fetched_volume = self.client.show_volume(self.volume['id'])['volume']
diff --git a/tempest/api/volume/test_volumes_extend.py b/tempest/api/volume/test_volumes_extend.py
index 78f5571..ed1e5c5 100644
--- a/tempest/api/volume/test_volumes_extend.py
+++ b/tempest/api/volume/test_volumes_extend.py
@@ -32,7 +32,7 @@
         # Extend Volume Test.
         self.volume = self.create_volume()
         extend_size = int(self.volume['size']) + 1
-        self.client.extend_volume(self.volume['id'], extend_size)
+        self.client.extend_volume(self.volume['id'], new_size=extend_size)
         self.client.wait_for_volume_status(self.volume['id'], 'available')
         volume = self.client.show_volume(self.volume['id'])['volume']
         self.assertEqual(int(volume['size']), extend_size)
diff --git a/tempest/api/volume/test_volumes_negative.py b/tempest/api/volume/test_volumes_negative.py
index 16398ed..ad6f556 100644
--- a/tempest/api/volume/test_volumes_negative.py
+++ b/tempest/api/volume/test_volumes_negative.py
@@ -206,7 +206,7 @@
         # Extend volume with smaller size than original size.
         extend_size = 0
         self.assertRaises(lib_exc.BadRequest, self.client.extend_volume,
-                          self.volume['id'], extend_size)
+                          self.volume['id'], new_size=extend_size)
 
     @test.attr(type=['negative'])
     @test.idempotent_id('5d0b480d-e833-439f-8a5a-96ad2ed6f22f')
@@ -214,7 +214,7 @@
         # Extend volume when size is non number.
         extend_size = 'abc'
         self.assertRaises(lib_exc.BadRequest, self.client.extend_volume,
-                          self.volume['id'], extend_size)
+                          self.volume['id'], new_size=extend_size)
 
     @test.attr(type=['negative'])
     @test.idempotent_id('355218f1-8991-400a-a6bb-971239287d92')
@@ -222,7 +222,7 @@
         # Extend volume with None size.
         extend_size = None
         self.assertRaises(lib_exc.BadRequest, self.client.extend_volume,
-                          self.volume['id'], extend_size)
+                          self.volume['id'], new_size=extend_size)
 
     @test.attr(type=['negative'])
     @test.idempotent_id('8f05a943-013c-4063-ac71-7baf561e82eb')
@@ -230,7 +230,7 @@
         # Extend volume size when volume is nonexistent.
         extend_size = int(self.volume['size']) + 1
         self.assertRaises(lib_exc.NotFound, self.client.extend_volume,
-                          str(uuid.uuid4()), extend_size)
+                          str(uuid.uuid4()), new_size=extend_size)
 
     @test.attr(type=['negative'])
     @test.idempotent_id('aff8ba64-6d6f-4f2e-bc33-41a08ee9f115')
@@ -238,7 +238,7 @@
         # Extend volume size when passing volume id is None.
         extend_size = int(self.volume['size']) + 1
         self.assertRaises(lib_exc.NotFound, self.client.extend_volume,
-                          None, extend_size)
+                          None, new_size=extend_size)
 
     @test.attr(type=['negative'])
     @test.idempotent_id('ac6084c0-0546-45f9-b284-38a367e0e0e2')
diff --git a/tempest/services/volume/base/base_volumes_client.py b/tempest/services/volume/base/base_volumes_client.py
index 179fb4e..d4435bc 100644
--- a/tempest/services/volume/base/base_volumes_client.py
+++ b/tempest/services/volume/base/base_volumes_client.py
@@ -116,10 +116,9 @@
         self.expected_success(202, resp.status)
         return service_client.ResponseBody(resp, body)
 
-    def set_bootable_volume(self, volume_id, bootable):
+    def set_bootable_volume(self, volume_id, **kwargs):
         """set a bootable flag for a volume - true or false."""
-        post_body = {"bootable": bootable}
-        post_body = json.dumps({'os-set_bootable': post_body})
+        post_body = json.dumps({'os-set_bootable': kwargs})
         url = 'volumes/%s/action' % (volume_id)
         resp, body = self.post(url, post_body)
         self.expected_success(200, resp.status)
@@ -127,8 +126,7 @@
 
     def detach_volume(self, volume_id):
         """Detaches a volume from an instance."""
-        post_body = {}
-        post_body = json.dumps({'os-detach': post_body})
+        post_body = json.dumps({'os-detach': {}})
         url = 'volumes/%s/action' % (volume_id)
         resp, body = self.post(url, post_body)
         self.expected_success(202, resp.status)
@@ -136,8 +134,7 @@
 
     def reserve_volume(self, volume_id):
         """Reserves a volume."""
-        post_body = {}
-        post_body = json.dumps({'os-reserve': post_body})
+        post_body = json.dumps({'os-reserve': {}})
         url = 'volumes/%s/action' % (volume_id)
         resp, body = self.post(url, post_body)
         self.expected_success(202, resp.status)
@@ -145,8 +142,7 @@
 
     def unreserve_volume(self, volume_id):
         """Restore a reserved volume ."""
-        post_body = {}
-        post_body = json.dumps({'os-unreserve': post_body})
+        post_body = json.dumps({'os-unreserve': {}})
         url = 'volumes/%s/action' % (volume_id)
         resp, body = self.post(url, post_body)
         self.expected_success(202, resp.status)
@@ -168,20 +164,17 @@
         """Returns the primary type of resource this client works with."""
         return 'volume'
 
-    def extend_volume(self, volume_id, extend_size):
+    def extend_volume(self, volume_id, **kwargs):
         """Extend a volume."""
-        post_body = {
-            'new_size': extend_size
-        }
-        post_body = json.dumps({'os-extend': post_body})
+        post_body = json.dumps({'os-extend': kwargs})
         url = 'volumes/%s/action' % (volume_id)
         resp, body = self.post(url, post_body)
         self.expected_success(202, resp.status)
         return service_client.ResponseBody(resp, body)
 
-    def reset_volume_status(self, volume_id, status):
+    def reset_volume_status(self, volume_id, **kwargs):
         """Reset the Specified Volume's Status."""
-        post_body = json.dumps({'os-reset_status': {"status": status}})
+        post_body = json.dumps({'os-reset_status': kwargs})
         resp, body = self.post('volumes/%s/action' % volume_id, post_body)
         self.expected_success(202, resp.status)
         return service_client.ResponseBody(resp, body)
@@ -202,14 +195,9 @@
         self.expected_success(202, resp.status)
         return service_client.ResponseBody(resp, body)
 
-    def create_volume_transfer(self, vol_id, display_name=None):
+    def create_volume_transfer(self, **kwargs):
         """Create a volume transfer."""
-        post_body = {
-            'volume_id': vol_id
-        }
-        if display_name:
-            post_body['name'] = display_name
-        post_body = json.dumps({'transfer': post_body})
+        post_body = json.dumps({'transfer': kwargs})
         resp, body = self.post('os-volume-transfer', post_body)
         body = json.loads(body)
         self.expected_success(202, resp.status)
@@ -223,7 +211,7 @@
         self.expected_success(200, resp.status)
         return service_client.ResponseBody(resp, body)
 
-    def list_volume_transfers(self, params=None):
+    def list_volume_transfers(self, **params):
         """List all the volume transfers created."""
         url = 'os-volume-transfer'
         if params:
@@ -239,24 +227,18 @@
         self.expected_success(202, resp.status)
         return service_client.ResponseBody(resp, body)
 
-    def accept_volume_transfer(self, transfer_id, transfer_auth_key):
+    def accept_volume_transfer(self, transfer_id, **kwargs):
         """Accept a volume transfer."""
-        post_body = {
-            'auth_key': transfer_auth_key,
-        }
         url = 'os-volume-transfer/%s/accept' % transfer_id
-        post_body = json.dumps({'accept': post_body})
+        post_body = json.dumps({'accept': kwargs})
         resp, body = self.post(url, post_body)
         body = json.loads(body)
         self.expected_success(202, resp.status)
         return service_client.ResponseBody(resp, body)
 
-    def update_volume_readonly(self, volume_id, readonly):
+    def update_volume_readonly(self, volume_id, **kwargs):
         """Update the Specified Volume readonly."""
-        post_body = {
-            'readonly': readonly
-        }
-        post_body = json.dumps({'os-update_readonly_flag': post_body})
+        post_body = json.dumps({'os-update_readonly_flag': kwargs})
         url = 'volumes/%s/action' % (volume_id)
         resp, body = self.post(url, post_body)
         self.expected_success(202, resp.status)
@@ -311,10 +293,8 @@
         self.expected_success(200, resp.status)
         return service_client.ResponseBody(resp, body)
 
-    def retype_volume(self, volume_id, volume_type, **kwargs):
+    def retype_volume(self, volume_id, **kwargs):
         """Updates volume with new volume type."""
-        post_body = {'new_type': volume_type}
-        post_body.update(kwargs)
-        post_body = json.dumps({'os-retype': post_body})
+        post_body = json.dumps({'os-retype': kwargs})
         resp, body = self.post('volumes/%s/action' % volume_id, post_body)
         self.expected_success(202, resp.status)