Files
ansible-collections-openstack/plugins/modules/volume_image_metadata.py
Grzegorz Koper 2419b6e30c Prepare release metadata for openstack.cloud 2.6.0
Bump galaxy.yml to 2.6.0.
Add a 2.6.0 entry in changelogs/changelog.yaml,
regenerate CHANGELOG.rst with antsibull-changelog.

Tests-Run: tox -e pep8

Change-Id: I03a4a424d1f47a9fdaa70efae9b8c9a3fa60b072
Signed-off-by: Grzegorz Koper <grzegorzk@stackhpc.com>
2026-06-10 19:37:41 +02:00

99 lines
2.4 KiB
Python

#!/usr/bin/python
# -*- coding: utf-8 -*-
# Copyright (c) 2025 by Pure Storage, Inc.
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
DOCUMENTATION = r"""
---
module: volume_image_metadata
short_description: Manage OpenStack Cinder volume image metadata
extends_documentation_fragment:
- openstack.cloud.openstack
description:
- Set image metadata on a Cinder volume.
- This maps to the Cinder C(os-set_image_metadata) API action.
- This is distinct from regular volume metadata.
options:
volume:
description:
- Volume ID or name.
required: true
type: str
image_metadata:
description:
- Image metadata to apply to the volume.
required: true
type: dict
author:
- Simon Dodsley (@simondodsley)
version_added: 2.6.0
"""
EXAMPLES = r"""
- name: Apply volume image metadata
openstack.cloud.volume_image_metadata:
cloud: mycloud
volume: 9c6b7c8d-1234
image_metadata:
image_id: 2e1a...
disk_format: qcow2
container_format: bare
"""
RETURN = r"""
changed:
description: Whether the volume image metadata was changed.
returned: always
type: bool
volume:
description: Volume information.
returned: always
type: dict
"""
from ansible_collections.openstack.cloud.plugins.module_utils.openstack import (
OpenStackModule,
)
class VolumeImageMetadataModule(OpenStackModule):
argument_spec = dict(
volume=dict(required=True),
image_metadata=dict(type="dict", required=True),
)
module_kwargs = dict(
supports_check_mode=True,
)
def run(self):
volume_ref = self.params["volume"]
desired_meta = self.params["image_metadata"]
# Resolve volume
volume = self.conn.block_storage.find_volume(volume_ref, ignore_missing=False)
current_meta = volume.volume_image_metadata or {}
# Idempotency check
if desired_meta.items() <= current_meta.items():
self.exit_json(changed=False, volume=volume.to_dict())
if not self.ansible.check_mode:
self.conn.block_storage.set_volume_image_metadata(volume.id, **desired_meta)
volume = self.conn.block_storage.get_volume(volume.id)
self.exit_json(changed=True, volume=volume.to_dict())
def main():
module = VolumeImageMetadataModule()
module()
if __name__ == "__main__":
main()