ansible shell模块

Ansible Shell模块旨在针对基于目标UNIX的主机执行Shell命令。 Ansible可以运行,但带有管道,重定向的任何高复杂度命令除外。你还可以使用Ansible shell模块执行shell脚本。
Ansible shell的主要优点是,从安全角度来看,任何带有管道和分号的高复杂度命令可能都是不利的,因为单个错误可能会花费很多并破坏系统完整性。

  • Ansible shell模块设计为仅可用于基于LINUX的计算机,不适用于Windows。对于Windows,你应该使用win_shell
  • Ansible Shell模块可用于执行Shell脚本。 Ansible有一个名为script的专用模块,该模块用于将Shell脚本从控制计算机复制到远程服务器。
让我们看看如何在剧本和Adhoc中使用Ansible shell模块的语法:
剧本中Ansible shell模块的语法
剧本的美在于它的外观和书写方式。剧本使用YAML编写,因此很容易理解。
下图演示了如何将Adhoc命令转换为Ansible剧本的剧本。
ansible shell模块

文章图片
Adhoc中Ansible shell模块的语法
下图以Adhoc方式显示了Ansible shell模块的快速语法。
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 }}"

    推荐阅读