mirror of
https://opendev.org/openstack/ansible-collections-openstack.git
synced 2026-05-14 05:22:02 +00:00
Refactored volume_info module
Change-Id: I5fd844fbb7b9831deb32594c4a587b7249f63d00
This commit is contained in:
@@ -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
|
- name: Create volume
|
||||||
openstack.cloud.volume:
|
openstack.cloud.volume:
|
||||||
cloud: "{{ cloud }}"
|
cloud: "{{ cloud }}"
|
||||||
@@ -42,6 +21,12 @@
|
|||||||
- info.volumes.0.name == 'ansible_test'
|
- info.volumes.0.name == 'ansible_test'
|
||||||
- info.volumes.0.status == 'available'
|
- 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
|
- name: Get not detailed info about volumes
|
||||||
openstack.cloud.volume_info:
|
openstack.cloud.volume_info:
|
||||||
cloud: "{{ cloud }}"
|
cloud: "{{ cloud }}"
|
||||||
|
|||||||
@@ -4,30 +4,30 @@
|
|||||||
# Copyright (c) 2020, Sagi Shnaidman <sshnaidm@redhat.com>
|
# 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)
|
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
||||||
|
|
||||||
DOCUMENTATION = '''
|
DOCUMENTATION = r'''
|
||||||
---
|
---
|
||||||
module: volume_info
|
module: volume_info
|
||||||
short_description: Retrive information about volumes
|
short_description: Retrieve information about volumes
|
||||||
author: Sagi Shnaidman (@sshnaidm)
|
author: Sagi Shnaidman (@sshnaidm)
|
||||||
description:
|
description:
|
||||||
- Get information about block storage in openstack
|
- Get information about block storage in openstack
|
||||||
options:
|
options:
|
||||||
|
all_projects:
|
||||||
|
description:
|
||||||
|
- Whether to return the volumes in all projects
|
||||||
|
type: bool
|
||||||
details:
|
details:
|
||||||
description:
|
description:
|
||||||
- Whether to provide additional information about volumes
|
- Whether to provide additional information about volumes
|
||||||
type: bool
|
type: bool
|
||||||
all_projects:
|
|
||||||
description:
|
|
||||||
- Whether return the volumes in all projects
|
|
||||||
type: bool
|
|
||||||
name:
|
name:
|
||||||
description:
|
description:
|
||||||
- Name of the volume as a string.
|
- Name of the volume
|
||||||
type: str
|
type: str
|
||||||
required: false
|
required: false
|
||||||
status:
|
status:
|
||||||
description:
|
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
|
type: str
|
||||||
required: false
|
required: false
|
||||||
|
|
||||||
@@ -39,12 +39,111 @@ extends_documentation_fragment:
|
|||||||
- openstack.cloud.openstack
|
- openstack.cloud.openstack
|
||||||
'''
|
'''
|
||||||
|
|
||||||
RETURN = '''
|
RETURN = r'''
|
||||||
volumes:
|
volumes:
|
||||||
description: Volumes in project
|
description: Volumes in project(s)
|
||||||
returned: always
|
returned: always
|
||||||
type: list
|
type: list
|
||||||
elements: dict
|
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:
|
sample:
|
||||||
- attachments: []
|
- attachments: []
|
||||||
availability_zone: nova
|
availability_zone: nova
|
||||||
@@ -52,25 +151,12 @@ volumes:
|
|||||||
created_at: '2017-11-15T10:51:19.000000'
|
created_at: '2017-11-15T10:51:19.000000'
|
||||||
description: ''
|
description: ''
|
||||||
extended_replication_status: null
|
extended_replication_status: null
|
||||||
|
group_id: 402ac6ed-527f-4781-8484-7ff4467e34f5
|
||||||
host: null
|
host: null
|
||||||
id: 103ac6ed-527f-4781-8484-7ff4467e34f5
|
id: 103ac6ed-527f-4781-8484-7ff4467e34f5
|
||||||
image_id: null
|
image_id: null
|
||||||
is_bootable: true
|
is_bootable: true
|
||||||
is_encrypted: false
|
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:
|
metadata:
|
||||||
readonly: 'False'
|
readonly: 'False'
|
||||||
migration_id: null
|
migration_id: null
|
||||||
@@ -79,10 +165,13 @@ volumes:
|
|||||||
project_id: cab34702154a42fc96ed9403c691c76e
|
project_id: cab34702154a42fc96ed9403c691c76e
|
||||||
replication_driver_data: null
|
replication_driver_data: null
|
||||||
replication_status: disabled
|
replication_status: disabled
|
||||||
|
scheduler_hints: {}
|
||||||
size: 9
|
size: 9
|
||||||
snapshot_id: null
|
snapshot_id: null
|
||||||
source_volume_id: null
|
source_volume_id: null
|
||||||
status: available
|
status: available
|
||||||
|
updated_at: '2017-11-15T10:51:19.000000'
|
||||||
|
user_id: ac303ed-527f-4781-8484-7ff4467e34f5
|
||||||
volume_image_metadata:
|
volume_image_metadata:
|
||||||
checksum: a14e113deeee3a3392462f167ed28cb5
|
checksum: a14e113deeee3a3392462f167ed28cb5
|
||||||
container_format: bare
|
container_format: bare
|
||||||
@@ -99,7 +188,7 @@ volumes:
|
|||||||
volume_type: null
|
volume_type: null
|
||||||
'''
|
'''
|
||||||
|
|
||||||
EXAMPLES = '''
|
EXAMPLES = r'''
|
||||||
- openstack.cloud.volume_info:
|
- openstack.cloud.volume_info:
|
||||||
|
|
||||||
- openstack.cloud.volume_info:
|
- openstack.cloud.volume_info:
|
||||||
@@ -110,7 +199,7 @@ EXAMPLES = '''
|
|||||||
|
|
||||||
- openstack.cloud.volume_info:
|
- openstack.cloud.volume_info:
|
||||||
all_projects: true
|
all_projects: true
|
||||||
details: true
|
details: false
|
||||||
'''
|
'''
|
||||||
|
|
||||||
from ansible_collections.openstack.cloud.plugins.module_utils.openstack import OpenStackModule
|
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):
|
class VolumeInfoModule(OpenStackModule):
|
||||||
|
|
||||||
argument_spec = dict(
|
argument_spec = dict(
|
||||||
|
all_projects=dict(type='bool'),
|
||||||
details=dict(type='bool'),
|
details=dict(type='bool'),
|
||||||
all_projects=dict(type='bool', min_ver='0.19'),
|
|
||||||
name=dict(),
|
name=dict(),
|
||||||
status=dict(),
|
status=dict(),
|
||||||
)
|
)
|
||||||
|
|
||||||
module_kwargs = dict(
|
module_kwargs = dict(
|
||||||
supports_check_mode=True
|
supports_check_mode=True
|
||||||
)
|
)
|
||||||
|
|
||||||
def run(self):
|
def run(self):
|
||||||
kwargs = self.check_versioned(
|
kwargs = dict((k, self.params[k])
|
||||||
details=self.params['details'],
|
for k in ['all_projects', 'details', 'name', 'status']
|
||||||
name=self.params['name'],
|
if self.params[k] is not None)
|
||||||
all_projects=self.params['all_projects'],
|
|
||||||
status=self.params['status'],
|
volumes = [v.to_dict(computed=False)
|
||||||
)
|
for v in self.conn.block_storage.volumes(**kwargs)]
|
||||||
result = self.conn.block_storage.volumes(**kwargs)
|
|
||||||
result = [vol if isinstance(vol, dict) else vol.to_dict() for vol in result]
|
self.exit_json(changed=False, volumes=volumes)
|
||||||
self.results.update({'volumes': result})
|
|
||||||
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
|
|||||||
Reference in New Issue
Block a user