【问题标题】:Referencing Ansible Inventory Hierarchy引用 Ansible 库存层次结构
【发布时间】:2019-02-02 04:12:40
【问题描述】:

我希望能够将 ansible 主机的直接父级引用为变量。

以下面的清单为例:

[resourcegroup1]
host1
host2

[resourcegroup2]
host3
host4

[application:children]
[resourcegroup1]

[database:children]
[resourcegroup2]

[environoments:children]
[application]
[database]

[enivronoments]
dev
staging
prod

我想在可以引用主机父级的播放中运行循环任务。示例:

tasks:
- name: Start Datanbase Servers
  with_items: "{{ groups['database'] }}"   
  azure_rm_virtualmachine:
    name: "{{ item }}"
    resource_group: "{{ item.parent }}"
    started: yes
    allocated: yes

{{ item }} 将遍历“host3”和“host4”的值,而我正在寻找可以代替{{ item.parent }} 作为主机直接父级的内容,在此案例:“resourcegroup2”。

有没有办法引用库存的层次结构?

【问题讨论】:

  • 嗨@Drew,您感兴趣的功能很可能没有内置到 Ansible 中。通过了解库存的层次结构,您想完成什么?也许还有另一种方法可以解决您正在尝试做的事情。

标签: ansible ansible-inventory


【解决方案1】:

在做了一些快速研究之后,Ansible 似乎没有内置那种功能。

根据 Ansible Github repo 中打开的票证,听起来人们对此功能很感兴趣,但从未开发过。可能是因为有用性和复杂性之间的斗争。

Ansible Tix

Ansible Tix

以下是上述链接中的一些 sn-ps:

如果有一种方法可以在 Jinja2 模板中重新创建库存组层次结构。

@kinvaris 我们为此提供了动态库存。你可以只写一个小的动态库存脚本,然后翻译它。我不明白为什么这是一个必要的补充,它只会使工具更加复杂。

如果您只需要与主机关联的组列表,而不关心层次结构:

'{{hostvars["host1"]}}'

你会得到一个这样的列表:

"groups": {
            "all": [
                "host"
            ],
            "child": [
                "host1"
            ],
            "parent": [
                "host1"
            ],
            "ungrouped": []
        },

【讨论】:

  • 感谢您的回复 Michael 我刚刚试了一下 ok: [localhost] => (item=host1) => { "msg": "" } ok: [localhost] => (item=host2) => { "msg": "" } 似乎我们的 ansible 塔没有缓存任何事实,并且剧本没有拉出任何主机变量(我目前没有设置)。有没有办法查询库存(在这种情况下它是一个 ansible 塔库存)并拉出“数据库”组的孩子?类似于:{{ inventory.database }}
  • “所有”组位于“顶部”,因为字典是按字母顺序打印的。但由于字典是未排序的,所以上述抄录中的顺序是巧合。
  • @techraf 你是对的!我做了一些研究,看起来 Drew 所询问的内容不是 Ansible 中的一个功能。让我更新我的答案。
  • 感谢迈克尔的研究和回应。 @kinvaris 所说的动态清单正是我的目标:从 Azure 动态提取数据并添加一些元数据以将资源组组合在一起。之后,我只想让任务通过元组的所有服务器运行,但仍然能够引用通过动态清单拉入的资源组名称。但是,如果它不是功能,则它不是功能。再次感谢迈克尔。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-30
  • 1970-01-01
  • 2023-03-04
  • 1970-01-01
相关资源
最近更新 更多