aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/plugins/module_utils
diff options
context:
space:
mode:
authorEgor Tensin <egor@tensin.name>2025-11-23 19:16:52 +0100
committerEgor Tensin <egor@tensin.name>2025-11-23 21:28:40 +0100
commit66913759ffbc86b101f0d69f372cad5186a729f2 (patch)
treefdbc26666cba63ba20c3af9a2112c62a9be5db64 /plugins/module_utils
parentplugins: add apt_wrapper (diff)
downloadinfra-ansible-66913759ffbc86b101f0d69f372cad5186a729f2.tar.gz
infra-ansible-66913759ffbc86b101f0d69f372cad5186a729f2.zip
plugins: factor out read_file
Diffstat (limited to 'plugins/module_utils')
-rw-r--r--plugins/module_utils/file.py34
1 files changed, 34 insertions, 0 deletions
diff --git a/plugins/module_utils/file.py b/plugins/module_utils/file.py
new file mode 100644
index 0000000..86a4f27
--- /dev/null
+++ b/plugins/module_utils/file.py
@@ -0,0 +1,34 @@
+import base64
+
+from ansible.errors import AnsibleActionFail
+from ansible.module_utils.common.text.converters import to_text
+
+
+def does_file_exist(action, path, task_vars):
+ stat_result = action._execute_module(
+ module_name='ansible.builtin.stat',
+ module_args=dict(
+ path=path,
+ get_attributes=False,
+ get_checksum=False,
+ get_mime=False,
+ ),
+ task_vars=task_vars,
+ )
+ if stat_result.get('failed'):
+ raise AnsibleActionFail(f"Couldn't stat file {path}", result=stat_result)
+ return stat_result['stat']['exists']
+
+
+def read_file(action, path, task_vars, default=False):
+ if default is not None:
+ if not does_file_exist(action, path, task_vars):
+ return default
+ read_result = action._execute_module(
+ module_name='ansible.builtin.slurp',
+ module_args=dict(src=path),
+ task_vars=task_vars,
+ )
+ if read_result.get('failed'):
+ raise AnsibleActionFail(f"Couldn't read file {path}", result=read_result)
+ return base64.b64decode(to_text(read_result['content'])).decode('utf-8')