首页 > 其他分享 >总结常用的几种 api 方式调用saltstack

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

时间:2023-06-11 17:02:05浏览次数:54  
标签:API 调用 rest api master saltstack salt


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的指定端口接收请求
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
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)

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

本文选择使用rest_cherry模块来实现SaltStack的HTTP API

安装Salt-API服务

一般情况下,salt-api会使用HTTPS,首次配置成功后,使用用户名和密码登陆,获得Token,Token创建后,默认有效期是12小时,在有效期之内,使用该Token可以代替使用用户名和密码来访问API(该有效时间可在salt-master配置文件中修改)

必备安装包

shell> yum -y install gcc make python-devel libffi-devel
shell> pip install pyOpenSSL==0.15.1

借助salt工具来生成证书

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

shell> yum -y install salt-api

配置用户及权限

shell> useradd -M -s /sbin/nologin sa
shell> echo "sapassword" | passwd sa --stdin

在salt-master的配置文件最后添加如下配置

external_auth:
  pam:  #认证模式,pam指的是用Linux本身的用户认证模式
    sa:  #Linux系统中真实存在的用户名
      - '*':  #设置用户的权限,允许该用户操作哪些主机,*代表全部
        - test.*  #允许操作的模块及方法
        - cmd.*

其他认证模式可以参考官方文档:http://docs.saltstack.com/en/latest/topics/eauth/index.html

配置示例一:多用户(官方文档)

external_auth:
  pam:
    thatch:
      - 'web*':
        - test.*
        - network.*
    steve:
      - .*

配置示例二:指定用户组(官方文档)

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

点此查看wheel modules完整列表

点此查看runner modules完整列表


配置salt-api服务

在salt-master的配置文件最后添加如下配置

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

 

标签:API,调用,rest,api,master,saltstack,salt
From: https://blog.51cto.com/u_6186189/6458284

相关文章

  • 如何安装和使用 Hugging Face Unity API
    HuggingFaceUnityAPI提供了一个简单易用的接口,允许开发者在自己的Unity项目中方便地访问和使用HuggingFaceAI模型,已集成到HuggingFaceInferenceAPI中。本文将详细介绍API的安装步骤和使用方法。安装步骤打开您的Unity项目导航至菜单栏的Window->Package......
  • 使用chatgpt根据openAI API key自定义关键词批量写文章
    使用chatgpt根据openAIAPIkey自定义关键词批量写文章使用方法:1.api.txt里放openaikey,每行一个,程序会随机使用一个KEY2.key.txt放关键词,根据关键词写文章。3.写好的文章会自动保存到wenzhang文件夹下。 写文章速度以来openaikey及本身网络速度。本视频录制采用1核1G机器运......
  • 分析spring事务@Transactional注解在同一个类中的方法之间调用不生效的原因及解决方案
    问题:在Spring管理的项目中,方法A使用了Transactional注解,试图实现事务性。但当同一个class中的方法B调用方法A时,会发现方法A中的异常不再导致回滚,也即事务失效了。当这个方法被同一个类调用的时候,spring无法将这个方法加到事务管理中。我们来看一下生效时候和不生效时候调用堆栈日志......
  • 每日一个 ChatGPT 使用小技巧系列之2 - 用 ChatGPT 研读 SAP ABAP BAPI 的实现源代码
    本系列之前的文章:与其整天担心AI会取代程序员,不如先让AI帮助自己变得更强大每日一个ChatGPT使用小技巧系列之1-给出提纲或者素材,让ChatGPT帮你写作正好昨天有朋友向我发起知乎咨询,询问关于SAPABAPBAPIbapi_vendor_create的使用问题,本文就来说一说:bapi_v......
  • 函数名修饰和调用规则
    “C”或者“C++”函数在内部(编译和链接)通过修饰名识别。修饰名是编译器在编译函数定义或者原型时生成的字符串。有些情况下使用函数的修饰名是必要的,如在模块定义文件里头指定输出“C++”重载函数、构造函数、析构函数,又如在汇编代码里调用“C””或“C++”函数等。修饰名由函数......
  • 函数调用堆栈
    这段代码反汇编后,代码是什么呢?#include<stdio.h>longtest(inta,intb){a=a+3;b=b+5;returna+b;}intmain(intargc,char*argv[]){printf("%d",test(10,90));return0;}......
  • Vue 中通过事件总线方式组件间传递数据及调用 Vue脚手架中的axios数据调用方式获取git
    1:看界面效果2:代码结构3:代码内容3.1:引入第三方css样式表:bootstrap.css/*!*Bootstrapv3.3.5(http://getbootstrap.com)*Copyright2011-2015Twitter,Inc.*LicensedunderMIT(https://github.com/twbs/bootstrap/blob/master/LICENSE)*//*!normalize.cssv3.0.3|......
  • ChatGPT API Transition Guide
    ChatGPTAPITransitionGuideHowtogetstartedWrittenby JoshuaJ.. UpdatedoveraweekagoPromptstoMessagesTohaveamoreinteractiveanddynamicconversationwithourmodels,youcanusemessagesinChatGPTinsteadoftheoldprompt-styleusingwithc......
  • 调试技巧之调用堆栈
    在计算机科学中,Callstack是指存放某个程序的正在运行的函数的信息的栈。Callstack由stackframes组成,每个stackframe对应于一个未完成运行的函数。在当今流行的计算机体系架构中,大部分计算机的参数传递,局部变量的分配和释放都是通过操纵程序栈来实现的。栈用来传递函数参数,存......
  • 使用dbghelp获取调用堆栈--release下的调试方法学
    当软件作为release模式被发布给用户时,当程序崩溃时我们很难去查找原因。常见的手法是输出LOG文件,根据LOG文件分析程序崩溃时的运行情况。我们可以通过SEH来捕获程序错误,然后输出一些有用的信息作为我们分析错误的资料。一般我们需要输出的信息包括:系统信息、CPU寄存器信息、堆栈......