diff options
Diffstat (limited to 'ansible_collections/containers')
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 Binary files differindex 4800e7a8b..e51191bf4 100644 --- a/ansible_collections/containers/podman/docs/objects.inv +++ b/ansible_collections/containers/podman/docs/objects.inv 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">"podman"</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 <number><unit>. 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">"absent"</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">"stopped"</span></code></p></li> <li><p><code class="ansible-option-default-bold docutils literal notranslate"><strong><span class="pre">"started"</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">"created"</span></code></p></li> +<li><p><code class="ansible-option-choices-entry docutils literal notranslate"><span class="pre">"quadlet"</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">"echo</span><span class="nv"> </span><span class="s">1</span><span class="nv"> </span><span class="s">></span><span class="nv"> </span><span class="s">/var/lib/letsencrypt/complete"</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">"/dev/sda:/dev/xvda:rwm"</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">"8080:80"</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">"/var/www:/usr/share/nginx/html"</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">"AutoUpdate=registry"</span> +<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="s">"Pull=true"</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">"present"</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">"absent"</span></code></p></li> <li><p><code class="ansible-option-choices-entry docutils literal notranslate"><span class="pre">"build"</span></code></p></li> +<li><p><code class="ansible-option-choices-entry docutils literal notranslate"><span class="pre">"quadlet"</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">"latest"</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">"present"</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">"absent"</span></code></p></li> +<li><p><code class="ansible-option-choices-entry docutils literal notranslate"><span class="pre">"quadlet"</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="ipv6 network"</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">"created"</span></code></p></li> <li><p><code class="ansible-option-choices-entry docutils literal notranslate"><span class="pre">"started"</span></code></p></li> <li><p><code class="ansible-option-choices-entry docutils literal notranslate"><span class="pre">"absent"</span></code></p></li> +<li><p><code class="ansible-option-choices-entry docutils literal notranslate"><span class="pre">"quadlet"</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">"SetWorkingDirectory=yaml"</span> +<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="s">"ExitCodePropagation=any"</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">"stopped"</span></code></p></li> <li><p><code class="ansible-option-choices-entry docutils literal notranslate"><span class="pre">"paused"</span></code></p></li> <li><p><code class="ansible-option-choices-entry docutils literal notranslate"><span class="pre">"unpaused"</span></code></p></li> +<li><p><code class="ansible-option-choices-entry docutils literal notranslate"><span class="pre">"quadlet"</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">"127.0.0.1::80"</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">"4444:5555"</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">"present"</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">"absent"</span></code></p></li> +<li><p><code class="ansible-option-choices-entry docutils literal notranslate"><span class="pre">"quadlet"</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">"device=/dev/loop1"</span> <span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="s">"type=ext4"</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 |