add stdin argument to command module

fixes #14380
This commit is contained in:
Guillaume Coré 2017-04-07 13:28:35 +02:00 committed by Toshio Kuratomi
parent b7d99f43d5
commit 905c25559d
2 changed files with 38 additions and 1 deletions

View file

@ -49,6 +49,12 @@ options:
type: bool
default: 'yes'
version_added: "1.8"
stdin:
version_added: "2.4"
description:
- Set the stdin of the command directly to the specified value.
required: false
default: null
notes:
- If you want to run a command through the shell (say you are using C(<), C(>), C(|), etc), you actually want the M(shell) module instead.
The C(command) module is much more secure as it's not affected by the user's environment.
@ -121,6 +127,7 @@ def main():
creates=dict(type='path'),
removes=dict(type='path'),
warn=dict(type='bool', default=True),
stdin=dict(required=False),
)
)
@ -131,6 +138,7 @@ def main():
creates = module.params['creates']
removes = module.params['removes']
warn = module.params['warn']
stdin = module.params['stdin']
if not shell and executable:
module.warn("As of Ansible 2.4, the parameter 'executable' is no longer supported with the 'command' module. Not using '%s'." % executable)
@ -174,7 +182,7 @@ def main():
args = shlex.split(args)
startd = datetime.datetime.now()
rc, out, err = module.run_command(args, executable=executable, use_unsafe_shell=shell, encoding=None)
rc, out, err = module.run_command(args, executable=executable, use_unsafe_shell=shell, encoding=None, data=stdin)
endd = datetime.datetime.now()
delta = endd - startd

View file

@ -121,6 +121,35 @@
that:
- "command_result4.changed != True"
- name: pass stdin to cat via command
command: "cat"
args:
stdin: 'foobar'
register: command_result5
- name: assert that stdin is passed
assert:
that:
- "command_result5.stdout == 'foobar'"
- name: send to stdin literal multiline block
command: "{{ sha1sum.stdout }}"
args:
stdin: |-
this is the first line
this is the second line
this line is after an empty line
this line is the last line
register: command_result6
- debug: var=command_result6
- name: assert the multiline input was passed correctly
assert:
that:
- "command_result6.stdout == '9cd0697c6a9ff6689f0afb9136fa62e0b3fee903 -'"
##
## shell
##