首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Ansible 系列之命令模块

不正经程序员

分析正经干货

在之前的文章中,我们已经对 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 篇其他,不知道大家觉得如何?

你的关注是我持续写作的动力!

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180619G1Q24E00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券