模拟saltstack/ansible系列一(序言)

232 阅读1分钟

序言

项目介绍

  • 做过运维的同学应该都知道,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 系列一(序言)

模拟 saltstack/ansible 系列二(实现 ansible 主要功能)

模拟 saltstack/ansible 系列三(基于短连接实现 saltstack 主要功能)

模拟 saltstack/ansible 系列四(基于长连接实现 saltstack 主要功能)