1
0
Fork 0
mirror of https://github.com/containers/ansible-podman-collections.git synced 2026-02-04 07:11:49 +00:00
ansible-podman-collections/plugins/modules/podman_containers.py
Sergey f2e813671a
Run black -l 120 on all files, again (#943)
Signed-off-by: Sagi Shnaidman <sshnaidm@redhat.com>
2025-06-26 13:24:44 +03:00

128 lines
3.7 KiB
Python

#!/usr/bin/python
# Copyright (c) 2020 Red Hat
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
from __future__ import absolute_import, division, print_function
__metaclass__ = type
DOCUMENTATION = """
---
module: podman_containers
author:
- "Sagi Shnaidman (@sshnaidm)"
version_added: '1.4.0'
short_description: Manage podman containers in a batch
description:
- Manage groups of podman containers
requirements:
- "podman"
options:
containers:
description:
- List of dictionaries with data for running containers for podman_container module.
required: True
type: list
elements: dict
debug:
description:
- Return additional information which can be helpful for investigations.
type: bool
default: False
"""
EXAMPLES = """
- name: Run three containers at once
podman_containers:
containers:
- name: alpine
image: alpine
command: sleep 1d
- name: web
image: nginx
- name: test
image: python:3.10-alpine
command: python -V
"""
from ansible.module_utils.basic import AnsibleModule # noqa: F402
from ..module_utils.podman.podman_container_lib import PodmanManager # noqa: F402
from ..module_utils.podman.podman_container_lib import set_container_opts # noqa: F402
def combine(results):
changed = any(i.get("changed", False) for i in results)
failed = any(i.get("failed", False) for i in results)
actions = []
podman_actions = []
containers = []
podman_version = ""
diffs = {}
stderr = ""
stdout = ""
for i in results:
if "actions" in i and i["actions"]:
actions += i["actions"]
if "podman_actions" in i and i["podman_actions"]:
podman_actions += i["podman_actions"]
if "container" in i and i["container"]:
containers.append(i["container"])
if "podman_version" in i:
podman_version = i["podman_version"]
if "diff" in i:
diffs[i["container"]["Name"]] = i["diff"]
if "stderr" in i:
stderr += i["stderr"]
if "stdout" in i:
stdout += i["stdout"]
total = {
"changed": changed,
"failed": failed,
"actions": actions,
"podman_actions": podman_actions,
"containers": containers,
"stdout": stdout,
"stderr": stderr,
}
if podman_version:
total["podman_version"] = podman_version
if diffs:
before = after = ""
for k, v in diffs.items():
before += "".join([str(k), ": ", str(v["before"]), "\n"])
after += "".join([str(k), ": ", str(v["after"]), "\n"])
total["diff"] = {"before": before, "after": after}
return total
def check_input_strict(container):
if container["state"] in ["started", "present"] and not container["image"]:
return "State '%s' required image to be configured!" % container["state"]
def main():
module = AnsibleModule(
argument_spec=dict(
containers=dict(type="list", elements="dict", required=True),
debug=dict(type="bool", default=False),
),
supports_check_mode=True,
)
# work on input vars
results = []
for container in module.params["containers"]:
options_dict = set_container_opts(container)
options_dict["debug"] = module.params["debug"] or options_dict["debug"]
test_input = check_input_strict(options_dict)
if test_input:
module.fail_json(msg="Failed to run container %s because: %s" % (options_dict["name"], test_input))
res = PodmanManager(module, options_dict).execute()
results.append(res)
total_results = combine(results)
module.exit_json(**total_results)
if __name__ == "__main__":
main()