总结常用的几种 api 方式调用saltstack

        saltstack本身是用python写的,用python调用saltstack相对来说比较简单.

我这里采用的是第一种方法,但不同的是用tornado自封装了一层api

 

1. Python client API

http://docs.saltstack.com/en/latest/ref/clients/#salt.wheel.WheelClient.cmd

优点:

  1. 最简单,只要机器安装了saltstack,直接在python代码里 import salt 即可.

缺点:

  1. 只有python语言才能这样使用.
  2. 必须得与salt master部署在同一台机器.
  3. saltstack任务执行时,某些处理是在调用方进程里执行,这样意味调用方的必须与salt master同用户,否则到时会没有权限往 /var/cache/salt/master 目录写缓存文件. 比如salt master是root用户运行,那么django网站调用salt时也必须得也root用户运行.

2. salt api

https://salt-api.readthedocs.org/en/latest/

优点:

  1. 以 http rest api形式提供访问,这样什么语言都可以调用.
  2. 调用方可以不与salt master在同一机器.
  3. 调用方完全可用普通用户运行.

缺点:

  1. 需要自己对rest api做一次封装.
  2. 调用 salt.modules.cp.push 时,文件存放在 salt master上面.这个时候需要拿到文件必须得走NFS或自定义接口.

3. salt command

直接在程序里调用 salt 命令来执行任务

优点:

  1. 简单粗暴

缺点:

  1. 需要自己解决命令执行结果,出错处理太难.

如果需要通过第三方来调用SaltStack时,使用SaltStack自带的Python API并不能很好的满足需求。可以通过使用SaltStack基于RESTful风格的HTTP API。该API模块并不是内置的,需要单独安装。

Salt REST API简介

这里简单的说明下,SaltStack官方支持三种REST API,分别是rest_cherry; rest_tonado和rest_wsgi

  • rest_cherry和rest_tonado两个模块支持监听所有IP的指定端口接收请求
1
2
3
shell> lsof -i:1559
COMMAND    PID USER   FD   TYPE   DEVICE SIZE/OFF NODE NAME
salt-api 13443 root   14u  IPv4 21888585      0t0  TCP *:web2host (LISTEN)
  • rest_wsgi只支持本机访问,只绑定了127.0.0.1
1
2
3
shell> lsof -i:1559
COMMAND    PID USER   FD   TYPE   DEVICE SIZE/OFF NODE NAME
salt-api 13443 root   14u  IPv4 21888585      0t0  TCP 127.0.0.1:web2host (LISTEN)

image

本文选择使用rest_cherry模块来实现SaltStack的HTTP API

安装Salt-API服务

一般情况下,salt-api会使用HTTPS,首次配置成功后,使用用户名和密码登陆,获得Token,Token创建后,默认有效期是12小时,在有效期之内,使用该Token可以代替使用用户名和密码来访问API(该有效时间可在salt-master配置文件中修改)

必备安装包

1
2
shell> yum -y install gcc make python-devel libffi-devel
shell> pip install pyOpenSSL==0.15.1

借助salt工具来生成证书

1
2
3
shell> salt-call --local tls.create_self_signed_cert
local:
    Created Private Key: "/etc/pki/tls/certs/localhost.key." Created Certificate: "/etc/pki/tls/certs/localhost.crt."

salt-call是salt-minion的工具,如果没有这个命令,可以在master端安装minion,然后再执行以上命令

安装salt-api

1
shell> yum -y install salt-api

配置用户及权限

1
2
shell> useradd -M -s /sbin/nologin sa
shell> echo "sapassword" | passwd sa --stdin

在salt-master的配置文件最后添加如下配置

1
2
3
4
5
6
external_auth:
  pam:  #认证模式,pam指的是用Linux本身的用户认证模式
    sa:  #Linux系统中真实存在的用户名
      - '*':  #设置用户的权限,允许该用户操作哪些主机,*代表全部
        - test.*  #允许操作的模块及方法
        - cmd.*

其他认证模式可以参考官方文档:http://docs.saltstack.com/en/latest/topics/eauth/index.html

配置示例一:多用户(官方文档)

1
2
3
4
5
6
7
8
external_auth:
  pam:
    thatch:
      - 'web*':
        - test.*
        - network.*
    steve:
      - .*

配置示例二:指定用户组(官方文档)

1
2
3
4
5
external_auth:
  pam:
    admins%:
      - '*':
        - 'pkg.*'

使用%来表示用户组

配置示例三:操作模块组(官方文档)

1
2
3
4
5
6
external_auth:
  pam:
    thatch:
      - '@wheel'   # to allow access to all wheel modules
      - '@runner'  # to allow access to all runner modules
      - '@jobs'    # to allow access to the jobs runner and/or wheel module

点此查看wheel modules完整列表

点此查看runner modules完整列表


配置salt-api服务

在salt-master的配置文件最后添加如下配置

1
2
3
4
rest_cherrypy:
  port: 1559  #默认监听所有IP的1559端口
  ssl_crt: /etc/pki/tls/certs/localhost.crt  #引用的正是前面创建的证书
  ssl_key: /etc/pki/tls/certs/localhost.key

其他配置参数可以参考官方文档:https://docs.saltstack.com/en/latest/ref/netapi/all/salt.netapi.rest_cherrypy.html

猜你喜欢

转载自hugoren.iteye.com/blog/2365867
今日推荐