Refactored volume_info module
Change-Id: I5fd844fbb7b9831deb32594c4a587b7249f63d00
This commit is contained in:
parent
53da712635
commit
8955110586
|
@ -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 }}"
|
||||
|
|
|
@ -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:
|
||||
all_projects:
|
||||
description:
|
||||
- Whether to return the volumes in all projects
|
||||
type: bool
|
||||
details:
|
||||
description:
|
||||
- Whether to provide additional information about volumes
|
||||
type: bool
|
||||
all_projects:
|
||||
description:
|
||||
- Whether return the volumes in all projects
|
||||
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():
|
||||
|
|
Loading…
Reference in New Issue