|
|
|
#!/usr/bin/python
|
|
|
|
# I am an Ansible new-style Python module. I return details about the Python
|
|
|
|
# interpreter I run within.
|
|
|
|
|
|
|
|
from ansible.module_utils.basic import AnsibleModule
|
|
|
|
from ansible.module_utils.basic import get_module_path
|
|
|
|
|
|
|
|
import os
|
|
|
|
import pwd
|
|
|
|
import socket
|
|
|
|
import sys
|
|
|
|
|
|
|
|
|
|
|
|
try:
|
|
|
|
all
|
|
|
|
except NameError:
|
|
|
|
# Python 2.4
|
|
|
|
def all(it):
|
|
|
|
for elem in it:
|
|
|
|
if not elem:
|
|
|
|
return False
|
|
|
|
return True
|
|
|
|
|
|
|
|
|
|
|
|
def main():
|
|
|
|
module = AnsibleModule(argument_spec={})
|
|
|
|
module.exit_json(
|
|
|
|
fs={
|
|
|
|
'/tmp': {
|
|
|
|
'resolved': os.path.realpath('/tmp'),
|
|
|
|
},
|
|
|
|
},
|
|
|
|
python={
|
|
|
|
'version': {
|
|
|
|
'full': '%i.%i.%i' % sys.version_info[:3],
|
|
|
|
'info': list(sys.version_info),
|
|
|
|
'major': sys.version_info[0],
|
|
|
|
'minor': sys.version_info[1],
|
|
|
|
'patch': sys.version_info[2],
|
|
|
|
},
|
|
|
|
},
|
|
|
|
argv=sys.argv,
|
issue #199: ansible: stop writing temp files for new style modules
While adding support for non-new style module types, NewStyleRunner
began writing modules to a temporary file, and sys.argv was patched to
actually include the script filename. The argv change was never required
to fix any particular bug, and a search of the standard modules reveals
no argv users. Update argv[0] to be '', like an interactive interpreter
would have.
While fixing #210, new style runner began setting __file__ to the
temporary file path in order to allow apt.py to discover the Ansiballz
temporary directory. 5 out of 1,516 standard modules follow this
pattern, but in each case, none actually attempt to access __file__,
they just call dirname on it. Therefore do not write the contents of
file, simply set it to the path as it would exist, within a real
temporary directory.
Finally move temporary directory creation out of runner and into target.
Now a single directory exists for the duration of a run, and is emptied
by runner.py as necessary after each task invocation.
This could be further extended to stop rewriting non-new-style modules
in a with_items loop, but that's another step.
Finally the last bullet point in the documentation almost isn't a lie
again.
7 years ago
|
|
|
__file__=__file__,
|
|
|
|
argv_types_correct=all(type(s) is str for s in sys.argv),
|
|
|
|
env=dict(os.environ),
|
|
|
|
cwd=os.getcwd(),
|
|
|
|
python_path=sys.path,
|
|
|
|
pid=os.getpid(),
|
|
|
|
ppid=os.getppid(),
|
|
|
|
uid=os.getuid(),
|
|
|
|
euid=os.geteuid(),
|
|
|
|
sys_executable=sys.executable,
|
|
|
|
mitogen_loaded='mitogen.core' in sys.modules,
|
|
|
|
hostname=socket.gethostname(),
|
|
|
|
username=pwd.getpwuid(os.getuid()).pw_name,
|
|
|
|
module_tmpdir=getattr(module, 'tmpdir', None),
|
|
|
|
module_path=get_module_path(),
|
|
|
|
)
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
|
|
main()
|