一、salt-api安装

yum install salt-api pyOpenSSL -y   #pyOpenSSL 生成自签证书时使用

二、生成自签名证书(ssl使用)

[root@master certs]# salt-call tls.create_self_signed_cert
local:
Created Private Key: "/etc/pki/tls/certs/localhost.key." Created Certificate: "/etc/pki/tls/certs/localhost.crt."
[root@master certs]# ls
localhost.crt localhost.key

三、创建基于pam认证的系统用户

[root@master certs]# useradd -M -s /sbin/nologin salt-api

[root@master certs]# echo "salt-api" | passwd salt-api --stdin
Changing password for user salt-api.
passwd: all authentication tokens updated successfully.
[root@master certs]#

四、在master节点新增配置文件

[root@master certs]# cat /etc/salt/master.d/saltapi.conf
rest_cherrypy:
host: 0.0.0.0             #在哪个网卡上监听
port: 8080                 # salt-api监听的端口
debug: true
#disable_ssl: False           #salt-api是否启用ssl
static: /var/www/saltpad/static
static_path: /static
app: /var/www/saltpad/index.html
app_path: /saltpad
ssl_crt: /etc/pki/tls/certs/localhost.crt 
ssl_key: /etc/pki/tls/certs/localhost.key external_auth:
pam:                    #使用的认证方式
salt-api:                #用户
- .*                  #支持使用哪些模块和方法
- '@runner'
- '@wheel'
[root@master certs]#

五、启动salt-master和salt-api

[root@master certs]# systemctl start salt-master salt-api 

六、 通过curl获取token

[root@master certs]# curl -k https://127.0.0.1:8080/login  -H "Accept: application/x-yaml"  -d username='salt-api' -d password='salt-api'  -d eauth='pam'
return:
- eauth: pam
expire: 1569625134.305509
perms: {}
start: 1569581934.305508
token: e26b360aaa0b25b9aef004446684f3882020e562 #获取的token
user: salt-api
[root@master certs]# curl参数介绍

--sslv3 指定sslv3版本
-k 忽略证书获取https内容
-s 指定使用静默(silent)方式
-i 指定SaltAPI收到服务器返回的结果同时显示HTTP Header。
-H 指定一个特定的Header给远端服务器,当SaltAPI 需要发送appliton-tion/json Header时。会以我们希望的JSON格式返回结果
-d 想远端服务器发送POST请求,以key=value的格式发送 ,注意key=v时,必须紧挨=号两边


获取token后就可以使用token通信
注:重启salt-api后token改变


七、测试

以下命令参数介绍

client : 模块,python处理salt-api的主要模块,‘client interfaces <netapi-clients>’
local : 使用‘LocalClient <salt.client.LocalClient>’ 发送命令给受控主机,等价于saltstack命令行中的'salt'命令
local_async : 和local不同之处在于,这个模块是用于异步操作的,即在master端执行命令后返回的是一个jobid,任务放在后台运行,通过产看jobid的结果来获取命令的执行结果。
runner : 使用'RunnerClient<salt.runner.RunnerClient>' 调用salt-master上的runner模块,等价于saltstack命令行中的'salt-run'命令
runner_async : 异步执行runner模块
wheel : 使用'WheelClient<salt.wheel.WheelClient>', 调用salt-master上的wheel模块,wheel模块没有在命令行端等价的模块,但它通常管理主机资源,比如文件状态,pillar文件,salt配置文件,以及关键模块<salt.wheel.key>功能类似于命令行中的salt-key。
wheel_async : 异步执行wheel模块
备注:一般情况下local模块,需要tgt和arg(数组),kwarg(字典),因为这些值将被发送到minions并用于执行所请求的函数。而runner和wheel都是直接应用于master,不需要这些参数。
tgt : minions
fun : 函数
arg : 参数
expr_form : tgt的匹配规则
'glob' - Bash glob completion - Default
'pcre' - Perl style regular expression
'list' - Python list of hosts
'grain' - Match based on a grain comparison
'grain_pcre' - Grain comparison with a regex
'pillar' - Pillar data comparison
'nodegroup' - Match on nodegroup
'range' - Use a Range server for matching
'compound' - Pass a compound match string

1、命令行执行

