特性
- 模块化:调用指定的模块,完成指定的任务
- 幂等性:执行一次和执行N次的结果一样,不会因为重复执行带来意外的情况
- 有Paramiko,PyYAML,Jinja2 三个关键模块
- 基于Python语言实现
- 部署简单,Python和SSH(默认已安装),agentless
- 安全,基于OpenSSH
- 支持Playbook编排任务
- 不需要代理,不依赖PKI(无需SSL)
- 支持自定义模块,可使用多种编程语言写模块
工作原理
用户通过Ansible去管理各个主机,那么Ansible就是主控端,被控制的机器为被控端
- 被控端如何定义?
由Ansible 的Host inventory(主机清单)记录,告诉Ansible可以控制哪些机器
- 如何管理被控端?
- 单一的命令实现
- 使用Playbook实现
单一的命令模式是直接采用不同的模块进行管理,适用于一些临时性的任务,例如测试主控端与被控端之间连通性的”ping”模块
例行性和经常性的操作,就应该使用Playbook,Playbook类似于将命令写入脚本中,将多个模块按一定的逻辑关系进行排列组合
主要组成部分
- Inventory:管理主机的清单,
/etc/ansible/hosts - Modules:执行命令的功能模块
- Plugins:模块功能的补充
- API:第三方程序调用的接口
- Ansible:整合前面部分的整体,Ansible的命令工具,是核心执行工具
- Ansible Playbook:任务剧本,编排定义Ansible任务集的配置文件,由Ansible顺序执行,Yaml文件
