Ansible
Ansible 檢查屬性列表中是否存在變數
我有一個包含網路上主機詳細資訊的變數(稱為“主機列表”-我相信您將其稱為字典,但我不確定術語。該變數在 group_vars/all 的文件中定義,所以它是在所有劇本中都可用(不確定這是否重要)。
我有一個劇本,只有在 hostlist 的主機名列表中找不到 ansible_hostname 時我才想執行它。hostlist 中的主機名是變數的屬性之一,但我再次不確定“屬性”是否是正確的術語……
主機列表定義為:
hostlist: - { name: 'host1', ip_addr: '192.168.2.31', hostgrp: 'physical_workstation' } - { name: 'host2', ip_addr: '192.168.2.32', hostgrp: 'physical_workstation' } - { name: 'host3', ip_addr: '192.168.2.33', hostgrp: 'virtual_machine' }
我用來嘗試使其正常工作的遊戲是:
- name: Conditional test debug: msg: "ansible_hostname not found in hostlist." when: ansible_hostname not in hostlist.name
我不確定條件中所需的語法,或者我想要的是否可以通過這種方式實現?
大概有更優雅的方式來做這件事,但這樣的事情對我有用:
如果您的庫存文件如下所示
host1 host2 host3 host4
然後,只有以下內容的劇本才會被執行,
host4
因為它在 hostlist var 中不匹配:
$ cat test.yml
- hosts: all vars: hostlist: - { name: 'host1', ip_addr: '192.168.2.31', hostgrp: 'physical_workstation' } - { name: 'host2', ip_addr: '192.168.2.32', hostgrp: 'physical_workstation' } - { name: 'host3', ip_addr: '192.168.2.33', hostgrp: 'virtual_machine' } tasks: - name: Conditional test debug: msg: "ansible_hostname not found in hostlist." when: hostlist|selectattr("name", "equalto", ansible_hostname)|list|length == 0
當這樣呼叫時:
ansible-playbook test.yml
意味著只有 host4 執行任務塊….
PLAY [all] ************************************************* TASK [Gathering Facts] ************************************* ok: [host1] ok: [host2] ok: [host3] ok: [host4] TASK [debug] *********************************************** ok: [host4] => { "msg": "hostname not in hostlist name list" } skipping: [host1] skipping: [host2] skipping: [host3]