簡體   English   中英

ansible,比較鍵之間的變量並避免重復操作

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM