今天继续给大家介绍Linux运维相关知识,本文主要内容是Ansible的命令模块详解。
命令模块是Ansible很重要的模块,Ansible中一共有三个命令模块,分别是command模块、shell模块和scripts模块。利用命令模块,Ansible可以控制在客户端设备上执行指定的命令,这样就实现了由一台Ansible设备控制多台客户端来执行命令了。下面,我们就来详细讲解一下这三个模块。
一、Ansible command模块
我们在使用-m参数指定command模块后,-a参数指定command模块的参数,command模块的参数非常简单,就是我们要在客户端上执行的命令。比如,我们要客户端执行ifconfig命令,就可以在Ansible上执行命令:
ansible all -m command -a "ifconfig"
执行结果如下:
同理,我们也可以使用command模块来执行其他命令。command模块是Ansible的默认模块,当我们使用Ansible时,不使用-m参数,默认就是使用command模块,如下所示:
二、Ansible shell模块
虽然command模块时Ansible的默认模块,使用比较简单,但是command模块的命令执行不是通过shell执行的,这就导致了带有">","<","&“和”|"等特殊符号不能使用。因此,我们不能使用command模块进行输入输出重定向,也不能使用command模块一次性的执行多个命令,如下所示:
如果我们想执行类似带有上述特殊字符的命令,该怎么办呢?这时,我们可以使用Ansible的shell模块。使用shell模块,远程命令通过/bin/bash来执行。因此,无论我们在终端输入什么样的命令,都可以使用。Ansible使用shell模块执行上述命令结果如下所示:
三、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控制设备执行了该script脚本命令。
原创不易,转载请说明出处:https://blog.csdn.net/weixin_40228200