Ansible DSL 是如何转换为 Powershell 或 Python 的?

71次阅读
没有评论

问题描述

当运行 Ansible 脚本时,Ansible DSL 是如何转换为 Python(Linux)或 Powershell(Windows)的?我猜这是在 Ansible 节点上进行的,也就是执行 Ansible 命令的地方?

注意:我不是在问如何使用 Ansible 本身,或者从工具的角度来看它是如何工作的 – 我已经使用它多年了,所以我知道它是如何工作的。

谢谢!

解决方案

请注意以下操作注意版本差异及修改前做好备份。

Ansible DSL 到 Python 或 Powershell 的转换发生在 Ansible 任务执行器中,它会获取有关模块的信息,并将可执行代码推送到目标主机。

根据官方文档的说明:

Ansible 通过连接到节点并向其推送称为“Ansible 模块”的脚本来工作。

所以回答你的问题:

我猜这是在 Ansible 节点上进行的,也就是执行 Ansible 命令的地方?

是的,这是在控制节点上(执行 ansible 命令的节点)进行的。

根据控制节点的配置,它知道在哪里查找模块。这是通过 ANSIBLE_LIBRARY 环境变量或配置文件中的相关部分来设置的。

Ansible 任务执行器类的 _execute() 方法是查看这个过程发生的地方。

从我从执行器类中了解到的细节来看,Ansible 的执行过程大致如下:

  1. 创建一个任务队列管理器,其中包含任务列表(处理循环等)。
  2. 对于每个任务,根据模块类型创建一个任务执行器脚本,将该任务的所有相关上下文(模块变量、连接变量、魔术变量)引入其中。
  3. 创建与远程目标的连接,参见 connection.py 库。
  4. 将可执行文件的 pickle 写入远程目标(参见 write_to_file_descriptor())。

连接的一部分是确定远程解释器(Python/Powershell 等),任务执行器负责确保模块的执行环境中的远程解释器实际上存在(如果不存在,则会引发错误)。

感谢用户的回答,希望对你有帮助!

正文完