Ansible:运行多个动作

时间:2017-05-18 10:21:29

标签: ansible

如果找不到脚本,我正在运行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

3 个答案:

答案 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

  

注意:在这里,我假设一切正常,包含所有内容,就像您在复制srcdest

时可以访问和使用路径一样
---
- 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