import base64 from ansible.errors import AnsibleActionFail from ansible.module_utils.common.text.converters import to_text def _get_stat(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'] def does_file_exist(action, path, task_vars): return _get_stat(action, path, task_vars)['exists'] def does_dir_exist(action, path, task_vars): stat = _get_stat(action, path, task_vars) return stat['exists'] and stat.get('isdir', False) 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')