1、需求

自定义一个类,首先初始化时候获得token,然后使用token认证去请求相应的json文件。

salt命令在shell中使用方式是salt 客户端 模块名.方法 参数(例子:salt ‘client’ cmd.run ‘free -m’)。

这里salt命令方法我们已经封装好了,想使用salt的什么方法就传入对应的客户端、方法、参数即可。

2、准备工作

①、服务端安装salt-master、salt-api

②、查看/etc/salt/master配置文件,找到file_roots这个参数所指定的家目录

③、在家目录下创建如下文件

[root@jiang salt]# pwd
/srv/salt
[root@jiang salt]# ls
_file  _modules  _runner  _shell

这里需要注意的是家目录下的目录需要以“_”开头

各个文件的内容:

_file:存放的文件,方便copy到minion端

_modules:自定义的模块文件

_runner:自定义的runner文件

_shell:自定义的shell文件

3、编写saltapi.py文件

#定义modules和runner接口

import jsonimport requests

class SaltServer(object):def __init__(self):self.session = requests.session()self.token = self.getToken() #获取token,如果这里不写的话可以在下面函数调用也一样self.url = "http://192.168.137.130:8000"

 # print(self.session.cookies) #通过resquests模块也可以获取到token,不过需要再执行过滤,这个看具体使用

 def getToken(self): #定义获取token的函数 url = "http://192.168.137.130:8000/login" headers = {"Accept": "application/json"} data = {"username": "saltapi", "password": "saltapi", "eauth": "pam" } res = self.session.post(url=url, headers=headers, data=data) text = res.text result = json.loads(text) #把json数据类型转化成python对象 token = result.get("return")[0].get("token") return token

def resBean(self, datas): #定义res接口规范函数,方便下面调用,一般都使用这个规范! resultBean = dict()try: res = self.session.post(url=self.url, data=datas) text = res.text data = json.loads(text).get("return") resultBean['code'] = 0 resultBean['message'] = "success" resultBean['data'] = dataexcept Exception as e: resultBean['code'] = -1 resultBean['message'] = "error" resultBean['data'] = efinally:return resultBean

def runModules(self, minionid, fun, arg=None): #定义module函数,三个参数分别是客户端,函数和参数# url = "http://192.168.137.130:8000" data = {# "X-Auth-Token": self.getToken(), #在上面构造函数里定义了这里就可以不用再写这个参数了 "client": "local", #调用module使用local "tgt": minionid, #定义minion的id "fun": fun, #使用的函数 "arg": arg #函数使用的参数 }return self.resBean(data)

 def runRunner(self, fun, **kwarge): #定义runner函数,两个参数分别是函数和参数# url = "http://192.168.137.130:8000" data = {# "X-Auth-Token": self.getToken(), "client": "runner", #调用runner的使用runner "fun": fun, } data.update(kwarge) #这里的data参数和modules模块的有区别,需要注意return self.resBean(data)

4、编写安装软件的模块:installApp.py(可以定义多个函数,每个函数表示安装的软件,这里只是示例安装nginx)

#调用脚本安装相关软件

import commands

def nginx():    resultBean = dict() __salt__['cp.get_file']('salt://_shell/app/nginx.sh', '/usr/local/src/installnginx.sh') #调用cp模块传送shell脚本到minion端 cmd = 'sh /usr/local/src/installnginx.sh && systemctl restart nginx' #执行minion端的shell脚本 status, output = commands.getstatusoutput(cmd)if status == 0: resultBean['code'] = 0 resultBean['message'] = 'success' resultBean['data'] = outputelse: resultBean['code'] = -1 resultBean['message'] = 'install nginx error' resultBean['data'] = outputreturn resultBean

每次编写或者修改完模块后记得执行同步模块命令:

[root@jiang salt]# salt '*' saltutil.sync_modules

5、编写安装nginx的shell脚本,放在_shell目录里面(只做示例用,详细的可以自己按照需求编写即可)

#!/bin/bash

yum install -y nginx

6、测试:test.py

from saltUtil.util.saltapi import SaltServer       #在pycharm里面执行,加载saltapi.py脚本的SaltServer类,具体路径按照自己写的路径为准

saltServer = SaltServer()

result = saltServer.runModules('*', 'installApp.nginx')   #传入客户端和模块方法print(result)

