实例学习ansible系列(4)常用模块之command/shell/raw

时间:2021-09-13 13:54:49

知识点:使用module command或者shell或者raw都能调用对象机器上的某条指令或者某个可执行文件。

使用方法

[root@host31 ~]# ansible localhost -m command -a "echo hello"
localhost | SUCCESS | rc=0 >>
hello

[root@host31 ~]# ansible localhost -m shell -a "echo hello"
localhost | SUCCESS | rc=0 >>
hello

[root@host31 ~]# ansible localhost -m raw -a "echo hello"
localhost | SUCCESS | rc=0 >>
hello


[root@host31 ~]#

是否支持管道

module 是否支持管道
command 不支持管道
shell 支持管道
raw 支持管道
[root@host31 ~]# ansible localhost -m command -a "ps -ef |wc -l"
localhost | FAILED | rc=1 >>
error: garbage option

Usage:
ps [options]

Try 'ps --help <simple|list|output|threads|misc|all>'
or 'ps --help <s|l|o|t|m|a>'
for additional help text.

For more details see ps(1).

[root@host31 ~]# ansible localhost -m shell -a "ps -ef |wc -l"
localhost | SUCCESS | rc=0 >>
448

[root@host31 ~]# ansible localhost -m raw -a "ps -ef |wc -l"
localhost | SUCCESS | rc=0 >>
445


[root@host31 ~]#

直接执行某个文件

[root@host31 ~]# ansible host32 -m command -a "/tmp/ttt.sh"
host32 | SUCCESS | rc=0 >>
hello world

[root@host31 ~]# ansible host32 -m raw -a "/tmp/ttt.sh"
host32 | SUCCESS | rc=0 >>
hello world


[root@host31 ~]# ansible host32 -m shell -a "/tmp/ttt.sh"
host32 | SUCCESS | rc=0 >>
hello world

[root@host31 ~]#

都是支持的,但是需要注意/tmp/ttt.sh应该有执行权限

ansible-doc -s取得更详细信息

希望知道更加详细的module的信息,最好的方法是使用ansible自带的ansible-doc的-s选项

[root@host31 ~]# ansible-doc -s raw
- name: Executes a low-down and dirty SSH command
action: raw
executable # change the shell used to execute the command. Should be an absolute path to the executable.
free_form= # the raw module takes a free form command to run
[root@host31 ~]#
[root@host31 ~]# ansible-doc -s shell
- name: Execute commands in nodes.
action: shell
chdir # cd into this directory before running the command
creates # a filename, when it already exists, this step will *not* be run.
executable # change the shell used to execute the command. Should be an absolute path to the executable.
free_form= # The shell module takes a free form command to run, as a string. There's not an actual option
named "free form". See the examples!
removes # a filename, when it does not exist, this step will *not* be run.
warn # if command warnings are on in ansible.cfg, do not warn about this particular line if set to
no/false.
[root@host31 ~]#
[root@host31 ~]# ansible-doc -s command
- name: Executes a command on a remote node
action: command
chdir # cd into this directory before running the command
creates # a filename or (since 2.0) glob pattern, when it already exists, this step will *not* be run.
executable # change the shell used to execute the command. Should be an absolute path to the executable.
free_form= # the command module takes a free form command to run. There is no parameter actually named 'free
form'. See the examples!
removes # a filename or (since 2.0) glob pattern, when it does not exist, this step will *not* be run.
warn # if command warnings are on in ansible.cfg, do not warn about this particular line if set to
no/false.
[root@host31 ~]#