我在 ansible playbook 中有三個任務,它們足夠獨特,我無法將它們包裝在一個回圈中。為簡單起見,假設他們在云提供商中創建三個不同的 VM 實體,并且每個任務都有特定的配置
- name: Create VM set A
cloud_provider.vm:
{stuff here}
- name: Create VM set B
cloud_provider.vm:
{stuff here}
- name: Create VM set C
cloud_provider.vm:
{stuff here}
現在這可以作業了,并創建了三組虛擬機,但我想并行運行它們,所以我不會等太久(虛擬機運行幾個啟動程序,這需要一段時間)
我看過
https://docs.ansible.com/ansible/latest/collections/ansible/builtin/async_status_module.html#async-status-module
和
https://docs.ansible.com/ansible/latest/user_guide/playbooks_async.html
但他們似乎使用了我在這里做不到的回圈,因為不同的集合非常不同。
如何/我可以異步這些任務?
uj5u.com熱心網友回復:
問:“他們似乎使用了我在這里不能做的回圈,因為不同的集合非常不同。我如何/我可以異步這些任務? ”
A:您可以使用回圈來等待任務。例如
- hosts: localhost
tasks:
- shell: 'sleep 5 && echo VMA created'
async: 1000
poll: 0
register: cmd_result_A
- shell: 'sleep 9 && echo VMB created'
async: 1000
poll: 0
register: cmd_result_B
- shell: 'sleep 7 && echo VMC created'
async: 1000
poll: 0
register: cmd_result_C
- async_status:
jid: '{{ item }}'
register: result
until: result.finished
retries: 20
delay: 1
loop:
- "{{ cmd_result_A.ansible_job_id }}"
- "{{ cmd_result_B.ansible_job_id }}"
- "{{ cmd_result_C.ansible_job_id }}"
- debug:
msg: >-
{{ item.start.split(' ')|last }} -
{{ item.end.split(' ')|last }} |
stdout: {{ item.stdout }}
loop: "{{ result.results }}"
給出(刪節)
msg: '13:31:13.477444 - 13:31:18.483527 | stdout: VMA created'
msg: '13:31:13.722892 - 13:31:22.728505 | stdout: VMB created'
msg: '13:31:14.001067 - 13:31:21.008131 | stdout: VMC created'
為了簡化代碼,您可能還想嘗試回圈任務。例如
- shell: "{{ item }}"
async: 1000
poll: 0
register: cmd_result
loop:
- 'sleep 5 && echo VMA created'
- 'sleep 9 && echo VMB created'
- 'sleep 7 && echo VMC created'
- async_status:
jid: '{{ item }}'
register: result
until: result.finished
retries: 20
delay: 1
loop: "{{ cmd_result.results|map(attribute='ansible_job_id')|list }}"
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/407568.html
標籤:
下一篇:基于承諾的計數器
