如何以Yaml格式定居Ansible库存

时间:2019-01-16 15:16:10

标签: ansible yaml

我完成了将Ansible库存从ini转换为yml的任务,因此我使用了有效的ini文件并进行了常规回合: -Github:检查-解决方案挂起 -在线工具:检查-解决方案与这个星球上的事物不同 -不得已:我读过the official guide,它带来了以下示例:

all: # keys must be unique, i.e. only one 'hosts' per group
   hosts:
       test1:
       test2:
           var1: value1
   vars:
       group_var1: value2
   children:   # key order does not matter, indentation does
       other_group:
           children:
               group_x:
                   hosts:
                       test5

很酷,我很快就把原来的ini变成了这种美女

原始

[thingiebob_master]
thng-esxi96

[thingiebob_slaves]
thng-esxi97

已转换v1

all:
   children:
        thingiebob_master:
            hosts: thng-esxi96
        thingiebob_slaves:
            hosts:
                thng-esxi97

我可以执行ping操作,并且可以到达两台计算机。但是当我将另一个节点添加到第二组时: 已转换v2

all:
   children:
        thingiebob_master:
            hosts: thng-esxi96
        thingiebob_slaves:
            hosts:
                thng-esxi97
                thng-esxi98

我得到一个错误:

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

TASK [Gathering Facts] **************************************************************************
fatal: [thng-esxi97 thng-esxi98]: UNREACHABLE! => {"changed": false, "msg": "Failed to connect to the host via ssh: ssh: 
Could not resolve hostname thng-esxi97 thng-esxi98: Name or service not known\r\n", "unreachable": true}

但是,如果我在冒号后面放一个冒号,有效地将它们变成键,如下面的v3所示,则会找到并ping通所有三个节点。 已转换v3

    all:
       children:
            thingiebob_master:
                hosts: thng-esxi96
            thingiebob_slaves:
                hosts:
                    thng-esxi97:
                    thng-esxi98:

结果

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

TASK [Gathering Facts] **************************************************************************
ok: [thng-esxi98]
ok: [thng-esxi96]
ok: [thng-esxi97]

TASK [ping] *************************************************************************************
ok: [thng-esxi97]
ok: [thng-esxi96]
ok: [thng-esxi98]

PLAY RECAP **************************************************************************************
thng-esxi96               : ok=2    changed=0    unreachable=0    failed=0
thng-esxi97               : ok=2    changed=0    unreachable=0    failed=0
thng-esxi98               : ok=2    changed=0    unreachable=0    failed=0

问题:(如何)我可以将多个节点添加到我的thietiebob_slaves组中吗? (无需殖民化。)

1 个答案:

答案 0 :(得分:1)

有趣的问题:)

在第一次通过时就完全解决了这个错误:(我假设基本INI文件的YAML版本反映了编写动态清单脚本时使用的数据结构的布局,因此将包含主机列表的组进行了分组。他们没有。

我今天恰好在读the Inventory docs。这清楚地表明,在基本INI清单的YAML版本中,组确实是一个字典,其中包含主机名键和空字典或特定于主机的选项的值。

文档示例:

all:
  hosts:
    mail.example.com:
        ansible_port: 5555
        ansible_host: 192.0.2.50
  children:
    webservers:
      hosts:
        foo.example.com:
        bar.example.com:
    dbservers:
      hosts:
        one.example.com:
        two.example.com:
        three.example.com:

长话短说,您被冒号困住了。