Ansible 动态主机跳过

Ansible dynamic hosts skips

我正在尝试使用 ansible 1.9.4 为我的家庭办公室设置一个非常 hacky 的 vm 部署环境。

我已经很远了,但最后一步就是行不通。我有一个编写的 10loc 插件,它为暂存 vlan 生成临时 dns 名称,我想将该值作为主机传递给下一个剧本角色。


    TASK: [localhost-eval | debug msg="{{ hostvars['127.0.0.1'].dns_record.stdout_lines }}"] ***
    ok: [127.0.0.1] => {
        "msg": "['vm103.local', 'vm-tmp103.local']"
    }

它可以通过主机变量在全局剧本范围内访问:

{{ hostvars['127.0.0.1'].dns_record.stdout_lines[1] }}

并应传递给:


    - name: configure vm template
      hosts: "{{ hostvars['127.0.0.1'].dns_record.stdout_lines[1] }}"
      gather_facts: no
      roles:
        - template-vm-configure

这导致:

PLAY [configure vm template] **************************************************
skipping: no hosts matched

我的库存看起来像这样并且似乎有效。硬编码 'vm-tmp103.local' 获得角色 运行.

[vm]
vm[001:200].local
[vm-tmp]
vm-tmp[001:200].local

提前谢谢你,希望有人能指出我正确的方向。 B 计划包括将 dns 记录传递给 bash 脚本以完成配置,因为我只想在将虚拟机添加到监控之前配置网络接口。

编辑: 修改了 play 以使用添加主机并将它们添加到临时组 - add_host: name={{ hostvars['127.0.0.1'].dns_record.stdout_lines[1] }} groups=just_vm

但还是不匹配。

我认为这不是有意为之的行为。 #9733 引导我找到解决方案。

添加此任务让我可以作为一个小组使用暂存。

  tasks:
    - set_fact: hostname_next="{{ hostvars['127.0.0.1'].dns_record.stdout_lines[1] }}"
    - add_host: group=staging name='{{ hostname_next }}'