Saltstack Restful API

栏目: 编程工具 · 发布时间: 6年前

内容简介:Saltstack Restful API

Saltstack Restful API

如果需要通过第三方调用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两个模块支持端口的监听和请求接收

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

安装Salt-API服务

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

1.安装依赖包

yum -y install gcc make python-devel libffi-develpip install pyOpenSSL==0.15.1

2.使用salt工具来生成证书

salt-call --local tls.create_self_signed_certlocal:    Created Private Key: "/etc/pki/tls/certs/localhost.key." Created Certificate: "/etc/pki/tls/certs/localhost.crt."

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

3.安装salt-api

yum install salt-api

4.配置用户及权限

user add -M -s /sbin/nologin bossecho "boss" | passwd boss --stdin

5.修改salt-master的配置文件最后添加如下配置

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

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

配置实例一:多用户认证

external_auth:  pam:    thatch:      - 'web*':        - test.*        - network.*    steve:      - .*  #不限制用户steve

配置示例二:GROUPS(官方)

To apply permissions to a group of users in an external authentication system, append a % to the ID:

external_auth:  pam:    admins%:      - '*':        - 'pkg.*'

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

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

6.配置salt-api服务

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

rest_cherrypy:  port: 1559  #监听1559端口  ssl_crt: /etc/pki/tls/certs/localhost.crt #引用证书,基于加密方式  ssl_key: /etc/pki/tls/certs/localhost.key

7.启动服务

/etc/init.d/salt-master restartservice salt-api start

8.登录获得Token(此处通过header获得token)

[root@boss-node1 salt]# curl -sSk https://192.168.56.125:1559/login \>     -H 'Accept: application/x-yaml' \>     -d username=boss \>     -d password=boss \>     -d eauth=pamreturn:- eauth: pam  expire: 1495051545.6982951  perms:  - test.*  - cmd.*  start: 1495008345.6982939  token: 8e824c77f6766ae20899199628a5263487f3fe32  user: boss

9.复制token并运行test.ping

curl -sSk https://localhost:1559 \    -H 'Accept: application/json' \    -H 'X-Auth-Token: 03e3d81c6494123b6b70a707f436d64b3e5f74e9'\    -d client=local \    -d tgt='*' \    -d fun=test.ping{"return": [{"boss-node2": true, "boss-node1": true}]}

10.编写 python 发送一个请求

<pre style="background-color:#ffffff;color:#000000;font-family:'Courier New';font-size:10.5pt;">#!/usr/bin/env python# -*- coding:utf-8 -*-# Author:Muzi Liimport jsonimport urllibimport urllib2# 在python2.6x中,以下两行不是必须的import sslssl._create_default_https_context = ssl._create_unverified_contexturl = 'https://192.168.56.125:1559' # salt-api所在的“坐标”def test():    pre_data = [{"client": "local", "tgt": "*", "fun": "test.ping"}]  # 根据上面官方文档的要求组成数组嵌套字典的形式  json_data = json.dumps(pre_data)  # 将其转化为json格式  header = {"Content-Type": "application/json", "Accept": "application/json",              "X-Auth-Token": "03e3d81c6494123b6b70a707f436d64b3e5f74e9"}    # 这里说明下,Content-Type是声明传递给API的数据是什么格式的,这里指定了json,是因为上面的pre_data数据被我转化成了json格式  # Accept是声明返回结果以什么样的格式显示,这里也指定了json格式来显示返回结果  request = urllib2.Request(url, json_data, header)  # 构造一次请求  response = urllib2.urlopen(request)  # 构造一次HTTP访问  html = response.read()    print htmlif __name__ == "__main__":    test()</pre>

9.登录获得Token(此处使用cookie)

[root@boss-node1 ~]# curl -sSk https://localhost:1559/login \>       -c ~/cookies.txt \>       -H 'Accept: application/x-yaml' \>       -d username=boss \>       -d password=boss \>       -d eauth=pamreturn:- eauth: pam  expire: 1495056758.5330541  perms:  - test.*  - cmd.*  start: 1495013558.5330529  token: 8a9ec5677ddbc20fa2c5b90844de0be461a0db9f  user: boss[root@boss-node1 ~]# curl -sSk https://localhost:1559 \>       -b ~/cookies.txt \>       -H 'Accept: application/x-yaml' \>       -d client=local \>       -d tgt='*' \>       -d fun=test.pingreturn:- boss-node1: true  boss-node2: true

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

High Performance Python

High Performance Python

Micha Gorelick、Ian Ozsvald / O'Reilly Media / 2014-9-10 / USD 39.99

If you're an experienced Python programmer, High Performance Python will guide you through the various routes of code optimization. You'll learn how to use smarter algorithms and leverage peripheral t......一起来看看 《High Performance Python》 这本书的介绍吧!

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

URL 编码/解码
URL 编码/解码

URL 编码/解码

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具