Ansible根据条件跳过剧本中的剩余任务

时间:2019-04-10 11:02:25

标签: ansible yaml

我是Ansible的新手,必须更新现有的剧本任务。最初,有2个任务可将yml变量值复制到文件-每个证书和密钥值都循环运行。 我想如果复制任务没有更改-基本上,如果内容相同,文件不会被覆盖,则不应执行剧本中的其余任务。

    - name: Copy cert files
      copy:
        content: "{{item.value}}"
        dest: /home/copyTest/dest/{{item.key}}.crt
        owner: test
        group: test
        mode: 0644
      with_dict: '{{certs_dict}}'
    - name: Copy key files
      copy:
        content: "{{item.value}}"
        dest: /home/copyTest/dest/{{item.key}}.key
        owner: test
        group: test
        mode: 0644
      with_dict: "{{keys_dict}}"
    - name: Stop server
        ...
        ...

如果这两个复制任务的结果均未更改,即证书和密钥文件均未更改,则不应执行其他任务(停止服务器,启动服务器等)。

1 个答案:

答案 0 :(得分:1)

使用register关键字存储前两个任务的结果:

- name: Copy cert files
  copy:
    content: "{{item.value}}"
    dest: /home/copyTest/dest/{{item.key}}.crt
    owner: test
    group: test
    mode: 0644
  with_dict: '{{certs_dict}}'
  register: cert_results

- name: Copy key files
  copy:
    content: "{{item.value}}"
    dest: /home/copyTest/dest/{{item.key}}.key
    owner: test
    group: test
    mode: 0644
  with_dict: "{{keys_dict}}"
  register: key_results

将剩余的任务放在单独的任务列表文件中,然后仅在进行更改的情况下,才有条件地在主剧本中包括这些其他任务:

- include_tasks: additional_tasks.yml
  when: cert_results is changed or key_results is changed

您可以阅读有关包含任务here的信息。

您可以在剧本中使用block来达到类似的目的:

- when: cert_results is changed or key_results is changed
  block:
    - name: Stop server

    - name: Do something else

    ...

您可以阅读有关here块的信息。

相关问题