上两节中,分别介绍了Ansible执行的两种方式。那Ansible的执行过程、或者说工作原理是怎样的呢?这是本节所要介绍的内容。
一、整体架构
如上图所示,Ansible的架构并不复杂。主要由以下几部分构成
| 组成部分 | 作用 |
|---|---|
| Host Inventory | 主机清单。定义所要控制的主机,并将其进行分组 |
| Playbooks | 剧本。将复杂任务分解为一个个子任务,并按照预定的处理过程进行编排 |
| Modules | 模块。包括众多的内置模块和用户自定义模块 |
| Connection Plugins | 连接插件。与被控主机建立ssh连接,通过paramiko实现 |
| Host1,Host2… | 被控主机 |
| Ansible.cfg | Ansible的全局配置文件,图中未标出 |
| Ansible | 统筹整个架构,包含Ansible的一系列命令行工具 |
二、工作流程
要弄懂Ansible的工作流程,其实只要弄清楚几个问题。操作对象是什么?被控主机嘛。从哪来呢?读主机清单文件呗。主机清单文件在哪呢?读配置文件呗。怎么操作呢?按剧本写的做!没有剧本?那一行命令不就完了嘛…问个没完没了,直接看下面步骤吧
-
查找配置文件,一般使用默认的
/etc/ansible/ansible.cfg。加载一些全局配置及找到主机清单文件位置,然后解析主机清单文件。 -
建立ssh连接,进入与被控端当前所用用户对等的用户家目录下,建立临时文件夹
-
查找被控主机上的python解释器
-
加载编写的剧本
xxx.yml或命令行模式中用到的模块,将本地生成的临时文件通过sftp发送到 第二步 所生成的临时文件夹下,并重命名为xxx.py文件 -
给
xxx.py文件加执行权限 -
在被控主机上,使用第三步查找到的python解释器执行第四步生成的
xxx.py文件,并返回结果 -
删除临时
xxx.py文件,退出
注:查看Ansible的详细执行流程,可通过-vvv或-vvvv参数。
eg: ansible all -m ping -vvv