2015-09-02 64 views
1

有沒有人試圖在模板中或playbook中使用通配符?模板中Ansible中的通配符

通配符適用於庫存和列表主機,但不適用於模板或操作手冊。

下面的命令作品:

ansible -i inventory/ec2.py tag_Name_Hbase* --list-host` 

,但同樣的事情沒有在劇本工作。

例(不工作):

Node: `{{ {{ ":2181,".join(groups["tag_Name_Zookeeper*"]) }}:2181 }}` 

例(工作):

Node: `{{ {{ ":2181,".join(groups["tag_Name_Zookeeper_Kafka01"]) }}:2181 }}` 

回答

2

通配符字典鍵將無法正常工作。您需要遍歷group.keys()

playbook.yml:

--- 
- hosts: all 
    gather_facts: no 
    vars: 
    Node: | 
     {% set o = [] %} 
     {%- for i in groups.keys() %} 
     {%- if i.startswith("tag_Name_Zookeeper") %} 
      {%- for j in groups[i] %} 
      {%- if o.append(j+":2181") %} 
      {%- endif %} 
      {%- endfor %} 
     {%- endif %} 
     {% endfor %} 
     {{ ",".join(o) }} 
    tasks: 
    - debug: 
     var: Node 
     run_once: yes 
     delegate_to: localhost 

主機:

[tag_Name_Zookeeper_1] 
a 
b 
[tag_Name_Zookeeper_2] 
c 
d 
[tag_Name_Zookeeper_3] 
e 
f 
[others] 
localhost 

樣品會話:

$ ansible-playbook -i hosts playbook.yml 

PLAY [all] ******************************************************************** 

TASK: [debug ] **************************************************************** 
ok: [a -> localhost] => { 
    "var": { 
     "Node": "a:2181,b:2181,c:2181,d:2181,e:2181,f:2181" 
    } 
} 

PLAY RECAP ******************************************************************** 
a       : ok=1 changed=0 unreachable=0 failed=0 
b       : ok=1 changed=0 unreachable=0 failed=0 
c       : ok=1 changed=0 unreachable=0 failed=0 
d       : ok=1 changed=0 unreachable=0 failed=0 
e       : ok=1 changed=0 unreachable=0 failed=0 
f       : ok=1 changed=0 unreachable=0 failed=0 
localhost     : ok=1 changed=0 unreachable=0 failed=0