Ansible,如何在主机库存中定义列表?

时间:2017-02-10 01:22:35

标签: ansible yaml ansible-inventory

我有一个剧本,我想在我的主机文件中定义一个字符串列表。

这是我的主机文件:

[dashboard]
1.2.3.4 dashboard_domain=test site_domain=['one','two','foo', 'bar'] 

这是我尝试使用list documentation编写的剧本:

---
- hosts: dashboard
  gather_facts: False
  remote_user: ubuntu
  become: yes

  tasks:

    - name: ping
      ping:

    - debug: 
        msg: "Domain: {{dashboard_domain}}"

    - debug: 
        msg: "Site: {{ item }}"
      with_items: "{{site_domain}}"

但是,使用ansible-playbook -i hosts ping.yml运行此剧本会导致此错误:

  

任务:[调试] ****************************************** **********************
  致命:[1.2.3.4] => with_items需要一个列表或一组

这似乎是将定义列表从主机文件传输到剧本的问题,因为直接在剧本中定义列表有效:

---
- hosts: dashboard
  gather_facts: False
  remote_user: ubuntu
  become: yes
  vars:
    site_domain: ['one','two','foo', 'bar'] 
  tasks:

    #### APPLY HTTP-AUTH ####
    - name: ping
      ping:

    - debug: 
        msg: "Domain: {{dashboard_domain}}"

    - debug: 
        msg: "Site: {{ item }}"
      with_items: "{{site_domain}}"

1 个答案:

答案 0 :(得分:1)

引用变量值:

[dashboard]
1.2.3.4 dashboard_domain=test site_domain="['one','two','foo', 'bar']"

对于INI格式的库存文件,Ansible不会解析变量值,如果它以不带引号的[开头并将其作为字符串传递。

关于你的例子:我不确定为什么你没有在阅读库存文件时遇到expected key=value错误,如果你真的有空间。