2

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

这是我的主机文件:

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

这是我尝试使用列表文档编写的剧本:

---
- 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 需要一个列表或一个集合

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

---
- 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}}"
4

2 回答 2

2

只需引用变量值:

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

在 INI 格式的清单文件的情况下,如果 Ansible 以不带引号的开头[并将其作为字符串传递,则它不会解析变量值。


expected key=value关于您的示例:如果您确实有空间,我不确定为什么您在读取库存文件时没有收到错误消息。

于 2017-02-10T01:45:50.537 回答
0

@techraf 确实回答了您的问题,如果dashboard组中的每个主机都有一个site_domain具有不同值的列表,他们的解决方案是完美的。

不过,看看你的剧本,这似乎site_domain在整个dashboard团队中都是不变的。如果您有 10 个主机dashboard,则必须将列表复制到每个主机的行中。为避免重复,您可以dashboard:vars在清单中有一个部分,您可以在其中为组中的所有主机定义具有相同值的变量:

[dashboard:vars]
site_domain="['one','two','foo', 'bar']"

[dashboard]
1.2.3.4 dashboard_domain=test
1.2.3.5 dashboard_domain=uat
1.2.3.6 dashboard_domain=integ

https://docs.ansible.com/ansible/latest/user_guide/intro_inventory.html#assigning-a-variable-to-many-machines-group-variables

如果您的库存文件夹更加结构化,您还可以dashboard在 YAML 中的单独文件中为组定义变量。您的库存文件夹树可能是:

inventories
 |
 +-- group_vars
 |    \-- dashboard.yml
 |
 +-- hosts.ini

在该配置中,dashboard.yml可能只是:

site_domain: ['one', 'two', 'foo', 'bar']

...或者:

site_domain:
  - one
  - two
  - foo
  - bar

https://docs.ansible.com/ansible/latest/user_guide/intro_inventory.html#organizing-host-and-group-variables

于 2021-09-23T12:47:31.570 回答