我的主机清单的来源是一个输出值对的内部工具,例如,这里有六个观察值,我目前有160个观察值:Ansible:如何使用多值数据清单作为清单并传递给目标主机
servername1 processname1
servername1 processname2
servername1 processname3
servername2 processname1
servername3 processname1
servername4 processname1
所以第1列是我的目标主机列表(我的库存)。 Column2是唯一的processname值,专门分配给servername的值。通常会发生相同的服务器。某些服务器只有一个进程名称,其他服务器可能有2到N.意思是说,我的目标主机可能重复一个唯一的进程名称列表。我想从这个输出列表中使用动态库存,并且我需要将每个观察值的两个值关联并分配给变量。我并不是绝对需要使用动态库存,我只需要一个解决方案。我还需要通过命令:或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 | SUCCESS => { “changed”:false, “ping”:“pong” } servername2 | SUCCESS => { “变为”:假, “平”:“傍” }
下一页:第二个新的选择清单脚本是一个新的开关添加到输入一个主机名。这部分仍然让我困惑。下面是输出: showInv主机= servername1
{ “servername1”: “processname1”, “processname2”, “processname3”]}
,我很想念最后一部分是如何我请在我的剧本中使用特定的“--host = {{my_host}}来调用库存脚本。
似乎我需要找到现有主机名的变量,并将该变量传回库存脚本开关选项“--host =”
谢谢。我明白这应该如何工作。还有一个问题:第二次包含对库存脚本的调用时,如何将-host包含在-i my_inv_script中?我可以引用,是-i“my_inv_script --host {{myhosts}}”? –
gantte
您只需使用'-i my_inv_script'指定库存脚本,然后Ansible在内部调用'my_inv_script --list'来列出所有主机,然后为每个主机调用'my_inv_script --host'以获取其变量。 –
有没有其他方法可以做到这一点?我的广告资源脚本不支持“--list”。脚本是perl。该脚本需要多个选项才能从数据库中获得所需的输出。我在bash shell脚本中用正确的选项包装了perl脚本。例如:invList -a appReleasever -p平台-e releaseVer等等。因此,通过包装在bash shell中,基本shell的源代码输出动态库存的主机列表。没有“--list”我可以分配一个变量模拟添加--host = {{hostname}}吗? – gantte