1

当我使用 ansible 的 python API 在远程机器(数千)上运行脚本时,代码是:

runner = ansible.runner.Runner(
  module_name='script',
  module_args='/tmp/get_config.py',
  pattern='*',
  forks=30
)

然后,我用

datastructure = runner.run()

这需要太长时间。我想将数据结构标准输出插入 MySQL。我想要的是,如果一旦机器返回数据,只需将数据插入 MySQL,然后下一个,直到所有机器都返回。

这是一个好主意,还是有更好的方法?

4

1 回答 1

1

在所有机器都返回数据、无法联系或 SSH 会话超时之前,运行程序调用不会完成。鉴于这是针对 1000 台机器,而您只并行运行 30 台机器(forks=30),因此大约需要 Time_to_run_script * Num_Machines/30 才能完成。这是否符合您的预期?

您可以将分叉的数量增加到更高的数量,以使跑步者更快地完成。我已经把它推到了100,没有太多问题。

如果您想最大限度地了解正在发生的事情并且不确定是否有一台机器阻止您,您可以在 python 代码中连续运行每个主机。

仅供参考 - 这个模块和类在 Ansible 2.0 中完全消失了,所以你可能想要现在进行跳转以避免以后必须重写代码

于 2016-02-26T15:30:21.377 回答