Jakob Meng b3c2e8f1ce Refactored volume_snapshot{,_info} modules
Change-Id: I70fc744f786a9de654592c97188af48ddbe8751d
2022-11-08 13:48:57 +01:00

144 lines
3.8 KiB
Python

#!/usr/bin/python
# -*- coding: utf-8 -*-
# Copyright (c) 2020 by Open Telekom Cloud, operated by T-Systems International GmbH
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
DOCUMENTATION = r'''
---
module: volume_snapshot_info
short_description: Get volume snapshots
author: OpenStack Ansible SIG
description:
- Get Volume Snapshot info from the Openstack cloud.
options:
details:
description: More detailed output
type: bool
name:
description:
- Name of the Snapshot.
type: str
status:
description:
- Specifies the snapshot status.
choices: ['available', 'backing-up', 'creating', 'deleted', 'deleting',
'error', 'error_deleting', 'restoring', 'unmanaging']
type: str
volume:
description:
- Name or ID of the volume.
type: str
requirements:
- "python >= 3.6"
- "openstacksdk"
extends_documentation_fragment:
- openstack.cloud.openstack
'''
RETURN = r'''
volume_snapshots:
description: List of dictionaries describing volume snapshots.
type: list
elements: dict
returned: always
contains:
created_at:
description: Snapshot creation time.
type: str
description:
description: Snapshot desciption.
type: str
id:
description: Unique UUID.
type: str
sample: "39007a7e-ee4f-4d13-8283-b4da2e037c69"
is_forced:
description: Indicate whether to create snapshot,
even if the volume is attached.
type: bool
metadata:
description: Snapshot metadata.
type: dict
name:
description: Snapshot Name.
type: str
progress:
description: The percentage of completeness the snapshot is
currently at.
type: str
project_id:
description: The project ID this snapshot is associated with.
type: str
size:
description: The size of the volume, in GBs.
type: int
status:
description: Snapshot status.
type: str
updated_at:
description: Snapshot update time.
type: str
volume_id:
description: Volume ID.
type: str
'''
EXAMPLES = r'''
- name: List all snapshots
openstack.cloud.volume_snapshot_info:
- name: Fetch data about a single snapshot
openstack.cloud.volume_snapshot_info:
name: my_fake_snapshot
'''
from ansible_collections.openstack.cloud.plugins.module_utils.openstack import OpenStackModule
class VolumeSnapshotInfoModule(OpenStackModule):
argument_spec = dict(
details=dict(type='bool'),
name=dict(),
status=dict(choices=['available', 'backing-up', 'creating', 'deleted',
'deleting', 'error', 'error_deleting',
'restoring', 'unmanaging']),
volume=dict(),
)
module_kwargs = dict(
supports_check_mode=True
)
def run(self):
kwargs = dict((k, self.params[k])
for k in ['details', 'name', 'status']
if self.params[k] is not None)
volume_name_or_id = self.params['volume']
volume = None
if volume_name_or_id:
volume = self.conn.block_storage.find_volume(volume_name_or_id)
if volume:
kwargs['volume_id'] = volume.id
if volume_name_or_id and not volume:
snapshots = []
else:
snapshots = [b.to_dict(computed=False)
for b in self.conn.block_storage.snapshots(**kwargs)]
self.exit_json(changed=False, volume_snapshots=snapshots)
def main():
module = VolumeSnapshotInfoModule()
module()
if __name__ == '__main__':
main()