From 8a754e0858d922e955e71b253c139e071ecec432 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 28 Apr 2024 18:04:21 +0200 Subject: Adding upstream version 2.14.3. Signed-off-by: Daniel Baumann --- lib/ansible/plugins/inventory/host_list.py | 66 ++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 lib/ansible/plugins/inventory/host_list.py (limited to 'lib/ansible/plugins/inventory/host_list.py') diff --git a/lib/ansible/plugins/inventory/host_list.py b/lib/ansible/plugins/inventory/host_list.py new file mode 100644 index 0000000..eee8516 --- /dev/null +++ b/lib/ansible/plugins/inventory/host_list.py @@ -0,0 +1,66 @@ +# Copyright (c) 2017 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''' + name: host_list + version_added: "2.4" + short_description: Parses a 'host list' string + description: + - Parses a host list string as a comma separated values of hosts + - This plugin only applies to inventory strings that are not paths and contain a comma. +''' + +EXAMPLES = r''' + # define 2 hosts in command line + # ansible -i '10.10.2.6, 10.10.2.4' -m ping all + + # DNS resolvable names + # ansible -i 'host1.example.com, host2' -m user -a 'name=me state=absent' all + + # just use localhost + # ansible-playbook -i 'localhost,' play.yml -c local +''' + +import os + +from ansible.errors import AnsibleError, AnsibleParserError +from ansible.module_utils._text import to_bytes, to_native, to_text +from ansible.parsing.utils.addresses import parse_address +from ansible.plugins.inventory import BaseInventoryPlugin + + +class InventoryModule(BaseInventoryPlugin): + + NAME = 'host_list' + + def verify_file(self, host_list): + + valid = False + b_path = to_bytes(host_list, errors='surrogate_or_strict') + if not os.path.exists(b_path) and ',' in host_list: + valid = True + return valid + + def parse(self, inventory, loader, host_list, cache=True): + ''' parses the inventory file ''' + + super(InventoryModule, self).parse(inventory, loader, host_list) + + try: + for h in host_list.split(','): + h = h.strip() + if h: + try: + (host, port) = parse_address(h, allow_ranges=False) + except AnsibleError as e: + self.display.vvv("Unable to parse address from hostname, leaving unchanged: %s" % to_text(e)) + host = h + port = None + + if host not in self.inventory.hosts: + self.inventory.add_host(host, group='ungrouped', port=port) + except Exception as e: + raise AnsibleParserError("Invalid data from string, could not parse: %s" % to_native(e)) -- cgit v1.2.3