使用默认设置,Ansible可能不会很快完成其工作,这已不是什么秘密。在本文中,我将指出造成这种情况的几种原因,并提供有用的最小设置,这很可能会真正提高项目速度。
我们在这里讨论进一步的Ansible 2.9.x,它以您喜欢的方式安装在新创建的virtualenv中。
安装后,我们会在您的剧本旁边创建一个文件“ ansible.cfg”-此位置将使您可以将这些设置与项目一起传输,并且它们会自动加载。
流水线
有人已经听说需要使用流水线,即不将模块复制到目标系统的FS,而是将Base64包装的zip存档直接传输到Python解释器的stdin,但事实仍然存在:此设置仍被低估。不幸的是,一些流行的Linux发行版默认情况下对sudo的配置不是很好-因此该命令需要tty(终端),因此Ansible缺省情况下禁用了此非常有用的设置。
pipelining = True
收集事实
您是否知道使用默认设置,每场比赛的Ansible都会从所有参与其中的主持人那里收集事实信息?一般来说,如果您不知道,现在就知道了。为防止这种情况发生,您需要启用用于收集事实(显式)的显式请求模式或智能模式。在其中,将仅从以前的戏曲中没有遇到过的主持人那里收集事实。
UPD。复制时,您将必须选择以下设置之一。
gathering = smart|explicit
重用SSH连接
如果您曾经在调试模式下启动Ansible(选项“ v”重复了1到9次),则可能已经注意到ssh连接一直在建立和删除。因此,这里也有一些微妙之处。
您可以避免一次在两个级别上重新建立ssh连接的阶段:直接在ssh客户端中,以及从管理器将文件传输到托管主机时都可以。
要重用打开的ssh连接,只需将所需的密钥传递给ssh客户端。然后,他将开始执行以下操作:首次建立ssh连接时,还需要在随后的连接上创建一个所谓的控制套接字-检查此套接字的存在,如果成功,请重用现有的ssh连接。为了使所有这些都有意义,我们将设置不活动时保存连接的时间。可以在ssh文档中找到更多详细信息,并且在Ansible的上下文中,我们仅使用必要选项的“转发”到ssh客户端。
ssh_args = "-o ControlMaster=auto -o ControlPersist=15m"
要在将文件传输到托管主机时重用已经打开的ssh连接,您只需指定另一个未知设置ssh_tranfer_method。关于此问题的文档极为稀少且具有误导性,因为此选项本身适用!但是阅读源代码可以使您了解将要发生的情况:dd命令将在托管主机上启动,直接与所需文件一起使用。
transfer_method = piped
顺便说一句,在“开发”分支中,该设置也存在并且没有消失。
不要怕刀,不要怕叉
另一个有用的设置是fork。它确定了将同时连接到主机并执行任务的辅助进程的数量。由于Python作为PL的特殊性,因此使用的是进程而不是线程,因为Ansible仍支持Python 2.7-没有异步对您来说,这里没有任何异步的地方!默认情况下,Ansible启动五个工作程序,但是如果正确询问,它将运行更多程序:
forks = 20
我只是立即警告您,控制机器上的可用内存量可能会带来一些困难。换句话说,您当然可以放叉= 100500,但是谁说它将起作用?
放在一起
因此,对于ansible.cfg(ini格式),必要的设置可能如下所示:
[defaults]
gathering = smart|explicit
forks = 20
[ssh_connection]
pipelining = True
ssh_args = -o ControlMaster=auto -o ControlPersist=15m
transfer_method = piped
而且,如果您想隐藏健康人正常YaML清单中的所有内容,则可能看起来像这样:
---
all:
vars:
ansible_ssh_pipelining: true
ansible_ssh_transfer_method: piped
ansible_ssh_args: -o ControlMaster=auto -o ControlPersist=15m
不幸的是,这不适用于“聚集=智能/显式”和“叉= 20”设置:没有YaML等效项。我们要么在ansible.cfg中设置它们,要么将它们通过环境变量ANSIBLE_GATHERING和ANSIBLE_FORKS传递。
关于丝裂原
— Mitogen? — , . — . , Mitogen, Ansible , , — , Mitogen . , , — .
Mitogen? , . — , : , « , ». , « ».
Mitogen?
在读取连接插件的源代码时,发现了其中一些设置,其名称为“ ssh.py”。我分享阅读的结果,希望它能激发其他人查看源代码,阅读它们,检查实现,与文档进行比较-毕竟,迟早,所有这些都会为您带来积极的结果。祝好运!