Ansible:运行多个动作

Dev*_*ven 5 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
Run Code Online (Sandbox Code Playgroud)

Arb*_*zar 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
Run Code Online (Sandbox Code Playgroud)

希望这对你有所帮助


Jac*_*ack 5

另一种方法是使用脚本模块:

- name: Copy script and execute
  script: sync/bb.sh
Run Code Online (Sandbox Code Playgroud)

它将脚本复制过来并运行它。

如果只想运行脚本(如果尚不存在):

  - 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
Run Code Online (Sandbox Code Playgroud)

这样,如果文件不在远程主机上,并且源文件不同于远程主机上的“复制”,它将复制文件并运行它。因此,如果您更改了脚本,即使远程主机上已经有较旧的版本,它也会将其复制并执行。


Sah*_*ati 4

你应该这样做。您不能在一项任务中使用多个操作。而是根据条件语句分配它们。您还可以block在任务中使用 with。

注意:在这里,我假设一切都工作正常,您的所有内容都正常,就像您的路径在复制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
Run Code Online (Sandbox Code Playgroud)