`

总结常用的几种 api 方式调用saltstack

阅读更多

        saltstack本身是用python写的,用python调用saltstack相对来说比较简单.

 

我这里采用的是第一种方法,但不同的是用tornado自封装了一层api

 

1. Python client API

http://docs.saltstack.com/en/latest/ref/clients/#salt.wheel.WheelClient.cmd

优点:

  1. 最简单,只要机器安装了saltstack,直接在python代码里 import salt 即可.

缺点:

  1. 只有python语言才能这样使用.
  2. 必须得与salt master部署在同一台机器.
  3. saltstack任务执行时,某些处理是在调用方进程里执行,这样意味调用方的必须与salt master同用户,否则到时会没有权限往 /var/cache/salt/master 目录写缓存文件. 比如salt master是root用户运行,那么django网站调用salt时也必须得也root用户运行.

2. salt api

https://salt-api.readthedocs.org/en/latest/

优点:

  1. 以 http rest api形式提供访问,这样什么语言都可以调用.
  2. 调用方可以不与salt master在同一机器.
  3. 调用方完全可用普通用户运行.

缺点:

  1. 需要自己对rest api做一次封装.
  2. 调用 salt.modules.cp.push 时,文件存放在 salt master上面.这个时候需要拿到文件必须得走NFS或自定义接口.

3. salt command

直接在程序里调用 salt 命令来执行任务

优点:

  1. 简单粗暴

缺点:

  1. 需要自己解决命令执行结果,出错处理太难.

 

如果需要通过第三方来调用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)

image

本文选择使用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

点此查看wheel modules完整列表

点此查看runner modules完整列表


配置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接口 本文将详细介绍如何在C#中调用API函数获取系统信息。API函数是构筑Windows应用程序的基石,是Windows编程的必备利器。每一种Windows应用程序开发工具都提供了间接或直接调用了Windows API函数的方法...

    通过Webservice方式提供U8二次开发API调用

    通过Webservice方式提供U8的API调用,可避免客户端安装用友U8才能调用到U8API,完整的调用源码..实现其他语言开发的平台可以调用U8 API生成单据以及处理单据的审核等. 需引用: UFIDA.U8.MomServiceCommon.dll UFIDA....

    豆包 API 调用示例代码详解-Python版

    豆包 API 调用示例代码详解-Python版 在本文中,我们将详细介绍如何使用 Python 调用豆包 API,并提供相关的事前准备和代码执行步骤。 一、事前准备 密钥申请: 要使用豆包 API,首先需要申请一个授权密钥。在上述...

    .net 后台Post,get方式调用webapi

    本文将详细讲解如何在.NET后台使用这两种方法调用WebAPI,以及如何实现文件上传。 1. GET方式调用WebAPI: GET请求通常用于获取资源,不修改服务器状态。在.NET中,可以使用HttpClient类来发送GET请求。首先,需要...

    PowerBuilder Win32 API函数调用:参考手册 pdf

    PowerBuilder Win32 API函数调用:参考手册 pdf

    Kettle API - Java调用示例

    ionName); Kettle API 是一个强大的工具,允许开发者...这为开发者提供了灵活的方式,能够根据业务需求构建和集成复杂的ETL解决方案。同时,遵循XML文件的方法可以确保代码在未来的Kettle版本中保持稳定性和兼容性。

    Arcgis js api调用常用三种地图服务Demo

    总结一下,ArcGIS JS API调用地图服务涉及到Map Service、Feature Service和Image Service,它们分别用于展示基础地图、操作矢量数据和处理栅格数据。通过理解和掌握这些服务,你可以构建出功能丰富的GIS应用。在...

    Go-基于GO语言和Saltstack开发的WEB运维平台

    - **Saltstack集成**:通过Go语言调用Saltstack的API或编写插件,将运维功能集成到Web平台上,实现图形化的运维操作。 综上所述,这个“Go-基于GO语言和Saltstack开发的WEB运维平台”项目,充分利用了Go语言的高...

    labview 如何调用windows API

    ### LabVIEW 中调用 Windows API 的方法 #### 1. Windows API 简介 **1.1 简介** Windows API(Application Programming Interface,应用程序接口)是微软为 Windows 操作系统提供的一个广泛使用的程序接口集合。...

    pb调用API最新实例

    1. **API调用方式**:PB提供两种调用API的方式——`WinAPI`和`DLL`。WinAPI是Windows操作系统的函数库,而DLL是动态链接库,包含可由多个程序共享的代码和资源。 2. **PB中的API调用语法**:在PB中,我们通常使用`...

    前端调用WebAPI再调用WebService服务

    该项目主要实现ajax/winform/webform三种方式通过WebAPI去调用WebService服务功能。简单易懂,WebService中主要包含的技术为APISoapHeader方法。初次接触这类技术的程序猿们可供参考。包括数据库脚本以及说明,很是...

    C#实现微信企业号API服务端调用封装

    C#实现微信企业号API服务端调用封装全部源码 1、基础方法 1.1 在回调模式下验证服务器接口地址 1.2 服务器端解密方法 1.3 服务器端加密方法 1.4 获取AccessToken(企业号的全局唯一票据) 1.5 获取企业号应用的基本...

    VB调用web api打开第三方图纸

    在IT行业中,VB(Visual Basic)是一种常用的编程语言,它被广泛用于开发Windows应用程序。Web API则是一个用于构建HTTP服务的框架,常用于提供RESTful服务,允许客户端通过HTTP协议与服务器进行数据交互。本话题将...

    C#winform调用webapi.rar

    在"C# WinForm调用WebAPI"的场景中,我们主要涉及到以下几个关键知识点: 1. **C# WinForm编程**:WinForm是.NET Framework的一部分,提供了一个用于创建交互式图形用户界面的平台。在C# WinForm应用中,我们可以...

    Assistant API的接口调用封装

    使用python调用chatgpt的Assistant API,我对几种常用的接口进行了封装,只需传入key即可调用,包含创建助理(Assistant ,列出助理(Assistant ),#创建线程 ,#聊天,#查询消息

    Java流式(Stream)调用Deepseek的API方法 可以快速对接到业务中去

    Java流式(Stream)调用Deepseek的API方法。提供了两种方式,一种是静态方法调用,一种是直接调用Service,参数通过yml配置

    c语言调用电脑系统常用API程序(包含完整源码+详细注释)

    c语言调用电脑系统常用API程序(包含完整源码+详细注释) c语言调用电脑系统常用API程序(包含完整源码+详细注释) c语言调用电脑系统常用API程序(包含完整源码+详细注释) c语言调用电脑系统常用API程序(包含完整...

    C#调用API教程

     C# API大全pdf,内容涉及使用C#调用windows API 入门:  一:入门,直接从C# 调用DLL 导出  二.背后的原理―― 知其所以然,相关的知识  从.NET 平台调用Win32 API的一些基础知识以及编程实例,windows ...

    使用java调用jenkins api

    Jenkins作为一个开源的持续集成工具,提供了丰富的API接口,允许开发者通过编程方式与Jenkins服务器进行交互。以下是一些关于如何使用Java调用Jenkins API的重要知识点: 1. **Jenkins REST API**: Jenkins主要...

Global site tag (gtag.js) - Google Analytics