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

时间:2016-04-28 01:52:46

标签: command sh ansible

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

- hosts: web-servers
  tasks:
    - name: Run the below script
      command: sh temp/myscript.sh

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

  • ansible-copy-role(目录)
    • main.yml
    • temp(目录)
      • myscript.sh(我想运行这个Shell脚本)

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

当我运行这个剧本时,我收到如下错误: stderr:sh:temp / myscript.sh:没有这样的文件或目录

请帮忙。

2 个答案:

答案 0 :(得分:4)

如果你记住这一点,你会发现Ansible更简单:

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

如果你这样做:

- name: run some command
  command: foo

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

如果要在本地运行任务,则需要明确说明。例如:

- hosts: web-servers
  tasks:
    - name: Run the below script
      delegate_to: localhost
      command: sh temp/myscript.sh

这使用delegate_to指令运行此任务 localhost而不是web-servers主持此任务 通常会瞄准。

有关详细信息,请参阅the Ansible documentation on delegation

答案 1 :(得分:1)

除了@larsks精确答案,local_actiondelegate_to: localhost的简写。因此,这可能成为:

- hosts: web-servers
  tasks:
    - name: Run the below script
      local_action: command sh temp/myscript.sh

使用same link作为参考。