Saltstack Restful API

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

内容简介: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

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

查看所有标签

猜你喜欢:

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

网页美工传奇

网页美工传奇

姜伟 / 机械工业出版社 / 2004-5 / 27.0

本书作为一本专门针对网页美工的书籍,在阐述网页设计理念的基础上,以生动的实例引导读者深入地掌握网页的美工技术,使读者在短时间内就可以迅速地提高自己的美工能力。全书共分为11章,分别介绍色彩知识、设计创意、网页规划、广告、背景、按钮、图形处理、文字效果、动画制作、CSS和JavaScript应用等内容。本书主要面向具有一定Flash和Photoshop基础的读者,对于专业的网页设计人员来说,更是一本......一起来看看 《网页美工传奇》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

MD5 加密
MD5 加密

MD5 加密工具

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试