这篇文章上次修改于 422 天前,可能其部分内容已经发生变化,如有疑问可询问作者。

官方文档地址

简介

  • shell模块可以看成是万能模块,可以在目标机器上执行shell脚本,也是一个常用模块。但是使用shell模块,ansible不会记录当前的执行状态,可能会出现非幂等性问题(即统一命令多次执行的结果可能是不一样的),一条指令重复执行多次等问题,所以建议尽量使用专有模块来完成工作。
  • 对于 Windows 目标,请改用ansible.windows.win_shell模块。

参数

  • chdir:在哪个目录下执行shell命令,相当于执行shell命令前先cd到对应目录

  • cmd: 要运行的命令后跟可选参数

  • creates:如果存在某文件,就不执行shell

  • executable:修改并指定shell解释器来执行命

  • free_form:指的就是具体的shell命令,实际上是一个不存在的选项

  • removes:如果不存在某文件,就不执行shell;与creates左右相反(有点绕)

  • stdin: 直接将命令的 stdin 设置为指定值

  • stdin_add_newline: 是否向标准输入数据附加换行符 , 可选值: true(默认), false

例子


# 查看目标机器的缓存使用情况 [root@k8s-master ~]# ansible k8snode -m shell -a "free -m" 192.168.1.9 | CHANGED | rc=0 >> total used free shared buff/cache available Mem: 1837 595 85 95 1157 972 Swap: 0 0 0 192.168.1.8 | CHANGED | rc=0 >> total used free shared buff/cache available Mem: 1837 853 153 104 830 704 Swap: 0 0 0 #如果存在/data 目录 就不执行ml [root@k8s-master ~]# ansible k8snode -m shell -a "free -m creates=/data" 192.168.1.9 | SUCCESS | rc=0 >> skipped, since /data exists 192.168.1.8 | SUCCESS | rc=0 >> skipped, since /data exists