diff --git a/doc/source/command-objects/volume_qos.rst b/doc/source/command-objects/volume_qos.rst
index 287059f1cc..d0fe36f940 100644
--- a/doc/source/command-objects/volume_qos.rst
+++ b/doc/source/command-objects/volume_qos.rst
@@ -13,10 +13,10 @@ Associate a QoS specification to a volume type
 .. code:: bash
 
     os volume qos associate
-        <qos-specs>
+        <qos-spec>
         <volume-type>
 
-.. describe:: <qos-specs>
+.. describe:: <qos-spec>
 
     QoS specification to modify (name or ID)
 
@@ -58,11 +58,11 @@ Delete QoS specification
 .. code:: bash
 
     os volume qos delete
-         <qos-specs>
+         <qos-spec> [<qos-spec> ...]
 
-.. describe:: <qos-specs>
+.. describe:: <qos-spec>
 
-    QoS specification to delete (name or ID)
+    QoS specification(s) to delete (name or ID)
 
 volume qos disassociate
 -----------------------
@@ -74,7 +74,7 @@ Disassociate a QoS specification from a volume type
 
     os volume qos disassociate
         --volume-type <volume-type> | --all
-        <qos-specs>
+        <qos-spec>
 
 .. option:: --volume-type <volume-type>
 
@@ -84,7 +84,7 @@ Disassociate a QoS specification from a volume type
 
     Disassociate the QoS from every volume type
 
-.. describe:: <qos-specs>
+.. describe:: <qos-spec>
 
     QoS specification to modify (name or ID)
 
@@ -108,13 +108,13 @@ Set QoS specification properties
 
     os volume qos set
         [--property <key=value> [...] ]
-        <qos-specs>
+        <qos-spec>
 
 .. option:: --property <key=value>
 
     Property to add or modify for this QoS specification (repeat option to set multiple properties)
 
-.. describe:: <qos-specs>
+.. describe:: <qos-spec>
 
     QoS specification to modify (name or ID)
 
@@ -127,9 +127,9 @@ Display QoS specification details
 .. code:: bash
 
     os volume qos show
-        <qos-specs>
+        <qos-spec>
 
-.. describe:: <qos-specs>
+.. describe:: <qos-spec>
 
    QoS specification to display (name or ID)
 
@@ -143,12 +143,12 @@ Unset QoS specification properties
 
     os volume qos unset
         [--property <key>]
-        <qos-specs>
+        <qos-spec>
 
 .. option:: --property <key>
 
     Property to remove from QoS specification (repeat option to remove multiple properties)
 
-.. describe:: <qos-specs>
+.. describe:: <qos-spec>
 
     QoS specification to modify (name or ID)
diff --git a/openstackclient/tests/volume/v1/test_qos_specs.py b/openstackclient/tests/volume/v1/test_qos_specs.py
index 226fe673e5..c2e6c0afc8 100644
--- a/openstackclient/tests/volume/v1/test_qos_specs.py
+++ b/openstackclient/tests/volume/v1/test_qos_specs.py
@@ -56,7 +56,7 @@ class TestQosAssociate(TestQos):
             volume_fakes.type_id
         ]
         verifylist = [
-            ('qos_specs', volume_fakes.qos_id),
+            ('qos_spec', volume_fakes.qos_id),
             ('volume_type', volume_fakes.type_id)
         ]
         parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@@ -210,7 +210,7 @@ class TestQosDelete(TestQos):
             volume_fakes.qos_id
         ]
         verifylist = [
-            ('qos_specs', volume_fakes.qos_id)
+            ('qos_specs', [volume_fakes.qos_id])
         ]
 
         parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@@ -223,7 +223,7 @@ class TestQosDelete(TestQos):
             volume_fakes.qos_name
         ]
         verifylist = [
-            ('qos_specs', volume_fakes.qos_name)
+            ('qos_specs', [volume_fakes.qos_name])
         ]
 
         parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@@ -255,7 +255,7 @@ class TestQosDisassociate(TestQos):
             '--volume-type', volume_fakes.type_id
         ]
         verifylist = [
-            ('qos_specs', volume_fakes.qos_id),
+            ('qos_spec', volume_fakes.qos_id),
             ('volume_type', volume_fakes.type_id)
         ]
         parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@@ -278,7 +278,7 @@ class TestQosDisassociate(TestQos):
             '--all'
         ]
         verifylist = [
-            ('qos_specs', volume_fakes.qos_id)
+            ('qos_spec', volume_fakes.qos_id)
         ]
         parsed_args = self.check_parser(self.cmd, arglist, verifylist)
 
