不正经程序员
分析正经干货
在之前的文章中,我们已经对 Ansible 以及 Ansible Adhoc 做了讲解,我们了解到 Ansible 类似于对 shell 进行的封装,这就形成了各种各样的模块。
后续会对 Ansible 的常用模块进行讲解,主要包括 命令模块、文件处理模块、包管理模块、服务管理模块等。
今天就带大家熟悉一下 Ansible 的几个命令模块。
命令模块,顾名思义,就是可以在远程主机上执行命令,主要包括以下几个模块:
- 在远程节点上执行命令
- 让远程主机在 shell 进程下执行命令
- 在没有 Python 环境的主机上执行命令
1 command 模块
模块用于在给的的节点上运行系统命令,比如 echo hello。
不是调用的 shell 的指令,所以没有 bash 的环境变量,也不能使用 shell 的一些操作方式,因此不支持像这样的变量,以及、、、和等都是无效的。也就是在模块中无法使用管道符。
1.1 模块参数
1.2 示例
列出指定目录下的文件
根据指定文件是否存在判断是否执行
切换目录执行命令
无法使用管道符
2 shell 模块
让远程主机在 shell 进程下执行命令,从而支持 shell 的特性,如管道等。与模块几乎相同,但在执行命令的时候调用的是。
模块参数与 command 模块相同。
2.1 示例
切换目录,执行命令并保持输出
3 raw 模块
模块不需要远程系统上的 Python。
模块只适用于下列两种场景,第一种情况是在较老的(Python 2.4和之前的版本)主机上,另一种情况是对任何没有安装 Python 的设备(如路由器)。 在其他情况下,使用或模块更为合适。
3.1 示例
1# ansible test -m raw -a "pwd"
2172.20.21.120 | SUCCESS | rc=0 >>
3/root
4Shared connection to 172.20.21.120 closed.
4 总结
command,shell,raw 模块都是 ansible 远程执行命令的一种指令模式,但是它们的适用还是有一定的区别。
模块不是调用的 shell 的指令,所以不能使用 bash 的环境变量,也不能使用 shell 的一些操作方式,其他和 shell 没有区别;另外,command 模块更安全,因为它不受用户环境变量的影响。同时, command 模块也是 Ad-Hoc 默认的模块;
与 command 模块几乎相同,但在执行命令的时候使用的是 /bin/sh。从而支持 shell 的特性,如管道等。
很多地方和 shell 类似,更多的地方建议使用 shell 和 command 模块。但是如果是使用老版本 python,需要用到 raw,又或者是没有安装 python 模块的客户端,如路由器。
总的来说,命令模块是比较简单的,没有太多参数,因此本文篇幅不长,大家对着示例多敲敲问题不大。
另外,后面打算在时间充足的情况下每周 2 篇 Ansible + 2 篇 Python + 1 篇其他,不知道大家觉得如何?
你的关注是我持续写作的动力!
领取 专属20元代金券
Get大咖技术交流圈