当Chef将代码复制到代理时,Ansible会复制代码还是只转换为命令并执行它们?
我查了很多文档,但没有找到任何好的文档来解释这个工作流程。
答案 0 :(得分:2)
简而言之:每个任务的 Ansible将所需的模块和库以及输入数据打包到小包中,传送到目标系统上的临时位置(通常通过ssh),在那里执行并自行清理。
Ansible不会将您的剧本作为一个整体复制到目标系统。只有每项任务所需的数据。
有关开发人员指南here中的工作流程的更多详细信息。
答案 1 :(得分:1)
对于运行Unix / Linux的目标机器,控制机器:
打开与目标节点的SSH会话,执行基本准备工作(例如创建临时目录);
创建自定义脚本(主要是Python)并使用SFTP(默认)或SCP(configurable)将它们传输到目标;
最后它执行目标主机上的脚本。
对每个主机上的每个单独任务重复该过程(Ansible也可以进行优化,为多个任务留下开放的SSH会话。)
在Ansible中,基本工作单元以modules编码,并在(从中调用)任务中指定。
对于大多数模块,逻辑是用Python编写的。无论特定模块是否使用外部程序,要执行的操作都包含在Python脚本中。
以上的一个例外是raw
module,它直接在SSH会话中执行特定命令。
另一个特例是synchronize
module,它在控制计算机上执行,并使用rsync
传输文件。
某些模块(主要针对cloud服务和network设备)在本地主机(或代理计算机)上执行,并使用其API访问目标系统和设备。
对于Windows目标计算机,Ansible通过Windows本机PowerShell远程处理功能与WinRM连接并在目标计算机上运行PowerShell脚本。