saltstack本身是用python写的,用python调用saltstack相对来说比较简单.
我这里采用的是第一种方法,但不同的是用tornado自封装了一层api
1. Python client API
http://docs.saltstack.com/en/latest/ref/clients/#salt.wheel.WheelClient.cmd
优点:
- 最简单,只要机器安装了saltstack,直接在python代码里
import salt
即可.
缺点:
- 只有python语言才能这样使用.
- 必须得与salt master部署在同一台机器.
- saltstack任务执行时,某些处理是在调用方进程里执行,这样意味调用方的必须与salt master同用户,否则到时会没有权限往
/var/cache/salt/master
目录写缓存文件. 比如salt master是root用户运行,那么django网站调用salt时也必须得也root用户运行.
2. salt api
https://salt-api.readthedocs.org/en/latest/
优点:
- 以 http rest api形式提供访问,这样什么语言都可以调用.
- 调用方可以不与salt master在同一机器.
- 调用方完全可用普通用户运行.
缺点:
- 需要自己对rest api做一次封装.
- 调用
salt.modules.cp.push
时,文件存放在 salt master上面.这个时候需要拿到文件必须得走NFS或自定义接口.
3. salt command
直接在程序里调用 salt 命令来执行任务
优点:
- 简单粗暴
缺点:
- 需要自己解决命令执行结果,出错处理太难.
如果需要通过第三方来调用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) |
本文选择使用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 |
配置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
相关推荐
C#调用API接口 本文将详细介绍如何在C#中调用API函数获取系统信息。API函数是构筑Windows应用程序的基石,是Windows编程的必备利器。每一种Windows应用程序开发工具都提供了间接或直接调用了Windows API函数的方法...
通过Webservice方式提供U8的API调用,可避免客户端安装用友U8才能调用到U8API,完整的调用源码..实现其他语言开发的平台可以调用U8 API生成单据以及处理单据的审核等. 需引用: UFIDA.U8.MomServiceCommon.dll UFIDA....
豆包 API 调用示例代码详解-Python版 在本文中,我们将详细介绍如何使用 Python 调用豆包 API,并提供相关的事前准备和代码执行步骤。 一、事前准备 密钥申请: 要使用豆包 API,首先需要申请一个授权密钥。在上述...
本文将详细讲解如何在.NET后台使用这两种方法调用WebAPI,以及如何实现文件上传。 1. GET方式调用WebAPI: GET请求通常用于获取资源,不修改服务器状态。在.NET中,可以使用HttpClient类来发送GET请求。首先,需要...
PowerBuilder Win32 API函数调用:参考手册 pdf
ionName); Kettle API 是一个强大的工具,允许开发者...这为开发者提供了灵活的方式,能够根据业务需求构建和集成复杂的ETL解决方案。同时,遵循XML文件的方法可以确保代码在未来的Kettle版本中保持稳定性和兼容性。
总结一下,ArcGIS JS API调用地图服务涉及到Map Service、Feature Service和Image Service,它们分别用于展示基础地图、操作矢量数据和处理栅格数据。通过理解和掌握这些服务,你可以构建出功能丰富的GIS应用。在...
- **Saltstack集成**:通过Go语言调用Saltstack的API或编写插件,将运维功能集成到Web平台上,实现图形化的运维操作。 综上所述,这个“Go-基于GO语言和Saltstack开发的WEB运维平台”项目,充分利用了Go语言的高...
### LabVIEW 中调用 Windows API 的方法 #### 1. Windows API 简介 **1.1 简介** Windows API(Application Programming Interface,应用程序接口)是微软为 Windows 操作系统提供的一个广泛使用的程序接口集合。...
1. **API调用方式**:PB提供两种调用API的方式——`WinAPI`和`DLL`。WinAPI是Windows操作系统的函数库,而DLL是动态链接库,包含可由多个程序共享的代码和资源。 2. **PB中的API调用语法**:在PB中,我们通常使用`...
该项目主要实现ajax/winform/webform三种方式通过WebAPI去调用WebService服务功能。简单易懂,WebService中主要包含的技术为APISoapHeader方法。初次接触这类技术的程序猿们可供参考。包括数据库脚本以及说明,很是...
C#实现微信企业号API服务端调用封装全部源码 1、基础方法 1.1 在回调模式下验证服务器接口地址 1.2 服务器端解密方法 1.3 服务器端加密方法 1.4 获取AccessToken(企业号的全局唯一票据) 1.5 获取企业号应用的基本...
在IT行业中,VB(Visual Basic)是一种常用的编程语言,它被广泛用于开发Windows应用程序。Web API则是一个用于构建HTTP服务的框架,常用于提供RESTful服务,允许客户端通过HTTP协议与服务器进行数据交互。本话题将...
在"C# WinForm调用WebAPI"的场景中,我们主要涉及到以下几个关键知识点: 1. **C# WinForm编程**:WinForm是.NET Framework的一部分,提供了一个用于创建交互式图形用户界面的平台。在C# WinForm应用中,我们可以...
使用python调用chatgpt的Assistant API,我对几种常用的接口进行了封装,只需传入key即可调用,包含创建助理(Assistant ,列出助理(Assistant ),#创建线程 ,#聊天,#查询消息
Java流式(Stream)调用Deepseek的API方法。提供了两种方式,一种是静态方法调用,一种是直接调用Service,参数通过yml配置
c语言调用电脑系统常用API程序(包含完整源码+详细注释) c语言调用电脑系统常用API程序(包含完整源码+详细注释) c语言调用电脑系统常用API程序(包含完整源码+详细注释) c语言调用电脑系统常用API程序(包含完整...
C# API大全pdf,内容涉及使用C#调用windows API 入门: 一:入门,直接从C# 调用DLL 导出 二.背后的原理―― 知其所以然,相关的知识 从.NET 平台调用Win32 API的一些基础知识以及编程实例,windows ...
Jenkins作为一个开源的持续集成工具,提供了丰富的API接口,允许开发者通过编程方式与Jenkins服务器进行交互。以下是一些关于如何使用Java调用Jenkins API的重要知识点: 1. **Jenkins REST API**: Jenkins主要...