我的主机清单的来源来自一个输出成对值的内部工具,例如,这里有 6 个观察值,我目前有 160 个观察值:
servername1 processname1
servername1 processname2
servername1 processname3
servername2 processname1
servername3 processname1
servername4 processname1
所以第 1 列是我的目标主机列表(我的库存)。Column2 是唯一的 processname 值,专门分配给 servername 的值。通常会出现同一台服务器。一些服务器只有一个进程名,而其他服务器可能有 2 到 N 个。这意味着我的目标主机可能会重复一个唯一的进程名列表。我想使用此输出对列表中的两个动态库存,并且我需要将每个观察值的两个值关联并分配给变量。我不是绝对需要使用动态库存,我只需要一个解决方案。我还需要通过 command: 或 shell: modules 传递给目标主机和 {{ processname# }} 中的值。(这是独一无二的,没有与此需求相关的模块)
如果需要,我有办法过滤这些数据并以 JSON 格式或 YAML 输出,为每个主机制作一个单独的 YML 文件。虽然我更喜欢动态处理这些;预处理列表是可以接受的。
因为 ansible-playbook 需要一些已知的主机清单列表,所以在开始播放时,我无法理解如何从动态输出中创建此列表。
到目前为止我所做的:我尝试阅读并尝试将这些对设置为 /etc/ansible/hosts/host_vars/servername#.yml 文件中的内容。这非常难看,因为我必须将数据输出预处理为 YML 格式。但它并没有给我一个主机列表供我在我的剧本中参考。因此,虽然 hostvar 似乎是合乎逻辑的选择,但我无法理解它。
我需要的:
- The suggested format of the data? JSON? YAML? Other? (if I cannot read it in dynamically.
- Is putting this in host_vars correct?
- Last night I saw another answer using set_fact, would that help?
感谢您的任何见解。我现在已经使用 Ansible 3.5 周了!我在使用静态和动态库存方面做得很好,但这让我很困惑,因为库存列表并不明显,请给出匹配对的格式。
注意:很多人都建议使用 host_vars,但在我看来,这是保留给主机名、相关端口和代理值的。我可能是错的。
==================================================== ==================
更新:感谢您在正确方向上的帮助。我已经更新了我们的清单脚本,以 JSON 格式输出主机列表。第一个新选项是以 JSON 格式输出主机。示例:{"my_host":["servername1","servername2",]}
将其称为动态库存脚本,效果很好!
ansible all -m ping servername1 | 成功 => {“改变”:假,“平”:“乒乓”} servername2 | 成功 => {“改变”:假,“平”:“乒乓”}
下一步:清单脚本的第二个新选项是添加一个新开关来输入主机名。这部分仍然让我感到困惑。这是输出: showInv --host=servername1
{"servername1":["processname1","processname2","processname3",]}
我缺少的最后一部分是如何在我的剧本中使用特定的 "--host={{ my_host }} 调用库存脚本。
看来我需要找到现有主机名的变量并将其作为切换选项“--host=”传递回库存脚本