如何获取子组列表或迭代列表和库存组

问题描述 投票:0回答:1

我遇到了障碍,一辈子都无法解决这个问题。我有一个库存文件,其中包含动态数量的行,每行将包含动态数量的机架。

---
all:
  vars:
    rows:
      - {name: "row1", racks: ["row1-rack1", "row1-rack2"]}
      - {name: "row2", racks: ["row2-rack1", "row2-rack2"]}
      # I may have several more rows here
      #- {name: "row3", racks: ["row3-rack1", "row3-rack2"]}
      # I may have more racks
      #- {name: "row4", racks: ["row4-rack1", "row4-rack2", "row4-rack3"]}
  hosts:
    host[1:8].example.com:
  children:
    somegroup1:
      hosts:
        host1.example.com:
    somegroup2:
      hosts:
        host4.example.com:
    row1-rack1:
      hosts:
        host[1:2].example.com:
    row1-rack2:
      hosts:
        host[3:4].example.com:
    row2-rack1:
      hosts:
        host[5:6].example.com:
    row2-rack2:
      hosts:
        host[7:8].example.com:
    racks:
      children:
        row1-rack1:
        row1-rack2:
        row2-rack1:
        row2-rack2:

我可以很容易地获得机架列表:

    - set_fact:
        racks: "{{ racks|d([]) + [ row.1 ] }}"
      with_subelements:
        - "{{ rows }}"
        - racks
      loop_control:
        loop_var: row

这给了我这个变量来使用:

    "racks": [
        "row1-rack1",
        "row1-rack2",
        "row2-rack1",
        "row2-rack2",
    ]

我需要做的基本上是为机架和该机架的主机的每个组合运行一个简单的 shell 命令,如下所示。 (请记住,这是动态的行数和每行的机架数)。

somecommand -host groups[racks[0]][0] -rack racks[0]
somecommand -host groups[racks[0]][1] -rack racks[0]
somecommand -host groups[racks[0]][N] -rack racks[0]
somecommand -host groups[racks[1]][0] -rack racks[1]
somecommand -host groups[racks[1]][1] -rack racks[1]
somecommand -host groups[racks[1]][N] -rack racks[1]
somecommand -host groups[racks[2]][0] -rack racks[2]
somecommand -host groups[racks[2]][1] -rack racks[2]
somecommand -host groups[racks[2]][N] -rack racks[2]
somecommand -host groups[racks[3]][0] -rack racks[3]
somecommand -host groups[racks[3]][1] -rack racks[3]
somecommand -host groups[racks[3]][N] -rack racks[3]
...
somecommand -host groups[racks[N]][0] -rack racks[N]
somecommand -host groups[racks[N]][1] -rack racks[N]
somecommand -host groups[racks[N]][N] -rack racks[N]

乍一看似乎很可行。不确定是缺乏睡眠还是什么,但我已经尝试了将循环结构用于不同库存格式的所有方法。

如果能够获得just作为我的“row-rack”组的子组列表,我会很高兴,但我一生都不能这样做,因为 some_group1 和 some_group2 的存在其他“可能存在或不存在”的群体。无法过滤掉这些并构建排除这些的列表...因为子组的数量也是动态的。 非常感谢您的帮助。

loops ansible
1个回答
0
投票

example

 且内容为 
的库存文件 all: vars: rows: - {name: "row1", racks: ["row1-rack1", "row1-rack2"]} - {name: "row2", racks: ["row2-rack1", "row2-rack2"]} hosts: host[1:8].example.com: children: somegroup1: hosts: host1.example.com: somegroup2: hosts: host4.example.com: row1-rack1: hosts: host[1:2].example.com: row1-rack2: hosts: host[3:4].example.com: row2-rack1: hosts: host[5:6].example.com: row2-rack2: hosts: host[7:8].example.com: racks: children: row1-rack1: row1-rack2: row2-rack1: row2-rack2:

ansible-inventory

命令
ansible-inventory --inventory example racks --graph

将产生
的输出

ansible-inventory --inventory example racks --graph [WARNING]: Invalid characters were found in group names but not replaced, use -vvvv to see details Not replacing invalid character(s) "{'-'}" in group name (row1-rack2) Not replacing invalid character(s) "{'-'}" in group name (row2-rack1) Not replacing invalid character(s) "{'-'}" in group name (row2-rack2) @racks: |--@row1-rack1: | |--host1.example.com | |--host2.example.com |--@row1-rack2: | |--host3.example.com | |--host4.example.com |--@row2-rack1: | |--host5.example.com | |--host6.example.com |--@row2-rack2: | |--host7.example.com | |--host8.example.com

一个最小的示例手册

--- - hosts: :*rack2 become: false gather_facts: false tasks: - debug: var: ansible_play_hosts run_once: true

通过
调用

ansible-playbook --inventory example main.yml

将产生
的输出

TASK [debug] ************* ok: [host3.example.com] => ansible_play_hosts: - host3.example.com - host4.example.com - host7.example.com - host8.example.com

hosts: row1*

进入

TASK [debug] *************
ok: [host1.example.com] =>
  ansible_play_hosts:
  - host1.example.com
  - host2.example.com
  - host3.example.com
  - host4.example.com

文档

    如何建立库存
  • 模式:针对主机和组
  • ,特别是常见模式
© www.soinside.com 2019 - 2024. All rights reserved.