我正在使用 Ansible 根據幾個引數動態構建庫存。
我從 CMDB 的 API 獲取原始資訊,然后用于set_fact格式化 FQDN 串列。
這些 FQDN 始終遵循相同的公式,因此看起來很簡單,但 Ansible 似乎只將模板應用于第一項。
代碼:
- name: populate list of all hosts
set_fact:
all_hosts: '{{ all_hosts [ "{{item.value.fields.friendlyname | lower}}" "." "{{item.value.fields.friendlyname[:3]|lower}}" ".sncoia.lan" ] }}'
loop: "{{ hostname.json.objects | dict2items }}"
when:
- item.value.fields.friendlyname | length == 12
- debug: var=all_hosts
結果(為簡潔起見):
TASK [debug] **********************************************************************************************************************************************************************************
ok: [localhost] => {
"all_hosts": [
"devlappaps03.dev.sncoia.lan",
"{{item.value.fields.friendlyname | lower}}.{{item.value.fields.friendlyname[:3]|lower}}.sncoia.lan",
"{{item.value.fields.friendlyname | lower}}.{{item.value.fields.friendlyname[:3]|lower}}.sncoia.lan",
uj5u.com熱心網友回復:
給定測驗資料
hostname:
json:
objects:
foo:
fields:
friendlyname: devlappaps03
bar:
fields:
friendlyname: devlappaps02
baz:
fields:
friendlyname: devlappaps01
正確連接 FQDN。例如
- set_fact:
all_hosts: "{{ all_hosts|d([]) [_fqdn] }}"
loop: "{{ hostname.json.objects|dict2items }}"
when: item.value.fields.friendlyname|length == 12
vars:
_fqdn_list:
- "{{ item.value.fields.friendlyname|lower }}"
- "{{ item.value.fields.friendlyname[:3]|lower }}"
- "sncoia.lan"
_fqdn: "{{ _fqdn_list|join('.') }}"
給
all_hosts:
- devlappaps03.dev.sncoia.lan
- devlappaps02.dev.sncoia.lan
- devlappaps01.dev.sncoia.lan
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/439278.html
