1、APIS

https://docs.saltstack.com/en/latest/topics/api.html

1.python client api

必须运行在master节点上

2. 一般的话,用netapi

基于restful协议的api

1、python client API

>>> import salt.client
>>> local = salt.client.LocalClient()
>>> local.cmd('*', 'cmd.run', ['whoami'])
{'host-192-168-23-21': 'root', 'host-192-168-23-39.openstacklocal': 'root'}
>>>
>>> local.cmd('*','test.arg',['arg1','arg2'],kwarg={'foo':'bar'})
{'host-192-168-23-21': {'args': ['arg1', 'arg2'], 'kwargs': {'foo': 'bar', '__pub_fun': 'test.arg', '__pub_arg': ['arg1', 'arg2', {'foo': 'bar'}], '__pub_tgt': '*', '__pub_jid': '', '__pub_ret': '',
'__pub_tgt_type': 'glob', '__pub_user': 'root'}}, 'host-192-168-23-39.openstacklocal': {'args': ['arg1', 'arg2'], 'kwargs': {'foo': 'bar', '__pub_fun': 'test.arg', '__pub_arg': ['arg1', 'arg2', {'foo': 'bar'}], '__pub_tgt': '*', '__pub_jid': '', '__pub_ret': '', '__pub_tgt_type': 'glob', '__pub_user': 'root'}}}
>>>
>>> import salt
>>> salt.__path__
['/usr/lib/python3.6/site-packages/salt']

2、netapi:restful

官方文档:

http://docs.saltstack.cn/ref/netapi/all/index.html#all-netapi-modules

netapi又分三种rest_cherrypyrest_tornadorest_wsgi
rest_cherry和rest_tonado两个模块支持监听所有IP的指定端口接收请求;
rest_wsgi只支持本机访问,只绑定了127.0.0.1

tornado不全

默认 rest_cherrypy

轻量级的web小框架

只支持https,自己做,自签名一个

需要验证,

2、rest_cherrypy

rest-cherrypy

http://docs.saltstack.cn/ref/netapi/all/salt.netapi.rest_cherrypy.html

tips:

cherrypy 一套比较简单的 WEB 开发框架,只含有 WEB 开发框架。

开发很简单,但并不算方便,因为 ORM 和模板等等需要自己来选择和配置。

比较适合开发实验系统或为其他应用提供一个 WEB 管理界面

# 暂时不安装,哪里用到了???  # salt-master安装的时候已经自带了 等会确认下
[root@master ~]# yum install cherry -y

1.安装 salt-api

[root@linux-master ~]# yum install salt-api -y

2、签名证书

salt-api仅仅支持https

自签名 or 官方给的命令

方法1: 官方给的命令 (Error,换方法2)

安装证书包

[root@master ~]# yum install pyOpenSSL -y   # 证书包

再执行

本地执行模块,创建了个自签名证书

[root@linux-master ~]# salt-call --local tls.create_self_signed_cert

直接执行报错

[root@linux-node2 ~]# salt-call --local tls.create_self_signed_cert
'tls' __virtual__ returned False: ['PyOpenSSL version 0.10 or later must be installed before this module can be used.']

原因

yum 安装pyOpenSSL 其实已经安装到 python2.7的site-package里面了
/usr/lib/python2./site-packages
yum 只支持python2版本,python3作者不更新了

方法2:配置自签名证书

[root@master ~]# cd /etc/pki/tls/certs/
[root@master certs]# make testcert
Enter pass phrase: ==> # 输入加密短语, 我使用的是saltapi # 解密key
[root@master certs]# cd /etc/pki/tls/private/
[root@master private]# openssl rsa -in localhost.key -out localhost_nopass.key Enter pass phrase for localhost.key: ==> saltapi
writing RSA key
# 生成证书后,修改文件权限
chmod 755 /etc/pki/tls/certs/localhost.crt
chmod 755 /etc/pki/tls/private/localhost.key
chmod 755 /etc/pki/tls/private/localhost_nopass.key

3、对应的配置文件目录

master配置文件目录开关

[root@master master.d]# vim /etc/salt/master

并创建

[root@linux-node2 ~]# mkdir /etc/salt/master.d