salt 'salt-minion-01' cmd.run ‘uptime’  类似使用curl执行一下命令
curl -k http://127.0.0.1:8080 -H "Accept: application/x-yaml" -H "X-Auth-Token: e26b360aaa0b25b9aef004446684f3882020e562" -d client='local' -d tgt='salt-minion-01' -d fun='cmd.run'   -d arg='uptime'

2、salt ‘salt-minion-01’ state.sls state_file   类似使用curl执行一下命令

curl -k http://127.0.0.1:8080  -H "Accept: application/x-yaml" -H "X-Auth-Token: e26b360aaa0b25b9aef004446684f3882020e562" -d client='local' -d tgt='salt-minion-01' -d fun='state.sls' -d arg='state_file'

3、salt -L '192.168.1.12‘ test.ping

curl -k http://127.0.0.1:8080  -H "Accept: application/x-yaml" -H "X-Auth-Token: e26b360aaa0b25b9aef004446684f3882020e562" -d client='local' -d tgt='192.168.1.12'  -d expr_form='list'  -d fun='test.ping'

4、获取指定minion端(192.168.1.12)的grains信息

 curl -sSk https://192.168.56.11:8000/minions/192.168.1.12 -H 'Accept: application/x-yaml' -H 'X-Auth-Token: e26b360aaa0b25b9aef004446684f3882020e562'

八、使用python调用salt-api接口范例

#!/usr/bin/env python
#-*- coding:utf- -*-
import json
import requests class SaltClient(object):
def __init__(self, **login_info):
self.login_url = login_info.get("login_url")
self.api_url = login_info.get("api_url")
self.username = login_info.get("username")
self.password = login_info.get("password") def get_token(self):
validate_data = {
"username": self.username ,
"password": self.password,
"eauth": 'pam'
} headers = {
'Accept': 'application/json',
'Content-Type': 'application/json; charset=UTF-8',
'User-Agent': 'py-saltclient'
}
try:
resp = requests.post(self.login_url, json=validate_data, headers=headers, verify=False)
if resp.status_code == :
resp_body = json.loads(resp.content)
data = {
'start_time': resp_body['return'][]['start'],
'expire_time': resp_body['return'][]['expire'],
'token': resp_body['return'][]['token']
}
return data
except Exception as e:
print e def exec_command(self, data, token):
headers = {
'Accept': 'application/json',
'Content-Type': 'application/json; charset=UTF-8',
'X-Auth-Token': token
} try:
resp = requests.post(self.api_url, json=data, headers=headers, verify=False)
return resp.content
except Exception as e:
return "not ok" if __name__ == '__main__':
login_info = {
"login_url":"https://<master_IP>/login",
"api_url":"https://<master_IP>/",
"username":"salt-api",
"password":"salt-api"
}
client = SaltClient(**login_info)
token = client.get_token().get("token")
target = "192.168.1.12"
func_ps = 'monitor_srv.ls'
para_ps = {"path":"/abc/extra_conf"}
cmd = {
"client": "local",
"tgt": target,
"fun": func_ps,
'kwarg': para_ps
} res = client.exec_command(data=cmd, token=token)
res = json.loads(res)
returns = res['return']
 

