diff --git a/ci/roles/volume/tasks/volume_info.yml b/ci/roles/volume/tasks/volume_info.yml
index 55f0a1fe3bc7f63aeed2cc232697cbdddd2dc06e..e6164e3efbd7d39152cdf20f0a84ca7d78dc6148 100644
--- a/ci/roles/volume/tasks/volume_info.yml
+++ b/ci/roles/volume/tasks/volume_info.yml
@@ -1,24 +1,3 @@
-- name: Get info about volumes and all projects for all SDK
-  openstack.cloud.volume_info:
-    cloud: "{{ cloud }}"
-    details: true
-    all_projects: true
-
-- name: Get info about volumes
-  openstack.cloud.volume_info:
-    cloud: "{{ cloud }}"
-    all_projects: true
-  register: delete
-
-- name: Clean up volumes before the test
-  openstack.cloud.volume:
-    cloud: "{{ cloud }}"
-    state: absent
-    name: "{{ vol.name }}"
-  loop: "{{ delete.volumes }}"
-  loop_control:
-    loop_var: vol
-
 - name: Create volume
   openstack.cloud.volume:
     cloud: "{{ cloud }}"
@@ -42,6 +21,12 @@
       - info.volumes.0.name == 'ansible_test'
       - info.volumes.0.status == 'available'
 
+- name: Assert return values of volume_info module
+  assert:
+    that:
+      # allow new fields to be introduced but prevent fields from being removed
+      - expected_fields|difference(info.volumes[0].keys())|length == 0
+
 - name: Get not detailed info about volumes
   openstack.cloud.volume_info:
     cloud: "{{ cloud }}"
diff --git a/plugins/modules/volume_info.py b/plugins/modules/volume_info.py
index 95faafe54431490f393c0ab8fc54e560430b72b2..8c46dc3a24884eda1e3f27105340d3c091cc4da9 100644
--- a/plugins/modules/volume_info.py
+++ b/plugins/modules/volume_info.py
@@ -4,30 +4,30 @@
 # Copyright (c) 2020, Sagi Shnaidman <sshnaidm@redhat.com>
 # GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
 
-DOCUMENTATION = '''
+DOCUMENTATION = r'''
 ---
 module: volume_info
-short_description: Retrive information about volumes
+short_description: Retrieve information about volumes
 author: Sagi Shnaidman (@sshnaidm)
 description:
   - Get information about block storage in openstack
 options:
-  details:
+  all_projects:
     description:
-    - Whether to provide additional information about volumes
+    - Whether to return the volumes in all projects
     type: bool
-  all_projects:
+  details:
     description:
-    - Whether return the volumes in all projects
+    - Whether to provide additional information about volumes
     type: bool
   name:
     description:
-    - Name of the volume as a string.
+    - Name of the volume
     type: str
     required: false
   status:
     description:
-    - Value of the status of the volume so that you can filter on "available" for example
+    - Status of the volume so that you can filter on C(available) for example
     type: str
     required: false
 