4、api.conf 接口配置

配置api接口  (8000占用可以切换8001)

监听的host,port

[root@master ~]# cd /etc/salt/master.d/
[root@master master.d]# vim api.conf
[root@linux-master /etc/salt/master.d]# cat api.conf
rest_cherrypy:
host: 192.168.194.132
port: 8001
ssl_crt: /etc/pki/tls/certs/localhost.crt
ssl_key: /etc/pki/tls/private/localhost_nopass.key

可以指定ip,有多个ip地址怎么办,该机器

5、eauth.conf 扩展认证配置

创建saltapi用户

[root@linux-master /etc/salt/master.d]# useradd -M -s /sbin/nologin saltapi

-M  无家目录
-s /sbin/login 只是用这个saltapi,不登录 

修改改密码

[root@linux-master /etc/salt/master.d]# echo "saltapi" | passwd saltapi --stdin

# 批量修改密码
[root@linux-master /etc/salt/master.d]# chpasswd

扩展认证eauth

官方示例  https://docs.saltstack.com/en/latest/topics/eauth/index.html#acl-eauth

[root@linux-master /etc/salt/master.d]# vim eauth.conf
[root@linux-master /etc/salt/master.d]# cat eauth.conf
external_auth:
pam:
saltapi: # saltapi用户
- .* # 不受限制的使用salt命令
- '@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、启动

[root@linux-master /etc/salt/master.d]# systemctl restart salt-master
[root@linux-master /etc/salt/master.d]# systemctl start salt-api

3、使用命令

8000端口调用salt

1、登录获取token

# 获取token
curl -sSk https://192.168.194.131:8001/login \
-H 'Accept: application/x-yaml' \
-d username=saltapi \
-d password=saltapi \
-d eauth=pam # 返回值
return:
- eauth: pam
expire: 1572981465.263087
perms:
- .*
- '@wheel'
- '@runner'
- '@jobs'
start: 1572938265.263086
token: faa213892379c11dbfaa0b291cb51e3203c33345
user: saltapi
# 以json返回  python -mjson.tool
curl -X POST -k https://127.0.0.1:8001/login \
-d username='saltapi' \
-d password='salt' \
-d eauth='pam' \
|python -mjson.tool

测试连通性,token用上句生成的

# 执行模块 x-yaml格式
curl -k https://192.168.194.131:8001/ \
-H "Accept: application/x-yaml" \
-H "X-Auth-Token: faa213892379c11dbfaa0b291cb51e3203c33345" \
-d client='local' \
-d tgt='*' \
-d fun='test.ping'

2、查询grains

# 查询Grains
curl -k https://192.168.194.131:8001/minions/linux-node1.example.com \
-H "Accept: application/json" \
-H "X-Auth-Token: faa213892379c11dbfaa0b291cb51e3203c33345"

3、执行模块

# json格式
curl -k https://192.168.194.131:8001/ \
-H "Accept: application/json" \
-H "X-Auth-Token: faa213892379c11dbfaa0b291cb51e3203c33345" \
-d client='local' \
-d tgt='*' \
-d fun='test.ping'

4、带参数的

# 带参数的执行模块
curl -k https://192.168.194.131:8001/ \
-H "Accept: application/x-yaml" \
-H "X-Auth-Token: faa213892379c11dbfaa0b291cb51e3203c33345" \
-d client='local' \
-d tgt='*' \
-d fun='cmd.run' \
-d arg='df -h'
# 指定minion的id执行
curl -k https://192.168.194.131:8001 \
-H "Accept: application/json" \
-H "X-Auth-Token: faa213892379c11dbfaa0b291cb51e3203c33345" \
-d client='local' \
-d tgt='linux-node1*' \
-d fun='cmd.run' \
-d arg='df -h'
# cmd.run  查看日志文件
curl -k https://192.168.194.131:8001 \
-H "Accept: application/json" \
-H "X-Auth-Token: faa213892379c11dbfaa0b291cb51e3203c33345" \
-d client='local' \
-d tgt='linux-node1.example.com' \
-d fun='cmd.run' \
-d arg='tail /var/log/messages'

5、异步执行模块

