Saltshaker是基于saltstack开发的以Web方式进行配置管理的运维工具,简化了saltstack的日常使用,丰富了saltstack的功能,支持多Master的管理。此项目为Saltshaker的后端Restful API,需要结合前端项目Saltshaker_frontend。
- Python >= 3.6
- Mysql >= 5.7.8 (支持Json的Mysql都可以)
- Redis(无版本要求)
- RabbitMQ (无版本要求)
- Python 软件包见requirements.txt
- Supervisor (4.0.0.dev0 版本) 安装:pip install git+https://github.com/Supervisor/supervisor@master
- GitLab >= 9.0
安装Saltshaker,你需要首先准备Python环境
-
准备工作(相关依赖及配置见saltshaker.conf):
-
安装Redis: 建议使用Docker命令如下:
$ docker run -p 0.0.0.0:6379:6379 --name saltshaker_redis -e REDIS_PASSWORD=saltshaker -d yueyongyue/redis:08
-
安装RabbitMQ: 建议使用Docker命令如下:
$ docker run -d --name saltshaker_rabbitmq -e RABBITMQ_DEFAULT_USER=saltshaker -e RABBITMQ_DEFAULT_PASS=saltshaker -p 15672:15672 -p 5672:5672 rabbitmq:3-management
-
安装Mysql: 请自行安装
-
-
下载:
$ git clone https://github.com/yueyongyue/saltshaker_api.git
-
安装依赖:
$ pip install -r requirements.txt
-
导入FLASK_APP环境变量以便使用Flask CLI工具,路径为所部署的app的路径
$ export FLASK_APP=$Home/saltshaker_api/app.py
-
初始化数据库表及相关信息,键入超级管理员用户名和密码(数据库的配置见saltshaker.conf,请确保数据库可以连接并已经创建对应的数据库)
$ mkdir /var/log/saltshaker_plus $ flask init
输出如下: Enter the initial administrators username [admin]: Enter the initial Administrators password: Repeat for confirmation: Create user table is successful Create role table is successful Create acl table is successful Create groups table is successful Create product table is successful Create audit_log table is successful Create event table is successful Init role successful Init user successful Successful
-
启动Flask App
-
开发模式
$ python $Home/saltshaker_api/app.py
-
Gunicorn模式
$ cd $Home/saltshaker_api/ && gunicorn -c gun.py app:app
-
生产模式
$ /usr/local/bin/supervisord -c $Home/saltshaker_api/supervisord.conf
-
-
启动Celery (使用生产模式的忽略此步骤,因为在Supervisor里面已经启动Celery)
$ cd $Home/saltshaker_api/ && celery -A app.celery worker --loglevel=info
-
使用GitLab作为FileServer: 官方配置gitfs说明 请查看此链接需要 pygit2 或者 GitPython 包用于支持git, 如果都存在优先选择pygit2 Saltstack state及pillar SLS文件采用GitLab进行存储及管理,使用前务必已经存在GitLab
fileserver_backend: - roots - git # git和roots表示既支持本地又支持git 先后顺序决定了当sls文件冲突时,使用哪个sls文件(谁在前面用谁的) gitfs_remotes: - http://test.com.cn:9000/root/salt_sls.git: # GitLab项目地址 格式https://<user>:<password>@<url> - mountpoint: salt:// # 很重要,否则在使用file.managed等相关文件管理的时候会找不到GitLab上的文件 https://docs.saltstack.com/en/latest/topics/tutorials/gitfs.html gitfs_base: master # git分支默认master pillar_roots: base: - /srv/pillar ext_pillar: # 配置pillar使用gitfs, 需要配置top.sls - git: - http://test.com.cn:9000/root/salt_pillar.git: - mountpoint: salt://
-
后端文件服务器文件更新:
-
master 配置文件修改如下内容 (不建议)
loop_interval: 1 # 默认时间为60s, 使用后端文件服务,修改gitlab文件时将不能及时更新, 可根据需求缩短时间
-
Saltshaker页面通过Webhook提供刷新功能, 使用reactor监听event, 当event的tag中出现gitfs/update的时候更新fiilerserve
a. 在master上开启saltstack reactor reactor: - 'salt/netapi/hook/gitfs/*': - /srv/reactor/gitfs.sls b. 编写/srv/reactor/gitfs.sls {% if 'gitfs/update' in tag %} gitfs_update: runner.fileserver.update pillar_update: runner.git_pillar.update {% endif %}
-
Restful API文档见Wiki: https://github.com/yueyongyue/saltshaker_api/wiki
Job创建,主要是以Job的方式进行日常的配管工作,避免重复性的手动执行配管操作,同时支持定时及周期性的Job
并行为0 | 立即 | 定时 | 周期 |
---|---|---|---|
一次 | 重开、删除 | 重开、删除 | 无 |
周期 | 无 | 无 | 暂停周期、继续周期、删除 |
并行为非0 | 立即 | 定时 | 周期 |
---|---|---|---|
一次 | 暂停并行、继续并行、重开、删除 | 暂停并行、继续并行、重开、删除 | 无 |
周期 | 无 | 无 | 暂停周期、继续周期、删除 |
Job历史,通过saltstack event获取相关saltshaker事件供用户查看及检索(系统工具里面的event要开启才会有,每增加一个产品线要重启一次)
Job管理,如果执行了某些长时间驻留的任务,如ping,top这种,可以在里面进行kill
可以查看minion的状态信息
可以对minion key 进行管理,接受key会自动同步minion到主机,删除后自动从主机,分组中删除
展示minion Grains 信息
同意key后的minion会自动加到主机管理中,在主机管理中可以对主机打标签等操作
对主机进行分组,以便进行批量操作
使用基于gitfs的方式进行日常的文件管理;state、template、pillar等文件都可以放到里面;支持添加、编辑、删除、上传等操作;使用webhook对gitfs文件进行更新
根据分组执行对应的shell命令
根据分组执行对应的state
根据分组执行对应的pillar(只有pillar形式的sls,执行才有效果)
支持多产品的管理,不同产品线使用不同的master,可以分别进行管理,方便其他产品接入
对执行的shell进行ACL,避免执行敏感命令,如reboot、shutdown等,现在只支持黑名单(拒绝的,只有Shell有效,SLS的文件暂时不支持)
对注册进来的用户,进行产品线的分配、主机组的分配、ACL的分配、角色的分配等
系统预定义的角色,不能删除修改,如有需要可以扩展角色
记录用户日常操作
event工具用于对saltstack event进行记录,每添加一个产品重启一次,如果发现celery worker的数量的数量多于产品线数量,job历史可能重复