[英]ansible, compare variables between keys and avoid action on recurrence
我正在嘗試編寫一本劇本,該劇本僅在重復時才考慮一次值。 一個例子可以更好地解釋我的意思:
考慮以下庫存:
[plot]
server1 dir=graph
server2 dir=graph
server3 dir=keller
server4 dir=graph
Playbook 應該將文件復制到服務器 dir1(圖形),然后在 server2 上應該跳過復制。 在 server3 上將復制文件,但在 server 4 上不應復制任何文件。 它應該評估第一台服務器,然后將值保存到列表中並繼續。 我想應該有一種更簡單的方法,因為值不是動態的。
提前謝謝
創建一個唯一目錄列表,例如
- set_fact:
dirs_unique: "{{ dict(_hosts|zip(_dirs))|
dict2items|
groupby('value') }}"
vars:
_hosts: "{{ groups.plot }}"
_dirs: "{{ groups.plot|map('extract', hostvars, 'dir') }}"
給
dirs_unique:
- - graph
- - key: server1
value: graph
- key: server2
value: graph
- key: server4
value: graph
- - keller
- - key: server3
value: Keller
現在從每個項目中選擇第一個主機。 這些將是將文件復制到的主機
- set_fact:
hosts_unique: "{{ dirs_unique|json_query('[][0].key') }}"
給
hosts_unique:
- server1
- server
劇本
- hosts: plot
gather_facts: false
tasks:
- block:
- set_fact:
dirs_unique: "{{ dict(_hosts|zip(_dirs))|
dict2items|
groupby('value') }}"
vars:
_hosts: "{{ groups.plot }}"
_dirs: "{{ groups.plot|map('extract', hostvars, 'dir') }}"
- set_fact:
hosts_unique: "{{ dirs_unique|json_query('[][0].key') }}"
run_once: true
- debug:
msg: "Copy files to {{ dir }}"
when: inventory_hostname in hosts_unique
給
ok: [server1] =>
msg: Copy files to graph
skipping: [server2]
ok: [server3] =>
msg: Copy files to keller
skipping: [server]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.