# 异步执行模块
curl -k https://192.168.194.131:8001/ \
-H "Accept: application/x-yaml" \
-H "X-Auth-Token: faa213892379c11dbfaa0b291cb51e3203c33345" \
-d client='local_async' \
-d tgt='*' \
-d fun='state.highstate'
# 返回值
return:
- jid: ''
minions:
- linux-node1.example.com
- linux-node2.example.com

6、jobs管理

# 获取缓存的jobs列表
curl -k https://192.168.194.131:8001/jobs/ \
-H "Accept: application/x-yaml" \
-H "X-Auth-Token: faa213892379c11dbfaa0b291cb51e3203c33345"
# 查询指定的job    20191105024136747884
curl -k https://192.168.194.131:8000//jobs/20191105024136747884\
-H "Accept: application/x-yaml" \
-H "X-Auth-Token: faa213892379c11dbfaa0b291cb51e3203c33345"

二次开发的话:web端,轮询这个jid

执行状态,用local_asyc

cmd.run直接用 local

7、cmd.recode

8、指定ip:tgt_type匹配类型

# 执行远程命令
curl -k https://192.168.23.39:8001 \
-H "Accept: application/json" \
-H "X-Auth-Token: a51c5dad2626890d619e6a1deaf9995199cb5f3e" \
-d client='local' \
-d tgt_type='ipcidr' \
-d tgt='192.168.23.21' \
-d fun='cmd.run' \
-d arg='uptime'
# 查看salt源码
[root@host-192-168-23-39 ~]# vim /usr/lib/python3.6/site-packages/salt/client/__init__.py 652 :param tgt_type: The type of ``tgt``. Allowed values:
653
654 * ``glob`` - Bash glob completion - Default
655 * ``pcre`` - Perl style regular expression
656 * ``list`` - Python list of hosts
657 * ``grain`` - Match based on a grain comparison
658 * ``grain_pcre`` - Grain comparison with a regex
659 * ``pillar`` - Pillar data comparison
660 * ``pillar_pcre`` - Pillar data comparison with a regex
661 * ``nodegroup`` - Match on nodegroup
662 * ``range`` - Use a Range server for matching
663 * ``compound`` - Pass a compound match string
664 * ``ipcidr`` - Match based on Subnet (CIDR notation) or IPv4 address.

9、key管理

# accept

curl -k https://192.168.23.39:8001 \
-H "Accept: application/x-yaml" \
-H "X-Auth-Token: edadb69593773ff5a2716926b507be688dad046d" \
-d client='wheel' \
-d fun='key.accept' \
-d match='192.168.23.61,192.168.23.44,192.168.23.22' \
-d include_rejected='True' # delete 需要重启minion
curl -k https://192.168.23.39:8001 \
-H "Accept: application/x-yaml" \
-H "X-Auth-Token: edadb69593773ff5a2716926b507be688dad046d" \
-d client='wheel' \
-d fun='key.delete' \
-d match='192.168.23.61,192.168.23.44' # reject 需要删除在delete在重启
curl -k https://192.168.23.39:8001 \
-H "Accept: application/x-yaml" \
-H "X-Auth-Token: edadb69593773ff5a2716926b507be688dad046d" \
-d client='wheel' \
-d fun='key.reject' \
-d match='192.168.23.61,192.168.23.44,192.168.23.22'

4、使用postman

Postman

https://www.cnblogs.com/hailongchen/p/9902838.html

https://devcentral.f5.com/s/question/0D51T00006i7jFPSAY/postman-ssl-verification-failing

1、关闭ssl验证

2、post请求

