Ansible是否在代理上复制代码?它是如何执行这些命令的?

时间:2017-01-31 06:48:28

标签: ansible

当Chef将代码复制到代理时,Ansible会复制代码还是只转换为命令并执行它们?

我查了很多文档,但没有找到任何好的文档来解释这个工作流程。

2 个答案:

答案 0 :(得分:2)

简而言之:每个任务的 Ansible将所需的模块和库以及输入数据打包到小包中,传送到目标系统上的临时位置(通常通过ssh),在那里执行并自行清理。

Ansible不会将您的剧本作为一个整体复制到目标系统。只有每项任务所需的数据。

有关开发人员指南here中的工作流程的更多详细信息。

答案 1 :(得分:1)

对于运行Unix / Linux的目标机器,控制机器:

  1. 打开与目标节点的SSH会话,执行基本准备工作(例如创建临时目录);

  2. 创建自定义脚本(主要是Python)并使用SFTP(默认)或SCP(configurable)将它们传输到目标;

  3. 最后它执行目标主机上的脚本。

  4. 对每个主机上的每个单独任务重复该过程(Ansible也可以进行优化,为多个任务留下开放的SSH会话。)

    在Ansible中,基本工作单元以modules编码,并在(从中调用)任务中指定。

    • 对于大多数模块,逻辑是用Python编写的。无论特定模块是否使用外部程序,要执行的操作都包含在Python脚本中。

    • 以上的一个例外是raw module,它直接在SSH会话中执行特定命令。

    • 另一个特例是synchronize module,它在控制计算机上执行,并使用rsync传输文件。

    某些模块(主要针对cloud服务和network设备)在本地主机(或代理计算机)上执行,并使用其API访问目标系统和设备。

    对于Windows目标计算机,Ansible通过Windows本机PowerShell远程处理功能与WinRM连接并在目标计算机上运行PowerShell脚本。