我是 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)
如果这两个复制任务的结果都没有改变,即证书和密钥文件都没有改变,则不应执行进一步的任务(停止服务器、启动服务器等)。
使用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)
| 归档时间: |
|
| 查看次数: |
6612 次 |
| 最近记录: |