From bff6ee9d7ec61864ba00b44029c1a1eca97c0378 Mon Sep 17 00:00:00 2001 From: Marek Buch Date: Wed, 5 Mar 2025 13:49:41 +0000 Subject: Assign labels to kolla volumes Kolla volumes do not have assigned any labels, that makes identification and filtering for kolla specific volumes hard. This change allows for easier volume management. Closes-bug: #1630545 Change-Id: I6b536f73433cfc64881ac66e53aa0a5eed709ce6 Signed-off-by: Marek Buch --- ansible/module_utils/kolla_docker_worker.py | 19 +++++++++++++++++-- ansible/module_utils/kolla_podman_worker.py | 28 ++++++++++++++++++++++------ 2 files changed, 39 insertions(+), 8 deletions(-) (limited to 'ansible/module_utils') diff --git a/ansible/module_utils/kolla_docker_worker.py b/ansible/module_utils/kolla_docker_worker.py index cd8fdbb57..f0799f064 100644 --- a/ansible/module_utils/kolla_docker_worker.py +++ b/ansible/module_utils/kolla_docker_worker.py @@ -333,6 +333,9 @@ class DockerWorker(ContainerWorker): def create_container(self): self.changed = True + # ensure volumes are pre-created before container creation + self.create_container_volumes() + options = self.build_container_options() self.dc.create_container(**options) if self.params.get('restart_policy') != 'oneshot': @@ -458,10 +461,22 @@ class DockerWorker(ContainerWorker): self.dc.stop(name, timeout=graceful_timeout) self.dc.start(name) - def create_volume(self): + def create_volume(self, name=None): + volume_name = name if name else self.params.get('name') if not self.check_volume(): self.changed = True - self.dc.create_volume(name=self.params.get('name'), driver='local') + self.dc.create_volume(name=volume_name, driver='local', + labels={'kolla_managed': 'true'}) + + def create_container_volumes(self): + volumes = self.params.get("volumes", []) + + for volume in volumes: + volume_name = volume.split(":")[0] + if "/" in volume_name: + continue + + self.create_volume(name=volume_name) def remove_volume(self): if self.check_volume(): diff --git a/ansible/module_utils/kolla_podman_worker.py b/ansible/module_utils/kolla_podman_worker.py index f0073cef6..2f323eff2 100644 --- a/ansible/module_utils/kolla_podman_worker.py +++ b/ansible/module_utils/kolla_podman_worker.py @@ -274,9 +274,10 @@ class PodmanWorker(ContainerWorker): ) ) - def check_volume(self): + def check_volume(self, name=None): + volume_name = name if name else self.params.get('name') try: - vol = self.pc.volumes.get(self.params.get('name')) + vol = self.pc.volumes.get(volume_name) return vol.attrs except APIError as e: if e.status_code == 404: @@ -503,6 +504,9 @@ class PodmanWorker(ContainerWorker): return ulimits_opt def create_container(self): + # ensure volumes are pre-created before container creation + self.create_container_volumes() + args = self.prepare_container_args() container = self.pc.containers.create(**args) if container.attrs == {}: @@ -624,17 +628,29 @@ class PodmanWorker(ContainerWorker): msg="Container timed out", **container.attrs) - def create_volume(self): - if not self.check_volume(): + def create_volume(self, name=None): + volume_name = name if name else self.params.get('name') + if not self.check_volume(name=volume_name): self.changed = True args = dict( - name=self.params.get('name'), - driver='local' + name=volume_name, + driver='local', + labels={'kolla_managed': 'true'} ) vol = self.pc.volumes.create(**args) self.result = vol.attrs + def create_container_volumes(self): + volumes = self.params.get("volumes", []) or [] + + for volume in volumes: + volume_name = volume.split(":")[0] + if "/" in volume_name: + continue + + self.create_volume(name=volume_name) + def remove_volume(self): if self.check_volume(): self.changed = True -- cgit v1.2.3