转载于:https://www.cnblogs.com/Jweiqing/p/9281861.html

通过saltapi接口安装实例(modules)相关推荐

  1. python rpc_对python调用RPC接口的实例详解

    要调用RPC接口,python提供了一个框架grpc,这是google开源的 rpc相关文档: 需要安装的python包如下: 1.grpc安装 pip install grpcio 2.grpc的p ...

  2. oracle php一键安装,Oracle8.1.6i+ Apache1.3.14+PHP4.0.3完全安装实例

    在redhat 6.2下 Oracle8.1.6I+ APACHE1.3.14+PHP4.0.3完全安装实例 1. 本文目的 ● 在redhat下安装ORACLE8数据库服务器 ● 安装apache, ...

  3. python zookeeper api_Zookeeper接口kazoo实例解析

    本文主要研究的是Zookeeper接口kazoo的相关内容,具体介绍如下. zookeeper的开发接口以前主要以java和c为主,随着python项目越来越多的使用zookeeper作为分布式集群实 ...

  4. httpclient 调取接口_使用HttpClient调用接口的实例讲解

    一,编写返回对象 public class HttpResult { // 响应的状态码 private int code; // 响应的响应体 private String body; get/se ...

  5. python3.7安装pygal_pip和pygal的安装实例教程

    本文分为两个部分,第一部分是关于pip,第二部分关于pygal,主要关于二者的简介以及安装过程的分享,希望对大家有所帮助. 一.pip 1.简介 pip 是一个安装和管理 Python 包的工具,py ...

  6. javq接口_Java的接口及实例

    一.定义 Java接口(Interface),是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为( ...

  7. Java的接口及实例

    一.定义 Java接口(Interface),是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为( ...

  8. vue 接口节流_vue输入节流,避免实时请求接口的实例代码

    在做搜索的时候,当搜索页面只有一个输入框.没有确定按钮的时候,只能在用户输入时请求服务端,查询数据.这样会导致频繁的发送请求,造成服务端压力. 解决这个问题,可以使用vue做输入节流. 1.创建一个工 ...

  9. 前端vue后端java,Vue调用后端java接口的实例代码_亦心_前端开发者

    前段时间 做了个学校的春萌项目,其中用到 先上后端接口代码: package controller; import net.sf.json.JSONObject; import util.DBUtil ...

  10. php的api数据接口书写实例

    php原生书写接口的方法,分为if和switch.数组三种方式构建 适用:原生或框架内部应用,调用部分的api路径进行使用 以下是if和else的方式接口代码实例: <?php//通过get参数 ...

最新文章

  1. 转载,大佬关于虚拟内存与物理内存关系讲解。
  2. idea设置开发方式
  3. oracle查询表的索引
  4. 【小白学PyTorch】14.tensorboardX可视化教程
  5. 安卓逆向_9 --- log 插桩、Toast 弹窗、smali代码编写和植入 ( 好搜小说 )
  6. Web后端学习笔记 Flask(7)数据库
  7. Linux(Ubuntu)使用日记------ssh远程登录腾讯云
  8. C++11 继承构造函数
  9. js 内置对象常用方法
  10. EMUI10安装java_速升级!荣耀Play推EMUI 9.1正式版更新:方舟编译器和EROFS系统来了 - IT之家...
  11. Django二级域名路由配置方案django-hosts
  12. 零基础边缘端智慧交通训练营 | Lesson 4
  13. 全球与中国中型徒步鞋市场深度研究分析报告
  14. TS+vue3 页面红色波浪线(和声明类型有关)
  15. Python基础之闭包函数
  16. LC6936-TWS耳机方案
  17. 学习虫师的《web接口开发与自动化测试1-5章》
  18. 印象笔记桌面版怎么导出html,三个小工具帮你搞定印象笔记模版
  19. 电子商务网站建设与维护知识点
  20. 3DMAX插件安装与详细说明

热门文章

  1. content 控件(24)
  2. Java内存模型JMM简单分析
  3. linux 修改自动联网的配置说明
  4. 在Android应用中实现Google搜索的例子
  5. OGNL 过滤与投影
  6. T-SQL Parser
  7. VS2008安装deffactory.dat文件错误解决方法
  8. C#开发高亮语法编辑器(一)——TextBox ,RichTextBox的局限性
  9. 服务器注意事项(切记!)
  10. bzoj 3437 小p的农场