[英]Ansible - How to dynamically create a list variable?
我有一個這樣的模板:
listen {{haproxy_app_name}} 0.0.0.0:514
mode {{haproxy_mode}}
balance {{haproxy_algorithm}}
option httpclose
option forwardfor
{% for server in haproxy_backend_servers %}
server {{server.name}} {{server.ip}}:{{server.port}} {{server.paramstring}}
{% endfor %}
我正在嘗試使用引用清單中主機列表的字典列表填充haproxy_backend_servers
,但我在語法上苦苦掙扎。 我不確定是不是因為對 Jinja、Ansible 或 YAML 缺乏了解。
我沒有動態庫存,我只是擁有比我需要手動重復此過程更多的主機。
- hosts: balancer
vars:
haproxy_app_name: balancer
haproxy_mode: tcp
haproxy_algorithm: roundrobin
haproxy_backend_servers:
- name: listener
ip: "{{ item }}"
port: 514
paramstring: cookie A check
with_items: "{{ groups.listener }}"
每次我嘗試運行它時,它都會失敗並顯示FAILED! => {"changed": false, "msg": "AnsibleUndefinedVariable: 'item' is undefined"}
FAILED! => {"changed": false, "msg": "AnsibleUndefinedVariable: 'item' is undefined"}
。 ( with_items
的縮進似乎不會影響錯誤;它的粘貼方式只是我離開的地方。)
在這種情況下可以這樣做嗎? 有沒有更好的辦法?
我注意到模板可以訪問所有變量,而不僅僅是任務中聲明的變量,所以我修改了模板:
{% for server in groups.listener %}
server listener {{server}}:514 cookie A check
{% endfor %}
仍然很好奇這是否可以通過 vars 來完成。
您可以創建一個模板變量並在 pre_tasks 中使用 set_fact。
例子:
在這個例子中,我想用我的庫存(backend_db 節點)填充 pgpool2_backends 列表變量。
為此,我創建了一個模板變量 (pgpool2_backend_template),並使用 set_fact 和 pre_tasks 中的項目填充 pgpool2_backends。
---
- name: Playbook test
hosts:
- test
pre_tasks:
- name: Populate pgpool2_backends list variable
set_fact:
pgpool2_backends: "{{ (pgpool2_backends | default([])) + [pgpool2_backend_template] }}"
with_items: "{{ groups['backend_db'] }}"
- debug:
var: pgpool2_backends
roles:
- databases/pgpool2
vars:
pgpool2_backend_template:
host: "{{ item }}"
port: 5432
tags: test
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.