Ansible Shell模块旨在针对基于目标UNIX的主机执行Shell命令。 Ansible可以运行,但带有管道,重定向的任何高复杂度命令除外。你还可以使用Ansible shell模块执行shell脚本。
Ansible shell的主要优点是,从安全角度来看,任何带有管道和分号的高复杂度命令可能都是不利的,因为单个错误可能会花费很多并破坏系统完整性。
- Ansible shell模块设计为仅可用于基于LINUX的计算机,不适用于Windows。对于Windows,你应该使用win_shell
- Ansible Shell模块可用于执行Shell脚本。 Ansible有一个名为script的专用模块,该模块用于将Shell脚本从控制计算机复制到远程服务器。
剧本中Ansible shell模块的语法
剧本的美在于它的外观和书写方式。剧本使用YAML编写,因此很容易理解。
下图演示了如何将Adhoc命令转换为Ansible剧本的剧本。
文章图片
Adhoc中Ansible shell模块的语法
下图以Adhoc方式显示了Ansible shell模块的快速语法。
文章图片
例
使用命令行管理程序或命令模块在单个任务中执行单个命令。假设你要获取远程服务器的日期。远程服务器位于名为testservers的主机组下。
步骤1:登录Ansible服务器。
步骤2:下面是一个示例,该示例使用远程主机中的Shell模块执行单个命令。
---
-name: Shell command example
Hosts: testservers
tasks:
-name: check date with the shell command
shell:
"date"
register: datecmd
tags: datecmd
-debug: msg= "{{datecmd.stdout}}"
在上面的示例中,我们针对名为testservers的主机组运行剧本,并执行一个简单的date命令,并将该命令的输出保存到一个名为datecmd的Register变量中。
在最后一行,我们检索注册的变量并仅打印存储在datecmd的stdout属性中的date命令输出。
示例2:在一个shell中执行多个命令:
Shell可以在一次Shell播放中一起接受各种命令。另外,你可以使用Ansible shell模块编写你的shell脚本。
在下面的示例中,我们对一些shell命令进行了分组,以执行受控且干净的tomcat重新启动。
【ansible shell模块】该剧本旨在按顺序执行以下步骤,例如:
- 停止tomcatServer
- 清除缓存
- 截断日志文件
- 启动实例
---
- name: Shell Examples
hosts: testservers
tasks:
- name: Clear Cache and Restart tomcat
become: yes
delay: 10
async: 10
poll: 50
shell: |
echo -e "\n Change directory to the Tomcat"
cd tomcat8/
echo -e "\n Present working directory is" `pwd`echo -e "\n Stopping the tomcat instance"
bin/shutdown.sh
echo -e "\n Clearning the tmp and work directory of tomcat"
rm -rfv tmp/*
rm -rfv work/*
echo -e "\nTruncate the log file"
> logs/catalina.out
echo -e "\nDirectory listing"
ls -lrtd logs/catalina.out
echo -e "\nStarting the instance"
bin/startup.sh
args:
chdir: "/apps/tomcat/"
register: fileout
tags: fileout
- debug: msg="{{ fileout.stdout_lines }}"
推荐阅读
- ansible模板
- ansible模块
- ansible命令备忘单
- ansible使用标签
- ansible变量
- ansible使用角色(Role)
- ansible塔(Tower)
- ansible剧本(Playbook)
- ansible Ad-Hoc临时命令