ansible教程:ansible的command模块

ansible的command 后面直接跟shell命令,下例是获取/root目录下的文件,如下:

ansible all -m command -a "ls"

执行结果如下:

[root@ecs-3f37-0003 ~]# ansible all -m command -a "ls"
192.168.1.39 | CHANGED | rc=0 >>
aaa
c.log
datax
datax.tar.gz
debug1.yaml
......

ansible的command模块的参数

chdir参数 : 此参数的作用就是指定一个目录,在执行对应的命令之前,会先进入到chdir参数指定的目录中,如下:

ansible all -m command -a "chdir=/root pwd"

执行结果如下:

[root@ecs-3f37-0003 ~]# ansible all -m command -a "chdir=/root pwd"
192.168.1.39 | CHANGED | rc=0 >>
/root

creates参数 :看到creates,你可能会从字面上理解这个参数,但是使用这个参数并不会帮助我们创建文件,它的作用是当指定的文件存在时,就不执行后面对应的命令,比如,如果/testdir/test文件存在,就不执行我们指定的命令echo test的命令。是不是很微妙:

ansible all -m command -a "creates=/root/debug1.yaml echo test"

如果/root/debug1.yaml文件存在, 执行结果如下:

[root@ecs-3f37-0003 ~]# ansible all -m command -a "creates=/root/debug1.yaml echo test"
192.168.1.39 | SUCCESS | rc=0 >>
skipped, since /root/debug1.yaml exists

这里提示这个文件已经存在了,不执行echo test命令

如果/root/debug1.yaml文件不存在, 执行结果如下:

[root@ecs-3f37-0003 ~]# ansible all -m command -a "creates=/root/debug1xx.yaml echo test"
192.168.1.39 | CHANGED | rc=0 >>
test

removes参数 :与creates参数的作用正好相反,它的作用是当指定的文件不存在时,就不执行对应命令,比如,如果/testdir/tests文件不存在,就不执行我们指定的命令,此参数并不会帮助我们删除文件

如下命令表示/root/debug1.yaml文件如果不存在于远程主机中,则不执行对应命令,如果存在,才执行”echo test”命令

ansible all -m command -a "removes=/root/debug1.yaml echo test"

[root@ecs-3f37-0003 ~]# ansible all -m command -a "removes=/root/debug1.yaml echo test"
192.168.1.39 | CHANGED | rc=0 >>
test