安斯布尔跑到龙



当我使用 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 中完全消失了,所以你可能想现在进行跳转以避免以后重写代码

最新更新