我是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
...
...
如果这两个复制任务的结果均未更改,即证书和密钥文件均未更改,则不应执行其他任务(停止服务器,启动服务器等)。
答案 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块的信息。