@@ -351,7 +351,7 @@ class TestQosSet(TestQos):
             '--property', 'iops=9001'
         ]
         verifylist = [
-            ('qos_specs', volume_fakes.qos_id),
+            ('qos_spec', volume_fakes.qos_id),
             ('property', volume_fakes.qos_specs)
         ]
         parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@@ -386,7 +386,7 @@ class TestQosShow(TestQos):
             volume_fakes.qos_id
         ]
         verifylist = [
-            ('qos_specs', volume_fakes.qos_id)
+            ('qos_spec', volume_fakes.qos_id)
         ]
 
         parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@@ -434,7 +434,7 @@ class TestQosUnset(TestQos):
         ]
 
         verifylist = [
-            ('qos_specs', volume_fakes.qos_id),
+            ('qos_spec', volume_fakes.qos_id),
             ('property', ['iops', 'foo'])
         ]
         parsed_args = self.check_parser(self.cmd, arglist, verifylist)
diff --git a/openstackclient/tests/volume/v2/test_qos_specs.py b/openstackclient/tests/volume/v2/test_qos_specs.py
index 6a5509887a..4222ed0772 100644
--- a/openstackclient/tests/volume/v2/test_qos_specs.py
+++ b/openstackclient/tests/volume/v2/test_qos_specs.py
@@ -56,7 +56,7 @@ class TestQosAssociate(TestQos):
             volume_fakes.type_id
         ]
         verifylist = [
-            ('qos_specs', volume_fakes.qos_id),
+            ('qos_spec', volume_fakes.qos_id),
             ('volume_type', volume_fakes.type_id)
         ]
         parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@@ -210,7 +210,7 @@ class TestQosDelete(TestQos):
             volume_fakes.qos_id
         ]
         verifylist = [
-            ('qos_specs', volume_fakes.qos_id)
+            ('qos_specs', [volume_fakes.qos_id])
         ]
 
         parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@@ -223,7 +223,7 @@ class TestQosDelete(TestQos):
             volume_fakes.qos_name
         ]
         verifylist = [
-            ('qos_specs', volume_fakes.qos_name)
+            ('qos_specs', [volume_fakes.qos_name])
         ]
 
         parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@@ -255,7 +255,7 @@ class TestQosDisassociate(TestQos):
             '--volume-type', volume_fakes.type_id
         ]
         verifylist = [
-            ('qos_specs', volume_fakes.qos_id),
+            ('qos_spec', volume_fakes.qos_id),
             ('volume_type', volume_fakes.type_id)
         ]
         parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@@ -278,7 +278,7 @@ class TestQosDisassociate(TestQos):
             '--all'
         ]
         verifylist = [
-            ('qos_specs', volume_fakes.qos_id)
+            ('qos_spec', volume_fakes.qos_id)
         ]
         parsed_args = self.check_parser(self.cmd, arglist, verifylist)
 
@@ -351,7 +351,7 @@ class TestQosSet(TestQos):
             '--property', 'iops=9001'
         ]
         verifylist = [
-            ('qos_specs', volume_fakes.qos_id),
+            ('qos_spec', volume_fakes.qos_id),
             ('property', volume_fakes.qos_specs)
         ]
         parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@@ -386,7 +386,7 @@ class TestQosShow(TestQos):
             volume_fakes.qos_id
         ]
         verifylist = [
-            ('qos_specs', volume_fakes.qos_id)
+            ('qos_spec', volume_fakes.qos_id)
         ]
 
         parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@@ -434,7 +434,7 @@ class TestQosUnset(TestQos):
         ]
 
         verifylist = [
-            ('qos_specs', volume_fakes.qos_id),
+            ('qos_spec', volume_fakes.qos_id),
             ('property', ['iops', 'foo'])
         ]
         parsed_args = self.check_parser(self.cmd, arglist, verifylist)
