📅  最后修改于: 2020-12-26 12:27:06             🧑  作者: Mango
Ansible Shell模块旨在针对基于目标UNIX的主机执行Shell命令。 Ansible可以运行,但任何带有管道,重定向的高级命令除外。您还可以使用Ansible shell模块执行shell脚本。
Ansible shell的主要优点是,从安全角度来看,任何带有管道和分号的高复杂度命令可能都是不利的,因为单个错误可能会花费很多并破坏系统完整性。
让我们看看如何在剧本和Adhoc中使用Ansible shell模块的语法:
剧本的美在于它的外观和书写方式。剧本使用YAML编写,因此很容易理解。
下图演示了如何将Adhoc命令转换为Ansible剧本的剧本。
下图以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命令输出。
外壳程序可以在一个外壳程序中一起接受各种命令。另外,您可以使用Ansible shell模块编写shell脚本。
在下面的示例中,我们对一些shell命令进行了分组,以执行受控且干净的tomcat重新启动。
该剧本旨在按顺序执行以下步骤,例如:
---
- 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 }}"