Ansible Shell

2025年3月17日 | 阅读 3 分钟

Ansible shell 模块旨在针对基于 UNIX 的目标主机执行 shell 命令。 Ansible 可以运行除任何高复杂度的命令(带管道、重定向)之外的任何命令。 您还可以使用 Ansible shell 模块执行 shell 脚本。

Ansible shell 的主要优势在于,除了任何高复杂度的命令(带管道和分号)之外,从安全角度来看,这可能是一个劣势,因为一个错误就可能付出很大代价并破坏系统完整性。

  • Ansible shell 模块设计为仅适用于基于 LINUX 的机器,而不适用于 Windows。 对于 Windows,您应该使用 win_shell
  • Ansible shell 模块可用于执行 shell 脚本。 Ansible 有一个名为 script 的专用模块,用于将 shell 脚本从控制机器复制到远程服务器。

让我们看看在 playbook 和 Adhoc 中使用 Ansible shell 模块的语法

playbook 中 Ansible shell 模块的语法

playbook 的美妙之处在于它的外观和编写方式。 playbook 用 YAML 编写,因此很容易理解。

下面的图片演示了 Adhoc 命令将如何转换为 Ansible playbook 的 play。

Ansible Shell

Adhoc 中 Ansible shell 模块的语法

下图显示了 Adhoc 方式中 Ansible shell 模块的快速语法。

Ansible Shell

示例

要在使用 Shell 或 command 模块的单个任务中执行单个命令。 假设您想获取远程服务器的日期。 并且远程服务器位于名为 testservers 的主机组下。

步骤 1:登录到 Ansible 服务器。

步骤 2:下面是一个示例,它使用 Shell 模块在远程主机中执行单个命令。

在上面的示例中,我们针对名为 testservers 的主机组运行我们的 playbook,并执行一个简单的 date 命令,并将该命令的输出保存到一个名为 datecmdRegister 变量中。

在最后一行,我们检索注册的变量,并且仅打印存储在 datecmdstdout 属性中的日期命令输出。

示例 2:在单个 shell 中执行多个命令

Shell 可以在单个 shell play 中接受各种命令。 此外,您可以使用 Ansible shell 模块编写您的 shell 脚本。

在下面的示例中,我们对一些 shell 命令进行了分组,以执行受控且干净的 tomcat 重新启动。

playbook 旨在按顺序执行以下步骤,例如

  • 停止 tomcatServer
  • 清除缓存
  • 截断日志文件
  • 启动实例

下一主题Ansible 模板