为ansible play中的角色生成变量

时间:2016-04-17 21:19:44

标签: variables ansible ansible-playbook

我的目标是动态生成字典列表并将其用于我需要的角色。

我设法生成变量,但现在我无法将其传递给角色。

这是我的游戏:

- 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的值无效。

我该如何解决这个问题?

2 个答案:

答案 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工作正常。