如何使用ansible在命令任务中运行sh脚本

use*_*004 5 command sh ansible

好的。。我走了。这是我的 main.yml 内容。

- hosts: web-servers
  tasks:
    - name: Run the below script
      command: sh temp/myscript.sh
Run Code Online (Sandbox Code Playgroud)

我有一个名为“myscript.sh”的 shell 脚本放在名为“temp”的目录下。我的目录层次结构是:

  • ansible-copy-role(目录)
    • 主文件
    • 临时(目录)
      • myscript.sh(我想运行这个 Shell 脚本)

我不想将 shell 脚本复制到我的主机服务器并从 thre 运行。我想运行与 main.yml 文件一起可用的 shell 脚本。

当我运行这个剧本时,我得到一个错误,如:stderr: sh: temp/myscript.sh: No such file or directory

请帮忙解决这个问题。

lar*_*sks 7

如果您牢记这一点,您会发现 Ansible 简单得多:

Ansible 模块在目标主机上运行。

如果你这样做:

- name: run some command
  command: foo
Run Code Online (Sandbox Code Playgroud)

然后该任务将尝试fooAnsible 连接的主机上运行命令,而不是在您运行 Ansible 的主机上。

如果您想在本地运行任务,则需要明确说明这一点。例如:

- hosts: web-servers
  tasks:
    - name: Run the below script
      delegate_to: localhost
      command: sh temp/myscript.sh
Run Code Online (Sandbox Code Playgroud)

这使用delegate_to指令来运行此任务,localhost而不是在web-servers此任务通常针对的任何主机上运行 。

有关更多信息,请参阅有关委派的 Ansible 文档