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

Xav*_*uza 1 yaml ansible

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

如果这两个复制任务的结果都没有改变,即证书和密钥文件都没有改变,则不应执行进一步的任务(停止服务器、启动服务器等)。

lar*_*sks 6

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

将您剩余的任务放在单独的任务列表文件中,然后在您的主剧本中有条件地包含这些附加任务,只有在发生更改时:

- include_tasks: additional_tasks.yml
  when: cert_results is changed or key_results is changed
Run Code Online (Sandbox Code Playgroud)

您可以在此处阅读有关包含任务的信息

您可以使用block剧本中的a 实现类似的功能:

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

    - name: Do something else

    ...
Run Code Online (Sandbox Code Playgroud)

您可以在此处阅读有关块的信息