summaryrefslogtreecommitdiffstats
path: root/ansible_collections/containers/podman
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--ansible_collections/containers/podman/CHANGELOG.rst52
-rw-r--r--ansible_collections/containers/podman/FILES.json1127
-rw-r--r--ansible_collections/containers/podman/MANIFEST.json4
-rw-r--r--ansible_collections/containers/podman/changelogs/changelog.yaml33
-rw-r--r--ansible_collections/containers/podman/docs/buildah_connection.html2
-rw-r--r--ansible_collections/containers/podman/docs/index.html2
-rw-r--r--ansible_collections/containers/podman/docs/objects.invbin6943 -> 7128 bytes
-rw-r--r--ansible_collections/containers/podman/docs/podman_connection.html2
-rw-r--r--ansible_collections/containers/podman/docs/podman_container_exec_module.html18
-rw-r--r--ansible_collections/containers/podman/docs/podman_container_info_module.html2
-rw-r--r--ansible_collections/containers/podman/docs/podman_container_module.html105
-rw-r--r--ansible_collections/containers/podman/docs/podman_containers_module.html2
-rw-r--r--ansible_collections/containers/podman/docs/podman_export_module.html2
-rw-r--r--ansible_collections/containers/podman/docs/podman_generate_systemd_module.html3
-rw-r--r--ansible_collections/containers/podman/docs/podman_image_info_module.html4
-rw-r--r--ansible_collections/containers/podman/docs/podman_image_module.html42
-rw-r--r--ansible_collections/containers/podman/docs/podman_import_module.html2
-rw-r--r--ansible_collections/containers/podman/docs/podman_load_module.html2
-rw-r--r--ansible_collections/containers/podman/docs/podman_login_info_module.html2
-rw-r--r--ansible_collections/containers/podman/docs/podman_login_module.html2
-rw-r--r--ansible_collections/containers/podman/docs/podman_logout_module.html2
-rw-r--r--ansible_collections/containers/podman/docs/podman_network_info_module.html2
-rw-r--r--ansible_collections/containers/podman/docs/podman_network_module.html36
-rw-r--r--ansible_collections/containers/podman/docs/podman_play_module.html51
-rw-r--r--ansible_collections/containers/podman/docs/podman_pod_info_module.html2
-rw-r--r--ansible_collections/containers/podman/docs/podman_pod_module.html50
-rw-r--r--ansible_collections/containers/podman/docs/podman_prune_module.html2
-rw-r--r--ansible_collections/containers/podman/docs/podman_runlabel_module.html2
-rw-r--r--ansible_collections/containers/podman/docs/podman_save_module.html2
-rw-r--r--ansible_collections/containers/podman/docs/podman_secret_info_module.html2
-rw-r--r--ansible_collections/containers/podman/docs/podman_secret_module.html2
-rw-r--r--ansible_collections/containers/podman/docs/podman_tag_module.html2
-rw-r--r--ansible_collections/containers/podman/docs/podman_unshare_become.html2
-rw-r--r--ansible_collections/containers/podman/docs/podman_volume_info_module.html2
-rw-r--r--ansible_collections/containers/podman/docs/podman_volume_module.html39
-rw-r--r--ansible_collections/containers/podman/plugins/module_utils/podman/podman_container_lib.py30
-rw-r--r--ansible_collections/containers/podman/plugins/module_utils/podman/podman_pod_lib.py49
-rw-r--r--ansible_collections/containers/podman/plugins/module_utils/podman/quadlet.py636
-rw-r--r--ansible_collections/containers/podman/plugins/modules/podman_container.py36
-rw-r--r--ansible_collections/containers/podman/plugins/modules/podman_container_exec.py14
-rw-r--r--ansible_collections/containers/podman/plugins/modules/podman_generate_systemd.py1
-rw-r--r--ansible_collections/containers/podman/plugins/modules/podman_image.py45
-rw-r--r--ansible_collections/containers/podman/plugins/modules/podman_image_info.py2
-rw-r--r--ansible_collections/containers/podman/plugins/modules/podman_login.py5
-rw-r--r--ansible_collections/containers/podman/plugins/modules/podman_network.py41
-rw-r--r--ansible_collections/containers/podman/plugins/modules/podman_play.py100
-rw-r--r--ansible_collections/containers/podman/plugins/modules/podman_pod.py33
-rw-r--r--ansible_collections/containers/podman/plugins/modules/podman_pod_info.py7
-rw-r--r--ansible_collections/containers/podman/plugins/modules/podman_volume.py45
-rw-r--r--ansible_collections/containers/podman/tests/integration/targets/podman_container/tasks/main.yml277
-rw-r--r--ansible_collections/containers/podman/tests/integration/targets/podman_container_exec/tasks/main.yml20
-rw-r--r--ansible_collections/containers/podman/tests/integration/targets/podman_container_idempotency/tasks/main.yml20
-rw-r--r--ansible_collections/containers/podman/tests/integration/targets/podman_container_idempotency/tasks/rootless-podman-network.yml139
-rw-r--r--ansible_collections/containers/podman/tests/integration/targets/podman_generate_systemd/tasks/main.yml11
-rw-r--r--ansible_collections/containers/podman/tests/integration/targets/podman_image/tasks/main.yml128
-rw-r--r--ansible_collections/containers/podman/tests/integration/targets/podman_network/tasks/main.yml125
-rw-r--r--ansible_collections/containers/podman/tests/integration/targets/podman_play/tasks/files/multi-yaml.yml27
-rw-r--r--ansible_collections/containers/podman/tests/integration/targets/podman_play/tasks/main.yml184
-rw-r--r--ansible_collections/containers/podman/tests/integration/targets/podman_play/tasks/play-multi-yaml.yml40
-rw-r--r--ansible_collections/containers/podman/tests/integration/targets/podman_play/tasks/play-with-build.yml3
-rw-r--r--ansible_collections/containers/podman/tests/integration/targets/podman_play/tasks/play-with-options.yml4
-rw-r--r--ansible_collections/containers/podman/tests/integration/targets/podman_pod/tasks/main.yml332
-rw-r--r--ansible_collections/containers/podman/tests/integration/targets/podman_pod/tasks/resource-limit.yml3
-rw-r--r--ansible_collections/containers/podman/tests/integration/targets/podman_prune/tasks/main.yml16
-rw-r--r--ansible_collections/containers/podman/tests/integration/targets/podman_volume/tasks/main.yml128
-rw-r--r--ansible_collections/containers/podman/tests/sanity/ignore-2.10.txt1
-rw-r--r--ansible_collections/containers/podman/tests/sanity/ignore-2.11.txt1
-rw-r--r--ansible_collections/containers/podman/tests/sanity/ignore-2.12.txt1
-rw-r--r--ansible_collections/containers/podman/tests/sanity/ignore-2.13.txt1
-rw-r--r--ansible_collections/containers/podman/tests/sanity/ignore-2.14.txt1
-rw-r--r--ansible_collections/containers/podman/tests/sanity/ignore-2.15.txt1
-rw-r--r--ansible_collections/containers/podman/tests/sanity/ignore-2.16.txt1
-rw-r--r--ansible_collections/containers/podman/tests/sanity/ignore-2.17.txt1
-rw-r--r--ansible_collections/containers/podman/tests/sanity/ignore-2.18.txt1
-rw-r--r--ansible_collections/containers/podman/tests/sanity/ignore-2.9.txt1
75 files changed, 3340 insertions, 777 deletions
diff --git a/ansible_collections/containers/podman/CHANGELOG.rst b/ansible_collections/containers/podman/CHANGELOG.rst
index 7f94f59cc..84fa3621b 100644
--- a/ansible_collections/containers/podman/CHANGELOG.rst
+++ b/ansible_collections/containers/podman/CHANGELOG.rst
@@ -5,6 +5,58 @@ Ansible Podman modules and plugins Release Notes
.. contents:: Topics
+v1.13.0
+=======
+
+Release Summary
+---------------
+
+Quadlet support for Podman
+
+Major Changes
+-------------
+
+- Add quadlet support for Podman modules
+
+Bugfixes
+--------
+
+- Fix pod info for non-existant pods
+
+v1.12.1
+=======
+
+Release Summary
+---------------
+
+Support for Podman v5 and bugfixes
+
+Minor Changes
+-------------
+
+- CI - Fix rootfs test in CI
+- CI - add custom podman path to tasks
+- CI - add parametrized executables to tests
+- podman_container - Add pasta as default network mode after v5
+- podman_container_exec - Return data for podman exec module
+- podman_generate_systemd - Fix broken example for podman_generate_systemd (#708)
+- podman_login - Update podman_login.py
+- podman_play - Add support for kube yaml files with multi-documents (#724)
+- podman_play - Update the logic for deleting pods/containers in podman_play
+- podman_pod_info - handle return being list in Podman 5 (#713)
+
+Bugfixes
+--------
+
+- podman_container - Add check and fixed for v5 network diff
+- podman_container - Fix pasta networking idempotency for v5 (#728)
+- podman_container_exec - Remove unnecessary quotes in podman_container_exec module
+- podman_image_info - Fix wrong return data type in podman_image_info
+- podman_play - Fix kube play annotations
+- podman_pod - Fix broken info of pods in Podman v5
+- podman_pod - Fix pod for Podman v5
+- podman_pod - Fix podman pod v5 broken info issue
+
v1.12.0
=======
diff --git a/ansible_collections/containers/podman/FILES.json b/ansible_collections/containers/podman/FILES.json
index 717a994c3..ebc8fb138 100644
--- a/ansible_collections/containers/podman/FILES.json
+++ b/ansible_collections/containers/podman/FILES.json
@@ -8,101 +8,80 @@
"format": 1
},
{
- "name": "setup.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "85ef52c56819164efc5178d25aa03a432cdb8431ad0c99255802ce19a1719602",
- "format": 1
- },
- {
- "name": "test-requirements.txt",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "9b72b7289eba420f51eb614c54f609181bb26e96caef2abf06c02339a77d2e08",
+ "name": "docs",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "changelogs",
+ "name": "docs/_static",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "changelogs/config.yaml",
+ "name": "docs/_static/pygments.css",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "72cc16b684890f4595ab75ffdd6f80f5ae19bc84cbb2d82606bc840eb7842209",
+ "chksum_sha256": "6f6d5ca74e8fbc721d70c8db260ab4ac75b69316daa3854a4614d9f3b2ff0631",
"format": 1
},
{
- "name": "changelogs/changelog.yaml",
+ "name": "docs/_static/minus.png",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1bb58fab4d48702b87006c6ac9577c634e8f42aef65280dbca266caf6468d50b",
- "format": 1
- },
- {
- "name": "meta",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "47e7fc50db3699f1ca41ce9a2ffa202c00c5d1d5180c55f62ba859b1bd6cc008",
"format": 1
},
{
- "name": "meta/runtime.yml",
+ "name": "docs/_static/documentation_options.js",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f07aa47b7583a6a8420798081029b8cdfb09cbf5564acff6f49b6c3237102618",
- "format": 1
- },
- {
- "name": "docs",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "e2718b75af040caf95a8915192026ec541cc7ad4c73b0160b7c4c2f4564d7d4f",
"format": 1
},
{
- "name": "docs/_static",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "docs/_static/language_data.js",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "95b1d44e1ba5a3155d89f8427a3b2c981158f956bf48b9cdf0030265e8b7a609",
"format": 1
},
{
- "name": "docs/_static/custom.css",
+ "name": "docs/_static/underscore-1.13.1.js",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "39f23a6561786e3cb4e33e4a96562a1305a8b74c0d45dc215a64018692cd5d4c",
+ "chksum_sha256": "cc10f799cd0f6b65f95c4012445497e5ba3cb9f51964a9468940b27bde98b487",
"format": 1
},
{
- "name": "docs/_static/sphinx_highlight.js",
+ "name": "docs/_static/jquery-3.6.0.js",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0a20464b65797522de18421a7db1a0851a26aae6dd06b7109d442236313c27ee",
+ "chksum_sha256": "1fe2bb5390a75e5d61e72c107cab528fc3c29a837d69aab7d200e1dbb5dcd239",
"format": 1
},
{
- "name": "docs/_static/documentation_options.js",
+ "name": "docs/_static/alabaster.css",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e2718b75af040caf95a8915192026ec541cc7ad4c73b0160b7c4c2f4564d7d4f",
+ "chksum_sha256": "13f494414f5bca3551442ddf4ad0e42e2403a8757304c1b9787b18ef539a2eac",
"format": 1
},
{
- "name": "docs/_static/pygments.css",
+ "name": "docs/_static/custom.css",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6f6d5ca74e8fbc721d70c8db260ab4ac75b69316daa3854a4614d9f3b2ff0631",
+ "chksum_sha256": "39f23a6561786e3cb4e33e4a96562a1305a8b74c0d45dc215a64018692cd5d4c",
"format": 1
},
{
- "name": "docs/_static/alabaster.css",
+ "name": "docs/_static/underscore-1.3.1.js",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "13f494414f5bca3551442ddf4ad0e42e2403a8757304c1b9787b18ef539a2eac",
+ "chksum_sha256": "f808f0aa32fbe90fb9c9c846917faff3fdd4e236c284b76c02dd33753dc90177",
"format": 1
},
{
@@ -113,17 +92,17 @@
"format": 1
},
{
- "name": "docs/_static/jquery-3.6.0.js",
+ "name": "docs/_static/file.png",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1fe2bb5390a75e5d61e72c107cab528fc3c29a837d69aab7d200e1dbb5dcd239",
+ "chksum_sha256": "5c4bc9a16aebf38c4b950f59b8e501ca36495328cb9eb622218bce9064a35e3e",
"format": 1
},
{
- "name": "docs/_static/searchtools.js",
+ "name": "docs/_static/jquery-3.5.1.js",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5b9facbcb36e5e15e409e2db42439fb8cbc1e43275e337a645bb3c76c3191b93",
+ "chksum_sha256": "416a3b2c3bf16d64f6b5b6d0f7b079df2267614dd6847fc2f3271b4409233c37",
"format": 1
},
{
@@ -134,24 +113,24 @@
"format": 1
},
{
- "name": "docs/_static/language_data.js",
+ "name": "docs/_static/basic.css",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "95b1d44e1ba5a3155d89f8427a3b2c981158f956bf48b9cdf0030265e8b7a609",
+ "chksum_sha256": "9980fa28cbdcd8d6b437edcb1a911e0e2a788d7fa0dfe6ea25a302d824a3094d",
"format": 1
},
{
- "name": "docs/_static/underscore-1.3.1.js",
+ "name": "docs/_static/doctools.js",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f808f0aa32fbe90fb9c9c846917faff3fdd4e236c284b76c02dd33753dc90177",
+ "chksum_sha256": "3d62b81f63b0418a39a8f5a323203d88ddafc8c5226f86d311970025d86d7b6c",
"format": 1
},
{
- "name": "docs/_static/basic.css",
+ "name": "docs/_static/plus.png",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9980fa28cbdcd8d6b437edcb1a911e0e2a788d7fa0dfe6ea25a302d824a3094d",
+ "chksum_sha256": "54115199b96a130cba02147c47c0deb43dcc9b9f08b5162bba8642b34980ac63",
"format": 1
},
{
@@ -162,206 +141,206 @@
"format": 1
},
{
- "name": "docs/_static/jquery-3.5.1.js",
+ "name": "docs/_static/antsibull-minimal.css",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "416a3b2c3bf16d64f6b5b6d0f7b079df2267614dd6847fc2f3271b4409233c37",
+ "chksum_sha256": "dd914facd58095fed7317de336bdf32ac00ff3de539432463df397d2ae15a696",
"format": 1
},
{
- "name": "docs/_static/doctools.js",
+ "name": "docs/_static/sphinx_highlight.js",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3d62b81f63b0418a39a8f5a323203d88ddafc8c5226f86d311970025d86d7b6c",
+ "chksum_sha256": "0a20464b65797522de18421a7db1a0851a26aae6dd06b7109d442236313c27ee",
"format": 1
},
{
- "name": "docs/_static/underscore-1.13.1.js",
+ "name": "docs/_static/searchtools.js",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "cc10f799cd0f6b65f95c4012445497e5ba3cb9f51964a9468940b27bde98b487",
+ "chksum_sha256": "5b9facbcb36e5e15e409e2db42439fb8cbc1e43275e337a645bb3c76c3191b93",
"format": 1
},
{
- "name": "docs/_static/plus.png",
+ "name": "docs/podman_secret_info_module.html",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "54115199b96a130cba02147c47c0deb43dcc9b9f08b5162bba8642b34980ac63",
+ "chksum_sha256": "afbe8b5e852d8ac13eda2acb5a4424bbe50e04775b182de9c73acdbd4e4572c3",
"format": 1
},
{
- "name": "docs/_static/antsibull-minimal.css",
+ "name": "docs/podman_prune_module.html",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "dd914facd58095fed7317de336bdf32ac00ff3de539432463df397d2ae15a696",
+ "chksum_sha256": "52583bf414f29d8a289f7844bb87e870e438eb4c680fe6efe3b84ac9b24919cf",
"format": 1
},
{
- "name": "docs/_static/minus.png",
+ "name": "docs/podman_container_exec_module.html",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "47e7fc50db3699f1ca41ce9a2ffa202c00c5d1d5180c55f62ba859b1bd6cc008",
+ "chksum_sha256": "3c7a400e7e16df1d1904f5dad17d5358e90a95e8ae611072a7cc4b2fd19b0f70",
"format": 1
},
{
- "name": "docs/_static/file.png",
+ "name": "docs/podman_unshare_become.html",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5c4bc9a16aebf38c4b950f59b8e501ca36495328cb9eb622218bce9064a35e3e",
+ "chksum_sha256": "6caccafc43ebbbeb0c043d2e8a2fa2c8736166a0f94a117514eed3be946685ec",
"format": 1
},
{
- "name": "docs/.nojekyll",
+ "name": "docs/objects.inv",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "4e8f308bf4441db6759e6d8a1b54535cf24e77f1ecee4d66caf6b5582f79efa7",
"format": 1
},
{
- "name": "docs/podman_runlabel_module.html",
+ "name": "docs/podman_image_info_module.html",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "bd2c799ac88932287c4882a8eb6df2658a00db7555612154b0eca97045f11e73",
+ "chksum_sha256": "e8b61d10e778183647fd7b720d030addce99763e759ad1eb7daa14ece8b9913b",
"format": 1
},
{
- "name": "docs/podman_image_module.html",
+ "name": "docs/podman_secret_module.html",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ad81d2bc548a343fbc3d4a3a05b1c33d2d68e25e508f2693a701e6f01dcf417b",
+ "chksum_sha256": "62e01ebdfbc9e2a163c747e013c5aa3ec7219b3bb260147a929080d445f0dbbd",
"format": 1
},
{
- "name": "docs/podman_container_exec_module.html",
+ "name": "docs/podman_network_info_module.html",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "883fc959057af7f386aa0660220cab0747ecac6eb6d407b94d2df2dc35c74a7e",
+ "chksum_sha256": "b5763fa0a99790ef332056f61dc499b455de1a37349d006289427922aae21395",
"format": 1
},
{
- "name": "docs/podman_container_info_module.html",
+ "name": "docs/podman_image_module.html",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1586177c16bee40047743f246310abd28bb7b51abd946c720b8470a22b5bd749",
+ "chksum_sha256": "9b6b1b68675c355b8306fae41e7a399d1c203028b18aab10e2515c710f4a9a13",
"format": 1
},
{
- "name": "docs/podman_play_module.html",
+ "name": "docs/podman_volume_module.html",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "24e23f870e9fe67c6ef322ec6b2ccfae6bc050c15bbf8dda518db96f144326db",
+ "chksum_sha256": "9eb4b8acf3aecbd24f06e73c0b9d52370377032f5884327f4bb7de0483d2db2f",
"format": 1
},
{
- "name": "docs/podman_containers_module.html",
+ "name": "docs/podman_load_module.html",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1178735f6fadfbf2d7cbd4985b604aaa430546edafa114af5e3d20dc04e5460a",
+ "chksum_sha256": "4532a90f7cba943ba79959f0cd05af85c790bdd51f30888de95861e60ab77bd0",
"format": 1
},
{
- "name": "docs/podman_pod_info_module.html",
+ "name": "docs/podman_runlabel_module.html",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f2ffd379e0f542e651766415c6287f569f2dd42ee5a3e9933684bc250b0d11fd",
+ "chksum_sha256": "4089cfd62f3250303175edaac0e1b9ed017e7dcfa8ebd11c334862e5e4be6324",
"format": 1
},
{
- "name": "docs/podman_login_info_module.html",
+ "name": "docs/podman_play_module.html",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ce4892819aba341084ce055cc05d9bb5bb613e266f3efe4a2052da2aa20094ca",
+ "chksum_sha256": "ef65885a17acc3bfcabad46054472594f0fb7cc3968e8d25746bff6bf99722da",
"format": 1
},
{
- "name": "docs/buildah_connection.html",
+ "name": "docs/podman_container_module.html",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "881d9972167f058e968516dbc4fe01bc1cea54a16fb0e6f9de03addf58ca7fc8",
+ "chksum_sha256": "538fd60bc9d58b266c163ed7ac7bcf3305dc787935222f7f2c4c9e112a4cf30b",
"format": 1
},
{
- "name": "docs/podman_import_module.html",
+ "name": "docs/podman_containers_module.html",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5b288cf15269fc040df5d04a3ae7e96c08635006c9322b53c1675e5c6d44ee81",
+ "chksum_sha256": "c929fa197c9e07d10d05101e6472dcdef409ced23a50da5918ec4841a4e50d08",
"format": 1
},
{
- "name": "docs/podman_unshare_become.html",
+ "name": "docs/index.html",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "79fa1444a95d81dc3a7dbdd1c4796fdb14e277e787b96b7229a3fe0561c862d1",
+ "chksum_sha256": "a05292a1b3cd446a6ea3667d7519b521dc50c7efc04fd3b1af4d42dc219fe37d",
"format": 1
},
{
- "name": "docs/podman_volume_module.html",
+ "name": "docs/podman_logout_module.html",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "cf2a4a5caff2f79ccc6e51d9bdfee1484b24523fd31b9f6a058bd2bf3f741470",
+ "chksum_sha256": "4d81428e5df90da2490fd620e3af3b1a1ddd347b086cee77dff057a580267002",
"format": 1
},
{
"name": "docs/podman_save_module.html",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c7ce5ddbc8c5d95d67fb1d7d90d6393f772a256f1f76a7b71062e4f9f177c847",
+ "chksum_sha256": "5cf2070ca153d3bf60ea9e0440ffb1b72b847e32565a3fd8f953ca7de24a9586",
"format": 1
},
{
- "name": "docs/podman_generate_systemd_module.html",
+ "name": "docs/genindex.html",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4e5d799252e205b60924cd5158976f71995f5e4e06edd348bb0fa608199dfcef",
+ "chksum_sha256": "267654c6dfb8d96914725b0bd774e09c72dfdcfb065ae073f9fc732b01b543d0",
"format": 1
},
{
- "name": "docs/searchindex.js",
+ "name": "docs/podman_network_module.html",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "68a79c703ad84cc805f3945b454e0871f6e2562c6e75ec6f20702a8c1a96a6fa",
+ "chksum_sha256": "367a0a1343aa808bb256561200464764dc2b165271d028b1508d95b6b7251410",
"format": 1
},
{
- "name": "docs/podman_container_module.html",
+ "name": "docs/buildah_connection.html",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c9489eb47093750ec7c7780a6e6fcd84041f34b115371e7300df05af4ae3b112",
+ "chksum_sha256": "a2f915dd35461f1a8d9806999382c0976f9b1fe03e2fe7b3e1973e20a46157b1",
"format": 1
},
{
- "name": "docs/podman_network_info_module.html",
+ "name": "docs/searchindex.js",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "50a9aa361b09cbeb8311501040429f537223523ac993cc29e8e841c1a330b338",
+ "chksum_sha256": "668d68ce702cf98c3d9cbc91d08d64a1fda5060257ad8393f99b06fe0de1d9a7",
"format": 1
},
{
- "name": "docs/podman_logout_module.html",
+ "name": "docs/podman_container_info_module.html",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "980d9040d448274ca106e7e3ea1a2d7e8781a83518bcf30acb4f088f9a8e5585",
+ "chksum_sha256": "13dc267968457dd4b2271a4a03b497d80354ed3aadb843c4ce0a8829f7ae99e5",
"format": 1
},
{
- "name": "docs/objects.inv",
+ "name": "docs/podman_tag_module.html",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d0b13de8051aab95f660ee9e17f976cc53853a562fead4c6e95ac30562f6252d",
+ "chksum_sha256": "176e3fedadbfe0c2bd801ac7b2ad9d90027b76d33a2cb28a2fef572e4e7846fc",
"format": 1
},
{
- "name": "docs/podman_load_module.html",
+ "name": "docs/environment_variables.html",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0c34f66544c9547d6873175f5f828992f22eb7180ed2867f7e1b113495e832d1",
+ "chksum_sha256": "754ab0bc744fd2f640f433d8ec17c4520c35bf5985108501b479b3653fe3c0d0",
"format": 1
},
{
- "name": "docs/podman_tag_module.html",
+ "name": "docs/podman_volume_info_module.html",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b0318bb65447c742ad02998a8e0ec8c3b322fb552fdcc97c86d0d5aa94b0511d",
+ "chksum_sha256": "b8a2a6fad503cd6adb9160e77bb2f31118bf0daa6d977fa03759e28eb6c3f131",
"format": 1
},
{
@@ -372,122 +351,122 @@
"format": 1
},
{
- "name": "docs/podman_pod_module.html",
+ "name": "docs/podman_login_info_module.html",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "291e6c4c92da12468197580b183b4e33f3764f2363c21d811318fbd5fdad31d4",
+ "chksum_sha256": "94a726afed1d890e8b184d3084ca0c0070313a067b90dfdbc542b55ecdeea1ca",
"format": 1
},
{
- "name": "docs/podman_network_module.html",
+ "name": "docs/podman_login_module.html",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c0e41390cf13ce9e63c26d28fbb7c919ddba089f32405bd1c86144dbe25fec98",
+ "chksum_sha256": "c66423dcc7cc34aed5e2d110a4a874fbd6540cc6f1612e86c33406c919bcf79c",
"format": 1
},
{
- "name": "docs/podman_image_info_module.html",
+ "name": "docs/podman_pod_info_module.html",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "8052d065501c86d3fce53e1a870b257b1b120d4cee5787d65b09e33a8dcb3cc5",
+ "chksum_sha256": "a28ac5a8b511831dfa23f72c1f9bb344ef8ba447b35fa5324abb75d01c48c229",
"format": 1
},
{
- "name": "docs/podman_secret_module.html",
+ "name": "docs/podman_export_module.html",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1aa857495902d922a8d34cc1f99ea5ed5832bba967598980ee126d3e2d672194",
+ "chksum_sha256": "678fc32756bc2c3bfe8666d9b32144bcee1371e213e1885abea262bee7da0b86",
"format": 1
},
{
- "name": "docs/genindex.html",
+ "name": "docs/podman_import_module.html",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "267654c6dfb8d96914725b0bd774e09c72dfdcfb065ae073f9fc732b01b543d0",
+ "chksum_sha256": "efe1e379667f9f72c2d6b68dac89fce6a21b1c2bed58e6159a8da49fa343c7c0",
"format": 1
},
{
- "name": "docs/podman_login_module.html",
+ "name": "docs/podman_generate_systemd_module.html",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f85b0efcef6198ef699a371ba9cdfe4dd13563fd1982e82b9d5faaa47be08324",
+ "chksum_sha256": "a39b726dd24891ea2baed0fa82f0d6441a8de98ec924a34f1429d8f3b5c0db90",
"format": 1
},
{
- "name": "docs/index.html",
+ "name": "docs/podman_pod_module.html",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5b7c42262b9c12a137d255adf2a28983e897e6651689f7a49573b919d32e0722",
+ "chksum_sha256": "8df83296245cffb0523875e8045091ef06d9052f1c0193d48c4e4f6fb43ff3fb",
"format": 1
},
{
- "name": "docs/environment_variables.html",
+ "name": "docs/.nojekyll",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "754ab0bc744fd2f640f433d8ec17c4520c35bf5985108501b479b3653fe3c0d0",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "docs/podman_export_module.html",
+ "name": "docs/podman_connection.html",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ba113aee00093ea0a28f737e4b0d628c509ac7a901714b33e921faba02ab1b22",
+ "chksum_sha256": "163a4dd0ca2c99c1d58fe2e2400f9c4b3b431feb5913408185a6d175ad5f23e7",
"format": 1
},
{
- "name": "docs/podman_volume_info_module.html",
+ "name": "Makefile",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a4aebadb3c98b409f3b467ef8c4bccdc58d0368ec499779854c1dd888cd452ef",
+ "chksum_sha256": "77424e5d6417f24ffd8e4d00d85e942ba4eaa912129ae01f5f4e26a2e2500d2d",
"format": 1
},
{
- "name": "docs/podman_prune_module.html",
+ "name": "ansible-collection-containers-podman.spec",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "df4a1997ae54270f03a880ab39fd691e19b14ed22c1840605b54481168894738",
+ "chksum_sha256": "78cf0e2fef0e96de69fd18ab38b358a03a22a5ce2e0ecafbd149407d6bcafb47",
"format": 1
},
{
- "name": "docs/podman_secret_info_module.html",
+ "name": "setup.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "02c6ca29827997e672d37dc06699e7ef832c7d5738ed3e93e592a00c6de05804",
+ "chksum_sha256": "85ef52c56819164efc5178d25aa03a432cdb8431ad0c99255802ce19a1719602",
"format": 1
},
{
- "name": "docs/podman_connection.html",
+ "name": "README.md",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f8c5acf0a527705c23c59bc4153c6f24a825d1ce2bd77b4672ff185ab34d4b61",
+ "chksum_sha256": "0b3c0bf86d855ce3b4341bf6f72a5ea3e6300c09ca88d793ca3b149175eaa30c",
"format": 1
},
{
- "name": "CHANGELOG.rst",
+ "name": "CODE-OF-CONDUCT.md",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "96fa1187145da3dfde0d211ecf989620afdaf7e7f43970273741cb962be65dde",
+ "chksum_sha256": "5b42ff686c8d61fc9879d2512a9fa01f8810a7274318e7952ad3322eeea02f11",
"format": 1
},
{
- "name": "plugins",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "SECURITY.md",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "b73dc04e41dbb3774a3244e8e40d13eb97d169caa3e1230a622e077d60c1edd9",
"format": 1
},
{
- "name": "plugins/become",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "COPYING",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "3972dc9744f6499f0f9b2dbf76696f2ae7ad8af9b23dde66d6af86c9dfb36986",
"format": 1
},
{
- "name": "plugins/become/podman_unshare.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "2dab878a68742976acd46a1310a37e9e0777b1953f86ee31dd9e0a29e9dfc3f3",
+ "name": "plugins",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
@@ -526,108 +505,108 @@
"format": 1
},
{
- "name": "plugins/modules/podman_volume_info.py",
+ "name": "plugins/modules/podman_generate_systemd.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "eb8cf9d38d438d24589d547458f4c0ba8341f687eb8a1ded30de1fc0b8933c83",
+ "chksum_sha256": "262b7b1263967adfa45d98192ac38169e51026db3b60eac7b365dc81bbd7b784",
"format": 1
},
{
- "name": "plugins/modules/podman_import.py",
+ "name": "plugins/modules/podman_login_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9b17de1350a59abf3d1dd3b6faa6b7a66e7085bb06746027bee22be1371ba5b5",
+ "chksum_sha256": "e8f615071a379d21b8f012a60c24036c4812239faf8e6aea2be6e5ca21bbcc4f",
"format": 1
},
{
- "name": "plugins/modules/podman_secret.py",
+ "name": "plugins/modules/podman_export.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6b19a2f4453349e74339f952ca4d86512b55e792c3ed8d991ec7a681ec1de850",
+ "chksum_sha256": "48a73c06e5fe4b1f1d4cd70262d32559a13e73eda7012ea5c074fdbabbc2470a",
"format": 1
},
{
- "name": "plugins/modules/podman_load.py",
+ "name": "plugins/modules/podman_network_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "96694bda39431f44186d599db567446d72debdf52a4a5c51f5fd66fa515229fc",
+ "chksum_sha256": "9beb6e0c733ca304f38f95116dfd89569df21a68428039ef59ec9650314c5222",
"format": 1
},
{
- "name": "plugins/modules/podman_export.py",
+ "name": "plugins/modules/podman_image_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "48a73c06e5fe4b1f1d4cd70262d32559a13e73eda7012ea5c074fdbabbc2470a",
+ "chksum_sha256": "30d4db967b76884039d8ccaaf99f098e86b85efd9bef6bc0ceea4b8292905e6b",
"format": 1
},
{
- "name": "plugins/modules/podman_prune.py",
+ "name": "plugins/modules/podman_container_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "214aa5244363a5d1e8423c82a770e5c02f7dfc331b8756607a567995e6d6ec50",
+ "chksum_sha256": "c0ccb2118efb225624f13e01c499eec274d0d864fd151cca94e0128e994d4b5e",
"format": 1
},
{
- "name": "plugins/modules/podman_volume.py",
+ "name": "plugins/modules/podman_pod.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "880e428a2c953a1b550330b8e70159b775166dd21547056e75d64650c0892091",
+ "chksum_sha256": "32d5458b844ee1798d4abdc5384dc9b1056bd3a3585e6e38b48bfd3bd0ea43f5",
"format": 1
},
{
- "name": "plugins/modules/podman_pod.py",
+ "name": "plugins/modules/podman_container.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c2f505a53d4948d78ada958c5f33d94f5a703c684b97e12f47b5837654a55575",
+ "chksum_sha256": "ada302bbc6c4378e586edc7f0e2c0d9e78b161f325b7d886bfa9ee4deeb41882",
"format": 1
},
{
- "name": "plugins/modules/podman_image.py",
+ "name": "plugins/modules/podman_prune.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "03afa78794f979607671d9ce4676e1e51daa11fb1f706a2d3dbb498b2cee16bd",
+ "chksum_sha256": "214aa5244363a5d1e8423c82a770e5c02f7dfc331b8756607a567995e6d6ec50",
"format": 1
},
{
- "name": "plugins/modules/podman_container.py",
+ "name": "plugins/modules/podman_secret.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f31967e1063756efda806e7645d28c0d7bf1d794f92302c79d907dd44f2f3b68",
+ "chksum_sha256": "6b19a2f4453349e74339f952ca4d86512b55e792c3ed8d991ec7a681ec1de850",
"format": 1
},
{
- "name": "plugins/modules/podman_save.py",
+ "name": "plugins/modules/podman_tag.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ddb55cc96d2a174a1f2e61fcd22a435b11394d53199bd2afeca374139a43be2c",
+ "chksum_sha256": "f748d6640b2cd18ac2caaf0a9d74917c1f139649df48dd514a11d8a1e7abc7cf",
"format": 1
},
{
- "name": "plugins/modules/podman_play.py",
+ "name": "plugins/modules/__init__.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "453838a1c683a4e7e9cbc2e72f7ad8912961a16e87c3aa2d3ed3319fb934eb90",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"format": 1
},
{
- "name": "plugins/modules/podman_network_info.py",
+ "name": "plugins/modules/podman_logout.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9beb6e0c733ca304f38f95116dfd89569df21a68428039ef59ec9650314c5222",
+ "chksum_sha256": "7cc7da9cf123ffb9180e98f2fe5704f628831d44014efd25c48cedd1c28a9b7c",
"format": 1
},
{
- "name": "plugins/modules/__init__.py",
+ "name": "plugins/modules/podman_load.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "96694bda39431f44186d599db567446d72debdf52a4a5c51f5fd66fa515229fc",
"format": 1
},
{
- "name": "plugins/modules/podman_login_info.py",
+ "name": "plugins/modules/podman_save.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e8f615071a379d21b8f012a60c24036c4812239faf8e6aea2be6e5ca21bbcc4f",
+ "chksum_sha256": "ddb55cc96d2a174a1f2e61fcd22a435b11394d53199bd2afeca374139a43be2c",
"format": 1
},
{
@@ -638,80 +617,80 @@
"format": 1
},
{
- "name": "plugins/modules/podman_image_info.py",
+ "name": "plugins/modules/podman_pod_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d79ccfb526e599404fcb618d04195f8c7fa8158a7cce1f2d5d592b626a6976e2",
+ "chksum_sha256": "dae42675e5739995587997d9d2475219339f222053a99a121f28270444f717b9",
"format": 1
},
{
- "name": "plugins/modules/podman_network.py",
+ "name": "plugins/modules/podman_container_exec.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ca507252b965895a3ed3e24ccbb28541700212ac0f2b340abb901b35a909d760",
+ "chksum_sha256": "936c9c3ff873c18d2283dd352e6dbaaf46c228678db474dd88eb9df1e824d833",
"format": 1
},
{
- "name": "plugins/modules/podman_containers.py",
+ "name": "plugins/modules/podman_login.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "166b573ae344ccf93b2e33703fc8d8eeb1cd5e251eba40a95ba037cad4716b7a",
+ "chksum_sha256": "1414953f8525bcfa294fb57d70565a02ede619e29ef256d88c34bdb6b2712fb3",
"format": 1
},
{
- "name": "plugins/modules/podman_generate_systemd.py",
+ "name": "plugins/modules/podman_play.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "54348fd0d118db0d4f7596c60250814aa61ef9dc2a4bae74522bf61287fa35a7",
+ "chksum_sha256": "1fef01d23b5083bd5687f63d23e3e692fe0230f73e9a59da523fd8ce8be3509d",
"format": 1
},
{
- "name": "plugins/modules/podman_container_info.py",
+ "name": "plugins/modules/podman_containers.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c0ccb2118efb225624f13e01c499eec274d0d864fd151cca94e0128e994d4b5e",
+ "chksum_sha256": "166b573ae344ccf93b2e33703fc8d8eeb1cd5e251eba40a95ba037cad4716b7a",
"format": 1
},
{
- "name": "plugins/modules/podman_logout.py",
+ "name": "plugins/modules/podman_import.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7cc7da9cf123ffb9180e98f2fe5704f628831d44014efd25c48cedd1c28a9b7c",
+ "chksum_sha256": "9b17de1350a59abf3d1dd3b6faa6b7a66e7085bb06746027bee22be1371ba5b5",
"format": 1
},
{
- "name": "plugins/modules/podman_secret_info.py",
+ "name": "plugins/modules/podman_volume_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d6254c8325c6ff5fffb632062f7401d8a1a94d5f1786691e88bee07fe26734f9",
+ "chksum_sha256": "eb8cf9d38d438d24589d547458f4c0ba8341f687eb8a1ded30de1fc0b8933c83",
"format": 1
},
{
- "name": "plugins/modules/podman_login.py",
+ "name": "plugins/modules/podman_secret_info.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "54abe75a9053423a2189bdadee8b0e6c9b8f530ba82523a8024ea211626ecde2",
+ "chksum_sha256": "d6254c8325c6ff5fffb632062f7401d8a1a94d5f1786691e88bee07fe26734f9",
"format": 1
},
{
- "name": "plugins/modules/podman_pod_info.py",
+ "name": "plugins/modules/podman_network.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "18e5fd6f6142467654af44f458a13c662d3beb2fa7957b137cbc13852cfcb440",
+ "chksum_sha256": "28e23bfd5e1a689ec64ecd78dc5c2ade91064cc8db4523e2a3c84b3f0a527f09",
"format": 1
},
{
- "name": "plugins/modules/podman_container_exec.py",
+ "name": "plugins/modules/podman_volume.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "071bce898ea72b63aff4d47909fd191bbdbdca0f53fb6813b48c1b4ace95478a",
+ "chksum_sha256": "b6807a2c1cbb53a163eb761017d9cc4af0e22a7b151c78e73be0d1cdf6822d61",
"format": 1
},
{
- "name": "plugins/modules/podman_tag.py",
+ "name": "plugins/modules/podman_image.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f748d6640b2cd18ac2caaf0a9d74917c1f139649df48dd514a11d8a1e7abc7cf",
+ "chksum_sha256": "61096d944871085194097913b73ad99565cb445245366fa19067f3a279e6fe56",
"format": 1
},
{
@@ -732,14 +711,14 @@
"name": "plugins/module_utils/podman/podman_pod_lib.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2d25257e5aa77d26f60370d64385254353450c6ef9b86b1a442723a7adf8e1f8",
+ "chksum_sha256": "0c5f4b77c737bc856aef858fe0515bcc2351dec0b1beacff3772a441a280d2fe",
"format": 1
},
{
- "name": "plugins/module_utils/podman/__init__.py",
+ "name": "plugins/module_utils/podman/quadlet.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "chksum_sha256": "5574a455e924ea0eb4d8dd50cb0e04d86ee0ad3507826626be66bec766863c60",
"format": 1
},
{
@@ -750,10 +729,17 @@
"format": 1
},
{
+ "name": "plugins/module_utils/podman/__init__.py",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "format": 1
+ },
+ {
"name": "plugins/module_utils/podman/podman_container_lib.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ab338a3648ebff54756f05cd349d74d686f626884db95440dba379232c40ea34",
+ "chksum_sha256": "8a80171364990a53ad52201232c9bee988d2f02a91f0883e862c533a06b5730a",
"format": 1
},
{
@@ -764,10 +750,31 @@
"format": 1
},
{
- "name": "COPYING",
+ "name": "plugins/become",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "plugins/become/podman_unshare.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3972dc9744f6499f0f9b2dbf76696f2ae7ad8af9b23dde66d6af86c9dfb36986",
+ "chksum_sha256": "2dab878a68742976acd46a1310a37e9e0777b1953f86ee31dd9e0a29e9dfc3f3",
+ "format": 1
+ },
+ {
+ "name": "meta",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "meta/runtime.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "f07aa47b7583a6a8420798081029b8cdfb09cbf5564acff6f49b6c3237102618",
"format": 1
},
{
@@ -778,17 +785,45 @@
"format": 1
},
{
- "name": "Makefile",
+ "name": "changelogs",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "changelogs/config.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "77424e5d6417f24ffd8e4d00d85e942ba4eaa912129ae01f5f4e26a2e2500d2d",
+ "chksum_sha256": "72cc16b684890f4595ab75ffdd6f80f5ae19bc84cbb2d82606bc840eb7842209",
"format": 1
},
{
- "name": "SECURITY.md",
+ "name": "changelogs/changelog.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b73dc04e41dbb3774a3244e8e40d13eb97d169caa3e1230a622e077d60c1edd9",
+ "chksum_sha256": "7a25ebd33b1475eaf97acf3e5ba1b50461aabd200f501a6130f0aae1cc2e2e74",
+ "format": 1
+ },
+ {
+ "name": "galaxy.yml.in",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "ba21f50b97b7f801dd811f96d4941327fccab34b13311e9bfcc5facfeec16999",
+ "format": 1
+ },
+ {
+ "name": "CHANGELOG.rst",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "37440385853bd43f5b71ba017515bd1c7c68ac45c0429cfaae320b3661c75de1",
+ "format": 1
+ },
+ {
+ "name": "test-requirements.txt",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "9b72b7289eba420f51eb614c54f609181bb26e96caef2abf06c02339a77d2e08",
"format": 1
},
{
@@ -806,38 +841,38 @@
"format": 1
},
{
- "name": "tests/sanity/ignore-2.18.txt",
+ "name": "tests/sanity/ignore-2.12.txt",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "361bd77aa7cbdafdfcdec95128188299e4641bcce983571a747031794cca7cf5",
+ "chksum_sha256": "67fc6067f750369421d81d68b9f2d30afe4eb13f9d0963eaa1aa07a8c924556b",
"format": 1
},
{
- "name": "tests/sanity/ignore-2.13.txt",
+ "name": "tests/sanity/ignore-2.9.txt",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "361bd77aa7cbdafdfcdec95128188299e4641bcce983571a747031794cca7cf5",
+ "chksum_sha256": "67fc6067f750369421d81d68b9f2d30afe4eb13f9d0963eaa1aa07a8c924556b",
"format": 1
},
{
- "name": "tests/sanity/ignore-2.10.txt",
+ "name": "tests/sanity/ignore-2.15.txt",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "361bd77aa7cbdafdfcdec95128188299e4641bcce983571a747031794cca7cf5",
+ "chksum_sha256": "67fc6067f750369421d81d68b9f2d30afe4eb13f9d0963eaa1aa07a8c924556b",
"format": 1
},
{
- "name": "tests/sanity/ignore-2.11.txt",
+ "name": "tests/sanity/ignore-2.13.txt",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "361bd77aa7cbdafdfcdec95128188299e4641bcce983571a747031794cca7cf5",
+ "chksum_sha256": "67fc6067f750369421d81d68b9f2d30afe4eb13f9d0963eaa1aa07a8c924556b",
"format": 1
},
{
- "name": "tests/sanity/ignore-2.9.txt",
+ "name": "tests/sanity/ignore-2.17.txt",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "361bd77aa7cbdafdfcdec95128188299e4641bcce983571a747031794cca7cf5",
+ "chksum_sha256": "67fc6067f750369421d81d68b9f2d30afe4eb13f9d0963eaa1aa07a8c924556b",
"format": 1
},
{
@@ -848,38 +883,45 @@
"format": 1
},
{
- "name": "tests/sanity/ignore-2.14.txt",
+ "name": "tests/sanity/ignore-2.11.txt",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "361bd77aa7cbdafdfcdec95128188299e4641bcce983571a747031794cca7cf5",
+ "chksum_sha256": "67fc6067f750369421d81d68b9f2d30afe4eb13f9d0963eaa1aa07a8c924556b",
"format": 1
},
{
- "name": "tests/sanity/ignore-2.12.txt",
+ "name": "tests/sanity/ignore-2.10.txt",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "361bd77aa7cbdafdfcdec95128188299e4641bcce983571a747031794cca7cf5",
+ "chksum_sha256": "67fc6067f750369421d81d68b9f2d30afe4eb13f9d0963eaa1aa07a8c924556b",
"format": 1
},
{
- "name": "tests/sanity/ignore-2.17.txt",
+ "name": "tests/sanity/ignore-2.18.txt",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "361bd77aa7cbdafdfcdec95128188299e4641bcce983571a747031794cca7cf5",
+ "chksum_sha256": "67fc6067f750369421d81d68b9f2d30afe4eb13f9d0963eaa1aa07a8c924556b",
"format": 1
},
{
"name": "tests/sanity/ignore-2.16.txt",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "361bd77aa7cbdafdfcdec95128188299e4641bcce983571a747031794cca7cf5",
+ "chksum_sha256": "67fc6067f750369421d81d68b9f2d30afe4eb13f9d0963eaa1aa07a8c924556b",
"format": 1
},
{
- "name": "tests/sanity/ignore-2.15.txt",
+ "name": "tests/sanity/ignore-2.14.txt",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "361bd77aa7cbdafdfcdec95128188299e4641bcce983571a747031794cca7cf5",
+ "chksum_sha256": "67fc6067f750369421d81d68b9f2d30afe4eb13f9d0963eaa1aa07a8c924556b",
+ "format": 1
+ },
+ {
+ "name": "tests/.gitignore",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "b5726d3ec9335a09c124469eca039523847a6b0f08a083efaefd002b83326600",
"format": 1
},
{
@@ -904,13 +946,6 @@
"format": 1
},
{
- "name": "tests/unit/plugins/modules/test_common.py",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "79b1c212210b13bb60b8d97b140351ce088707f3574b8fc61b076e827e050891",
- "format": 1
- },
- {
"name": "tests/unit/plugins/modules/test_container_lib.py",
"ftype": "file",
"chksum_type": "sha256",
@@ -918,10 +953,10 @@
"format": 1
},
{
- "name": "tests/.gitignore",
+ "name": "tests/unit/plugins/modules/test_common.py",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b5726d3ec9335a09c124469eca039523847a6b0f08a083efaefd002b83326600",
+ "chksum_sha256": "79b1c212210b13bb60b8d97b140351ce088707f3574b8fc61b076e827e050891",
"format": 1
},
{
@@ -939,507 +974,528 @@
"format": 1
},
{
- "name": "tests/integration/targets/podman_volume_info",
+ "name": "tests/integration/targets/podman_pod",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/podman_volume_info/tasks",
+ "name": "tests/integration/targets/podman_pod/tasks",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/podman_volume_info/tasks/main.yml",
+ "name": "tests/integration/targets/podman_pod/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d951a17810a5d38195f5b6b9f2b61997be78c33f425b3d6c8424250d658d4115",
+ "chksum_sha256": "1c065036caae1e7933a92eead273136e4ebc1340257766746ad8d4954269bc10",
"format": 1
},
{
- "name": "tests/integration/targets/podman_volume",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/podman_pod/tasks/root-pod.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "32a941c1ab343de12be5b6b942885697a47a90e70b4ba8b8f6b41830fd748be7",
"format": 1
},
{
- "name": "tests/integration/targets/podman_volume/tasks",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/podman_pod/tasks/network-tests.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "9a8a2c641891bca7bd86d7c984970b869bad967b127d9ea5cad004dbb7bf1401",
"format": 1
},
{
- "name": "tests/integration/targets/podman_volume/tasks/main.yml",
+ "name": "tests/integration/targets/podman_pod/tasks/net-pod.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "fcf996710e030b8188cd7f49daa73c153c23513dfedcacea9e22615223ce8d7d",
+ "chksum_sha256": "a0f34f0ea7dc20a24b1a0bd29ef7b71fc5b145fd6ee364cea413c01cc858c30d",
"format": 1
},
{
- "name": "tests/integration/targets/podman_image",
+ "name": "tests/integration/targets/podman_pod/tasks/resource-limit.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "c401b840f46b7d047ffff490a03eb414be614b23f41ac053bf85b2b9e2eaef44",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/podman_containers",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/podman_image/files",
+ "name": "tests/integration/targets/podman_containers/tasks",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/podman_image/files/Containerfile",
+ "name": "tests/integration/targets/podman_containers/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ec6bc9968ca494ec22fcb0bed27fc12ddf2241fea1fe58d0d8a4f0b33487b506",
- "format": 1
- },
- {
- "name": "tests/integration/targets/podman_image/tasks",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "chksum_sha256": "f0693a6b04d4dc0d91ff26d5c155f0dde26d8b54d38bad24379b4b45115572ba",
"format": 1
},
{
- "name": "tests/integration/targets/podman_image/tasks/main.yml",
+ "name": "tests/integration/targets/podman_containers/tasks/root-multi.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "71b89cf589c2372b615111daa3acc9134561569dafea88fbe85fb4601f341d76",
+ "chksum_sha256": "99e92a4d72c87817aa74687d7a9fc99da5adbeeaffb04fa8da55cac88d2082ad",
"format": 1
},
{
- "name": "tests/integration/targets/podman_save",
+ "name": "tests/integration/targets/podman_import",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/podman_save/tasks",
+ "name": "tests/integration/targets/podman_import/tasks",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/podman_save/tasks/main.yml",
+ "name": "tests/integration/targets/podman_import/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "18dd5ac7950abeb6dcfdb97f4b9b6e00aeacd1be3b41dae762cca6e237bbbf93",
+ "chksum_sha256": "aee5d8c4cdcd8ca56109a6fcc93be0dcce03ebc65cf6c8d606b1e195ad7bc37a",
"format": 1
},
{
- "name": "tests/integration/targets/podman_logout",
+ "name": "tests/integration/targets/podman_container_exec",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/podman_logout/tasks",
+ "name": "tests/integration/targets/podman_container_exec/tasks",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/podman_logout/tasks/main.yml",
+ "name": "tests/integration/targets/podman_container_exec/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2e1c3fcd8cd0d917e7faad2dc447381ec2ccff2bc3a57b02060cd965ffbb45c1",
+ "chksum_sha256": "0e0ddeed9ec3f80a8dbe98de6b8ca92d6906a8ed8b4e732b57d7aa56ea603766",
"format": 1
},
{
- "name": "tests/integration/targets/connection_podman",
+ "name": "tests/integration/targets/podman_export",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/connection_podman/test_connection.inventory",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "05ecc4306d853f3a6057303bbcc0750d7fbb86e044cd135faf01c35ad06b6d25",
+ "name": "tests/integration/targets/podman_export/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/connection_podman/runme.sh",
+ "name": "tests/integration/targets/podman_export/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "06a213f3e9c159069f1fd055653438f8487d1b8939ee735a0025b151ef2a4626",
+ "chksum_sha256": "608c9d218d3e66b53ad1b5f2b3d6c295ca109edf2d82b08eccc3d8840278f4ab",
"format": 1
},
{
- "name": "tests/integration/targets/podman_container_exec",
+ "name": "tests/integration/targets/podman_container",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/podman_container_exec/tasks",
+ "name": "tests/integration/targets/podman_container/tasks",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/podman_container_exec/tasks/main.yml",
+ "name": "tests/integration/targets/podman_container/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f30d948810c85f961037c816face62e7a9591a26d566ecf5d19f6490161788de",
+ "chksum_sha256": "75e7c7c41efe6771b55a034dbeeb25b2ecfb16df84db581e3ba58a16f8192fbb",
"format": 1
},
{
- "name": "tests/integration/targets/podman_export",
+ "name": "tests/integration/targets/podman_image",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/podman_export/tasks",
+ "name": "tests/integration/targets/podman_image/tasks",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/podman_export/tasks/main.yml",
+ "name": "tests/integration/targets/podman_image/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "608c9d218d3e66b53ad1b5f2b3d6c295ca109edf2d82b08eccc3d8840278f4ab",
+ "chksum_sha256": "0d8f32e61e6e8357c8a08b3ec698a9a599b10b9dfdb0a03cef829d22b5eb177d",
"format": 1
},
{
- "name": "tests/integration/targets/podman_container_idempotency",
+ "name": "tests/integration/targets/podman_image/files",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/podman_container_idempotency/files",
+ "name": "tests/integration/targets/podman_image/files/Containerfile",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "ec6bc9968ca494ec22fcb0bed27fc12ddf2241fea1fe58d0d8a4f0b33487b506",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/connection",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/podman_container_idempotency/files/start.sh",
+ "name": "tests/integration/targets/connection/create-nonroot-user.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "bb80ab18f5df29c7c77f8acea5285af4f0f4d1ddac161801d0ff26ac242c2d86",
+ "chksum_sha256": "7af8e41655a36f526418cadf93e37da7117cc67761e34ab9c41b68ac8c00a268",
"format": 1
},
{
- "name": "tests/integration/targets/podman_container_idempotency/files/Dockerfile",
+ "name": "tests/integration/targets/connection/test_connection.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "002a8a2bf46c5da32a3583bc93c08347c6f7e16c51cd5abdf562d77df313da5c",
+ "chksum_sha256": "3b9bd8af9cbdf99e7d47189d08b57d0eb5030fde078c88a3387d2af701ae85a8",
"format": 1
},
{
- "name": "tests/integration/targets/podman_container_idempotency/tasks",
+ "name": "tests/integration/targets/podman_volume",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/podman_container_idempotency/tasks/idem_ports.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "cc446d64740817d2b04de867ac5e17e3118a4191e332f1c4bc493a34bc58b298",
+ "name": "tests/integration/targets/podman_volume/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/podman_container_idempotency/tasks/main.yml",
+ "name": "tests/integration/targets/podman_volume/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7b740c06632cb043c3fc57f226023b59b4a425dc28d4c3c1e005835bc3e6f727",
+ "chksum_sha256": "02a99c50e7aebf79d8a7d254f9c2c25f03bfa7f940b3593907d0b26bd018880e",
"format": 1
},
{
- "name": "tests/integration/targets/podman_container_idempotency/tasks/root-podman.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "ed7d2ee3e9e352efc0266c2264469b3f759f1630562794c98f5da83949506bec",
+ "name": "tests/integration/targets/podman_container_info",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/podman_container_idempotency/tasks/idem_systemd.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "272808017955d5ef59448a1b9ce1bb98d18bce0b1e4b658d1fe6c5b4fcdc884b",
+ "name": "tests/integration/targets/podman_container_info/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/podman_container_idempotency/tasks/idem_stopsignal.yml",
+ "name": "tests/integration/targets/podman_container_info/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "262e884e0b4a561fbc57726f13763e3b07a92786386c9a5c7ccd13270e38b475",
+ "chksum_sha256": "f753b105c6b8ca293911422dc3372b82e98ba5b3f7065cac0a20976933a0c03f",
"format": 1
},
{
- "name": "tests/integration/targets/podman_container_idempotency/tasks/idem_volumes.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "5e330c3f7359aaf7e6e3379db977b909e04bcec89b894f1f8f0d44dfebdecffd",
+ "name": "tests/integration/targets/podman_volume_info",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/podman_container_idempotency/tasks/idem_network_aliases.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "04c6bf4fd56edcc1a49a47e98f448c89cf8e90e1d7d67db9997f0af94ef09dc6",
+ "name": "tests/integration/targets/podman_volume_info/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/podman_container_idempotency/tasks/rootless-podman-network.yml",
+ "name": "tests/integration/targets/podman_volume_info/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a4d6028c7466608b10983c9acf25af9b99d9ce0aa27ed17500af287d28070af4",
+ "chksum_sha256": "d951a17810a5d38195f5b6b9f2b61997be78c33f425b3d6c8424250d658d4115",
"format": 1
},
{
- "name": "tests/integration/targets/podman_container_idempotency/tasks/idem_workdir.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "23d729589e61ae790bd81b281f89b48b443b830cf3a6932eb0bdf4289289f677",
+ "name": "tests/integration/targets/podman_runlabel",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/podman_container_idempotency/tasks/idem_labels.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "d375e2ec31f9f9d16adca8328db880ee3d0b56238db5686ac9bbb0dcc2017fe7",
+ "name": "tests/integration/targets/podman_runlabel/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/podman_container_idempotency/tasks/build_test_container.yml",
+ "name": "tests/integration/targets/podman_runlabel/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "a61627e2d0be2e1400f0d0f60df5d636eea74b18aa87fa2a0d7eb4c419c2a8ae",
+ "chksum_sha256": "0beafe98862363c62951e9c1a1398446a78b4e00aee1c91a7343e38eb5380fb0",
"format": 1
},
{
- "name": "tests/integration/targets/podman_container_idempotency/tasks/root-podman-network.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "ab1cc0f347537ab4403395b2b2b43f815fe49c7ae35b88b498931fdcb33abd75",
+ "name": "tests/integration/targets/podman_runlabel/files",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/podman_container_idempotency/tasks/idem_users.yml",
+ "name": "tests/integration/targets/podman_runlabel/files/testinstall.sh",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "36f44ffaa058046e62d0e53be0f7edf8232d9145ec44a948c64c15d0c0c3cd23",
+ "chksum_sha256": "6450871e198c27b65e85883b3ca93b78f63261667b2332689d7f5b01fd293077",
"format": 1
},
{
- "name": "tests/integration/targets/podman_container_idempotency/tasks/idem_pods.yml",
+ "name": "tests/integration/targets/podman_runlabel/files/Dockerfile",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "53d129901494fa24a8075ade0576e2536ae3cbfc5d8fb8d116a10978594a6a49",
+ "chksum_sha256": "4afccdec25a964d39944882c25dbb0df6f0f844cfcfb72bbd89bb505167d1241",
"format": 1
},
{
- "name": "tests/integration/targets/podman_container_idempotency/tasks/idem_networks.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "3a0f1de00361a8381b06934149d6433afd307d010d7396be307f7d7f6f27a52e",
+ "name": "tests/integration/targets/podman_image_info",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/podman_container_idempotency/tasks/idem_all.yml",
+ "name": "tests/integration/targets/podman_image_info/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/podman_image_info/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f7ccc04c97fb27dfdf4462cc73f74e244c76759ce0a5b4b7d785e6f8a50b7a56",
+ "chksum_sha256": "2e2b22b24c5afbaf5f7565c37a37cd0294bb0be58d758a75fca3cf7828f283ac",
"format": 1
},
{
- "name": "tests/integration/targets/podman_secret_info",
+ "name": "tests/integration/targets/podman_load",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/podman_secret_info/tasks",
+ "name": "tests/integration/targets/podman_load/tasks",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/podman_secret_info/tasks/main.yml",
+ "name": "tests/integration/targets/podman_load/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3181d366cf3f25687ff6cceaf0677803bedc1d64e6b766fa66d5882c89240674",
+ "chksum_sha256": "078d5ae2eb9bf74046e34c6e7c003e87bb6e08f1a6fd49fcf5d6bb2174bae393",
"format": 1
},
{
- "name": "tests/integration/targets/podman_login",
+ "name": "tests/integration/targets/podman_play",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/podman_login/tasks",
+ "name": "tests/integration/targets/podman_play/tasks",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/podman_login/tasks/main.yml",
+ "name": "tests/integration/targets/podman_play/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5156c546ca2b45f035ae5b28a7220e06c4fb8051f93a6077e0308b06cafa15b3",
+ "chksum_sha256": "164bc510cd1be9cb89f2d4845154d7f5854149ca347cdd4f2a115e70316c10f2",
"format": 1
},
{
- "name": "tests/integration/targets/podman_tag",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/podman_play/tasks/play-with-build.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "dbfd032b6d71ce241ee643cfcaa09997efc32ef57a0f4494982f43caad353678",
"format": 1
},
{
- "name": "tests/integration/targets/podman_tag/tasks",
+ "name": "tests/integration/targets/podman_play/tasks/files",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/podman_tag/tasks/main.yml",
+ "name": "tests/integration/targets/podman_play/tasks/files/play-root3.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2d0f2ae65dac8386961528eb33d02de73fe60026cb5566ffa68b4467b7c45678",
+ "chksum_sha256": "3e26cb69976a1b7d1f79a5dafc74e368d9297bb63b29c1c213d5bbddc0e62bf3",
"format": 1
},
{
- "name": "tests/integration/targets/podman_containers",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/podman_play/tasks/files/play1.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "1031804932a82f741e8cddaa397e73554e4784a790a3d4493d1b5c8f5f6bbf7e",
"format": 1
},
{
- "name": "tests/integration/targets/podman_containers/tasks",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/podman_play/tasks/files/Containerfile",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "c0268928bf1b6b6307404eff5d25e292b78239d330dc585c87d810db40307609",
"format": 1
},
{
- "name": "tests/integration/targets/podman_containers/tasks/main.yml",
+ "name": "tests/integration/targets/podman_play/tasks/files/play3.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f0693a6b04d4dc0d91ff26d5c155f0dde26d8b54d38bad24379b4b45115572ba",
+ "chksum_sha256": "c92c31b3ad0cd9992a6a9e391d07d69b2b9f3cc39b410e1cbc710bda40323b3d",
"format": 1
},
{
- "name": "tests/integration/targets/podman_containers/tasks/root-multi.yml",
+ "name": "tests/integration/targets/podman_play/tasks/files/kube-buil-test.yaml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "99e92a4d72c87817aa74687d7a9fc99da5adbeeaffb04fa8da55cac88d2082ad",
+ "chksum_sha256": "c813ffc1f16f8324acbbaad0cf5ad7ee00e0ebd47f314b9ad74f24fd9e2177b0",
"format": 1
},
{
- "name": "tests/integration/targets/podman_network",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/podman_play/tasks/files/play-pod.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "28fd560a9ff59811770316563e3320dbd77ed04c2c2dd9d698c54870fbcaafb4",
"format": 1
},
{
- "name": "tests/integration/targets/podman_network/tasks",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/podman_play/tasks/files/envdata.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "d5ebdb092f5473ae5174dfbac83b6623343326f308d02eea8fb58fbb7b42d264",
"format": 1
},
{
- "name": "tests/integration/targets/podman_network/tasks/main.yml",
+ "name": "tests/integration/targets/podman_play/tasks/files/multi-yaml.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b7659bb415aa72e1ff4ec1b2fc681ce7261fccdaa21804c1ecc9e9ee1a3b2cd0",
+ "chksum_sha256": "984f73601cc75a5052b22b3d9a670ea93e7cc0c4f3fe2fb89f4f341392fb8af6",
"format": 1
},
{
- "name": "tests/integration/targets/podman_image_info",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/podman_play/tasks/files/play-root1.yaml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "049f1ad67c57e019423f28c77ca8cec13e714ae8727fedfde71792ec56131344",
"format": 1
},
{
- "name": "tests/integration/targets/podman_image_info/tasks",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/podman_play/tasks/play-with-options.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "fcf6f0e7a8768422425a667d29e28c831e4f284102ab3b62d8c7eb4b0fca6083",
"format": 1
},
{
- "name": "tests/integration/targets/podman_image_info/tasks/main.yml",
+ "name": "tests/integration/targets/podman_play/tasks/root-play.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "2e2b22b24c5afbaf5f7565c37a37cd0294bb0be58d758a75fca3cf7828f283ac",
+ "chksum_sha256": "65c0fccbaf7c464b539f895addc0cf3e7536f9cb8b9f7d8e28725a90d345326b",
"format": 1
},
{
- "name": "tests/integration/targets/podman_prune",
+ "name": "tests/integration/targets/podman_play/tasks/play-multi-yaml.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "099247fe1f2666caf7035895336008b05e7e773353747c18015d36d795d9afaa",
+ "format": 1
+ },
+ {
+ "name": "tests/integration/targets/podman_logout",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/podman_prune/tasks",
+ "name": "tests/integration/targets/podman_logout/tasks",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/podman_prune/tasks/main.yml",
+ "name": "tests/integration/targets/podman_logout/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "724466a522dc7a0d89201a540856373a6613e11f6869faf0accfe01497c972c8",
+ "chksum_sha256": "2e1c3fcd8cd0d917e7faad2dc447381ec2ccff2bc3a57b02060cd965ffbb45c1",
"format": 1
},
{
- "name": "tests/integration/targets/connection",
+ "name": "tests/integration/targets/connection_buildah",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/connection/create-nonroot-user.yml",
+ "name": "tests/integration/targets/connection_buildah/test_connection.inventory",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "7af8e41655a36f526418cadf93e37da7117cc67761e34ab9c41b68ac8c00a268",
+ "chksum_sha256": "5012fc0a2af812b87b675f31cd605ecf8d80fe32667b6ed20ea51fe0c8685742",
"format": 1
},
{
- "name": "tests/integration/targets/connection/test_connection.yml",
+ "name": "tests/integration/targets/connection_buildah/runme.sh",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3b9bd8af9cbdf99e7d47189d08b57d0eb5030fde078c88a3387d2af701ae85a8",
+ "chksum_sha256": "b4d64b01f03eb7aa81f3fbe7202c816188bc8432fedccb5251feeb330f7c16e4",
"format": 1
},
{
@@ -1450,346 +1506,339 @@
"format": 1
},
{
- "name": "tests/integration/targets/podman_pod",
+ "name": "tests/integration/targets/podman_tag",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/podman_pod/tasks",
+ "name": "tests/integration/targets/podman_tag/tasks",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/podman_pod/tasks/main.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "bbe9d769c0aadaea64fb4a3263a8e1cb746e9f78e0f3308dfda1641b5abcc808",
- "format": 1
- },
- {
- "name": "tests/integration/targets/podman_pod/tasks/network-tests.yml",
+ "name": "tests/integration/targets/podman_tag/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "9a8a2c641891bca7bd86d7c984970b869bad967b127d9ea5cad004dbb7bf1401",
+ "chksum_sha256": "2d0f2ae65dac8386961528eb33d02de73fe60026cb5566ffa68b4467b7c45678",
"format": 1
},
{
- "name": "tests/integration/targets/podman_pod/tasks/net-pod.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "a0f34f0ea7dc20a24b1a0bd29ef7b71fc5b145fd6ee364cea413c01cc858c30d",
+ "name": "tests/integration/targets/podman_login_info",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/podman_pod/tasks/root-pod.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "32a941c1ab343de12be5b6b942885697a47a90e70b4ba8b8f6b41830fd748be7",
+ "name": "tests/integration/targets/podman_login_info/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/podman_pod/tasks/resource-limit.yml",
+ "name": "tests/integration/targets/podman_login_info/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "368abd818cd3d326f926d4e0d9e5ee7531f7fa337d48d9abfbb130e4c2e009a5",
+ "chksum_sha256": "21ef50fdd0d92d39240b082c1f9ba3782478e615863d3e8d9a0960b175b8158e",
"format": 1
},
{
- "name": "tests/integration/targets/podman_load",
+ "name": "tests/integration/targets/podman_network_info",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/podman_load/tasks",
+ "name": "tests/integration/targets/podman_network_info/tasks",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/podman_load/tasks/main.yml",
+ "name": "tests/integration/targets/podman_network_info/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "078d5ae2eb9bf74046e34c6e7c003e87bb6e08f1a6fd49fcf5d6bb2174bae393",
+ "chksum_sha256": "5d60cdf4f76199919395dd477e7feb32d8ebbb4b736d0a13052290a3fcb5e5e3",
"format": 1
},
{
- "name": "tests/integration/targets/podman_play",
+ "name": "tests/integration/targets/podman_pod_info",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/podman_play/tasks",
+ "name": "tests/integration/targets/podman_pod_info/tasks",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/podman_play/tasks/root-play.yml",
+ "name": "tests/integration/targets/podman_pod_info/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "65c0fccbaf7c464b539f895addc0cf3e7536f9cb8b9f7d8e28725a90d345326b",
+ "chksum_sha256": "f04166aa3908442835ca6e7f747429d54cdeb8bcbf272e3977de79f3ad653271",
"format": 1
},
{
- "name": "tests/integration/targets/podman_play/tasks/files",
+ "name": "tests/integration/targets/podman_container_idempotency",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/podman_play/tasks/files/kube-buil-test.yaml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "c813ffc1f16f8324acbbaad0cf5ad7ee00e0ebd47f314b9ad74f24fd9e2177b0",
+ "name": "tests/integration/targets/podman_container_idempotency/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/podman_play/tasks/files/play3.yaml",
+ "name": "tests/integration/targets/podman_container_idempotency/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c92c31b3ad0cd9992a6a9e391d07d69b2b9f3cc39b410e1cbc710bda40323b3d",
+ "chksum_sha256": "aa7ee1e6dad1b84726df6521d749c31263b9d6d2cb7c5ab38b04ddf8fadb58f9",
"format": 1
},
{
- "name": "tests/integration/targets/podman_play/tasks/files/Containerfile",
+ "name": "tests/integration/targets/podman_container_idempotency/tasks/idem_network_aliases.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "c0268928bf1b6b6307404eff5d25e292b78239d330dc585c87d810db40307609",
+ "chksum_sha256": "04c6bf4fd56edcc1a49a47e98f448c89cf8e90e1d7d67db9997f0af94ef09dc6",
"format": 1
},
{
- "name": "tests/integration/targets/podman_play/tasks/files/envdata.yaml",
+ "name": "tests/integration/targets/podman_container_idempotency/tasks/rootless-podman-network.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "d5ebdb092f5473ae5174dfbac83b6623343326f308d02eea8fb58fbb7b42d264",
+ "chksum_sha256": "407d946210fd0801b2626b36ca0921299c75d644ff508caeac1cc2fa49ef6c50",
"format": 1
},
{
- "name": "tests/integration/targets/podman_play/tasks/files/play-root1.yaml",
+ "name": "tests/integration/targets/podman_container_idempotency/tasks/build_test_container.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "049f1ad67c57e019423f28c77ca8cec13e714ae8727fedfde71792ec56131344",
+ "chksum_sha256": "a61627e2d0be2e1400f0d0f60df5d636eea74b18aa87fa2a0d7eb4c419c2a8ae",
"format": 1
},
{
- "name": "tests/integration/targets/podman_play/tasks/files/play-pod.yaml",
+ "name": "tests/integration/targets/podman_container_idempotency/tasks/idem_networks.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "28fd560a9ff59811770316563e3320dbd77ed04c2c2dd9d698c54870fbcaafb4",
+ "chksum_sha256": "3a0f1de00361a8381b06934149d6433afd307d010d7396be307f7d7f6f27a52e",
"format": 1
},
{
- "name": "tests/integration/targets/podman_play/tasks/files/play1.yaml",
+ "name": "tests/integration/targets/podman_container_idempotency/tasks/idem_users.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "1031804932a82f741e8cddaa397e73554e4784a790a3d4493d1b5c8f5f6bbf7e",
+ "chksum_sha256": "36f44ffaa058046e62d0e53be0f7edf8232d9145ec44a948c64c15d0c0c3cd23",
"format": 1
},
{
- "name": "tests/integration/targets/podman_play/tasks/files/play-root3.yaml",
+ "name": "tests/integration/targets/podman_container_idempotency/tasks/root-podman.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "3e26cb69976a1b7d1f79a5dafc74e368d9297bb63b29c1c213d5bbddc0e62bf3",
+ "chksum_sha256": "ed7d2ee3e9e352efc0266c2264469b3f759f1630562794c98f5da83949506bec",
"format": 1
},
{
- "name": "tests/integration/targets/podman_play/tasks/main.yml",
+ "name": "tests/integration/targets/podman_container_idempotency/tasks/idem_pods.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6e09a063081bc323f0bed0bde99945514ced8f79728cb0e6505cf9830e39210c",
+ "chksum_sha256": "53d129901494fa24a8075ade0576e2536ae3cbfc5d8fb8d116a10978594a6a49",
"format": 1
},
{
- "name": "tests/integration/targets/podman_play/tasks/play-with-build.yml",
+ "name": "tests/integration/targets/podman_container_idempotency/tasks/idem_workdir.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "e69e16e846f4c167878eadf1701af4af637704a1441bf20fb9c05161e93c034f",
+ "chksum_sha256": "23d729589e61ae790bd81b281f89b48b443b830cf3a6932eb0bdf4289289f677",
"format": 1
},
{
- "name": "tests/integration/targets/podman_play/tasks/play-with-options.yml",
+ "name": "tests/integration/targets/podman_container_idempotency/tasks/idem_ports.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0774269b8b1a0fa19000a0c0bfe4bb6ff8410a7fa46b80d1c4876ac39108580c",
+ "chksum_sha256": "cc446d64740817d2b04de867ac5e17e3118a4191e332f1c4bc493a34bc58b298",
"format": 1
},
{
- "name": "tests/integration/targets/podman_container",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/podman_container_idempotency/tasks/idem_systemd.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "272808017955d5ef59448a1b9ce1bb98d18bce0b1e4b658d1fe6c5b4fcdc884b",
"format": 1
},
{
- "name": "tests/integration/targets/podman_container/tasks",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/podman_container_idempotency/tasks/root-podman-network.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "ab1cc0f347537ab4403395b2b2b43f815fe49c7ae35b88b498931fdcb33abd75",
"format": 1
},
{
- "name": "tests/integration/targets/podman_container/tasks/main.yml",
+ "name": "tests/integration/targets/podman_container_idempotency/tasks/idem_all.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "01fca5192bb2072e35c91ce42643accf53cd7cc51166f8845bf71a373e99dd87",
+ "chksum_sha256": "f7ccc04c97fb27dfdf4462cc73f74e244c76759ce0a5b4b7d785e6f8a50b7a56",
"format": 1
},
{
- "name": "tests/integration/targets/podman_secret",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/podman_container_idempotency/tasks/idem_stopsignal.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "262e884e0b4a561fbc57726f13763e3b07a92786386c9a5c7ccd13270e38b475",
"format": 1
},
{
- "name": "tests/integration/targets/podman_secret/tasks",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/podman_container_idempotency/tasks/idem_volumes.yml",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "5e330c3f7359aaf7e6e3379db977b909e04bcec89b894f1f8f0d44dfebdecffd",
"format": 1
},
{
- "name": "tests/integration/targets/podman_secret/tasks/main.yml",
+ "name": "tests/integration/targets/podman_container_idempotency/tasks/idem_labels.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b9b9415b024f3f617149c74d980afccb22e7223dac8bb673465504507ca4e2aa",
+ "chksum_sha256": "d375e2ec31f9f9d16adca8328db880ee3d0b56238db5686ac9bbb0dcc2017fe7",
"format": 1
},
{
- "name": "tests/integration/targets/podman_container_info",
+ "name": "tests/integration/targets/podman_container_idempotency/files",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/podman_container_info/tasks",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/podman_container_idempotency/files/start.sh",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "bb80ab18f5df29c7c77f8acea5285af4f0f4d1ddac161801d0ff26ac242c2d86",
"format": 1
},
{
- "name": "tests/integration/targets/podman_container_info/tasks/main.yml",
+ "name": "tests/integration/targets/podman_container_idempotency/files/Dockerfile",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "f753b105c6b8ca293911422dc3372b82e98ba5b3f7065cac0a20976933a0c03f",
+ "chksum_sha256": "002a8a2bf46c5da32a3583bc93c08347c6f7e16c51cd5abdf562d77df313da5c",
"format": 1
},
{
- "name": "tests/integration/targets/podman_import",
+ "name": "tests/integration/targets/podman_secret",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/podman_import/tasks",
+ "name": "tests/integration/targets/podman_secret/tasks",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/podman_import/tasks/main.yml",
+ "name": "tests/integration/targets/podman_secret/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "aee5d8c4cdcd8ca56109a6fcc93be0dcce03ebc65cf6c8d606b1e195ad7bc37a",
+ "chksum_sha256": "b9b9415b024f3f617149c74d980afccb22e7223dac8bb673465504507ca4e2aa",
"format": 1
},
{
- "name": "tests/integration/targets/podman_runlabel",
+ "name": "tests/integration/targets/podman_network",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/podman_runlabel/files",
+ "name": "tests/integration/targets/podman_network/tasks",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/podman_runlabel/files/testinstall.sh",
+ "name": "tests/integration/targets/podman_network/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "6450871e198c27b65e85883b3ca93b78f63261667b2332689d7f5b01fd293077",
+ "chksum_sha256": "8415501667bf5315c747424b0ffbe15b3283803e26f52d78d7de13836bba1e90",
"format": 1
},
{
- "name": "tests/integration/targets/podman_runlabel/files/Dockerfile",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "4afccdec25a964d39944882c25dbb0df6f0f844cfcfb72bbd89bb505167d1241",
+ "name": "tests/integration/targets/podman_login",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/podman_runlabel/tasks",
+ "name": "tests/integration/targets/podman_login/tasks",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/podman_runlabel/tasks/main.yml",
+ "name": "tests/integration/targets/podman_login/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "0beafe98862363c62951e9c1a1398446a78b4e00aee1c91a7343e38eb5380fb0",
+ "chksum_sha256": "5156c546ca2b45f035ae5b28a7220e06c4fb8051f93a6077e0308b06cafa15b3",
"format": 1
},
{
- "name": "tests/integration/targets/connection_buildah",
+ "name": "tests/integration/targets/podman_save",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/connection_buildah/test_connection.inventory",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "5012fc0a2af812b87b675f31cd605ecf8d80fe32667b6ed20ea51fe0c8685742",
+ "name": "tests/integration/targets/podman_save/tasks",
+ "ftype": "dir",
+ "chksum_type": null,
+ "chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/connection_buildah/runme.sh",
+ "name": "tests/integration/targets/podman_save/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b4d64b01f03eb7aa81f3fbe7202c816188bc8432fedccb5251feeb330f7c16e4",
+ "chksum_sha256": "18dd5ac7950abeb6dcfdb97f4b9b6e00aeacd1be3b41dae762cca6e237bbbf93",
"format": 1
},
{
- "name": "tests/integration/targets/podman_login_info",
+ "name": "tests/integration/targets/podman_secret_info",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/podman_login_info/tasks",
+ "name": "tests/integration/targets/podman_secret_info/tasks",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/podman_login_info/tasks/main.yml",
+ "name": "tests/integration/targets/podman_secret_info/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "21ef50fdd0d92d39240b082c1f9ba3782478e615863d3e8d9a0960b175b8158e",
+ "chksum_sha256": "3181d366cf3f25687ff6cceaf0677803bedc1d64e6b766fa66d5882c89240674",
"format": 1
},
{
@@ -1810,77 +1859,49 @@
"name": "tests/integration/targets/podman_generate_systemd/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "4c4a2b75bf6b0c5816e27b25bd3b7ba836e3d040b606b84f2a15d8f96bfc7ad5",
+ "chksum_sha256": "e8a7e30fe0a898ba81b62400058b9bab61da64e588148084ddb14911943d2b8b",
"format": 1
},
{
- "name": "tests/integration/targets/podman_network_info",
+ "name": "tests/integration/targets/connection_podman",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/podman_network_info/tasks",
- "ftype": "dir",
- "chksum_type": null,
- "chksum_sha256": null,
+ "name": "tests/integration/targets/connection_podman/test_connection.inventory",
+ "ftype": "file",
+ "chksum_type": "sha256",
+ "chksum_sha256": "05ecc4306d853f3a6057303bbcc0750d7fbb86e044cd135faf01c35ad06b6d25",
"format": 1
},
{
- "name": "tests/integration/targets/podman_network_info/tasks/main.yml",
+ "name": "tests/integration/targets/connection_podman/runme.sh",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "5d60cdf4f76199919395dd477e7feb32d8ebbb4b736d0a13052290a3fcb5e5e3",
+ "chksum_sha256": "06a213f3e9c159069f1fd055653438f8487d1b8939ee735a0025b151ef2a4626",
"format": 1
},
{
- "name": "tests/integration/targets/podman_pod_info",
+ "name": "tests/integration/targets/podman_prune",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/podman_pod_info/tasks",
+ "name": "tests/integration/targets/podman_prune/tasks",
"ftype": "dir",
"chksum_type": null,
"chksum_sha256": null,
"format": 1
},
{
- "name": "tests/integration/targets/podman_pod_info/tasks/main.yml",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "f04166aa3908442835ca6e7f747429d54cdeb8bcbf272e3977de79f3ad653271",
- "format": 1
- },
- {
- "name": "CODE-OF-CONDUCT.md",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "5b42ff686c8d61fc9879d2512a9fa01f8810a7274318e7952ad3322eeea02f11",
- "format": 1
- },
- {
- "name": "ansible-collection-containers-podman.spec",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "78cf0e2fef0e96de69fd18ab38b358a03a22a5ce2e0ecafbd149407d6bcafb47",
- "format": 1
- },
- {
- "name": "README.md",
- "ftype": "file",
- "chksum_type": "sha256",
- "chksum_sha256": "0b3c0bf86d855ce3b4341bf6f72a5ea3e6300c09ca88d793ca3b149175eaa30c",
- "format": 1
- },
- {
- "name": "galaxy.yml.in",
+ "name": "tests/integration/targets/podman_prune/tasks/main.yml",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "ba21f50b97b7f801dd811f96d4941327fccab34b13311e9bfcc5facfeec16999",
+ "chksum_sha256": "ea735326ddf2a4077cab00b44e2c064c686d90d5d55e0c373a02c045aaabddf4",
"format": 1
}
],
diff --git a/ansible_collections/containers/podman/MANIFEST.json b/ansible_collections/containers/podman/MANIFEST.json
index 42a7515a2..ac80755e7 100644
--- a/ansible_collections/containers/podman/MANIFEST.json
+++ b/ansible_collections/containers/podman/MANIFEST.json
@@ -2,7 +2,7 @@
"collection_info": {
"namespace": "containers",
"name": "podman",
- "version": "1.12.0",
+ "version": "1.13.0",
"authors": [
"Sagi Shnaidman <sshnaidm@redhat.com>",
"Ansible team"
@@ -28,7 +28,7 @@
"name": "FILES.json",
"ftype": "file",
"chksum_type": "sha256",
- "chksum_sha256": "b77266449f88b742113a208a520a3141a8e68154485dde86e743014eb8d58d58",
+ "chksum_sha256": "c7ca356d6a22a0996ed4045ff5711e5cf96cd60a62009e0da6f63fea100d538f",
"format": 1
},
"format": 1
diff --git a/ansible_collections/containers/podman/changelogs/changelog.yaml b/ansible_collections/containers/podman/changelogs/changelog.yaml
index 05857773e..bb58cacf4 100644
--- a/ansible_collections/containers/podman/changelogs/changelog.yaml
+++ b/ansible_collections/containers/podman/changelogs/changelog.yaml
@@ -257,6 +257,39 @@ releases:
name: podman_secret_info
namespace: ''
release_date: '2024-01-30'
+ 1.12.1:
+ changes:
+ bugfixes:
+ - podman_container - Add check and fixed for v5 network diff
+ - podman_container - Fix pasta networking idempotency for v5 (#728)
+ - podman_container_exec - Remove unnecessary quotes in podman_container_exec
+ module
+ - podman_image_info - Fix wrong return data type in podman_image_info
+ - podman_play - Fix kube play annotations
+ - podman_pod - Fix broken info of pods in Podman v5
+ - podman_pod - Fix pod for Podman v5
+ - podman_pod - Fix podman pod v5 broken info issue
+ minor_changes:
+ - CI - Fix rootfs test in CI
+ - CI - add custom podman path to tasks
+ - CI - add parametrized executables to tests
+ - podman_container - Add pasta as default network mode after v5
+ - podman_container_exec - Return data for podman exec module
+ - podman_generate_systemd - Fix broken example for podman_generate_systemd (#708)
+ - podman_login - Update podman_login.py
+ - podman_play - Add support for kube yaml files with multi-documents (#724)
+ - podman_play - Update the logic for deleting pods/containers in podman_play
+ - podman_pod_info - handle return being list in Podman 5 (#713)
+ release_summary: Support for Podman v5 and bugfixes
+ release_date: '2024-04-08'
+ 1.13.0:
+ changes:
+ bugfixes:
+ - Fix pod info for non-existant pods
+ major_changes:
+ - Add quadlet support for Podman modules
+ release_summary: Quadlet support for Podman
+ release_date: '2024-04-22'
1.2.0:
changes:
minor_changes:
diff --git a/ansible_collections/containers/podman/docs/buildah_connection.html b/ansible_collections/containers/podman/docs/buildah_connection.html
index 0d16691d4..28b73f8bf 100644
--- a/ansible_collections/containers/podman/docs/buildah_connection.html
+++ b/ansible_collections/containers/podman/docs/buildah_connection.html
@@ -37,7 +37,7 @@
<h1>containers.podman.buildah connection – Interact with an existing buildah container<a class="headerlink" href="#containers-podman-buildah-connection-interact-with-an-existing-buildah-container" title="Permalink to this heading">¶</a></h1>
<div class="admonition note">
<p class="admonition-title">Note</p>
-<p>This connection plugin is part of the <a class="reference external" href="https://galaxy.ansible.com/ui/repo/published/containers/podman/">containers.podman collection</a> (version 1.11.0).</p>
+<p>This connection plugin is part of the <a class="reference external" href="https://galaxy.ansible.com/ui/repo/published/containers/podman/">containers.podman collection</a> (version 1.13.0).</p>
<p>It is not included in <code class="docutils literal notranslate"><span class="pre">ansible-core</span></code>.
To check whether it is installed, run <code class="code docutils literal notranslate"><span class="pre">ansible-galaxy</span> <span class="pre">collection</span> <span class="pre">list</span></code>.</p>
<p>To install it, use: <code class="code docutils literal notranslate"><span class="pre">ansible-galaxy</span> <span class="pre">collection</span> <span class="pre">install</span> <span class="pre">containers.podman</span></code>.</p>
diff --git a/ansible_collections/containers/podman/docs/index.html b/ansible_collections/containers/podman/docs/index.html
index ec765ccb4..8880530d7 100644
--- a/ansible_collections/containers/podman/docs/index.html
+++ b/ansible_collections/containers/podman/docs/index.html
@@ -34,7 +34,7 @@
<section id="containers-podman">
<span id="plugins-in-containers-podman"></span><h1>Containers.Podman<a class="headerlink" href="#containers-podman" title="Permalink to this heading">¶</a></h1>
-<p>Collection version 1.11.0</p>
+<p>Collection version 1.13.0</p>
<nav class="contents local" id="contents">
<ul class="simple">
<li><p><a class="reference internal" href="#description" id="id1">Description</a></p></li>
diff --git a/ansible_collections/containers/podman/docs/objects.inv b/ansible_collections/containers/podman/docs/objects.inv
index 4800e7a8b..e51191bf4 100644
--- a/ansible_collections/containers/podman/docs/objects.inv
+++ b/ansible_collections/containers/podman/docs/objects.inv
Binary files differ
diff --git a/ansible_collections/containers/podman/docs/podman_connection.html b/ansible_collections/containers/podman/docs/podman_connection.html
index 666200432..d5a6f2b6f 100644
--- a/ansible_collections/containers/podman/docs/podman_connection.html
+++ b/ansible_collections/containers/podman/docs/podman_connection.html
@@ -36,7 +36,7 @@
<h1>containers.podman.podman connection – Interact with an existing podman container<a class="headerlink" href="#containers-podman-podman-connection-interact-with-an-existing-podman-container" title="Permalink to this heading">¶</a></h1>
<div class="admonition note">
<p class="admonition-title">Note</p>
-<p>This connection plugin is part of the <a class="reference external" href="https://galaxy.ansible.com/ui/repo/published/containers/podman/">containers.podman collection</a> (version 1.11.0).</p>
+<p>This connection plugin is part of the <a class="reference external" href="https://galaxy.ansible.com/ui/repo/published/containers/podman/">containers.podman collection</a> (version 1.13.0).</p>
<p>It is not included in <code class="docutils literal notranslate"><span class="pre">ansible-core</span></code>.
To check whether it is installed, run <code class="code docutils literal notranslate"><span class="pre">ansible-galaxy</span> <span class="pre">collection</span> <span class="pre">list</span></code>.</p>
<p>To install it, use: <code class="code docutils literal notranslate"><span class="pre">ansible-galaxy</span> <span class="pre">collection</span> <span class="pre">install</span> <span class="pre">containers.podman</span></code>.</p>
diff --git a/ansible_collections/containers/podman/docs/podman_container_exec_module.html b/ansible_collections/containers/podman/docs/podman_container_exec_module.html
index 6f99748d8..f93c89afd 100644
--- a/ansible_collections/containers/podman/docs/podman_container_exec_module.html
+++ b/ansible_collections/containers/podman/docs/podman_container_exec_module.html
@@ -37,7 +37,7 @@
<h1>containers.podman.podman_container_exec module – Executes a command in a running container.<a class="headerlink" href="#containers-podman-podman-container-exec-module-executes-a-command-in-a-running-container" title="Permalink to this heading">¶</a></h1>
<div class="admonition note">
<p class="admonition-title">Note</p>
-<p>This module is part of the <a class="reference external" href="https://galaxy.ansible.com/ui/repo/published/containers/podman/">containers.podman collection</a> (version 1.11.0).</p>
+<p>This module is part of the <a class="reference external" href="https://galaxy.ansible.com/ui/repo/published/containers/podman/">containers.podman collection</a> (version 1.13.0).</p>
<p>It is not included in <code class="docutils literal notranslate"><span class="pre">ansible-core</span></code>.
To check whether it is installed, run <code class="code docutils literal notranslate"><span class="pre">ansible-galaxy</span> <span class="pre">collection</span> <span class="pre">list</span></code>.</p>
<p>To install it, use: <code class="code docutils literal notranslate"><span class="pre">ansible-galaxy</span> <span class="pre">collection</span> <span class="pre">install</span> <span class="pre">containers.podman</span></code>.
@@ -114,13 +114,21 @@ see <a class="reference internal" href="#ansible-collections-containers-podman-p
</div></td>
</tr>
<tr class="row-even"><td><div class="ansible-option-cell">
+<div class="ansibleOptionAnchor" id="parameter-executable"></div><p class="ansible-option-title" id="ansible-collections-containers-podman-podman-container-exec-module-parameter-executable"><strong>executable</strong></p>
+<a class="ansibleOptionLink" href="#parameter-executable" title="Permalink to this option"></a><p class="ansible-option-type-line"><span class="ansible-option-type">string</span></p>
+</div></td>
+<td><div class="ansible-option-cell"><p>The path to the podman executable.</p>
+<p class="ansible-option-line"><strong class="ansible-option-default-bold">Default:</strong> <code class="ansible-option-default docutils literal notranslate"><span class="pre">&quot;podman&quot;</span></code></p>
+</div></td>
+</tr>
+<tr class="row-odd"><td><div class="ansible-option-cell">
<div class="ansibleOptionAnchor" id="parameter-name"></div><p class="ansible-option-title" id="ansible-collections-containers-podman-podman-container-exec-module-parameter-name"><strong>name</strong></p>
<a class="ansibleOptionLink" href="#parameter-name" title="Permalink to this option"></a><p class="ansible-option-type-line"><span class="ansible-option-type">string</span> / <span class="ansible-option-required">required</span></p>
</div></td>
<td><div class="ansible-option-cell"><p>Name of the container where the command is executed.</p>
</div></td>
</tr>
-<tr class="row-odd"><td><div class="ansible-option-cell">
+<tr class="row-even"><td><div class="ansible-option-cell">
<div class="ansibleOptionAnchor" id="parameter-privileged"></div><p class="ansible-option-title" id="ansible-collections-containers-podman-podman-container-exec-module-parameter-privileged"><strong>privileged</strong></p>
<a class="ansibleOptionLink" href="#parameter-privileged" title="Permalink to this option"></a><p class="ansible-option-type-line"><span class="ansible-option-type">boolean</span></p>
</div></td>
@@ -132,7 +140,7 @@ see <a class="reference internal" href="#ansible-collections-containers-podman-p
</ul>
</div></td>
</tr>
-<tr class="row-even"><td><div class="ansible-option-cell">
+<tr class="row-odd"><td><div class="ansible-option-cell">
<div class="ansibleOptionAnchor" id="parameter-tty"></div><p class="ansible-option-title" id="ansible-collections-containers-podman-podman-container-exec-module-parameter-tty"><strong>tty</strong></p>
<a class="ansibleOptionLink" href="#parameter-tty" title="Permalink to this option"></a><p class="ansible-option-type-line"><span class="ansible-option-type">boolean</span></p>
</div></td>
@@ -144,7 +152,7 @@ see <a class="reference internal" href="#ansible-collections-containers-podman-p
</ul>
</div></td>
</tr>
-<tr class="row-odd"><td><div class="ansible-option-cell">
+<tr class="row-even"><td><div class="ansible-option-cell">
<div class="ansibleOptionAnchor" id="parameter-user"></div><p class="ansible-option-title" id="ansible-collections-containers-podman-podman-container-exec-module-parameter-user"><strong>user</strong></p>
<a class="ansibleOptionLink" href="#parameter-user" title="Permalink to this option"></a><p class="ansible-option-type-line"><span class="ansible-option-type">string</span></p>
</div></td>
@@ -152,7 +160,7 @@ see <a class="reference internal" href="#ansible-collections-containers-podman-p
<p>Both user and group may be symbolic or numeric.</p>
</div></td>
</tr>
-<tr class="row-even"><td><div class="ansible-option-cell">
+<tr class="row-odd"><td><div class="ansible-option-cell">
<div class="ansibleOptionAnchor" id="parameter-workdir"></div><p class="ansible-option-title" id="ansible-collections-containers-podman-podman-container-exec-module-parameter-workdir"><strong>workdir</strong></p>
<a class="ansibleOptionLink" href="#parameter-workdir" title="Permalink to this option"></a><p class="ansible-option-type-line"><span class="ansible-option-type">string</span></p>
</div></td>
diff --git a/ansible_collections/containers/podman/docs/podman_container_info_module.html b/ansible_collections/containers/podman/docs/podman_container_info_module.html
index ff1441845..516979249 100644
--- a/ansible_collections/containers/podman/docs/podman_container_info_module.html
+++ b/ansible_collections/containers/podman/docs/podman_container_info_module.html
@@ -37,7 +37,7 @@
<h1>containers.podman.podman_container_info module – Gather facts about containers using podman<a class="headerlink" href="#containers-podman-podman-container-info-module-gather-facts-about-containers-using-podman" title="Permalink to this heading">¶</a></h1>
<div class="admonition note">
<p class="admonition-title">Note</p>
-<p>This module is part of the <a class="reference external" href="https://galaxy.ansible.com/ui/repo/published/containers/podman/">containers.podman collection</a> (version 1.11.0).</p>
+<p>This module is part of the <a class="reference external" href="https://galaxy.ansible.com/ui/repo/published/containers/podman/">containers.podman collection</a> (version 1.13.0).</p>
<p>It is not included in <code class="docutils literal notranslate"><span class="pre">ansible-core</span></code>.
To check whether it is installed, run <code class="code docutils literal notranslate"><span class="pre">ansible-galaxy</span> <span class="pre">collection</span> <span class="pre">list</span></code>.</p>
<p>To install it, use: <code class="code docutils literal notranslate"><span class="pre">ansible-galaxy</span> <span class="pre">collection</span> <span class="pre">install</span> <span class="pre">containers.podman</span></code>.
diff --git a/ansible_collections/containers/podman/docs/podman_container_module.html b/ansible_collections/containers/podman/docs/podman_container_module.html
index 656e05d7c..6cb5f17ee 100644
--- a/ansible_collections/containers/podman/docs/podman_container_module.html
+++ b/ansible_collections/containers/podman/docs/podman_container_module.html
@@ -37,7 +37,7 @@
<h1>containers.podman.podman_container module – Manage podman containers<a class="headerlink" href="#containers-podman-podman-container-module-manage-podman-containers" title="Permalink to this heading">¶</a></h1>
<div class="admonition note">
<p class="admonition-title">Note</p>
-<p>This module is part of the <a class="reference external" href="https://galaxy.ansible.com/ui/repo/published/containers/podman/">containers.podman collection</a> (version 1.11.0).</p>
+<p>This module is part of the <a class="reference external" href="https://galaxy.ansible.com/ui/repo/published/containers/podman/">containers.podman collection</a> (version 1.13.0).</p>
<p>It is not included in <code class="docutils literal notranslate"><span class="pre">ansible-core</span></code>.
To check whether it is installed, run <code class="code docutils literal notranslate"><span class="pre">ansible-galaxy</span> <span class="pre">collection</span> <span class="pre">list</span></code>.</p>
<p>To install it, use: <code class="code docutils literal notranslate"><span class="pre">ansible-galaxy</span> <span class="pre">collection</span> <span class="pre">install</span> <span class="pre">containers.podman</span></code>.
@@ -998,6 +998,27 @@ see <a class="reference internal" href="#ansible-collections-containers-podman-p
</div></td>
</tr>
<tr class="row-even"><td><div class="ansible-option-cell">
+<div class="ansibleOptionAnchor" id="parameter-quadlet_dir"></div><p class="ansible-option-title" id="ansible-collections-containers-podman-podman-container-module-parameter-quadlet-dir"><strong>quadlet_dir</strong></p>
+<a class="ansibleOptionLink" href="#parameter-quadlet_dir" title="Permalink to this option"></a><p class="ansible-option-type-line"><span class="ansible-option-type">path</span></p>
+</div></td>
+<td><div class="ansible-option-cell"><p>Path to the directory to write quadlet file in. By default, it will be set as <code class="docutils literal notranslate"><span class="pre">/etc/containers/systemd/</span></code> for root user, <code class="docutils literal notranslate"><span class="pre">~/.config/containers/systemd/</span></code> for non-root users.</p>
+</div></td>
+</tr>
+<tr class="row-odd"><td><div class="ansible-option-cell">
+<div class="ansibleOptionAnchor" id="parameter-quadlet_filename"></div><p class="ansible-option-title" id="ansible-collections-containers-podman-podman-container-module-parameter-quadlet-filename"><strong>quadlet_filename</strong></p>
+<a class="ansibleOptionLink" href="#parameter-quadlet_filename" title="Permalink to this option"></a><p class="ansible-option-type-line"><span class="ansible-option-type">string</span></p>
+</div></td>
+<td><div class="ansible-option-cell"><p>Name of quadlet file to write. By default it takes <code class="docutils literal notranslate"><span class="pre">name</span></code> value.</p>
+</div></td>
+</tr>
+<tr class="row-even"><td><div class="ansible-option-cell">
+<div class="ansibleOptionAnchor" id="parameter-quadlet_options"></div><p class="ansible-option-title" id="ansible-collections-containers-podman-podman-container-module-parameter-quadlet-options"><strong>quadlet_options</strong></p>
+<a class="ansibleOptionLink" href="#parameter-quadlet_options" title="Permalink to this option"></a><p class="ansible-option-type-line"><span class="ansible-option-type">list</span> / <span class="ansible-option-elements">elements=string</span></p>
+</div></td>
+<td><div class="ansible-option-cell"><p>Options for the quadlet file. Provide missing in usual container args options as a list of lines to add.</p>
+</div></td>
+</tr>
+<tr class="row-odd"><td><div class="ansible-option-cell">
<div class="ansibleOptionAnchor" id="parameter-read_only"></div><p class="ansible-option-title" id="ansible-collections-containers-podman-podman-container-module-parameter-read-only"><strong>read_only</strong></p>
<a class="ansibleOptionLink" href="#parameter-read_only" title="Permalink to this option"></a><p class="ansible-option-type-line"><span class="ansible-option-type">boolean</span></p>
</div></td>
@@ -1009,7 +1030,7 @@ see <a class="reference internal" href="#ansible-collections-containers-podman-p
</ul>
</div></td>
</tr>
-<tr class="row-odd"><td><div class="ansible-option-cell">
+<tr class="row-even"><td><div class="ansible-option-cell">
<div class="ansibleOptionAnchor" id="parameter-read_only_tmpfs"></div><p class="ansible-option-title" id="ansible-collections-containers-podman-podman-container-module-parameter-read-only-tmpfs"><strong>read_only_tmpfs</strong></p>
<a class="ansibleOptionLink" href="#parameter-read_only_tmpfs" title="Permalink to this option"></a><p class="ansible-option-type-line"><span class="ansible-option-type">boolean</span></p>
</div></td>
@@ -1021,7 +1042,7 @@ see <a class="reference internal" href="#ansible-collections-containers-podman-p
</ul>
</div></td>
</tr>
-<tr class="row-even"><td><div class="ansible-option-cell">
+<tr class="row-odd"><td><div class="ansible-option-cell">
<div class="ansibleOptionAnchor" id="parameter-recreate"></div><p class="ansible-option-title" id="ansible-collections-containers-podman-podman-container-module-parameter-recreate"><strong>recreate</strong></p>
<a class="ansibleOptionLink" href="#parameter-recreate" title="Permalink to this option"></a><p class="ansible-option-type-line"><span class="ansible-option-type">boolean</span></p>
</div></td>
@@ -1033,28 +1054,28 @@ see <a class="reference internal" href="#ansible-collections-containers-podman-p
</ul>
</div></td>
</tr>
-<tr class="row-odd"><td><div class="ansible-option-cell">
+<tr class="row-even"><td><div class="ansible-option-cell">
<div class="ansibleOptionAnchor" id="parameter-requires"></div><p class="ansible-option-title" id="ansible-collections-containers-podman-podman-container-module-parameter-requires"><strong>requires</strong></p>
<a class="ansibleOptionLink" href="#parameter-requires" title="Permalink to this option"></a><p class="ansible-option-type-line"><span class="ansible-option-type">list</span> / <span class="ansible-option-elements">elements=string</span></p>
</div></td>
<td><div class="ansible-option-cell"><p>Specify one or more requirements. A requirement is a dependency container that will be started before this container. Containers can be specified by name or ID.</p>
</div></td>
</tr>
-<tr class="row-even"><td><div class="ansible-option-cell">
+<tr class="row-odd"><td><div class="ansible-option-cell">
<div class="ansibleOptionAnchor" id="parameter-restart_policy"></div><p class="ansible-option-title" id="ansible-collections-containers-podman-podman-container-module-parameter-restart-policy"><strong>restart_policy</strong></p>
<a class="ansibleOptionLink" href="#parameter-restart_policy" title="Permalink to this option"></a><p class="ansible-option-type-line"><span class="ansible-option-type">string</span></p>
</div></td>
<td><div class="ansible-option-cell"><p>Restart policy to follow when containers exit. Restart policy will not take effect if a container is stopped via the podman kill or podman stop commands. Valid values are * no - Do not restart containers on exit * on-failure[:max_retries] - Restart containers when they exit with a non-0 exit code, retrying indefinitely or until the optional max_retries count is hit * always - Restart containers when they exit, regardless of status, retrying indefinitely</p>
</div></td>
</tr>
-<tr class="row-odd"><td><div class="ansible-option-cell">
+<tr class="row-even"><td><div class="ansible-option-cell">
<div class="ansibleOptionAnchor" id="parameter-restart_time"></div><p class="ansible-option-title" id="ansible-collections-containers-podman-podman-container-module-parameter-restart-time"><strong>restart_time</strong></p>
<a class="ansibleOptionLink" href="#parameter-restart_time" title="Permalink to this option"></a><p class="ansible-option-type-line"><span class="ansible-option-type">string</span></p>
</div></td>
<td><div class="ansible-option-cell"><p>Seconds to wait before forcibly stopping the container when restarting. Use -1 for infinite wait. Applies to “restarted” status.</p>
</div></td>
</tr>
-<tr class="row-even"><td><div class="ansible-option-cell">
+<tr class="row-odd"><td><div class="ansible-option-cell">
<div class="ansibleOptionAnchor" id="parameter-rm"></div>
<div class="ansibleOptionAnchor" id="parameter-remove"></div>
<div class="ansibleOptionAnchor" id="parameter-auto_remove"></div><p class="ansible-option-title" id="ansible-collections-containers-podman-podman-container-module-parameter-rm"><span id="ansible-collections-containers-podman-podman-container-module-parameter-remove"></span><span id="ansible-collections-containers-podman-podman-container-module-parameter-auto-remove"></span><strong>rm</strong></p>
@@ -1069,7 +1090,7 @@ see <a class="reference internal" href="#ansible-collections-containers-podman-p
</ul>
</div></td>
</tr>
-<tr class="row-odd"><td><div class="ansible-option-cell">
+<tr class="row-even"><td><div class="ansible-option-cell">
<div class="ansibleOptionAnchor" id="parameter-rootfs"></div><p class="ansible-option-title" id="ansible-collections-containers-podman-podman-container-module-parameter-rootfs"><strong>rootfs</strong></p>
<a class="ansibleOptionLink" href="#parameter-rootfs" title="Permalink to this option"></a><p class="ansible-option-type-line"><span class="ansible-option-type">boolean</span></p>
</div></td>
@@ -1081,35 +1102,35 @@ see <a class="reference internal" href="#ansible-collections-containers-podman-p
</ul>
</div></td>
</tr>
-<tr class="row-even"><td><div class="ansible-option-cell">
+<tr class="row-odd"><td><div class="ansible-option-cell">
<div class="ansibleOptionAnchor" id="parameter-sdnotify"></div><p class="ansible-option-title" id="ansible-collections-containers-podman-podman-container-module-parameter-sdnotify"><strong>sdnotify</strong></p>
<a class="ansibleOptionLink" href="#parameter-sdnotify" title="Permalink to this option"></a><p class="ansible-option-type-line"><span class="ansible-option-type">string</span></p>
</div></td>
<td><div class="ansible-option-cell"><p>Determines how to use the NOTIFY_SOCKET, as passed with systemd and Type=notify. Can be container, conmon, ignore.</p>
</div></td>
</tr>
-<tr class="row-odd"><td><div class="ansible-option-cell">
+<tr class="row-even"><td><div class="ansible-option-cell">
<div class="ansibleOptionAnchor" id="parameter-secrets"></div><p class="ansible-option-title" id="ansible-collections-containers-podman-podman-container-module-parameter-secrets"><strong>secrets</strong></p>
<a class="ansibleOptionLink" href="#parameter-secrets" title="Permalink to this option"></a><p class="ansible-option-type-line"><span class="ansible-option-type">list</span> / <span class="ansible-option-elements">elements=string</span></p>
</div></td>
<td><div class="ansible-option-cell"><p>Add the named secrets into the container. The format is <code class="docutils literal notranslate"><span class="pre">secret[,opt=opt...]</span></code>, see <a class="reference external" href="https://docs.podman.io/en/latest/markdown/podman-run.1.html#secret-secret-opt-opt">documentation</a> for more details.</p>
</div></td>
</tr>
-<tr class="row-even"><td><div class="ansible-option-cell">
+<tr class="row-odd"><td><div class="ansible-option-cell">
<div class="ansibleOptionAnchor" id="parameter-security_opt"></div><p class="ansible-option-title" id="ansible-collections-containers-podman-podman-container-module-parameter-security-opt"><strong>security_opt</strong></p>
<a class="ansibleOptionLink" href="#parameter-security_opt" title="Permalink to this option"></a><p class="ansible-option-type-line"><span class="ansible-option-type">list</span> / <span class="ansible-option-elements">elements=string</span></p>
</div></td>
<td><div class="ansible-option-cell"><p>Security Options. For example security_opt “seccomp=unconfined”</p>
</div></td>
</tr>
-<tr class="row-odd"><td><div class="ansible-option-cell">
+<tr class="row-even"><td><div class="ansible-option-cell">
<div class="ansibleOptionAnchor" id="parameter-shm_size"></div><p class="ansible-option-title" id="ansible-collections-containers-podman-podman-container-module-parameter-shm-size"><strong>shm_size</strong></p>
<a class="ansibleOptionLink" href="#parameter-shm_size" title="Permalink to this option"></a><p class="ansible-option-type-line"><span class="ansible-option-type">string</span></p>
</div></td>
<td><div class="ansible-option-cell"><p>Size of /dev/shm. The format is &lt;number&gt;&lt;unit&gt;. number must be greater than 0. Unit is optional and can be b (bytes), k (kilobytes), m(megabytes), or g (gigabytes). If you omit the unit, the system uses bytes. If you omit the size entirely, the system uses 64m</p>
</div></td>
</tr>
-<tr class="row-even"><td><div class="ansible-option-cell">
+<tr class="row-odd"><td><div class="ansible-option-cell">
<div class="ansibleOptionAnchor" id="parameter-sig_proxy"></div><p class="ansible-option-title" id="ansible-collections-containers-podman-podman-container-module-parameter-sig-proxy"><strong>sig_proxy</strong></p>
<a class="ansibleOptionLink" href="#parameter-sig_proxy" title="Permalink to this option"></a><p class="ansible-option-type-line"><span class="ansible-option-type">boolean</span></p>
</div></td>
@@ -1121,7 +1142,7 @@ see <a class="reference internal" href="#ansible-collections-containers-podman-p
</ul>
</div></td>
</tr>
-<tr class="row-odd"><td><div class="ansible-option-cell">
+<tr class="row-even"><td><div class="ansible-option-cell">
<div class="ansibleOptionAnchor" id="parameter-state"></div><p class="ansible-option-title" id="ansible-collections-containers-podman-podman-container-module-parameter-state"><strong>state</strong></p>
<a class="ansibleOptionLink" href="#parameter-state" title="Permalink to this option"></a><p class="ansible-option-type-line"><span class="ansible-option-type">string</span></p>
</div></td>
@@ -1130,6 +1151,7 @@ see <a class="reference internal" href="#ansible-collections-containers-podman-p
<p><em>started</em> - Asserts there is a running container matching the name and any provided configuration. If no container matches the name, a container will be created and started. Use recreate to always re-create a matching container, even if it is running. Use force_restart to force a matching container to be stopped and restarted.</p>
<p><em>stopped</em> - Asserts that the container is first <em>present</em>, and then if the container is running moves it to a stopped state.</p>
<p><em>created</em> - Asserts that the container exists with given configuration. If container doesn’t exist, the module creates it and leaves it in ‘created’ state. If configuration doesn’t match or ‘recreate’ option is set, the container will be recreated</p>
+<p><em>quadlet</em> - Write a quadlet file with the specified configuration. Requires the <code class="docutils literal notranslate"><span class="pre">quadlet_dir</span></code> option to be set.</p>
<p class="ansible-option-line"><strong class="ansible-option-choices">Choices:</strong></p>
<ul class="simple">
<li><p><code class="ansible-option-choices-entry docutils literal notranslate"><span class="pre">&quot;absent&quot;</span></code></p></li>
@@ -1137,73 +1159,74 @@ see <a class="reference internal" href="#ansible-collections-containers-podman-p
<li><p><code class="ansible-option-choices-entry docutils literal notranslate"><span class="pre">&quot;stopped&quot;</span></code></p></li>
<li><p><code class="ansible-option-default-bold docutils literal notranslate"><strong><span class="pre">&quot;started&quot;</span></strong></code> <span class="ansible-option-choices-default-mark">← (default)</span></p></li>
<li><p><code class="ansible-option-choices-entry docutils literal notranslate"><span class="pre">&quot;created&quot;</span></code></p></li>
+<li><p><code class="ansible-option-choices-entry docutils literal notranslate"><span class="pre">&quot;quadlet&quot;</span></code></p></li>
</ul>
</div></td>
</tr>
-<tr class="row-even"><td><div class="ansible-option-cell">
+<tr class="row-odd"><td><div class="ansible-option-cell">
<div class="ansibleOptionAnchor" id="parameter-stop_signal"></div><p class="ansible-option-title" id="ansible-collections-containers-podman-podman-container-module-parameter-stop-signal"><strong>stop_signal</strong></p>
<a class="ansibleOptionLink" href="#parameter-stop_signal" title="Permalink to this option"></a><p class="ansible-option-type-line"><span class="ansible-option-type">integer</span></p>
</div></td>
<td><div class="ansible-option-cell"><p>Signal to stop a container. Default is SIGTERM.</p>
</div></td>
</tr>
-<tr class="row-odd"><td><div class="ansible-option-cell">
+<tr class="row-even"><td><div class="ansible-option-cell">
<div class="ansibleOptionAnchor" id="parameter-stop_time"></div><p class="ansible-option-title" id="ansible-collections-containers-podman-podman-container-module-parameter-stop-time"><strong>stop_time</strong></p>
<a class="ansibleOptionLink" href="#parameter-stop_time" title="Permalink to this option"></a><p class="ansible-option-type-line"><span class="ansible-option-type">string</span></p>
</div></td>
<td><div class="ansible-option-cell"><p>Seconds to wait before forcibly stopping the container. Use -1 for infinite wait. Applies to “stopped” status.</p>
</div></td>
</tr>
-<tr class="row-even"><td><div class="ansible-option-cell">
+<tr class="row-odd"><td><div class="ansible-option-cell">
<div class="ansibleOptionAnchor" id="parameter-stop_timeout"></div><p class="ansible-option-title" id="ansible-collections-containers-podman-podman-container-module-parameter-stop-timeout"><strong>stop_timeout</strong></p>
<a class="ansibleOptionLink" href="#parameter-stop_timeout" title="Permalink to this option"></a><p class="ansible-option-type-line"><span class="ansible-option-type">integer</span></p>
</div></td>
<td><div class="ansible-option-cell"><p>Timeout (in seconds) to stop a container. Default is 10.</p>
</div></td>
</tr>
-<tr class="row-odd"><td><div class="ansible-option-cell">
+<tr class="row-even"><td><div class="ansible-option-cell">
<div class="ansibleOptionAnchor" id="parameter-subgidname"></div><p class="ansible-option-title" id="ansible-collections-containers-podman-podman-container-module-parameter-subgidname"><strong>subgidname</strong></p>
<a class="ansibleOptionLink" href="#parameter-subgidname" title="Permalink to this option"></a><p class="ansible-option-type-line"><span class="ansible-option-type">string</span></p>
</div></td>
<td><div class="ansible-option-cell"><p>Run the container in a new user namespace using the map with ‘name’ in the /etc/subgid file.</p>
</div></td>
</tr>
-<tr class="row-even"><td><div class="ansible-option-cell">
+<tr class="row-odd"><td><div class="ansible-option-cell">
<div class="ansibleOptionAnchor" id="parameter-subuidname"></div><p class="ansible-option-title" id="ansible-collections-containers-podman-podman-container-module-parameter-subuidname"><strong>subuidname</strong></p>
<a class="ansibleOptionLink" href="#parameter-subuidname" title="Permalink to this option"></a><p class="ansible-option-type-line"><span class="ansible-option-type">string</span></p>
</div></td>
<td><div class="ansible-option-cell"><p>Run the container in a new user namespace using the map with ‘name’ in the /etc/subuid file.</p>
</div></td>
</tr>
-<tr class="row-odd"><td><div class="ansible-option-cell">
+<tr class="row-even"><td><div class="ansible-option-cell">
<div class="ansibleOptionAnchor" id="parameter-sysctl"></div><p class="ansible-option-title" id="ansible-collections-containers-podman-podman-container-module-parameter-sysctl"><strong>sysctl</strong></p>
<a class="ansibleOptionLink" href="#parameter-sysctl" title="Permalink to this option"></a><p class="ansible-option-type-line"><span class="ansible-option-type">dictionary</span></p>
</div></td>
<td><div class="ansible-option-cell"><p>Configure namespaced kernel parameters at runtime</p>
</div></td>
</tr>
-<tr class="row-even"><td><div class="ansible-option-cell">
+<tr class="row-odd"><td><div class="ansible-option-cell">
<div class="ansibleOptionAnchor" id="parameter-systemd"></div><p class="ansible-option-title" id="ansible-collections-containers-podman-podman-container-module-parameter-systemd"><strong>systemd</strong></p>
<a class="ansibleOptionLink" href="#parameter-systemd" title="Permalink to this option"></a><p class="ansible-option-type-line"><span class="ansible-option-type">string</span></p>
</div></td>
<td><div class="ansible-option-cell"><p>Run container in systemd mode. The default is true.</p>
</div></td>
</tr>
-<tr class="row-odd"><td><div class="ansible-option-cell">
+<tr class="row-even"><td><div class="ansible-option-cell">
<div class="ansibleOptionAnchor" id="parameter-timezone"></div><p class="ansible-option-title" id="ansible-collections-containers-podman-podman-container-module-parameter-timezone"><strong>timezone</strong></p>
<a class="ansibleOptionLink" href="#parameter-timezone" title="Permalink to this option"></a><p class="ansible-option-type-line"><span class="ansible-option-type">string</span></p>
</div></td>
<td><div class="ansible-option-cell"><p>Set timezone in container. This flag takes area-based timezones, GMT time, as well as local, which sets the timezone in the container to match the host machine. See /usr/share/zoneinfo/ for valid timezones. Remote connections use local containers.conf for defaults.</p>
</div></td>
</tr>
-<tr class="row-even"><td><div class="ansible-option-cell">
+<tr class="row-odd"><td><div class="ansible-option-cell">
<div class="ansibleOptionAnchor" id="parameter-tmpfs"></div><p class="ansible-option-title" id="ansible-collections-containers-podman-podman-container-module-parameter-tmpfs"><strong>tmpfs</strong></p>
<a class="ansibleOptionLink" href="#parameter-tmpfs" title="Permalink to this option"></a><p class="ansible-option-type-line"><span class="ansible-option-type">dictionary</span></p>
</div></td>
<td><div class="ansible-option-cell"><p>Create a tmpfs mount. For example tmpfs “/tmp” “rw,size=787448k,mode=1777”</p>
</div></td>
</tr>
-<tr class="row-odd"><td><div class="ansible-option-cell">
+<tr class="row-even"><td><div class="ansible-option-cell">
<div class="ansibleOptionAnchor" id="parameter-tty"></div><p class="ansible-option-title" id="ansible-collections-containers-podman-podman-container-module-parameter-tty"><strong>tty</strong></p>
<a class="ansibleOptionLink" href="#parameter-tty" title="Permalink to this option"></a><p class="ansible-option-type-line"><span class="ansible-option-type">boolean</span></p>
</div></td>
@@ -1215,14 +1238,14 @@ see <a class="reference internal" href="#ansible-collections-containers-podman-p
</ul>
</div></td>
</tr>
-<tr class="row-even"><td><div class="ansible-option-cell">
+<tr class="row-odd"><td><div class="ansible-option-cell">
<div class="ansibleOptionAnchor" id="parameter-uidmap"></div><p class="ansible-option-title" id="ansible-collections-containers-podman-podman-container-module-parameter-uidmap"><strong>uidmap</strong></p>
<a class="ansibleOptionLink" href="#parameter-uidmap" title="Permalink to this option"></a><p class="ansible-option-type-line"><span class="ansible-option-type">list</span> / <span class="ansible-option-elements">elements=string</span></p>
</div></td>
<td><div class="ansible-option-cell"><p>Run the container in a new user namespace using the supplied mapping.</p>
</div></td>
</tr>
-<tr class="row-odd"><td><div class="ansible-option-cell">
+<tr class="row-even"><td><div class="ansible-option-cell">
<div class="ansibleOptionAnchor" id="parameter-ulimit"></div>
<div class="ansibleOptionAnchor" id="parameter-ulimits"></div><p class="ansible-option-title" id="ansible-collections-containers-podman-podman-container-module-parameter-ulimits"><span id="ansible-collections-containers-podman-podman-container-module-parameter-ulimit"></span><strong>ulimit</strong></p>
<a class="ansibleOptionLink" href="#parameter-ulimit" title="Permalink to this option"></a><p class="ansible-option-type-line"><span class="ansible-option-aliases">aliases: ulimits</span></p>
@@ -1231,14 +1254,14 @@ see <a class="reference internal" href="#ansible-collections-containers-podman-p
<td><div class="ansible-option-cell"><p>Ulimit options</p>
</div></td>
</tr>
-<tr class="row-even"><td><div class="ansible-option-cell">
+<tr class="row-odd"><td><div class="ansible-option-cell">
<div class="ansibleOptionAnchor" id="parameter-user"></div><p class="ansible-option-title" id="ansible-collections-containers-podman-podman-container-module-parameter-user"><strong>user</strong></p>
<a class="ansibleOptionLink" href="#parameter-user" title="Permalink to this option"></a><p class="ansible-option-type-line"><span class="ansible-option-type">string</span></p>
</div></td>
<td><div class="ansible-option-cell"><p>Sets the username or UID used and optionally the groupname or GID for the specified command.</p>
</div></td>
</tr>
-<tr class="row-odd"><td><div class="ansible-option-cell">
+<tr class="row-even"><td><div class="ansible-option-cell">
<div class="ansibleOptionAnchor" id="parameter-userns"></div>
<div class="ansibleOptionAnchor" id="parameter-userns_mode"></div><p class="ansible-option-title" id="ansible-collections-containers-podman-podman-container-module-parameter-userns-mode"><span id="ansible-collections-containers-podman-podman-container-module-parameter-userns"></span><strong>userns</strong></p>
<a class="ansibleOptionLink" href="#parameter-userns" title="Permalink to this option"></a><p class="ansible-option-type-line"><span class="ansible-option-aliases">aliases: userns_mode</span></p>
@@ -1247,14 +1270,14 @@ see <a class="reference internal" href="#ansible-collections-containers-podman-p
<td><div class="ansible-option-cell"><p>Set the user namespace mode for the container. It defaults to the PODMAN_USERNS environment variable. An empty value means user namespaces are disabled.</p>
</div></td>
</tr>
-<tr class="row-even"><td><div class="ansible-option-cell">
+<tr class="row-odd"><td><div class="ansible-option-cell">
<div class="ansibleOptionAnchor" id="parameter-uts"></div><p class="ansible-option-title" id="ansible-collections-containers-podman-podman-container-module-parameter-uts"><strong>uts</strong></p>
<a class="ansibleOptionLink" href="#parameter-uts" title="Permalink to this option"></a><p class="ansible-option-type-line"><span class="ansible-option-type">string</span></p>
</div></td>
<td><div class="ansible-option-cell"><p>Set the UTS mode for the container</p>
</div></td>
</tr>
-<tr class="row-odd"><td><div class="ansible-option-cell">
+<tr class="row-even"><td><div class="ansible-option-cell">
<div class="ansibleOptionAnchor" id="parameter-volume"></div>
<div class="ansibleOptionAnchor" id="parameter-volumes"></div><p class="ansible-option-title" id="ansible-collections-containers-podman-podman-container-module-parameter-volumes"><span id="ansible-collections-containers-podman-podman-container-module-parameter-volume"></span><strong>volume</strong></p>
<a class="ansibleOptionLink" href="#parameter-volume" title="Permalink to this option"></a><p class="ansible-option-type-line"><span class="ansible-option-aliases">aliases: volumes</span></p>
@@ -1263,14 +1286,14 @@ see <a class="reference internal" href="#ansible-collections-containers-podman-p
<td><div class="ansible-option-cell"><p>Create a bind mount. If you specify, volume /HOST-DIR:/CONTAINER-DIR, podman bind mounts /HOST-DIR in the host to /CONTAINER-DIR in the podman container.</p>
</div></td>
</tr>
-<tr class="row-even"><td><div class="ansible-option-cell">
+<tr class="row-odd"><td><div class="ansible-option-cell">
<div class="ansibleOptionAnchor" id="parameter-volumes_from"></div><p class="ansible-option-title" id="ansible-collections-containers-podman-podman-container-module-parameter-volumes-from"><strong>volumes_from</strong></p>
<a class="ansibleOptionLink" href="#parameter-volumes_from" title="Permalink to this option"></a><p class="ansible-option-type-line"><span class="ansible-option-type">list</span> / <span class="ansible-option-elements">elements=string</span></p>
</div></td>
<td><div class="ansible-option-cell"><p>Mount volumes from the specified container(s).</p>
</div></td>
</tr>
-<tr class="row-odd"><td><div class="ansible-option-cell">
+<tr class="row-even"><td><div class="ansible-option-cell">
<div class="ansibleOptionAnchor" id="parameter-workdir"></div>
<div class="ansibleOptionAnchor" id="parameter-working_dir"></div><p class="ansible-option-title" id="ansible-collections-containers-podman-podman-container-module-parameter-working-dir"><span id="ansible-collections-containers-podman-podman-container-module-parameter-workdir"></span><strong>workdir</strong></p>
<a class="ansibleOptionLink" href="#parameter-workdir" title="Permalink to this option"></a><p class="ansible-option-type-line"><span class="ansible-option-aliases">aliases: working_dir</span></p>
@@ -1372,6 +1395,24 @@ see <a class="reference internal" href="#ansible-collections-containers-podman-p
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">renew</span>
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">--deploy-hook</span>
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="s">&quot;echo</span><span class="nv"> </span><span class="s">1</span><span class="nv"> </span><span class="s">&gt;</span><span class="nv"> </span><span class="s">/var/lib/letsencrypt/complete&quot;</span>
+
+<span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">Create a Quadlet file</span>
+<span class="w"> </span><span class="nt">containers.podman.podman_container</span><span class="p">:</span>
+<span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">quadlet-container</span>
+<span class="w"> </span><span class="nt">image</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">nginx</span>
+<span class="w"> </span><span class="nt">state</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">quadlet</span>
+<span class="w"> </span><span class="nt">quadlet_filename</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">custome-container</span>
+<span class="w"> </span><span class="nt">device</span><span class="p">:</span><span class="w"> </span><span class="s">&quot;/dev/sda:/dev/xvda:rwm&quot;</span>
+<span class="w"> </span><span class="nt">ports</span><span class="p">:</span>
+<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="s">&quot;8080:80&quot;</span>
+<span class="w"> </span><span class="nt">volumes</span><span class="p">:</span>
+<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="s">&quot;/var/www:/usr/share/nginx/html&quot;</span>
+<span class="w"> </span><span class="nt">quadlet_options</span><span class="p">:</span>
+<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="s">&quot;AutoUpdate=registry&quot;</span>
+<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="s">&quot;Pull=true&quot;</span>
+<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="p p-Indicator">|</span>
+<span class="w"> </span><span class="no">[Install]</span>
+<span class="w"> </span><span class="no">WantedBy=default.target</span>
</pre></div>
</div>
</section>
diff --git a/ansible_collections/containers/podman/docs/podman_containers_module.html b/ansible_collections/containers/podman/docs/podman_containers_module.html
index e84707d36..adc0dca87 100644
--- a/ansible_collections/containers/podman/docs/podman_containers_module.html
+++ b/ansible_collections/containers/podman/docs/podman_containers_module.html
@@ -37,7 +37,7 @@
<h1>containers.podman.podman_containers module – Manage podman containers in a batch<a class="headerlink" href="#containers-podman-podman-containers-module-manage-podman-containers-in-a-batch" title="Permalink to this heading">¶</a></h1>
<div class="admonition note">
<p class="admonition-title">Note</p>
-<p>This module is part of the <a class="reference external" href="https://galaxy.ansible.com/ui/repo/published/containers/podman/">containers.podman collection</a> (version 1.11.0).</p>
+<p>This module is part of the <a class="reference external" href="https://galaxy.ansible.com/ui/repo/published/containers/podman/">containers.podman collection</a> (version 1.13.0).</p>
<p>It is not included in <code class="docutils literal notranslate"><span class="pre">ansible-core</span></code>.
To check whether it is installed, run <code class="code docutils literal notranslate"><span class="pre">ansible-galaxy</span> <span class="pre">collection</span> <span class="pre">list</span></code>.</p>
<p>To install it, use: <code class="code docutils literal notranslate"><span class="pre">ansible-galaxy</span> <span class="pre">collection</span> <span class="pre">install</span> <span class="pre">containers.podman</span></code>.
diff --git a/ansible_collections/containers/podman/docs/podman_export_module.html b/ansible_collections/containers/podman/docs/podman_export_module.html
index 5a51a171c..b5e525aa4 100644
--- a/ansible_collections/containers/podman/docs/podman_export_module.html
+++ b/ansible_collections/containers/podman/docs/podman_export_module.html
@@ -37,7 +37,7 @@
<h1>containers.podman.podman_export module – Export a podman container<a class="headerlink" href="#containers-podman-podman-export-module-export-a-podman-container" title="Permalink to this heading">¶</a></h1>
<div class="admonition note">
<p class="admonition-title">Note</p>
-<p>This module is part of the <a class="reference external" href="https://galaxy.ansible.com/ui/repo/published/containers/podman/">containers.podman collection</a> (version 1.11.0).</p>
+<p>This module is part of the <a class="reference external" href="https://galaxy.ansible.com/ui/repo/published/containers/podman/">containers.podman collection</a> (version 1.13.0).</p>
<p>It is not included in <code class="docutils literal notranslate"><span class="pre">ansible-core</span></code>.
To check whether it is installed, run <code class="code docutils literal notranslate"><span class="pre">ansible-galaxy</span> <span class="pre">collection</span> <span class="pre">list</span></code>.</p>
<p>To install it, use: <code class="code docutils literal notranslate"><span class="pre">ansible-galaxy</span> <span class="pre">collection</span> <span class="pre">install</span> <span class="pre">containers.podman</span></code>.
diff --git a/ansible_collections/containers/podman/docs/podman_generate_systemd_module.html b/ansible_collections/containers/podman/docs/podman_generate_systemd_module.html
index 892160486..daec06e3f 100644
--- a/ansible_collections/containers/podman/docs/podman_generate_systemd_module.html
+++ b/ansible_collections/containers/podman/docs/podman_generate_systemd_module.html
@@ -37,7 +37,7 @@
<h1>containers.podman.podman_generate_systemd module – Generate systemd unit from a pod or a container<a class="headerlink" href="#containers-podman-podman-generate-systemd-module-generate-systemd-unit-from-a-pod-or-a-container" title="Permalink to this heading">¶</a></h1>
<div class="admonition note">
<p class="admonition-title">Note</p>
-<p>This module is part of the <a class="reference external" href="https://galaxy.ansible.com/ui/repo/published/containers/podman/">containers.podman collection</a> (version 1.11.0).</p>
+<p>This module is part of the <a class="reference external" href="https://galaxy.ansible.com/ui/repo/published/containers/podman/">containers.podman collection</a> (version 1.13.0).</p>
<p>It is not included in <code class="docutils literal notranslate"><span class="pre">ansible-core</span></code>.
To check whether it is installed, run <code class="code docutils literal notranslate"><span class="pre">ansible-galaxy</span> <span class="pre">collection</span> <span class="pre">list</span></code>.</p>
<p>To install it, use: <code class="code docutils literal notranslate"><span class="pre">ansible-galaxy</span> <span class="pre">collection</span> <span class="pre">install</span> <span class="pre">containers.podman</span></code>.
@@ -318,6 +318,7 @@ see <a class="reference internal" href="#ansible-collections-containers-podman-p
<span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">Postgres container must be started and enabled on systemd</span>
<span class="w"> </span><span class="nt">ansible.builtin.systemd</span><span class="p">:</span>
<span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">container-postgres_local</span>
+<span class="w"> </span><span class="nt">scope</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">user</span>
<span class="w"> </span><span class="nt">daemon_reload</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">true</span>
<span class="w"> </span><span class="nt">state</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">started</span>
<span class="w"> </span><span class="nt">enabled</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">true</span>
diff --git a/ansible_collections/containers/podman/docs/podman_image_info_module.html b/ansible_collections/containers/podman/docs/podman_image_info_module.html
index be1f33883..b64277209 100644
--- a/ansible_collections/containers/podman/docs/podman_image_info_module.html
+++ b/ansible_collections/containers/podman/docs/podman_image_info_module.html
@@ -37,7 +37,7 @@
<h1>containers.podman.podman_image_info module – Gather info about images using podman<a class="headerlink" href="#containers-podman-podman-image-info-module-gather-info-about-images-using-podman" title="Permalink to this heading">¶</a></h1>
<div class="admonition note">
<p class="admonition-title">Note</p>
-<p>This module is part of the <a class="reference external" href="https://galaxy.ansible.com/ui/repo/published/containers/podman/">containers.podman collection</a> (version 1.11.0).</p>
+<p>This module is part of the <a class="reference external" href="https://galaxy.ansible.com/ui/repo/published/containers/podman/">containers.podman collection</a> (version 1.13.0).</p>
<p>It is not included in <code class="docutils literal notranslate"><span class="pre">ansible-core</span></code>.
To check whether it is installed, run <code class="code docutils literal notranslate"><span class="pre">ansible-galaxy</span> <span class="pre">collection</span> <span class="pre">list</span></code>.</p>
<p>To install it, use: <code class="code docutils literal notranslate"><span class="pre">ansible-galaxy</span> <span class="pre">collection</span> <span class="pre">install</span> <span class="pre">containers.podman</span></code>.</p>
@@ -123,7 +123,7 @@ To check whether it is installed, run <code class="code docutils literal notrans
<tbody>
<tr class="row-even"><td><div class="ansible-option-cell">
<div class="ansibleOptionAnchor" id="return-images"></div><p class="ansible-option-title" id="ansible-collections-containers-podman-podman-image-info-module-return-images"><strong>images</strong></p>
-<a class="ansibleOptionLink" href="#return-images" title="Permalink to this return value"></a><p class="ansible-option-type-line"><span class="ansible-option-type">dictionary</span></p>
+<a class="ansibleOptionLink" href="#return-images" title="Permalink to this return value"></a><p class="ansible-option-type-line"><span class="ansible-option-type">list</span> / <span class="ansible-option-elements">elements=string</span></p>
</div></td>
<td><div class="ansible-option-cell"><p>info from all or specified images</p>
<p class="ansible-option-line"><strong class="ansible-option-returned-bold">Returned:</strong> always</p>
diff --git a/ansible_collections/containers/podman/docs/podman_image_module.html b/ansible_collections/containers/podman/docs/podman_image_module.html
index 74c1dac80..941b06dfa 100644
--- a/ansible_collections/containers/podman/docs/podman_image_module.html
+++ b/ansible_collections/containers/podman/docs/podman_image_module.html
@@ -37,7 +37,7 @@
<h1>containers.podman.podman_image module – Pull images for use by podman<a class="headerlink" href="#containers-podman-podman-image-module-pull-images-for-use-by-podman" title="Permalink to this heading">¶</a></h1>
<div class="admonition note">
<p class="admonition-title">Note</p>
-<p>This module is part of the <a class="reference external" href="https://galaxy.ansible.com/ui/repo/published/containers/podman/">containers.podman collection</a> (version 1.11.0).</p>
+<p>This module is part of the <a class="reference external" href="https://galaxy.ansible.com/ui/repo/published/containers/podman/">containers.podman collection</a> (version 1.13.0).</p>
<p>It is not included in <code class="docutils literal notranslate"><span class="pre">ansible-core</span></code>.
To check whether it is installed, run <code class="code docutils literal notranslate"><span class="pre">ansible-galaxy</span> <span class="pre">collection</span> <span class="pre">list</span></code>.</p>
<p>To install it, use: <code class="code docutils literal notranslate"><span class="pre">ansible-galaxy</span> <span class="pre">collection</span> <span class="pre">install</span> <span class="pre">containers.podman</span></code>.</p>
@@ -344,6 +344,27 @@ To check whether it is installed, run <code class="code docutils literal notrans
</div></td>
</tr>
<tr class="row-odd"><td><div class="ansible-option-cell">
+<div class="ansibleOptionAnchor" id="parameter-quadlet_dir"></div><p class="ansible-option-title" id="ansible-collections-containers-podman-podman-image-module-parameter-quadlet-dir"><strong>quadlet_dir</strong></p>
+<a class="ansibleOptionLink" href="#parameter-quadlet_dir" title="Permalink to this option"></a><p class="ansible-option-type-line"><span class="ansible-option-type">path</span></p>
+</div></td>
+<td><div class="ansible-option-cell"><p>Path to the directory to write quadlet file in. By default, it will be set as <code class="docutils literal notranslate"><span class="pre">/etc/containers/systemd/</span></code> for root user, <code class="docutils literal notranslate"><span class="pre">~/.config/containers/systemd/</span></code> for non-root users.</p>
+</div></td>
+</tr>
+<tr class="row-even"><td><div class="ansible-option-cell">
+<div class="ansibleOptionAnchor" id="parameter-quadlet_filename"></div><p class="ansible-option-title" id="ansible-collections-containers-podman-podman-image-module-parameter-quadlet-filename"><strong>quadlet_filename</strong></p>
+<a class="ansibleOptionLink" href="#parameter-quadlet_filename" title="Permalink to this option"></a><p class="ansible-option-type-line"><span class="ansible-option-type">string</span></p>
+</div></td>
+<td><div class="ansible-option-cell"><p>Name of quadlet file to write. By default it takes image name without prefixes and tags.</p>
+</div></td>
+</tr>
+<tr class="row-odd"><td><div class="ansible-option-cell">
+<div class="ansibleOptionAnchor" id="parameter-quadlet_options"></div><p class="ansible-option-title" id="ansible-collections-containers-podman-podman-image-module-parameter-quadlet-options"><strong>quadlet_options</strong></p>
+<a class="ansibleOptionLink" href="#parameter-quadlet_options" title="Permalink to this option"></a><p class="ansible-option-type-line"><span class="ansible-option-type">list</span> / <span class="ansible-option-elements">elements=string</span></p>
+</div></td>
+<td><div class="ansible-option-cell"><p>Options for the quadlet file. Provide missing in usual network args options as a list of lines to add.</p>
+</div></td>
+</tr>
+<tr class="row-even"><td><div class="ansible-option-cell">
<div class="ansibleOptionAnchor" id="parameter-state"></div><p class="ansible-option-title" id="ansible-collections-containers-podman-podman-image-module-parameter-state"><strong>state</strong></p>
<a class="ansibleOptionLink" href="#parameter-state" title="Permalink to this option"></a><p class="ansible-option-type-line"><span class="ansible-option-type">string</span></p>
</div></td>
@@ -353,10 +374,11 @@ To check whether it is installed, run <code class="code docutils literal notrans
<li><p><code class="ansible-option-default-bold docutils literal notranslate"><strong><span class="pre">&quot;present&quot;</span></strong></code> <span class="ansible-option-choices-default-mark">← (default)</span></p></li>
<li><p><code class="ansible-option-choices-entry docutils literal notranslate"><span class="pre">&quot;absent&quot;</span></code></p></li>
<li><p><code class="ansible-option-choices-entry docutils literal notranslate"><span class="pre">&quot;build&quot;</span></code></p></li>
+<li><p><code class="ansible-option-choices-entry docutils literal notranslate"><span class="pre">&quot;quadlet&quot;</span></code></p></li>
</ul>
</div></td>
</tr>
-<tr class="row-even"><td><div class="ansible-option-cell">
+<tr class="row-odd"><td><div class="ansible-option-cell">
<div class="ansibleOptionAnchor" id="parameter-tag"></div><p class="ansible-option-title" id="ansible-collections-containers-podman-podman-image-module-parameter-tag"><strong>tag</strong></p>
<a class="ansibleOptionLink" href="#parameter-tag" title="Permalink to this option"></a><p class="ansible-option-type-line"><span class="ansible-option-type">string</span></p>
</div></td>
@@ -364,14 +386,14 @@ To check whether it is installed, run <code class="code docutils literal notrans
<p class="ansible-option-line"><strong class="ansible-option-default-bold">Default:</strong> <code class="ansible-option-default docutils literal notranslate"><span class="pre">&quot;latest&quot;</span></code></p>
</div></td>
</tr>
-<tr class="row-odd"><td><div class="ansible-option-cell">
+<tr class="row-even"><td><div class="ansible-option-cell">
<div class="ansibleOptionAnchor" id="parameter-username"></div><p class="ansible-option-title" id="ansible-collections-containers-podman-podman-image-module-parameter-username"><strong>username</strong></p>
<a class="ansibleOptionLink" href="#parameter-username" title="Permalink to this option"></a><p class="ansible-option-type-line"><span class="ansible-option-type">string</span></p>
</div></td>
<td><div class="ansible-option-cell"><p>username to use when authenticating to remote registries.</p>
</div></td>
</tr>
-<tr class="row-even"><td><div class="ansible-option-cell">
+<tr class="row-odd"><td><div class="ansible-option-cell">
<div class="ansibleOptionAnchor" id="parameter-validate_certs"></div>
<div class="ansibleOptionAnchor" id="parameter-tlsverify"></div>
<div class="ansibleOptionAnchor" id="parameter-tls_verify"></div><p class="ansible-option-title" id="ansible-collections-containers-podman-podman-image-module-parameter-validate-certs"><span id="ansible-collections-containers-podman-podman-image-module-parameter-tlsverify"></span><span id="ansible-collections-containers-podman-podman-image-module-parameter-tls-verify"></span><strong>validate_certs</strong></p>
@@ -493,6 +515,18 @@ To check whether it is installed, run <code class="code docutils literal notrans
<span class="w"> </span><span class="nt">containers.podman.podman_image</span><span class="p">:</span>
<span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">nginx</span>
<span class="w"> </span><span class="nt">arch</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">amd64</span>
+
+<span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">Create a quadlet file for an image</span>
+<span class="w"> </span><span class="nt">containers.podman.podman_image</span><span class="p">:</span>
+<span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">docker.io/library/alpine:latest</span>
+<span class="w"> </span><span class="nt">state</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">quadlet</span>
+<span class="w"> </span><span class="nt">quadlet_dir</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">/etc/containers/systemd</span>
+<span class="w"> </span><span class="nt">quadlet_filename</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">alpine-latest</span>
+<span class="w"> </span><span class="nt">quadlet_options</span><span class="p">:</span>
+<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">Variant=arm/v7</span>
+<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="p p-Indicator">|</span>
+<span class="w"> </span><span class="no">[Install]</span>
+<span class="w"> </span><span class="no">WantedBy=default.target</span>
</pre></div>
</div>
</section>
diff --git a/ansible_collections/containers/podman/docs/podman_import_module.html b/ansible_collections/containers/podman/docs/podman_import_module.html
index e1dea2279..b7140a6b9 100644
--- a/ansible_collections/containers/podman/docs/podman_import_module.html
+++ b/ansible_collections/containers/podman/docs/podman_import_module.html
@@ -37,7 +37,7 @@
<h1>containers.podman.podman_import module – Import Podman container from a tar file.<a class="headerlink" href="#containers-podman-podman-import-module-import-podman-container-from-a-tar-file" title="Permalink to this heading">¶</a></h1>
<div class="admonition note">
<p class="admonition-title">Note</p>
-<p>This module is part of the <a class="reference external" href="https://galaxy.ansible.com/ui/repo/published/containers/podman/">containers.podman collection</a> (version 1.11.0).</p>
+<p>This module is part of the <a class="reference external" href="https://galaxy.ansible.com/ui/repo/published/containers/podman/">containers.podman collection</a> (version 1.13.0).</p>
<p>It is not included in <code class="docutils literal notranslate"><span class="pre">ansible-core</span></code>.
To check whether it is installed, run <code class="code docutils literal notranslate"><span class="pre">ansible-galaxy</span> <span class="pre">collection</span> <span class="pre">list</span></code>.</p>
<p>To install it, use: <code class="code docutils literal notranslate"><span class="pre">ansible-galaxy</span> <span class="pre">collection</span> <span class="pre">install</span> <span class="pre">containers.podman</span></code>.
diff --git a/ansible_collections/containers/podman/docs/podman_load_module.html b/ansible_collections/containers/podman/docs/podman_load_module.html
index a81014f03..256597ef5 100644
--- a/ansible_collections/containers/podman/docs/podman_load_module.html
+++ b/ansible_collections/containers/podman/docs/podman_load_module.html
@@ -37,7 +37,7 @@
<h1>containers.podman.podman_load module – Load image from a tar file.<a class="headerlink" href="#containers-podman-podman-load-module-load-image-from-a-tar-file" title="Permalink to this heading">¶</a></h1>
<div class="admonition note">
<p class="admonition-title">Note</p>
-<p>This module is part of the <a class="reference external" href="https://galaxy.ansible.com/ui/repo/published/containers/podman/">containers.podman collection</a> (version 1.11.0).</p>
+<p>This module is part of the <a class="reference external" href="https://galaxy.ansible.com/ui/repo/published/containers/podman/">containers.podman collection</a> (version 1.13.0).</p>
<p>It is not included in <code class="docutils literal notranslate"><span class="pre">ansible-core</span></code>.
To check whether it is installed, run <code class="code docutils literal notranslate"><span class="pre">ansible-galaxy</span> <span class="pre">collection</span> <span class="pre">list</span></code>.</p>
<p>To install it, use: <code class="code docutils literal notranslate"><span class="pre">ansible-galaxy</span> <span class="pre">collection</span> <span class="pre">install</span> <span class="pre">containers.podman</span></code>.
diff --git a/ansible_collections/containers/podman/docs/podman_login_info_module.html b/ansible_collections/containers/podman/docs/podman_login_info_module.html
index 7230f2de7..9b18049cd 100644
--- a/ansible_collections/containers/podman/docs/podman_login_info_module.html
+++ b/ansible_collections/containers/podman/docs/podman_login_info_module.html
@@ -37,7 +37,7 @@
<h1>containers.podman.podman_login_info module – Return the logged-in user if any for a given registry<a class="headerlink" href="#containers-podman-podman-login-info-module-return-the-logged-in-user-if-any-for-a-given-registry" title="Permalink to this heading">¶</a></h1>
<div class="admonition note">
<p class="admonition-title">Note</p>
-<p>This module is part of the <a class="reference external" href="https://galaxy.ansible.com/ui/repo/published/containers/podman/">containers.podman collection</a> (version 1.11.0).</p>
+<p>This module is part of the <a class="reference external" href="https://galaxy.ansible.com/ui/repo/published/containers/podman/">containers.podman collection</a> (version 1.13.0).</p>
<p>It is not included in <code class="docutils literal notranslate"><span class="pre">ansible-core</span></code>.
To check whether it is installed, run <code class="code docutils literal notranslate"><span class="pre">ansible-galaxy</span> <span class="pre">collection</span> <span class="pre">list</span></code>.</p>
<p>To install it, use: <code class="code docutils literal notranslate"><span class="pre">ansible-galaxy</span> <span class="pre">collection</span> <span class="pre">install</span> <span class="pre">containers.podman</span></code>.
diff --git a/ansible_collections/containers/podman/docs/podman_login_module.html b/ansible_collections/containers/podman/docs/podman_login_module.html
index 20a3e1475..61adafae2 100644
--- a/ansible_collections/containers/podman/docs/podman_login_module.html
+++ b/ansible_collections/containers/podman/docs/podman_login_module.html
@@ -37,7 +37,7 @@
<h1>containers.podman.podman_login module – Login to a container registry using podman<a class="headerlink" href="#containers-podman-podman-login-module-login-to-a-container-registry-using-podman" title="Permalink to this heading">¶</a></h1>
<div class="admonition note">
<p class="admonition-title">Note</p>
-<p>This module is part of the <a class="reference external" href="https://galaxy.ansible.com/ui/repo/published/containers/podman/">containers.podman collection</a> (version 1.11.0).</p>
+<p>This module is part of the <a class="reference external" href="https://galaxy.ansible.com/ui/repo/published/containers/podman/">containers.podman collection</a> (version 1.13.0).</p>
<p>It is not included in <code class="docutils literal notranslate"><span class="pre">ansible-core</span></code>.
To check whether it is installed, run <code class="code docutils literal notranslate"><span class="pre">ansible-galaxy</span> <span class="pre">collection</span> <span class="pre">list</span></code>.</p>
<p>To install it, use: <code class="code docutils literal notranslate"><span class="pre">ansible-galaxy</span> <span class="pre">collection</span> <span class="pre">install</span> <span class="pre">containers.podman</span></code>.
diff --git a/ansible_collections/containers/podman/docs/podman_logout_module.html b/ansible_collections/containers/podman/docs/podman_logout_module.html
index e52d3f016..9d0295c50 100644
--- a/ansible_collections/containers/podman/docs/podman_logout_module.html
+++ b/ansible_collections/containers/podman/docs/podman_logout_module.html
@@ -37,7 +37,7 @@
<h1>containers.podman.podman_logout module – Log out of a container registry using podman<a class="headerlink" href="#containers-podman-podman-logout-module-log-out-of-a-container-registry-using-podman" title="Permalink to this heading">¶</a></h1>
<div class="admonition note">
<p class="admonition-title">Note</p>
-<p>This module is part of the <a class="reference external" href="https://galaxy.ansible.com/ui/repo/published/containers/podman/">containers.podman collection</a> (version 1.11.0).</p>
+<p>This module is part of the <a class="reference external" href="https://galaxy.ansible.com/ui/repo/published/containers/podman/">containers.podman collection</a> (version 1.13.0).</p>
<p>It is not included in <code class="docutils literal notranslate"><span class="pre">ansible-core</span></code>.
To check whether it is installed, run <code class="code docutils literal notranslate"><span class="pre">ansible-galaxy</span> <span class="pre">collection</span> <span class="pre">list</span></code>.</p>
<p>To install it, use: <code class="code docutils literal notranslate"><span class="pre">ansible-galaxy</span> <span class="pre">collection</span> <span class="pre">install</span> <span class="pre">containers.podman</span></code>.
diff --git a/ansible_collections/containers/podman/docs/podman_network_info_module.html b/ansible_collections/containers/podman/docs/podman_network_info_module.html
index 488b52f62..cb8f98328 100644
--- a/ansible_collections/containers/podman/docs/podman_network_info_module.html
+++ b/ansible_collections/containers/podman/docs/podman_network_info_module.html
@@ -37,7 +37,7 @@
<h1>containers.podman.podman_network_info module – Gather info about podman networks<a class="headerlink" href="#containers-podman-podman-network-info-module-gather-info-about-podman-networks" title="Permalink to this heading">¶</a></h1>
<div class="admonition note">
<p class="admonition-title">Note</p>
-<p>This module is part of the <a class="reference external" href="https://galaxy.ansible.com/ui/repo/published/containers/podman/">containers.podman collection</a> (version 1.11.0).</p>
+<p>This module is part of the <a class="reference external" href="https://galaxy.ansible.com/ui/repo/published/containers/podman/">containers.podman collection</a> (version 1.13.0).</p>
<p>It is not included in <code class="docutils literal notranslate"><span class="pre">ansible-core</span></code>.
To check whether it is installed, run <code class="code docutils literal notranslate"><span class="pre">ansible-galaxy</span> <span class="pre">collection</span> <span class="pre">list</span></code>.</p>
<p>To install it, use: <code class="code docutils literal notranslate"><span class="pre">ansible-galaxy</span> <span class="pre">collection</span> <span class="pre">install</span> <span class="pre">containers.podman</span></code>.
diff --git a/ansible_collections/containers/podman/docs/podman_network_module.html b/ansible_collections/containers/podman/docs/podman_network_module.html
index c83643774..daaf3bc22 100644
--- a/ansible_collections/containers/podman/docs/podman_network_module.html
+++ b/ansible_collections/containers/podman/docs/podman_network_module.html
@@ -37,7 +37,7 @@
<h1>containers.podman.podman_network module – Manage podman networks<a class="headerlink" href="#containers-podman-podman-network-module-manage-podman-networks" title="Permalink to this heading">¶</a></h1>
<div class="admonition note">
<p class="admonition-title">Note</p>
-<p>This module is part of the <a class="reference external" href="https://galaxy.ansible.com/ui/repo/published/containers/podman/">containers.podman collection</a> (version 1.11.0).</p>
+<p>This module is part of the <a class="reference external" href="https://galaxy.ansible.com/ui/repo/published/containers/podman/">containers.podman collection</a> (version 1.13.0).</p>
<p>It is not included in <code class="docutils literal notranslate"><span class="pre">ansible-core</span></code>.
To check whether it is installed, run <code class="code docutils literal notranslate"><span class="pre">ansible-galaxy</span> <span class="pre">collection</span> <span class="pre">list</span></code>.</p>
<p>To install it, use: <code class="code docutils literal notranslate"><span class="pre">ansible-galaxy</span> <span class="pre">collection</span> <span class="pre">install</span> <span class="pre">containers.podman</span></code>.
@@ -242,6 +242,27 @@ see <a class="reference internal" href="#ansible-collections-containers-podman-p
</div></td>
</tr>
<tr class="row-odd"><td><div class="ansible-option-cell">
+<div class="ansibleOptionAnchor" id="parameter-quadlet_dir"></div><p class="ansible-option-title" id="ansible-collections-containers-podman-podman-network-module-parameter-quadlet-dir"><strong>quadlet_dir</strong></p>
+<a class="ansibleOptionLink" href="#parameter-quadlet_dir" title="Permalink to this option"></a><p class="ansible-option-type-line"><span class="ansible-option-type">path</span></p>
+</div></td>
+<td><div class="ansible-option-cell"><p>Path to the directory to write quadlet file in. By default, it will be set as <code class="docutils literal notranslate"><span class="pre">/etc/containers/systemd/</span></code> for root user, <code class="docutils literal notranslate"><span class="pre">~/.config/containers/systemd/</span></code> for non-root users.</p>
+</div></td>
+</tr>
+<tr class="row-even"><td><div class="ansible-option-cell">
+<div class="ansibleOptionAnchor" id="parameter-quadlet_filename"></div><p class="ansible-option-title" id="ansible-collections-containers-podman-podman-network-module-parameter-quadlet-filename"><strong>quadlet_filename</strong></p>
+<a class="ansibleOptionLink" href="#parameter-quadlet_filename" title="Permalink to this option"></a><p class="ansible-option-type-line"><span class="ansible-option-type">string</span></p>
+</div></td>
+<td><div class="ansible-option-cell"><p>Name of quadlet file to write. By default it takes <em>name</em> value.</p>
+</div></td>
+</tr>
+<tr class="row-odd"><td><div class="ansible-option-cell">
+<div class="ansibleOptionAnchor" id="parameter-quadlet_options"></div><p class="ansible-option-title" id="ansible-collections-containers-podman-podman-network-module-parameter-quadlet-options"><strong>quadlet_options</strong></p>
+<a class="ansibleOptionLink" href="#parameter-quadlet_options" title="Permalink to this option"></a><p class="ansible-option-type-line"><span class="ansible-option-type">list</span> / <span class="ansible-option-elements">elements=string</span></p>
+</div></td>
+<td><div class="ansible-option-cell"><p>Options for the quadlet file. Provide missing in usual network args options as a list of lines to add.</p>
+</div></td>
+</tr>
+<tr class="row-even"><td><div class="ansible-option-cell">
<div class="ansibleOptionAnchor" id="parameter-recreate"></div><p class="ansible-option-title" id="ansible-collections-containers-podman-podman-network-module-parameter-recreate"><strong>recreate</strong></p>
<a class="ansibleOptionLink" href="#parameter-recreate" title="Permalink to this option"></a><p class="ansible-option-type-line"><span class="ansible-option-type">boolean</span></p>
</div></td>
@@ -253,7 +274,7 @@ see <a class="reference internal" href="#ansible-collections-containers-podman-p
</ul>
</div></td>
</tr>
-<tr class="row-even"><td><div class="ansible-option-cell">
+<tr class="row-odd"><td><div class="ansible-option-cell">
<div class="ansibleOptionAnchor" id="parameter-state"></div><p class="ansible-option-title" id="ansible-collections-containers-podman-podman-network-module-parameter-state"><strong>state</strong></p>
<a class="ansibleOptionLink" href="#parameter-state" title="Permalink to this option"></a><p class="ansible-option-type-line"><span class="ansible-option-type">string</span></p>
</div></td>
@@ -262,10 +283,11 @@ see <a class="reference internal" href="#ansible-collections-containers-podman-p
<ul class="simple">
<li><p><code class="ansible-option-default-bold docutils literal notranslate"><strong><span class="pre">&quot;present&quot;</span></strong></code> <span class="ansible-option-choices-default-mark">← (default)</span></p></li>
<li><p><code class="ansible-option-choices-entry docutils literal notranslate"><span class="pre">&quot;absent&quot;</span></code></p></li>
+<li><p><code class="ansible-option-choices-entry docutils literal notranslate"><span class="pre">&quot;quadlet&quot;</span></code></p></li>
</ul>
</div></td>
</tr>
-<tr class="row-odd"><td><div class="ansible-option-cell">
+<tr class="row-even"><td><div class="ansible-option-cell">
<div class="ansibleOptionAnchor" id="parameter-subnet"></div><p class="ansible-option-title" id="ansible-collections-containers-podman-podman-network-module-parameter-subnet"><strong>subnet</strong></p>
<a class="ansibleOptionLink" href="#parameter-subnet" title="Permalink to this option"></a><p class="ansible-option-type-line"><span class="ansible-option-type">string</span></p>
</div></td>
@@ -290,6 +312,14 @@ see <a class="reference internal" href="#ansible-collections-containers-podman-p
<span class="w"> </span><span class="nt">subnet</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">192.168.22.0/24</span>
<span class="w"> </span><span class="nt">gateway</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">192.168.22.1</span>
<span class="w"> </span><span class="nt">become</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">true</span>
+
+<span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">Create Quadlet file for podman network</span>
+<span class="w"> </span><span class="nt">containers.podman.podman_network</span><span class="p">:</span>
+<span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">podman_network</span>
+<span class="w"> </span><span class="nt">state</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">quadlet</span>
+<span class="w"> </span><span class="nt">quadlet_options</span><span class="p">:</span>
+<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">IPv6=true</span>
+<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">Label=&quot;ipv6 network&quot;</span>
</pre></div>
</div>
</section>
diff --git a/ansible_collections/containers/podman/docs/podman_play_module.html b/ansible_collections/containers/podman/docs/podman_play_module.html
index 4c27c4841..30a3654c8 100644
--- a/ansible_collections/containers/podman/docs/podman_play_module.html
+++ b/ansible_collections/containers/podman/docs/podman_play_module.html
@@ -37,7 +37,7 @@
<h1>containers.podman.podman_play module – Play kubernetes YAML file using podman<a class="headerlink" href="#containers-podman-podman-play-module-play-kubernetes-yaml-file-using-podman" title="Permalink to this heading">¶</a></h1>
<div class="admonition note">
<p class="admonition-title">Note</p>
-<p>This module is part of the <a class="reference external" href="https://galaxy.ansible.com/ui/repo/published/containers/podman/">containers.podman collection</a> (version 1.11.0).</p>
+<p>This module is part of the <a class="reference external" href="https://galaxy.ansible.com/ui/repo/published/containers/podman/">containers.podman collection</a> (version 1.13.0).</p>
<p>It is not included in <code class="docutils literal notranslate"><span class="pre">ansible-core</span></code>.
To check whether it is installed, run <code class="code docutils literal notranslate"><span class="pre">ansible-galaxy</span> <span class="pre">collection</span> <span class="pre">list</span></code>.</p>
<p>To install it, use: <code class="code docutils literal notranslate"><span class="pre">ansible-galaxy</span> <span class="pre">collection</span> <span class="pre">install</span> <span class="pre">containers.podman</span></code>.
@@ -205,7 +205,7 @@ see <a class="reference internal" href="#ansible-collections-containers-podman-p
<div class="ansibleOptionAnchor" id="parameter-log_options/tag"></div><p class="ansible-option-title" id="ansible-collections-containers-podman-podman-play-module-parameter-log-options-tag"><span id="ansible-collections-containers-podman-podman-play-module-parameter-log-opt-tag"></span><strong>tag</strong></p>
<a class="ansibleOptionLink" href="#parameter-log_opt/tag" title="Permalink to this option"></a><p class="ansible-option-type-line"><span class="ansible-option-type">string</span></p>
</div></td>
-<td><div class="ansible-option-indent-desc"></div><div class="ansible-option-cell"><p>specify a custom log tag for the container. This option is currently supported only by the journald log driver in Podman.</p>
+<td><div class="ansible-option-indent-desc"></div><div class="ansible-option-cell"><p>Specify a custom log tag for the container. This option is currently supported only by the journald log driver in Podman.</p>
</div></td>
</tr>
<tr class="row-odd"><td><div class="ansible-option-cell">
@@ -223,6 +223,27 @@ see <a class="reference internal" href="#ansible-collections-containers-podman-p
</div></td>
</tr>
<tr class="row-odd"><td><div class="ansible-option-cell">
+<div class="ansibleOptionAnchor" id="parameter-quadlet_dir"></div><p class="ansible-option-title" id="ansible-collections-containers-podman-podman-play-module-parameter-quadlet-dir"><strong>quadlet_dir</strong></p>
+<a class="ansibleOptionLink" href="#parameter-quadlet_dir" title="Permalink to this option"></a><p class="ansible-option-type-line"><span class="ansible-option-type">path</span></p>
+</div></td>
+<td><div class="ansible-option-cell"><p>Path to the directory to write quadlet file in. By default, it will be set as <code class="docutils literal notranslate"><span class="pre">/etc/containers/systemd/</span></code> for root user, <code class="docutils literal notranslate"><span class="pre">~/.config/containers/systemd/</span></code> for non-root users.</p>
+</div></td>
+</tr>
+<tr class="row-even"><td><div class="ansible-option-cell">
+<div class="ansibleOptionAnchor" id="parameter-quadlet_filename"></div><p class="ansible-option-title" id="ansible-collections-containers-podman-podman-play-module-parameter-quadlet-filename"><strong>quadlet_filename</strong></p>
+<a class="ansibleOptionLink" href="#parameter-quadlet_filename" title="Permalink to this option"></a><p class="ansible-option-type-line"><span class="ansible-option-type">string</span></p>
+</div></td>
+<td><div class="ansible-option-cell"><p>Name of quadlet file to write. Must be specified if state is quadlet.</p>
+</div></td>
+</tr>
+<tr class="row-odd"><td><div class="ansible-option-cell">
+<div class="ansibleOptionAnchor" id="parameter-quadlet_options"></div><p class="ansible-option-title" id="ansible-collections-containers-podman-podman-play-module-parameter-quadlet-options"><strong>quadlet_options</strong></p>
+<a class="ansibleOptionLink" href="#parameter-quadlet_options" title="Permalink to this option"></a><p class="ansible-option-type-line"><span class="ansible-option-type">list</span> / <span class="ansible-option-elements">elements=string</span></p>
+</div></td>
+<td><div class="ansible-option-cell"><p>Options for the quadlet file. Provide missing in usual network args options as a list of lines to add.</p>
+</div></td>
+</tr>
+<tr class="row-even"><td><div class="ansible-option-cell">
<div class="ansibleOptionAnchor" id="parameter-quiet"></div><p class="ansible-option-title" id="ansible-collections-containers-podman-podman-play-module-parameter-quiet"><strong>quiet</strong></p>
<a class="ansibleOptionLink" href="#parameter-quiet" title="Permalink to this option"></a><p class="ansible-option-type-line"><span class="ansible-option-type">boolean</span></p>
</div></td>
@@ -234,7 +255,7 @@ see <a class="reference internal" href="#ansible-collections-containers-podman-p
</ul>
</div></td>
</tr>
-<tr class="row-even"><td><div class="ansible-option-cell">
+<tr class="row-odd"><td><div class="ansible-option-cell">
<div class="ansibleOptionAnchor" id="parameter-recreate"></div><p class="ansible-option-title" id="ansible-collections-containers-podman-podman-play-module-parameter-recreate"><strong>recreate</strong></p>
<a class="ansibleOptionLink" href="#parameter-recreate" title="Permalink to this option"></a><p class="ansible-option-type-line"><span class="ansible-option-type">boolean</span></p>
</div></td>
@@ -246,14 +267,14 @@ see <a class="reference internal" href="#ansible-collections-containers-podman-p
</ul>
</div></td>
</tr>
-<tr class="row-odd"><td><div class="ansible-option-cell">
+<tr class="row-even"><td><div class="ansible-option-cell">
<div class="ansibleOptionAnchor" id="parameter-seccomp_profile_root"></div><p class="ansible-option-title" id="ansible-collections-containers-podman-podman-play-module-parameter-seccomp-profile-root"><strong>seccomp_profile_root</strong></p>
<a class="ansibleOptionLink" href="#parameter-seccomp_profile_root" title="Permalink to this option"></a><p class="ansible-option-type-line"><span class="ansible-option-type">path</span></p>
</div></td>
<td><div class="ansible-option-cell"><p>Directory path for seccomp profiles (default is “/var/lib/kubelet/seccomp”). This option is not available with the remote Podman client</p>
</div></td>
</tr>
-<tr class="row-even"><td><div class="ansible-option-cell">
+<tr class="row-odd"><td><div class="ansible-option-cell">
<div class="ansibleOptionAnchor" id="parameter-state"></div><p class="ansible-option-title" id="ansible-collections-containers-podman-podman-play-module-parameter-state"><strong>state</strong></p>
<a class="ansibleOptionLink" href="#parameter-state" title="Permalink to this option"></a><p class="ansible-option-type-line"><span class="ansible-option-type">string</span> / <span class="ansible-option-required">required</span></p>
</div></td>
@@ -263,10 +284,11 @@ see <a class="reference internal" href="#ansible-collections-containers-podman-p
<li><p><code class="ansible-option-choices-entry docutils literal notranslate"><span class="pre">&quot;created&quot;</span></code></p></li>
<li><p><code class="ansible-option-choices-entry docutils literal notranslate"><span class="pre">&quot;started&quot;</span></code></p></li>
<li><p><code class="ansible-option-choices-entry docutils literal notranslate"><span class="pre">&quot;absent&quot;</span></code></p></li>
+<li><p><code class="ansible-option-choices-entry docutils literal notranslate"><span class="pre">&quot;quadlet&quot;</span></code></p></li>
</ul>
</div></td>
</tr>
-<tr class="row-odd"><td><div class="ansible-option-cell">
+<tr class="row-even"><td><div class="ansible-option-cell">
<div class="ansibleOptionAnchor" id="parameter-tls_verify"></div><p class="ansible-option-title" id="ansible-collections-containers-podman-podman-play-module-parameter-tls-verify"><strong>tls_verify</strong></p>
<a class="ansibleOptionLink" href="#parameter-tls_verify" title="Permalink to this option"></a><p class="ansible-option-type-line"><span class="ansible-option-type">boolean</span></p>
</div></td>
@@ -278,14 +300,14 @@ see <a class="reference internal" href="#ansible-collections-containers-podman-p
</ul>
</div></td>
</tr>
-<tr class="row-even"><td><div class="ansible-option-cell">
+<tr class="row-odd"><td><div class="ansible-option-cell">
<div class="ansibleOptionAnchor" id="parameter-username"></div><p class="ansible-option-title" id="ansible-collections-containers-podman-podman-play-module-parameter-username"><strong>username</strong></p>
<a class="ansibleOptionLink" href="#parameter-username" title="Permalink to this option"></a><p class="ansible-option-type-line"><span class="ansible-option-type">string</span></p>
</div></td>
<td><div class="ansible-option-cell"><p>The username and password to use to authenticate with the registry if required.</p>
</div></td>
</tr>
-<tr class="row-odd"><td><div class="ansible-option-cell">
+<tr class="row-even"><td><div class="ansible-option-cell">
<div class="ansibleOptionAnchor" id="parameter-userns"></div><p class="ansible-option-title" id="ansible-collections-containers-podman-podman-play-module-parameter-userns"><strong>userns</strong></p>
<a class="ansibleOptionLink" href="#parameter-userns" title="Permalink to this option"></a><p class="ansible-option-type-line"><span class="ansible-option-type">string</span></p>
</div></td>
@@ -314,6 +336,19 @@ see <a class="reference internal" href="#ansible-collections-containers-podman-p
<span class="w"> </span><span class="nt">log_opt</span><span class="p">:</span>
<span class="w"> </span><span class="nt">path</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">/tmp/my-container.log</span>
<span class="w"> </span><span class="nt">max_size</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">10mb</span>
+
+<span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">Create a Quadlet file</span>
+<span class="w"> </span><span class="nt">containers.podman.podman_play</span><span class="p">:</span>
+<span class="w"> </span><span class="nt">kube_file</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">~/kube.yaml</span>
+<span class="w"> </span><span class="nt">state</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">quadlet</span>
+<span class="w"> </span><span class="nt">annotations</span><span class="p">:</span>
+<span class="w"> </span><span class="nt">greeting</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">hello</span>
+<span class="w"> </span><span class="nt">greet_to</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">world</span>
+<span class="w"> </span><span class="nt">userns</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">host</span>
+<span class="w"> </span><span class="nt">quadlet_filename</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">kube-pod</span>
+<span class="w"> </span><span class="nt">quadlet_options</span><span class="p">:</span>
+<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="s">&quot;SetWorkingDirectory=yaml&quot;</span>
+<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="s">&quot;ExitCodePropagation=any&quot;</span>
</pre></div>
</div>
<section id="authors">
diff --git a/ansible_collections/containers/podman/docs/podman_pod_info_module.html b/ansible_collections/containers/podman/docs/podman_pod_info_module.html
index b708bdb1f..d93a4370c 100644
--- a/ansible_collections/containers/podman/docs/podman_pod_info_module.html
+++ b/ansible_collections/containers/podman/docs/podman_pod_info_module.html
@@ -37,7 +37,7 @@
<h1>containers.podman.podman_pod_info module – Gather info about podman pods<a class="headerlink" href="#containers-podman-podman-pod-info-module-gather-info-about-podman-pods" title="Permalink to this heading">¶</a></h1>
<div class="admonition note">
<p class="admonition-title">Note</p>
-<p>This module is part of the <a class="reference external" href="https://galaxy.ansible.com/ui/repo/published/containers/podman/">containers.podman collection</a> (version 1.11.0).</p>
+<p>This module is part of the <a class="reference external" href="https://galaxy.ansible.com/ui/repo/published/containers/podman/">containers.podman collection</a> (version 1.13.0).</p>
<p>It is not included in <code class="docutils literal notranslate"><span class="pre">ansible-core</span></code>.
To check whether it is installed, run <code class="code docutils literal notranslate"><span class="pre">ansible-galaxy</span> <span class="pre">collection</span> <span class="pre">list</span></code>.</p>
<p>To install it, use: <code class="code docutils literal notranslate"><span class="pre">ansible-galaxy</span> <span class="pre">collection</span> <span class="pre">install</span> <span class="pre">containers.podman</span></code>.
diff --git a/ansible_collections/containers/podman/docs/podman_pod_module.html b/ansible_collections/containers/podman/docs/podman_pod_module.html
index ff057319e..6cd068f33 100644
--- a/ansible_collections/containers/podman/docs/podman_pod_module.html
+++ b/ansible_collections/containers/podman/docs/podman_pod_module.html
@@ -37,7 +37,7 @@
<h1>containers.podman.podman_pod module – Manage Podman pods<a class="headerlink" href="#containers-podman-podman-pod-module-manage-podman-pods" title="Permalink to this heading">¶</a></h1>
<div class="admonition note">
<p class="admonition-title">Note</p>
-<p>This module is part of the <a class="reference external" href="https://galaxy.ansible.com/ui/repo/published/containers/podman/">containers.podman collection</a> (version 1.11.0).</p>
+<p>This module is part of the <a class="reference external" href="https://galaxy.ansible.com/ui/repo/published/containers/podman/">containers.podman collection</a> (version 1.13.0).</p>
<p>It is not included in <code class="docutils literal notranslate"><span class="pre">ansible-core</span></code>.
To check whether it is installed, run <code class="code docutils literal notranslate"><span class="pre">ansible-galaxy</span> <span class="pre">collection</span> <span class="pre">list</span></code>.</p>
<p>To install it, use: <code class="code docutils literal notranslate"><span class="pre">ansible-galaxy</span> <span class="pre">collection</span> <span class="pre">install</span> <span class="pre">containers.podman</span></code>.
@@ -486,6 +486,27 @@ see <a class="reference internal" href="#ansible-collections-containers-podman-p
</div></td>
</tr>
<tr class="row-odd"><td><div class="ansible-option-cell">
+<div class="ansibleOptionAnchor" id="parameter-quadlet_dir"></div><p class="ansible-option-title" id="ansible-collections-containers-podman-podman-pod-module-parameter-quadlet-dir"><strong>quadlet_dir</strong></p>
+<a class="ansibleOptionLink" href="#parameter-quadlet_dir" title="Permalink to this option"></a><p class="ansible-option-type-line"><span class="ansible-option-type">path</span></p>
+</div></td>
+<td><div class="ansible-option-cell"><p>Path to the directory to write quadlet file in. By default, it will be set as <code class="docutils literal notranslate"><span class="pre">/etc/containers/systemd/</span></code> for root user, <code class="docutils literal notranslate"><span class="pre">~/.config/containers/systemd/</span></code> for non-root users.</p>
+</div></td>
+</tr>
+<tr class="row-even"><td><div class="ansible-option-cell">
+<div class="ansibleOptionAnchor" id="parameter-quadlet_filename"></div><p class="ansible-option-title" id="ansible-collections-containers-podman-podman-pod-module-parameter-quadlet-filename"><strong>quadlet_filename</strong></p>
+<a class="ansibleOptionLink" href="#parameter-quadlet_filename" title="Permalink to this option"></a><p class="ansible-option-type-line"><span class="ansible-option-type">string</span></p>
+</div></td>
+<td><div class="ansible-option-cell"><p>Name of quadlet file to write. By default it takes <em>name</em> value.</p>
+</div></td>
+</tr>
+<tr class="row-odd"><td><div class="ansible-option-cell">
+<div class="ansibleOptionAnchor" id="parameter-quadlet_options"></div><p class="ansible-option-title" id="ansible-collections-containers-podman-podman-pod-module-parameter-quadlet-options"><strong>quadlet_options</strong></p>
+<a class="ansibleOptionLink" href="#parameter-quadlet_options" title="Permalink to this option"></a><p class="ansible-option-type-line"><span class="ansible-option-type">list</span> / <span class="ansible-option-elements">elements=string</span></p>
+</div></td>
+<td><div class="ansible-option-cell"><p>Options for the quadlet file. Provide missing in usual container args options as a list of lines to add.</p>
+</div></td>
+</tr>
+<tr class="row-even"><td><div class="ansible-option-cell">
<div class="ansibleOptionAnchor" id="parameter-recreate"></div><p class="ansible-option-title" id="ansible-collections-containers-podman-podman-pod-module-parameter-recreate"><strong>recreate</strong></p>
<a class="ansibleOptionLink" href="#parameter-recreate" title="Permalink to this option"></a><p class="ansible-option-type-line"><span class="ansible-option-type">boolean</span></p>
</div></td>
@@ -497,14 +518,14 @@ see <a class="reference internal" href="#ansible-collections-containers-podman-p
</ul>
</div></td>
</tr>
-<tr class="row-even"><td><div class="ansible-option-cell">
+<tr class="row-odd"><td><div class="ansible-option-cell">
<div class="ansibleOptionAnchor" id="parameter-share"></div><p class="ansible-option-title" id="ansible-collections-containers-podman-podman-pod-module-parameter-share"><strong>share</strong></p>
<a class="ansibleOptionLink" href="#parameter-share" title="Permalink to this option"></a><p class="ansible-option-type-line"><span class="ansible-option-type">string</span></p>
</div></td>
<td><div class="ansible-option-cell"><p>A comma delimited list of kernel namespaces to share. If none or “” is specified, no namespaces will be shared. The namespaces to choose from are ipc, net, pid, user, uts.</p>
</div></td>
</tr>
-<tr class="row-odd"><td><div class="ansible-option-cell">
+<tr class="row-even"><td><div class="ansible-option-cell">
<div class="ansibleOptionAnchor" id="parameter-state"></div><p class="ansible-option-title" id="ansible-collections-containers-podman-podman-pod-module-parameter-state"><strong>state</strong></p>
<a class="ansibleOptionLink" href="#parameter-state" title="Permalink to this option"></a><p class="ansible-option-type-line"><span class="ansible-option-type">string</span></p>
</div></td>
@@ -519,38 +540,39 @@ see <a class="reference internal" href="#ansible-collections-containers-podman-p
<li><p><code class="ansible-option-choices-entry docutils literal notranslate"><span class="pre">&quot;stopped&quot;</span></code></p></li>
<li><p><code class="ansible-option-choices-entry docutils literal notranslate"><span class="pre">&quot;paused&quot;</span></code></p></li>
<li><p><code class="ansible-option-choices-entry docutils literal notranslate"><span class="pre">&quot;unpaused&quot;</span></code></p></li>
+<li><p><code class="ansible-option-choices-entry docutils literal notranslate"><span class="pre">&quot;quadlet&quot;</span></code></p></li>
</ul>
</div></td>
</tr>
-<tr class="row-even"><td><div class="ansible-option-cell">
+<tr class="row-odd"><td><div class="ansible-option-cell">
<div class="ansibleOptionAnchor" id="parameter-subgidname"></div><p class="ansible-option-title" id="ansible-collections-containers-podman-podman-pod-module-parameter-subgidname"><strong>subgidname</strong></p>
<a class="ansibleOptionLink" href="#parameter-subgidname" title="Permalink to this option"></a><p class="ansible-option-type-line"><span class="ansible-option-type">string</span></p>
</div></td>
<td><div class="ansible-option-cell"><p>Name for GID map from the /etc/subgid file. Using this flag will run the container with user namespace enabled. This flag conflicts with `userns` and `gidmap`.</p>
</div></td>
</tr>
-<tr class="row-odd"><td><div class="ansible-option-cell">
+<tr class="row-even"><td><div class="ansible-option-cell">
<div class="ansibleOptionAnchor" id="parameter-subuidname"></div><p class="ansible-option-title" id="ansible-collections-containers-podman-podman-pod-module-parameter-subuidname"><strong>subuidname</strong></p>
<a class="ansibleOptionLink" href="#parameter-subuidname" title="Permalink to this option"></a><p class="ansible-option-type-line"><span class="ansible-option-type">string</span></p>
</div></td>
<td><div class="ansible-option-cell"><p>Name for UID map from the /etc/subuid file. Using this flag will run the container with user namespace enabled. This flag conflicts with `userns` and `uidmap`.</p>
</div></td>
</tr>
-<tr class="row-even"><td><div class="ansible-option-cell">
+<tr class="row-odd"><td><div class="ansible-option-cell">
<div class="ansibleOptionAnchor" id="parameter-uidmap"></div><p class="ansible-option-title" id="ansible-collections-containers-podman-podman-pod-module-parameter-uidmap"><strong>uidmap</strong></p>
<a class="ansibleOptionLink" href="#parameter-uidmap" title="Permalink to this option"></a><p class="ansible-option-type-line"><span class="ansible-option-type">list</span> / <span class="ansible-option-elements">elements=string</span></p>
</div></td>
<td><div class="ansible-option-cell"><p>Run the container in a new user namespace using the supplied mapping. This option conflicts with the `userns` and `subuidname` options. This option provides a way to map host UIDs to container UIDs. It can be passed several times to map different ranges.</p>
</div></td>
</tr>
-<tr class="row-odd"><td><div class="ansible-option-cell">
+<tr class="row-even"><td><div class="ansible-option-cell">
<div class="ansibleOptionAnchor" id="parameter-userns"></div><p class="ansible-option-title" id="ansible-collections-containers-podman-podman-pod-module-parameter-userns"><strong>userns</strong></p>
<a class="ansibleOptionLink" href="#parameter-userns" title="Permalink to this option"></a><p class="ansible-option-type-line"><span class="ansible-option-type">string</span></p>
</div></td>
<td><div class="ansible-option-cell"><p>Set the user namespace mode for all the containers in a pod. It defaults to the PODMAN_USERNS environment variable. An empty value (“”) means user namespaces are disabled.</p>
</div></td>
</tr>
-<tr class="row-even"><td><div class="ansible-option-cell">
+<tr class="row-odd"><td><div class="ansible-option-cell">
<div class="ansibleOptionAnchor" id="parameter-volume"></div>
<div class="ansibleOptionAnchor" id="parameter-volumes"></div><p class="ansible-option-title" id="ansible-collections-containers-podman-podman-pod-module-parameter-volumes"><span id="ansible-collections-containers-podman-podman-pod-module-parameter-volume"></span><strong>volume</strong></p>
<a class="ansibleOptionLink" href="#parameter-volume" title="Permalink to this option"></a><p class="ansible-option-type-line"><span class="ansible-option-aliases">aliases: volumes</span></p>
@@ -565,7 +587,7 @@ see <a class="reference internal" href="#ansible-collections-containers-podman-p
<section id="examples">
<h2><a class="toc-backref" href="#id4" role="doc-backlink">Examples</a><a class="headerlink" href="#examples" title="Permalink to this heading">¶</a></h2>
<div class="highlight-yaml+jinja notranslate"><div class="highlight"><pre><span></span><span class="c1"># What modules does for example</span>
-<span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">podman_pod</span><span class="p">:</span>
+<span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">containers.podman.podman_pod</span><span class="p">:</span>
<span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">pod1</span>
<span class="w"> </span><span class="nt">state</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">started</span>
<span class="w"> </span><span class="nt">ports</span><span class="p">:</span>
@@ -577,6 +599,16 @@ see <a class="reference internal" href="#ansible-collections-containers-podman-p
<span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">pod2</span>
<span class="w"> </span><span class="nt">state</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">started</span>
<span class="w"> </span><span class="nt">publish</span><span class="p">:</span><span class="w"> </span><span class="s">&quot;127.0.0.1::80&quot;</span>
+
+<span class="c1"># Create a Quadlet file for a pod</span>
+<span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">containers.podman.podman_pod</span><span class="p">:</span>
+<span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">qpod</span>
+<span class="w"> </span><span class="nt">state</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">quadlet</span>
+<span class="w"> </span><span class="nt">ports</span><span class="p">:</span>
+<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="s">&quot;4444:5555&quot;</span>
+<span class="w"> </span><span class="nt">volume</span><span class="p">:</span>
+<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">/var/run/docker.sock:/var/run/docker.sock</span>
+<span class="w"> </span><span class="nt">quadlet_dir</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">/custom/dir</span>
</pre></div>
</div>
</section>
diff --git a/ansible_collections/containers/podman/docs/podman_prune_module.html b/ansible_collections/containers/podman/docs/podman_prune_module.html
index a596a9c9d..5340e199c 100644
--- a/ansible_collections/containers/podman/docs/podman_prune_module.html
+++ b/ansible_collections/containers/podman/docs/podman_prune_module.html
@@ -37,7 +37,7 @@
<h1>containers.podman.podman_prune module – Allows to prune various podman objects<a class="headerlink" href="#containers-podman-podman-prune-module-allows-to-prune-various-podman-objects" title="Permalink to this heading">¶</a></h1>
<div class="admonition note">
<p class="admonition-title">Note</p>
-<p>This module is part of the <a class="reference external" href="https://galaxy.ansible.com/ui/repo/published/containers/podman/">containers.podman collection</a> (version 1.11.0).</p>
+<p>This module is part of the <a class="reference external" href="https://galaxy.ansible.com/ui/repo/published/containers/podman/">containers.podman collection</a> (version 1.13.0).</p>
<p>It is not included in <code class="docutils literal notranslate"><span class="pre">ansible-core</span></code>.
To check whether it is installed, run <code class="code docutils literal notranslate"><span class="pre">ansible-galaxy</span> <span class="pre">collection</span> <span class="pre">list</span></code>.</p>
<p>To install it, use: <code class="code docutils literal notranslate"><span class="pre">ansible-galaxy</span> <span class="pre">collection</span> <span class="pre">install</span> <span class="pre">containers.podman</span></code>.
diff --git a/ansible_collections/containers/podman/docs/podman_runlabel_module.html b/ansible_collections/containers/podman/docs/podman_runlabel_module.html
index 133d14adf..9fa123e9d 100644
--- a/ansible_collections/containers/podman/docs/podman_runlabel_module.html
+++ b/ansible_collections/containers/podman/docs/podman_runlabel_module.html
@@ -37,7 +37,7 @@
<h1>containers.podman.podman_runlabel module – Run given label from given image<a class="headerlink" href="#containers-podman-podman-runlabel-module-run-given-label-from-given-image" title="Permalink to this heading">¶</a></h1>
<div class="admonition note">
<p class="admonition-title">Note</p>
-<p>This module is part of the <a class="reference external" href="https://galaxy.ansible.com/ui/repo/published/containers/podman/">containers.podman collection</a> (version 1.11.0).</p>
+<p>This module is part of the <a class="reference external" href="https://galaxy.ansible.com/ui/repo/published/containers/podman/">containers.podman collection</a> (version 1.13.0).</p>
<p>It is not included in <code class="docutils literal notranslate"><span class="pre">ansible-core</span></code>.
To check whether it is installed, run <code class="code docutils literal notranslate"><span class="pre">ansible-galaxy</span> <span class="pre">collection</span> <span class="pre">list</span></code>.</p>
<p>To install it, use: <code class="code docutils literal notranslate"><span class="pre">ansible-galaxy</span> <span class="pre">collection</span> <span class="pre">install</span> <span class="pre">containers.podman</span></code>.
diff --git a/ansible_collections/containers/podman/docs/podman_save_module.html b/ansible_collections/containers/podman/docs/podman_save_module.html
index 7a58a96b0..ea7fe01b5 100644
--- a/ansible_collections/containers/podman/docs/podman_save_module.html
+++ b/ansible_collections/containers/podman/docs/podman_save_module.html
@@ -37,7 +37,7 @@
<h1>containers.podman.podman_save module – Saves podman image to tar file<a class="headerlink" href="#containers-podman-podman-save-module-saves-podman-image-to-tar-file" title="Permalink to this heading">¶</a></h1>
<div class="admonition note">
<p class="admonition-title">Note</p>
-<p>This module is part of the <a class="reference external" href="https://galaxy.ansible.com/ui/repo/published/containers/podman/">containers.podman collection</a> (version 1.11.0).</p>
+<p>This module is part of the <a class="reference external" href="https://galaxy.ansible.com/ui/repo/published/containers/podman/">containers.podman collection</a> (version 1.13.0).</p>
<p>It is not included in <code class="docutils literal notranslate"><span class="pre">ansible-core</span></code>.
To check whether it is installed, run <code class="code docutils literal notranslate"><span class="pre">ansible-galaxy</span> <span class="pre">collection</span> <span class="pre">list</span></code>.</p>
<p>To install it, use: <code class="code docutils literal notranslate"><span class="pre">ansible-galaxy</span> <span class="pre">collection</span> <span class="pre">install</span> <span class="pre">containers.podman</span></code>.
diff --git a/ansible_collections/containers/podman/docs/podman_secret_info_module.html b/ansible_collections/containers/podman/docs/podman_secret_info_module.html
index acab00e36..7c8f69c54 100644
--- a/ansible_collections/containers/podman/docs/podman_secret_info_module.html
+++ b/ansible_collections/containers/podman/docs/podman_secret_info_module.html
@@ -37,7 +37,7 @@
<h1>containers.podman.podman_secret_info module – Gather info about podman secrets<a class="headerlink" href="#containers-podman-podman-secret-info-module-gather-info-about-podman-secrets" title="Permalink to this heading">¶</a></h1>
<div class="admonition note">
<p class="admonition-title">Note</p>
-<p>This module is part of the <a class="reference external" href="https://galaxy.ansible.com/ui/repo/published/containers/podman/">containers.podman collection</a> (version 1.11.0).</p>
+<p>This module is part of the <a class="reference external" href="https://galaxy.ansible.com/ui/repo/published/containers/podman/">containers.podman collection</a> (version 1.13.0).</p>
<p>It is not included in <code class="docutils literal notranslate"><span class="pre">ansible-core</span></code>.
To check whether it is installed, run <code class="code docutils literal notranslate"><span class="pre">ansible-galaxy</span> <span class="pre">collection</span> <span class="pre">list</span></code>.</p>
<p>To install it, use: <code class="code docutils literal notranslate"><span class="pre">ansible-galaxy</span> <span class="pre">collection</span> <span class="pre">install</span> <span class="pre">containers.podman</span></code>.
diff --git a/ansible_collections/containers/podman/docs/podman_secret_module.html b/ansible_collections/containers/podman/docs/podman_secret_module.html
index ace978f70..11b33f02c 100644
--- a/ansible_collections/containers/podman/docs/podman_secret_module.html
+++ b/ansible_collections/containers/podman/docs/podman_secret_module.html
@@ -37,7 +37,7 @@
<h1>containers.podman.podman_secret module – Manage podman secrets<a class="headerlink" href="#containers-podman-podman-secret-module-manage-podman-secrets" title="Permalink to this heading">¶</a></h1>
<div class="admonition note">
<p class="admonition-title">Note</p>
-<p>This module is part of the <a class="reference external" href="https://galaxy.ansible.com/ui/repo/published/containers/podman/">containers.podman collection</a> (version 1.11.0).</p>
+<p>This module is part of the <a class="reference external" href="https://galaxy.ansible.com/ui/repo/published/containers/podman/">containers.podman collection</a> (version 1.13.0).</p>
<p>It is not included in <code class="docutils literal notranslate"><span class="pre">ansible-core</span></code>.
To check whether it is installed, run <code class="code docutils literal notranslate"><span class="pre">ansible-galaxy</span> <span class="pre">collection</span> <span class="pre">list</span></code>.</p>
<p>To install it, use: <code class="code docutils literal notranslate"><span class="pre">ansible-galaxy</span> <span class="pre">collection</span> <span class="pre">install</span> <span class="pre">containers.podman</span></code>.
diff --git a/ansible_collections/containers/podman/docs/podman_tag_module.html b/ansible_collections/containers/podman/docs/podman_tag_module.html
index d7a369d5c..17687a89a 100644
--- a/ansible_collections/containers/podman/docs/podman_tag_module.html
+++ b/ansible_collections/containers/podman/docs/podman_tag_module.html
@@ -37,7 +37,7 @@
<h1>containers.podman.podman_tag module – Add an additional name to a local image<a class="headerlink" href="#containers-podman-podman-tag-module-add-an-additional-name-to-a-local-image" title="Permalink to this heading">¶</a></h1>
<div class="admonition note">
<p class="admonition-title">Note</p>
-<p>This module is part of the <a class="reference external" href="https://galaxy.ansible.com/ui/repo/published/containers/podman/">containers.podman collection</a> (version 1.11.0).</p>
+<p>This module is part of the <a class="reference external" href="https://galaxy.ansible.com/ui/repo/published/containers/podman/">containers.podman collection</a> (version 1.13.0).</p>
<p>It is not included in <code class="docutils literal notranslate"><span class="pre">ansible-core</span></code>.
To check whether it is installed, run <code class="code docutils literal notranslate"><span class="pre">ansible-galaxy</span> <span class="pre">collection</span> <span class="pre">list</span></code>.</p>
<p>To install it, use: <code class="code docutils literal notranslate"><span class="pre">ansible-galaxy</span> <span class="pre">collection</span> <span class="pre">install</span> <span class="pre">containers.podman</span></code>.
diff --git a/ansible_collections/containers/podman/docs/podman_unshare_become.html b/ansible_collections/containers/podman/docs/podman_unshare_become.html
index 0a149528d..ae5b9003b 100644
--- a/ansible_collections/containers/podman/docs/podman_unshare_become.html
+++ b/ansible_collections/containers/podman/docs/podman_unshare_become.html
@@ -37,7 +37,7 @@
<h1>containers.podman.podman_unshare become – Run tasks using podman unshare<a class="headerlink" href="#containers-podman-podman-unshare-become-run-tasks-using-podman-unshare" title="Permalink to this heading">¶</a></h1>
<div class="admonition note">
<p class="admonition-title">Note</p>
-<p>This become plugin is part of the <a class="reference external" href="https://galaxy.ansible.com/ui/repo/published/containers/podman/">containers.podman collection</a> (version 1.11.0).</p>
+<p>This become plugin is part of the <a class="reference external" href="https://galaxy.ansible.com/ui/repo/published/containers/podman/">containers.podman collection</a> (version 1.13.0).</p>
<p>It is not included in <code class="docutils literal notranslate"><span class="pre">ansible-core</span></code>.
To check whether it is installed, run <code class="code docutils literal notranslate"><span class="pre">ansible-galaxy</span> <span class="pre">collection</span> <span class="pre">list</span></code>.</p>
<p>To install it, use: <code class="code docutils literal notranslate"><span class="pre">ansible-galaxy</span> <span class="pre">collection</span> <span class="pre">install</span> <span class="pre">containers.podman</span></code>.</p>
diff --git a/ansible_collections/containers/podman/docs/podman_volume_info_module.html b/ansible_collections/containers/podman/docs/podman_volume_info_module.html
index 94481a108..35af76fc6 100644
--- a/ansible_collections/containers/podman/docs/podman_volume_info_module.html
+++ b/ansible_collections/containers/podman/docs/podman_volume_info_module.html
@@ -37,7 +37,7 @@
<h1>containers.podman.podman_volume_info module – Gather info about podman volumes<a class="headerlink" href="#containers-podman-podman-volume-info-module-gather-info-about-podman-volumes" title="Permalink to this heading">¶</a></h1>
<div class="admonition note">
<p class="admonition-title">Note</p>
-<p>This module is part of the <a class="reference external" href="https://galaxy.ansible.com/ui/repo/published/containers/podman/">containers.podman collection</a> (version 1.11.0).</p>
+<p>This module is part of the <a class="reference external" href="https://galaxy.ansible.com/ui/repo/published/containers/podman/">containers.podman collection</a> (version 1.13.0).</p>
<p>It is not included in <code class="docutils literal notranslate"><span class="pre">ansible-core</span></code>.
To check whether it is installed, run <code class="code docutils literal notranslate"><span class="pre">ansible-galaxy</span> <span class="pre">collection</span> <span class="pre">list</span></code>.</p>
<p>To install it, use: <code class="code docutils literal notranslate"><span class="pre">ansible-galaxy</span> <span class="pre">collection</span> <span class="pre">install</span> <span class="pre">containers.podman</span></code>.
diff --git a/ansible_collections/containers/podman/docs/podman_volume_module.html b/ansible_collections/containers/podman/docs/podman_volume_module.html
index d982f9e1b..11f57bf97 100644
--- a/ansible_collections/containers/podman/docs/podman_volume_module.html
+++ b/ansible_collections/containers/podman/docs/podman_volume_module.html
@@ -37,7 +37,7 @@
<h1>containers.podman.podman_volume module – Manage Podman volumes<a class="headerlink" href="#containers-podman-podman-volume-module-manage-podman-volumes" title="Permalink to this heading">¶</a></h1>
<div class="admonition note">
<p class="admonition-title">Note</p>
-<p>This module is part of the <a class="reference external" href="https://galaxy.ansible.com/ui/repo/published/containers/podman/">containers.podman collection</a> (version 1.11.0).</p>
+<p>This module is part of the <a class="reference external" href="https://galaxy.ansible.com/ui/repo/published/containers/podman/">containers.podman collection</a> (version 1.13.0).</p>
<p>It is not included in <code class="docutils literal notranslate"><span class="pre">ansible-core</span></code>.
To check whether it is installed, run <code class="code docutils literal notranslate"><span class="pre">ansible-galaxy</span> <span class="pre">collection</span> <span class="pre">list</span></code>.</p>
<p>To install it, use: <code class="code docutils literal notranslate"><span class="pre">ansible-galaxy</span> <span class="pre">collection</span> <span class="pre">install</span> <span class="pre">containers.podman</span></code>.
@@ -126,6 +126,27 @@ see <a class="reference internal" href="#ansible-collections-containers-podman-p
</div></td>
</tr>
<tr class="row-even"><td><div class="ansible-option-cell">
+<div class="ansibleOptionAnchor" id="parameter-quadlet_dir"></div><p class="ansible-option-title" id="ansible-collections-containers-podman-podman-volume-module-parameter-quadlet-dir"><strong>quadlet_dir</strong></p>
+<a class="ansibleOptionLink" href="#parameter-quadlet_dir" title="Permalink to this option"></a><p class="ansible-option-type-line"><span class="ansible-option-type">path</span></p>
+</div></td>
+<td><div class="ansible-option-cell"><p>Path to the directory to write quadlet file in. By default, it will be set as <code class="docutils literal notranslate"><span class="pre">/etc/containers/systemd/</span></code> for root user, <code class="docutils literal notranslate"><span class="pre">~/.config/containers/systemd/</span></code> for non-root users.</p>
+</div></td>
+</tr>
+<tr class="row-odd"><td><div class="ansible-option-cell">
+<div class="ansibleOptionAnchor" id="parameter-quadlet_filename"></div><p class="ansible-option-title" id="ansible-collections-containers-podman-podman-volume-module-parameter-quadlet-filename"><strong>quadlet_filename</strong></p>
+<a class="ansibleOptionLink" href="#parameter-quadlet_filename" title="Permalink to this option"></a><p class="ansible-option-type-line"><span class="ansible-option-type">string</span></p>
+</div></td>
+<td><div class="ansible-option-cell"><p>Name of quadlet file to write. By default it takes <em>name</em> value.</p>
+</div></td>
+</tr>
+<tr class="row-even"><td><div class="ansible-option-cell">
+<div class="ansibleOptionAnchor" id="parameter-quadlet_options"></div><p class="ansible-option-title" id="ansible-collections-containers-podman-podman-volume-module-parameter-quadlet-options"><strong>quadlet_options</strong></p>
+<a class="ansibleOptionLink" href="#parameter-quadlet_options" title="Permalink to this option"></a><p class="ansible-option-type-line"><span class="ansible-option-type">list</span> / <span class="ansible-option-elements">elements=string</span></p>
+</div></td>
+<td><div class="ansible-option-cell"><p>Options for the quadlet file. Provide missing in usual network args options as a list of lines to add.</p>
+</div></td>
+</tr>
+<tr class="row-odd"><td><div class="ansible-option-cell">
<div class="ansibleOptionAnchor" id="parameter-recreate"></div><p class="ansible-option-title" id="ansible-collections-containers-podman-podman-volume-module-parameter-recreate"><strong>recreate</strong></p>
<a class="ansibleOptionLink" href="#parameter-recreate" title="Permalink to this option"></a><p class="ansible-option-type-line"><span class="ansible-option-type">boolean</span></p>
</div></td>
@@ -137,7 +158,7 @@ see <a class="reference internal" href="#ansible-collections-containers-podman-p
</ul>
</div></td>
</tr>
-<tr class="row-odd"><td><div class="ansible-option-cell">
+<tr class="row-even"><td><div class="ansible-option-cell">
<div class="ansibleOptionAnchor" id="parameter-state"></div><p class="ansible-option-title" id="ansible-collections-containers-podman-podman-volume-module-parameter-state"><strong>state</strong></p>
<a class="ansibleOptionLink" href="#parameter-state" title="Permalink to this option"></a><p class="ansible-option-type-line"><span class="ansible-option-type">string</span></p>
</div></td>
@@ -146,6 +167,7 @@ see <a class="reference internal" href="#ansible-collections-containers-podman-p
<ul class="simple">
<li><p><code class="ansible-option-default-bold docutils literal notranslate"><strong><span class="pre">&quot;present&quot;</span></strong></code> <span class="ansible-option-choices-default-mark">← (default)</span></p></li>
<li><p><code class="ansible-option-choices-entry docutils literal notranslate"><span class="pre">&quot;absent&quot;</span></code></p></li>
+<li><p><code class="ansible-option-choices-entry docutils literal notranslate"><span class="pre">&quot;quadlet&quot;</span></code></p></li>
</ul>
</div></td>
</tr>
@@ -155,7 +177,8 @@ see <a class="reference internal" href="#ansible-collections-containers-podman-p
<section id="examples">
<h2><a class="toc-backref" href="#id4" role="doc-backlink">Examples</a><a class="headerlink" href="#examples" title="Permalink to this heading">¶</a></h2>
<div class="highlight-yaml+jinja notranslate"><div class="highlight"><pre><span></span><span class="c1"># What modules does for example</span>
-<span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">podman_volume</span><span class="p">:</span>
+<span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">Create a volume</span>
+<span class="w"> </span><span class="nt">containers.podman.podman_volume</span><span class="p">:</span>
<span class="w"> </span><span class="nt">state</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">present</span>
<span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">volume1</span>
<span class="w"> </span><span class="nt">label</span><span class="p">:</span>
@@ -164,6 +187,16 @@ see <a class="reference internal" href="#ansible-collections-containers-podman-p
<span class="w"> </span><span class="nt">options</span><span class="p">:</span>
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="s">&quot;device=/dev/loop1&quot;</span>
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="s">&quot;type=ext4&quot;</span>
+
+<span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">Create a Quadlet file for a volume</span>
+<span class="w"> </span><span class="nt">containers.podman.podman_volume</span><span class="p">:</span>
+<span class="w"> </span><span class="nt">state</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">quadlet</span>
+<span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">quadlet_volume</span>
+<span class="w"> </span><span class="nt">quadlet_filename</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">custom-name</span>
+<span class="w"> </span><span class="nt">quadlet_options</span><span class="p">:</span>
+<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">Group=192</span>
+<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">Copy=true</span>
+<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">Image=quay.io/centos/centos:latest</span>
</pre></div>
</div>
</section>
diff --git a/ansible_collections/containers/podman/plugins/module_utils/podman/podman_container_lib.py b/ansible_collections/containers/podman/plugins/module_utils/podman/podman_container_lib.py
index ff4c18629..bf42ffdee 100644
--- a/ansible_collections/containers/podman/plugins/module_utils/podman/podman_container_lib.py
+++ b/ansible_collections/containers/podman/plugins/module_utils/podman/podman_container_lib.py
@@ -10,6 +10,9 @@ from ansible_collections.containers.podman.plugins.module_utils.podman.common im
from ansible_collections.containers.podman.plugins.module_utils.podman.common import delete_systemd
from ansible_collections.containers.podman.plugins.module_utils.podman.common import normalize_signal
from ansible_collections.containers.podman.plugins.module_utils.podman.common import ARGUMENTS_OPTS_DICT
+from ansible_collections.containers.podman.plugins.module_utils.podman.quadlet import create_quadlet_state
+from ansible_collections.containers.podman.plugins.module_utils.podman.quadlet import ContainerQuadlet
+
__metaclass__ = type
@@ -17,7 +20,7 @@ ARGUMENTS_SPEC_CONTAINER = dict(
name=dict(required=True, type='str'),
executable=dict(default='podman', type='str'),
state=dict(type='str', default='started', choices=[
- 'absent', 'present', 'stopped', 'started', 'created']),
+ 'absent', 'present', 'stopped', 'started', 'created', 'quadlet']),
image=dict(type='str'),
annotation=dict(type='dict'),
attach=dict(type='list', elements='str', choices=['stdout', 'stderr', 'stdin']),
@@ -116,6 +119,9 @@ ARGUMENTS_SPEC_CONTAINER = dict(
publish=dict(type='list', elements='str', aliases=[
'ports', 'published', 'published_ports']),
publish_all=dict(type='bool'),
+ quadlet_dir=dict(type='path'),
+ quadlet_filename=dict(type='str'),
+ quadlet_options=dict(type='list', elements='str'),
read_only=dict(type='bool'),
read_only_tmpfs=dict(type='bool'),
recreate=dict(type='bool', default=False),
@@ -743,6 +749,8 @@ class PodmanDefaults:
self.defaults['ipc'] = "private"
self.defaults['uts'] = "private"
self.defaults['pid'] = "private"
+ if (LooseVersion(self.version) >= LooseVersion('5.0.0')):
+ self.defaults['network'] = ["pasta"]
if (LooseVersion(self.version) >= LooseVersion('3.0.0')):
self.defaults['log_level'] = "warning"
if (LooseVersion(self.version) >= LooseVersion('4.1.0')):
@@ -1180,21 +1188,29 @@ class PodmanContainerDiff:
for cr_net_opt in cr_net:
if 'slirp4netns:' in cr_net_opt:
before = [cr_net_opt]
+ if net_mode_before == 'pasta':
+ cr_net = [i.lower() for i in self._createcommand('--network')]
+ for cr_net_opt in cr_net:
+ if 'pasta:' in cr_net_opt:
+ before = [cr_net_opt]
after = self.params['network'] or []
+ after = [i.lower() for i in after]
# If container is in pod and no networks are provided
if not self.module_params['network'] and self.params['pod']:
after = before
return self._diff_update_and_compare('network', before, after)
# Check special network modes
- if after in [['bridge'], ['host'], ['slirp4netns'], ['none']]:
+ if after in [['bridge'], ['host'], ['slirp4netns'], ['none'], ['pasta']]:
net_mode_after = after[0]
# If changes are only for network mode and container has no networks
if net_mode_after and not before:
# Remove differences between v1 and v2
net_mode_after = net_mode_after.replace('bridge', 'default')
net_mode_after = net_mode_after.replace('slirp4netns', 'default')
+ net_mode_after = net_mode_after.replace('pasta', 'default')
net_mode_before = net_mode_before.replace('bridge', 'default')
net_mode_before = net_mode_before.replace('slirp4netns', 'default')
+ net_mode_before = net_mode_before.replace('pasta', 'default')
return self._diff_update_and_compare('network', net_mode_before, net_mode_after)
# If container is attached to network of a different container
if "container" in net_mode_before:
@@ -1236,6 +1252,8 @@ class PodmanContainerDiff:
s = ":".join(
[str(h["hostport"]), p.replace('/tcp', '')]
).strip(":")
+ if h['hostip'] == '0.0.0.0' and LooseVersion(self.version) >= LooseVersion('5.0.0'):
+ return s
if h['hostip']:
return ":".join([h['hostip'], s])
return s
@@ -1669,6 +1687,9 @@ class PodmanManager:
else:
self.results['diff']['before'] += sysd['diff']['before']
self.results['diff']['after'] += sysd['diff']['after']
+ quadlet = ContainerQuadlet(self.module_params)
+ quadlet_content = quadlet.create_quadlet_content()
+ self.results.update({'podman_quadlet': quadlet_content})
def make_started(self):
"""Run actions if desired state is 'started'."""
@@ -1800,6 +1821,10 @@ class PodmanManager:
self.results.update({'container': {},
'podman_actions': self.container.actions})
+ def make_quadlet(self):
+ results_update = create_quadlet_state(self.module, "container")
+ self.results.update(results_update)
+
def execute(self):
"""Execute the desired action according to map of actions & states."""
states_map = {
@@ -1808,6 +1833,7 @@ class PodmanManager:
'absent': self.make_absent,
'stopped': self.make_stopped,
'created': self.make_created,
+ 'quadlet': self.make_quadlet,
}
process_action = states_map[self.state]
process_action()
diff --git a/ansible_collections/containers/podman/plugins/module_utils/podman/podman_pod_lib.py b/ansible_collections/containers/podman/plugins/module_utils/podman/podman_pod_lib.py
index 4106136e2..e0031351f 100644
--- a/ansible_collections/containers/podman/plugins/module_utils/podman/podman_pod_lib.py
+++ b/ansible_collections/containers/podman/plugins/module_utils/podman/podman_pod_lib.py
@@ -1,11 +1,12 @@
from __future__ import (absolute_import, division, print_function)
-import json
+import json # noqa: F402
from ansible.module_utils._text import to_bytes, to_native
from ansible_collections.containers.podman.plugins.module_utils.podman.common import LooseVersion
from ansible_collections.containers.podman.plugins.module_utils.podman.common import lower_keys
from ansible_collections.containers.podman.plugins.module_utils.podman.common import generate_systemd
from ansible_collections.containers.podman.plugins.module_utils.podman.common import delete_systemd
+from ansible_collections.containers.podman.plugins.module_utils.podman.quadlet import create_quadlet_state, PodQuadlet
__metaclass__ = type
@@ -23,6 +24,7 @@ ARGUMENTS_SPEC_POD = dict(
'stopped',
'paused',
'unpaused',
+ 'quadlet'
]),
recreate=dict(type='bool', default=False),
add_host=dict(type='list', required=False, elements='str'),
@@ -62,6 +64,9 @@ ARGUMENTS_SPEC_POD = dict(
pod_id_file=dict(type='str', required=False),
publish=dict(type='list', required=False,
elements='str', aliases=['ports']),
+ quadlet_dir=dict(type='path'),
+ quadlet_filename=dict(type='str'),
+ quadlet_options=dict(type='list', elements='str'),
share=dict(type='str', required=False),
subgidname=dict(type='str', required=False),
subuidname=dict(type='str', required=False),
@@ -267,7 +272,7 @@ class PodmanPodModuleParams:
return c
def addparam_no_hosts(self, c):
- return c + ["=".join('--no-hosts', self.params['no_hosts'])]
+ return c + ["=".join(['--no-hosts', self.params['no_hosts']])]
def addparam_pid(self, c):
return c + ['--pid', self.params['pid']]
@@ -465,6 +470,7 @@ class PodmanPodDiff:
if before == ['podman']:
before = []
after = self.params['network'] or []
+ after = [i.lower() for i in after]
# Special case for options for slirp4netns rootless networking from v2
if net_mode_before == 'slirp4netns' and 'createcommand' in self.info:
cr_com = self.info['createcommand']
@@ -472,16 +478,24 @@ class PodmanPodDiff:
cr_net = cr_com[cr_com.index('--network') + 1].lower()
if 'slirp4netns:' in cr_net:
before = [cr_net]
+ if net_mode_before == 'pasta' and 'createcommand' in self.info:
+ cr_com = self.info['createcommand']
+ if '--network' in cr_com:
+ cr_net = cr_com[cr_com.index('--network') + 1].lower()
+ if 'pasta:' in cr_net:
+ before = [cr_net]
# Currently supported only 'host' and 'none' network modes idempotency
- if after in [['bridge'], ['host'], ['slirp4netns']]:
+ if after in [['bridge'], ['host'], ['slirp4netns'], ['pasta']]:
net_mode_after = after[0]
if net_mode_after and not before:
# Remove differences between v1 and v2
net_mode_after = net_mode_after.replace('bridge', 'default')
net_mode_after = net_mode_after.replace('slirp4netns', 'default')
+ net_mode_after = net_mode_after.replace('pasta', 'default')
net_mode_before = net_mode_before.replace('bridge', 'default')
net_mode_before = net_mode_before.replace('slirp4netns', 'default')
+ net_mode_before = net_mode_before.replace('pasta', 'default')
return self._diff_update_and_compare('network', net_mode_before, net_mode_after)
# For 4.4.0+ podman versions with no network specified
if not net_mode_after and net_mode_before == 'slirp4netns' and not after:
@@ -492,6 +506,11 @@ class PodmanPodDiff:
net_mode_after = 'bridge'
if before == ['bridge']:
after = ['bridge']
+ # For pasta networking for Podman v5
+ if not net_mode_after and net_mode_before == 'pasta' and not after:
+ net_mode_after = 'pasta'
+ if before == ['pasta']:
+ after = ['pasta']
before, after = sorted(list(set(before))), sorted(list(set(after)))
return self._diff_update_and_compare('network', before, after)
@@ -507,6 +526,8 @@ class PodmanPodDiff:
s = ":".join(
[str(h["hostport"]), p.replace('/tcp', '')]
).strip(":")
+ if h['hostip'] == '0.0.0.0' and LooseVersion(self.version) >= LooseVersion('5.0.0'):
+ return s
if h['hostip']:
return ":".join([h['hostip'], s])
return s
@@ -658,7 +679,16 @@ class PodmanPod:
# pylint: disable=unused-variable
rc, out, err = self.module.run_command(
[self.module_params['executable'], b'pod', b'inspect', self.name])
- return json.loads(out) if rc == 0 else {}
+ if rc == 0:
+ info = json.loads(out)
+ # from podman 5 onwards, this is a list of dicts,
+ # before it was just a single dict when querying
+ # a single pod
+ if isinstance(info, list):
+ return info[0]
+ else:
+ return info
+ return {}
def get_ps(self):
"""Inspect pod process and gather info about it."""
@@ -791,6 +821,8 @@ class PodmanPodManager:
(default: {True})
"""
facts = self.pod.get_info() if changed else self.pod.info
+ if isinstance(facts, list):
+ facts = facts[0]
out, err = self.pod.stdout, self.pod.stderr
self.results.update({'changed': changed, 'pod': facts,
'podman_actions': self.pod.actions},
@@ -812,6 +844,9 @@ class PodmanPodManager:
else:
self.results['diff']['before'] += sysd['diff']['before']
self.results['diff']['after'] += sysd['diff']['after']
+ quadlet = PodQuadlet(self.module_params)
+ quadlet_content = quadlet.create_quadlet_content()
+ self.results.update({'podman_quadlet': quadlet_content})
def execute(self):
"""Execute the desired action according to map of actions & states."""
@@ -824,7 +859,7 @@ class PodmanPodManager:
'killed': self.make_killed,
'paused': self.make_paused,
'unpaused': self.make_unpaused,
-
+ 'quadlet': self.make_quadlet,
}
process_action = states_map[self.state]
process_action()
@@ -926,3 +961,7 @@ class PodmanPodManager:
self.results.update({'changed': True})
self.results.update({'pod': {},
'podman_actions': self.pod.actions})
+
+ def make_quadlet(self):
+ results_update = create_quadlet_state(self.module, "pod")
+ self.results.update(results_update)
diff --git a/ansible_collections/containers/podman/plugins/module_utils/podman/quadlet.py b/ansible_collections/containers/podman/plugins/module_utils/podman/quadlet.py
new file mode 100644
index 000000000..17764b60d
--- /dev/null
+++ b/ansible_collections/containers/podman/plugins/module_utils/podman/quadlet.py
@@ -0,0 +1,636 @@
+# Copyright (c) 2024 Sagi Shnaidman (@sshnaidm)
+# 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
+
+import os
+
+from ansible_collections.containers.podman.plugins.module_utils.podman.common import compare_systemd_file_content
+
+QUADLET_ROOT_PATH = "/etc/containers/systemd/"
+QUADLET_NON_ROOT_PATH = "~/.config/containers/systemd/"
+
+
+class Quadlet:
+ param_map = {}
+
+ def __init__(self, section: str, params: dict):
+ self.section = section
+ self.custom_params = self.custom_prepare_params(params)
+ self.dict_params = self.prepare_params()
+
+ def custom_prepare_params(self, params: dict) -> dict:
+ """
+ Custom parameter processing for specific Quadlet types.
+ """
+ # This should be implemented in child classes if needed.
+ return params
+
+ def prepare_params(self) -> dict:
+ """
+ Convert parameter values as per param_map.
+ """
+ processed_params = []
+ for param_key, quadlet_key in self.param_map.items():
+ value = self.custom_params.get(param_key)
+ if value is not None:
+ if isinstance(value, list):
+ # Add an entry for each item in the list
+ for item in value:
+ processed_params.append([quadlet_key, item])
+ else:
+ if isinstance(value, bool):
+ value = str(value).lower()
+ # Add a single entry for the key
+ processed_params.append([quadlet_key, value])
+ return processed_params
+
+ def create_quadlet_content(self) -> str:
+ """
+ Construct the quadlet content as a string.
+ """
+ custom_user_options = self.custom_params.get("quadlet_options")
+ custom_text = "\n" + "\n".join(custom_user_options) if custom_user_options else ""
+ return f"[{self.section}]\n" + "\n".join(
+ f"{key}={value}" for key, value in self.dict_params
+ ) + custom_text + "\n"
+
+ def write_to_file(self, path: str):
+ """
+ Write the quadlet content to a file at the specified path.
+ """
+ content = self.create_quadlet_content()
+ with open(path, 'w') as file:
+ file.write(content)
+
+
+class ContainerQuadlet(Quadlet):
+ param_map = {
+ 'cap_add': 'AddCapability',
+ 'device': 'AddDevice',
+ 'annotation': 'Annotation',
+ 'name': 'ContainerName',
+ # the following are not implemented yet in Podman module
+ 'AutoUpdate': 'AutoUpdate',
+ 'ContainersConfModule': 'ContainersConfModule',
+ # end of not implemented yet
+ 'dns': 'DNS',
+ 'dns_option': 'DNSOption',
+ 'dns_search': 'DNSSearch',
+ 'cap_drop': 'DropCapability',
+ 'entrypoint': 'Entrypoint',
+ 'env': 'Environment',
+ 'env_file': 'EnvironmentFile',
+ 'env_host': 'EnvironmentHost',
+ 'command': 'Exec',
+ 'expose': 'ExposeHostPort',
+ 'gidmap': 'GIDMap',
+ 'global_args': 'GlobalArgs',
+ 'group': 'Group', # Does not exist in module parameters
+ 'healthcheck': 'HealthCheckCmd',
+ 'healthcheck_interval': 'HealthInterval',
+ 'healthcheck_failure_action': 'HealthOnFailure',
+ 'healthcheck_retries': 'HealthRetries',
+ 'healthcheck_start_period': 'HealthStartPeriod',
+ 'healthcheck_timeout': 'HealthTimeout',
+ # the following are not implemented yet in Podman module
+ 'HealthStartupCmd': 'HealthStartupCmd',
+ 'HealthStartupInterval': 'HealthStartupInterval',
+ 'HealthStartupRetries': 'HealthStartupRetries',
+ 'HealthStartupSuccess': 'HealthStartupSuccess',
+ 'HealthStartupTimeout': 'HealthStartupTimeout',
+ # end of not implemented yet
+ 'hostname': 'HostName',
+ 'image': 'Image',
+ 'ip': 'IP',
+ # the following are not implemented yet in Podman module
+ 'IP6': 'IP6',
+ # end of not implemented yet
+ 'label': 'Label',
+ 'log_driver': 'LogDriver',
+ "Mask": "Mask", # add it in security_opt
+ 'mount': 'Mount',
+ 'network': 'Network',
+ 'no_new_privileges': 'NoNewPrivileges',
+ 'sdnotify': 'Notify',
+ 'pids_limit': 'PidsLimit',
+ 'pod': 'Pod',
+ 'publish': 'PublishPort',
+ # the following are not implemented yet in Podman module
+ "Pull": "Pull",
+ # end of not implemented yet
+ 'read_only': 'ReadOnly',
+ 'read_only_tmpfs': 'ReadOnlyTmpfs',
+ 'rootfs': 'Rootfs',
+ 'init': 'RunInit',
+ 'SeccompProfile': 'SeccompProfile',
+ 'secrets': 'Secret',
+ # All these are in security_opt
+ 'SecurityLabelDisable': 'SecurityLabelDisable',
+ 'SecurityLabelFileType': 'SecurityLabelFileType',
+ 'SecurityLabelLevel': 'SecurityLabelLevel',
+ 'SecurityLabelNested': 'SecurityLabelNested',
+ 'SecurityLabelType': 'SecurityLabelType',
+ 'shm_size': 'ShmSize',
+ 'stop_timeout': 'StopTimeout',
+ 'subgidname': 'SubGIDMap',
+ 'subuidname': 'SubUIDMap',
+ 'sysctl': 'Sysctl',
+ 'timezone': 'Timezone',
+ 'tmpfs': 'Tmpfs',
+ 'uidmap': 'UIDMap',
+ 'ulimit': 'Ulimit',
+ 'Unmask': 'Unmask', # --security-opt unmask=ALL
+ 'user': 'User',
+ 'userns': 'UserNS',
+ 'volume': 'Volume',
+ 'workdir': 'WorkingDir',
+ 'podman_args': 'PodmanArgs',
+ }
+
+ def __init__(self, params: dict):
+ super().__init__("Container", params)
+
+ def custom_prepare_params(self, params: dict) -> dict:
+ """
+ Custom parameter processing for container-specific parameters.
+ """
+ # Work on params in params_map and convert them to a right form
+ if params["annotation"]:
+ params['annotation'] = ["%s=%s" %
+ (k, v) for k, v in params['annotation'].items()]
+ if params["cap_add"]:
+ params["cap_add"] = " ".join(params["cap_add"])
+ if params["cap_drop"]:
+ params["cap_drop"] = " ".join(params["cap_drop"])
+ if params["command"]:
+ params["command"] = (" ".join(params["command"])
+ if isinstance(params["command"], list)
+ else params["command"])
+ if params["label"]:
+ params["label"] = ["%s=%s" % (k, v) for k, v in params["label"].items()]
+ if params["env"]:
+ params["env"] = ["%s=%s" % (k, v) for k, v in params["env"].items()]
+ if params["sysctl"]:
+ params["sysctl"] = ["%s=%s" % (k, v) for k, v in params["sysctl"].items()]
+ if params["tmpfs"]:
+ params["tmpfs"] = ["%s:%s" % (k, v) if v else k for k, v in params["tmpfs"].items()]
+
+ # Work on params which are not in the param_map but can be calculated
+ params["global_args"] = []
+ if params["user"] and len(str(params["user"]).split(":")) > 1:
+ user, group = params["user"].split(":")
+ params["user"] = user
+ params["group"] = group
+ if params["security_opt"]:
+ if "no-new-privileges" in params["security_opt"]:
+ params["no_new_privileges"] = True
+ params["security_opt"].remove("no-new-privileges")
+ if params["log_level"]:
+ params["global_args"].append(f"--log-level {params['log_level']}")
+ if params["debug"]:
+ params["global_args"].append("--log-level debug")
+
+ # Work on params which are not in the param_map and add them to PodmanArgs
+ params["podman_args"] = []
+ if params["authfile"]:
+ params["podman_args"].append(f"--authfile {params['authfile']}")
+ if params["attach"]:
+ for attach in params["attach"]:
+ params["podman_args"].append(f"--attach {attach}")
+ if params["blkio_weight"]:
+ params["podman_args"].append(f"--blkio-weight {params['blkio_weight']}")
+ if params["blkio_weight_device"]:
+ params["podman_args"].append(" ".join([
+ f"--blkio-weight-device {':'.join(blkio)}" for blkio in params["blkio_weight_device"].items()]))
+ if params["cgroupns"]:
+ params["podman_args"].append(f"--cgroupns {params['cgroupns']}")
+ if params["cgroup_parent"]:
+ params["podman_args"].append(f"--cgroup-parent {params['cgroup_parent']}")
+ if params["cidfile"]:
+ params["podman_args"].append(f"--cidfile {params['cidfile']}")
+ if params["conmon_pidfile"]:
+ params["podman_args"].append(f"--conmon-pidfile {params['conmon_pidfile']}")
+ if params["cpuset_cpus"]:
+ params["podman_args"].append(f"--cpuset-cpus {params['cpuset_cpus']}")
+ if params["cpuset_mems"]:
+ params["podman_args"].append(f"--cpuset-mems {params['cpuset_mems']}")
+ if params["cpu_period"]:
+ params["podman_args"].append(f"--cpu-period {params['cpu_period']}")
+ if params["cpu_quota"]:
+ params["podman_args"].append(f"--cpu-quota {params['cpu_quota']}")
+ if params["cpu_rt_period"]:
+ params["podman_args"].append(f"--cpu-rt-period {params['cpu_rt_period']}")
+ if params["cpu_rt_runtime"]:
+ params["podman_args"].append(f"--cpu-rt-runtime {params['cpu_rt_runtime']}")
+ if params["cpu_shares"]:
+ params["podman_args"].append(f"--cpu-shares {params['cpu_shares']}")
+ if params["device_read_bps"]:
+ for i in params["device_read_bps"]:
+ params["podman_args"].append(f"--device-read-bps {i}")
+ if params["device_read_iops"]:
+ for i in params["device_read_iops"]:
+ params["podman_args"].append(f"--device-read-iops {i}")
+ if params["device_write_bps"]:
+ for i in params["device_write_bps"]:
+ params["podman_args"].append(f"--device-write-bps {i}")
+ if params["device_write_iops"]:
+ for i in params["device_write_iops"]:
+ params["podman_args"].append(f"--device-write-iops {i}")
+ if params["etc_hosts"]:
+ for host_ip in params['etc_hosts'].items():
+ params["podman_args"].append(f"--add-host {':'.join(host_ip)}")
+ if params["hooks_dir"]:
+ for hook in params["hooks_dir"]:
+ params["podman_args"].append(f"--hooks-dir {hook}")
+ if params["http_proxy"]:
+ params["podman_args"].append(f"--http-proxy {params['http_proxy']}")
+ if params["image_volume"]:
+ params["podman_args"].append(f"--image-volume {params['image_volume']}")
+ if params["init_path"]:
+ params["podman_args"].append(f"--init-path {params['init_path']}")
+ if params["interactive"]:
+ params["podman_args"].append("--interactive")
+ if params["ipc"]:
+ params["podman_args"].append(f"--ipc {params['ipc']}")
+ if params["kernel_memory"]:
+ params["podman_args"].append(f"--kernel-memory {params['kernel_memory']}")
+ if params["label_file"]:
+ params["podman_args"].append(f"--label-file {params['label_file']}")
+ if params["log_opt"]:
+ for k, v in params['log_opt'].items():
+ params["podman_args"].append(f"--log-opt {k.replace('max_size', 'max-size')}={v}")
+ if params["mac_address"]:
+ params["podman_args"].append(f"--mac-address {params['mac_address']}")
+ if params["memory"]:
+ params["podman_args"].append(f"--memory {params['memory']}")
+ if params["memory_reservation"]:
+ params["podman_args"].append(f"--memory-reservation {params['memory_reservation']}")
+ if params["memory_swap"]:
+ params["podman_args"].append(f"--memory-swap {params['memory_swap']}")
+ if params["memory_swappiness"]:
+ params["podman_args"].append(f"--memory-swappiness {params['memory_swappiness']}")
+ if params["network_aliases"]:
+ for alias in params["network_aliases"]:
+ params["podman_args"].append(f"--network-alias {alias}")
+ if params["no_hosts"] is not None:
+ params["podman_args"].append(f"--no-hosts={params['no_hosts']}")
+ if params["oom_kill_disable"]:
+ params["podman_args"].append(f"--oom-kill-disable={params['oom_kill_disable']}")
+ if params["oom_score_adj"]:
+ params["podman_args"].append(f"--oom-score-adj {params['oom_score_adj']}")
+ if params["pid"]:
+ params["podman_args"].append(f"--pid {params['pid']}")
+ if params["privileged"]:
+ params["podman_args"].append("--privileged")
+ if params["publish_all"]:
+ params["podman_args"].append("--publish-all")
+ if params["requires"]:
+ params["podman_args"].append(f"--requires {','.join(params['requires'])}")
+ if params["restart_policy"]:
+ params["podman_args"].append(f"--restart-policy {params['restart_policy']}")
+ if params["rm"]:
+ params["podman_args"].append("--rm")
+ if params["security_opt"]:
+ for security_opt in params["security_opt"]:
+ params["podman_args"].append(f"--security-opt {security_opt}")
+ if params["sig_proxy"]:
+ params["podman_args"].append(f"--sig-proxy {params['sig_proxy']}")
+ if params["stop_signal"]:
+ params["podman_args"].append(f"--stop-signal {params['stop_signal']}")
+ if params["systemd"]:
+ params["podman_args"].append(f"--systemd={str(params['systemd']).lower()}")
+ if params["tty"]:
+ params["podman_args"].append("--tty")
+ if params["uts"]:
+ params["podman_args"].append(f"--uts {params['uts']}")
+ if params["volumes_from"]:
+ for volume in params["volumes_from"]:
+ params["podman_args"].append(f"--volumes-from {volume}")
+ if params["cmd_args"]:
+ params["podman_args"].append(params["cmd_args"])
+
+ # Return params with custom processing applied
+ return params
+
+
+class NetworkQuadlet(Quadlet):
+ param_map = {
+ 'name': 'NetworkName',
+ 'internal': 'Internal',
+ 'driver': 'Driver',
+ 'gateway': 'Gateway',
+ 'disable_dns': 'DisableDNS',
+ 'subnet': 'Subnet',
+ 'ip_range': 'IPRange',
+ 'ipv6': 'IPv6',
+ "opt": "Options",
+ # Add more parameter mappings specific to networks
+ 'ContainersConfModule': 'ContainersConfModule',
+ "DNS": "DNS",
+ "IPAMDriver": "IPAMDriver",
+ "Label": "Label",
+ "global_args": "GlobalArgs",
+ "podman_args": "PodmanArgs",
+ }
+
+ def __init__(self, params: dict):
+ super().__init__("Network", params)
+
+ def custom_prepare_params(self, params: dict) -> dict:
+ """
+ Custom parameter processing for network-specific parameters.
+ """
+ # Work on params in params_map and convert them to a right form
+ if params["debug"]:
+ params["global_args"].append("--log-level debug")
+ if params["opt"]:
+ new_opt = []
+ for k, v in params["opt"].items():
+ if v is not None:
+ new_opt.append(f"{k}={v}")
+ params["opt"] = new_opt
+ return params
+
+
+# This is a inherited class that represents a Quadlet file for the Podman pod
+class PodQuadlet(Quadlet):
+ param_map = {
+ 'name': 'PodName',
+ "network": "Network",
+ "publish": "PublishPort",
+ "volume": "Volume",
+ 'ContainersConfModule': 'ContainersConfModule',
+ "global_args": "GlobalArgs",
+ "podman_args": "PodmanArgs",
+ }
+
+ def __init__(self, params: dict):
+ super().__init__("Pod", params)
+
+ def custom_prepare_params(self, params: dict) -> dict:
+ """
+ Custom parameter processing for pod-specific parameters.
+ """
+ # Work on params in params_map and convert them to a right form
+ params["global_args"] = []
+ params["podman_args"] = []
+
+ if params["add_host"]:
+ for host in params['add_host']:
+ params["podman_args"].append(f"--add-host {host}")
+ if params["cgroup_parent"]:
+ params["podman_args"].append(f"--cgroup-parent {params['cgroup_parent']}")
+ if params["blkio_weight"]:
+ params["podman_args"].append(f"--blkio-weight {params['blkio_weight']}")
+ if params["blkio_weight_device"]:
+ params["podman_args"].append(" ".join([
+ f"--blkio-weight-device {':'.join(blkio)}" for blkio in params["blkio_weight_device"].items()]))
+ if params["cpuset_cpus"]:
+ params["podman_args"].append(f"--cpuset-cpus {params['cpuset_cpus']}")
+ if params["cpuset_mems"]:
+ params["podman_args"].append(f"--cpuset-mems {params['cpuset_mems']}")
+ if params["cpu_shares"]:
+ params["podman_args"].append(f"--cpu-shares {params['cpu_shares']}")
+ if params["cpus"]:
+ params["podman_args"].append(f"--cpus {params['cpus']}")
+ if params["device"]:
+ for device in params["device"]:
+ params["podman_args"].append(f"--device {device}")
+ if params["device_read_bps"]:
+ for i in params["device_read_bps"]:
+ params["podman_args"].append(f"--device-read-bps {i}")
+ if params["device_write_bps"]:
+ for i in params["device_write_bps"]:
+ params["podman_args"].append(f"--device-write-bps {i}")
+ if params["dns"]:
+ for dns in params["dns"]:
+ params["podman_args"].append(f"--dns {dns}")
+ if params["dns_opt"]:
+ for dns_option in params["dns_opt"]:
+ params["podman_args"].append(f"--dns-option {dns_option}")
+ if params["dns_search"]:
+ for dns_search in params["dns_search"]:
+ params["podman_args"].append(f"--dns-search {dns_search}")
+ if params["gidmap"]:
+ for gidmap in params["gidmap"]:
+ params["podman_args"].append(f"--gidmap {gidmap}")
+ if params["hostname"]:
+ params["podman_args"].append(f"--hostname {params['hostname']}")
+ if params["infra"]:
+ params["podman_args"].append(f"--infra {params['infra']}")
+ if params["infra_command"]:
+ params["podman_args"].append(f"--infra-command {params['infra_command']}")
+ if params["infra_conmon_pidfile"]:
+ params["podman_args"].append(f"--infra-conmon-pidfile {params['infra_conmon_pidfile']}")
+ if params["infra_image"]:
+ params["podman_args"].append(f"--infra-image {params['infra_image']}")
+ if params["infra_name"]:
+ params["podman_args"].append(f"--infra-name {params['infra_name']}")
+ if params["ip"]:
+ params["podman_args"].append(f"--ip {params['ip']}")
+ if params["label"]:
+ for label, label_v in params["label"].items():
+ params["podman_args"].append(f"--label {label}={label_v}")
+ if params["label_file"]:
+ params["podman_args"].append(f"--label-file {params['label_file']}")
+ if params["mac_address"]:
+ params["podman_args"].append(f"--mac-address {params['mac_address']}")
+ if params["memory"]:
+ params["podman_args"].append(f"--memory {params['memory']}")
+ if params["memory_swap"]:
+ params["podman_args"].append(f"--memory-swap {params['memory_swap']}")
+ if params["no_hosts"]:
+ params["podman_args"].append(f"--no-hosts {params['no_hosts']}")
+ if params["pid"]:
+ params["podman_args"].append(f"--pid {params['pid']}")
+ if params["pod_id_file"]:
+ params["podman_args"].append(f"--pod-id-file {params['pod_id_file']}")
+ if params["share"]:
+ params["podman_args"].append(f"--share {params['share']}")
+ if params["subgidname"]:
+ params["podman_args"].append(f"--subgidname {params['subgidname']}")
+ if params["subuidname"]:
+ params["podman_args"].append(f"--subuidname {params['subuidname']}")
+ if params["uidmap"]:
+ for uidmap in params["uidmap"]:
+ params["podman_args"].append(f"--uidmap {uidmap}")
+ if params["userns"]:
+ params["podman_args"].append(f"--userns {params['userns']}")
+ if params["debug"]:
+ params["global_args"].append("--log-level debug")
+
+ return params
+
+
+# This is a inherited class that represents a Quadlet file for the Podman volume
+class VolumeQuadlet(Quadlet):
+ param_map = {
+ 'name': 'VolumeName',
+ 'driver': 'Driver',
+ 'label': 'Label',
+ # 'opt': 'Options',
+ 'ContainersConfModule': 'ContainersConfModule',
+ 'global_args': 'GlobalArgs',
+ 'podman_args': 'PodmanArgs',
+ }
+
+ def __init__(self, params: dict):
+ super().__init__("Volume", params)
+
+ def custom_prepare_params(self, params: dict) -> dict:
+ """
+ Custom parameter processing for volume-specific parameters.
+ """
+ # Work on params in params_map and convert them to a right form
+ params["global_args"] = []
+ params["podman_args"] = []
+
+ if params["debug"]:
+ params["global_args"].append("--log-level debug")
+ if params["label"]:
+ params["label"] = ["%s=%s" % (k, v) for k, v in params["label"].items()]
+ if params["options"]:
+ for opt in params["options"]:
+ params["podman_args"].append(f"--opt {opt}")
+
+ return params
+
+
+# This is a inherited class that represents a Quadlet file for the Podman kube
+class KubeQuadlet(Quadlet):
+ param_map = {
+ 'configmap': 'ConfigMap',
+ 'log_driver': 'LogDriver',
+ 'network': 'Network',
+ 'kube_file': 'Yaml',
+ 'userns': 'UserNS',
+ 'AutoUpdate': 'AutoUpdate',
+ 'ExitCodePropagation': 'ExitCodePropagation',
+ 'KubeDownForce': 'KubeDownForce',
+ 'PublishPort': 'PublishPort',
+ 'SetWorkingDirectory': 'SetWorkingDirectory',
+ 'ContainersConfModule': 'ContainersConfModule',
+ 'global_args': 'GlobalArgs',
+ 'podman_args': 'PodmanArgs',
+ }
+
+ def __init__(self, params: dict):
+ super().__init__("Kube", params)
+
+ def custom_prepare_params(self, params: dict) -> dict:
+ """
+ Custom parameter processing for kube-specific parameters.
+ """
+ # Work on params in params_map and convert them to a right form
+ params["global_args"] = []
+ params["podman_args"] = []
+
+ if params["debug"]:
+ params["global_args"].append("--log-level debug")
+
+ return params
+
+
+# This is a inherited class that represents a Quadlet file for the Podman image
+class ImageQuadlet(Quadlet):
+ param_map = {
+ 'AllTags': 'AllTags',
+ 'arch': 'Arch',
+ 'authfile': 'AuthFile',
+ 'ca_cert_dir': 'CertDir',
+ 'creds': 'Creds',
+ 'DecryptionKey': 'DecryptionKey',
+ 'name': 'Image',
+ 'ImageTag': 'ImageTag',
+ 'OS': 'OS',
+ 'validate_certs': 'TLSVerify',
+ 'Variant': 'Variant',
+ 'ContainersConfModule': 'ContainersConfModule',
+ 'global_args': 'GlobalArgs',
+ 'podman_args': 'PodmanArgs',
+ }
+
+ def __init__(self, params: dict):
+ super().__init__("Image", params)
+
+ def custom_prepare_params(self, params: dict) -> dict:
+ """
+ Custom parameter processing for image-specific parameters.
+ """
+ # Work on params in params_map and convert them to a right form
+ params["global_args"] = []
+ params["podman_args"] = []
+
+ if params["username"] and params["password"]:
+ params["creds"] = f"{params['username']}:{params['password']}"
+ # if params['validate_certs'] is not None:
+ # params['validate_certs'] = str(params['validate_certs']).lower()
+
+ return params
+
+
+def check_quadlet_directory(module, quadlet_dir):
+ '''Check if the directory exists and is writable. If not, fail the module.'''
+ if not os.path.exists(quadlet_dir):
+ try:
+ os.makedirs(quadlet_dir)
+ except Exception as e:
+ module.fail_json(
+ msg="Directory for quadlet_file can't be created: %s" % e)
+ if not os.access(quadlet_dir, os.W_OK):
+ module.fail_json(
+ msg="Directory for quadlet_file is not writable: %s" % quadlet_dir)
+
+
+def create_quadlet_state(module, issuer):
+ '''Create a quadlet file for the specified issuer.'''
+ class_map = {
+ "container": ContainerQuadlet,
+ "network": NetworkQuadlet,
+ "pod": PodQuadlet,
+ "volume": VolumeQuadlet,
+ "kube": KubeQuadlet,
+ "image": ImageQuadlet,
+ }
+ # Let's detect which user is running
+ user = "root" if os.geteuid() == 0 else "user"
+ quadlet_dir = module.params.get('quadlet_dir')
+ if not quadlet_dir:
+ if user == "root":
+ quadlet_dir = QUADLET_ROOT_PATH
+ else:
+ quadlet_dir = os.path.expanduser(QUADLET_NON_ROOT_PATH)
+ # Create a filename based on the issuer
+ if not module.params.get('name') and not module.params.get('quadlet_filename'):
+ module.fail_json(msg=f"Filename for {issuer} is required for creating a quadlet file.")
+ if issuer == "image":
+ name = module.params['name'].split("/")[-1].split(":")[0]
+ else:
+ name = module.params.get('name')
+ quad_file_name = module.params['quadlet_filename']
+ if quad_file_name and not quad_file_name.endswith(f".{issuer}"):
+ quad_file_name = f"{quad_file_name}.{issuer}"
+ filename = quad_file_name or f"{name}.{issuer}"
+ quadlet_file_path = os.path.join(quadlet_dir, filename)
+ # Check if the directory exists and is writable
+ check_quadlet_directory(module, quadlet_dir)
+ # Check if file already exists and if it's different
+ quadlet = class_map[issuer](module.params)
+ quadlet_content = quadlet.create_quadlet_content()
+ file_diff = compare_systemd_file_content(quadlet_file_path, quadlet_content)
+ if bool(file_diff):
+ quadlet.write_to_file(quadlet_file_path)
+ results_update = {
+ 'changed': True,
+ "diff": {
+ "before": "\n".join(file_diff[0]) if isinstance(file_diff[0], list) else file_diff[0] + "\n",
+ "after": "\n".join(file_diff[1]) if isinstance(file_diff[1], list) else file_diff[1] + "\n",
+ }}
+ else:
+ results_update = {}
+ return results_update
+
+# Check with following command:
+# QUADLET_UNIT_DIRS=<Directory> /usr/lib/systemd/system-generators/podman-system-generator {--user} --dryrun
diff --git a/ansible_collections/containers/podman/plugins/modules/podman_container.py b/ansible_collections/containers/podman/plugins/modules/podman_container.py
index 51cb57a53..75349f14e 100644
--- a/ansible_collections/containers/podman/plugins/modules/podman_container.py
+++ b/ansible_collections/containers/podman/plugins/modules/podman_container.py
@@ -55,6 +55,8 @@ options:
If container doesn't exist, the module creates it and leaves it in
'created' state. If configuration doesn't match or 'recreate' option is
set, the container will be recreated
+ - I(quadlet) - Write a quadlet file with the specified configuration.
+ Requires the C(quadlet_dir) option to be set.
type: str
default: started
choices:
@@ -63,6 +65,7 @@ options:
- stopped
- started
- created
+ - quadlet
image:
description:
- Repository path (or image name) and tag used to create the container.
@@ -721,6 +724,22 @@ options:
- Publish all exposed ports to random ports on the host interfaces. The
default is false.
type: bool
+ quadlet_dir:
+ description:
+ - Path to the directory to write quadlet file in.
+ By default, it will be set as C(/etc/containers/systemd/) for root user,
+ C(~/.config/containers/systemd/) for non-root users.
+ type: path
+ quadlet_filename:
+ description:
+ - Name of quadlet file to write. By default it takes C(name) value.
+ type: str
+ quadlet_options:
+ description:
+ - Options for the quadlet file. Provide missing in usual container args
+ options as a list of lines to add.
+ type: list
+ elements: str
read_only:
description:
- Mount the container's root filesystem as read only. Default is false
@@ -994,6 +1013,23 @@ EXAMPLES = r"""
- --deploy-hook
- "echo 1 > /var/lib/letsencrypt/complete"
+- name: Create a Quadlet file
+ containers.podman.podman_container:
+ name: quadlet-container
+ image: nginx
+ state: quadlet
+ quadlet_filename: custome-container
+ device: "/dev/sda:/dev/xvda:rwm"
+ ports:
+ - "8080:80"
+ volumes:
+ - "/var/www:/usr/share/nginx/html"
+ quadlet_options:
+ - "AutoUpdate=registry"
+ - "Pull=true"
+ - |
+ [Install]
+ WantedBy=default.target
"""
RETURN = r"""
diff --git a/ansible_collections/containers/podman/plugins/modules/podman_container_exec.py b/ansible_collections/containers/podman/plugins/modules/podman_container_exec.py
index d30e85cdb..1827b0ce7 100644
--- a/ansible_collections/containers/podman/plugins/modules/podman_container_exec.py
+++ b/ansible_collections/containers/podman/plugins/modules/podman_container_exec.py
@@ -40,6 +40,11 @@ options:
description:
- Set environment variables.
type: dict
+ executable:
+ description:
+ - The path to the podman executable.
+ type: str
+ default: podman
privileged:
description:
- Give extended privileges to the container.
@@ -141,6 +146,7 @@ def run_container_exec(module: AnsibleModule) -> dict:
tty = module.params['tty']
user = module.params['user']
workdir = module.params['workdir']
+ executable = module.params['executable']
if command is not None:
argv = shlex.split(command)
@@ -156,7 +162,7 @@ def run_container_exec(module: AnsibleModule) -> dict:
to_text(value, errors='surrogate_or_strict')
exec_options += ['--env',
- '%s="%s"' % (key, value)]
+ '%s=%s' % (key, value)]
if privileged:
exec_options.append('--privileged')
@@ -178,7 +184,7 @@ def run_container_exec(module: AnsibleModule) -> dict:
exec_with_args.extend(exec_options)
rc, stdout, stderr = run_podman_command(
- module=module, executable='podman', args=exec_with_args)
+ module=module, executable=executable, args=exec_with_args, ignore_errors=True)
result = {
'changed': changed,
@@ -211,6 +217,10 @@ def main():
'type': 'bool',
'default': False,
},
+ 'executable': {
+ 'type': 'str',
+ 'default': 'podman',
+ },
'env': {
'type': 'dict',
},
diff --git a/ansible_collections/containers/podman/plugins/modules/podman_generate_systemd.py b/ansible_collections/containers/podman/plugins/modules/podman_generate_systemd.py
index 486a18a86..b27c16c6e 100644
--- a/ansible_collections/containers/podman/plugins/modules/podman_generate_systemd.py
+++ b/ansible_collections/containers/podman/plugins/modules/podman_generate_systemd.py
@@ -183,6 +183,7 @@ EXAMPLES = '''
- name: Postgres container must be started and enabled on systemd
ansible.builtin.systemd:
name: container-postgres_local
+ scope: user
daemon_reload: true
state: started
enabled: true
diff --git a/ansible_collections/containers/podman/plugins/modules/podman_image.py b/ansible_collections/containers/podman/plugins/modules/podman_image.py
index 6305a5d5b..7fcb0041a 100644
--- a/ansible_collections/containers/podman/plugins/modules/podman_image.py
+++ b/ansible_collections/containers/podman/plugins/modules/podman_image.py
@@ -64,6 +64,7 @@ DOCUMENTATION = r'''
- present
- absent
- build
+ - quadlet
validate_certs:
description:
- Require HTTPS and validate certificates when pulling or pushing. Also used during build if a pull or push is necessary.
@@ -175,6 +176,24 @@ DOCUMENTATION = r'''
- docker-daemon
- oci-archive
- ostree
+ quadlet_dir:
+ description:
+ - Path to the directory to write quadlet file in.
+ By default, it will be set as C(/etc/containers/systemd/) for root user,
+ C(~/.config/containers/systemd/) for non-root users.
+ type: path
+ required: false
+ quadlet_filename:
+ description:
+ - Name of quadlet file to write. By default it takes image name without prefixes and tags.
+ type: str
+ quadlet_options:
+ description:
+ - Options for the quadlet file. Provide missing in usual network args
+ options as a list of lines to add.
+ type: list
+ elements: str
+ required: false
'''
EXAMPLES = r"""
@@ -280,6 +299,18 @@ EXAMPLES = r"""
containers.podman.podman_image:
name: nginx
arch: amd64
+
+- name: Create a quadlet file for an image
+ containers.podman.podman_image:
+ name: docker.io/library/alpine:latest
+ state: quadlet
+ quadlet_dir: /etc/containers/systemd
+ quadlet_filename: alpine-latest
+ quadlet_options:
+ - Variant=arm/v7
+ - |
+ [Install]
+ WantedBy=default.target
"""
RETURN = r"""
@@ -410,6 +441,7 @@ import shlex
from ansible.module_utils._text import to_native
from ansible.module_utils.basic import AnsibleModule
from ansible_collections.containers.podman.plugins.module_utils.podman.common import run_podman_command
+from ansible_collections.containers.podman.plugins.module_utils.podman.quadlet import create_quadlet_state
class PodmanImageManager(object):
@@ -451,6 +483,9 @@ class PodmanImageManager(object):
if self.state in ['absent']:
self.absent()
+ if self.state == 'quadlet':
+ self.make_quadlet()
+
def _run(self, args, expected_rc=0, ignore_errors=False):
cmd = " ".join([self.executable]
+ [to_native(i) for i in args])
@@ -537,6 +572,11 @@ class PodmanImageManager(object):
if not self.module.check_mode:
self.remove_image_id()
+ def make_quadlet(self):
+ results_update = create_quadlet_state(self.module, "image")
+ self.results.update(results_update)
+ self.module.exit_json(**self.results)
+
def find_image(self, image_name=None):
if image_name is None:
image_name = self.image_name
@@ -810,13 +850,16 @@ def main():
push=dict(type='bool', default=False),
path=dict(type='str'),
force=dict(type='bool', default=False),
- state=dict(type='str', default='present', choices=['absent', 'present', 'build']),
+ state=dict(type='str', default='present', choices=['absent', 'present', 'build', 'quadlet']),
validate_certs=dict(type='bool', aliases=['tlsverify', 'tls_verify']),
executable=dict(type='str', default='podman'),
auth_file=dict(type='path', aliases=['authfile']),
username=dict(type='str'),
password=dict(type='str', no_log=True),
ca_cert_dir=dict(type='path'),
+ quadlet_dir=dict(type='path', required=False),
+ quadlet_filename=dict(type='str'),
+ quadlet_options=dict(type='list', elements='str', required=False),
build=dict(
type='dict',
aliases=['build_args', 'buildargs'],
diff --git a/ansible_collections/containers/podman/plugins/modules/podman_image_info.py b/ansible_collections/containers/podman/plugins/modules/podman_image_info.py
index d8af08814..02b0f9ed1 100644
--- a/ansible_collections/containers/podman/plugins/modules/podman_image_info.py
+++ b/ansible_collections/containers/podman/plugins/modules/podman_image_info.py
@@ -48,7 +48,7 @@ RETURN = r"""
images:
description: info from all or specified images
returned: always
- type: dict
+ type: list
sample: [
{
"Annotations": {},
diff --git a/ansible_collections/containers/podman/plugins/modules/podman_login.py b/ansible_collections/containers/podman/plugins/modules/podman_login.py
index 8ae8418a9..25bdb8d99 100644
--- a/ansible_collections/containers/podman/plugins/modules/podman_login.py
+++ b/ansible_collections/containers/podman/plugins/modules/podman_login.py
@@ -154,10 +154,7 @@ def main():
supports_check_mode=True,
required_together=(
['username', 'password'],
- ),
- mutually_exclusive=(
- ['certdir', 'tlsverify'],
- ),
+ )
)
registry = module.params['registry']
diff --git a/ansible_collections/containers/podman/plugins/modules/podman_network.py b/ansible_collections/containers/podman/plugins/modules/podman_network.py
index 3f52af4ce..37bfefede 100644
--- a/ansible_collections/containers/podman/plugins/modules/podman_network.py
+++ b/ansible_collections/containers/podman/plugins/modules/podman_network.py
@@ -127,11 +127,30 @@ options:
choices:
- present
- absent
+ - quadlet
recreate:
description:
- Recreate network even if exists.
type: bool
default: false
+ quadlet_dir:
+ description:
+ - Path to the directory to write quadlet file in.
+ By default, it will be set as C(/etc/containers/systemd/) for root user,
+ C(~/.config/containers/systemd/) for non-root users.
+ type: path
+ required: false
+ quadlet_filename:
+ description:
+ - Name of quadlet file to write. By default it takes I(name) value.
+ type: str
+ quadlet_options:
+ description:
+ - Options for the quadlet file. Provide missing in usual network args
+ options as a list of lines to add.
+ type: list
+ elements: str
+ required: false
"""
EXAMPLES = r"""
@@ -148,6 +167,14 @@ EXAMPLES = r"""
subnet: 192.168.22.0/24
gateway: 192.168.22.1
become: true
+
+- name: Create Quadlet file for podman network
+ containers.podman.podman_network:
+ name: podman_network
+ state: quadlet
+ quadlet_options:
+ - IPv6=true
+ - Label="ipv6 network"
"""
RETURN = r"""
@@ -197,7 +224,7 @@ network:
]
"""
-import json # noqa: F402
+import json
try:
import ipaddress
HAS_IP_ADDRESS_MODULE = True
@@ -208,6 +235,7 @@ from ansible.module_utils.basic import AnsibleModule # noqa: F402
from ansible.module_utils._text import to_bytes, to_native # noqa: F402
from ansible_collections.containers.podman.plugins.module_utils.podman.common import LooseVersion
from ansible_collections.containers.podman.plugins.module_utils.podman.common import lower_keys
+from ansible_collections.containers.podman.plugins.module_utils.podman.quadlet import create_quadlet_state
class PodmanNetworkModuleParams:
@@ -620,6 +648,7 @@ class PodmanNetworkManager:
states_map = {
'present': self.make_present,
'absent': self.make_absent,
+ 'quadlet': self.make_quadlet,
}
process_action = states_map[self.state]
process_action()
@@ -652,12 +681,17 @@ class PodmanNetworkManager:
'podman_actions': self.network.actions})
self.module.exit_json(**self.results)
+ def make_quadlet(self):
+ results_update = create_quadlet_state(self.module, "network")
+ self.results.update(results_update)
+ self.module.exit_json(**self.results)
+
def main():
module = AnsibleModule(
argument_spec=dict(
state=dict(type='str', default="present",
- choices=['present', 'absent']),
+ choices=['present', 'absent', 'quadlet']),
name=dict(type='str', required=True),
disable_dns=dict(type='bool', required=False),
driver=dict(type='str', required=False),
@@ -681,6 +715,9 @@ def main():
executable=dict(type='str', required=False, default='podman'),
debug=dict(type='bool', default=False),
recreate=dict(type='bool', default=False),
+ quadlet_dir=dict(type='path', required=False),
+ quadlet_filename=dict(type='str', required=False),
+ quadlet_options=dict(type='list', elements='str', required=False),
),
required_by=dict( # for IP range and GW to set 'subnet' is required
ip_range=('subnet'),
diff --git a/ansible_collections/containers/podman/plugins/modules/podman_play.py b/ansible_collections/containers/podman/plugins/modules/podman_play.py
index 10a9a06fa..66138efc0 100644
--- a/ansible_collections/containers/podman/plugins/modules/podman_play.py
+++ b/ansible_collections/containers/podman/plugins/modules/podman_play.py
@@ -103,7 +103,8 @@ options:
required: false
tag:
description:
- - specify a custom log tag for the container. This option is currently supported only by the journald log driver in Podman.
+ - Specify a custom log tag for the container.
+ This option is currently supported only by the journald log driver in Podman.
type: str
required: false
log_level:
@@ -131,6 +132,7 @@ options:
- created
- started
- absent
+ - quadlet
required: True
tls_verify:
description:
@@ -158,6 +160,24 @@ options:
An empty value ("") means user namespaces are disabled.
required: false
type: str
+ quadlet_dir:
+ description:
+ - Path to the directory to write quadlet file in.
+ By default, it will be set as C(/etc/containers/systemd/) for root user,
+ C(~/.config/containers/systemd/) for non-root users.
+ type: path
+ required: false
+ quadlet_filename:
+ description:
+ - Name of quadlet file to write. Must be specified if state is quadlet.
+ type: str
+ quadlet_options:
+ description:
+ - Options for the quadlet file. Provide missing in usual network args
+ options as a list of lines to add.
+ type: list
+ elements: str
+ required: false
'''
EXAMPLES = '''
@@ -178,6 +198,19 @@ EXAMPLES = '''
log_opt:
path: /tmp/my-container.log
max_size: 10mb
+
+- name: Create a Quadlet file
+ containers.podman.podman_play:
+ kube_file: ~/kube.yaml
+ state: quadlet
+ annotations:
+ greeting: hello
+ greet_to: world
+ userns: host
+ quadlet_filename: kube-pod
+ quadlet_options:
+ - "SetWorkingDirectory=yaml"
+ - "ExitCodePropagation=any"
'''
import re # noqa: F402
try:
@@ -187,6 +220,8 @@ except ImportError:
HAS_YAML = False
from ansible.module_utils.basic import AnsibleModule # noqa: F402
+from ansible_collections.containers.podman.plugins.module_utils.podman.common import LooseVersion, get_podman_version
+from ansible_collections.containers.podman.plugins.module_utils.podman.quadlet import create_quadlet_state # noqa: F402
class PodmanKubeManagement:
@@ -196,11 +231,12 @@ class PodmanKubeManagement:
self.actions = []
self.executable = executable
self.command = [self.executable, 'play', 'kube']
+ self.version = get_podman_version(module)
creds = []
# pod_name = extract_pod_name(module.params['kube_file'])
if self.module.params['annotation']:
for k, v in self.module.params['annotation'].items():
- self.command.extend(['--annotation', '"{k}={v}"'.format(k=k, v=v)])
+ self.command.extend(['--annotation', '{k}={v}'.format(k=k, v=v)])
if self.module.params['username']:
creds += [self.module.params['username']]
if self.module.params['password']:
@@ -244,17 +280,31 @@ class PodmanKubeManagement:
self.module.log('PODMAN-PLAY-KUBE rc: %s' % rc)
return rc, out, err
+ def tear_down_pods(self):
+ '''
+ Tear down the pod and contaiers by using --down option in kube play
+ which is supported since Podman 3.4.0
+ '''
+ changed = False
+ kube_file = self.module.params['kube_file']
+
+ rc, out, err = self._command_run([self.executable, "kube", "play", "--down", kube_file])
+ if rc != 0:
+ self.module.fail_json(msg="Failed to delete Pod with %s" % (kube_file))
+ else:
+ changed = True
+
+ return changed, out, err
+
def discover_pods(self):
pod_name = ''
if self.module.params['kube_file']:
if HAS_YAML:
with open(self.module.params['kube_file']) as f:
- pod = yaml.safe_load(f)
- if 'metadata' in pod:
- pod_name = pod['metadata'].get('name')
- else:
- self.module.fail_json(
- "No metadata in Kube file!\n%s" % pod)
+ pods = list(yaml.safe_load_all(f))
+ for pod in pods:
+ if 'metadata' in pod and pod['kind'] in ['Deployment', 'Pod']:
+ pod_name = pod['metadata'].get('name')
else:
with open(self.module.params['kube_file']) as text:
# the following formats are matched for a kube name:
@@ -266,7 +316,7 @@ class PodmanKubeManagement:
if re_pod:
pod_name = re_pod.group(1)
if not pod_name:
- self.module.fail_json("Deployment doesn't have a name!")
+ self.module.fail_json("This Kube file doesn't have Pod or Deployment!")
# Find all pods
all_pods = ''
# In case of one pod or replicasets
@@ -294,8 +344,12 @@ class PodmanKubeManagement:
return changed, out_all, err_all
def pod_recreate(self):
- pods = self.discover_pods()
- self.remove_associated_pods(pods)
+ if self.version is not None and LooseVersion(self.version) >= LooseVersion('3.4.0'):
+ self.tear_down_pods()
+ else:
+ pods = self.discover_pods()
+ self.remove_associated_pods(pods)
+
# Create a pod
rc, out, err = self._command_run(self.command)
if rc != 0:
@@ -318,6 +372,12 @@ class PodmanKubeManagement:
changed = True
return changed, out, err
+ def make_quadlet(self):
+ results = {"changed": False}
+ results_update = create_quadlet_state(self.module, "kube")
+ results.update(results_update)
+ self.module.exit_json(**results)
+
def main():
module = AnsibleModule(
@@ -341,7 +401,7 @@ def main():
network=dict(type='list', elements='str'),
state=dict(
type='str',
- choices=['started', 'created', 'absent'],
+ choices=['started', 'created', 'absent', 'quadlet'],
required=True),
tls_verify=dict(type='bool'),
debug=dict(type='bool'),
@@ -351,16 +411,28 @@ def main():
log_level=dict(
type='str',
choices=["debug", "info", "warn", "error", "fatal", "panic"]),
+ quadlet_dir=dict(type='path', required=False),
+ quadlet_filename=dict(type='str', required=False),
+ quadlet_options=dict(type='list', elements='str', required=False),
),
supports_check_mode=True,
+ required_if=[
+ ('state', 'quadlet', ['quadlet_filename']),
+ ],
)
executable = module.get_bin_path(
module.params['executable'], required=True)
manage = PodmanKubeManagement(module, executable)
if module.params['state'] == 'absent':
- pods = manage.discover_pods()
- changed, out, err = manage.remove_associated_pods(pods)
+ if manage.version is not None and LooseVersion(manage.version) > LooseVersion('3.4.0'):
+ manage.module.log(msg="version: %s, kube file %s" % (manage.version, manage.module.params['kube_file']))
+ changed, out, err = manage.tear_down_pods()
+ else:
+ pods = manage.discover_pods()
+ changed, out, err = manage.remove_associated_pods(pods)
+ elif module.params['state'] == 'quadlet':
+ manage.make_quadlet()
else:
changed, out, err = manage.play()
results = {
diff --git a/ansible_collections/containers/podman/plugins/modules/podman_pod.py b/ansible_collections/containers/podman/plugins/modules/podman_pod.py
index 7b57fd302..a975921ea 100644
--- a/ansible_collections/containers/podman/plugins/modules/podman_pod.py
+++ b/ansible_collections/containers/podman/plugins/modules/podman_pod.py
@@ -30,6 +30,7 @@ options:
- stopped
- paused
- unpaused
+ - quadlet
recreate:
description:
- Use with present and started states to force the re-creation of an
@@ -340,6 +341,22 @@ options:
required: false
aliases:
- ports
+ quadlet_dir:
+ description:
+ - Path to the directory to write quadlet file in.
+ By default, it will be set as C(/etc/containers/systemd/) for root user,
+ C(~/.config/containers/systemd/) for non-root users.
+ type: path
+ quadlet_filename:
+ description:
+ - Name of quadlet file to write. By default it takes I(name) value.
+ type: str
+ quadlet_options:
+ description:
+ - Options for the quadlet file. Provide missing in usual container args
+ options as a list of lines to add.
+ type: list
+ elements: str
share:
description:
- A comma delimited list of kernel namespaces to share. If none or "" is specified,
@@ -435,7 +452,7 @@ pod:
EXAMPLES = '''
# What modules does for example
-- podman_pod:
+- containers.podman.podman_pod:
name: pod1
state: started
ports:
@@ -447,6 +464,16 @@ EXAMPLES = '''
name: pod2
state: started
publish: "127.0.0.1::80"
+
+# Create a Quadlet file for a pod
+- containers.podman.podman_pod:
+ name: qpod
+ state: quadlet
+ ports:
+ - "4444:5555"
+ volume:
+ - /var/run/docker.sock:/var/run/docker.sock
+ quadlet_dir: /custom/dir
'''
from ansible.module_utils.basic import AnsibleModule # noqa: F402
from ..module_utils.podman.podman_pod_lib import PodmanPodManager # noqa: F402
@@ -454,9 +481,7 @@ from ..module_utils.podman.podman_pod_lib import ARGUMENTS_SPEC_POD # noqa: F40
def main():
- module = AnsibleModule(
- argument_spec=ARGUMENTS_SPEC_POD
- )
+ module = AnsibleModule(argument_spec=ARGUMENTS_SPEC_POD)
results = PodmanPodManager(module, module.params).execute()
module.exit_json(**results)
diff --git a/ansible_collections/containers/podman/plugins/modules/podman_pod_info.py b/ansible_collections/containers/podman/plugins/modules/podman_pod_info.py
index 8b2a4bf06..8597ae98d 100644
--- a/ansible_collections/containers/podman/plugins/modules/podman_pod_info.py
+++ b/ansible_collections/containers/podman/plugins/modules/podman_pod_info.py
@@ -109,9 +109,12 @@ def get_pod_info(module, executable, name):
rc, out, err = module.run_command(command + [pod])
errs.append(err.strip())
rcs += [rc]
- if not out or json.loads(out) is None or not json.loads(out):
+ data = json.loads(out) if out else None
+ if isinstance(data, list) and data:
+ data = data[0]
+ if not out or data is None or not data:
continue
- result.append(json.loads(out))
+ result.append(data)
return result, errs, rcs
diff --git a/ansible_collections/containers/podman/plugins/modules/podman_volume.py b/ansible_collections/containers/podman/plugins/modules/podman_volume.py
index b4d5062fa..0b990354a 100644
--- a/ansible_collections/containers/podman/plugins/modules/podman_volume.py
+++ b/ansible_collections/containers/podman/plugins/modules/podman_volume.py
@@ -24,6 +24,7 @@ options:
choices:
- present
- absent
+ - quadlet
recreate:
description:
- Recreate volume even if exists.
@@ -62,6 +63,24 @@ options:
- Return additional information which can be helpful for investigations.
type: bool
default: False
+ quadlet_dir:
+ description:
+ - Path to the directory to write quadlet file in.
+ By default, it will be set as C(/etc/containers/systemd/) for root user,
+ C(~/.config/containers/systemd/) for non-root users.
+ type: path
+ required: false
+ quadlet_filename:
+ description:
+ - Name of quadlet file to write. By default it takes I(name) value.
+ type: str
+ quadlet_options:
+ description:
+ - Options for the quadlet file. Provide missing in usual network args
+ options as a list of lines to add.
+ type: list
+ elements: str
+ required: false
requirements:
- "podman"
@@ -88,7 +107,8 @@ volume:
EXAMPLES = '''
# What modules does for example
-- podman_volume:
+- name: Create a volume
+ containers.podman.podman_volume:
state: present
name: volume1
label:
@@ -97,6 +117,17 @@ EXAMPLES = '''
options:
- "device=/dev/loop1"
- "type=ext4"
+
+- name: Create a Quadlet file for a volume
+ containers.podman.podman_volume:
+ state: quadlet
+ name: quadlet_volume
+ quadlet_filename: custom-name
+ quadlet_options:
+ - Group=192
+ - Copy=true
+ - Image=quay.io/centos/centos:latest
+
'''
# noqa: F402
import json # noqa: F402
@@ -105,6 +136,7 @@ from ansible.module_utils.basic import AnsibleModule # noqa: F402
from ansible.module_utils._text import to_bytes, to_native # noqa: F402
from ansible_collections.containers.podman.plugins.module_utils.podman.common import LooseVersion
from ansible_collections.containers.podman.plugins.module_utils.podman.common import lower_keys
+from ansible_collections.containers.podman.plugins.module_utils.podman.quadlet import create_quadlet_state
class PodmanVolumeModuleParams:
@@ -436,6 +468,7 @@ class PodmanVolumeManager:
states_map = {
'present': self.make_present,
'absent': self.make_absent,
+ 'quadlet': self.make_quadlet,
}
process_action = states_map[self.state]
process_action()
@@ -468,12 +501,17 @@ class PodmanVolumeManager:
'podman_actions': self.volume.actions})
self.module.exit_json(**self.results)
+ def make_quadlet(self):
+ results_update = create_quadlet_state(self.module, "volume")
+ self.results.update(results_update)
+ self.module.exit_json(**self.results)
+
def main():
module = AnsibleModule(
argument_spec=dict(
state=dict(type='str', default="present",
- choices=['present', 'absent']),
+ choices=['present', 'absent', 'quadlet']),
name=dict(type='str', required=True),
label=dict(type='dict', required=False),
driver=dict(type='str', required=False),
@@ -481,6 +519,9 @@ def main():
recreate=dict(type='bool', default=False),
executable=dict(type='str', required=False, default='podman'),
debug=dict(type='bool', default=False),
+ quadlet_dir=dict(type='path', required=False),
+ quadlet_filename=dict(type='str', required=False),
+ quadlet_options=dict(type='list', elements='str', required=False),
))
PodmanVolumeManager(module).execute()
diff --git a/ansible_collections/containers/podman/tests/integration/targets/podman_container/tasks/main.yml b/ansible_collections/containers/podman/tests/integration/targets/podman_container/tasks/main.yml
index a6fd44083..02d664afa 100644
--- a/ansible_collections/containers/podman/tests/integration/targets/podman_container/tasks/main.yml
+++ b/ansible_collections/containers/podman/tests/integration/targets/podman_container/tasks/main.yml
@@ -15,6 +15,11 @@
podman_version: 4
when: podman_v.stdout is version('4.0.0', '>=')
+ - name: Set podman version to 5
+ set_fact:
+ podman_version: 5
+ when: podman_v.stdout is version('5.0.0', '>=')
+
- name: Delete all container leftovers from tests
containers.podman.podman_container:
executable: "{{ test_executable | default('podman') }}"
@@ -702,7 +707,7 @@
path: /tmp/containzzzzcontainer1.service
register: service_file
- - name: Check that container has correct systemd output v4
+ - name: Check that container has correct systemd output v4 and quadlet
assert:
that:
- system14.podman_systemd.keys() | list | first == 'containzzzzcontainer1'
@@ -712,6 +717,11 @@
- "'autogenerated by Podman' not in system14.podman_systemd.values() | list | first"
- "'RestartSec=10' in system14.podman_systemd.values() | list | first"
- "'TimeoutStartSec=20' in system14.podman_systemd.values() | list | first"
+ - system14.podman_quadlet | length > 0
+ - system14.podman_quadlet | length > 0
+ - "'ContainerName=container1' in system14.podman_quadlet"
+ - "'Image=alpine' in system14.podman_quadlet"
+
when: podman_version == 4
- name: Check that container has correct systemd output v3
@@ -855,9 +865,14 @@
dest: "{{ container_tempdir.path }}/latest-releases.yaml"
register: alpine_releases_file
+ - name: Get content of alpine releases file
+ ansible.builtin.slurp:
+ src: "{{ container_tempdir.path }}/latest-releases.yaml"
+ register: latest_releases_file
+
- name: Download alpine latest rootfs
vars:
- latest_releases: "{{ lookup('file', alpine_releases_file.dest) }}"
+ latest_releases: "{{ latest_releases_file.content | b64decode }}"
latest_version: "{{ (latest_releases | from_yaml)[0].version }}"
latest_branch: "{{ (latest_releases | from_yaml)[0].branch }}"
ansible.builtin.unarchive:
@@ -1075,6 +1090,264 @@
- attach3 is failed
- "'No such file or directory' in attach3.stderr"
+ - name: Create a Quadlet for container with filename
+ containers.podman.podman_container:
+ executable: "{{ test_executable | default('podman') }}"
+ name: container-quadlet
+ image: alpine
+ state: quadlet
+ quadlet_dir: /tmp
+ quadlet_filename: customfile
+
+ - name: Check if files exists
+ stat:
+ path: /tmp/customfile.container
+ register: quadlet_file_custom
+
+ - name: Fail if no file is present
+ assert:
+ that:
+ - quadlet_file_custom.stat.exists
+
+ - name: Create a Quadlet for container with filename w/o dir
+ containers.podman.podman_container:
+ executable: "{{ test_executable | default('podman') }}"
+ name: container-quadlet
+ image: alpine
+ state: quadlet
+ quadlet_filename: container11.container
+
+ - name: Check if files exists
+ stat:
+ path: ~/.config/containers/systemd/container11.container
+ register: quadlet_file_custom2
+
+ - name: Fail if no file is present
+ assert:
+ that:
+ - quadlet_file_custom2.stat.exists
+
+ - name: Create a Quadlet for container with filename w/o dir
+ containers.podman.podman_container:
+ executable: "{{ test_executable | default('podman') }}"
+ name: container-quadlet
+ image: alpine
+ state: quadlet
+
+ - name: Check if files exists
+ stat:
+ path: ~/.config/containers/systemd/container-quadlet.container
+ register: quadlet_file_custom3
+
+ - name: Fail if no file is present
+ assert:
+ that:
+ - quadlet_file_custom3.stat.exists
+
+ - name: Create a Quadlet for container
+ containers.podman.podman_container:
+ executable: "{{ test_executable | default('podman') }}"
+ name: container-quadlet
+ image: alpine:3.12
+ state: quadlet
+ quadlet_dir: /tmp
+ command: sleep 1d
+ recreate: true
+ etc_hosts:
+ host1: 127.0.0.1
+ host2: 127.0.0.1
+ annotation:
+ this: "annotation_value"
+ dns:
+ - 1.1.1.1
+ - 8.8.4.4
+ dns_search: example.com
+ cap_add:
+ - SYS_TIME
+ - NET_ADMIN
+ publish:
+ - "9000:80"
+ - "9001:8000"
+ workdir: "/bin"
+ env:
+ FOO: bar=1
+ BAR: foo
+ TEST: 1
+ BOOL: false
+ label:
+ somelabel: labelvalue
+ otheralbe: othervalue
+ volumes:
+ - /tmp:/data
+ mounts:
+ - type=devpts,destination=/dev/pts
+ quadlet_options:
+ - AutoUpdate=registry
+ - Unmask=ALL
+ - SecurityLabelFileType=usr_t
+ - Annotation=key1=annotation_value1
+ - Annotation=key2=annotation_value2
+ - |
+ [Install]
+ WantedBy=default.target
+
+ - name: Check if files exists
+ stat:
+ path: /tmp/container-quadlet.container
+ register: quadlet_file
+
+ - name: Check output is correct for Quadlet container in /tmp/container-quadlet.container file
+ assert:
+ that:
+ - quadlet_file.stat.exists
+
+ - name: Check for the existence of lines in /tmp/container-quadlet.container
+ lineinfile:
+ path: /tmp/container-quadlet.container
+ line: "{{ item }}"
+ state: present
+ check_mode: yes
+ register: line_check
+ loop:
+ - "[Container]"
+ - "Annotation=this=annotation_value"
+ - "Annotation=key1=annotation_value1"
+ - "Annotation=key2=annotation_value2"
+ - "ContainerName=container-quadlet"
+ - "Image=alpine:3.12"
+ - "Exec=sleep 1d"
+ - "Volume=/tmp:/data"
+ - "Mount=type=devpts,destination=/dev/pts"
+ - "WorkingDir=/bin"
+ - "Unmask=ALL"
+ - "SecurityLabelFileType=usr_t"
+ - "Environment=BOOL=False"
+ - "PublishPort=9001:8000"
+ - "PodmanArgs=--add-host host2:127.0.0.1"
+ - "Label=somelabel=labelvalue"
+ - "WantedBy=default.target"
+ loop_control:
+ label: "{{ item }}"
+
+ - name: Fail the task if any line is not present
+ fail:
+ msg: "The following line is not present in /tmp/container-quadlet.container: {{ item.item }}"
+ when: item.changed
+ loop: "{{ line_check.results }}"
+ loop_control:
+ label: "{{ item.item }}"
+
+ - name: Create a Quadlet for container - same
+ containers.podman.podman_container:
+ executable: "{{ test_executable | default('podman') }}"
+ name: container-quadlet
+ image: alpine:3.12
+ state: quadlet
+ quadlet_dir: /tmp
+ command: sleep 1d
+ recreate: true
+ etc_hosts:
+ host1: 127.0.0.1
+ host2: 127.0.0.1
+ annotation:
+ this: "annotation_value"
+ dns:
+ - 1.1.1.1
+ - 8.8.4.4
+ dns_search: example.com
+ cap_add:
+ - SYS_TIME
+ - NET_ADMIN
+ publish:
+ - "9000:80"
+ - "9001:8000"
+ workdir: "/bin"
+ env:
+ FOO: bar=1
+ BAR: foo
+ TEST: 1
+ BOOL: false
+ label:
+ somelabel: labelvalue
+ otheralbe: othervalue
+ volumes:
+ - /tmp:/data
+ mounts:
+ - type=devpts,destination=/dev/pts
+ quadlet_options:
+ - AutoUpdate=registry
+ - Unmask=ALL
+ - SecurityLabelFileType=usr_t
+ - Annotation=key1=annotation_value1
+ - Annotation=key2=annotation_value2
+ - |
+ [Install]
+ WantedBy=default.target
+ register: quad2
+
+ - name: Check if quadlet changed
+ assert:
+ that:
+ - quad2 is not changed
+
+ - name: Create a Quadlet for container - different
+ containers.podman.podman_container:
+ executable: "{{ test_executable | default('podman') }}"
+ name: container-quadlet
+ image: alpine:3.12
+ state: quadlet
+ quadlet_dir: /tmp
+ command: sleep 1d
+ recreate: true
+ etc_hosts:
+ host1: 127.0.0.45
+ host2: 127.0.0.1
+ annotation:
+ this: "annotation_value"
+ dns:
+ - 1.1.1.1
+ - 8.8.4.4
+ dns_search: example.com
+ cap_add:
+ - SYS_TIME
+ - NET_ADMIN
+ publish:
+ - "9000:80"
+ - "9001:8000"
+ workdir: "/bin"
+ env:
+ FOO: bar=1
+ BAR: foo
+ TEST: 1
+ BOOL: false
+ label:
+ somelabel: labelvalue
+ otheralbe: othervalue
+ volumes:
+ - /tmp:/data
+ mounts:
+ - type=devpts,destination=/dev/pts
+ quadlet_options:
+ - AutoUpdate=registry
+ - Unmask=ALL
+ - SecurityLabelFileType=usr_t
+ - Annotation=key1=annotation_value1
+ - Annotation=key2=annotation_value2
+ - |
+ [Install]
+ WantedBy=default.target
+ register: quad3
+
+ - name: Print diff
+ debug:
+ var: quad3.diff
+
+ - name: Check if changed and diff
+ assert:
+ that:
+ - quad3 is changed
+ - "'127.0.0.45' in quad3.diff.after"
+
always:
- name: Remove container
diff --git a/ansible_collections/containers/podman/tests/integration/targets/podman_container_exec/tasks/main.yml b/ansible_collections/containers/podman/tests/integration/targets/podman_container_exec/tasks/main.yml
index 2d2874325..623965c10 100644
--- a/ansible_collections/containers/podman/tests/integration/targets/podman_container_exec/tasks/main.yml
+++ b/ansible_collections/containers/podman/tests/integration/targets/podman_container_exec/tasks/main.yml
@@ -12,6 +12,7 @@
- name: Test exec when the container doesn't exist
containers.podman.podman_container_exec:
+ executable: "{{ test_executable | default('podman') }}"
name: "{{ container_name }}"
command: "cat /etc/redhat-release"
ignore_errors: true
@@ -19,6 +20,7 @@
- name: Create and start a container for testing
containers.podman.podman_container:
+ executable: "{{ test_executable | default('podman') }}"
name: "{{ container_name }}"
image: registry.access.redhat.com/ubi8
command: sleep 1d
@@ -26,6 +28,7 @@
- name: Test exec with command and workdir options
containers.podman.podman_container_exec:
+ executable: "{{ test_executable | default('podman') }}"
name: "{{ container_name }}"
command: "cat redhat-release"
workdir: /etc
@@ -33,6 +36,7 @@
- name: Test exec with argv and env options
containers.podman.podman_container_exec:
+ executable: "{{ test_executable | default('podman') }}"
name: "{{ container_name }}"
argv:
- /bin/sh
@@ -45,6 +49,7 @@
- name: Test exec with detach option
containers.podman.podman_container_exec:
+ executable: "{{ test_executable | default('podman') }}"
name: "{{ container_name }}"
command: "cat redhat-release"
detach: true
@@ -59,6 +64,21 @@
- "'goodbye world' in exec2.stdout"
- exec3.exec_id is defined
+ - name: Test exec with failing command
+ containers.podman.podman_container_exec:
+ executable: "{{ test_executable | default('podman') }}"
+ name: "{{ container_name }}"
+ command: "ls /nonexistent"
+ register: exec4
+ ignore_errors: true
+
+ - name: Check if the result is as expected in case of a failing command
+ assert:
+ that:
+ - exec4 is failed
+ - "'No such file or directory' in exec4.stderr"
+ - exec4.rc != 0
+
always:
- name: Cleanup
containers.podman.podman_container:
diff --git a/ansible_collections/containers/podman/tests/integration/targets/podman_container_idempotency/tasks/main.yml b/ansible_collections/containers/podman/tests/integration/targets/podman_container_idempotency/tasks/main.yml
index 3d3654aea..02b66d250 100644
--- a/ansible_collections/containers/podman/tests/integration/targets/podman_container_idempotency/tasks/main.yml
+++ b/ansible_collections/containers/podman/tests/integration/targets/podman_container_idempotency/tasks/main.yml
@@ -1,4 +1,24 @@
---
+
+- name: Discover podman version
+ shell: podman version | grep "^Version:" | awk {'print $2'}
+ register: podman_v
+
+- name: Set podman version to 3
+ set_fact:
+ podman_version: 3
+ when: podman_v.stdout is version('4.0.0', 'lt')
+
+- name: Set podman version to 4
+ set_fact:
+ podman_version: 4
+ when: podman_v.stdout is version('4.0.0', '>=')
+
+- name: Set podman version to 5
+ set_fact:
+ podman_version: 5
+ when: podman_v.stdout is version('5.0.0', '>=')
+
- name: Prepare a container
include_tasks: build_test_container.yml
diff --git a/ansible_collections/containers/podman/tests/integration/targets/podman_container_idempotency/tasks/rootless-podman-network.yml b/ansible_collections/containers/podman/tests/integration/targets/podman_container_idempotency/tasks/rootless-podman-network.yml
index 62dd3a5a0..3c16efac2 100644
--- a/ansible_collections/containers/podman/tests/integration/targets/podman_container_idempotency/tasks/rootless-podman-network.yml
+++ b/ansible_collections/containers/podman/tests/integration/targets/podman_container_idempotency/tasks/rootless-podman-network.yml
@@ -109,53 +109,108 @@
that:
- info5 is changed
- - name: Run container with slirp4netns options
- containers.podman.podman_container:
- executable: "{{ test_executable | default('podman') }}"
- name: rootlessnet
- image: "{{ idem_image }}"
- command: 1h
- state: present
- network:
- - slirp4netns:allow_host_loopback=true,cidr=10.0.3.0/24
- register: info6
+ - when: podman_version < 5
+ name: Run container tasks with slirp4netns options before v5
+ block:
+ - name: Run container with slirp4netns options
+ containers.podman.podman_container:
+ executable: "{{ test_executable | default('podman') }}"
+ name: rootlessnet
+ image: "{{ idem_image }}"
+ command: 1h
+ state: present
+ network:
+ - slirp4netns:allow_host_loopback=true,cidr=10.0.3.0/24
+ register: info6
- - name: Check info with slirp4netns options
- assert:
- that:
- - info6 is changed
+ - name: Check info with slirp4netns options
+ assert:
+ that:
+ - info6 is changed
- - name: Run container with slirp4netns options - again
- containers.podman.podman_container:
- executable: "{{ test_executable | default('podman') }}"
- name: rootlessnet
- image: "{{ idem_image }}"
- command: 1h
- state: present
- network:
- - slirp4netns:allow_host_loopback=true,cidr=10.0.3.0/24
- register: info7
+ - name: Run container with slirp4netns options - again
+ containers.podman.podman_container:
+ executable: "{{ test_executable | default('podman') }}"
+ name: rootlessnet
+ image: "{{ idem_image }}"
+ command: 1h
+ state: present
+ network:
+ - slirp4netns:allow_host_loopback=true,cidr=10.0.3.0/24
+ register: info7
- - name: Check info with slirp4netns options - again
- assert:
- that:
- - info7 is not changed
+ - name: Check info with slirp4netns options - again
+ assert:
+ that:
+ - info7 is not changed
- - name: Run container with different slirp4netns options
- containers.podman.podman_container:
- executable: "{{ test_executable | default('podman') }}"
- name: rootlessnet
- image: "{{ idem_image }}"
- command: 1h
- state: present
- network:
- - slirp4netns:allow_host_loopback=true,cidr=10.0.4.0/24
- register: info8
+ - name: Run container with different slirp4netns options
+ containers.podman.podman_container:
+ executable: "{{ test_executable | default('podman') }}"
+ name: rootlessnet
+ image: "{{ idem_image }}"
+ command: 1h
+ state: present
+ network:
+ - slirp4netns:allow_host_loopback=true,cidr=10.0.4.0/24
+ register: info8
- - name: Check info with different slirp4netns options
- assert:
- that:
- - info8 is changed
+ - name: Check info with different slirp4netns options
+ assert:
+ that:
+ - info8 is changed
+
+
+ - when: podman_version >= 5
+ name: Run container tasks with pasta options for v5 and later
+ block:
+ - name: Run container with pasta options
+ containers.podman.podman_container:
+ executable: "{{ test_executable | default('podman') }}"
+ name: rootlessnet
+ image: "{{ idem_image }}"
+ command: 1h
+ state: present
+ network:
+ - "pasta:-4,-t,8007,-u,4443,-T,3000"
+ register: info6
+
+ - name: Check info with pasta options
+ assert:
+ that:
+ - info6 is changed
+
+ - name: Run container with pasta options - again
+ containers.podman.podman_container:
+ executable: "{{ test_executable | default('podman') }}"
+ name: rootlessnet
+ image: "{{ idem_image }}"
+ command: 1h
+ state: present
+ network:
+ - "pasta:-4,-t,8007,-u,4443,-T,3000"
+ register: info7
+
+ - name: Check info with pasta options - again
+ assert:
+ that:
+ - info7 is not changed
+
+ - name: Run container with different pasta options
+ containers.podman.podman_container:
+ executable: "{{ test_executable | default('podman') }}"
+ name: rootlessnet
+ image: "{{ idem_image }}"
+ command: 1h
+ state: present
+ network:
+ - "pasta:-4,-t,8008,-u,4443,-T,3000"
+ register: info8
+
+ - name: Check info with different pasta options
+ assert:
+ that:
+ - info8 is changed
- name: Run container without options
containers.podman.podman_container:
diff --git a/ansible_collections/containers/podman/tests/integration/targets/podman_generate_systemd/tasks/main.yml b/ansible_collections/containers/podman/tests/integration/targets/podman_generate_systemd/tasks/main.yml
index 1e48a11dc..6b0c335cd 100644
--- a/ansible_collections/containers/podman/tests/integration/targets/podman_generate_systemd/tasks/main.yml
+++ b/ansible_collections/containers/podman/tests/integration/targets/podman_generate_systemd/tasks/main.yml
@@ -1,11 +1,14 @@
- name: A postgres container must exist, stopped
containers.podman.podman_container:
+ executable: "{{ test_executable | default('podman') }}"
name: postgres_local
image: docker.io/library/postgres:latest
+ # image: quay.io/enterprisedb/postgresql - use if docker is rate limited
state: stopped
- name: Generate the systemd units as Ansible variables
containers.podman.podman_generate_systemd:
+ executable: "{{ test_executable | default('podman') }}"
name: postgres_local
register: postgres_local_systemd_unit
ignore_errors: true
@@ -29,6 +32,7 @@
- name: Regenerate the systemd units and write them
containers.podman.podman_generate_systemd:
+ executable: "{{ test_executable | default('podman') }}"
name: postgres_local
dest: /tmp/podman_generate_systemd
register: postgres_local_systemd_unit
@@ -41,6 +45,7 @@
- name: Try to create a systemd unit file on the same path
containers.podman.podman_generate_systemd:
+ executable: "{{ test_executable | default('podman') }}"
name: postgres_local
dest: /tmp/podman_generate_systemd
register: generate1
@@ -58,6 +63,7 @@
- name: Force to create a systemd unit file on the same path
containers.podman.podman_generate_systemd:
+ executable: "{{ test_executable | default('podman') }}"
name: postgres_local
dest: /tmp/podman_generate_systemd
force: true
@@ -83,6 +89,7 @@
- name: Regenerate the systemd units with all the options
containers.podman.podman_generate_systemd:
+ executable: "{{ test_executable | default('podman') }}"
name: postgres_local
new: true
restart_policy: on-abnormal
@@ -100,7 +107,6 @@
after: drink.service
wants: water.service
requires: ice.service
- executable: /usr/bin/podman
register: postgres_local_systemd_unit
ignore_errors: true
@@ -123,13 +129,14 @@
- postgres_local_systemd_unit.podman_command is search("--after=drink.service")
- postgres_local_systemd_unit.podman_command is search("--wants=water.service")
- postgres_local_systemd_unit.podman_command is search("--requires=ice.service")
- - postgres_local_systemd_unit.podman_command is search("/usr/bin/podman")
+ - postgres_local_systemd_unit.podman_command is search("podman")
- name: Remove container
containers.podman.podman_container:
executable: "{{ test_executable | default('podman') }}"
name: postgres_local
state: absent
+
- name: Remove the systemd unit files directory
ansible.builtin.file:
path: /tmp/podman_generate_systemd
diff --git a/ansible_collections/containers/podman/tests/integration/targets/podman_image/tasks/main.yml b/ansible_collections/containers/podman/tests/integration/targets/podman_image/tasks/main.yml
index 0db4c050c..96133b9da 100644
--- a/ansible_collections/containers/podman/tests/integration/targets/podman_image/tasks/main.yml
+++ b/ansible_collections/containers/podman/tests/integration/targets/podman_image/tasks/main.yml
@@ -329,6 +329,134 @@
- item.Architecture == "arm"
loop: "{{ imageinfo_arch.images }}"
+ - name: Create a Quadlet for image with filename
+ containers.podman.podman_image:
+ executable: "{{ test_executable | default('podman') }}"
+ name: quay.io/coreos/coreos-installer:latest
+ state: quadlet
+ arch: x86_64
+ quadlet_dir: /tmp
+ quadlet_filename: customfile
+
+ - name: Check if files exists
+ stat:
+ path: /tmp/customfile.image
+ register: quadlet_file_custom
+
+ - name: Fail if no file is present
+ assert:
+ that:
+ - quadlet_file_custom.stat.exists
+
+ - name: Create quadlet image file
+ containers.podman.podman_image:
+ executable: "{{ test_executable | default('podman') }}"
+ name: quay.io/coreos/coreos-installer:latest
+ state: quadlet
+ arch: x86_64
+ ca_cert_dir: /etc/docker/certs.d
+ username: user
+ password: pass
+ validate_certs: false
+ quadlet_dir: /tmp/
+ quadlet_options:
+ - "ImageTag=quay.io/coreos/coreos-installer:12345"
+ - "AllTags=true"
+ - |-
+ [Install]
+ WantedBy=default.target
+
+ - name: Check if files exists
+ stat:
+ path: /tmp/coreos-installer.image
+ register: quadlet_file
+
+ - name: Check output is correct for Quadlet image in /tmp/coreos-installer.image file
+ assert:
+ that:
+ - quadlet_file.stat.exists
+
+ - name: Check for the existence of lines in /tmp/coreos-installer.image
+ lineinfile:
+ path: /tmp/coreos-installer.image
+ line: "{{ item }}"
+ state: present
+ check_mode: yes
+ register: line_check
+ loop:
+ - "[Image]"
+ - "Image=quay.io/coreos/coreos-installer:latest"
+ - "ImageTag=quay.io/coreos/coreos-installer:12345"
+ - "AllTags=true"
+ - "WantedBy=default.target"
+ - "Arch=x86_64"
+ - "CertDir=/etc/docker/certs.d"
+ - "Creds=user:pass"
+ - "TLSVerify=false"
+ loop_control:
+ label: "{{ item }}"
+
+ - name: Fail the task if any line is not present
+ fail:
+ msg: "The following line is not present in /tmp/coreos-installer.image: {{ item.item }}"
+ when: item.changed
+ loop: "{{ line_check.results }}"
+ loop_control:
+ label: "{{ item.item }}"
+
+ - name: Create quadlet image file - same
+ containers.podman.podman_image:
+ executable: "{{ test_executable | default('podman') }}"
+ name: quay.io/coreos/coreos-installer:latest
+ state: quadlet
+ arch: x86_64
+ ca_cert_dir: /etc/docker/certs.d
+ username: user
+ password: pass
+ validate_certs: false
+ quadlet_dir: /tmp
+ quadlet_options:
+ - "ImageTag=quay.io/coreos/coreos-installer:12345"
+ - "AllTags=true"
+ - |-
+ [Install]
+ WantedBy=default.target
+ register: quad2
+
+ - name: Check if quadlet changed
+ assert:
+ that:
+ - quad2 is not changed
+
+ - name: Create quadlet image file - different
+ containers.podman.podman_image:
+ executable: "{{ test_executable | default('podman') }}"
+ name: quay.io/coreos/coreos-installer:latest
+ state: quadlet
+ arch: arm64
+ ca_cert_dir: /etc/docker/certs.d
+ username: user
+ password: pass
+ validate_certs: false
+ quadlet_dir: /tmp/
+ quadlet_options:
+ - "ImageTag=quay.io/coreos/coreos-installer:12345"
+ - "AllTags=true"
+ - |-
+ [Install]
+ WantedBy=default.target
+ register: quad3
+
+ - name: Print diff
+ debug:
+ var: quad3.diff
+
+ - name: Check if changed and diff
+ assert:
+ that:
+ - quad3 is changed
+ - "'arm64' in quad3.diff.after"
+
always:
- name: Cleanup images
containers.podman.podman_image:
diff --git a/ansible_collections/containers/podman/tests/integration/targets/podman_network/tasks/main.yml b/ansible_collections/containers/podman/tests/integration/targets/podman_network/tasks/main.yml
index d207e4cef..272ac6b43 100644
--- a/ansible_collections/containers/podman/tests/integration/targets/podman_network/tasks/main.yml
+++ b/ansible_collections/containers/podman/tests/integration/targets/podman_network/tasks/main.yml
@@ -350,6 +350,131 @@
that:
- info17 is not changed
+ - name: Create a Quadlet for network with filename
+ containers.podman.podman_network:
+ executable: "{{ test_executable | default('podman') }}"
+ name: testnet
+ state: quadlet
+ quadlet_dir: /tmp
+ quadlet_filename: customfile
+
+ - name: Check if files exists
+ stat:
+ path: /tmp/customfile.network
+ register: quadlet_file_custom
+
+ - name: Fail if no file is present
+ assert:
+ that:
+ - quadlet_file_custom.stat.exists
+
+ - name: Create quadlet network file
+ containers.podman.podman_network:
+ executable: "{{ test_executable | default('podman') }}"
+ name: testnet
+ state: quadlet
+ disable_dns: true
+ subnet: "10.123.12.0"
+ internal: false
+ opt:
+ isolate: true
+ mtu: 1511
+ vlan: 111
+ quadlet_dir: /tmp
+ quadlet_options:
+ - "Label=Test=network"
+ - "Label=foo=bar"
+
+ - name: Check if files exists
+ stat:
+ path: /tmp/testnet.network
+ register: quadlet_file
+
+ - name: Check output is correct for Quadlet network in /tmp/testnet.network file
+ assert:
+ that:
+ - quadlet_file.stat.exists
+
+ - name: Check for the existence of lines in /tmp/testnet.network
+ lineinfile:
+ path: /tmp/testnet.network
+ line: "{{ item }}"
+ state: present
+ check_mode: yes
+ register: line_check
+ loop:
+ - "[Network]"
+ - "NetworkName=testnet"
+ - "Subnet=10.123.12.0"
+ - "DisableDNS=true"
+ - "Internal=false"
+ - "Options=isolate=True"
+ - "Options=mtu=1511"
+ - "Options=vlan=111"
+ - "Label=Test=network"
+ - "Label=foo=bar"
+ loop_control:
+ label: "{{ item }}"
+
+ - name: Fail the task if any line is not present
+ fail:
+ msg: "The following line is not present in /tmp/testnet.network: {{ item.item }}"
+ when: item.changed
+ loop: "{{ line_check.results }}"
+ loop_control:
+ label: "{{ item.item }}"
+
+ - name: Create quadlet network file - same
+ containers.podman.podman_network:
+ executable: "{{ test_executable | default('podman') }}"
+ name: testnet
+ state: quadlet
+ disable_dns: true
+ subnet: "10.123.12.0"
+ internal: false
+ opt:
+ isolate: true
+ mtu: 1511
+ vlan: 111
+ quadlet_dir: /tmp
+ quadlet_options:
+ - "Label=Test=network"
+ - "Label=foo=bar"
+ register: quad2
+
+ - name: Check if quadlet changed
+ assert:
+ that:
+ - quad2 is not changed
+
+ - name: Create quadlet network file - different
+ containers.podman.podman_network:
+ executable: "{{ test_executable | default('podman') }}"
+ name: testnet
+ state: quadlet
+ disable_dns: true
+ subnet: "10.123.15.0"
+ internal: false
+ opt:
+ isolate: true
+ mtu: 1511
+ vlan: 111
+ quadlet_dir: /tmp
+ quadlet_options:
+ - "Label=Test=network"
+ - "Label=foo=bar"
+ register: quad3
+
+ - name: Print diff
+ debug:
+ var: quad3.diff
+
+ - name: Check if changed and diff
+ assert:
+ that:
+ - quad3 is changed
+ - "'10.123.15.0' in quad3.diff.after"
+
always:
- name: Cleanup
diff --git a/ansible_collections/containers/podman/tests/integration/targets/podman_play/tasks/files/multi-yaml.yml b/ansible_collections/containers/podman/tests/integration/targets/podman_play/tasks/files/multi-yaml.yml
new file mode 100644
index 000000000..2a969556b
--- /dev/null
+++ b/ansible_collections/containers/podman/tests/integration/targets/podman_play/tasks/files/multi-yaml.yml
@@ -0,0 +1,27 @@
+kind: ConfigMap
+metadata:
+ name: foo
+data:
+ FOO: bar
+---
+apiVersion: v1
+kind: Pod
+metadata:
+ name: foobar
+spec:
+ containers:
+ - command:
+ - top
+ name: container-1
+ image: alpine
+ envFrom:
+ - configMapRef:
+ name: foo
+ optional: false
+---
+apiVersion: v1
+kind: ConfigMap
+metadata:
+ name: foo2
+data:
+ FOO2: bar2 \ No newline at end of file
diff --git a/ansible_collections/containers/podman/tests/integration/targets/podman_play/tasks/main.yml b/ansible_collections/containers/podman/tests/integration/targets/podman_play/tasks/main.yml
index ae9d8572b..d22615e45 100644
--- a/ansible_collections/containers/podman/tests/integration/targets/podman_play/tasks/main.yml
+++ b/ansible_collections/containers/podman/tests/integration/targets/podman_play/tasks/main.yml
@@ -107,6 +107,180 @@
that:
- info1['pods'][0]['State'] == 'Running'
+ - name: Remove pods created by kube play
+ containers.podman.podman_play:
+ executable: "{{ test_executable | default('podman') }}"
+ kube_file: /tmp/play3.yaml
+ state: absent
+ register: remove_pod
+
+ - name: Check if the pod was removed as expected
+ assert:
+ that:
+ - remove_pod is changed
+
+ - name: Get deleted pod info
+ containers.podman.podman_pod_info:
+ executable: "{{ test_executable | default('podman') }}"
+ name: web-deploy-pod
+ register: nonexist
+
+ - name: Check if the result is as expected
+ assert:
+ that:
+ - nonexist.pods == []
+
+
+ - name: Create a Quadlet for kube with filename
+ containers.podman.podman_play:
+ executable: "{{ test_executable | default('podman') }}"
+ kube_file: /home/kubeuser/tmp/multipod.yaml
+ state: quadlet
+ quadlet_dir: /tmp
+ quadlet_filename: customfile
+
+ - name: Check if files exists
+ stat:
+ path: /tmp/customfile.kube
+ register: quadlet_file_custom
+
+ - name: Fail if no file is present
+ assert:
+ that:
+ - quadlet_file_custom.stat.exists
+
+ - name: Create a kube quadlet without filename
+ containers.podman.podman_play:
+ executable: "{{ test_executable | default('podman') }}"
+ kube_file: /home/kubeuser/tmp/multipod.yaml
+ state: quadlet
+ quadlet_dir: /tmp
+ register: quadlet_file_no_name
+ ignore_errors: true
+
+ - name: Check that task failed
+ assert:
+ that:
+ - quadlet_file_no_name is failed
+
+ - name: Create a kube quadlet
+ containers.podman.podman_play:
+ executable: "{{ test_executable | default('podman') }}"
+ kube_file: /home/kubeuser/tmp/multipod.yaml
+ state: quadlet
+ userns: keep-id:uid=200,gid=210
+ log_driver: journald
+ network: host
+ configmap:
+ - /tmp/configmap1
+ - /tmp/configmap2
+ debug: true
+ quadlet_dir: /tmp
+ quadlet_filename: quadlet
+ quadlet_options:
+ - "PodmanArgs=--annotation=key1=value1"
+ - "PodmanArgs=--context-dir /my/path"
+ - |
+ [Install]
+ WantedBy=default.target
+
+ - name: Check if files exists
+ stat:
+ path: /tmp/quadlet.kube
+ register: quadlet_file
+
+ - name: Check output is correct for Quadlet container in /tmp/quadlet.kube file
+ assert:
+ that:
+ - quadlet_file.stat.exists
+
+ - name: Check for the existence of lines in /tmp/quadlet.kube
+ lineinfile:
+ path: /tmp/quadlet.kube
+ line: "{{ item }}"
+ state: present
+ check_mode: yes
+ register: line_check
+ loop:
+ - "[Kube]"
+ - "ConfigMap=/tmp/configmap1"
+ - "ConfigMap=/tmp/configmap2"
+ - "LogDriver=journald"
+ - "Network=host"
+ - "Yaml=/home/kubeuser/tmp/multipod.yaml"
+ - "UserNS=keep-id:uid=200,gid=210"
+ - "GlobalArgs=--log-level debug"
+ - "WantedBy=default.target"
+ loop_control:
+ label: "{{ item }}"
+
+ - name: Fail the task if any line is not present
+ fail:
+ msg: "The following line is not present in /tmp/quadlet.kube: {{ item.item }}"
+ when: item.changed
+ loop: "{{ line_check.results }}"
+ loop_control:
+ label: "{{ item.item }}"
+
+ - name: Create a kube quadlet - same
+ containers.podman.podman_play:
+ executable: "{{ test_executable | default('podman') }}"
+ kube_file: /home/kubeuser/tmp/multipod.yaml
+ state: quadlet
+ userns: keep-id:uid=200,gid=210
+ log_driver: journald
+ network: host
+ configmap:
+ - /tmp/configmap1
+ - /tmp/configmap2
+ debug: true
+ quadlet_dir: /tmp
+ quadlet_filename: quadlet.kube
+ quadlet_options:
+ - "PodmanArgs=--annotation=key1=value1"
+ - "PodmanArgs=--context-dir /my/path"
+ - |
+ [Install]
+ WantedBy=default.target
+ register: quad2
+
+ - name: Check if quadlet changed
+ assert:
+ that:
+ - quad2 is not changed
+
+ - name: Create a kube quadlet - different
+ containers.podman.podman_play:
+ executable: "{{ test_executable | default('podman') }}"
+ kube_file: /home/kubeuser/tmp/multipod.yaml
+ state: quadlet
+ userns: keep-id:uid=200,gid=210
+ log_driver: journald
+ network: host
+ configmap:
+ - /tmp/configmap55
+ - /tmp/configmap2
+ debug: true
+ quadlet_dir: /tmp
+ quadlet_filename: quadlet.kube
+ quadlet_options:
+ - "PodmanArgs=--annotation=key1=value1"
+ - "PodmanArgs=--context-dir /my/path"
+ - |
+ [Install]
+ WantedBy=default.target
+ register: quad3
+
+ - name: Print diff
+ debug:
+ var: quad3.diff
+
+ - name: Check if changed and diff
+ assert:
+ that:
+ - quad3 is changed
+ - "'configmap55' in quad3.diff.after"
+
always:
- name: Delete all pods leftovers from tests
@@ -145,4 +319,12 @@
size: 10mb
userns: host
kube_dir: /tmp
- kube_file: play-pod.yaml \ No newline at end of file
+ kube_file: play-pod.yaml
+
+- name: Test play kube with multi doc yaml
+ include_tasks: play-multi-yaml.yml
+ vars:
+ ansible_python_interpreter: "/usr/bin/python"
+ kube_dir: /tmp
+ kube_file: multi-yaml.yml
+ target_container: foobar-container-1
diff --git a/ansible_collections/containers/podman/tests/integration/targets/podman_play/tasks/play-multi-yaml.yml b/ansible_collections/containers/podman/tests/integration/targets/podman_play/tasks/play-multi-yaml.yml
new file mode 100644
index 000000000..5eae4f5e5
--- /dev/null
+++ b/ansible_collections/containers/podman/tests/integration/targets/podman_play/tasks/play-multi-yaml.yml
@@ -0,0 +1,40 @@
+---
+- name: Test kube play wih multi doc yaml
+ block:
+ - name: Copy kube file
+ copy:
+ src: "{{ kube_file }}"
+ dest: "{{ kube_dir }}/{{ kube_file }}"
+ remote_src: false
+
+ - name: Create Pod with multi doc yaml
+ containers.podman.podman_play:
+ executable: "{{ test_executable | default('podman') }}"
+ kube_file: "{{ kube_dir }}/{{ kube_file }}"
+ state: started
+ recreate: true
+ register: play_pod
+
+ - name: Get pod info
+ containers.podman.podman_container_info:
+ executable: "{{ test_executable | default('podman') }}"
+ name: "{{ target_container }}"
+ register: info
+
+ - name: Check if an expected container is running
+ assert:
+ that:
+ - info.containers.0.State.Running == true
+ - '"FOO=bar" in info.containers.0.Config.Env'
+
+ - name: Cleanup pod
+ containers.podman.podman_play:
+ executable: "{{ test_executable | default('podman') }}"
+ kube_file: "{{ kube_dir }}/{{ kube_file }}"
+ state: absent
+ register: remove_pod
+
+ - name: Check if the pod was removed as expected
+ assert:
+ that:
+ - remove_pod is changed
diff --git a/ansible_collections/containers/podman/tests/integration/targets/podman_play/tasks/play-with-build.yml b/ansible_collections/containers/podman/tests/integration/targets/podman_play/tasks/play-with-build.yml
index e7601f531..32fde5d6a 100644
--- a/ansible_collections/containers/podman/tests/integration/targets/podman_play/tasks/play-with-build.yml
+++ b/ansible_collections/containers/podman/tests/integration/targets/podman_play/tasks/play-with-build.yml
@@ -9,6 +9,7 @@
- name: Make sure that {{ image_name }} image is absent
containers.podman.podman_image:
+ executable: "{{ test_executable | default('podman') }}"
name: "{{ image_name }}"
state: absent
@@ -31,6 +32,7 @@
- name: Play kube file with image build
containers.podman.podman_play:
+ executable: "{{ test_executable | default('podman') }}"
kube_file: "{{ kube_dir }}/kube-buil-test.yaml"
build: true
context_dir: "{{ build_context_dir }}"
@@ -47,5 +49,6 @@
- name: Cleanup pods
containers.podman.podman_play:
+ executable: "{{ test_executable | default('podman') }}"
kube_file: "{{ kube_dir }}/kube-buil-test.yaml"
state: absent
diff --git a/ansible_collections/containers/podman/tests/integration/targets/podman_play/tasks/play-with-options.yml b/ansible_collections/containers/podman/tests/integration/targets/podman_play/tasks/play-with-options.yml
index aeb79a5bc..40167368b 100644
--- a/ansible_collections/containers/podman/tests/integration/targets/podman_play/tasks/play-with-options.yml
+++ b/ansible_collections/containers/podman/tests/integration/targets/podman_play/tasks/play-with-options.yml
@@ -9,6 +9,7 @@
- name: Create Pod with many options
containers.podman.podman_play:
+ executable: "{{ test_executable | default('podman') }}"
kube_file: "{{ kube_dir }}/{{ kube_file }}"
state: started
recreate: true
@@ -23,6 +24,7 @@
- name: Get pod info
containers.podman.podman_pod_info:
+ executable: "{{ test_executable | default('podman') }}"
name: "{{ target_pod }}"
register: play_pod_info
@@ -33,6 +35,7 @@
- name: Get container info
containers.podman.podman_container_info:
+ executable: "{{ test_executable | default('podman') }}"
name: "{{ target_container }}"
register: play_container_info
@@ -48,5 +51,6 @@
- name: Cleanup pods
containers.podman.podman_play:
+ executable: "{{ test_executable | default('podman') }}"
kube_file: "{{ kube_dir }}/{{ kube_file }}"
state: absent
diff --git a/ansible_collections/containers/podman/tests/integration/targets/podman_pod/tasks/main.yml b/ansible_collections/containers/podman/tests/integration/targets/podman_pod/tasks/main.yml
index abee17596..cb455aa23 100644
--- a/ansible_collections/containers/podman/tests/integration/targets/podman_pod/tasks/main.yml
+++ b/ansible_collections/containers/podman/tests/integration/targets/podman_pod/tasks/main.yml
@@ -15,6 +15,21 @@
podman_version: 2
when: podman_v.stdout is version('2.0.0', '>=')
+ - name: Set podman version to 3
+ set_fact:
+ podman_version: 3
+ when: podman_v.stdout is version('3.0.0', '>=')
+
+ - name: Set podman version to 4
+ set_fact:
+ podman_version: 4
+ when: podman_v.stdout is version('4.0.0', '>=')
+
+ - name: Set podman version to 5
+ set_fact:
+ podman_version: 5
+ when: podman_v.stdout is version('5.0.0', '>=')
+
- name: Discover cgroups version
shell: podman info | grep cgroupVersion | awk {'print $2'}
register: cgroups
@@ -153,6 +168,7 @@
pod6_info.pod['State']['status'] == 'Exited') or
(pod6_info.pod['State']['status'] is not defined and
pod6_info.pod['State'] == 'Exited')
+ when: podman_version < 5
- name: Start pod
containers.podman.podman_pod:
@@ -826,69 +842,289 @@
that:
- not podsys2_stat.stat.exists|bool
- - name: Run pod2 with network slirp4netns
+ - name: Run slirp4netns tests for podman < 5
+ when: podman_version < 5
+ block:
+
+ - name: Run pod2 with network slirp4netns
+ containers.podman.podman_pod:
+ executable: "{{ test_executable | default('podman') }}"
+ name: pod2
+ state: started
+ network: slirp4netns:outbound_addr=10.10.10.46
+
+ - name: Run container1 in pod
+ containers.podman.podman_container:
+ executable: "{{ test_executable | default('podman') }}"
+ name: container1
+ image: alpine
+ command: top
+ pod: pod2
+ state: started
+
+ - name: Run pod2 with network slirp4netns - again
+ containers.podman.podman_pod:
+ executable: "{{ test_executable | default('podman') }}"
+ name: pod2
+ state: started
+ network: slirp4netns:outbound_addr=10.10.10.46
+ register: slip4net_pod
+
+ - name: Run container1 in pod slirp4netns
+ containers.podman.podman_container:
+ executable: "{{ test_executable | default('podman') }}"
+ name: container1
+ image: alpine
+ command: top
+ pod: pod2
+ state: started
+ register: slip4net_cont
+
+ - name: Check that slirp4netns is idempotent
+ assert:
+ that:
+ - slip4net_pod is not changed
+ - slip4net_cont is not changed
+
+ - name: Run pod2 with different network slirp4netns
+ containers.podman.podman_pod:
+ executable: "{{ test_executable | default('podman') }}"
+ name: pod2
+ state: started
+ network: slirp4netns:outbound_addr=10.10.10.47
+ register: slip4net_pod2
+
+ - name: Run container1 in different pod slirp4netns
+ containers.podman.podman_container:
+ executable: "{{ test_executable | default('podman') }}"
+ name: container1
+ image: alpine
+ command: top
+ pod: pod2
+ state: started
+ register: slip4net_cont2
+
+ - name: Check that slirp4netns is idempotent and changed
+ assert:
+ that:
+ - slip4net_pod2 is changed
+ - slip4net_cont2 is changed
+
+ - name: Run pasta tests for podman >= 5
+ when: podman_version >= 5
+ block:
+
+ - name: Run pod2 with network pasta
+ containers.podman.podman_pod:
+ executable: "{{ test_executable | default('podman') }}"
+ name: pod2
+ state: started
+ network:
+ - "pasta:-4,-t,8007,-u,4443,-T,3000"
+
+ - name: Run container1 in pod
+ containers.podman.podman_container:
+ executable: "{{ test_executable | default('podman') }}"
+ name: container1
+ image: alpine
+ command: top
+ pod: pod2
+ state: started
+
+ - name: Run pod2 with network pasta - again
+ containers.podman.podman_pod:
+ executable: "{{ test_executable | default('podman') }}"
+ name: pod2
+ state: started
+ network:
+ - "pasta:-4,-t,8007,-u,4443,-T,3000"
+ register: pasta_pod
+
+ - name: Run container1 in pod pasta
+ containers.podman.podman_container:
+ executable: "{{ test_executable | default('podman') }}"
+ name: container1
+ image: alpine
+ command: top
+ pod: pod2
+ state: started
+ register: pasta_cont
+
+ - name: Check that pasta is idempotent
+ assert:
+ that:
+ - pasta_pod is not changed
+ - pasta_cont is not changed
+
+ - name: Run pod2 with different network pasta
+ containers.podman.podman_pod:
+ executable: "{{ test_executable | default('podman') }}"
+ name: pod2
+ state: started
+ network:
+ - "pasta:-4,-t,8008,-u,4443,-T,3000"
+ register: pasta_pod2
+
+ - name: Run container1 in different pod slirp4netns
+ containers.podman.podman_container:
+ executable: "{{ test_executable | default('podman') }}"
+ name: container1
+ image: alpine
+ command: top
+ pod: pod2
+ state: started
+ register: pasta_cont2
+
+ - name: Check that slirp4netns is idempotent and changed
+ assert:
+ that:
+ - pasta_pod2 is changed
+ - pasta_cont2 is changed
+
+ - name: Create a Quadlet for pod with filename
containers.podman.podman_pod:
executable: "{{ test_executable | default('podman') }}"
- name: pod2
- state: started
- network: slirp4netns:outbound_addr=10.10.10.46
+ name: podq
+ state: quadlet
+ network: examplenet
+ quadlet_dir: /tmp
+ quadlet_filename: customfile
- - name: Run container1 in pod
- containers.podman.podman_container:
- executable: "{{ test_executable | default('podman') }}"
- name: container1
- image: alpine
- command: top
- pod: pod2
- state: started
+ - name: Check if files exists
+ stat:
+ path: /tmp/customfile.pod
+ register: quadlet_file_custom
- - name: Run pod2 with network slirp4netns - again
- containers.podman.podman_pod:
- executable: "{{ test_executable | default('podman') }}"
- name: pod2
- state: started
- network: slirp4netns:outbound_addr=10.10.10.46
- register: slip4net_pod
+ - name: Fail if no file is present
+ assert:
+ that:
+ - quadlet_file_custom.stat.exists
- - name: Run container1 in pod slirp4netns
- containers.podman.podman_container:
+ - name: Create a Quadlet pod file
+ containers.podman.podman_pod:
executable: "{{ test_executable | default('podman') }}"
- name: container1
- image: alpine
- command: top
- pod: pod2
- state: started
- register: slip4net_cont
+ name: podq
+ state: quadlet
+ network: examplenet
+ share: net
+ subuidname: username1
+ userns: auto
+ publish: 8000:8001
+ add_host:
+ - host1
+ volume:
+ - /tmp:/data
+ - /whocares:/data2:ro
+ quadlet_dir: /tmp
+ quadlet_options:
+ - "Label=somelabel=labelvalue"
+ - |
+ [Install]
+ WantedBy=default.target
+ register: quadlet_pod
+
+ - name: Check if files exists
+ stat:
+ path: /tmp/podq.pod
+ register: quadlet_file
- - name: Check that slirp4netns is idempotent
+ - name: Check output is correct for Quadlet container in /tmp/podq.pod file
assert:
that:
- - slip4net_pod is not changed
- - slip4net_cont is not changed
-
- - name: Run pod2 with different network slirp4netns
+ - quadlet_file.stat.exists
+
+ - name: Check for the existence of lines in /tmp/podq.pod
+ lineinfile:
+ path: /tmp/podq.pod
+ line: "{{ item }}"
+ state: present
+ check_mode: yes
+ register: line_check
+ loop:
+ - "[Pod]"
+ - "Network=examplenet"
+ - "PodName=podq"
+ - "PublishPort=8000:8001"
+ - "Volume=/tmp:/data"
+ - "Volume=/whocares:/data2:ro"
+ - "PodmanArgs=--add-host host1"
+ - "PodmanArgs=--share net"
+ - "PodmanArgs=--subuidname username1"
+ - "PodmanArgs=--userns auto"
+ - "PodmanArgs=--add-host host1"
+ - "Label=somelabel=labelvalue"
+ - "WantedBy=default.target"
+ loop_control:
+ label: "{{ item }}"
+
+ - name: Fail the task if any line is not present
+ fail:
+ msg: "The following line is not present in /tmp/podq.pod: {{ item.item }}"
+ when: item.changed
+ loop: "{{ line_check.results }}"
+ loop_control:
+ label: "{{ item.item }}"
+
+ - name: Create a Quadlet pod file - same
containers.podman.podman_pod:
executable: "{{ test_executable | default('podman') }}"
- name: pod2
- state: started
- network: slirp4netns:outbound_addr=10.10.10.47
- register: slip4net_pod2
+ name: podq
+ state: quadlet
+ network: examplenet
+ share: net
+ subuidname: username1
+ userns: auto
+ publish: 8000:8001
+ add_host:
+ - host1
+ volume:
+ - /tmp:/data
+ - /whocares:/data2:ro
+ quadlet_dir: /tmp
+ quadlet_options:
+ - "Label=somelabel=labelvalue"
+ - |
+ [Install]
+ WantedBy=default.target
+ register: quad2
+
+ - name: Check if quadlet changed
+ assert:
+ that:
+ - quad2 is not changed
- - name: Run container1 in different pod slirp4netns
- containers.podman.podman_container:
+ - name: Create a Quadlet pod file - different
+ containers.podman.podman_pod:
executable: "{{ test_executable | default('podman') }}"
- name: container1
- image: alpine
- command: top
- pod: pod2
- state: started
- register: slip4net_cont2
-
- - name: Check that slirp4netns is idempotent and changed
+ name: podq
+ state: quadlet
+ network: examplenet
+ share: net
+ subuidname: username1
+ userns: auto
+ publish: 8000:8001
+ add_host:
+ - host1
+ volume:
+ - /tmp:/newdata
+ - /whocares:/data2:ro
+ quadlet_dir: /tmp
+ quadlet_options:
+ - "Label=somelabel=labelvalue"
+ - |
+ [Install]
+ WantedBy=default.target
+ register: quad3
+
+ - name: Print diff
+ debug:
+ var: quad3.diff
+
+ - name: Check if changed and diff
assert:
that:
- - slip4net_pod2 is changed
- - slip4net_cont2 is changed
+ - quad3 is changed
+ - "'newdata' in quad3.diff.after"
always:
diff --git a/ansible_collections/containers/podman/tests/integration/targets/podman_pod/tasks/resource-limit.yml b/ansible_collections/containers/podman/tests/integration/targets/podman_pod/tasks/resource-limit.yml
index 94017d9f9..8727d6e50 100644
--- a/ansible_collections/containers/podman/tests/integration/targets/podman_pod/tasks/resource-limit.yml
+++ b/ansible_collections/containers/podman/tests/integration/targets/podman_pod/tasks/resource-limit.yml
@@ -11,6 +11,7 @@
- name: Create pod for limiting resources
containers.podman.podman_pod:
+ executable: "{{ test_executable | default('podman') }}"
name: limited-pod
state: created
blkio_weight: "{{ limit.blkio_weight }}"
@@ -20,6 +21,7 @@
- name: Get information on pod for limiting resources
containers.podman.podman_pod_info:
+ executable: "{{ test_executable | default('podman') }}"
name: limited-pod
register: pod_info
@@ -34,5 +36,6 @@
always:
- name: Cleanup
containers.podman.podman_pod:
+ executable: "{{ test_executable | default('podman') }}"
name: limited-pod
state: absent
diff --git a/ansible_collections/containers/podman/tests/integration/targets/podman_prune/tasks/main.yml b/ansible_collections/containers/podman/tests/integration/targets/podman_prune/tasks/main.yml
index 804543fe5..6e1a328af 100644
--- a/ansible_collections/containers/podman/tests/integration/targets/podman_prune/tasks/main.yml
+++ b/ansible_collections/containers/podman/tests/integration/targets/podman_prune/tasks/main.yml
@@ -9,6 +9,7 @@
# Create objects to be pruned
- name: Create container
containers.podman.podman_container:
+ executable: "{{ test_executable | default('podman') }}"
name: "{{ cname }}"
image: quay.io/podman/hello:latest
state: present
@@ -16,12 +17,14 @@
- name: Create network
containers.podman.podman_network:
+ executable: "{{ test_executable | default('podman') }}"
name: "{{ nname }}"
state: present
register: network
- name: Create volume
containers.podman.podman_volume:
+ executable: "{{ test_executable | default('podman') }}"
name: "{{ vname }}"
state: present
register: volume
@@ -29,12 +32,14 @@
# Prune objects
- name: Prune objects
containers.podman.podman_prune:
+ executable: "{{ test_executable | default('podman') }}"
container: true
network: true
volume: true
- name: Check if container exists
containers.podman.podman_container_info:
+ executable: "{{ test_executable | default('podman') }}"
register: container_exists
- name: Check if podman network exists
@@ -43,6 +48,7 @@
- name: Check if podman volume exists
containers.podman.podman_volume_info:
+ executable: "{{ test_executable | default('podman') }}"
register: volume_exists
- name: Verify assertions for network, container and volume
@@ -58,6 +64,7 @@
# Test with filters
- name: Prune objects with filters
containers.podman.podman_prune:
+ executable: "{{ test_executable | default('podman') }}"
image: true
image_filters:
dangling_only: false
@@ -65,6 +72,7 @@
- name: Check if image exists
containers.podman.podman_image_info:
+ executable: "{{ test_executable | default('podman') }}"
register: image_exists
- name: Verify assertions for image (with filters)
@@ -74,6 +82,7 @@
- name: Create container
containers.podman.podman_container:
+ executable: "{{ test_executable | default('podman') }}"
name: "{{ cname }}"
image: quay.io/podman/hello:latest
state: present
@@ -81,36 +90,43 @@
- name: Create network
containers.podman.podman_network:
+ executable: "{{ test_executable | default('podman') }}"
name: "{{ nname }}"
state: present
register: network_system
- name: Create volume
containers.podman.podman_volume:
+ executable: "{{ test_executable | default('podman') }}"
name: "{{ vname }}"
state: present
register: volume_system
- name: System prune
containers.podman.podman_prune:
+ executable: "{{ test_executable | default('podman') }}"
system: true
system_all: true
system_volumes: true
- name: Check if container exists
containers.podman.podman_container_info:
+ executable: "{{ test_executable | default('podman') }}"
register: container_system_exists
- name: Check if podman network exists
containers.podman.podman_network_info:
+ executable: "{{ test_executable | default('podman') }}"
register: network_system_exists
- name: Check if podman volume exists
containers.podman.podman_volume_info:
+ executable: "{{ test_executable | default('podman') }}"
register: volume_system_exists
- name: Check if image exists
containers.podman.podman_image_info:
+ executable: "{{ test_executable | default('podman') }}"
register: image_system_exists
- name: Verify assertions for system
diff --git a/ansible_collections/containers/podman/tests/integration/targets/podman_volume/tasks/main.yml b/ansible_collections/containers/podman/tests/integration/targets/podman_volume/tasks/main.yml
index 144a39f63..9d43f3f1c 100644
--- a/ansible_collections/containers/podman/tests/integration/targets/podman_volume/tasks/main.yml
+++ b/ansible_collections/containers/podman/tests/integration/targets/podman_volume/tasks/main.yml
@@ -161,6 +161,134 @@
- info10 is failed
- delete.volume == {}
+ - name: Create a Quadlet for volume with filename
+ containers.podman.podman_volume:
+ executable: "{{ test_executable | default('podman') }}"
+ name: testvol
+ state: quadlet
+ quadlet_dir: /tmp
+ quadlet_filename: customfile
+
+ - name: Check if files exists
+ stat:
+ path: /tmp/customfile.volume
+ register: quadlet_file_custom
+
+ - name: Fail if no file is present
+ assert:
+ that:
+ - quadlet_file_custom.stat.exists
+
+ - name: Create quadlet volume file
+ containers.podman.podman_volume:
+ executable: "{{ test_executable | default('podman') }}"
+ name: testvol
+ state: quadlet
+ driver: local
+ label:
+ namelabel: value
+ foo: bar
+ debug: true
+ options:
+ - "device=/dev/loop1"
+ - "type=ext4"
+ quadlet_dir: /tmp
+ quadlet_options:
+ - "Label=Test=volume"
+ - "Label=test1=value1"
+
+ - name: Check if files exists
+ stat:
+ path: /tmp/testvol.volume
+ register: quadlet_file
+
+ - name: Check output is correct for Quadlet volume in /tmp/testvol.volume file
+ assert:
+ that:
+ - quadlet_file.stat.exists
+
+ - name: Check for the existence of lines in /tmp/testvol.volume
+ lineinfile:
+ path: /tmp/testvol.volume
+ line: "{{ item }}"
+ state: present
+ check_mode: yes
+ register: line_check
+ loop:
+ - "[Volume]"
+ - "VolumeName=testvol"
+ - "Driver=local"
+ - "Label=namelabel=value"
+ - "Label=foo=bar"
+ - "Label=Test=volume"
+ - "Label=test1=value1"
+ - "PodmanArgs=--opt device=/dev/loop1"
+ - "PodmanArgs=--opt type=ext4"
+ - "GlobalArgs=--log-level debug"
+ loop_control:
+ label: "{{ item }}"
+
+ - name: Fail the task if any line is not present
+ fail:
+ msg: "The following line is not present in /tmp/testvol.volume: {{ item.item }}"
+ when: item.changed
+ loop: "{{ line_check.results }}"
+ loop_control:
+ label: "{{ item.item }}"
+
+ - name: Create quadlet volume file - same
+ containers.podman.podman_volume:
+ executable: "{{ test_executable | default('podman') }}"
+ name: testvol
+ state: quadlet
+ driver: local
+ label:
+ namelabel: value
+ foo: bar
+ debug: true
+ options:
+ - "device=/dev/loop1"
+ - "type=ext4"
+ quadlet_dir: /tmp
+ quadlet_options:
+ - "Label=Test=volume"
+ - "Label=test1=value1"
+ register: quad2
+
+ - name: Check if quadlet changed
+ assert:
+ that:
+ - quad2 is not changed
+
+ - name: Create quadlet volume file - different
+ containers.podman.podman_volume:
+ executable: "{{ test_executable | default('podman') }}"
+ name: testvol
+ state: quadlet
+ driver: local
+ label:
+ namelabel: value
+ foo: bar
+ debug: true
+ options:
+ - "device=/dev/loop5"
+ - "type=ext4"
+ quadlet_dir: /tmp
+ quadlet_options:
+ - "Label=Test=volume"
+ - "Label=test1=value1"
+ register: quad3
+
+ - name: Print diff
+ debug:
+ var: quad3.diff
+
+ - name: Check if changed and diff
+ assert:
+ that:
+ - quad3 is changed
+ - "'loop5' in quad3.diff.after"
+
always:
- name: Make sure volume doesn't exist
diff --git a/ansible_collections/containers/podman/tests/sanity/ignore-2.10.txt b/ansible_collections/containers/podman/tests/sanity/ignore-2.10.txt
index f2f4ca9ca..8b2980323 100644
--- a/ansible_collections/containers/podman/tests/sanity/ignore-2.10.txt
+++ b/ansible_collections/containers/podman/tests/sanity/ignore-2.10.txt
@@ -1,2 +1,3 @@
tests/integration/targets/connection_buildah/runme.sh shellcheck:SC2086
tests/integration/targets/connection_podman/runme.sh shellcheck:SC2086
+tests/integration/targets/podman_play/tasks/files/multi-yaml.yml yamllint!skip
diff --git a/ansible_collections/containers/podman/tests/sanity/ignore-2.11.txt b/ansible_collections/containers/podman/tests/sanity/ignore-2.11.txt
index f2f4ca9ca..8b2980323 100644
--- a/ansible_collections/containers/podman/tests/sanity/ignore-2.11.txt
+++ b/ansible_collections/containers/podman/tests/sanity/ignore-2.11.txt
@@ -1,2 +1,3 @@
tests/integration/targets/connection_buildah/runme.sh shellcheck:SC2086
tests/integration/targets/connection_podman/runme.sh shellcheck:SC2086
+tests/integration/targets/podman_play/tasks/files/multi-yaml.yml yamllint!skip
diff --git a/ansible_collections/containers/podman/tests/sanity/ignore-2.12.txt b/ansible_collections/containers/podman/tests/sanity/ignore-2.12.txt
index f2f4ca9ca..8b2980323 100644
--- a/ansible_collections/containers/podman/tests/sanity/ignore-2.12.txt
+++ b/ansible_collections/containers/podman/tests/sanity/ignore-2.12.txt
@@ -1,2 +1,3 @@
tests/integration/targets/connection_buildah/runme.sh shellcheck:SC2086
tests/integration/targets/connection_podman/runme.sh shellcheck:SC2086
+tests/integration/targets/podman_play/tasks/files/multi-yaml.yml yamllint!skip
diff --git a/ansible_collections/containers/podman/tests/sanity/ignore-2.13.txt b/ansible_collections/containers/podman/tests/sanity/ignore-2.13.txt
index f2f4ca9ca..8b2980323 100644
--- a/ansible_collections/containers/podman/tests/sanity/ignore-2.13.txt
+++ b/ansible_collections/containers/podman/tests/sanity/ignore-2.13.txt
@@ -1,2 +1,3 @@
tests/integration/targets/connection_buildah/runme.sh shellcheck:SC2086
tests/integration/targets/connection_podman/runme.sh shellcheck:SC2086
+tests/integration/targets/podman_play/tasks/files/multi-yaml.yml yamllint!skip
diff --git a/ansible_collections/containers/podman/tests/sanity/ignore-2.14.txt b/ansible_collections/containers/podman/tests/sanity/ignore-2.14.txt
index f2f4ca9ca..8b2980323 100644
--- a/ansible_collections/containers/podman/tests/sanity/ignore-2.14.txt
+++ b/ansible_collections/containers/podman/tests/sanity/ignore-2.14.txt
@@ -1,2 +1,3 @@
tests/integration/targets/connection_buildah/runme.sh shellcheck:SC2086
tests/integration/targets/connection_podman/runme.sh shellcheck:SC2086
+tests/integration/targets/podman_play/tasks/files/multi-yaml.yml yamllint!skip
diff --git a/ansible_collections/containers/podman/tests/sanity/ignore-2.15.txt b/ansible_collections/containers/podman/tests/sanity/ignore-2.15.txt
index f2f4ca9ca..8b2980323 100644
--- a/ansible_collections/containers/podman/tests/sanity/ignore-2.15.txt
+++ b/ansible_collections/containers/podman/tests/sanity/ignore-2.15.txt
@@ -1,2 +1,3 @@
tests/integration/targets/connection_buildah/runme.sh shellcheck:SC2086
tests/integration/targets/connection_podman/runme.sh shellcheck:SC2086
+tests/integration/targets/podman_play/tasks/files/multi-yaml.yml yamllint!skip
diff --git a/ansible_collections/containers/podman/tests/sanity/ignore-2.16.txt b/ansible_collections/containers/podman/tests/sanity/ignore-2.16.txt
index f2f4ca9ca..8b2980323 100644
--- a/ansible_collections/containers/podman/tests/sanity/ignore-2.16.txt
+++ b/ansible_collections/containers/podman/tests/sanity/ignore-2.16.txt
@@ -1,2 +1,3 @@
tests/integration/targets/connection_buildah/runme.sh shellcheck:SC2086
tests/integration/targets/connection_podman/runme.sh shellcheck:SC2086
+tests/integration/targets/podman_play/tasks/files/multi-yaml.yml yamllint!skip
diff --git a/ansible_collections/containers/podman/tests/sanity/ignore-2.17.txt b/ansible_collections/containers/podman/tests/sanity/ignore-2.17.txt
index f2f4ca9ca..8b2980323 100644
--- a/ansible_collections/containers/podman/tests/sanity/ignore-2.17.txt
+++ b/ansible_collections/containers/podman/tests/sanity/ignore-2.17.txt
@@ -1,2 +1,3 @@
tests/integration/targets/connection_buildah/runme.sh shellcheck:SC2086
tests/integration/targets/connection_podman/runme.sh shellcheck:SC2086
+tests/integration/targets/podman_play/tasks/files/multi-yaml.yml yamllint!skip
diff --git a/ansible_collections/containers/podman/tests/sanity/ignore-2.18.txt b/ansible_collections/containers/podman/tests/sanity/ignore-2.18.txt
index f2f4ca9ca..8b2980323 100644
--- a/ansible_collections/containers/podman/tests/sanity/ignore-2.18.txt
+++ b/ansible_collections/containers/podman/tests/sanity/ignore-2.18.txt
@@ -1,2 +1,3 @@
tests/integration/targets/connection_buildah/runme.sh shellcheck:SC2086
tests/integration/targets/connection_podman/runme.sh shellcheck:SC2086
+tests/integration/targets/podman_play/tasks/files/multi-yaml.yml yamllint!skip
diff --git a/ansible_collections/containers/podman/tests/sanity/ignore-2.9.txt b/ansible_collections/containers/podman/tests/sanity/ignore-2.9.txt
index f2f4ca9ca..8b2980323 100644
--- a/ansible_collections/containers/podman/tests/sanity/ignore-2.9.txt
+++ b/ansible_collections/containers/podman/tests/sanity/ignore-2.9.txt
@@ -1,2 +1,3 @@
tests/integration/targets/connection_buildah/runme.sh shellcheck:SC2086
tests/integration/targets/connection_podman/runme.sh shellcheck:SC2086
+tests/integration/targets/podman_play/tasks/files/multi-yaml.yml yamllint!skip