2016-04-28 50 views
1

好的..在这里,我去。这是我的main.yml内容。如何使用命令在命令任务中运行sh脚本

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

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

  • ansible复制角色(目录)
    • main.yml
    • 临时(目录)
      • myscript.sh(我要运行这个shell脚本)

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

当我运行这个剧本,我得到这样一个错误:标准错误:SH:温度/ myscript.sh:没有这样的文件或目录

这个请大家帮忙。

回答

3

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

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

如果你这样做:

- name: run some command 
    command: foo 

然后该任务将尝试在主机上运行命令foo到Ansible是连接,不是你正在运行Ansible主机上。

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

- 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

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

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

使用same link作为参考。