Saltstack的api

Salt-api有两种方式,一种是函数的形式,有人家定义好的函数,我们可以直接调用,直接写python代码调用函数或者类就可以了。
第二种形式是salt-api有封装好的http协议的,我们需要启动一个服务端。

安装

yum install –y salt-api

加载master的配置文件

>>> import salt.config
>>> master_opts = salt.config.client_config("/etc/salt/master")
>>> print(master_opts)

加载minion的配置文件

>>> import salt.config
>>> minion_opts = salt.config.minion_config('/etc/salt/minion')
>>> print(minion_opts)

在master上执行各种模块

>>> import salt.client
>>> local = salt.client.LocalClient("/etc/salt/master")
>>> local.cmd("*","test.ping")
{'k8s-node1': True}
>>> local.cmd("*","cmd.run","w")
{'k8s-node1': ' 21:54:47 up 1:01, 2 users, load average: 0.00, 0.01, 0.05\nUSER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT\nroot pts/0 192.168.127.1 06Feb18 145days 0.02s 0.02s -bash\nroot pts/1 192.168.127.1 21:03 7:51 0.26s 0.21s python'}
>>> local.cmd("*","cmd.run",["ifconfig"])
{'k8s-node1': 'ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500\n inet 192.168.127.166 netmask 255.255.255.0 broadcast 192.168.127.255\n inet6 fe80::4bc6:5d64:e3cd:13a2 prefixlen 64 ......}

如果一次要执行多个模块

local.cmd('*', ['test.ping', 'cmd.run'], [[], ['whoami']])
{'192.168.48.129': {'test.ping': True, 'cmd.run': 'root'}}

自定义的模块

>>> local.cmd('*', "jd.meminfo", "")
{'192.168.48.129': {'meminfo': '0.31'}}

如果对于执行时间过长,没法直接返回的,我们就可以通过异步执行的形式进行返回。

cmd_async和get_cache_returns(jid)

以下代码只能在master上执行,而且是只能在master上才可以使用。

>>> local.cmd_async("*","cmd.run",["ifconfig"])
''
>>> local.get_cache_returns("")
{'k8s-node1': {'ret': 'ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500\n inet 192.168.127.166 netmask 255.255.255.0 broadcast 192.168.127.255\n......}

客户端执行salt命令

>>> import salt.config
>>> import salt.client
>>> caller = salt.client.Caller('/etc/salt/minion')
>>> caller.cmd("test.ping")
True

类似shell命令的salt-call,可以在minion端执行salt的命令,测试连通性等。

master端执行salt-run

>>> import salt.config
>>> import salt.runner
>>> __opts__ = salt.config.client_config("/etc/salt/master")
>>> runnermaster = salt.runner.RunnerClient(__opts__)
>>> runnermaster.cmd("jobs.list_jobs",[]) >>> runnermaster.cmd("manage.status")
down:
up:
- k8s-node1

Grains

>>> import salt.config
>>> import salt.loader
>>> __opts__ = salt.config.minion_config("/etc/salt/minion")
>>> __grains__ = salt.loader.grains(__opts__)
>>> __grains__['id']
'192.168.127.166'
其他的一些变量
import salt.config
import salt.loader __opts__ = salt.config.minion_config('/etc/salt/minion')
__grains__ = salt.loader.grains(__opts__)
__opts__['grains'] = __grains__
__utils__ = salt.loader.utils(__opts__)
__salt__ = salt.loader.minion_mods(__opts__, utils=__utils__)
__salt__['test.ping']()

Salt的内置环境变量

在python的交互环境中,这些变量是不生效的,只有在自定义的模块,或者salt执行时才生效。

__opts__                  配置文件,类型
__salt__ 执行modules
__salt__['cmd.run']('fdisk -l')
__salt__['network.ip_addrs']()
__pillar__ pillar
__grains__ grains __context__
if not 'cp.fileclient' in __context__:
__context__['cp.fileclient'] = salt.fileclient.get_file_client(__opts__)

Saltstack的httpapi

安装

yum install -y gcc make python-devel libffi-devel salt-api openssl
pip install cherrypy

生成证书

cd /etc/salt
mkdir keycrt
cd keycrt
openssl genrsa -out key.pem 4096
openssl req -new -x509 -key key.pem -out cert.pem -days 1826

配置用户以及权限

首先需要在master上检查配置文件

default_include: master.d/*.conf
interface: 192.168.127.165
conf_file: /etc/salt/master
pki_dir: /etc/salt/pki/master
auto_accept: True
file_roots:
base:
- /srv/salt/
log_file: /var/log/salt/master
log_level_logfile: debug

配置salt-api的配置文件

[root@localhost master.d]# cd /etc/salt/master.d/
[root@localhost master.d]# ls
api.conf eauth.conf
[root@localhost master.d]#
[root@localhost master.d]# cat api.conf
rest_cherrypy:
port: 8000
ssl_crt: /etc/salt/keycrt/cert.pem
ssl_key: /etc/salt/keycrt/key.pem
[root@localhost master.d]# cat eauth.conf
external_auth:
pam:
saltapi:
- .*
- '@wheel'
- '@runner'

创建用户

useradd -M -s /sbin/nologin/ saltapi
echo "saltapi" |passwd saltapi --stdin

启动salt-api

systemctl restart salt-api
netstat –anp |grep 8000

获取token

curl -X POST -k http://192.168.127.165:8000/login -d username='saltapi' -d password='saltapi' -d eauth='pam' |python -mjson.tool
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 240 100 197 100 43 45 9 0:00:04 0:00:04 --:--:-- 45
{
"return": [
{
"eauth": "pam",
"expire": 1517235285.554001,
"perms": [
".*",
"@wheel",
"@runner"
],
"start": 1517192085.554001,
"token": "105ee1f28109d67855ce7898e75e173a678f5174",
"user": "saltapi"
}
]
}

只要salt-api不重启,tocken就不会过期,salt-api重启以后,tocken就会过期。

通过curl来获取执行module

curl -k http://192.168.127.165:8000 -H "Accept: application/x-yaml" -H "X-Auth-Token: ec623ed62de7dd62cfdadb94ad0044b7f46c9549" -d client='local' -d tgt='*' -d fun='test.ping'
return:
192.168.127.166: true

运行runner

curl -k http://192.168.127.165:8000 -H "Accept: application/x-yaml" -H "X-Auth-Token: ec623ed62de7dd62cfdadb94ad0044b7f46c9549" -d client='runner' -d fun='manage.status'
return:
- down: []
up:
- 192.168.127.166

saltstack二次开发(二)的更多相关文章

  1. Linux基于webRTC的二次开发(二) 实现远程桌面共享

    webRTC中的desktop_capture模块提供了捕获桌面和捕获窗口的相关功能,而实现远程桌面共享功能需要将desktop_capture捕获的画面作为peerconnection的视频源,下面 ...

  2. EasyDSS点播与直播服务器软件-二次开发接口对接说明示列

    EasyDSS流媒体服务器软件,提供一站式的转码.点播.直播.时移回放服务,极大地简化了开发和集成的工作.其中,点播版本主要包含:上传.转码.分发.直播版本,主要包含:直播.录像, 直播支持RTMP输 ...

  3. EasyDSS高性能RTMP、HLS(m3u8)、HTTP-FLV、RTSP流媒体服务器软件二次开发接口对接说明示列

    EasyDSS相关功能 EasyDSS流媒体服务器软件,提供一站式的转码.点播.直播.时移回放服务,极大地简化了开发和集成的工作.其中,点播版本主要包含:上传.转码.分发.直播版本主要包含:直播.录像 ...

  4. Jmeter二次开发——基于Java请求

    简述 这近几年,越来越多非http的协议需要进行性能测试,包括不仅限于各类rpc.mq.缓存等.对于这些协议,市面上可能没有现成的工具可以直接使用,这个时候,我们可以自己动手,通过编写相应的JavaS ...

  5. saltstack自动化运维系列⑩SaltStack二次开发初探

    saltstack自动化运维系列⑩SaltStack二次开发初探 1.当salt运行在公网或者网络环境较差的条件下,需要配置timeout时间vim /etc/salt/master timeout: ...

  6. Navisworks API 简单二次开发 (自定义工具条)

    在Navisworks软件运行的时候界面右侧有个工具条.比较方便.但是在二次开发的时候我不知道在Api那里调用.如果有网友知道请告诉我.谢谢. 我用就自己设置一个工具.界面比较丑!没有美工. 代码: ...

  7. [连载]《C#通讯(串口和网络)框架的设计与实现》- 12.二次开发及应用

    目       录 第十二章     二次开发及应用... 2 12.1        项目配制... 3 12.2        引用相关组件... 4 12.3        构建主程序... 5 ...

  8. OBS-Studio二次开发记录

    OBS-Studio 是一款跨平台的,开源的视频直播客户端软件. 公司需要对他进行二次开发,开发的目的是使用它的录屏功能. 开发的要求是:定制全新的界面,所见即所得,window系统兼容要好. 开发步 ...

  9. 小猪cms微信二次开发之怎样分页

    $db=D('Classify'); $zid=$db->where(array('id'=>$this->_GET('fid'),'token'=>$this->tok ...

  10. 承接 AutoCAD 二次开发 项目

    本人有多年的CAD开发经验,独立完成多个CAD二次开发项目.熟悉.net及Asp.net开发技术,和Lisp开发技术. 现在成立了工作室,独立承接CAD二次开发项目.结项后提供源码及开发文档,有需要的 ...

随机推荐

  1. 并发编程之 wait notify 方法剖析

    前言 2018 元旦快乐. 摘要: notify wait 如何使用? 为什么必须在同步块中? 使用 notify wait 实现一个简单的生产者消费者模型 底层实现原理 1. notify wait ...

  2. [转]腾讯云Linux云服务器文件上传利器——WinSCP

    本文转自:http://bbs.qcloud.com/thread-4379-1-1.html WinSCP简介 WinSCP是一个Windows环境下使用SSH的开源图形化SFTP客户端.同时支持S ...

  3. [转]web打印实现方案 Lodop6.034 使用方法总结

    本文转自:https://www.cnblogs.com/tiger8000/archive/2011/09/19/2181365.html 官文下载: http://mtsoftware.v053. ...

  4. 自动加载的iframe高度自适应

    动态产生iframe,自动加载至body中,还有一个功能就是iframe的高度自适应,下面代码测试于IE和Firefox,Chrome:

  5. LINUX 下Jexus部署ASP.NET Core WebApi

    服务器:LINUX  ubuntu16.04  开发软件:VS2015 Update3   dotnet sdk: DotNetCore.1.0.0-VS2015Tools.Preview2   1. ...

  6. [日常] Go语言圣经--示例: 并发的Echo服务

    最简单的回声服务器: package main import ( "io" "net" "log" ) func main() { list ...

  7. SpringBoot结合Swagger2自动生成api文档

    首先在pom.xml中添加如下依赖,其它web,lombok等依赖自行添加 <dependency> <groupId>io.springfox</groupId> ...

  8. Java读取excel(兼容03和07格式)

    读取excel,首先需要下载POI的jar,可以去官网下,也可以在这里下载 一.简单说明 excel2003和excel2007区别比较大,最直观的感受就是扩展名不一样,哈哈 不过,使用POI的API ...

  9. 启动SpringBoot项目

    Eclipse创建Spring Boot项目 1.访问http://start.spring.io/ 解压引入Maven项目 2.建议的目录结构 com +- example +- myproject ...

  10. video 在移动端播放禁止全屏

    <video src="" preload controls x5-playsinline="" playsinline="" web ...