Ansible inventory:使用主机变量定义组关联

Ansible inventory:使用主机变量定义组关联,ansible,ansible-inventory,Ansible,Ansible Inventory,我正在为世界各地的主机设计一个库存结构。 它们以组的形式出现(每个位置有几种类型的主机(设备,而不仅仅是PC\mac),并且在影响如何管理它们的众多特征上存在差异(有效-将赋予它们什么角色)。这意味着存在许多固有的组,一个主机通常是多个组的成员 此外,此资源清册容易发生更改(由于给定主机的新部署、移动或重新定位)。 由于上述原因,我希望在主机端定义组成员资格,并尽可能地自动化该过程 我阅读了有关添加主机和组的内容,但不确定: 如果我正确理解用法(例如,不确定是否可以将group_by与常规主机变

我正在为世界各地的主机设计一个库存结构。 它们以组的形式出现(每个位置有几种类型的主机(设备,而不仅仅是PC\mac),并且在影响如何管理它们的众多特征上存在差异(有效-将赋予它们什么角色)。这意味着存在许多固有的组,一个主机通常是多个组的成员

此外,此资源清册容易发生更改(由于给定主机的新部署、移动或重新定位)。 由于上述原因,我希望在主机端定义组成员资格,并尽可能地自动化该过程

我阅读了有关添加主机和组的内容,但不确定:

  • 如果我正确理解用法(例如,不确定是否可以将group_by与常规主机变量一起使用)
  • 如何最好地利用它们(如果有一个最佳实践或我缺少的共同考虑-找不到一个全面的例子)
  • 以下是一个属性示例(非真实,OBV):


    这是有效的用法吗?推荐吗?有没有一个综合性的动态分组示例,可以从中学习到许多组?

    一些先发制人的注意事项:1。很抱歉,如果一篇文章中有太多的Qs,我想把它分开,但它们似乎没有意义。2.虽然有两个Q具有看似相关的标题(,),但两个Q都没有专门解决使用变量定义组隶属关系的问题。您正在清单中定义变量(
    类型
    操作系统
    操作系统版本
    ),您可以直接从主机事实中获取或推断(
    ansible\u发行版
    ansible\u发行版
    ansible\u发行版
    ansible\u发行版
    ,…)。此外,如果您想通过VAR控制
    group_by
    ,您可以直接从主机设置,请查看Thank@Zeitounator,我知道os和os_版本可以作为事实获取,但不熟悉本地事实作为定义事实的变通方法。不过,我还是希望避免“种植”我的主机中的文件。你是说我的变量预期用途不可能,group_by只能与事实一起使用吗?除了上面我的评论之外,我什么也没说:你可以发现一些事实来获取你的操作系统,如果需要,你可以直接在你的主机上设置自定义事实。对于你的其他问题,你试过了吗?我没有试过吗无法按预期工作?在动态创建时,您遇到的确切问题是什么?感谢@Zeitounator,我确实在设置沙盒来测试这一点以及语法(缺少引号等)时遇到了困难.你最初的回答让我对我的方法产生了疑问,我发现我需要更少的组和更好地使用变量。通过一个简单的2级分组解决了这一部分(类似于我给出的第一个示例)。我感谢你的指导。一些先发制人的注意事项:1.抱歉,如果一篇文章中的Q太多,我想把它分开,但它们似乎没有意义。2.虽然有两个Q的标题似乎相关(,),两者都没有具体解决使用变量定义组从属关系的问题。您正在库存中定义变量(
    类型
    操作系统
    操作系统版本
    ),您可以直接从主机事实中获取或推断这些变量(
    ansible\u发行版
    ansible\u发行版
    ansible\u发行版
    ansible\u发行版
    ,…)。此外,如果您想通过VAR控制
    group_by
    ,您可以直接从主机设置,请查看Thank@Zeitounator,我知道os和os_版本可以作为事实获取,但不熟悉本地事实作为定义事实的变通方法。不过,我还是希望避免“种植”我的主机中的文件。你是说我的变量预期用途不可能,group_by只能与事实一起使用吗?除了上面我的评论之外,我什么也没说:你可以发现一些事实来获取你的操作系统,如果需要,你可以直接在你的主机上设置自定义事实。对于你的其他问题,你试过了吗?我没有试过吗无法按预期工作?在动态创建时,您遇到的确切问题是什么?感谢@Zeitounator,我确实在设置沙盒来测试这一点以及语法(缺少引号等)时遇到了困难。你最初的回答让我对我的方法产生了疑问,我发现我需要更少的组和更好地使用变量。通过一个简单的2级分组解决了这一部分(类似于我给出的第一个示例)。我感谢你的指导。
    group_vars/host001:
    type: "PC"
    os: "windows"
    os_version: "10"
    has_widescreen: True
    office_version: "2019"
    <more properties>
    
    group_vars/host041:
    type: "mac"
    os: "macos"
    macos_version: "10.13"
    <more properties>
    
    group_vars/host053:
    type: "mac"
    os: "macos"
    os_version: "10.13"
    office_version: "2007"
    <more properties>
    
    # create groups named "windows 10" and "macos 10.13", under the groups "windows" and "macos" accordingly.
    - group_by:
        key: {{ os }}-{{ os_version }}
        parents:
          - {{ os }} 
    
    # create groups named "office2007" and office2019"
    - group_by:
        key: {{ office_version }}
    
    # create group of hosts with wide screens
    add_host: hostname={{ item }} groups=has_widescreen
      with_items: groups['all']
      when: (has_widescreen == True)