saltstack的salt-api介绍的更多相关文章

  1. 死磕salt系列-salt API 使用

    启用salt-api 服务 这里简单的说明下,SaltStack官方支持三种REST API,分别是rest_cherry; rest_tonado和rest_wsgi, 本文选择使用rest_che ...

  2. 常用ArcGIS for Silverlight 开发API介绍

    1.API介绍 2.Map对象  3.Layer对象 4.Symbol对象 5.Task对象

  3. Servlet基础(一) Servlet简介 关键API介绍及结合源码讲解

    Servlet基础(一) Servlet基础和关键的API介绍 Servlet简介 Java Servlet是和平台无关的服务器端组件,它运行在Servlet容器中. Servlet容器负责Servl ...

  4. saltstack通过salt.client执行命令(转)

    利用saltstack的salt.client模块可以在python的命令行下或者python脚本里执行相应的salt命令 master端想要执行类似 salt '*' cmd.run 'uptime ...

  5. python学习笔记(win32print API介绍)

    最近博主在研究用python控制打印机 这里整理下win32print的API介绍,官网地址http://timgolden.me.uk/pywin32-docs/win32print.html Op ...

  6. 使用html5中video自定义播放器必备知识点总结以及JS全屏API介绍

    一.video的js知识点: controls(控制器).autoplay(自动播放).loop(循环)==video默认的: 自定义播放器中一些JS中提供的方法和属性的记录: 1.play()控制视 ...

  7. CentOS 安装及配置Salt api

    安装 # yum -y install salt-api 更改配置 vim /etc/salt/master 把默认的注释掉  我们这边默认配置文件目录是/srv/salt default_inclu ...

  8. Commons-lang API介绍

    4.1 Commons-lang API介绍 4.1.1 StringUtils 4.1.2 StringEscapeUtils 4.1.3 ArrayUtils 4.1.4 DateUtils 4. ...

  9. APP自动化框架LazyAndroid使用手册(3)--核心API介绍

    作者:黄书力 概述 在前一篇博文中,简要介绍了一款安卓UI自动化测试框架LazyAndroid (http://blog.csdn.net/kaka1121/article/details/53204 ...

  10. Spring Boot 2.x 编写 RESTful API (一) RESTful API 介绍 & RestController

    用Spring Boot编写RESTful API 学习笔记 RESTful API 介绍 REST 是 Representational State Transfer 的缩写 所有的东西都是资源,所 ...

随机推荐

  1. 吴裕雄--天生自然JAVA SPRING框架开发学习笔记:Spring AOP(面向切面编程)

    面向切面编程(AOP)和面向对象编程(OOP)类似,也是一种编程模式.Spring AOP 是基于 AOP 编程模式的一个框架,它的使用有效减少了系统间的重复代码,达到了模块间的松耦合目的. AOP ...

  2. 关于mysql/apache/nginx的配置文件配置

    2015.5.12 mysql中可以通过函数查看用户列表/查看当前用户以及删除用户,方法百度之,忘了 /etc/php5/fpm/php.ini memory_limit修改之前为128M apach ...

  3. java-正则表达式判断移动联通电信手机号

    package com.linbilin.phone; import java.util.regex.Matcher; import java.util.regex.Pattern; public c ...

  4. MySQL实现免密登录和数据库无法启动问题

    1. 进入MySQL安装的文件夹,打开my.ini配置文件,打开方式参考:https://www.cnblogs.com/leslie12956/p/11842956.html 2. 停止MysSQL ...

  5. 《C Primer Plus》- 第二章 C语言概述

    本笔记写于2020年1月27日. 本系列文章参考的是<C Primer Plus>(第六版),其中里面会有笔者自己的相关补充. 以下示例均运行于macOS Catalina 10.15.2 ...

  6. 高级变量类型(列表,元组,字典,字符串,公共方法,变量高级)for循环

    Python 中数据类型可以分为 数字型 和 非数字型 数字型 整型 (int) 浮点型(float) 布尔型(bool) 真 True 非 0 数 -- 非零即真 假 False 0 复数型 (co ...

  7. 循环(while,break,continue),转义字符

    01. 程序的三大流程 在程序开发中,一共有三种流程方式: 顺序 -- 从上向下,顺序执行代码 分支 -- 根据条件判断,决定执行代码的 分支 循环 -- 让 特定代码 重复 执行 02. while ...

  8. MST(最小生成树)——Prim算法——HDU 1879-继续畅通工程

    Prim算法很好理解,特别是学完了迪杰斯特拉算法之后,更加能理解Prim的算法思想 和迪杰斯特拉算法差不多,由于最后要形成连通图,故任意指定一个点,作为初始点,遍历所有点,以当前最小权值的点(和迪杰斯 ...

  9. == 与 equals区别(HashCode方法)

    1:==分析 1.2:基本类型比较 判断基本类型的数值是不是相等 1.3:对象类型比较 判断两个引用是不是指向同一个对象,即内存地址是不是相等. 2:equals分析 来判断对象内容是不是相等,一般有 ...

  10. 代码杂谈-or符号

    看到别人的代码里用了 or, 有点巧用. 记录一下. def func(a,b, context=None): # .... ctx = context or global_context() # . ...