@@ -39,12 +39,111 @@ extends_documentation_fragment:
   - openstack.cloud.openstack
 '''
 
-RETURN = '''
+RETURN = r'''
 volumes:
-  description: Volumes in project
+  description: Volumes in project(s)
   returned: always
   type: list
   elements: dict
+  contains:
+    attachments:
+      description: Instance attachment information. If this volume is attached
+                   to a server instance, the attachments list includes the UUID
+                   of the attached server, an attachment UUID, the name of the
+                   attached host, if any, the volume UUID, the device, and the
+                   device UUID. Otherwise, this list is empty.
+      type: list
+    availability_zone:
+      description: The name of the availability zone.
+      type: str
+    consistency_group_id:
+      description: The UUID of the consistency group.
+      type: str
+    created_at:
+      description: The date and time when the resource was created.
+      type: str
+    description:
+      description: The volume description.
+      type: str
+    extended_replication_status:
+      description: Extended replication status on this volume.
+      type: str
+    group_id:
+      description: The ID of the group.
+      type: str
+    host:
+      description: The volume's current back-end.
+      type: str
+    id:
+      description: The UUID of the volume.
+      type: str
+    image_id:
+      description: Image on which the volume was based
+      type: str
+    is_bootable:
+      description: Enables or disables the bootable attribute. You can boot an
+                   instance from a bootable volume.
+      type: str
+    is_encrypted:
+      description: If true, this volume is encrypted.
+      type: bool
+    metadata:
+      description: A metadata object. Contains one or more metadata key and
+                   value pairs that are associated with the volume.
+      type: dict
+    migration_id:
+      description: The volume ID that this volume name on the backend is
+                   based on.
+      type: str
+    migration_status:
+      description: The status of this volume migration (None means that a
+                   migration is not currently in progress).
+      type: str
+    name:
+      description: The volume name.
+      type: str
+    project_id:
+      description: The project ID which the volume belongs to.
+      type: str
+    replication_driver_data:
+      description: Data set by the replication driver
+      type: str
+    replication_status:
+      description: The volume replication status.
+      type: str
+    scheduler_hints:
+      description: Scheduler hints for the volume
+      type: dict
+    size:
+      description: The size of the volume, in gibibytes (GiB).
+      type: int
+    snapshot_id:
+      description: To create a volume from an existing snapshot, specify the
+                   UUID of the volume snapshot. The volume is created in same
+                   availability zone and with same size as the snapshot.
+      type: str
+    source_volume_id:
+      description: The UUID of the source volume. The API creates a new volume
+                   with the same size as the source volume unless a larger size
+                   is requested.
+      type: str
+    status:
+      description: The volume status.
+      type: str
+    updated_at:
+      description: The date and time when the resource was updated.
+      type: str
+    user_id:
+      description: The UUID of the user.
+      type: str
+    volume_image_metadata:
+      description: List of image metadata entries. Only included for volumes
+                   that were created from an image, or from a snapshot of a
+                   volume originally created from an image.
+      type: dict
+    volume_type:
+      description: The associated volume type name for the volume.
+      type: str
   sample:
     - attachments: []
       availability_zone: nova
@@ -52,25 +151,12 @@ volumes:
       created_at: '2017-11-15T10:51:19.000000'
       description: ''
       extended_replication_status: null
+      group_id: 402ac6ed-527f-4781-8484-7ff4467e34f5
       host: null
       id: 103ac6ed-527f-4781-8484-7ff4467e34f5
       image_id: null
       is_bootable: true
       is_encrypted: false
-      links:
-      - href: https://...
-        rel: self
-      - href: https://...
-        rel: bookmark
-      location:
-        cloud: cloud
-        project:
-          domain_id: null
-          domain_name: Default
-          id: cfe04702154742fc964d9403c691c76e
-          name: username
-        region_name: regionOne
-        zone: nova
       metadata:
         readonly: 'False'
       migration_id: null
@@ -79,10 +165,13 @@ volumes:
       project_id: cab34702154a42fc96ed9403c691c76e
       replication_driver_data: null
       replication_status: disabled
+      scheduler_hints: {}
       size: 9
       snapshot_id: null
       source_volume_id: null
       status: available
+      updated_at: '2017-11-15T10:51:19.000000'
+      user_id: ac303ed-527f-4781-8484-7ff4467e34f5
       volume_image_metadata:
         checksum: a14e113deeee3a3392462f167ed28cb5
         container_format: bare
@@ -99,7 +188,7 @@ volumes:
       volume_type: null
 '''
 
-EXAMPLES = '''
+EXAMPLES = r'''
 - openstack.cloud.volume_info:
 
 - openstack.cloud.volume_info:
@@ -110,7 +199,7 @@ EXAMPLES = '''
 
 - openstack.cloud.volume_info:
     all_projects: true
-    details: true
+    details: false
 '''
 
 from ansible_collections.openstack.cloud.plugins.module_utils.openstack import OpenStackModule
@@ -119,25 +208,25 @@ from ansible_collections.openstack.cloud.plugins.module_utils.openstack import O
 class VolumeInfoModule(OpenStackModule):
 
     argument_spec = dict(
+        all_projects=dict(type='bool'),
         details=dict(type='bool'),
-        all_projects=dict(type='bool', min_ver='0.19'),
         name=dict(),
         status=dict(),
     )
+
     module_kwargs = dict(
         supports_check_mode=True
     )
 
     def run(self):
-        kwargs = self.check_versioned(
-            details=self.params['details'],
-            name=self.params['name'],
-            all_projects=self.params['all_projects'],
-            status=self.params['status'],
-        )
-        result = self.conn.block_storage.volumes(**kwargs)
-        result = [vol if isinstance(vol, dict) else vol.to_dict() for vol in result]
-        self.results.update({'volumes': result})
+        kwargs = dict((k, self.params[k])
+                      for k in ['all_projects', 'details', 'name', 'status']
+                      if self.params[k] is not None)
+
+        volumes = [v.to_dict(computed=False)
+                   for v in self.conn.block_storage.volumes(**kwargs)]
+
+        self.exit_json(changed=False, volumes=volumes)
 
 
 def main():