目录

一、Ansible command模块

二、Ansible shell模块

三、Ansible Script模块


一、Ansible command模块

我们在使用-m参数指定command模块后,-a参数指定command模块的参数,command模块的参数非常简单,就是我们要在客户端上执行的命令。比如,我们要客户端执行ifconfig命令,就可以在Ansible上执行命令:

ansible all -m command -a "ifconfig"

执行结果如下:

ansible撤销 ansible命令_ansible撤销


同理,我们也可以使用command模块来执行其他命令。command模块是Ansible的默认模块,当我们使用Ansible时,不使用-m参数,默认就是使用command模块,如下所示:

ansible撤销 ansible命令_Ansible_02

二、Ansible shell模块

虽然command模块时Ansible的默认模块,使用比较简单,但是command模块的命令执行不是通过shell执行的,这就导致了带有">","<","&“和”|"等特殊符号不能使用。因此,我们不能使用command模块进行输入输出重定向,也不能使用command模块一次性的执行多个命令,如下所示:

ansible撤销 ansible命令_ansible_03


如果我们想执行类似带有上述特殊字符的命令,该怎么办呢?这时,我们可以使用Ansible的shell模块。使用shell模块,远程命令通过/bin/bash来执行。因此,无论我们在终端输入什么样的命令,都可以使用。Ansible使用shell模块执行上述命令结果如下所示:

ansible撤销 ansible命令_Ansible_04

三、Ansible Script模块

尽管Ansible的shell模块可以通过管道符的方式一次性的执行多条命令,但是如果我们要执行的命令过多,shell模块在使用上还是不方便。这时,我们直观的考虑是将我们想要执行的命令写成脚本,然后想办法将该脚本复制到客户端上去,然后控制客户端执行。但是,其实Ansible自带有script模块,可以帮助我们实现上述过程。
下面,我们尝试使用Ansible的script模块。在/root目录下,创建一个exp.sh的脚本文件,在脚本文件中写入如下内容:

#!/bin/bash
pwd
hostname
date

然后执行Ansible命令:

ansible exp -m script -a "/root/exp.sh"

执行结果如下:

ansible撤销 ansible命令_bash_05


可以看出,Ansible控制设备执行了该script脚本命令。