-containers.podman.podman_container module – Manage podman containers
-containers.podman.podman_container_copy module – Copy file to/from a container
-containers.podman.podman_container_exec module – Executes a command in a running container.
-containers.podman.podman_container_info module – Gather facts about containers using podman
-containers.podman.podman_containers module – Manage podman containers in a batch
-containers.podman.podman_export module – Export a podman container
-containers.podman.podman_generate_systemd module – Generate systemd unit from a pod or a container
-containers.podman.podman_image module – Pull images for use by podman
-containers.podman.podman_image_info module – Gather info about images using podman
-containers.podman.podman_import module – Import Podman container from a tar file.
-containers.podman.podman_load module – Load image from a tar file.
-containers.podman.podman_login module – Login to a container registry using podman
-containers.podman.podman_login_info module – Return the logged-in user if any for a given registry
-containers.podman.podman_logout module – Log out of a container registry using podman
-containers.podman.podman_network module – Manage podman networks
-containers.podman.podman_network_info module – Gather info about podman networks
-containers.podman.podman_play module – Play kubernetes YAML file using podman
-containers.podman.podman_pod module – Manage Podman pods
-containers.podman.podman_pod_info module – Gather info about podman pods
-containers.podman.podman_prune module – Allows to prune various podman objects
-containers.podman.podman_runlabel module – Run given label from given image
-containers.podman.podman_save module – Saves podman image to tar file
-containers.podman.podman_search module – Search for remote images using podman
-containers.podman.podman_secret module – Manage podman secrets
-containers.podman.podman_secret_info module – Gather info about podman secrets
-containers.podman.podman_tag module – Add an additional name to a local image
-containers.podman.podman_volume module – Manage Podman volumes
-containers.podman.podman_volume_info module – Gather info about podman volumes
+containers.podman.podman_container module
+containers.podman.podman_container_copy module
+containers.podman.podman_container_exec module
+containers.podman.podman_container_info module
+containers.podman.podman_containers module
+containers.podman.podman_export module
+containers.podman.podman_generate_systemd module
+containers.podman.podman_image module
+containers.podman.podman_image_info module
+containers.podman.podman_import module
+containers.podman.podman_load module
+containers.podman.podman_login module
+containers.podman.podman_login_info module
+containers.podman.podman_logout module
+containers.podman.podman_network module
+containers.podman.podman_network_info module
+containers.podman.podman_play module
+containers.podman.podman_pod module
+containers.podman.podman_pod_info module
+containers.podman.podman_prune module
+containers.podman.podman_quadlet module
+containers.podman.podman_quadlet_info module
+containers.podman.podman_runlabel module
+containers.podman.podman_save module
+containers.podman.podman_search module
+containers.podman.podman_secret module
+containers.podman.podman_secret_info module
+containers.podman.podman_system_info module
+containers.podman.podman_tag module
+containers.podman.podman_volume module
+containers.podman.podman_volume_info module
+
diff --git a/docs/search.html b/docs/search.html
index d1b4fee..5ab0172 100644
--- a/docs/search.html
+++ b/docs/search.html
@@ -83,41 +83,48 @@
Navigation
+
diff --git a/docs/searchindex.js b/docs/searchindex.js
index 7d72f84..af4c4fe 100644
--- a/docs/searchindex.js
+++ b/docs/searchindex.js
@@ -1 +1 @@
-Search.setIndex({"docnames": ["buildah_connection", "environment_variables", "index", "podman_connection", "podman_container_copy_module", "podman_container_exec_module", "podman_container_info_module", "podman_container_module", "podman_containers_module", "podman_export_module", "podman_generate_systemd_module", "podman_image_info_module", "podman_image_module", "podman_import_module", "podman_load_module", "podman_login_info_module", "podman_login_module", "podman_logout_module", "podman_network_info_module", "podman_network_module", "podman_play_module", "podman_pod_info_module", "podman_pod_module", "podman_prune_module", "podman_runlabel_module", "podman_save_module", "podman_search_module", "podman_secret_info_module", "podman_secret_module", "podman_tag_module", "podman_unshare_become", "podman_volume_info_module", "podman_volume_module"], "filenames": ["buildah_connection.rst", "environment_variables.rst", "index.rst", "podman_connection.rst", "podman_container_copy_module.rst", "podman_container_exec_module.rst", "podman_container_info_module.rst", "podman_container_module.rst", "podman_containers_module.rst", "podman_export_module.rst", "podman_generate_systemd_module.rst", "podman_image_info_module.rst", "podman_image_module.rst", "podman_import_module.rst", "podman_load_module.rst", "podman_login_info_module.rst", "podman_login_module.rst", "podman_logout_module.rst", "podman_network_info_module.rst", "podman_network_module.rst", "podman_play_module.rst", "podman_pod_info_module.rst", "podman_pod_module.rst", "podman_prune_module.rst", "podman_runlabel_module.rst", "podman_save_module.rst", "podman_search_module.rst", "podman_secret_info_module.rst", "podman_secret_module.rst", "podman_tag_module.rst", "podman_unshare_become.rst", "podman_volume_info_module.rst", "podman_volume_module.rst"], "titles": ["containers.podman.buildah connection \u2013 Interact with an existing buildah container", "Index of all Collection Environment Variables", "Containers.Podman", "containers.podman.podman connection \u2013 Interact with an existing podman container", "containers.podman.podman_container_copy module \u2013 Copy file to/from a container", "containers.podman.podman_container_exec module \u2013 Executes a command in a running container.", "containers.podman.podman_container_info module \u2013 Gather facts about containers using podman", "containers.podman.podman_container module \u2013 Manage podman containers", "containers.podman.podman_containers module \u2013 Manage podman containers in a batch", "containers.podman.podman_export module \u2013 Export a podman container", "containers.podman.podman_generate_systemd module \u2013 Generate systemd unit from a pod or a container", "containers.podman.podman_image_info module \u2013 Gather info about images using podman", "containers.podman.podman_image module \u2013 Pull images for use by podman", "containers.podman.podman_import module \u2013 Import Podman container from a tar file.", "containers.podman.podman_load module \u2013 Load image from a tar file.", "containers.podman.podman_login_info module \u2013 Return the logged-in user if any for a given registry", "containers.podman.podman_login module \u2013 Login to a container registry using podman", "containers.podman.podman_logout module \u2013 Log out of a container registry using podman", "containers.podman.podman_network_info module \u2013 Gather info about podman networks", "containers.podman.podman_network module \u2013 Manage podman networks", "containers.podman.podman_play module \u2013 Play kubernetes YAML file using podman", "containers.podman.podman_pod_info module \u2013 Gather info about podman pods", "containers.podman.podman_pod module \u2013 Manage Podman pods", "containers.podman.podman_prune module \u2013 Allows to prune various podman objects", "containers.podman.podman_runlabel module \u2013 Run given label from given image", "containers.podman.podman_save module \u2013 Saves podman image to tar file", "containers.podman.podman_search module \u2013 Search for remote images using podman", "containers.podman.podman_secret_info module \u2013 Gather info about podman secrets", "containers.podman.podman_secret module \u2013 Manage podman secrets", "containers.podman.podman_tag module \u2013 Add an additional name to a local image", "containers.podman.podman_unshare become \u2013 Run tasks using podman unshare", "containers.podman.podman_volume_info module \u2013 Gather info about podman volumes", "containers.podman.podman_volume module \u2013 Manage Podman volumes"], "terms": {"thi": [0, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32], "plugin": [0, 1, 3, 19, 30], "i": [0, 1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32], "part": [0, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32], "version": [0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32], "1": [0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32], "16": [0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32], "2": [0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32], "It": [0, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32], "includ": [0, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32], "ansibl": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32], "core": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32], "To": [0, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32], "check": [0, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32], "whether": [0, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32], "instal": [0, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32], "run": [0, 2, 3, 4, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 25, 26, 27, 28, 29, 31, 32], "galaxi": [0, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32], "list": [0, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32], "us": [0, 1, 2, 3, 4, 5, 7, 8, 9, 10, 13, 14, 15, 18, 19, 21, 22, 23, 24, 25, 27, 28, 29, 31, 32], "playbook": [0, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32], "specifi": [0, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32], "command": [0, 1, 2, 3, 7, 8, 10, 12, 15, 16, 17, 18, 19, 21, 22, 27, 28, 30, 31], "put": [0, 3], "fetch": [0, 3], "file": [0, 2, 3, 7, 9, 10, 11, 12, 15, 16, 17, 19, 22, 27, 28, 30, 32], "tool": [0, 3, 17], "comment": [0, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32], "remote_addr": [0, 3], "string": [0, 3, 4, 5, 6, 7, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32], "The": [0, 1, 3, 5, 6, 7, 8, 9, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32], "id": [0, 3, 4, 5, 6, 7, 10, 11, 12, 13, 14, 18, 19, 21, 22, 23, 27], "you": [0, 1, 3, 5, 6, 7, 8, 9, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 27, 28, 29, 30, 31, 32], "want": [0, 3, 7, 10, 22], "access": [0, 3, 7, 19, 26], "default": [0, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32], "inventory_hostnam": [0, 3], "configur": [0, 1, 3, 7, 10, 19, 20, 30], "variabl": [0, 3, 5, 7, 10, 15, 16, 17, 20, 22, 28, 30], "ansible_host": [0, 3], "remote_us": [0, 3], "user": [0, 1, 2, 3, 5, 6, 7, 10, 11, 12, 13, 14, 16, 17, 19, 20, 21, 22, 27, 30, 31, 32], "via": [0, 3, 7, 22], "name": [0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 25, 26, 27, 28, 30, 31, 32], "which": [0, 3, 7, 8, 10, 12, 19, 20, 22, 28, 30, 32], "execut": [0, 1, 2, 3, 4, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32], "insid": [0, 3, 5, 7], "ini": [0, 3, 30], "entri": [0, 3, 7, 30], "valu": [0, 1, 3, 20, 28, 30], "environ": [0, 3, 5, 7, 10, 15, 16, 17, 20, 22, 28, 30], "ansible_remote_us": [0, 3], "ansible_us": [0, 3], "toma": [0, 3], "tomecek": [0, 3], "tomastomecek": [0, 3], "each": [0, 3, 7, 19, 20, 26, 30], "type": [0, 3, 6, 7, 11, 12, 13, 14, 21, 22, 25, 30, 32], "have": [0, 3, 7, 12, 19, 20, 22, 30, 32], "low": [0, 3, 30], "high": [0, 3, 30], "prioriti": [0, 3, 30], "order": [0, 3, 4, 6, 7, 10, 11, 22, 26, 30], "For": [0, 3, 7, 12, 19, 20, 22, 23, 30, 32], "exampl": [0, 3], "lower": [0, 3, 30], "overrid": [0, 3, 7, 10, 15, 16, 17, 20, 22, 28, 30], "higher": [0, 3, 30], "up": [0, 3, 7, 12, 19, 20, 22, 30, 32], "issu": [0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32], "tracker": [0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32], "repositori": [0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32], "sourc": [0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32], "follow": [1, 5, 6, 7, 10, 11, 12, 13, 14, 15, 18, 19, 20, 21, 22, 23, 26, 27, 31, 32], "document": [1, 5, 6, 7, 10, 11, 12, 13, 14, 15, 18, 19, 21, 22, 23, 26, 27, 30, 31, 32], "declar": [1, 7, 10, 22], "ar": [1, 2, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 31, 32], "ansible_configuration_set": 1, "ansible_become_pass": [1, 30], "password": [1, 12, 16, 20, 30], "pass": [1, 3, 5, 7, 12, 19, 20, 22, 30], "sudo": [1, 30], "contain": 1, "podman": 1, "podman_unshar": [1, 2], "becom": [1, 19], "ansible_podman_execut": [1, 3], "connect": [1, 7, 16, 19, 20, 22], "ansible_podman_extra_arg": [1, 3], "extra": [1, 3, 12], "argument": [1, 3, 7, 12], "line": [1, 3, 7, 12, 19, 20, 22, 32], "ansible_sudo_ex": [1, 30], "ansible_sudo_pass": [1, 30], "ansible_sudo_us": [1, 30], "task": [1, 2, 7], "root": [1, 4, 6, 7, 12, 13, 19, 20, 22, 30, 32], "valid": [1, 7, 12, 30], "here": [1, 5, 6, 7, 10, 11, 12, 13, 14, 15, 18, 19, 21, 22, 23, 26, 27, 30, 31, 32], "collect": 2, "author": 2, "sagi": [2, 6, 7, 8, 9, 13, 14, 18, 19, 20, 21, 22, 25, 27, 31, 32], "shnaidman": [2, 6, 7, 8, 9, 13, 14, 18, 19, 20, 21, 22, 25, 27, 31, 32], "sshnaidm": [2, 7, 8, 9, 13, 14, 18, 19, 20, 21, 22, 25, 27, 31, 32], "redhat": [2, 5, 26], "com": [2, 14, 19, 26, 32], "team": 2, "support": [2, 7, 10, 19, 20, 22, 25, 26, 32], "8": [2, 7], "newer": [2, 7], "These": 2, "podman_contain": [2, 10, 22, 28, 30], "manag": [2, 6], "podman_container_copi": 2, "copi": [2, 7, 10, 32], "from": [2, 6, 7, 11, 12, 16, 17, 18, 19, 20, 21, 22, 26, 27, 31, 32], "podman_container_exec": 2, "podman_container_info": 2, "gather": [2, 26, 30], "fact": [2, 7, 18, 19, 21, 27, 31], "about": 2, "batch": 2, "podman_export": 2, "export": [2, 7, 10, 15, 16, 17, 20], "podman_generate_systemd": 2, "gener": [2, 7, 14, 19, 22], "systemd": [2, 6, 7, 12, 19, 20, 22, 32], "unit": [2, 7, 19, 22], "pod": [2, 6, 7, 20, 23, 32], "podman_imag": 2, "pull": [2, 7, 20], "imag": [2, 6, 7, 8, 10, 13, 20, 22, 23, 28, 30, 32], "podman_image_info": 2, "info": [2, 7, 12, 13, 14, 20, 26], "podman_import": 2, "import": 2, "tar": [2, 9], "podman_load": 2, "load": [2, 7, 12, 13], "podman_login": 2, "login": [2, 15, 17, 20, 30], "registri": [2, 6, 7, 12, 20, 26], "podman_login_info": 2, "return": [2, 8], "log": [2, 6, 7, 20, 22], "ani": [2, 7, 10, 12, 17, 19, 20, 22, 23, 26, 32], "given": [2, 6, 7, 10, 11, 19, 22], "podman_logout": 2, "out": 2, "podman_network": 2, "network": [2, 7, 12, 20, 21, 22, 23, 32], "podman_network_info": 2, "podman_plai": 2, "plai": 2, "kubernet": 2, "yaml": [2, 7, 12, 19, 22, 32], "podman_pod": 2, "podman_pod_info": 2, "podman_prun": 2, "allow": [2, 4, 7, 22, 25, 30], "prune": 2, "variou": 2, "object": 2, "podman_runlabel": 2, "label": [2, 6, 7, 11, 12, 13, 14, 19, 21, 22, 27, 28, 31, 32], "podman_sav": 2, "save": [2, 9, 13, 14], "podman_search": [2, 4], "search": [2, 7, 16, 17, 22], "remot": [2, 7, 12, 15, 20, 30], "podman_secret": 2, "secret": [2, 7, 16], "podman_secret_info": 2, "podman_tag": 2, "add": [2, 7, 10, 11, 12, 13, 19, 20, 21, 22, 32], "an": [2, 7, 10, 12, 14, 16, 19, 20, 22, 25, 28, 30, 32], "addit": [2, 7, 8, 19, 22, 25, 32], "local": [2, 6, 7, 9, 11, 12, 14, 18, 19, 20, 25, 27, 31, 32], "podman_volum": 2, "volum": [2, 6, 7, 9, 12, 13, 21, 22, 23, 30], "podman_volume_info": 2, "unshar": 2, "buildah": [2, 6, 7], "interact": [2, 7], "exist": [2, 7, 9, 10, 12, 16, 17, 19, 20, 22, 25, 28, 32], "podman_execut": 3, "podman_extra_arg": 3, "ansible_podman_host": 3, "uid": [3, 4, 5, 7, 11, 22, 30, 32], "If": [3, 5, 6, 7, 10, 11, 12, 16, 17, 19, 20, 22, 28, 30, 32], "must": [3, 4, 7, 10, 12, 19, 20, 22, 32], "set": [3, 5, 7, 10, 12, 13, 15, 16, 17, 19, 20, 22, 28, 30, 32], "ansible_remote_tmp": 3, "path": [3, 4, 5, 6, 7, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 24, 25, 26, 27, 28, 29, 30, 31, 32], "exit": [3, 5, 7, 22], "writabl": 3, "folder": 4, "host": [4, 5, 6, 7, 8, 9, 10, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 27, 28, 29, 30, 31, 32], "vice": 4, "versa": 4, "archiv": [4, 12, 14, 25], "boolean": [4, 5, 7, 8, 9, 10, 12, 16, 17, 19, 20, 22, 23, 25, 26, 27, 28, 32], "chown": [4, 30], "primari": 4, "gid": [4, 5, 7, 22, 32], "destin": [4, 7, 10, 12, 19, 21, 22, 25], "choic": [4, 5, 7, 8, 9, 10, 12, 16, 17, 19, 20, 22, 23, 25, 26, 27, 28, 32], "fals": [4, 5, 6, 7, 8, 9, 10, 12, 14, 16, 17, 18, 19, 20, 21, 22, 23, 25, 26, 27, 28, 30, 32], "true": [4, 5, 6, 7, 8, 9, 10, 11, 12, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 25, 26, 27, 28, 30, 31, 32], "requir": [4, 11, 12, 26], "dest": [4, 9, 10, 12, 25], "machin": [4, 6, 7, 9, 11, 12, 13, 14, 15, 16, 17, 18, 19, 21, 22, 24, 25, 26, 27, 28, 29, 31, 32], "from_contain": 4, "overwrit": [4, 7], "directori": [4, 5, 7, 12, 16, 19, 20, 22, 25, 32], "non": [4, 7, 12, 19, 20, 22, 23, 32], "src": [4, 13], "mai": [4, 5, 6, 7, 10, 11, 12, 26], "elev": [4, 6, 11, 26], "privileg": [4, 5, 6, 7, 11, 26], "properli": [4, 6, 11, 26], "test": [4, 6, 7, 8, 21, 22, 30], "yml": 4, "apach": 4, "": [4, 7, 10, 12, 19, 20, 22, 30, 32], "alessandro": 4, "rossi": 4, "kubealex": 4, "need": [5, 6, 7, 8, 9, 10, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 27, 28, 29, 31, 32], "further": [5, 6, 7, 8, 9, 10, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 27, 28, 29, 31, 32], "abl": [5, 6, 7, 8, 9, 10, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 27, 28, 29, 31, 32], "see": [5, 6, 7, 8, 9, 10, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 27, 28, 29, 30, 31, 32], "detail": [5, 6, 7, 8, 9, 10, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 27, 28, 29, 31, 32], "below": [5, 6, 7, 8, 9, 10, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 27, 28, 29, 31, 32], "argv": 5, "element": [5, 6, 7, 8, 10, 11, 12, 13, 18, 19, 20, 21, 22, 23, 25, 26, 27, 29, 31, 32], "rather": [5, 7], "than": [5, 7, 10, 22, 23, 25], "One": 5, "arg": [5, 6, 7, 12, 19, 20, 22, 32], "detach": [5, 7, 28], "background": 5, "exec": 5, "session": 5, "automat": [5, 7, 19], "remov": [5, 7, 10, 12, 17, 19, 28], "when": [5, 7, 10, 12, 16, 19, 20, 22, 23, 25, 28, 30, 32], "complet": [5, 7], "env": [5, 6, 7, 10, 11, 12, 14, 28], "dictionari": [5, 6, 7, 8, 10, 12, 13, 14, 15, 19, 20, 22, 23, 28, 32], "where": [5, 7, 12, 22], "give": [5, 7, 12, 19, 20, 22, 32], "extend": [5, 7], "tty": [5, 6, 7], "alloc": [5, 7, 19], "pseudo": [5, 7], "usernam": [5, 7, 12, 15, 16, 20], "option": [5, 7, 10, 12, 17, 18, 19, 20, 21, 22, 27, 28, 31, 32], "groupnam": [5, 7], "both": 5, "group": [5, 7, 8, 32], "symbol": [5, 7, 12, 19, 20, 22, 32], "numer": 5, "workdir": [5, 6, 7, 11, 12, 13, 14], "work": [5, 6, 7, 10, 11, 12, 13, 14, 22], "ubi8": 5, "cat": [5, 28], "releas": [5, 7], "etc": [5, 7, 10, 12, 16, 19, 20, 22, 32], "test_contain": 5, "bin": [5, 6, 7, 11, 12, 13, 14], "sh": [5, 6, 7, 11, 12, 13, 14], "c": [5, 11, 12, 13], "echo": [5, 7, 12], "hello": [5, 12, 20], "bye": 5, "world": [5, 12, 20], "goodby": 5, "detach_contain": 5, "common": [5, 6, 7, 10, 11, 12, 13, 14, 15, 18, 19, 21, 22, 23, 26, 27, 31, 32], "field": [5, 6, 7, 10, 11, 12, 13, 14, 15, 18, 19, 21, 22, 23, 26, 27, 31, 32], "uniqu": [5, 6, 7, 10, 11, 12, 13, 14, 15, 18, 19, 21, 22, 23, 26, 27, 31, 32], "kei": [5, 6, 7, 10, 11, 12, 13, 14, 15, 16, 18, 19, 20, 21, 22, 23, 26, 27, 28, 31, 32], "descript": [5, 6, 7, 10, 11, 12, 13, 14, 15, 18, 19, 21, 22, 23, 26, 27, 31, 32], "exec_id": 5, "success": [5, 7, 10, 12, 22], "sampl": [5, 6, 7, 10, 11, 12, 13, 14, 15, 18, 19, 21, 22, 23, 26, 27, 31, 32], "f99002e34c1087fd1aa08d5027e455bf7c2d6b74f019069acf6462a96ddf2a47": 5, "rc": 5, "integ": [5, 7, 10, 19, 22, 26], "code": [5, 7], "0": [5, 6, 7, 8, 10, 14, 15, 18, 19, 21, 22, 23, 26, 28, 30, 31, 32], "stderr": [5, 7], "standard": 5, "output": [5, 7, 20, 28, 30], "stdout": [5, 7, 28], "takuya": 5, "nishimura": 5, "nishipi": 5, "all": [6, 7, 10, 11, 17, 18, 19, 20, 21, 22, 23, 26, 27, 31], "specif": [6, 7, 11, 12, 18, 20, 21, 22, 26, 27, 28, 31, 32], "web1": 6, "sever": [6, 11, 22], "redi": [6, 7, 11, 12], "alwai": [6, 7, 10, 11, 12, 13, 14, 15, 18, 19, 21, 22, 26, 27, 31, 32], "apparmorprofil": [6, 7], "entrypoint": [6, 7, 14], "boundingcap": [6, 7], "cap_chown": [6, 7], "cap_dac_overrid": [6, 7], "cap_fown": [6, 7], "cap_fsetid": [6, 7], "cap_kil": [6, 7], "cap_net_bind_servic": [6, 7], "cap_setfcap": [6, 7], "cap_setgid": [6, 7], "cap_setpcap": [6, 7], "cap_setuid": [6, 7], "cap_sys_chroot": [6, 7], "config": [6, 7, 10, 11, 12, 13, 17, 19, 20, 22, 32], "annot": [6, 7, 11, 12, 13, 14, 20], "io": [6, 7, 10, 11, 12, 14, 15, 16, 17, 22, 24, 28, 29, 30, 32], "libpod": [6, 7], "org": [6, 7], "opencontain": [6, 7], "stopsign": [6, 7], "15": [6, 7, 11], "attachstderr": [6, 7], "attachstdin": [6, 7], "attachstdout": [6, 7], "cmd": [6, 7, 11, 12, 13, 14], "null": [6, 7, 11, 12, 13, 21, 22], "createcommand": [6, 7, 21, 22], "d": [6, 7, 16, 20], "p": [6, 7], "8888": [6, 7], "80": [6, 7, 14, 22], "latest": [6, 7, 10, 12, 14, 30, 32], "domainnam": [6, 7], "usr": [6, 7, 11, 12, 14], "sbin": [6, 7, 11, 12, 14], "home": [6, 7, 11, 12, 13, 14, 17, 20, 27, 31, 32], "hostnam": [6, 7, 21, 22], "444a8274863a": [6, 7], "healthcheckonfailureact": [6, 7], "none": [6, 7, 19, 22], "31": [6, 7, 31, 32], "onbuild": [6, 7], "openstdin": [6, 7], "passwd": [6, 7], "stdinonc": [6, 7], "stoptimeout": [6, 7], "10": [6, 7, 8, 11, 14, 18, 19, 22, 23], "timeout": [6, 7, 10, 22], "umask": [6, 7, 22], "0022": [6, 7], "workingdir": [6, 7], "sdnotifymod": [6, 7], "conmonpidfil": [6, 7], "1000": [6, 7, 21, 22, 30], "overlai": [6, 7, 11, 12, 13, 14], "d38a": [6, 7], "userdata": [6, 7], "conmon": [6, 7, 22], "pid": [6, 7, 22], "creat": [6, 7, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 23, 25, 28, 30, 32], "2024": [6, 7, 18, 19, 21, 22, 27], "08": [6, 7, 27], "14t00": [6, 7], "04": [6, 7], "33": [6, 7], "127266655": [6, 7], "03": [6, 7, 12, 13, 18, 19, 21, 22], "00": [6, 7, 13, 18, 19, 21, 22, 27, 31, 32], "depend": [6, 7, 10, 22], "driver": [6, 7, 18, 19, 20, 21, 22, 27, 28, 31, 32], "effectivecap": [6, 7], "execid": [6, 7], "graphdriv": [6, 7, 11, 12, 13, 14], "data": [6, 7, 8, 10, 11, 12, 13, 14, 22, 23, 27, 28], "lowerdir": [6, 7, 14], "share": [6, 7, 11, 12, 22, 27, 31, 32], "storag": [6, 7, 11, 12, 14, 20, 27, 31, 32], "29e2": [6, 7], "diff": [6, 7, 11, 12, 13, 14, 28], "mergeddir": [6, 7, 14], "865909": [6, 7], "merg": [6, 7, 14], "upperdir": [6, 7, 11, 12, 13, 14], "hostconfig": [6, 7], "autoremov": [6, 7], "bind": [6, 7, 21, 22], "blkiodevicereadbp": [6, 7], "blkiodevicereadiop": [6, 7], "blkiodevicewritebp": [6, 7], "blkiodevicewriteiop": [6, 7], "blkioweight": [6, 7], "blkioweightdevic": [6, 7], "capadd": [6, 7], "capdrop": [6, 7], "cgroup": [6, 7, 22], "cgroupconf": [6, 7], "cgroupmanag": [6, 7], "cgroupmod": [6, 7], "privat": [6, 7, 21, 22], "cgrouppar": [6, 7, 21, 22], "slice": [6, 7, 21, 22], "consoles": [6, 7], "containeridfil": [6, 7], "cpucount": [6, 7], "cpuperc": [6, 7], "cpuperiod": [6, 7], "cpuquota": [6, 7], "cpurealtimeperiod": [6, 7], "cpurealtimeruntim": [6, 7], "cpushar": [6, 7], "cpusetcpu": [6, 7], "cpusetmem": [6, 7], "devic": [6, 7, 19, 22, 32], "diskquota": [6, 7], "dn": [6, 7, 19, 21, 22], "dnsoption": [6, 7, 21, 22], "dnssearch": [6, 7, 21, 22], "extrahost": [6, 7], "groupadd": [6, 7], "iomaximumbandwidth": [6, 7], "iomaximumiop": [6, 7], "ipcmod": [6, 7], "shareabl": [6, 7], "isol": [6, 7, 19], "kernelmemori": [6, 7], "logconfig": [6, 7], "size": [6, 7, 11, 12, 13, 14, 19, 20, 22], "0b": [6, 7], "tag": [6, 7, 11, 12, 19, 20, 25, 26, 29], "journald": [6, 7, 20], "memori": [6, 7, 22], "memoryreserv": [6, 7], "memoryswap": [6, 7], "memoryswappi": [6, 7], "nanocpu": [6, 7], "networkmod": [6, 7], "slirp4netn": [6, 7], "oomkilldis": [6, 7], "oomscoreadj": [6, 7], "pidmod": [6, 7], "pidslimit": [6, 7], "2048": [6, 7], "portbind": [6, 7, 21, 22], "tcp": [6, 7, 14], "hostip": [6, 7], "hostport": [6, 7], "publishallport": [6, 7], "readonlyrootf": [6, 7], "restartpolici": [6, 7], "maximumretrycount": [6, 7], "runtim": [6, 7], "oci": [6, 7, 12, 13, 14, 25], "securityopt": [6, 7], "shmsize": [6, 7], "65536000": [6, 7], "tmpf": [6, 7, 22, 32], "utsmod": [6, 7], "ulimit": [6, 7], "hard": [6, 7], "524288": [6, 7], "rlimit_nofil": [6, 7], "soft": [6, 7], "256018": [6, 7], "rlimit_nproc": [6, 7], "usernsmod": [6, 7], "volumedriv": [6, 7], "volumesfrom": [6, 7], "hostnamepath": [6, 7], "hostspath": [6, 7], "d38a8fcd61ab7e0754355e8fb3acc201e07770f3d1fd8fed36556941ac458c": [6, 7], "fe2ba3a8ede60e5938e666b483c3a812ba902dac2303341930fbadc0482592b7": [6, 7], "imagedigest": [6, 7], "sha256": [6, 7, 11, 12, 13, 14], "1222865ed7489298ee28414ddedb63a0c6405938c3a38adf21c8656d7f532271": [6, 7], "imagenam": [6, 7], "isinfra": [6, 7], "isservic": [6, 7], "kubeexitcodepropag": [6, 7], "invalid": [6, 7], "mountlabel": [6, 7], "system_u": [6, 7], "object_r": [6, 7], "container_file_t": [6, 7], "s0": [6, 7], "c493": [6, 7], "c986": [6, 7], "mount": [6, 7, 12, 21, 22, 30, 32], "costapp": [6, 7], "namespac": [6, 7, 20, 22, 30], "networkset": [6, 7], "bridg": [6, 7, 19, 22], "endpointid": [6, 7], "gatewai": [6, 7, 18, 19], "globalipv6address": [6, 7], "globalipv6prefixlen": [6, 7], "hairpinmod": [6, 7], "ipaddress": [6, 7], "ipprefixlen": [6, 7], "ipv6gatewai": [6, 7], "linklocalipv6address": [6, 7], "linklocalipv6prefixlen": [6, 7], "macaddress": [6, 7], "port": [6, 7, 22], "sandboxid": [6, 7], "sandboxkei": [6, 7], "netn": [6, 7], "2343321": [6, 7], "795a": [6, 7], "8289": [6, 7], "14c0": [6, 7], "77ee2556ebf1": [6, 7], "ociconfigpath": [6, 7], "json": [6, 7, 11, 12, 13, 15, 16, 17, 20], "ociruntim": [6, 7], "crun": [6, 7], "pidfil": [6, 7], "processlabel": [6, 7], "system_r": [6, 7], "container_t": [6, 7], "resolvconfpath": [6, 7], "resolv": [6, 7, 19, 22], "conf": [6, 7, 16, 17, 19, 20, 22], "restartcount": [6, 7], "rootf": [6, 7, 11, 12, 13, 14], "state": [6, 7, 10, 12, 19, 20, 21, 22, 28, 30, 32], "cgrouppath": [6, 7, 21, 22], "servic": [6, 7, 10, 21, 22], "scope": [6, 7, 10, 19, 22, 31, 32], "checkpointedat": [6, 7], "0001": [6, 7], "01": [6, 7, 27], "01t00": [6, 7], "00z": [6, 7], "conmonpid": [6, 7], "2434162": [6, 7], "dead": [6, 7], "error": [6, 7, 20], "exitcod": [6, 7], "finishedat": [6, 7], "health": [6, 7], "failingstreak": [6, 7], "statu": [6, 7], "oomkil": [6, 7], "ocivers": [6, 7], "dev": [6, 7, 22, 32], "paus": [6, 7, 22], "2434164": [6, 7], "restart": [6, 7, 10, 22], "restoredat": [6, 7], "startedat": [6, 7], "237286439": [6, 7], "staticdir": [6, 7], "locknumb": [6, 7, 21, 22, 31, 32], "1417": [6, 7], "emilien": 6, "macchi": 6, "emilienm": 6, "new": [7, 8, 10, 12, 15, 18, 19, 20, 21, 22, 23, 28, 30, 32], "start": [7, 10, 14, 20, 22], "stop": [7, 10, 19, 22], "format": [7, 12, 19, 20, 22, 25, 32], "multipl": [7, 12, 20, 22], "time": [7, 10, 20, 22], "arch": [7, 12], "architectur": [7, 11, 12, 13, 14], "arm": [7, 12], "attach": [7, 22], "stdin": 7, "authfil": [7, 12, 15, 16, 17, 20], "authent": [7, 12, 15, 16, 17, 20], "xdg_runtime_dir": [7, 15, 16, 17, 20], "auth": [7, 12, 15, 16, 17, 20], "Not": [7, 15], "avail": [7, 15, 20, 22], "can": [7, 8, 10, 12, 15, 16, 17, 19, 20, 22, 23, 30, 32], "also": [7, 12, 15, 16, 17, 20, 23], "registry_auth_fil": [7, 15, 16, 17, 20], "blkio_weight": [7, 22], "block": [7, 19, 22], "weight": [7, 22], "rel": [7, 22], "accept": [7, 19], "between": [7, 10, 19, 22], "blkio_weight_devic": [7, 22], "device_nam": 7, "cap_add": 7, "alias": [7, 12, 14, 20, 22, 25], "capabl": 7, "cap_drop": 7, "drop": 7, "cgroup_conf": 7, "v2": [7, 11, 12], "write": [7, 10, 12, 19, 20, 22, 25, 32], "its": [7, 10, 12, 19, 20, 22, 30, 32], "cgroup_par": [7, 22], "under": [7, 16, 17, 22], "absolut": [7, 22], "consid": [7, 22, 23], "init": [7, 22], "process": [7, 22], "thei": [7, 17, 20, 22, 23], "do": [7, 10, 12, 19, 20, 22, 32], "alreadi": [7, 10, 12, 20, 22, 28], "cgroupn": 7, "determin": [7, 22], "enabl": [7, 10, 19, 20, 22, 28], "disabl": [7, 19, 20, 22], "being": 7, "forc": [7, 9, 10, 12, 19, 22, 25, 28], "thu": 7, "conflict": [7, 22], "parent": [7, 11, 12, 13, 14, 19, 22], "chrootdir": 7, "treat": 7, "chroot": 7, "cidfil": 7, "cmd_arg": 7, "itself": 7, "level": [7, 20], "debug": [7, 8, 19, 20, 22, 28, 30, 32], "syslog": 7, "NOT": [7, 19, 28], "pleas": 7, "conmon_pidfil": 7, "separ": [7, 10, 12, 22], "so": [7, 12, 19, 20, 22, 32], "necessari": [7, 12, 22], "cpu_period": 7, "limit": [7, 22, 26], "cpu": [7, 12, 22], "cf": 7, "fair": 7, "schedul": 7, "period": 7, "cpu_quota": 7, "quota": 7, "cpu_rt_period": 7, "real": 7, "microsecond": 7, "usag": [7, 22], "flag": [7, 16, 17, 22], "tell": 7, "kernel": [7, 22], "restrict": [7, 19], "cpu_rt_runtim": 7, "amount": [7, 22], "consum": 7, "cpu_shar": [7, 22], "number": [7, 12, 19, 20, 22, 26, 32], "mean": [7, 20, 22], "cpuset_cpu": [7, 22], "3": [7, 8, 10, 11, 12, 22, 26, 28], "cpuset_mem": [7, 22], "node": [7, 22], "mem": 7, "onli": [7, 10, 12, 17, 19, 20, 22, 23, 25], "effect": [7, 22], "numa": [7, 22], "system": [7, 10, 22, 23], "inform": [7, 8, 10, 19, 22, 23, 32], "help": [7, 8, 19, 22, 32], "investig": [7, 8, 19, 22, 32], "decryption_kei": 7, "passphras": 7, "decrypt": 7, "point": 7, "certif": [7, 12, 16, 20], "delete_depend": 7, "select": [7, 23, 24], "recurs": 7, "appli": 7, "delet": [7, 12, 17, 20, 23], "delete_tim": 7, "second": [7, 10, 22], "wait": 7, "befor": [7, 10, 22], "forcibli": 7, "infinit": 7, "delete_volum": 7, "anonym": 7, "associ": [7, 22, 26], "doe": [7, 9, 10, 12, 13, 14, 19, 20, 22, 24, 25, 29, 32], "mode": [7, 10, 12, 19, 20, 21, 22, 28, 32], "detach_kei": 7, "sequenc": 7, "singl": 7, "charact": 7, "ctrl": 7, "permiss": [7, 12, 19, 20, 22, 32], "e": [7, 10, 17, 20, 22, 32], "g": [7, 10, 12, 17, 19, 20, 22, 32], "sdc": 7, "xvdc": 7, "rwm": 7, "device_cgroup_rul": 7, "rule": [7, 12, 19, 20, 22, 32], "expect": [7, 22], "linux": [7, 11, 12, 13, 14, 19, 26], "admin": 7, "guid": 7, "v1": [7, 13, 14, 22], "device_read_bp": [7, 22], "read": [7, 20, 22], "rate": [7, 22], "byte": [7, 22], "per": [7, 10, 22, 26], "bp": [7, 22], "sda": [7, 22], "1mb": [7, 22], "device_read_iop": 7, "iop": 7, "device_write_bp": [7, 22], "device_write_iop": 7, "dns_server": 7, "custom": [7, 20, 22, 32], "server": [7, 15, 16, 17, 19, 22], "dns_option": [7, 22], "dns_opt": [7, 22], "dns_search": [7, 22], "dns_search_domain": 7, "domain": [7, 22], "don": 7, "t": [7, 22], "wish": 7, "arbitrari": 7, "launch": 7, "env_fil": 7, "delimit": [7, 22], "doesn": [7, 22], "idempot": [7, 10, 12, 19, 32], "chang": [7, 13, 17, 32], "them": [7, 10, 22], "recreat": [7, 19, 20, 22, 28, 32], "present": [7, 12, 18, 19, 21, 22, 27, 28, 31, 32], "actual": 7, "control": [7, 12], "slurp": 7, "env_host": 7, "current": [7, 19, 20, 23, 28], "env_merg": 7, "preprocess": 7, "etc_host": 7, "add_host": [7, 22], "dict": 7, "ip": [7, 19, 22], "map": [7, 22, 30], "ad": [7, 19], "expos": 7, "exposed_port": 7, "rang": [7, 19, 22], "3300": 7, "3310": 7, "redirect": 7, "force_delet": 7, "force_restart": 7, "generate_systemd": [7, 22], "after": [7, 10, 12, 20, 22], "container_prefix": [7, 10, 22], "prefix": [7, 10, 12, 22], "instead": [7, 10, 22, 25], "refer": [7, 10, 22], "more": [7, 10, 12, 22, 23, 25, 29], "no_head": [7, 10, 22], "header": [7, 10, 22], "meta": [7, 10, 22], "timestamp": [7, 10, 22], "pod_prefix": [7, 10, 22], "similar": [7, 10, 22], "stronger": [7, 10, 22], "restart_polici": [7, 10, 22], "polici": [7, 10, 22], "one": [7, 12, 19, 20, 22, 25, 29, 32], "failur": [7, 10, 22], "abnorm": [7, 10, 22], "watchdog": [7, 10, 22], "abort": [7, 10, 22], "restart_sec": [7, 10, 22], "restartsec": [7, 22], "dash": [7, 22], "start_timeout": [7, 10, 22], "stop_timeout": [7, 10, 22], "call": [7, 16, 20, 22], "4": [7, 8, 10, 12, 22], "weak": [7, 10, 22], "gidmap": [7, 22], "suppli": [7, 22], "gpu": [7, 22], "group_add": 7, "group_entri": 7, "written": 7, "within": [7, 20], "health_startup_cmd": 7, "startup": 7, "healthcheck": 7, "health_startup_interv": 7, "interv": 7, "health_startup_retri": 7, "attempt": [7, 12], "never": 7, "health_startup_success": 7, "succe": 7, "regular": 7, "begin": 7, "A": [7, 10, 19, 22, 23], "health_startup_timeout": 7, "maximum": [7, 19], "ha": [7, 14], "mark": 7, "fail": [7, 17], "health_cmd": 7, "alter": 7, "healthcheck_failure_act": 7, "health_on_failur": 7, "action": 7, "taken": 7, "unhealthi": 7, "kill": [7, 22], "healthcheck_interv": 7, "health_interv": 7, "result": [7, 12, 19, 20, 22, 26, 32], "timer": 7, "setup": 7, "30": 7, "healthcheck_retri": 7, "health_retri": 7, "retri": 7, "healthcheck_start_period": 7, "health_start_period": 7, "initi": 7, "bootstrap": 7, "express": 7, "like": [7, 12, 19, 20, 22, 30, 32], "2m3": 7, "healthcheck_timeout": 7, "health_timeout": 7, "1m22": 7, "hooks_dir": 7, "hook": 7, "syntax": 7, "semant": 7, "inject": 7, "5": [7, 21, 22, 25], "hostus": 7, "account": 7, "http_proxi": 7, "By": [7, 12, 19, 20, 22, 30, 32], "proxi": [7, 12], "https_proxi": 7, "ftp_proxi": 7, "no_proxi": 7, "upper": 7, "case": [7, 17, 19], "those": [7, 19], "found": [7, 17, 20], "assum": 7, "image_strict": 7, "compar": 7, "take": [7, 10, 12, 19, 22, 32], "full": [7, 10, 22], "image_volum": 7, "how": 7, "handl": 7, "builtin": [7, 10, 30], "ignor": [7, 12, 17], "forward": 7, "signal": 7, "reap": 7, "init_ctr": 7, "style": 7, "infra": [7, 21, 22], "onc": [7, 8, 10], "init_path": 7, "binari": [7, 23], "keep": 7, "open": 7, "even": [7, 9, 10, 12, 19, 20, 23, 25, 32], "static": [7, 19, 22], "address": [7, 19, 22], "88": 7, "64": [7, 18], "128": [7, 19], "cni": [7, 20, 22], "join": [7, 19, 20, 22], "were": 7, "anoth": 7, "pool": [7, 14], "ip6": [7, 22], "ipv6": [7, 19, 22], "ipc": [7, 21, 22], "ipc_mod": 7, "posix": 7, "sysv": 7, "kernel_memori": 7, "b": [7, 22], "k": [7, 22], "m": [7, 22], "note": [7, 20], "metadata": [7, 22, 32], "label_fil": [7, 22], "log_driv": [7, 20], "k8": [7, 22], "log_level": [7, 20], "messag": [7, 13, 20], "abov": [7, 10, 20], "warn": [7, 17, 20], "fatal": [7, 20], "panic": [7, 20], "log_opt": [7, 20], "max_siz": [7, 20], "max": [7, 20], "10mb": [7, 20], "var": [7, 14, 20, 22, 30], "mycontain": [7, 20], "mac_address": [7, 22], "mac": [7, 22], "92": 7, "d0": 7, "c6": 7, "0a": 7, "29": 7, "forget": 7, "ethernet": 7, "10k": 7, "memory_reserv": 7, "100m": 7, "memory_swap": [7, 22], "equal": [7, 22], "plu": [7, 22], "swap": [7, 22], "should": [7, 12, 19, 20], "larger": 7, "doubl": 7, "memory_swappi": 7, "tune": 7, "swappi": 7, "behavior": 7, "100": 7, "filesystem": [7, 9, 13], "net": [7, 14, 21, 22], "network_mod": 7, "stack": [7, 19], "reus": 7, "defin": [7, 10, 26], "n": 7, "rootless": [7, 22], "network_alias": [7, 22], "network_alia": [7, 22], "alia": [7, 22], "first": [7, 16, 17, 22], "later": 7, "no_healthcheck": 7, "no_host": [7, 22], "oom_kill_dis": 7, "oom": 7, "killer": 7, "oom_score_adj": 7, "prefer": 7, "o": [7, 11, 12, 13, 14, 19, 20, 22, 32], "window": 7, "conjunct": 7, "provid": [7, 12, 19, 20, 22, 32], "favor": 7, "libnss": 7, "extraus": 7, "passwd_entri": 7, "person": 7, "pid_mod": 7, "pid_fil": 7, "locat": 7, "pids_limit": 7, "unlimit": 7, "platform": [7, 26], "make": 7, "pod_id_fil": [7, 22], "preserve_fd": 7, "down": 7, "descriptor": 7, "comma": [7, 22], "total": [7, 22, 23], "fd": 7, "publish": [7, 22], "published_port": 7, "containerport": 7, "In": 7, "chosen": 7, "randomli": [7, 19], "publish_al": 7, "random": [7, 22], "interfac": [7, 19], "miss": [7, 12, 19, 20, 22, 32], "quadlet_dir": [7, 12, 19, 20, 22, 32], "quadlet": [7, 12, 19, 20, 22, 32], "quadlet_file_mod": [7, 12, 19, 20, 22, 32], "speci": [7, 12, 19, 20, 22, 32], "octal": [7, 12, 19, 20, 22, 32], "u": [7, 12, 19, 20, 22, 32], "rwx": [7, 12, 19, 20, 22, 32], "rw": [7, 12, 19, 20, 21, 22, 32], "r": [7, 12, 19, 20, 22, 32], "either": [7, 12, 14, 19, 20, 22, 25, 32], "lead": [7, 12, 19, 20, 22, 32], "zero": [7, 12, 19, 20, 22, 32], "parser": [7, 12, 19, 20, 22, 32], "know": [7, 12, 19, 20, 22, 32], "0644": [7, 12, 19, 20, 22, 32], "01777": [7, 12, 19, 20, 22, 32], "quot": [7, 12, 19, 20, 22, 32], "644": [7, 12, 19, 20, 22, 32], "1777": [7, 12, 19, 20, 22, 32], "receiv": [7, 12, 19, 20, 22, 32], "own": [7, 12, 19, 20, 22, 30, 32], "convers": [7, 12, 19, 20, 22, 32], "without": [7, 12, 19, 20, 22, 32], "end": [7, 12, 19, 20, 22, 32], "decim": [7, 12, 19, 20, 22, 32], "unexpect": [7, 12, 19, 20, 22, 32], "0640": [7, 12, 19, 20, 32], "mask": [7, 12, 19, 20, 32], "newli": [7, 12, 19, 20, 22, 32], "best": [7, 12, 19, 20, 22, 32], "wai": [7, 12, 19, 20, 22, 32], "ensur": [7, 10, 12, 19, 20, 22, 32], "correct": [7, 12, 19, 20, 22, 32], "quadlet_filenam": [7, 12, 19, 20, 22, 32], "quadlet_opt": [7, 12, 19, 20, 22, 32], "usual": [7, 12, 19, 20, 22, 32], "rdt_class": 7, "rdt": 7, "class": 7, "clo": 7, "co": 7, "read_onli": 7, "read_only_tmpf": 7, "tmp": [7, 20, 21, 22, 25], "re": [7, 22], "creation": [7, 22], "max_retri": 7, "indefinit": 7, "until": [7, 23], "count": 7, "hit": 7, "regardless": 7, "restart_tim": 7, "push": [7, 12, 25], "retry_delai": 7, "durat": 7, "delai": 7, "rm": [7, 10, 12, 30], "auto_remov": 7, "rmi": 7, "unless": [7, 16, 17, 20, 26], "impli": 7, "explod": 7, "sdnotifi": 7, "notify_socket": 7, "notifi": 7, "seccomp_polici": 7, "seccomp": [7, 20, 21, 22], "profil": [7, 20], "opt": [7, 14, 19, 21, 22, 30], "security_opt": [7, 21, 22], "secur": [7, 21, 22], "unconfin": [7, 21, 22], "shm_size": [7, 22], "shm": [7, 22], "greater": 7, "kilobyt": 7, "megabyt": 7, "gigabyt": 7, "omit": [7, 22], "entir": 7, "64m": [7, 22], "shm_size_systemd": [7, 22], "lock": [7, 22], "journal": [7, 22], "sig_proxi": 7, "sent": 7, "sigchld": 7, "sigstop": 7, "sigkil": 7, "absent": [7, 12, 19, 20, 22, 28, 32], "match": [7, 20], "assert": 7, "updat": [7, 19], "cannot": [7, 13, 17], "request": 7, "move": 7, "leav": [7, 20], "stop_sign": 7, "sigterm": 7, "stop_tim": 7, "subgidnam": [7, 22], "subgid": [7, 22], "subuidnam": [7, 22], "subuid": [7, 22], "sysctl": [7, 22], "send": 7, "timezon": 7, "area": 7, "base": [7, 19, 26], "gmt": 7, "well": 7, "zoneinfo": 7, "tls_verifi": [7, 12, 20], "http": [7, 12, 16, 20, 30], "verifi": [7, 16, 20], "787448k": 7, "uidmap": [7, 22], "unsetenv": 7, "unset": [7, 19], "unsetenv_al": 7, "usern": [7, 20, 21, 22], "userns_mod": 7, "podman_usern": [7, 20, 22], "empti": [7, 20, 22], "ut": [7, 21, 22], "variant": [7, 12], "dir": [7, 12, 22, 25], "volumes_from": [7, 22], "working_dir": 7, "quai": [7, 11, 12, 14, 15, 16, 17, 32], "bitnami": [7, 11, 12, 14], "wildfli": [7, 11, 12, 14], "mydata": 7, "busybox": 7, "myredi": 7, "appendonli": 7, "ye": 7, "6379": 7, "120": 7, "ainer": 7, "myapplic": 7, "other": [7, 17], "127": [7, 22], "xvda": 7, "8080": [7, 14], "9000": 7, "8081": 7, "9001": 7, "udp": 7, "secret_kei": 7, "ssssh": 7, "boolean_kei": 7, "ubuntu": [7, 14], "14": [7, 14, 28], "sleep": [7, 8, 10, 22], "1d": [7, 8], "balanc": [7, 12], "item": [7, 12, 22], "someus": 7, "anotherappimag": 7, "with_sequ": 7, "ohno": 7, "myservic": 7, "complex": 7, "certbot": 7, "renew": 7, "deploi": 7, "lib": [7, 14, 20], "letsencrypt": 7, "nginx": [7, 8, 11, 12, 25], "www": 7, "html": [7, 30], "autoupd": 7, "wantedbi": [7, 12], "target": [7, 10, 12, 16, 20], "repres": 7, "inspect": [7, 12, 18, 21, 22, 27, 31, 32], "regist": [7, 10, 28, 30], "sinc": [7, 17], "compat": 7, "reason": 7, "directli": 7, "12": 7, "three": 8, "alpin": [8, 11, 12, 22, 28, 30], "web": 8, "python": 8, "v": 8, "tarbal": [9, 12, 13, 25], "what": [9, 13, 14, 22, 24, 25, 29, 32], "append": 10, "But": 10, "onlin": 10, "overridden": [10, 16, 17], "man": 10, "page": 10, "wide": 10, "instanc": 10, "replac": 10, "use_nam": 10, "influenc": 10, "indic": [10, 22], "your": [10, 30], "systemctl": 10, "daemon": [10, 12], "reload": 10, "my_contain": 10, "postgr": 10, "docker": [10, 11, 12, 14, 15, 17, 19, 20, 22, 24, 25, 28, 29], "librari": [10, 11, 12], "daemon_reload": 10, "integr": 10, "postgres_loc": 10, "store": [10, 14, 17, 29], "postgres_local_systemd_unit": 10, "postgres_us": 10, "my_app": 10, "postgres_password": 10, "podman_command": 10, "my_webapp": 10, "systemd_unit": 10, "content": [10, 12, 20, 28], "servec": 10, "s\u00e9bastien": 10, "gendr": 10, "cyberfox001": 10, "amd64": [11, 12, 13, 14], "2023": [11, 31, 32], "06": [11, 12, 14], "14t20": 11, "42": 11, "13": [11, 14], "993588153z": 11, "digest": [11, 12, 13, 14], "3362f865019db5f14ac5154cb0db2c3741ad1cce0416045be422ad4de441b081": 11, "579b": 11, "histori": [11, 12, 13], "893052319z": 11, "created_bi": [11, 12, 13], "nop": [11, 12, 13], "234234234": 11, "empty_lay": [11, 12], "029bed813f07be84fae0344cbf8076ced5ea3c929d5f064ba617ac7d8c610a4b": 11, "manifesttyp": [11, 12, 13, 14], "applic": [11, 12, 13, 14], "vnd": [11, 12, 13, 14], "distribut": [11, 12, 14], "manifest": [11, 12, 13, 14, 25], "nameshistori": [11, 12, 13], "repodigest": [11, 12, 13, 14], "c58a2fce65cb3487f965d2fb08eec4843384dbe29264f427b665421db1aabef2": 11, "repotag": [11, 12, 13, 14], "layer": [11, 12, 13, 14, 25], "11745350": 11, "20": 11, "23": 11, "virtuals": [11, 12, 13, 14], "sam": [11, 12], "doran": [11, 12], "samdoran": [11, 12], "build": [12, 20], "auth_fil": 12, "credenti": [12, 17], "build_arg": 12, "buildarg": 12, "pair": [12, 13], "cach": [12, 17], "container_fil": 12, "containerfil": 12, "mutual": [12, 28], "exclus": [12, 28], "extra_arg": 12, "context": [12, 20], "force_rm": 12, "intermedi": 12, "unsuccess": 12, "built": [12, 22], "stage": 12, "ca_cert_dir": 12, "tl": [12, 16, 20], "pull_extra_arg": 12, "push_arg": 12, "compress": [12, 25], "transport": [12, 25], "url": 12, "v2s1": 12, "v2s2": [12, 25], "remove_signatur": 12, "discard": 12, "pre": 12, "signatur": 12, "sign_bi": 12, "sign": 12, "ostre": 12, "validate_cert": 12, "tlsverifi": [12, 16], "dure": 12, "0e901e68141f": 12, "basic": 12, "advanc": 12, "app": [12, 14], "function": 12, "my": [12, 20, 28], "cool": 12, "acm": 12, "bug": 12, "vault_registry_password": 12, "loop": [12, 22], "inlin": 12, "mycustom_imag": 12, "v7": 12, "wa": 12, "argsescap": 12, "2019": 12, "07t22": 12, "19": 12, "53": 12, "447205048z": 12, "8421d9a84432575381bfabd248f1eb56f3aa21d9d7cd2511583c68c9b7511d10": 12, "3fc6": 12, "313789681z": 12, "aa17928": 12, "6d1ef012b5674ad8a127ecfa9b5e6f5178d171b90ee462846974177fd9bdd39f": 12, "7": [12, 28], "8421": 12, "9225": 12, "4467084": 12, "18": [12, 31, 32], "ce": [12, 14], "gz": 13, "tgz": 13, "bzip": 13, "xz": 13, "txz": 13, "commit_messag": 13, "commit": 13, "bash": 13, "myvolum": 13, "2021": 13, "09": [13, 14, 18, 21, 22], "07t04": 13, "45": [13, 14], "38": 13, "749977105": 13, "8730c75be86a718929a658db4663d487e562d66762": 13, "34": 13, "091": 13, "cbc6d73c4d232db6e8441df96af81855f62c74157b5db80a1d5": 13, "5882449": 13, "input": 14, "love": 14, "containerconfig": 14, "nami": 14, "foreground": 14, "java": 14, "image_o": 14, "debian": 14, "9": [14, 30], "nami_vers": 14, "gpg_key_servers_list": 14, "sk": 14, "keyserv": 14, "hkp": 14, "p80": 14, "pgp": 14, "mit": 14, "edu": 14, "tini_vers": 14, "v0": 14, "tini_gpg_kei": 14, "595e85a6b1b4779ea4daaec70b588dff0527a9b7": 14, "gosu_vers": 14, "gosu_gpg_kei": 14, "b42f6819007f00f88e364fd4036a9c25bf357dd4": 14, "bitnami_image_vers": 14, "r12": 14, "bitnami_app_nam": 14, "wildfly_java_hom": 14, "wildfly_java_opt": 14, "wildfly_management_http_port_numb": 14, "9990": 14, "wildfly_password": 14, "wildfly_public_consol": 14, "wildfly_server_ajp_port_numb": 14, "8009": 14, "wildfly_server_http_port_numb": 14, "wildfly_server_interfac": 14, "wildfly_usernam": 14, "wildfly_wildfly_hom": 14, "wildfly_wildfly_opt": 14, "dwildfli": 14, "deploy": 14, "ondemand": 14, "exposedport": 14, "maintain": 14, "2018": 14, "25t04": 14, "07": [14, 19], "934395523z": 14, "5c7d8e2dd66dcf4a152a4032a1d3c5a33458c67e1c1335edd8d18d738892356b": 14, "a9dbf5616cc16919a8ac0dfc60aff87a72b5be52994c4649fcc91a089a12931f": 14, "67129bd46022122a7d8b7acb490092af6c7ce244ce4fbd7d9e2d2b7f5979e090": 14, "7c51242c4c5db5c74afda76d7fdbeab6965d8b21804bb3fc597dee09c770b0ca": 14, "f97315dc58a9c002ba0cabccb9933d4b0d2113733d204188c88d72f75569b57b": 14, "1dbde2dd497ddde2b467727125b900958a051a72561e58d29abe3d660dcaa9a7": 14, "4aad9d80f30c3f0608f58173558b7554d84dee4dc4479672926eca29f75e6e33": 14, "6751fc9b6868254870c062d75a511543fc8cfda2ce6262f4945f107449219632": 14, "a27034d79081347421dd24d7e9e776c18271cd9a6e51053cb39af4d3d9c400e8": 14, "537cf0045ed9cd7989f7944e7393019c81b16c1799a2198d8348cd182665397f": 14, "27578615c5ae352af4e8449862d61aaf5c11b105a7d5905af55bd01b0c656d6": 14, "566542742840fe3034b3596f7cb9e62a6274c95a69f368f9e713746f8712c0b6": 14, "72bb96d6c53ad57a0b1e44cab226a6251598accbead40b23fac89c19ad8c25ca": 14, "bcacbdf7a119c0fa934661ca8af839e625ce6540d9ceb6827cdd389f823d49e0": 14, "prettyjw": 14, "75391df2c87e076b0c2f72d20c95c57dc8be7ee684cc07273416cce622b43367": 14, "7dd303f041039bfe8f0833092673ac35f93137d10e0fbc4302021ea65ad57731": 14, "720d9edf0cd2a9bb56b88b80be9070dbfaad359514c70094c65066963fed485d": 14, "6a567ecbf97725501a634fcb486271999aa4591b633b4ae9932a46b40f5aaf47": 14, "59e9a6db8f178f3da868614564faabb2820cdfb69be32e63a4405d6f7772f68c": 14, "310a82ccb092cd650215ab375da8943d235a263af9a029b8ac26a281446c04db": 14, "36cb91cf4513543a8f0953fed785747ea18b675bc2677f3839889cfca0aac79": 14, "569919342": 14, "17": 14, "hub": 15, "logged_in": 15, "clelang": [15, 16, 17], "clemen": [15, 16, 17], "lang": [15, 16, 17], "certdir": 16, "crt": [16, 20], "cert": [16, 20], "contact": [16, 20], "explicitli": [16, 17, 20], "verif": [16, 20], "insecur": [16, 20], "p4ssw0rd": 16, "jason": 16, "hiatt": 16, "jthiatt": 16, "michael": 16, "fox": 16, "spmfox": 16, "logout": 17, "howev": 17, "ignore_docker_credenti": 17, "correspond": 17, "kept": 17, "togeth": 17, "05": [18, 21, 22], "27t21": 18, "486699659": 18, "dns_enabl": [18, 19], "macvlan": [18, 19], "3227f9785ae4657c022c8da7b0e04d2d124199e66da10a9130437e3c3f0e0e42": 18, "intern": [18, 19], "ipam_opt": [18, 19], "ipv6_en": [18, 19], "dmz": 18, "no_default_rout": [18, 19], "subnet": [18, 19], "lease_rang": 18, "end_ip": 18, "255": 18, "start_ip": 18, "249": 18, "24": [18, 19, 23], "2001": 18, "db8": 18, "abcd": 18, "disable_dn": 19, "nameserv": 19, "ipv4": 19, "interface_nam": 19, "same": [19, 25, 28], "extern": [19, 23], "ip_rang": 19, "ipam_driv": 19, "ipam": 19, "choos": [19, 22], "dhcp": 19, "dual": 19, "becaus": 19, "net_config": 19, "cidr": 19, "vlan": 19, "mtu": 19, "bclim": 19, "threshold": 19, "broadcast": 19, "queue": 19, "32": [19, 27], "bit": 19, "altogeth": 19, "bridge_nam": 19, "assign": [19, 22], "driver_mtu": 19, "transmiss": 19, "traffic": 19, "metric": 19, "rout": 19, "everi": 19, "netavark": 19, "backend": 19, "vlan_filt": 19, "vrf": 19, "notat": 19, "podman_intern": 19, "192": [19, 32], "168": 19, "22": 19, "25": [19, 26], "13t15": 19, "43": 19, "36": 19, "548472483": 19, "3f46dc2626fe082b1ec703bc74d048765c1110c9eab7d61e33344e212279402c": 19, "virtual": 19, "network_interfac": 19, "podman2": 19, "99": 19, "structur": 20, "describ": [20, 22], "subdirectori": 20, "cert_dir": 20, "client": 20, "configmap": 20, "context_dir": 20, "kube_fil": 20, "kube_file_cont": 20, "kube": 20, "quiet": 20, "hide": 20, "seccomp_profile_root": 20, "kubelet": 20, "greet": 20, "greet_to": 20, "setworkingdirectori": 20, "exitcodepropag": 20, "special_pod": 21, "37f960e6c8accc6b5b41945b1dcf03a28d3a366f7f37049748f18b21c44f577": [21, 22], "a99a49b8fa77": [21, 22], "createcgroup": [21, 22], "pod_nam": [21, 22], "auto": [21, 22], "apparmor": [21, 22], "mypod": [21, 22], "cval": [21, 22], "otherkei": [21, 22], "kddkdk": [21, 22], "somekei": [21, 22], "somev": [21, 22], "googl": [21, 22], "data2": [21, 22], "createinfra": [21, 22], "28t20": [21, 22, 27], "41": [21, 22, 31, 32], "946926613": [21, 22], "exitpolici": [21, 22], "continu": [21, 22], "a99a41b8fa77d8c7ff1c432a7a21bc0c2afd8c13b94a9d9b9b19b66ae97920c1": [21, 22], "infraconfig": [21, 22], "dnsserver": [21, 22], "hostadd": [21, 22], "hostnetwork": [21, 22], "networkopt": [21, 22], "nomanagehost": [21, 22], "nomanageresolvconf": [21, 22], "staticip": [21, 22], "staticmac": [21, 22], "pid_n": [21, 22], "uts_n": [21, 22], "infracontainerid": [21, 22], "numcontain": [21, 22], "sharednamespac": [21, 22], "nosuid": [21, 22], "nodev": [21, 22], "rbind": [21, 22], "propag": [21, 22], "rprivat": [21, 22], "he": 22, "deleg": 22, "000": 22, "comput": 22, "power": 22, "unlik": 22, "pars": 22, "combin": 22, "w": 22, "mknod": 22, "special": 22, "exit_polici": 22, "last": 22, "lightweight": 22, "coordin": 22, "infra_command": 22, "infra_conmon_pidfil": 22, "As": 22, "infra_imag": 22, "gcr": 22, "infra_nam": 22, "kibibyt": 22, "mebibyt": 22, "gibibyt": 22, "share_par": 22, "enter": 22, "space": [22, 23], "50": 22, "percent": 22, "unpaus": 22, "differ": [22, 30], "pod1": 22, "4444": 22, "5555": 22, "localhost": 22, "pod2": 22, "workflow": 22, "ro": 22, "1h": 22, "container1": 22, "container2": 22, "qpod": 22, "sock": 22, "container_filt": 23, "filter": 23, "24h": 23, "possibl": 23, "image_filt": 23, "dangling_onli": 23, "dangl": 23, "network_filt": 23, "unus": 23, "system_al": 23, "system_volum": 23, "volume_filt": 23, "older": 23, "containers_filt": 23, "hour": 23, "ago": 23, "everyth": 23, "reclaim": 23, "roberto": 23, "alfieri": 23, "rebtoor": 23, "runlabel": 24, "get": 24, "continuumio": [24, 29], "miniconda3": [24, 29], "pavel": 24, "dostal": 24, "pdostal": 24, "uncompress": 25, "multi_image_arch": 25, "interpret": 25, "file123": 25, "fedora": 25, "file456": 25, "list_tag": 26, "term": 26, "look": 26, "Will": 26, "rhel": 26, "myimageregistri": 26, "autom": 26, "ee": 26, "minim": 26, "rhel8": 26, "known": 26, "red": 26, "hat": 26, "enterpris": 26, "atom": 26, "fulli": 26, "index": 26, "rhel7": 26, "offici": [26, 30], "star": 26, "devel": 26, "derek": 26, "water": 26, "derekwat": 26, "showsecret": 27, "show": [27, 30], "specific_secret": 27, "createdat": [27, 31, 32], "31857841": 27, "02": [27, 31, 32], "06068c676e9a7f1c7dc0da8dd": 27, "spec": 27, "filedriv": 27, "secret_nam": 27, "updatedat": 27, "print": 28, "unencrypt": 28, "driver_opt": 28, "skip_exist": 28, "remain": 28, "mysecret": 28, "super": 28, "showmysecret": 28, "msg": 28, "aliaksandr": 28, "mianzhynski": 28, "amenzhinski": 28, "target_nam": 29, "miniconda": 29, "christian": 29, "bourqu": 29, "ocafebab": 29, "doc": 30, "en": 30, "markdown": 30, "become_ex": 30, "privilege_escal": 30, "sudo_become_plugin": 30, "ansible_become_ex": 30, "become_pass": 30, "ansible_become_password": 30, "become_us": 30, "ansible_become_us": 30, "foo": 30, "stat": 30, "test_dir": 30, "ok": 30, "test_host": 30, "1003": 30, "unprivileg": 30, "modifi": 30, "owner": 30, "chmod_foo": 30, "z": 30, "now": 30, "someth": 30, "completali": 30, "situat": 30, "unaccess": 30, "again": 30, "328679": 30, "become_method": 30, "podman_ushar": 30, "we": 30, "reset": 30, "ownership": 30, "our": 30, "jano": 30, "gerzson": 30, "grz": 30, "specific_volum": 31, "11": [31, 32], "30t16": [31, 32], "310865559": [31, 32], "mountcount": [31, 32], "mountpoint": [31, 32], "postgres9": 31, "_data": [31, 32], "needschown": [31, 32], "needscopyup": [31, 32], "tpmf": 32, "due": 32, "unmount": 32, "volume1": 32, "key2": 32, "value2": 32, "loop1": 32, "ext4": 32, "quadlet_volum": 32, "cento": 32, "volnam": 32}, "objects": {"": [[1, 0, 1, "-", "ANSIBLE_BECOME_PASS"], [1, 0, 1, "-", "ANSIBLE_PODMAN_EXECUTABLE"], [1, 0, 1, "-", "ANSIBLE_PODMAN_EXTRA_ARGS"], [1, 0, 1, "-", "ANSIBLE_SUDO_EXE"], [1, 0, 1, "-", "ANSIBLE_SUDO_PASS"], [1, 0, 1, "-", "ANSIBLE_SUDO_USER"]]}, "objtypes": {"0": "std:envvar"}, "objnames": {"0": ["std", "envvar", "environment variable"]}, "titleterms": {"contain": [0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32], "podman": [0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32], "buildah": 0, "connect": [0, 2, 3], "interact": [0, 3], "an": [0, 3, 29], "exist": [0, 3], "synopsi": [0, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32], "paramet": [0, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32], "author": [0, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32], "collect": [0, 1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32], "link": [0, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32], "index": [1, 2], "all": 1, "environ": 1, "variabl": 1, "descript": 2, "plugin": 2, "modul": [2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 31, 32], "becom": [2, 30], "podman_container_copi": 4, "copi": 4, "file": [4, 13, 14, 20, 25], "from": [4, 10, 13, 14, 24], "note": [4, 5, 6, 10, 11, 26], "exampl": [4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32], "podman_container_exec": 5, "execut": 5, "command": 5, "run": [5, 24, 30], "requir": [5, 6, 7, 8, 9, 10, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 27, 28, 29, 31, 32], "return": [5, 6, 7, 10, 11, 12, 13, 14, 15, 18, 19, 21, 22, 23, 26, 27, 31, 32], "valu": [5, 6, 7, 10, 11, 12, 13, 14, 15, 18, 19, 21, 22, 23, 26, 27, 31, 32], "podman_container_info": 6, "gather": [6, 11, 18, 21, 27, 31], "fact": 6, "about": [6, 11, 18, 21, 27, 31], "us": [6, 11, 12, 16, 17, 20, 26, 30], "podman_contain": [7, 8], "manag": [7, 8, 19, 22, 28, 32], "batch": 8, "podman_export": 9, "export": 9, "podman_generate_systemd": 10, "gener": 10, "systemd": 10, "unit": 10, "pod": [10, 21, 22], "podman_image_info": 11, "info": [11, 18, 21, 27, 31], "imag": [11, 12, 14, 24, 25, 26, 29], "podman_imag": 12, "pull": 12, "podman_import": 13, "import": 13, "tar": [13, 14, 25], "podman_load": 14, "load": 14, "podman_login_info": 15, "log": [15, 17], "user": 15, "ani": 15, "given": [15, 24], "registri": [15, 16, 17], "podman_login": 16, "login": 16, "podman_logout": 17, "out": 17, "podman_network_info": 18, "network": [18, 19], "podman_network": 19, "podman_plai": 20, "plai": 20, "kubernet": 20, "yaml": 20, "podman_pod_info": 21, "podman_pod": 22, "podman_prun": 23, "allow": 23, "prune": 23, "variou": 23, "object": 23, "podman_runlabel": 24, "label": 24, "podman_sav": 25, "save": 25, "podman_search": 26, "search": 26, "remot": 26, "podman_secret_info": 27, "secret": [27, 28], "podman_secret": 28, "podman_tag": 29, "add": 29, "addit": 29, "name": 29, "local": 29, "podman_unshar": 30, "task": 30, "unshar": 30, "podman_volume_info": 31, "volum": [31, 32], "podman_volum": 32}, "envversion": {"sphinx.domains.c": 2, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 8, "sphinx.domains.index": 1, "sphinx.domains.javascript": 2, "sphinx.domains.math": 2, "sphinx.domains.python": 3, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx.ext.intersphinx": 1, "sphinx": 57}, "alltitles": {"containers.podman.buildah connection \u2013 Interact with an existing buildah container": [[0, "containers-podman-buildah-connection-interact-with-an-existing-buildah-container"]], "Synopsis": [[0, "synopsis"], [3, "synopsis"], [4, "synopsis"], [5, "synopsis"], [6, "synopsis"], [7, "synopsis"], [8, "synopsis"], [9, "synopsis"], [10, "synopsis"], [11, "synopsis"], [12, "synopsis"], [13, "synopsis"], [14, "synopsis"], [15, "synopsis"], [16, "synopsis"], [17, "synopsis"], [18, "synopsis"], [19, "synopsis"], [20, "synopsis"], [21, "synopsis"], [22, "synopsis"], [23, "synopsis"], [24, "synopsis"], [25, "synopsis"], [26, "synopsis"], [27, "synopsis"], [28, "synopsis"], [29, "synopsis"], [30, "synopsis"], [31, "synopsis"], [32, "synopsis"]], "Parameters": [[0, "parameters"], [3, "parameters"], [4, "parameters"], [5, "parameters"], [6, "parameters"], [7, "parameters"], [8, "parameters"], [9, "parameters"], [10, "parameters"], [11, "parameters"], [12, "parameters"], [13, "parameters"], [14, "parameters"], [15, "parameters"], [16, "parameters"], [17, "parameters"], [18, "parameters"], [19, "parameters"], [20, "parameters"], [21, "parameters"], [22, "parameters"], [23, "parameters"], [24, "parameters"], [25, "parameters"], [26, "parameters"], [27, "parameters"], [28, "parameters"], [29, "parameters"], [30, "parameters"], [31, "parameters"], [32, "parameters"]], "Authors": [[0, "authors"], [3, "authors"], [4, "authors"], [5, "authors"], [6, "authors"], [7, "authors"], [8, "authors"], [9, "authors"], [10, "authors"], [11, "authors"], [12, "authors"], [13, "authors"], [14, "authors"], [15, "authors"], [16, "authors"], [17, "authors"], [18, "authors"], [19, "authors"], [20, "authors"], [21, "authors"], [22, "authors"], [23, "authors"], [24, "authors"], [25, "authors"], [26, "authors"], [27, "authors"], [28, "authors"], [29, "authors"], [30, "authors"], [31, "authors"], [32, "authors"]], "Collection links": [[0, "collection-links"], [3, "collection-links"], [4, "collection-links"], [5, "collection-links"], [6, "collection-links"], [7, "collection-links"], [8, "collection-links"], [9, "collection-links"], [10, "collection-links"], [11, "collection-links"], [12, "collection-links"], [13, "collection-links"], [14, "collection-links"], [15, "collection-links"], [16, "collection-links"], [17, "collection-links"], [18, "collection-links"], [19, "collection-links"], [20, "collection-links"], [21, "collection-links"], [22, "collection-links"], [23, "collection-links"], [24, "collection-links"], [25, "collection-links"], [26, "collection-links"], [27, "collection-links"], [28, "collection-links"], [29, "collection-links"], [30, "collection-links"], [31, "collection-links"], [32, "collection-links"]], "Index of all Collection Environment Variables": [[1, "index-of-all-collection-environment-variables"]], "Containers.Podman": [[2, "containers-podman"]], "Description": [[2, "description"]], "Plugin Index": [[2, "plugin-index"]], "Modules": [[2, "modules"]], "Become Plugins": [[2, "become-plugins"]], "Connection Plugins": [[2, "connection-plugins"]], "containers.podman.podman connection \u2013 Interact with an existing podman container": [[3, "containers-podman-podman-connection-interact-with-an-existing-podman-container"]], "containers.podman.podman_container_copy module \u2013 Copy file to/from a container": [[4, "containers-podman-podman-container-copy-module-copy-file-to-from-a-container"]], "Notes": [[4, "notes"], [5, "notes"], [6, "notes"], [10, "notes"], [11, "notes"], [26, "notes"]], "Examples": [[4, "examples"], [5, "examples"], [6, "examples"], [7, "examples"], [8, "examples"], [9, "examples"], [10, "examples"], [11, "examples"], [12, "examples"], [13, "examples"], [14, "examples"], [15, "examples"], [16, "examples"], [17, "examples"], [18, "examples"], [19, "examples"], [20, "examples"], [21, "examples"], [22, "examples"], [23, "examples"], [24, "examples"], [25, "examples"], [26, "examples"], [27, "examples"], [28, "examples"], [29, "examples"], [30, "examples"], [31, "examples"], [32, "examples"]], "containers.podman.podman_container_exec module \u2013 Executes a command in a running container.": [[5, "containers-podman-podman-container-exec-module-executes-a-command-in-a-running-container"]], "Requirements": [[5, "requirements"], [6, "requirements"], [7, "requirements"], [8, "requirements"], [9, "requirements"], [10, "requirements"], [13, "requirements"], [14, "requirements"], [15, "requirements"], [16, "requirements"], [17, "requirements"], [18, "requirements"], [19, "requirements"], [20, "requirements"], [21, "requirements"], [22, "requirements"], [23, "requirements"], [24, "requirements"], [25, "requirements"], [27, "requirements"], [28, "requirements"], [29, "requirements"], [31, "requirements"], [32, "requirements"]], "Return Values": [[5, "return-values"], [6, "return-values"], [7, "return-values"], [10, "return-values"], [11, "return-values"], [12, "return-values"], [13, "return-values"], [14, "return-values"], [15, "return-values"], [18, "return-values"], [19, "return-values"], [21, "return-values"], [22, "return-values"], [23, "return-values"], [26, "return-values"], [27, "return-values"], [31, "return-values"], [32, "return-values"]], "containers.podman.podman_container_info module \u2013 Gather facts about containers using podman": [[6, "containers-podman-podman-container-info-module-gather-facts-about-containers-using-podman"]], "containers.podman.podman_container module \u2013 Manage podman containers": [[7, "containers-podman-podman-container-module-manage-podman-containers"]], "containers.podman.podman_containers module \u2013 Manage podman containers in a batch": [[8, "containers-podman-podman-containers-module-manage-podman-containers-in-a-batch"]], "containers.podman.podman_export module \u2013 Export a podman container": [[9, "containers-podman-podman-export-module-export-a-podman-container"]], "containers.podman.podman_generate_systemd module \u2013 Generate systemd unit from a pod or a container": [[10, "containers-podman-podman-generate-systemd-module-generate-systemd-unit-from-a-pod-or-a-container"]], "containers.podman.podman_image_info module \u2013 Gather info about images using podman": [[11, "containers-podman-podman-image-info-module-gather-info-about-images-using-podman"]], "containers.podman.podman_image module \u2013 Pull images for use by podman": [[12, "containers-podman-podman-image-module-pull-images-for-use-by-podman"]], "containers.podman.podman_import module \u2013 Import Podman container from a tar file.": [[13, "containers-podman-podman-import-module-import-podman-container-from-a-tar-file"]], "containers.podman.podman_load module \u2013 Load image from a tar file.": [[14, "containers-podman-podman-load-module-load-image-from-a-tar-file"]], "containers.podman.podman_login_info module \u2013 Return the logged-in user if any for a given registry": [[15, "containers-podman-podman-login-info-module-return-the-logged-in-user-if-any-for-a-given-registry"]], "containers.podman.podman_login module \u2013 Login to a container registry using podman": [[16, "containers-podman-podman-login-module-login-to-a-container-registry-using-podman"]], "containers.podman.podman_logout module \u2013 Log out of a container registry using podman": [[17, "containers-podman-podman-logout-module-log-out-of-a-container-registry-using-podman"]], "containers.podman.podman_network_info module \u2013 Gather info about podman networks": [[18, "containers-podman-podman-network-info-module-gather-info-about-podman-networks"]], "containers.podman.podman_network module \u2013 Manage podman networks": [[19, "containers-podman-podman-network-module-manage-podman-networks"]], "containers.podman.podman_play module \u2013 Play kubernetes YAML file using podman": [[20, "containers-podman-podman-play-module-play-kubernetes-yaml-file-using-podman"]], "containers.podman.podman_pod_info module \u2013 Gather info about podman pods": [[21, "containers-podman-podman-pod-info-module-gather-info-about-podman-pods"]], "containers.podman.podman_pod module \u2013 Manage Podman pods": [[22, "containers-podman-podman-pod-module-manage-podman-pods"]], "containers.podman.podman_prune module \u2013 Allows to prune various podman objects": [[23, "containers-podman-podman-prune-module-allows-to-prune-various-podman-objects"]], "containers.podman.podman_runlabel module \u2013 Run given label from given image": [[24, "containers-podman-podman-runlabel-module-run-given-label-from-given-image"]], "containers.podman.podman_save module \u2013 Saves podman image to tar file": [[25, "containers-podman-podman-save-module-saves-podman-image-to-tar-file"]], "containers.podman.podman_search module \u2013 Search for remote images using podman": [[26, "containers-podman-podman-search-module-search-for-remote-images-using-podman"]], "containers.podman.podman_secret_info module \u2013 Gather info about podman secrets": [[27, "containers-podman-podman-secret-info-module-gather-info-about-podman-secrets"]], "containers.podman.podman_secret module \u2013 Manage podman secrets": [[28, "containers-podman-podman-secret-module-manage-podman-secrets"]], "containers.podman.podman_tag module \u2013 Add an additional name to a local image": [[29, "containers-podman-podman-tag-module-add-an-additional-name-to-a-local-image"]], "containers.podman.podman_unshare become \u2013 Run tasks using podman unshare": [[30, "containers-podman-podman-unshare-become-run-tasks-using-podman-unshare"]], "containers.podman.podman_volume_info module \u2013 Gather info about podman volumes": [[31, "containers-podman-podman-volume-info-module-gather-info-about-podman-volumes"]], "containers.podman.podman_volume module \u2013 Manage Podman volumes": [[32, "containers-podman-podman-volume-module-manage-podman-volumes"]]}, "indexentries": {"ansible_remote_user": [[0, "index-0"], [3, "index-2"]], "environment variable": [[0, "index-0"], [1, "envvar-ANSIBLE_BECOME_PASS"], [1, "envvar-ANSIBLE_PODMAN_EXECUTABLE"], [1, "envvar-ANSIBLE_PODMAN_EXTRA_ARGS"], [1, "envvar-ANSIBLE_SUDO_EXE"], [1, "envvar-ANSIBLE_SUDO_PASS"], [1, "envvar-ANSIBLE_SUDO_USER"], [3, "index-0"], [3, "index-1"], [3, "index-2"], [30, "index-0"], [30, "index-1"], [30, "index-2"], [30, "index-3"], [30, "index-4"], [30, "index-5"]], "ansible_become_pass": [[1, "envvar-ANSIBLE_BECOME_PASS"], [30, "index-2"]], "ansible_podman_executable": [[1, "envvar-ANSIBLE_PODMAN_EXECUTABLE"], [3, "index-0"]], "ansible_podman_extra_args": [[1, "envvar-ANSIBLE_PODMAN_EXTRA_ARGS"], [3, "index-1"]], "ansible_sudo_exe": [[1, "envvar-ANSIBLE_SUDO_EXE"], [30, "index-1"]], "ansible_sudo_pass": [[1, "envvar-ANSIBLE_SUDO_PASS"], [30, "index-3"]], "ansible_sudo_user": [[1, "envvar-ANSIBLE_SUDO_USER"], [30, "index-5"]], "ansible_become_exe": [[30, "index-0"]], "ansible_become_user": [[30, "index-4"]]}})
\ No newline at end of file
+Search.setIndex({"docnames": ["buildah_connection", "buildah_containers_inventory", "environment_variables", "index", "podman_connection", "podman_container_copy_module", "podman_container_exec_module", "podman_container_info_module", "podman_container_module", "podman_containers_inventory", "podman_containers_module", "podman_export_module", "podman_generate_systemd_module", "podman_image_info_module", "podman_image_module", "podman_import_module", "podman_load_module", "podman_login_info_module", "podman_login_module", "podman_logout_module", "podman_network_info_module", "podman_network_module", "podman_play_module", "podman_pod_info_module", "podman_pod_module", "podman_prune_module", "podman_quadlet_info_module", "podman_quadlet_module", "podman_runlabel_module", "podman_save_module", "podman_search_module", "podman_secret_info_module", "podman_secret_module", "podman_system_info_module", "podman_tag_module", "podman_unshare_become", "podman_volume_info_module", "podman_volume_module"], "filenames": ["buildah_connection.rst", "buildah_containers_inventory.rst", "environment_variables.rst", "index.rst", "podman_connection.rst", "podman_container_copy_module.rst", "podman_container_exec_module.rst", "podman_container_info_module.rst", "podman_container_module.rst", "podman_containers_inventory.rst", "podman_containers_module.rst", "podman_export_module.rst", "podman_generate_systemd_module.rst", "podman_image_info_module.rst", "podman_image_module.rst", "podman_import_module.rst", "podman_load_module.rst", "podman_login_info_module.rst", "podman_login_module.rst", "podman_logout_module.rst", "podman_network_info_module.rst", "podman_network_module.rst", "podman_play_module.rst", "podman_pod_info_module.rst", "podman_pod_module.rst", "podman_prune_module.rst", "podman_quadlet_info_module.rst", "podman_quadlet_module.rst", "podman_runlabel_module.rst", "podman_save_module.rst", "podman_search_module.rst", "podman_secret_info_module.rst", "podman_secret_module.rst", "podman_system_info_module.rst", "podman_tag_module.rst", "podman_unshare_become.rst", "podman_volume_info_module.rst", "podman_volume_module.rst"], "titles": ["containers.podman.buildah connection", "containers.podman.buildah_containers inventory", "Index of all Collection Environment Variables", "Containers.Podman", "containers.podman.podman connection", "containers.podman.podman_container_copy module", "containers.podman.podman_container_exec module", "containers.podman.podman_container_info module", "containers.podman.podman_container module", "containers.podman.podman_containers inventory", "containers.podman.podman_containers module", "containers.podman.podman_export module", "containers.podman.podman_generate_systemd module", "containers.podman.podman_image_info module", "containers.podman.podman_image module", "containers.podman.podman_import module", "containers.podman.podman_load module", "containers.podman.podman_login_info module", "containers.podman.podman_login module", "containers.podman.podman_logout module", "containers.podman.podman_network_info module", "containers.podman.podman_network module", "containers.podman.podman_play module", "containers.podman.podman_pod_info module", "containers.podman.podman_pod module", "containers.podman.podman_prune module", "containers.podman.podman_quadlet_info module", "containers.podman.podman_quadlet module", "containers.podman.podman_runlabel module", "containers.podman.podman_save module", "containers.podman.podman_search module", "containers.podman.podman_secret_info module", "containers.podman.podman_secret module", "containers.podman.podman_system_info module", "containers.podman.podman_tag module", "containers.podman.podman_unshare become", "containers.podman.podman_volume_info module", "containers.podman.podman_volume module"], "terms": {"The": [0, 1, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37], "document": [0, 1, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37], "plugin": [0, 1, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37], "wa": [0, 1, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37], "malform": [0, 1, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37], "error": [0, 1, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37], "were": [0, 1, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37], "1": [0, 1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37], "valid": [0, 1, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37], "plugindocschema": [0, 1, 4, 9, 35], "doc": [0, 1, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37], "plugin_nam": [0, 1, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37], "extra": [0, 1, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37], "field": [0, 1, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37], "permit": [0, 1, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37], "type": [0, 1, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37], "value_error": [0, 1, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37], "file": [0, 1, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37], "bug": [0, 1, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37], "collect": [0, 1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37], "order": [0, 1, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37], "have": [0, 1, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37], "correct": [0, 1, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37], "follow": 2, "declar": 2, "us": 2, "ansibl": [2, 3], "core": [2, 3], "configur": 2, "ar": [2, 3], "ansible_configuration_set": 2, "No": 2, "been": 2, "defin": 2, "version": 3, "17": [], "0": 3, "author": 3, "sagi": 3, "shnaidman": 3, "sshnaidm": 3, "redhat": 3, "com": 3, "team": 3, "support": 3, "2": 3, "8": 3, "newer": 3, "issu": 3, "tracker": 3, "repositori": 3, "sourc": 3, "These": 3, "podman_contain": 3, "podman_container_copi": 3, "podman_container_exec": 3, "podman_container_info": 3, "podman_export": 3, "podman_generate_systemd": 3, "podman_imag": 3, "podman_image_info": 3, "podman_import": 3, "podman_load": 3, "podman_login": 3, "podman_login_info": 3, "podman_logout": 3, "podman_network": 3, "podman_network_info": 3, "podman_plai": 3, "podman_pod": 3, "podman_pod_info": 3, "podman_prun": 3, "podman_quadlet": 3, "podman_quadlet_info": 3, "podman_runlabel": 3, "podman_sav": 3, "podman_search": 3, "podman_secret": 3, "podman_secret_info": 3, "podman_system_info": 3, "podman_tag": 3, "podman_volum": 3, "podman_volume_info": 3, "podman_unshar": 3, "buildah": 3, "buildah_contain": 3, "moduledocschema": [5, 6, 7, 8, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 36, 37], "18": 3}, "objects": {}, "objtypes": {}, "objnames": {}, "titleterms": {"contain": [0, 1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37], "podman": [0, 1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37], "buildah": 0, "connect": [0, 3, 4], "buildah_contain": 1, "inventori": [1, 3, 9], "index": [2, 3], "all": 2, "collect": 2, "environ": 2, "variabl": 2, "descript": 3, "plugin": 3, "modul": [3, 5, 6, 7, 8, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 36, 37], "becom": [3, 35], "podman_container_copi": 5, "podman_container_exec": 6, "podman_container_info": 7, "podman_contain": [8, 9, 10], "podman_export": 11, "podman_generate_systemd": 12, "podman_image_info": 13, "podman_imag": 14, "podman_import": 15, "podman_load": 16, "podman_login_info": 17, "podman_login": 18, "podman_logout": 19, "podman_network_info": 20, "podman_network": 21, "podman_plai": 22, "podman_pod_info": 23, "podman_pod": 24, "podman_prun": 25, "podman_quadlet_info": 26, "podman_quadlet": 27, "podman_runlabel": 28, "podman_sav": 29, "podman_search": 30, "podman_secret_info": 31, "podman_secret": 32, "podman_system_info": 33, "podman_tag": 34, "podman_unshar": 35, "podman_volume_info": 36, "podman_volum": 37}, "envversion": {"sphinx.domains.c": 2, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 8, "sphinx.domains.index": 1, "sphinx.domains.javascript": 2, "sphinx.domains.math": 2, "sphinx.domains.python": 3, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx.ext.intersphinx": 1, "sphinx": 57}, "alltitles": {"containers.podman.buildah connection": [[0, "containers-podman-buildah-connection"]], "containers.podman.buildah_containers inventory": [[1, "containers-podman-buildah-containers-inventory"]], "Index of all Collection Environment Variables": [[2, "index-of-all-collection-environment-variables"]], "Containers.Podman": [[3, "containers-podman"]], "Description": [[3, "description"]], "Plugin Index": [[3, "plugin-index"]], "Modules": [[3, "modules"]], "Become Plugins": [[3, "become-plugins"]], "Connection Plugins": [[3, "connection-plugins"]], "Inventory Plugins": [[3, "inventory-plugins"]], "containers.podman.podman connection": [[4, "containers-podman-podman-connection"]], "containers.podman.podman_container_copy module": [[5, "containers-podman-podman-container-copy-module"]], "containers.podman.podman_container_exec module": [[6, "containers-podman-podman-container-exec-module"]], "containers.podman.podman_container_info module": [[7, "containers-podman-podman-container-info-module"]], "containers.podman.podman_container module": [[8, "containers-podman-podman-container-module"]], "containers.podman.podman_containers inventory": [[9, "containers-podman-podman-containers-inventory"]], "containers.podman.podman_containers module": [[10, "containers-podman-podman-containers-module"]], "containers.podman.podman_export module": [[11, "containers-podman-podman-export-module"]], "containers.podman.podman_generate_systemd module": [[12, "containers-podman-podman-generate-systemd-module"]], "containers.podman.podman_image_info module": [[13, "containers-podman-podman-image-info-module"]], "containers.podman.podman_image module": [[14, "containers-podman-podman-image-module"]], "containers.podman.podman_import module": [[15, "containers-podman-podman-import-module"]], "containers.podman.podman_load module": [[16, "containers-podman-podman-load-module"]], "containers.podman.podman_login_info module": [[17, "containers-podman-podman-login-info-module"]], "containers.podman.podman_login module": [[18, "containers-podman-podman-login-module"]], "containers.podman.podman_logout module": [[19, "containers-podman-podman-logout-module"]], "containers.podman.podman_network_info module": [[20, "containers-podman-podman-network-info-module"]], "containers.podman.podman_network module": [[21, "containers-podman-podman-network-module"]], "containers.podman.podman_play module": [[22, "containers-podman-podman-play-module"]], "containers.podman.podman_pod_info module": [[23, "containers-podman-podman-pod-info-module"]], "containers.podman.podman_pod module": [[24, "containers-podman-podman-pod-module"]], "containers.podman.podman_prune module": [[25, "containers-podman-podman-prune-module"]], "containers.podman.podman_quadlet_info module": [[26, "containers-podman-podman-quadlet-info-module"]], "containers.podman.podman_quadlet module": [[27, "containers-podman-podman-quadlet-module"]], "containers.podman.podman_runlabel module": [[28, "containers-podman-podman-runlabel-module"]], "containers.podman.podman_save module": [[29, "containers-podman-podman-save-module"]], "containers.podman.podman_search module": [[30, "containers-podman-podman-search-module"]], "containers.podman.podman_secret_info module": [[31, "containers-podman-podman-secret-info-module"]], "containers.podman.podman_secret module": [[32, "containers-podman-podman-secret-module"]], "containers.podman.podman_system_info module": [[33, "containers-podman-podman-system-info-module"]], "containers.podman.podman_tag module": [[34, "containers-podman-podman-tag-module"]], "containers.podman.podman_unshare become": [[35, "containers-podman-podman-unshare-become"]], "containers.podman.podman_volume_info module": [[36, "containers-podman-podman-volume-info-module"]], "containers.podman.podman_volume module": [[37, "containers-podman-podman-volume-module"]]}, "indexentries": {}})
\ No newline at end of file
diff --git a/playbooks/examples/README.md b/playbooks/examples/README.md
new file mode 100644
index 0000000..b7855b9
--- /dev/null
+++ b/playbooks/examples/README.md
@@ -0,0 +1,51 @@
+### Buildah connection playbook examples
+
+This folder contains self-contained Ansible playbooks demonstrating how to build images with Buildah while executing steps inside a working container through the Buildah connection plugin (`ansible_connection: containers.podman.buildah`). Each example shows a realistic workflow and explains the options used.
+
+Prerequisites
+- Podman and Buildah installed (rootless supported)
+- Ansible installed (`ansible-core` recommended)
+- Network access to pull base images
+
+How these playbooks work
+- A working container is created on localhost using `buildah from `.
+- The playbook dynamically adds a temporary inventory host whose `ansible_connection` is `containers.podman.buildah` and `remote_addr` is the Buildah working container ID.
+- File operations and commands within the container use the Buildah connection plugin (no SSH), so modules like `copy`, `command`, and `shell` act inside the container.
+- Image metadata/commit/push operations are executed on localhost with `buildah config/commit/push` referencing the same container ID.
+
+Common variables
+- `buildah_base_image`: base image to start the working container (varies per example)
+- `image_name`: final image name (and optional tag)
+- `ansible_buildah_working_directory`: working directory inside the container for all build steps (passed to the connection plugin)
+
+Examples
+1) build_node_ai_api.yml — Node.js AI prediction API image without a Dockerfile
+ - Starts from `node:14`, copies `package.json` and app sources to `/app`, runs `npm install`, sets image metadata, commits to `my-ai-node-app:latest`.
+ - Options highlighted:
+ - `ansible_connection: containers.podman.buildah`
+ - `ansible_buildah_working_directory: /app`
+
+2) build_go_ai_multistage.yml — Multi-stage Go build to a minimal runtime image
+ - Stage 1: compile inside `golang:1.21` working container, fetch the compiled binary to host.
+ - Stage 2: start `alpine:latest`, copy binary into the container, configure CMD and exposed port, commit `minimal-ai-inference:latest`.
+ - Shows how to move artifacts between stages using the connection plugin’s `fetch_file` and normal `copy`.
+
+3) build_ai_env_with_ansible.yml — Create a consistent AI dev environment image with an Ansible role
+ - Starts from `python:3.11-slim`, then applies role `roles/ai-dev-env` which installs common data-science packages inside the container using raw/pip commands.
+ - Demonstrates layering higher-level Ansible logic on top of a Buildah working container.
+
+4) gitlab_ci_build_model_image.yml — CI-friendly image build using Buildah connection (template)
+ - Builds and optionally pushes an image for a simple model serving app (`app.py`, `requirements.txt`).
+ - Designed to be called from GitLab CI; see the included `.gitlab-ci.yml` for a minimal job that runs `ansible-playbook`.
+
+Running an example
+```bash
+cd playbook/examples
+ansible-playbook build_node_ai_api.yml -e image_name=my-ai-node-app:latest
+```
+
+Notes
+- The Buildah connection runs commands with `buildah run …` under the hood; metadata operations such as `buildah config`, `commit`, and `push` still run on localhost and reference the working container ID.
+- If you prefer persistent names, set `container_name` (Buildah will use named working containers). Otherwise, the container ID returned by `buildah from` is used.
+
+
diff --git a/playbooks/examples/build_ai_env_with_ansible.yml b/playbooks/examples/build_ai_env_with_ansible.yml
new file mode 100644
index 0000000..8f75ea1
--- /dev/null
+++ b/playbooks/examples/build_ai_env_with_ansible.yml
@@ -0,0 +1,41 @@
+---
+- name: Build a consistent AI dev environment image using Ansible and Buildah connection
+ hosts: localhost
+ gather_facts: false
+ vars:
+ base_image: "python:3.11-slim"
+ image_name: "ai-dev-env:latest"
+ workdir: "/workspace"
+ tasks:
+ - name: Start Buildah working container
+ command: buildah from {{ base_image }}
+ register: from_out
+
+ - set_fact:
+ container_id: "{{ from_out.stdout | trim }}"
+
+ - name: Configure working directory
+ command: buildah config --workingdir {{ workdir }} {{ container_id }}
+
+ - name: Add working container as dynamic host (Buildah connection)
+ add_host:
+ name: "buildcntr_{{ container_id }}"
+ ansible_connection: containers.podman.buildah
+ ansible_host: "{{ container_id }}"
+ ansible_buildah_working_directory: "{{ workdir }}"
+
+ - name: Provision AI environment inside container using role
+ import_role:
+ name: ai-dev-env
+ delegate_to: "buildcntr_{{ container_id }}"
+
+ - name: Set container metadata
+ shell: |
+ buildah config --env "JUPYTER_TOKEN=ansible" {{ container_id }}
+ buildah config --port 8888 {{ container_id }}
+ buildah config --cmd "jupyter lab --ip=0.0.0.0 --no-browser" {{ container_id }}
+
+ - name: Commit image
+ command: buildah commit {{ container_id }} {{ image_name }}
+
+
diff --git a/playbooks/examples/build_go_ai_multistage.yml b/playbooks/examples/build_go_ai_multistage.yml
new file mode 100644
index 0000000..6ea242b
--- /dev/null
+++ b/playbooks/examples/build_go_ai_multistage.yml
@@ -0,0 +1,84 @@
+---
+- name: Build minimal Go-based AI inference image with multi-stage using Buildah connection
+ hosts: localhost
+ gather_facts: false
+ vars:
+ build_stage_image: "golang:1.23"
+ runtime_image: "alpine:latest"
+ image_name: "minimal-ai-inference:latest"
+ source_dir: "{{ playbook_dir }}/go_app"
+ build_workdir: "/app"
+ tasks:
+ - name: Ensure source exists
+ stat:
+ path: "{{ source_dir }}/main.go"
+ register: go_src
+
+ - name: Fail if source missing
+ fail:
+ msg: "Provide a Go main.go under {{ source_dir }}"
+ when: not go_src.stat.exists
+
+ - name: Start build stage container (Go toolchain)
+ command: buildah from {{ build_stage_image }}
+ register: build_from
+
+ - set_fact:
+ build_container: "{{ build_from.stdout | trim }}"
+
+ - name: Add build container to inventory
+ add_host:
+ name: "build_stage_{{ build_container }}"
+ ansible_connection: containers.podman.buildah
+ ansible_host: "{{ build_container }}"
+ ansible_buildah_working_directory: "{{ build_workdir }}"
+
+ - name: Configure workdir
+ command: buildah config --workingdir {{ build_workdir }} {{ build_container }}
+
+ - name: Copy sources
+ copy:
+ src: "{{ source_dir }}/main.go"
+ dest: "{{ build_workdir }}/main.go"
+ delegate_to: "build_stage_{{ build_container }}"
+
+ - name: Build static binary
+ shell: CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o inference-engine main.go
+ args:
+ chdir: "{{ build_workdir }}"
+ delegate_to: "build_stage_{{ build_container }}"
+
+ - name: Fetch compiled binary to host
+ fetch:
+ src: "{{ build_workdir }}/inference-engine"
+ dest: "{{ playbook_dir }}/inference-engine"
+ flat: true
+ delegate_to: "build_stage_{{ build_container }}"
+
+ - name: Remove build container
+ command: buildah rm {{ build_container }}
+
+ - name: Start runtime container
+ command: buildah from {{ runtime_image }}
+ register: run_from
+
+ - set_fact:
+ run_container: "{{ run_from.stdout | trim }}"
+
+ - name: Copy binary into runtime container
+ command: buildah copy {{ run_container }} {{ playbook_dir }}/inference-engine /inference-engine
+
+ - name: Configure runtime image
+ shell: |
+ buildah config --cmd "/inference-engine" {{ run_container }}
+ buildah config --port 8080 {{ run_container }}
+
+ - name: Commit image
+ command: buildah commit {{ run_container }} {{ image_name }}
+
+ - name: Cleanup host artifact
+ file:
+ path: "{{ playbook_dir }}/inference-engine"
+ state: absent
+
+
diff --git a/playbooks/examples/build_node_ai_api.yml b/playbooks/examples/build_node_ai_api.yml
new file mode 100644
index 0000000..32d3bb8
--- /dev/null
+++ b/playbooks/examples/build_node_ai_api.yml
@@ -0,0 +1,76 @@
+---
+- name: Build Node.js AI prediction API without Dockerfile using Buildah connection
+ hosts: localhost
+ gather_facts: false
+ vars:
+ buildah_base_image: "node:24"
+ image_name: "my-ai-node-app:latest"
+ workdir: "/app"
+ # App sources live under examples/node_app/
+ app_src_dir: "{{ playbook_dir }}/node_app"
+ tasks:
+ - name: Ensure app sources exist
+ stat:
+ path: "{{ app_src_dir }}/package.json"
+ register: app_sources
+
+ - name: Fail if sources are missing
+ fail:
+ msg: "Example sources not found under {{ app_src_dir }}. Provide package.json and app.js."
+ when: not app_sources.stat.exists
+
+ - name: Start Buildah working container
+ command: buildah from {{ buildah_base_image }}
+ register: from_out
+ changed_when: true
+
+ - name: Set container id fact
+ set_fact:
+ container_id: "{{ from_out.stdout | trim }}"
+
+ - name: Add working container as a dynamic host to inventory
+ add_host:
+ name: "buildcntr_{{ container_id }}"
+ ansible_connection: containers.podman.buildah
+ ansible_host: "{{ container_id }}"
+ ansible_buildah_working_directory: "{{ workdir }}"
+
+ - name: Configure image metadata (workdir)
+ command: buildah config --workingdir {{ workdir }} {{ container_id }}
+
+ - name: Copy package files first for better layer caching
+ copy:
+ src: "{{ item }}"
+ dest: "{{ workdir }}/"
+ with_items:
+ - "{{ app_src_dir }}/package.json"
+ - "{{ app_src_dir }}/package-lock.json"
+ delegate_to: "buildcntr_{{ container_id }}"
+
+ - name: Install dependencies
+ command: npm install
+ delegate_to: "buildcntr_{{ container_id }}"
+
+ - name: Copy application code
+ copy:
+ src: "{{ app_src_dir }}/app.js"
+ dest: "{{ workdir }}/app.js"
+ delegate_to: "buildcntr_{{ container_id }}"
+
+ - name: Expose port and set default command
+ shell: |
+ buildah config --port 3000 {{ container_id }}
+ buildah config --cmd "node app.js" {{ container_id }}
+
+ - name: Commit image
+ command: buildah commit {{ container_id }} {{ image_name }}
+
+ - name: Show resulting image
+ command: buildah images --format '{{"{{.Name}}:{{.Tag}}"}}\t{{"{{.Size}}"}}'
+ register: imgs
+ changed_when: false
+
+ - debug:
+ var: imgs.stdout_lines
+
+
diff --git a/playbooks/examples/go_app/main.go b/playbooks/examples/go_app/main.go
new file mode 100644
index 0000000..477385c
--- /dev/null
+++ b/playbooks/examples/go_app/main.go
@@ -0,0 +1,19 @@
+package main
+
+import (
+ "fmt"
+ "math/rand"
+ "net/http"
+)
+
+func predict(w http.ResponseWriter, r *http.Request) {
+ fmt.Fprintf(w, "prediction=%f\n", rand.Float64())
+}
+
+func main() {
+ http.HandleFunc("/predict", predict)
+ fmt.Println("Inference engine listening on :8080")
+ http.ListenAndServe(":8080", nil)
+}
+
+
diff --git a/playbooks/examples/model_server/app.py b/playbooks/examples/model_server/app.py
new file mode 100644
index 0000000..2b7f4f2
--- /dev/null
+++ b/playbooks/examples/model_server/app.py
@@ -0,0 +1,13 @@
+from flask import Flask, jsonify
+import random
+
+app = Flask(__name__)
+
+@app.get("/predict")
+def predict():
+ return jsonify({"prediction": random.random()})
+
+if __name__ == "__main__":
+ app.run(host="0.0.0.0", port=5000)
+
+
diff --git a/playbooks/examples/model_server/requirements.txt b/playbooks/examples/model_server/requirements.txt
new file mode 100644
index 0000000..8459b23
--- /dev/null
+++ b/playbooks/examples/model_server/requirements.txt
@@ -0,0 +1,2 @@
+flask==3.0.0
+
diff --git a/playbooks/examples/node_app/app.js b/playbooks/examples/node_app/app.js
new file mode 100644
index 0000000..6ee12d9
--- /dev/null
+++ b/playbooks/examples/node_app/app.js
@@ -0,0 +1,11 @@
+const express = require('express');
+const app = express();
+
+app.get('/predict', (req, res) => {
+ // Dummy prediction endpoint
+ res.json({ prediction: Math.random() });
+});
+
+app.listen(3000, () => console.log('AI prediction API listening on :3000'));
+
+
diff --git a/playbooks/examples/node_app/package-lock.json b/playbooks/examples/node_app/package-lock.json
new file mode 100644
index 0000000..611bd5c
--- /dev/null
+++ b/playbooks/examples/node_app/package-lock.json
@@ -0,0 +1,18 @@
+{
+ "name": "ai-prediction-api",
+ "version": "1.0.0",
+ "lockfileVersion": 3,
+ "requires": true,
+ "packages": {
+ "": {
+ "name": "ai-prediction-api",
+ "version": "1.0.0",
+ "license": "MIT",
+ "dependencies": {
+ "express": "^4.18.2"
+ }
+ }
+ }
+}
+
+
diff --git a/playbooks/examples/node_app/package.json b/playbooks/examples/node_app/package.json
new file mode 100644
index 0000000..394f0c4
--- /dev/null
+++ b/playbooks/examples/node_app/package.json
@@ -0,0 +1,12 @@
+{
+ "name": "ai-prediction-api",
+ "version": "1.0.0",
+ "description": "Sample Node.js AI prediction API for Buildah example",
+ "main": "app.js",
+ "license": "MIT",
+ "dependencies": {
+ "express": "^4.18.2"
+ }
+}
+
+
diff --git a/playbooks/examples/roles/ai-dev-env/tasks/main.yml b/playbooks/examples/roles/ai-dev-env/tasks/main.yml
new file mode 100644
index 0000000..bc50b19
--- /dev/null
+++ b/playbooks/examples/roles/ai-dev-env/tasks/main.yml
@@ -0,0 +1,10 @@
+---
+# Minimal example role to provision an AI dev environment inside a Buildah working container
+- name: Ensure pip present
+ shell: python3 -m ensurepip || true
+
+- name: Upgrade pip
+ shell: python3 -m pip install --upgrade pip
+
+- name: Install common data science packages
+ shell: python3 -m pip install --no-cache-dir numpy pandas jupyterlab
diff --git a/plugins/inventory/buildah_containers.py b/plugins/inventory/buildah_containers.py
new file mode 100644
index 0000000..c34444f
--- /dev/null
+++ b/plugins/inventory/buildah_containers.py
@@ -0,0 +1,110 @@
+# Copyright (c) 2025
+# GNU General Public License v3.0+
+
+from __future__ import annotations
+
+__metaclass__ = type
+
+DOCUMENTATION = r"""
+ name: buildah_containers
+ short_description: Inventory plugin that discovers Buildah working containers as hosts
+ version_added: '1.18.0'
+ author:
+ - "Sagi Shnaidman (@sshnaidm)"
+ description:
+ - Discover Buildah working containers on the local host and add them as inventory hosts.
+ - Each discovered host is assigned the Buildah connection plugin so tasks execute inside the working container.
+ options:
+ plugin:
+ description: Token that ensures this is a source file for the 'containers.podman.buildah_containers' inventory plugin.
+ required: true
+ type: str
+ choices: ['containers.podman.buildah_containers']
+ executable:
+ description: Path to the C(buildah) executable.
+ type: str
+ default: buildah
+ env:
+ - name: ANSIBLE_BUILDAH_EXECUTABLE
+ name_patterns:
+ description: Glob patterns to match working container names or IDs; empty means include all.
+ type: list
+ elements: str
+ default: []
+ connection_plugin:
+ description: Fully-qualified connection plugin to use for discovered hosts.
+ type: str
+ default: containers.podman.buildah
+ # Logging uses Ansible verbosity (-v/-vvv). Extra debug option is not required.
+"""
+
+EXAMPLES = r"""
+plugin: containers.podman.buildah_containers
+connection_plugin: containers.podman.buildah
+name_patterns:
+ - my-build-*
+"""
+
+import json
+import fnmatch
+import shutil
+import subprocess
+
+from ansible.errors import AnsibleParserError
+from ansible.plugins.inventory import BaseInventoryPlugin, Cacheable, Constructable
+from ansible_collections.containers.podman.plugins.module_utils.inventory.utils import verify_inventory_file
+
+
+class InventoryModule(BaseInventoryPlugin, Cacheable, Constructable):
+ NAME = "containers.podman.buildah_containers"
+
+ def verify_file(self, path: str) -> bool:
+ if not super(InventoryModule, self).verify_file(path):
+ return False
+ return verify_inventory_file(self, path)
+
+ def parse(self, inventory, loader, path, cache=True):
+ super(InventoryModule, self).parse(inventory, loader, path)
+ config = self._read_config_data(path)
+
+ executable = config.get("executable", "buildah")
+ name_patterns = list(config.get("name_patterns", []) or [])
+ connection_plugin = config.get("connection_plugin", "containers.podman.buildah")
+ # Logging is controlled by Ansible verbosity flags
+
+ buildah_path = shutil.which(executable) or executable
+
+ # 'buildah containers -a --format json' lists working containers
+ args = [buildah_path, "containers", "-a", "--json"]
+ output = ""
+ containers = []
+ try:
+ output = subprocess.check_output(args, stderr=subprocess.STDOUT)
+ containers = json.loads(output.decode("utf-8"))
+ except Exception as exc:
+ raise AnsibleParserError(f"Failed to list buildah containers: {exc} from output {output}")
+
+ for c in containers:
+ name = c.get("name") or c.get("containername") or c.get("id")
+ cid = c.get("id") or c.get("containerid")
+ if not name and cid:
+ name = cid[:12]
+
+ # name filtering
+ if name_patterns:
+ if not any(fnmatch.fnmatch(name, pat) or (cid and fnmatch.fnmatch(cid, pat)) for pat in name_patterns):
+ self.display.vvvv(f"Filtered out {name or cid} by name_patterns option")
+ continue
+
+ host = name or cid
+ if not host:
+ self.display.vvvv(f"Filtered out {name or cid} by no name or cid")
+ continue
+
+ self.inventory.add_host(host)
+ self.inventory.set_variable(host, "ansible_connection", connection_plugin)
+ self.inventory.set_variable(host, "ansible_host", name or cid)
+ if cid:
+ self.inventory.set_variable(host, "buildah_container_id", cid)
+ if name:
+ self.inventory.set_variable(host, "buildah_container_name", name)
diff --git a/plugins/inventory/podman_containers.py b/plugins/inventory/podman_containers.py
new file mode 100644
index 0000000..c89c4a2
--- /dev/null
+++ b/plugins/inventory/podman_containers.py
@@ -0,0 +1,304 @@
+# Copyright (c) 2025
+# GNU General Public License v3.0+
+
+from __future__ import annotations
+
+__metaclass__ = type
+
+DOCUMENTATION = r"""
+ name: podman_containers
+ short_description: Inventory plugin that discovers Podman containers as hosts
+ version_added: '1.18.0'
+ author:
+ - "Sagi Shnaidman (@sshnaidm)"
+ description:
+ - Discover running (and optionally stopped) Podman containers on the local host and add them as inventory hosts.
+ - Each discovered host is assigned an Ansible connection plugin so tasks execute inside the container without SSH.
+ options:
+ plugin:
+ description: Token that ensures this is a source file for the 'containers.podman.podman_containers' inventory plugin.
+ required: true
+ type: str
+ choices: ['containers.podman.podman_containers']
+ executable:
+ description: Path to the C(podman) executable.
+ type: str
+ default: podman
+ env:
+ - name: ANSIBLE_PODMAN_EXECUTABLE
+ include_stopped:
+ description: Whether to include stopped/exited containers.
+ type: bool
+ default: false
+ name_patterns:
+ description: Glob patterns to match container names or IDs; empty means include all.
+ type: list
+ elements: str
+ default: []
+ label_selectors:
+ description: Key/value labels that must match (all) for a container to be included.
+ type: dict
+ default: {}
+ connection_plugin:
+ description: Fully-qualified connection plugin to use for discovered hosts.
+ type: str
+ default: containers.podman.podman
+ group_by_image:
+ description: Add containers to a group derived from image name (e.g., C(image_node_14)).
+ type: bool
+ default: true
+ group_by_label:
+ description: Label keys to group containers by (C(label__)).
+ type: list
+ elements: str
+ default: []
+ # Additional options (non-API dependent), aligned with community.docker
+ verbose_output:
+ description: When true, store raw C(podman ps --format json) entry under C(podman_ps) host var.
+ type: bool
+ default: false
+ strict:
+ description: Fail when keyed/composed grouping references missing data.
+ type: bool
+ default: false
+ keyed_groups:
+ description: Create groups based on hostvars/labels.
+ type: list
+ elements: dict
+ default: []
+ groups:
+ description: Add hosts to groups based on Jinja2 conditionals.
+ type: dict
+ default: {}
+ filters:
+ description: Include/exclude selection by attributes - C(name), C(id), C(image), C(status), or C(label.).
+ type: dict
+ default: {}
+ # Logging uses Ansible verbosity (-v/-vvv). Extra debug option is not required.
+"""
+
+EXAMPLES = r"""
+plugin: containers.podman.podman_containers
+include_stopped: false
+label_selectors:
+ role: api
+connection_plugin: containers.podman.podman
+"""
+
+import json
+import fnmatch
+import shutil
+import subprocess
+
+from ansible.errors import AnsibleParserError
+from ansible.plugins.inventory import BaseInventoryPlugin, Cacheable, Constructable
+from ansible_collections.containers.podman.plugins.module_utils.inventory.utils import verify_inventory_file
+
+
+class InventoryModule(BaseInventoryPlugin, Cacheable, Constructable):
+ NAME = "containers.podman.podman_containers"
+
+ def __init__(self):
+ super(InventoryModule, self).__init__()
+
+ def verify_file(self, path: str) -> bool:
+ if not super(InventoryModule, self).verify_file(path):
+ return False
+ return verify_inventory_file(self, path)
+
+ def parse(self, inventory, loader, path, cache=True):
+ super(InventoryModule, self).parse(inventory, loader, path)
+ config = self._read_config_data(path)
+
+ executable = config.get("executable", "podman")
+ include_stopped = bool(config.get("include_stopped", False))
+ name_patterns = list(config.get("name_patterns", []) or [])
+ label_selectors = dict(config.get("label_selectors", {}) or {})
+ connection_plugin = config.get("connection_plugin", "containers.podman.podman")
+ group_by_image = bool(config.get("group_by_image", True))
+ group_by_label = list(config.get("group_by_label", []) or [])
+ verbose_output = bool(config.get("verbose_output", False))
+ strict = bool(config.get("strict", False))
+ keyed_groups = list(config.get("keyed_groups", []) or [])
+ composed_groups = dict(config.get("groups", {}) or {})
+ filters = dict(config.get("filters", {}) or {})
+ # Logging is controlled by Ansible verbosity flags
+
+ podman_path = shutil.which(executable) or executable
+
+ args = [podman_path, "ps", "--format", "json"]
+ if include_stopped:
+ args.insert(2, "-a")
+
+ output = ""
+ containers = []
+ try:
+ output = subprocess.check_output(args, stderr=subprocess.STDOUT)
+ containers = json.loads(output.decode("utf-8"))
+ except Exception as exc:
+ raise AnsibleParserError(f"Failed to list podman containers: {exc} from output {output}")
+
+ def matches_filters(name, cid, image, status, labels):
+ include_rules = dict(filters.get("include", {}) or {})
+ exclude_rules = dict(filters.get("exclude", {}) or {})
+
+ def matches_one(k, v):
+ if k.startswith("label."):
+ lk = k.split(".", 1)[1]
+ return fnmatch.fnmatch(str((labels or {}).get(lk, "")).lower(), str(v).lower())
+ if k == "name":
+ return fnmatch.fnmatch((name or "").lower(), str(v).lower())
+ if k == "id":
+ return fnmatch.fnmatch((cid or "").lower(), str(v).lower())
+ if k == "image":
+ return fnmatch.fnmatch((image or "").lower(), str(v).lower())
+ if k == "status":
+ return fnmatch.fnmatch((status or "").lower(), str(v).lower())
+ return False
+
+ if include_rules:
+ for k, v in include_rules.items():
+ if not matches_one(k, v):
+ return False
+ for k, v in exclude_rules.items():
+ if matches_one(k, v):
+ return False
+ return True
+
+ for c in containers:
+ name = (
+ (c.get("Names") or [c.get("Names", "")])[0]
+ if isinstance(c.get("Names"), list)
+ else c.get("Names") or c.get("Names", "")
+ )
+ cid = c.get("Id") or c.get("ID")
+ if not name and cid:
+ name = cid[:12]
+
+ # name filtering
+ if name_patterns:
+ if not any(fnmatch.fnmatch(name, pat) or (cid and fnmatch.fnmatch(cid, pat)) for pat in name_patterns):
+ self.display.vvvv(f"Filtered out {name or cid} by name_patterns option")
+ continue
+
+ # label filtering
+ labels = c.get("Labels") or {}
+ if any(labels.get(k) != v for k, v in label_selectors.items()):
+ self.display.vvvv(f"Filtered out {name or cid} by label_selectors option")
+ continue
+
+ image = c.get("Image") or c.get("ImageName")
+ status = c.get("Status") or c.get("State")
+
+ # additional include/exclude filters
+ if filters and not matches_filters(name, cid, image, status, labels):
+ self.display.vvvv(f"Filtered out {name or cid} by filters option")
+ continue
+
+ host = name or cid
+ if not host:
+ self.display.vvvv(f"Filtered out {name or cid} by no name or cid")
+ continue
+
+ self.inventory.add_host(host)
+ # Set connection plugin and remote_addr (container id or name works)
+ self.inventory.set_variable(host, "ansible_connection", connection_plugin)
+ self.inventory.set_variable(host, "ansible_host", name or cid)
+
+ # Common vars
+ self.inventory.set_variable(host, "podman_container_id", cid)
+ self.inventory.set_variable(host, "podman_container_name", name)
+ if image:
+ self.inventory.set_variable(host, "podman_image", image)
+ if status:
+ self.inventory.set_variable(host, "podman_status", status)
+ if labels:
+ self.inventory.set_variable(host, "podman_labels", labels)
+ if verbose_output:
+ self.inventory.set_variable(host, "podman_ps", c)
+
+ # Grouping
+ if group_by_image and image:
+ safe_image = image.replace(":", "_").replace("/", "_").replace("-", "_")
+ self.inventory.add_group(f"image_{safe_image}")
+ self.inventory.add_host(host, group=f"image_{safe_image}")
+
+ for key in group_by_label:
+ if key in labels:
+ val = str(labels.get(key)).replace("/", "_").replace(":", "_").replace("-", "_")
+ group = f"label_{key}_{val}"
+ self.inventory.add_group(group)
+ self.inventory.add_host(host, group=group)
+
+ # Composed and keyed groups
+ hostvars = {
+ "name": name,
+ "id": cid,
+ "image": image,
+ "status": status,
+ "labels": labels,
+ }
+ try:
+ if composed_groups:
+ self._add_host_to_composed_groups(composed_groups, hostvars, host)
+ if keyed_groups:
+ # Try built-in helper first (signature may vary by ansible-core), do not fail hard
+ try:
+ self._add_host_to_keyed_groups(keyed_groups, hostvars, host)
+ except Exception as _e:
+ self.display.vvvv(f"_add_host_to_keyed_groups helper failed: {_e}")
+ # Always run manual keyed grouping to support dotted keys like labels.role
+ for kg in keyed_groups:
+ key_expr = kg.get("key")
+ if not key_expr:
+ continue
+ # Resolve dotted key path against hostvars
+ value = None
+ cur = hostvars
+ for part in str(key_expr).split("."):
+ if isinstance(cur, dict) and part in cur:
+ cur = cur.get(part)
+ else:
+ cur = None
+ break
+ value = cur if isinstance(cur, (str, int)) else (cur if cur is not None else None)
+ if value is None:
+ if strict and kg.get("default_value") is None:
+ raise AnsibleParserError(f"Missing keyed_groups key '{key_expr}' for host {host}")
+ value = kg.get("default_value")
+ if value is None or value == "":
+ continue
+ value = str(value)
+ prefix = kg.get("prefix", "") or ""
+ sep = kg.get("separator", "_") or "_"
+ leading = bool(kg.get("leading_separator", False))
+ trailing = bool(kg.get("trailing_separator", False))
+ group_name = ""
+ if leading and not prefix:
+ group_name += sep
+ if prefix:
+ group_name += prefix
+ if value:
+ group_name += sep
+ group_name += value
+ if trailing:
+ group_name += sep
+ parent = kg.get("parent_group")
+ # Sanitize group names per Ansible rules
+ sanitized = self._sanitize_group_name(group_name)
+ parent_sanitized = self._sanitize_group_name(parent) if parent else None
+ if parent_sanitized:
+ self.inventory.add_group(parent_sanitized)
+ self.inventory.add_group(sanitized)
+ try:
+ self.inventory.add_child(parent_sanitized, sanitized)
+ except Exception:
+ pass
+ self.inventory.add_host(host, group=sanitized)
+ else:
+ self.inventory.add_group(sanitized)
+ self.inventory.add_host(host, group=sanitized)
+ except Exception as exc:
+ if strict:
+ raise
+ self.display.vvvv(f"Grouping error for host {host}: {exc}")
diff --git a/plugins/module_utils/inventory/utils.py b/plugins/module_utils/inventory/utils.py
new file mode 100644
index 0000000..8cd39f9
--- /dev/null
+++ b/plugins/module_utils/inventory/utils.py
@@ -0,0 +1,18 @@
+import os
+
+
+def verify_inventory_file(self, path: str) -> bool:
+
+ unused, ext = os.path.splitext(path)
+ if ext not in (".yml", ".yaml"):
+ return False
+ try:
+ with open(path, "r", encoding="utf-8") as f:
+ header = f.read(2048)
+ return (
+ (f"plugin: {self.NAME}\n" in header)
+ or (f"plugin: '{self.NAME}'" in header)
+ or (f'plugin: "{self.NAME}"' in header)
+ )
+ except Exception:
+ return False
diff --git a/test-requirements.txt b/test-requirements.txt
index 3edd0df..db6d8b3 100644
--- a/test-requirements.txt
+++ b/test-requirements.txt
@@ -2,3 +2,5 @@ ansible-core
pytest
pytest-forked
pytest-xdist
+pytest-cov
+coverage==7.6.1
diff --git a/tests/unit/plugins/inventory/test_buildah_containers_inventory.py b/tests/unit/plugins/inventory/test_buildah_containers_inventory.py
new file mode 100644
index 0000000..cc62d65
--- /dev/null
+++ b/tests/unit/plugins/inventory/test_buildah_containers_inventory.py
@@ -0,0 +1,116 @@
+from __future__ import absolute_import, division, print_function
+
+__metaclass__ = type
+
+import json
+from unittest.mock import patch
+
+
+class FakeInventory:
+ def __init__(self):
+ self.hostvars = {}
+ self.groups = {}
+
+ def add_group(self, name):
+ self.groups.setdefault(name, {"hosts": [], "children": []})
+
+ def add_host(self, host, group=None):
+ self.hostvars.setdefault(host, {})
+ if group:
+ self.add_group(group)
+ if host not in self.groups[group]["hosts"]:
+ self.groups[group]["hosts"].append(host)
+ else:
+ self.add_group("ungrouped")
+ if host not in self.groups["ungrouped"]["hosts"]:
+ self.groups["ungrouped"]["hosts"].append(host)
+
+ def set_variable(self, host, var, value):
+ self.hostvars.setdefault(host, {})
+ self.hostvars[host][var] = value
+
+
+def build_containers_json(entries):
+ return json.dumps(entries).encode("utf-8")
+
+
+@patch(
+ "ansible_collections.containers.podman.plugins.inventory.buildah_containers.shutil.which", return_value="buildah"
+)
+def test_basic_buildah_inventory(mock_which):
+ from ansible_collections.containers.podman.plugins.inventory.buildah_containers import (
+ InventoryModule,
+ )
+
+ containers = [
+ {"name": "w1", "id": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "containername": "w1"},
+ {"containername": "build/with/slash", "containerid": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"},
+ {"id": "cccccccccccccccccccccccccccccccc"}, # no name
+ ]
+ with patch(
+ "ansible_collections.containers.podman.plugins.inventory.buildah_containers.subprocess.check_output",
+ return_value=build_containers_json(containers),
+ ):
+ inv = FakeInventory()
+ mod = InventoryModule()
+ cfg = {"connection_plugin": "containers.podman.buildah"}
+ with patch.object(mod, "_read_config_data", return_value=cfg):
+ mod.parse(inv, loader=None, path="dummy.yml", cache=False)
+
+ # Names resolved
+ assert "w1" in inv.hostvars
+ assert "build/with/slash" in inv.hostvars
+ # Unnamed container present (either as short id or full id depending on plugin behavior)
+ unnamed_id = "cccccccccccccccccccccccccccccccc"
+ assert (unnamed_id in inv.hostvars) or (unnamed_id[:12] in inv.hostvars)
+ # Hostvars contain id/name
+ assert inv.hostvars["w1"]["buildah_container_id"].startswith("a")
+ assert inv.hostvars["w1"]["buildah_container_name"] == "w1"
+
+
+@patch(
+ "ansible_collections.containers.podman.plugins.inventory.buildah_containers.shutil.which", return_value="buildah"
+)
+def test_name_patterns_filtering_buildah(mock_which):
+ from ansible_collections.containers.podman.plugins.inventory.buildah_containers import (
+ InventoryModule,
+ )
+
+ containers = [
+ {"name": "alpha", "id": "id1"},
+ {"name": "beta", "id": "id2"},
+ {"name": "gamma", "id": "id3"},
+ ]
+ with patch(
+ "ansible_collections.containers.podman.plugins.inventory.buildah_containers.subprocess.check_output",
+ return_value=build_containers_json(containers),
+ ):
+ inv = FakeInventory()
+ mod = InventoryModule()
+ cfg = {"name_patterns": ["b*", "id3"], "connection_plugin": "containers.podman.buildah"}
+ with patch.object(mod, "_read_config_data", return_value=cfg):
+ mod.parse(inv, loader=None, path="dummy.yml", cache=False)
+
+ # Should include beta by name pattern, and gamma via id pattern
+ assert set(inv.hostvars.keys()) == {"beta", "gamma"}
+
+
+def test_verify_inventory_file_helper():
+ from ansible_collections.containers.podman.plugins.module_utils.inventory.utils import (
+ verify_inventory_file,
+ )
+
+ class Dummy:
+ NAME = "containers.podman.buildah_containers"
+
+ # wrong extension
+ assert not verify_inventory_file(Dummy(), "inv.txt")
+ # missing plugin header
+ p = "/tmp/test_inv.yml"
+ with open(p, "w", encoding="utf-8") as f:
+ f.write("foo: bar\n")
+ assert not verify_inventory_file(Dummy(), p)
+ # correct header
+ with open(p, "w", encoding="utf-8") as f:
+ f.write("plugin: containers.podman.buildah_containers\n")
+ assert verify_inventory_file(Dummy(), p)
diff --git a/tests/unit/plugins/inventory/test_podman_containers_inventory.py b/tests/unit/plugins/inventory/test_podman_containers_inventory.py
new file mode 100644
index 0000000..92581ee
--- /dev/null
+++ b/tests/unit/plugins/inventory/test_podman_containers_inventory.py
@@ -0,0 +1,458 @@
+from __future__ import absolute_import, division, print_function
+
+__metaclass__ = type
+
+import json
+from unittest.mock import patch
+
+import pytest
+
+from ansible.errors import AnsibleParserError
+
+
+class FakeInventory:
+ def __init__(self):
+ self.hostvars = {}
+ self.groups = {}
+
+ def add_group(self, name):
+ self.groups.setdefault(name, {"hosts": [], "children": []})
+
+ def add_child(self, parent, child):
+ self.add_group(parent)
+ self.add_group(child)
+ if child not in self.groups[parent]["children"]:
+ self.groups[parent]["children"].append(child)
+
+ def add_host(self, host, group=None):
+ self.hostvars.setdefault(host, {})
+ if group:
+ self.add_group(group)
+ if host not in self.groups[group]["hosts"]:
+ self.groups[group]["hosts"].append(host)
+ else:
+ self.add_group("ungrouped")
+ if host not in self.groups["ungrouped"]["hosts"]:
+ self.groups["ungrouped"]["hosts"].append(host)
+
+ def set_variable(self, host, var, value):
+ self.hostvars.setdefault(host, {})
+ self.hostvars[host][var] = value
+
+
+def build_ps_json(entries):
+ return json.dumps(entries).encode("utf-8")
+
+
+@patch("ansible_collections.containers.podman.plugins.inventory.podman_containers.shutil.which", return_value="podman")
+def test_basic_discovery_and_hostvars(mock_which):
+ from ansible_collections.containers.podman.plugins.inventory.podman_containers import (
+ InventoryModule,
+ )
+
+ containers = [
+ {
+ "Names": ["app-1"],
+ "Id": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+ "Image": "docker.io/library/alpine:latest",
+ "Status": "Up 1 second",
+ "Labels": {"env": "dev", "role": "api"},
+ },
+ {
+ "Names": ["db/primary"],
+ "ID": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
+ "ImageName": "quay.io/ns/repo-name:1.0",
+ "State": "Exited (0) 2 seconds ago",
+ "Labels": {},
+ },
+ ]
+
+ with patch(
+ "ansible_collections.containers.podman.plugins.inventory.podman_containers.subprocess.check_output",
+ return_value=build_ps_json(containers),
+ ):
+ inv = FakeInventory()
+ mod = InventoryModule()
+ # Feed config directly
+ with patch.object(
+ mod,
+ "_read_config_data",
+ return_value={
+ "executable": "podman",
+ "include_stopped": True,
+ "connection_plugin": "containers.podman.podman",
+ "group_by_image": True,
+ "group_by_label": ["env"],
+ "verbose_output": True,
+ },
+ ):
+ mod.parse(inv, loader=None, path="dummy.yml", cache=False)
+
+ # Hosts discovered
+ assert "app-1" in inv.hostvars
+ assert "db/primary" in inv.hostvars
+ # Hostvars set - image, id, status keys
+ assert inv.hostvars["app-1"]["podman_image"] == "docker.io/library/alpine:latest"
+ assert inv.hostvars["db/primary"]["podman_image"] == "quay.io/ns/repo-name:1.0"
+ assert inv.hostvars["app-1"]["podman_container_id"].startswith("a")
+ assert inv.hostvars["db/primary"]["podman_container_id"].startswith("b")
+ assert inv.hostvars["app-1"]["podman_status"].lower().startswith("up")
+ assert inv.hostvars["db/primary"]["podman_status"].lower().startswith("exited")
+ # Verbose output included
+ assert "podman_ps" in inv.hostvars["app-1"]
+ # Image grouping sanitized
+ assert "image_docker.io_library_alpine_latest" in inv.groups
+ assert "image_quay.io_ns_repo_name_1.0" in inv.groups
+ # Label grouping
+ assert "label_env_dev" in inv.groups
+ assert "app-1" in inv.groups["label_env_dev"]["hosts"]
+
+
+@patch("ansible_collections.containers.podman.plugins.inventory.podman_containers.shutil.which", return_value="podman")
+def test_name_patterns_and_label_selectors(mock_which):
+ from ansible_collections.containers.podman.plugins.inventory.podman_containers import (
+ InventoryModule,
+ )
+
+ containers = [
+ {"Names": ["one"], "Id": "id1", "Image": "alpine:latest", "Status": "Up", "Labels": {}},
+ {"Names": ["two"], "Id": "id2", "Image": "alpine:latest", "Status": "Up", "Labels": {"role": "api"}},
+ {"Names": ["three"], "Id": "id3", "Image": "alpine:latest", "Status": "Up", "Labels": {"role": "db"}},
+ ]
+ with patch(
+ "ansible_collections.containers.podman.plugins.inventory.podman_containers.subprocess.check_output",
+ return_value=build_ps_json(containers),
+ ):
+ inv = FakeInventory()
+ mod = InventoryModule()
+ cfg = {
+ "name_patterns": ["t*"],
+ "label_selectors": {"role": "api"},
+ }
+ with patch.object(mod, "_read_config_data", return_value=cfg):
+ mod.parse(inv, loader=None, path="dummy.yml", cache=False)
+
+ # Only 'two' matches both name pattern and label
+ assert list(inv.hostvars.keys()) == ["two"]
+
+
+@patch("ansible_collections.containers.podman.plugins.inventory.podman_containers.shutil.which", return_value="podman")
+def test_filters_include_exclude_and_status(mock_which):
+ from ansible_collections.containers.podman.plugins.inventory.podman_containers import (
+ InventoryModule,
+ )
+
+ containers = [
+ {"Names": ["run-a"], "Id": "r1", "Image": "quay.io/ns/a:latest", "Status": "Up", "Labels": {}},
+ {"Names": ["stop-b"], "Id": "s1", "Image": "quay.io/ns/b:latest", "Status": "Exited (0)", "Labels": {}},
+ ]
+ with patch(
+ "ansible_collections.containers.podman.plugins.inventory.podman_containers.subprocess.check_output",
+ return_value=build_ps_json(containers),
+ ):
+ inv = FakeInventory()
+ mod = InventoryModule()
+ cfg = {
+ "include_stopped": True,
+ "filters": {"include": {"image": "quay.io/*"}, "exclude": {"status": "exited*"}},
+ }
+ with patch.object(mod, "_read_config_data", return_value=cfg):
+ mod.parse(inv, loader=None, path="dummy.yml", cache=False)
+
+ # Stopped excluded, running included
+ assert "run-a" in inv.hostvars
+ assert "stop-b" not in inv.hostvars
+
+
+@patch("ansible_collections.containers.podman.plugins.inventory.podman_containers.shutil.which", return_value="podman")
+def test_keyed_groups_and_parent_group(mock_which):
+ from ansible_collections.containers.podman.plugins.inventory.podman_containers import (
+ InventoryModule,
+ )
+
+ containers = [
+ {"Names": ["svc"], "Id": "x1", "Image": "img", "Status": "Up", "Labels": {"role": "api"}},
+ {"Names": ["svc2"], "Id": "x2", "Image": "img", "Status": "Up", "Labels": {}},
+ ]
+ with patch(
+ "ansible_collections.containers.podman.plugins.inventory.podman_containers.subprocess.check_output",
+ return_value=build_ps_json(containers),
+ ):
+ inv = FakeInventory()
+ mod = InventoryModule()
+ cfg = {
+ "keyed_groups": [
+ {"key": "labels.role", "prefix": "k", "separator": "-", "parent_group": "keyed"},
+ {"key": "labels.missing", "prefix": "missing", "default_value": "unknown"},
+ ]
+ }
+ with patch.object(mod, "_read_config_data", return_value=cfg):
+ mod.parse(inv, loader=None, path="dummy.yml", cache=False)
+
+ assert "k_api" in inv.groups # sanitized hyphen -> underscore
+ assert "svc" in inv.groups["k_api"]["hosts"]
+ assert "keyed" in inv.groups
+ assert "k_api" in inv.groups["keyed"]["children"]
+ assert "missing_unknown" in inv.groups
+ assert set(inv.groups["missing_unknown"]["hosts"]) == {"svc", "svc2"}
+
+
+@patch("ansible_collections.containers.podman.plugins.inventory.podman_containers.shutil.which", return_value="podman")
+def test_strict_missing_key_raises(mock_which):
+ from ansible_collections.containers.podman.plugins.inventory.podman_containers import (
+ InventoryModule,
+ )
+
+ containers = [
+ {"Names": ["h"], "Id": "id", "Image": "img", "Status": "Up", "Labels": {}},
+ ]
+ with patch(
+ "ansible_collections.containers.podman.plugins.inventory.podman_containers.subprocess.check_output",
+ return_value=build_ps_json(containers),
+ ):
+ inv = FakeInventory()
+ mod = InventoryModule()
+ cfg = {"strict": True, "keyed_groups": [{"key": "labels.nonexistent"}]}
+ with patch.object(mod, "_read_config_data", return_value=cfg):
+ with pytest.raises(AnsibleParserError):
+ mod.parse(inv, loader=None, path="dummy.yml", cache=False)
+
+
+@patch("ansible_collections.containers.podman.plugins.inventory.podman_containers.shutil.which", return_value="podman")
+def test_include_stopped_toggles_args(mock_which):
+ from ansible_collections.containers.podman.plugins.inventory.podman_containers import (
+ InventoryModule,
+ )
+
+ def fake_co_with_a(args, stderr=None):
+ # ensure -a present when include_stopped true
+ assert "-a" in args
+ return build_ps_json([])
+
+ def fake_co_without_a(args, stderr=None):
+ # ensure -a absent when include_stopped false
+ assert "-a" not in args
+ return build_ps_json([])
+
+ inv = FakeInventory()
+ mod = InventoryModule()
+ with patch(
+ "ansible_collections.containers.podman.plugins.inventory.podman_containers.subprocess.check_output",
+ side_effect=fake_co_without_a,
+ ):
+ with patch.object(mod, "_read_config_data", return_value={"include_stopped": False}):
+ mod.parse(inv, loader=None, path="dummy.yml", cache=False)
+
+ inv2 = FakeInventory()
+ mod2 = InventoryModule()
+ with patch(
+ "ansible_collections.containers.podman.plugins.inventory.podman_containers.subprocess.check_output",
+ side_effect=fake_co_with_a,
+ ):
+ with patch.object(mod2, "_read_config_data", return_value={"include_stopped": True}):
+ mod2.parse(inv2, loader=None, path="dummy.yml", cache=False)
+
+
+@patch("ansible_collections.containers.podman.plugins.inventory.podman_containers.shutil.which", return_value="podman")
+def test_debug_paths_and_no_host(mock_which):
+ from ansible_collections.containers.podman.plugins.inventory.podman_containers import (
+ InventoryModule,
+ )
+
+ # One container with no name and no id to hit host==None path
+ containers = [{}]
+ with patch(
+ "ansible_collections.containers.podman.plugins.inventory.podman_containers.subprocess.check_output",
+ return_value=build_ps_json(containers),
+ ):
+ inv = FakeInventory()
+ mod = InventoryModule()
+ cfg = {"filters": {"include": {"name": "nomatch"}}}
+ with patch.object(mod, "_read_config_data", return_value=cfg):
+ mod.parse(inv, loader=None, path="dummy.yml", cache=False)
+ # Nothing added
+ assert inv.hostvars == {}
+
+
+@patch("ansible_collections.containers.podman.plugins.inventory.podman_containers.shutil.which", return_value="podman")
+def test_check_output_exception_path(mock_which):
+ from ansible_collections.containers.podman.plugins.inventory.podman_containers import (
+ InventoryModule,
+ )
+
+ with patch(
+ "ansible_collections.containers.podman.plugins.inventory.podman_containers.subprocess.check_output",
+ side_effect=RuntimeError("boom"),
+ ):
+ inv = FakeInventory()
+ mod = InventoryModule()
+ with patch.object(mod, "_read_config_data", return_value={}):
+ with pytest.raises(AnsibleParserError):
+ mod.parse(inv, loader=None, path="dummy.yml", cache=False)
+
+
+@patch("ansible_collections.containers.podman.plugins.inventory.podman_containers.shutil.which", return_value="podman")
+def test_filter_include_only_and_label_match(mock_which):
+ from ansible_collections.containers.podman.plugins.inventory.podman_containers import (
+ InventoryModule,
+ )
+
+ containers = [
+ {"Names": ["svc"], "Id": "x1", "Image": "reg/ns/app:1", "Status": "Up", "Labels": {"tier": "be"}},
+ {"Names": ["svc2"], "Id": "x2", "Image": "reg/ns/oth:1", "Status": "Up", "Labels": {"tier": "fe"}},
+ ]
+ with patch(
+ "ansible_collections.containers.podman.plugins.inventory.podman_containers.subprocess.check_output",
+ return_value=build_ps_json(containers),
+ ):
+ inv = FakeInventory()
+ mod = InventoryModule()
+ cfg = {"filters": {"include": {"label.tier": "be", "image": "reg/*"}}}
+ with patch.object(mod, "_read_config_data", return_value=cfg):
+ mod.parse(inv, loader=None, path="dummy.yml", cache=False)
+ assert list(inv.hostvars.keys()) == ["svc"]
+
+
+@patch("ansible_collections.containers.podman.plugins.inventory.podman_containers.shutil.which", return_value="podman")
+def test_group_by_image_and_label_skip_branches(mock_which):
+ from ansible_collections.containers.podman.plugins.inventory.podman_containers import (
+ InventoryModule,
+ )
+
+ # One without Image to skip image grouping, and one without target label for label grouping
+ containers = [
+ {"Names": ["nolbl"], "Id": "y1", "Status": "Up", "Labels": {}},
+ {"Names": ["haslbl"], "Id": "y2", "Image": "img", "Status": "Up", "Labels": {"other": "x"}},
+ ]
+ with patch(
+ "ansible_collections.containers.podman.plugins.inventory.podman_containers.subprocess.check_output",
+ return_value=build_ps_json(containers),
+ ):
+ inv = FakeInventory()
+ mod = InventoryModule()
+ cfg = {"group_by_image": True, "group_by_label": ["tier"]}
+ with patch.object(mod, "_read_config_data", return_value=cfg):
+ mod.parse(inv, loader=None, path="dummy.yml", cache=False)
+ # Image "img" should group when present; this asserts grouping executes while label grouping is skipped
+ assert "image_img" in inv.groups
+ assert "label_tier_x" not in inv.groups
+
+
+@patch("ansible_collections.containers.podman.plugins.inventory.podman_containers.shutil.which", return_value="podman")
+def test_keyed_groups_leading_trailing_separators(mock_which):
+ from ansible_collections.containers.podman.plugins.inventory.podman_containers import (
+ InventoryModule,
+ )
+
+ containers = [
+ {"Names": ["svc"], "Id": "x1", "Image": "img", "Status": "Up", "Labels": {"num": 7}},
+ ]
+ with patch(
+ "ansible_collections.containers.podman.plugins.inventory.podman_containers.subprocess.check_output",
+ return_value=build_ps_json(containers),
+ ):
+ inv = FakeInventory()
+ mod = InventoryModule()
+ cfg = {
+ "keyed_groups": [
+ {
+ "key": "labels.num",
+ "prefix": "p",
+ "separator": "-",
+ "leading_separator": True,
+ "trailing_separator": True,
+ }
+ ]
+ }
+ with patch.object(mod, "_read_config_data", return_value=cfg):
+ mod.parse(inv, loader=None, path="dummy.yml", cache=False)
+ # Expect group name sanitized; verify host assignment in some group containing 'p' and '7'
+ assert any(("p" in g and "7" in g and "svc" in inv.groups[g]["hosts"]) for g in inv.groups)
+
+
+@patch("ansible_collections.containers.podman.plugins.inventory.podman_containers.shutil.which", return_value="podman")
+def test_filters_include_by_id_only(mock_which):
+ from ansible_collections.containers.podman.plugins.inventory.podman_containers import (
+ InventoryModule,
+ )
+
+ containers = [
+ {"Names": ["first"], "Id": "idaaa", "Image": "img1", "Status": "Up", "Labels": {}},
+ {"Names": ["second"], "Id": "idbbb", "Image": "img2", "Status": "Up", "Labels": {}},
+ ]
+ with patch(
+ "ansible_collections.containers.podman.plugins.inventory.podman_containers.subprocess.check_output",
+ return_value=build_ps_json(containers),
+ ):
+ inv = FakeInventory()
+ mod = InventoryModule()
+ cfg = {"filters": {"include": {"id": "ida*"}}}
+ with patch.object(mod, "_read_config_data", return_value=cfg):
+ mod.parse(inv, loader=None, path="dummy.yml", cache=False)
+ assert list(inv.hostvars.keys()) == ["first"]
+
+
+@patch("ansible_collections.containers.podman.plugins.inventory.podman_containers.shutil.which", return_value="podman")
+def test_name_falls_back_to_short_id_when_no_names(mock_which):
+ from ansible_collections.containers.podman.plugins.inventory.podman_containers import (
+ InventoryModule,
+ )
+
+ long_id = "1234567890abcdef1234567890abcdef"
+ containers = [
+ {"Id": long_id, "Image": "img", "Status": "Up", "Labels": {}},
+ ]
+ with patch(
+ "ansible_collections.containers.podman.plugins.inventory.podman_containers.subprocess.check_output",
+ return_value=build_ps_json(containers),
+ ):
+ inv = FakeInventory()
+ mod = InventoryModule()
+ with patch.object(mod, "_read_config_data", return_value={}):
+ mod.parse(inv, loader=None, path="dummy.yml", cache=False)
+ # Host should be short id
+ assert long_id[:12] in inv.hostvars
+
+
+@patch("ansible_collections.containers.podman.plugins.inventory.podman_containers.shutil.which", return_value="podman")
+def test_filters_unknown_key_path(mock_which):
+ from ansible_collections.containers.podman.plugins.inventory.podman_containers import (
+ InventoryModule,
+ )
+
+ containers = [
+ {"Names": ["x"], "Id": "idx", "Image": "img", "Status": "Up", "Labels": {}},
+ ]
+ with patch(
+ "ansible_collections.containers.podman.plugins.inventory.podman_containers.subprocess.check_output",
+ return_value=build_ps_json(containers),
+ ):
+ inv = FakeInventory()
+ mod = InventoryModule()
+ cfg = {"filters": {"include": {"unknown": "val"}}}
+ with patch.object(mod, "_read_config_data", return_value=cfg):
+ mod.parse(inv, loader=None, path="dummy.yml", cache=False)
+ # Include with unknown key should exclude host
+ assert inv.hostvars == {}
+
+
+@patch("ansible_collections.containers.podman.plugins.inventory.podman_containers.shutil.which", return_value="podman")
+def test_include_rules_status_only(mock_which):
+ from ansible_collections.containers.podman.plugins.inventory.podman_containers import (
+ InventoryModule,
+ )
+
+ containers = [
+ {"Names": ["run"], "Id": "r1", "Image": "img1", "Status": "Up 2s", "Labels": {}},
+ {"Names": ["stop"], "Id": "s1", "Image": "img2", "Status": "Exited (0)", "Labels": {}},
+ ]
+ with patch(
+ "ansible_collections.containers.podman.plugins.inventory.podman_containers.subprocess.check_output",
+ return_value=build_ps_json(containers),
+ ):
+ inv = FakeInventory()
+ mod = InventoryModule()
+ cfg = {"include_stopped": True, "filters": {"include": {"status": "up*"}}}
+ with patch.object(mod, "_read_config_data", return_value=cfg):
+ mod.parse(inv, loader=None, path="dummy.yml", cache=False)
+ assert list(inv.hostvars.keys()) == ["run"]