diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-28 16:04:21 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-28 16:04:21 +0000 |
commit | 8a754e0858d922e955e71b253c139e071ecec432 (patch) | |
tree | 527d16e74bfd1840c85efd675fdecad056c54107 /test/integration/targets/module_utils_common.respawn/library/respawnme.py | |
parent | Initial commit. (diff) | |
download | ansible-core-upstream/2.14.3.tar.xz ansible-core-upstream/2.14.3.zip |
Adding upstream version 2.14.3.upstream/2.14.3upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to '')
-rw-r--r-- | test/integration/targets/module_utils_common.respawn/library/respawnme.py | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/test/integration/targets/module_utils_common.respawn/library/respawnme.py b/test/integration/targets/module_utils_common.respawn/library/respawnme.py new file mode 100644 index 0000000..6471dba --- /dev/null +++ b/test/integration/targets/module_utils_common.respawn/library/respawnme.py @@ -0,0 +1,44 @@ +#!/usr/bin/python + +# Copyright: (c) 2021, 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 + +import os +import sys + +from ansible.module_utils.basic import AnsibleModule +from ansible.module_utils.common.respawn import respawn_module, has_respawned + + +def main(): + mod = AnsibleModule(argument_spec=dict( + mode=dict(required=True, choices=['multi_respawn', 'no_respawn', 'respawn']) + )) + + # just return info about what interpreter we're currently running under + if mod.params['mode'] == 'no_respawn': + mod.exit_json(interpreter_path=sys.executable) + elif mod.params['mode'] == 'respawn': + if not has_respawned(): + new_interpreter = os.path.join(mod.tmpdir, 'anotherpython') + os.symlink(sys.executable, new_interpreter) + respawn_module(interpreter_path=new_interpreter) + + # respawn should always exit internally- if we continue executing here, it's a bug + raise Exception('FAIL, should never reach this line') + else: + # return the current interpreter, as well as a signal that we created a different one + mod.exit_json(created_interpreter=sys.executable, interpreter_path=sys.executable) + elif mod.params['mode'] == 'multi_respawn': + # blindly respawn with the current interpreter, the second time should bomb + respawn_module(sys.executable) + + # shouldn't be any way for us to fall through, but just in case, that's also a bug + raise Exception('FAIL, should never reach this code') + + +if __name__ == '__main__': + main() |