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