序言
项目介绍
- 做过运维的同学应该都知道,saltstack和ansible都是运维常用的自动化工具,可以用来做批量系统配置、批量程序部署、批量运行命令等功能
- 本教程将分析saltstack和ansible的核心功能实现,然后自己用Python实现一个类似saltstack和ansible的项目
saltstack、ansible原理
ansible
- 无Agent架构,基于SSH
- ansible playbook可以按任务对批量主机编排
- Python语言开发
saltstack
- Agent架构,基于长连接
- 可以通过state文件来对批量主机编排
- Python语言开发
自己如何开发一个实现ansible和saltstack基本功能的程序?
具体实现功能
主机连接模式
- SSH连接模式
- 短连接模式
- websocket长连接模式
Ad-hoc
- ping功能
- 执行命令功能
- copy文件功能
- fetch文件功能
模拟playbook、state文件执行
- YAML读取
- 模板文件读取与配置
- 根据配置执行方法
模拟ansible和saltstack命令行参数功能
开发语言
Python(也可以用Go,主要是本人部门主用Python)
使用的Python模块
- paramiko: SSH连接、SFTP上传下载文件、执行命令
- ruamel/PyYaml: 解析YAML配置文件
- jinja2: 模板引擎
- click: 命令行模块
- flask/sanic: web框架,agent使用
- geventwebsocket: websocket服务端
- websocket: websocket客户端
- redis: 作为MQ,也可以用其他MQ
- colorama:终端输入颜色字体
- requests/httpx: http请求框架
相关系列文章同步发布于个人博客 Jackless
模拟 saltstack/ansible 系列二(实现 ansible 主要功能)