diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-13 12:05:48 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-13 12:05:48 +0000 |
commit | ab76d0c3dcea928a1f252ce827027aca834213cd (patch) | |
tree | 7e3797bdd2403982f4a351608d9633c910aadc12 /lib/ansible/modules/slurp.py | |
parent | Initial commit. (diff) | |
download | ansible-core-ab76d0c3dcea928a1f252ce827027aca834213cd.tar.xz ansible-core-ab76d0c3dcea928a1f252ce827027aca834213cd.zip |
Adding upstream version 2.14.13.upstream/2.14.13
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'lib/ansible/modules/slurp.py')
-rw-r--r-- | lib/ansible/modules/slurp.py | 123 |
1 files changed, 123 insertions, 0 deletions
diff --git a/lib/ansible/modules/slurp.py b/lib/ansible/modules/slurp.py new file mode 100644 index 0000000..55abfeb --- /dev/null +++ b/lib/ansible/modules/slurp.py @@ -0,0 +1,123 @@ +# -*- coding: utf-8 -*- + +# (c) 2012, Michael DeHaan <michael.dehaan@gmail.com> +# 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: slurp +version_added: historical +short_description: Slurps a file from remote nodes +description: + - This module works like M(ansible.builtin.fetch). It is used for fetching a base64- + encoded blob containing the data in a remote file. + - This module is also supported for Windows targets. +options: + src: + description: + - The file on the remote system to fetch. This I(must) be a file, not a directory. + type: path + required: true + aliases: [ path ] +extends_documentation_fragment: + - action_common_attributes +attributes: + check_mode: + support: full + diff_mode: + support: none + platform: + platforms: posix, windows +notes: + - This module returns an 'in memory' base64 encoded version of the file, take + into account that this will require at least twice the RAM as the original file size. +seealso: +- module: ansible.builtin.fetch +author: + - Ansible Core Team + - Michael DeHaan (@mpdehaan) +''' + +EXAMPLES = r''' +- name: Find out what the remote machine's mounts are + ansible.builtin.slurp: + src: /proc/mounts + register: mounts + +- name: Print returned information + ansible.builtin.debug: + msg: "{{ mounts['content'] | b64decode }}" + +# From the commandline, find the pid of the remote machine's sshd +# $ ansible host -m ansible.builtin.slurp -a 'src=/var/run/sshd.pid' +# host | SUCCESS => { +# "changed": false, +# "content": "MjE3OQo=", +# "encoding": "base64", +# "source": "/var/run/sshd.pid" +# } +# $ echo MjE3OQo= | base64 -d +# 2179 +''' + +RETURN = r''' +content: + description: Encoded file content + returned: success + type: str + sample: "MjE3OQo=" +encoding: + description: Type of encoding used for file + returned: success + type: str + sample: "base64" +source: + description: Actual path of file slurped + returned: success + type: str + sample: "/var/run/sshd.pid" +''' + +import base64 +import errno +import os + +from ansible.module_utils.basic import AnsibleModule +from ansible.module_utils.common.text.converters import to_native + + +def main(): + module = AnsibleModule( + argument_spec=dict( + src=dict(type='path', required=True, aliases=['path']), + ), + supports_check_mode=True, + ) + source = module.params['src'] + + try: + with open(source, 'rb') as source_fh: + source_content = source_fh.read() + except (IOError, OSError) as e: + if e.errno == errno.ENOENT: + msg = "file not found: %s" % source + elif e.errno == errno.EACCES: + msg = "file is not readable: %s" % source + elif e.errno == errno.EISDIR: + msg = "source is a directory and must be a file: %s" % source + else: + msg = "unable to slurp file: %s" % to_native(e, errors='surrogate_then_replace') + + module.fail_json(msg) + + data = base64.b64encode(source_content) + + module.exit_json(content=data, source=source, encoding='base64') + + +if __name__ == '__main__': + main() |