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