如果找不到脚本,我正在运行ansible来复制并执行远程端的脚本。但是我收到了这个错误。
错误!冲突的行动声明:复制,命令
如何在单个任务中使用多个动作。
---
- name: Check if the bb.sh exists
stat:
path: /tmp/bb.sh
register: stat_result
- name: Copy and execute script
copy: src=sync/bb.sh dest=/tmp/sync/ mode=0755
command: sh -c "/bin/sh /tmp/bb.sh"
when: stat_result.stat.exists == False
答案 0 :(得分:5)
在ansible(2.x)中运行多个操作的最佳方法是使用block
:
---
- name: Check if the bb.sh exists
stat:
path: /tmp/bb.sh
register: stat_result
- block:
- name: Copy script if it doesnot exist
copy:
src: sync/bb.sh
dest: /tmp/sync/
mode: 0755
- name: "Run script"
command: sh -c "/bin/sh /tmp/bb.sh"
when: stat_result.stat.exists == False
希望可以帮到你
答案 1 :(得分:5)
另一种方法是使用script模块:
- name: Copy script and execute
script: sync/bb.sh
它复制脚本并运行它。
如果您只想运行脚本,那么:
- name: Copy file over
copy:
src: sync/bb.sh
dest: /tmp/bb.sh
mode: 0755
register: copy_result
- name: Run script if changed
shell: /tmp/bb.sh
when: copy_result.changed == true
这样,如果文件不在远程主机上,它将复制文件并运行它,如果源文件不同于" copy"在远程主机上。因此,如果您更改脚本,它将复制它并执行它,即使远程主机上已有旧版本。
答案 2 :(得分:3)
你应该这样做。您不能在一个任务中使用多个操作。而是在条件声明上分发它们。您还可以在任务中使用block
。
注意:在这里,我假设一切正常,包含所有内容,就像您在复制
时可以访问和使用路径一样src
到dest
---
- name: Check if the bb.sh exists
stat:
path: /tmp/bb.sh
register: stat_result
- name: Copy script if it doesnot exist
copy: src=sync/bb.sh dest=/tmp/sync/ mode=0755
when: stat_result.stat.exists == False
- name: "Run script"
command: sh -c "/bin/sh /tmp/bb.sh"
when: stat_result.stat.exists == False