Saltshaker API

Saltshaker是基于saltstack开发的以Web方式进行配置管理的运维工具,简化了saltstack的日常使用,丰富了saltstack的功能,支持多Master的管理。此项目为Saltshaker的后端Restful API,需要结合前端项目Saltshaker_frontend

架构图

Dashboard

指导手册
要求
  • Python >= 3.6
  • Mysql >= 5.7.8 (支持Json的Mysql都可以)
  • Redis(无版本要求)
  • RabbitMQ (无版本要求)
  • Python 软件包见requirements.txt
  • Supervisor (4.0.0.dev0 版本 默认pip安装的不支持python3) 请使用此命令安装:pip install git+https://github.com/Supervisor/supervisor@master
  • GitLab >= 9.0
安装

准备工作(相关依赖及配置见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: 初始化系统管理员 用户名:admin 密码:admin
$ docker run -p 0.0.0.0:3306:3306 --name saltshaker_mysql -e MYSQL_ROOT_PASSWORD=123456 -d yueyongyue/saltshaker_mysql:10 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
使用Docker镜像安装
  1. 后端API服务
$ docker run -d -p 0.0.0.0:9000:9000 --name saltshaker_api \
-e REDIS_HOST=192.168.10.100 \
-e REDIS_PORT=6379 \
-e REDIS_PASSWORD=saltshaker \
-e MYSQL_HOST=192.168.10.100 \
-e MYSQL_PORT=3306 \
-e MYSQL_USER=root \
-e MYSQL_PASSWORD=123456 \
-e MYSQL_DB=saltshaker_plus \
-e MYSQL_CHARSET=utf8 \
-e BROKER_HOST=192.168.10.100 \
-e BROKER_PORT=5672 \
-e BROKER_USER=saltshaker \
-e BROKER_PASSWORD=saltshaker \
-e FROM_ADDR=test@saltshaker.com \
-e MAIL_PASSWORD=123345 \
-e SMTP_SERVER=smtp.saltshaker.com \
-e SMTP_PORT=25 \
yueyongyue/saltshaker_api:1.12
  • REDIS_HOST: Redis主机地址
  • REDIS_PORT: Redis端口
  • REDIS_PASSWORD: Redis密码
  • MYSQL_HOST: Mysql数据库地址
  • MYSQL_PORT: Mysql端口
  • MYSQL_USER: Mysql用户名
  • MYSQL_PASSWORD: Mysql密码
  • MYSQL_DB: Mysql数据库名
  • MYSQL_CHARSET: Mysql字符集
  • BROKER_HOST: RabbitMQ地址
  • BROKER_PORT: RabbitMQ端口
  • BROKER_USER: RabbitMQ用户
  • BROKER_PASSWORD: RabbitMQ密码
  • FROM_ADDR: 邮箱地址用于发生邮件
  • MAIL_PASSWORD: 邮箱密码
  • SMTP_SERVER: SMTP服务器地址
  • SMTP_PORT: SMTP服务器端口
  1. 前端服务
$ docker run -d -p 0.0.0.0:80:80 --name saltshaker_frontend \
-e DOMAIN=192.168.10.100  \
-e API_ADDR=192.168.10.100 \
-e Nginx_PROXY_PASS=192.168.10.100:9000 \
yueyongyue/saltshaker_frontend:1.12
  • DOMAIN: 部署服务器的IP地址(最终通过这个地址进行浏览器访问)
  • API_ADDR: 后端API服务器的地址
  • Nginx_PROXY_PASS:后端API服务器的地址加端口
手动部署

安装Saltshaker,你需要首先准备Python 3的环境(假定项目clone到你的家目录即$HOME下面,若果不是请对应修改相关路径)

  1. 下载:

    $ cd $HOME
    $ git clone https://github.com/yueyongyue/saltshaker_api.git
    
  2. 安装依赖:

    $ pip install -r requirements.txt
    
  3. 导入FLASK_APP环境变量以便使用Flask CLI工具,路径为所部署的app的路径

    $ export FLASK_APP=$Home/saltshaker_api/app.py
    
  4. 初始化数据库表及相关信息,键入超级管理员用户名和密码(数据库的配置见saltshaker.conf,请确保数据库可以连接并已经创建对应的数据库)

    $ mkdir /var/log/saltshaker_plus
    $ flask init
    
    输出如下:
        Enter the initial administrators username [admin]: 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
        Create cmd_history table is successful
        Create host table is successful
        Create grains table is successful
        Create period_task table is successful
        Create period_result table is successful
        Create period_audit table is successful
        Create sls table is successful
        Init 超级管理员 role successful
        Init 普通用户 role successful
        Init 产品管理员 role successful
        Init 用户管理员 role successful
        Init 访问控制管理员 role successful
        Init user successful
        Successful
    

    也可以直接导入数据库文件saltshaker_plus.sql, 初始化管理员用户名:admin 密码:admin

    mysql> source $HOME/saltshaker_api/saltshaker_plus.sql;
    
  5. 启动Flask App, 成功启动后会启动9000的端口

    • 开发模式
      $ python $Home/saltshaker_api/app.py
      
    • Gunicorn模式
      $ cd $Home/saltshaker_api/ && gunicorn -c gun.py app:app
      
    • 生产模式
      supervisord.conf 里面的directory配置项修改为自己对应的代码路径
      $ /usr/local/bin/supervisord -c $Home/saltshaker_api/supervisord.conf
      
  6. 启动Celery (使用生产模式的忽略此步骤,因为在Supervisor里面已经启动Celery)

    $ cd $Home/saltshaker_api/ && celery -A app.celery worker --loglevel=info
    
  7. 结合前端项目

    https://github.com/yueyongyue/saltshaker_frontend
    
配置Salt Master (如下是以 CentOS 7 版本进行安装配置的,其他版本的操作系统请替换对应的命令,以下操作都是在salt master服务器上完成)
  1. 安装salt-api 具体安装方法请查看官方文档(https://repo.saltstack.com/
    sudo yum install salt-api
    
  2. 创建salt api 认证用户名密码,使用pam认证方式
    sudo useradd admin          # 必须是admin,如果是其他用户,需要对应修改$HOME/saltshaker_api/saltapi.conf里面的admin
    sudo passwd admin           # 记住admin的密码,稍后配置产品线的时候需要填写
    
  3. 配置saltstack api 拷贝 saltshaker_api/saltapi.conf 到 master配置文件下,开启salt-api的Restful接口(端口为8000)
    sudo cp $HOME/saltshaker_api/saltapi.conf /etc/salt/master.d/
    sudo systemctl restart salt-master
    sudo systemctl restart salt-api
    
  4. 使用GitLab作为FileServer: 官方配置gitfs说明 请查看此链接需要 pygit2 或者 GitPython 包用于支持git, 如果都存在优先选择pygit2 Saltstack state及pillar SLS文件采用GitLab进行存储及管理,使用前务必已经存在GitLab,如下配置在/etc/salt/master进行添加修改
    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://
    
  5. 后端文件服务器文件更新:
    • 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

**Restful API文档见Wiki: **https://github.com/yueyongyue/saltshaker_api/wiki

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