当我使用 ansible 的 python API 在远程机器(数千台)上运行脚本时,代码是:
runner = ansible.runner.Runner(
module_name='script',
module_args='/tmp/get_config.py',
pattern='*',
forks=30
)
然后,我使用
datastructure = runner.run()
这需要太长时间。我想将数据结构标准输出插入MySQL。我想要的是,一旦机器有返回数据,只需将数据插入MySQL,然后是下一个,直到所有机器都返回。
这是一个好主意,还是有更好的方法?
在所有计算机返回数据、无法联系或 SSH 会话超时之前,运行器调用不会完成。 鉴于这是针对 1000 台机器,而您只并行执行 30 台机器(forks=30),大约需要 Time_to_run_script * Num_Machines/30 才能完成。 这是否符合您的期望?
您可以将分叉的数量增加到更高的数字,以使跑步者更快地完成。 我已经把它推到了 100 年代,没有太大问题。
如果你想最大限度地了解正在发生的事情,并且不确定是否有一台机器支撑着你,你可以在python代码中连续运行每个主机。
仅供参考 - 这个模块和类在 Ansible 2.0 中完全消失了,所以你可能想现在进行跳转以避免以后重写代码