mirror of
https://github.com/containers/ansible-podman-collections.git
synced 2026-02-04 07:11:49 +00:00
134 lines
3.8 KiB
Python
134 lines
3.8 KiB
Python
#!/usr/bin/python
|
|
# Copyright (c) 2024 Ansible Project
|
|
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
|
|
|
from __future__ import absolute_import, division, print_function
|
|
|
|
__metaclass__ = type
|
|
|
|
|
|
DOCUMENTATION = r"""
|
|
module: podman_search
|
|
author:
|
|
- Derek Waters (@derekwaters)
|
|
short_description: Search for remote images using podman
|
|
notes:
|
|
- Podman may required elevated privileges in order to run properly.
|
|
description:
|
|
- Search for remote images using C(podman)
|
|
options:
|
|
executable:
|
|
description:
|
|
- Path to C(podman) executable if it is not in the C($PATH) on the machine running C(podman)
|
|
default: 'podman'
|
|
type: str
|
|
term:
|
|
description:
|
|
- The search term to look for. Will search all default registries unless a registry is defined in the search term.
|
|
type: str
|
|
required: True
|
|
limit:
|
|
description:
|
|
- Limit the number of image results returned from the search (per image registry)
|
|
required: False
|
|
default: 25
|
|
type: int
|
|
list_tags:
|
|
description:
|
|
- Whether or not to return the list of tags associated with each image
|
|
required: False
|
|
default: False
|
|
type: bool
|
|
|
|
"""
|
|
|
|
EXAMPLES = r"""
|
|
- name: Search for any rhel images
|
|
containers.podman.podman_search:
|
|
term: "rhel"
|
|
limit: 3
|
|
|
|
- name: Gather info on a specific remote image
|
|
containers.podman.podman_search:
|
|
term: "myimageregistry.com/ansible-automation-platform/ee-minimal-rhel8"
|
|
|
|
- name: Gather tag info on a known remote image
|
|
containers.podman.podman_search:
|
|
term: "myimageregistry.com/ansible-automation-platform/ee-minimal-rhel8"
|
|
list_tags: True
|
|
"""
|
|
|
|
RETURN = r"""
|
|
images:
|
|
description: info from all or specified images
|
|
returned: always
|
|
type: list
|
|
sample: [
|
|
{
|
|
"Automated": "",
|
|
"Description": "Red Hat Enterprise Linux Atomic Image is a minimal, fully supported base image.",
|
|
"Index": "registry.access.redhat.com",
|
|
"Name": "registry.access.redhat.com/rhel7-atomic",
|
|
"Official": "",
|
|
"Stars": 0,
|
|
"Tags": ["1.0", "1.1", "1.1.1-devel"]
|
|
}
|
|
]
|
|
"""
|
|
|
|
import json
|
|
|
|
from ansible.module_utils.basic import AnsibleModule
|
|
|
|
|
|
def search_images(module, executable, term, limit, list_tags):
|
|
command = [executable, "search", term, "--format", "json"]
|
|
command.extend(["--limit", "{0}".format(limit)])
|
|
if list_tags:
|
|
command.extend(["--list-tags"])
|
|
|
|
rc, out, err = module.run_command(command)
|
|
if rc != 0 and list_tags and out == "" and "fetching tags list" in err:
|
|
return out, err
|
|
if rc != 0:
|
|
module.fail_json(msg="Unable to gather info for '{0}': {1}".format(term, err))
|
|
return out, err
|
|
|
|
|
|
def main():
|
|
module = AnsibleModule(
|
|
argument_spec=dict(
|
|
executable=dict(type="str", default="podman"),
|
|
term=dict(type="str", required=True),
|
|
limit=dict(type="int", required=False, default=25),
|
|
list_tags=dict(type="bool", required=False, default=False),
|
|
),
|
|
supports_check_mode=True,
|
|
)
|
|
|
|
executable = module.params["executable"]
|
|
term = module.params.get("term")
|
|
limit = module.params.get("limit")
|
|
list_tags = module.params.get("list_tags")
|
|
executable = module.get_bin_path(executable, required=True)
|
|
|
|
result_str, errors = search_images(module, executable, term, limit, list_tags)
|
|
if result_str == "":
|
|
results = []
|
|
else:
|
|
try:
|
|
results = json.loads(result_str)
|
|
except json.decoder.JSONDecodeError:
|
|
module.fail_json(msg="Failed to parse JSON output from podman search: {out}".format(out=result_str))
|
|
|
|
results = dict(
|
|
changed=False,
|
|
images=results,
|
|
stderr=errors,
|
|
)
|
|
|
|
module.exit_json(**results)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|