diff --git a/openstackclient/volume/v1/qos_specs.py b/openstackclient/volume/v1/qos_specs.py
index eacb970687..8e909e3d3b 100644
--- a/openstackclient/volume/v1/qos_specs.py
+++ b/openstackclient/volume/v1/qos_specs.py
@@ -34,8 +34,8 @@ class AssociateQos(command.Command):
     def get_parser(self, prog_name):
         parser = super(AssociateQos, self).get_parser(prog_name)
         parser.add_argument(
-            'qos_specs',
-            metavar='<qos-specs>',
+            'qos_spec',
+            metavar='<qos-spec>',
             help='QoS specification to modify (name or ID)',
         )
         parser.add_argument(
@@ -48,12 +48,12 @@ class AssociateQos(command.Command):
     def take_action(self, parsed_args):
         self.log.debug('take_action(%s)', parsed_args)
         volume_client = self.app.client_manager.volume
-        qos_specs = utils.find_resource(volume_client.qos_specs,
-                                        parsed_args.qos_specs)
+        qos_spec = utils.find_resource(volume_client.qos_specs,
+                                       parsed_args.qos_spec)
         volume_type = utils.find_resource(volume_client.volume_types,
                                           parsed_args.volume_type)
 
-        volume_client.qos_specs.associate(qos_specs.id, volume_type.id)
+        volume_client.qos_specs.associate(qos_spec.id, volume_type.id)
 
         return
 
@@ -97,9 +97,9 @@ class CreateQos(show.ShowOne):
         if parsed_args.property:
             specs.update(parsed_args.property)
 
-        qos_specs = volume_client.qos_specs.create(parsed_args.name, specs)
+        qos_spec = volume_client.qos_specs.create(parsed_args.name, specs)
 
-        return zip(*sorted(six.iteritems(qos_specs._info)))
+        return zip(*sorted(six.iteritems(qos_spec._info)))
 
 
 class DeleteQos(command.Command):
@@ -111,19 +111,18 @@ class DeleteQos(command.Command):
         parser = super(DeleteQos, self).get_parser(prog_name)
         parser.add_argument(
             'qos_specs',
-            metavar='<qos-specs>',
-            help='QoS specification to delete (name or ID)',
+            metavar='<qos-spec>',
+            nargs="+",
+            help='QoS specification(s) to delete (name or ID)',
         )
         return parser
 
     def take_action(self, parsed_args):
         self.log.debug('take_action(%s)', parsed_args)
         volume_client = self.app.client_manager.volume
-        qos_specs = utils.find_resource(volume_client.qos_specs,
-                                        parsed_args.qos_specs)
-
-        volume_client.qos_specs.delete(qos_specs.id)
-
+        for qos in parsed_args.qos_specs:
+            qos_spec = utils.find_resource(volume_client.qos_specs, qos)
+            volume_client.qos_specs.delete(qos_spec.id)
         return
 
 
@@ -135,8 +134,8 @@ class DisassociateQos(command.Command):
     def get_parser(self, prog_name):
         parser = super(DisassociateQos, self).get_parser(prog_name)
         parser.add_argument(
-            'qos_specs',
-            metavar='<qos-specs>',
+            'qos_spec',
+            metavar='<qos-spec>',
             help='QoS specification to modify (name or ID)',
         )
         volume_type_group = parser.add_mutually_exclusive_group()
@@ -157,15 +156,15 @@ class DisassociateQos(command.Command):
     def take_action(self, parsed_args):
         self.log.debug('take_action(%s)', parsed_args)
         volume_client = self.app.client_manager.volume
-        qos_specs = utils.find_resource(volume_client.qos_specs,
-                                        parsed_args.qos_specs)
+        qos_spec = utils.find_resource(volume_client.qos_specs,
+                                       parsed_args.qos_spec)
 
         if parsed_args.volume_type:
             volume_type = utils.find_resource(volume_client.volume_types,
                                               parsed_args.volume_type)
-            volume_client.qos_specs.disassociate(qos_specs.id, volume_type.id)
+            volume_client.qos_specs.disassociate(qos_spec.id, volume_type.id)
         elif parsed_args.all:
-            volume_client.qos_specs.disassociate_all(qos_specs.id)
+            volume_client.qos_specs.disassociate_all(qos_spec.id)
 
         return
 
@@ -206,8 +205,8 @@ class SetQos(command.Command):
     def get_parser(self, prog_name):
         parser = super(SetQos, self).get_parser(prog_name)
         parser.add_argument(
-            'qos_specs',
-            metavar='<qos-specs>',
+            'qos_spec',
+            metavar='<qos-spec>',
             help='QoS specification to modify (name or ID)',
         )
         parser.add_argument(
@@ -222,11 +221,11 @@ class SetQos(command.Command):
     def take_action(self, parsed_args):
         self.log.debug('take_action(%s)', parsed_args)
         volume_client = self.app.client_manager.volume
-        qos_specs = utils.find_resource(volume_client.qos_specs,
-                                        parsed_args.qos_specs)
+        qos_spec = utils.find_resource(volume_client.qos_specs,
+                                       parsed_args.qos_spec)
 
         if parsed_args.property:
-            volume_client.qos_specs.set_keys(qos_specs.id,
+            volume_client.qos_specs.set_keys(qos_spec.id,
                                              parsed_args.property)
         else:
             self.app.log.error("No changes requested\n")
@@ -242,8 +241,8 @@ class ShowQos(show.ShowOne):
     def get_parser(self, prog_name):
         parser = super(ShowQos, self).get_parser(prog_name)
         parser.add_argument(
-            'qos_specs',
-            metavar='<qos-specs>',
+            'qos_spec',
+            metavar='<qos-spec>',
             help='QoS specification to display (name or ID)',
         )
         return parser
@@ -251,19 +250,19 @@ class ShowQos(show.ShowOne):
     def take_action(self, parsed_args):
         self.log.debug('take_action(%s)', parsed_args)
         volume_client = self.app.client_manager.volume
-        qos_specs = utils.find_resource(volume_client.qos_specs,
-                                        parsed_args.qos_specs)
+        qos_spec = utils.find_resource(volume_client.qos_specs,
+                                       parsed_args.qos_spec)
 
-        qos_associations = volume_client.qos_specs.get_associations(qos_specs)
+        qos_associations = volume_client.qos_specs.get_associations(qos_spec)
         if qos_associations:
             associations = [association.name
                             for association in qos_associations]
-            qos_specs._info.update({
+            qos_spec._info.update({
                 'associations': utils.format_list(associations)
             })
-        qos_specs._info.update({'specs': utils.format_dict(qos_specs.specs)})
+        qos_spec._info.update({'specs': utils.format_dict(qos_spec.specs)})
 
-        return zip(*sorted(six.iteritems(qos_specs._info)))
+        return zip(*sorted(six.iteritems(qos_spec._info)))
 
 
 class UnsetQos(command.Command):
@@ -274,8 +273,8 @@ class UnsetQos(command.Command):
     def get_parser(self, prog_name):
         parser = super(UnsetQos, self).get_parser(prog_name)
         parser.add_argument(
-            'qos_specs',
-            metavar='<qos-specs>',
+            'qos_spec',
+            metavar='<qos-spec>',
             help='QoS specification to modify (name or ID)',
         )
         parser.add_argument(
@@ -291,11 +290,11 @@ class UnsetQos(command.Command):
     def take_action(self, parsed_args):
         self.log.debug('take_action(%s)', parsed_args)
         volume_client = self.app.client_manager.volume
-        qos_specs = utils.find_resource(volume_client.qos_specs,
-                                        parsed_args.qos_specs)
+        qos_spec = utils.find_resource(volume_client.qos_specs,
+                                       parsed_args.qos_spec)
 
         if parsed_args.property:
-            volume_client.qos_specs.unset_keys(qos_specs.id,
+            volume_client.qos_specs.unset_keys(qos_spec.id,
                                                parsed_args.property)
         else:
             self.app.log.error("No changes requested\n")
diff --git a/openstackclient/volume/v2/qos_specs.py b/openstackclient/volume/v2/qos_specs.py
index 7f02fa4a2d..ac78ca1575 100644
--- a/openstackclient/volume/v2/qos_specs.py
+++ b/openstackclient/volume/v2/qos_specs.py
@@ -34,8 +34,8 @@ class AssociateQos(command.Command):
     def get_parser(self, prog_name):
         parser = super(AssociateQos, self).get_parser(prog_name)
         parser.add_argument(
-            'qos_specs',
-            metavar='<qos-specs>',
+            'qos_spec',
+            metavar='<qos-spec>',
             help='QoS specification to modify (name or ID)',
         )
         parser.add_argument(
@@ -48,12 +48,12 @@ class AssociateQos(command.Command):
     def take_action(self, parsed_args):
         self.log.debug('take_action(%s)', parsed_args)
         volume_client = self.app.client_manager.volume
-        qos_specs = utils.find_resource(volume_client.qos_specs,
-                                        parsed_args.qos_specs)
+        qos_spec = utils.find_resource(volume_client.qos_specs,
+                                       parsed_args.qos_spec)
         volume_type = utils.find_resource(volume_client.volume_types,
                                           parsed_args.volume_type)
 
-        volume_client.qos_specs.associate(qos_specs.id, volume_type.id)
+        volume_client.qos_specs.associate(qos_spec.id, volume_type.id)
 
         return
 
@@ -97,9 +97,9 @@ class CreateQos(show.ShowOne):
         if parsed_args.property:
             specs.update(parsed_args.property)
 
-        qos_specs = volume_client.qos_specs.create(parsed_args.name, specs)
+        qos_spec = volume_client.qos_specs.create(parsed_args.name, specs)
 
-        return zip(*sorted(six.iteritems(qos_specs._info)))
+        return zip(*sorted(six.iteritems(qos_spec._info)))
 
 
 class DeleteQos(command.Command):
@@ -111,19 +111,18 @@ class DeleteQos(command.Command):
         parser = super(DeleteQos, self).get_parser(prog_name)
         parser.add_argument(
             'qos_specs',
-            metavar='<qos-specs>',
-            help='QoS specification to delete (name or ID)',
+            metavar='<qos-spec>',
+            nargs="+",
+            help='QoS specification(s) to delete (name or ID)',
         )
         return parser
 
     def take_action(self, parsed_args):
         self.log.debug('take_action(%s)', parsed_args)
         volume_client = self.app.client_manager.volume
-        qos_specs = utils.find_resource(volume_client.qos_specs,
-                                        parsed_args.qos_specs)
-
-        volume_client.qos_specs.delete(qos_specs.id)
-
+        for qos in parsed_args.qos_specs:
+            qos_spec = utils.find_resource(volume_client.qos_specs, qos)
+            volume_client.qos_specs.delete(qos_spec.id)
         return
 
 
@@ -135,8 +134,8 @@ class DisassociateQos(command.Command):
     def get_parser(self, prog_name):
         parser = super(DisassociateQos, self).get_parser(prog_name)
         parser.add_argument(
-            'qos_specs',
-            metavar='<qos-specs>',
+            'qos_spec',
+            metavar='<qos-spec>',
             help='QoS specification to modify (name or ID)',
         )
         volume_type_group = parser.add_mutually_exclusive_group()
@@ -157,15 +156,15 @@ class DisassociateQos(command.Command):
     def take_action(self, parsed_args):
         self.log.debug('take_action(%s)', parsed_args)
         volume_client = self.app.client_manager.volume
-        qos_specs = utils.find_resource(volume_client.qos_specs,
-                                        parsed_args.qos_specs)
+        qos_spec = utils.find_resource(volume_client.qos_specs,
+                                       parsed_args.qos_spec)
 
         if parsed_args.volume_type:
             volume_type = utils.find_resource(volume_client.volume_types,
                                               parsed_args.volume_type)
-            volume_client.qos_specs.disassociate(qos_specs.id, volume_type.id)
+            volume_client.qos_specs.disassociate(qos_spec.id, volume_type.id)
         elif parsed_args.all:
-            volume_client.qos_specs.disassociate_all(qos_specs.id)
+            volume_client.qos_specs.disassociate_all(qos_spec.id)
 
         return
 
@@ -206,8 +205,8 @@ class SetQos(command.Command):
     def get_parser(self, prog_name):
         parser = super(SetQos, self).get_parser(prog_name)
         parser.add_argument(
-            'qos_specs',
-            metavar='<qos-specs>',
+            'qos_spec',
+            metavar='<qos-spec>',
             help='QoS specification to modify (name or ID)',
         )
         parser.add_argument(
@@ -222,11 +221,11 @@ class SetQos(command.Command):
     def take_action(self, parsed_args):
         self.log.debug('take_action(%s)', parsed_args)
         volume_client = self.app.client_manager.volume
-        qos_specs = utils.find_resource(volume_client.qos_specs,
-                                        parsed_args.qos_specs)
+        qos_spec = utils.find_resource(volume_client.qos_specs,
+                                       parsed_args.qos_spec)
 
         if parsed_args.property:
-            volume_client.qos_specs.set_keys(qos_specs.id,
+            volume_client.qos_specs.set_keys(qos_spec.id,
                                              parsed_args.property)
         else:
             self.app.log.error("No changes requested\n")
@@ -242,8 +241,8 @@ class ShowQos(show.ShowOne):
     def get_parser(self, prog_name):
         parser = super(ShowQos, self).get_parser(prog_name)
         parser.add_argument(
-            'qos_specs',
-            metavar='<qos-specs>',
+            'qos_spec',
+            metavar='<qos-spec>',
             help='QoS specification to display (name or ID)',
         )
         return parser
@@ -251,19 +250,19 @@ class ShowQos(show.ShowOne):
     def take_action(self, parsed_args):
         self.log.debug('take_action(%s)', parsed_args)
         volume_client = self.app.client_manager.volume
-        qos_specs = utils.find_resource(volume_client.qos_specs,
-                                        parsed_args.qos_specs)
+        qos_spec = utils.find_resource(volume_client.qos_specs,
+                                       parsed_args.qos_spec)
 
-        qos_associations = volume_client.qos_specs.get_associations(qos_specs)
+        qos_associations = volume_client.qos_specs.get_associations(qos_spec)
         if qos_associations:
             associations = [association.name
                             for association in qos_associations]
-            qos_specs._info.update({
+            qos_spec._info.update({
                 'associations': utils.format_list(associations)
             })
-        qos_specs._info.update({'specs': utils.format_dict(qos_specs.specs)})
+        qos_spec._info.update({'specs': utils.format_dict(qos_spec.specs)})
 
-        return zip(*sorted(six.iteritems(qos_specs._info)))
+        return zip(*sorted(six.iteritems(qos_spec._info)))
 
 
 class UnsetQos(command.Command):
@@ -274,8 +273,8 @@ class UnsetQos(command.Command):
     def get_parser(self, prog_name):
         parser = super(UnsetQos, self).get_parser(prog_name)
         parser.add_argument(
-            'qos_specs',
-            metavar='<qos-specs>',
+            'qos_spec',
+            metavar='<qos-spec>',
             help='QoS specification to modify (name or ID)',
         )
         parser.add_argument(
@@ -291,11 +290,11 @@ class UnsetQos(command.Command):
     def take_action(self, parsed_args):
         self.log.debug('take_action(%s)', parsed_args)
         volume_client = self.app.client_manager.volume
-        qos_specs = utils.find_resource(volume_client.qos_specs,
-                                        parsed_args.qos_specs)
+        qos_spec = utils.find_resource(volume_client.qos_specs,
+                                       parsed_args.qos_spec)
 
         if parsed_args.property:
-            volume_client.qos_specs.unset_keys(qos_specs.id,
+            volume_client.qos_specs.unset_keys(qos_spec.id,
                                                parsed_args.property)
         else:
             self.app.log.error("No changes requested\n")