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