我的目标是动态生成字典列表并将其用于我需要的角色。
我设法生成变量,但现在我无法将其传递给角色。
这是我的游戏:
- hosts:
- some-hosts
tasks:
- name: create zkh var
vars:
zkh: []
set_fact:
zkh: "{{ zkh + [ {'host': item.1, 'id': item.0} ] }}"
with_indexed_items: "{{ groups.some-hosts }}"
roles:
- {role: ansible-zookeeper, zookeeper_hosts: "{{ zkh }}" }
在任务中我生成了我的变量,但是我无法将其传递给角色(我想象),我无法访问定义它的范围("AnsibleUndefinedVariable: ERROR! ERROR! 'zkh' is undefined"}
)。
定义一个游戏级变量,并使用set_fact
分配一个新任务,zkh
的值无效。
我该如何解决这个问题?
答案 0 :(得分:1)
您应该使用pre_tasks
来定义角色所需的变量。 pre_tasks
只是在应用角色之前执行的任务列表。
如果您在应用角色后需要执行某些操作,那么您还有post_tasks
。
答案 1 :(得分:0)
你能试试这个剧本结构吗?
- hosts:
- some-hosts
tasks:
- name: create zkh var
vars:
zkh: []
set_fact:
zkh: "{{ zkh + [ {'host': item.1, 'id': item.0} ] }}"
with_indexed_items: "{{ groups.some-hosts }}"
- {role: ansible-zookeeper, zookeeper_hosts: "{{ zkh }}" }
我假设您的set_fact
工作正常。