11 SaltApi的更多相关文章

  1. 地区sql

    /*Navicat MySQL Data Transfer Source Server : localhostSource Server Version : 50136Source Host : lo ...

  2. 使用SALT-API进入集成开发的简单样例

    测试的时候,可以CURL -K,但真正作集成的时候,却是不可以的. 必须,不可以让TOKEN满天飞吧. 现在进入这个阶段了.写个样例先: import salt import salt.auth im ...

  3. SALT-API兼HALITE测试搞定

    妈XX,真的搞了近一周的空闲时间. 最后才领悟. 其实,先按HALITE的套路弄好,然后直接SALT-API就OK了..因为HALITE就是SALT-API的封闭和替代嘛. 随便参考一个URL搞定HA ...

  4. 从零开始搭建Salt Web之初探salt-api

    Salt-API入门 在Google搜索栏输入salt-api,会有一些讲述如何使用Salt-API的文章,确实有效,不过都是建立 在将Salt安装在默认目录下的情况下,即通过apt-get inst ...

  5. Salt-API安装配置及使用

    Python3使用saltstack和salt-api 安装python3 1. tar zxvf Python-3.5.1.tgz 2. cd Python-3.5.1 3. ./configure ...

  6. salt-api安装以及简单实使用

    1.安装说明 操作系统版本:CentOS Linux release 7.5.1804 (Core) saltstack版本:2018.3.2 已经关闭selinux.firewalld服务. 2.配 ...

  7. SaltStack配置salt-api第十二篇

    介绍 SaltStack官方提供有REST API格式的 salt-api项目,将使Salt与第三方系统集成变得尤为简单.本文讲带你了解如何安装配置Salt-API, 如何利用Salt-API获取想要 ...

  8. Python3安装使用SaltStack以及salt-api详解

    序言 最近在使用salt-api做主机批量管理部署,整理一下文档.之前使用saltstack 多用于命令行管理,自己做web版的自动化管理平台时,发现命令行的些许局限性,接触到salt-api,找到了 ...

  9. SaltStack--接口salt-api

    SaltStack接口salt-api 介绍 参考官档参考官档 SaltStack官方提供有REST API格式的salt-api项目,将使salt与第三方系统集成变得更加简单. salt-api安装 ...

随机推荐

  1. [转帖]yaml语言格式

    yaml语言格式 YAML是"YAML Ain't a Markup Language"(YAML不是一种标记语言),强调这种语言以数据做为中心,而不是以置标语言为重点. 转载2篇 ...

  2. 剑指offer20:定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。

    1 题目描述 定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1)). 2. 思路和方法 利用辅助栈来存储现有栈的最小值.在入栈和出栈的时候将现有栈和最小 ...

  3. DecodingGenome(CodeForces-222E)【矩阵快速幂】

    题目链接:https://vjudge.net/contest/333591#problem/L 题意:用m个字符构成长度为n的串,其中存在形如“ab”(表示a后不能放置b)的条件约束,问共有多少种构 ...

  4. fiddler笔记:Find Session窗口

    通过Edit菜单选项或CTRL+F打开Find Session窗口.其主要是用来搜索捕捉到的请求和响应. find 指定要搜索的文本 Options Search 支持的搜索选项:Requests a ...

  5. python 修改文件的创建时间、修改时间、访问时间

    目录 python 修改文件创建.修改.访问时间 方案一 方案二(无法修改文件创建时间) python 修改文件创建.修改.访问时间 突如其来想知道一下 python 如何修改文件的属性(创建.修改. ...

  6. LocalDate与Date转化

    // 01. java.util.Date --> java.time.LocalDateTimepublic void UDateToLocalDateTime() { java.util.D ...

  7. 怎样理解第三方Cookie

    1. Cookie往往是用来存储用户信息的, 但有些恶意站点设法伪造了带有正确Cookie的HTTP请求, 这时就会产生安全问题( CSRF 攻击 ). 这里恶意网站获取cookie的行为就是第三方c ...

  8. oracle基本查询01

    /*数据库-----> 数据库实例----->表空间[逻辑单位]------>数据文件[物理单位] 通常情况下oracle数据库只会有一个实例ORCL 新建一个项目: MYSQL:创 ...

  9. hdu 6140 思维

    题解:这道题中的数能组成的数构成了一个连续区间. 一开始只有 a1​​ 的时候能够构成 [-1, 1][−1,1] 中的所有整数. 如果一堆数能够构成 [-a, b][−a,b] 中的所有整数, 这时 ...

  10. js将阿拉伯数字转换成汉字大写

    适用场景:票据,结算凭证等.将任意数字的金额,转换成汉字大写的形式.例如:1234.50 -> 壹仟贰佰叁拾肆圆伍角.壹.贰.叁.肆 直接贴代码,如下: //阿拉伯数字转换成大写汉字 funct ...