saltstack二次开发(二)
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二次开发(二)的更多相关文章
- Linux基于webRTC的二次开发(二) 实现远程桌面共享
webRTC中的desktop_capture模块提供了捕获桌面和捕获窗口的相关功能,而实现远程桌面共享功能需要将desktop_capture捕获的画面作为peerconnection的视频源,下面 ...
- EasyDSS点播与直播服务器软件-二次开发接口对接说明示列
EasyDSS流媒体服务器软件,提供一站式的转码.点播.直播.时移回放服务,极大地简化了开发和集成的工作.其中,点播版本主要包含:上传.转码.分发.直播版本,主要包含:直播.录像, 直播支持RTMP输 ...
- EasyDSS高性能RTMP、HLS(m3u8)、HTTP-FLV、RTSP流媒体服务器软件二次开发接口对接说明示列
EasyDSS相关功能 EasyDSS流媒体服务器软件,提供一站式的转码.点播.直播.时移回放服务,极大地简化了开发和集成的工作.其中,点播版本主要包含:上传.转码.分发.直播版本主要包含:直播.录像 ...
- Jmeter二次开发——基于Java请求
简述 这近几年,越来越多非http的协议需要进行性能测试,包括不仅限于各类rpc.mq.缓存等.对于这些协议,市面上可能没有现成的工具可以直接使用,这个时候,我们可以自己动手,通过编写相应的JavaS ...
- saltstack自动化运维系列⑩SaltStack二次开发初探
saltstack自动化运维系列⑩SaltStack二次开发初探 1.当salt运行在公网或者网络环境较差的条件下,需要配置timeout时间vim /etc/salt/master timeout: ...
- Navisworks API 简单二次开发 (自定义工具条)
在Navisworks软件运行的时候界面右侧有个工具条.比较方便.但是在二次开发的时候我不知道在Api那里调用.如果有网友知道请告诉我.谢谢. 我用就自己设置一个工具.界面比较丑!没有美工. 代码: ...
- [连载]《C#通讯(串口和网络)框架的设计与实现》- 12.二次开发及应用
目 录 第十二章 二次开发及应用... 2 12.1 项目配制... 3 12.2 引用相关组件... 4 12.3 构建主程序... 5 ...
- OBS-Studio二次开发记录
OBS-Studio 是一款跨平台的,开源的视频直播客户端软件. 公司需要对他进行二次开发,开发的目的是使用它的录屏功能. 开发的要求是:定制全新的界面,所见即所得,window系统兼容要好. 开发步 ...
- 小猪cms微信二次开发之怎样分页
$db=D('Classify'); $zid=$db->where(array('id'=>$this->_GET('fid'),'token'=>$this->tok ...
- 承接 AutoCAD 二次开发 项目
本人有多年的CAD开发经验,独立完成多个CAD二次开发项目.熟悉.net及Asp.net开发技术,和Lisp开发技术. 现在成立了工作室,独立承接CAD二次开发项目.结项后提供源码及开发文档,有需要的 ...
随机推荐
- 并发编程之 wait notify 方法剖析
前言 2018 元旦快乐. 摘要: notify wait 如何使用? 为什么必须在同步块中? 使用 notify wait 实现一个简单的生产者消费者模型 底层实现原理 1. notify wait ...
- [转]腾讯云Linux云服务器文件上传利器——WinSCP
本文转自:http://bbs.qcloud.com/thread-4379-1-1.html WinSCP简介 WinSCP是一个Windows环境下使用SSH的开源图形化SFTP客户端.同时支持S ...
- [转]web打印实现方案 Lodop6.034 使用方法总结
本文转自:https://www.cnblogs.com/tiger8000/archive/2011/09/19/2181365.html 官文下载: http://mtsoftware.v053. ...
- 自动加载的iframe高度自适应
动态产生iframe,自动加载至body中,还有一个功能就是iframe的高度自适应,下面代码测试于IE和Firefox,Chrome:
- LINUX 下Jexus部署ASP.NET Core WebApi
服务器:LINUX ubuntu16.04 开发软件:VS2015 Update3 dotnet sdk: DotNetCore.1.0.0-VS2015Tools.Preview2 1. ...
- [日常] Go语言圣经--示例: 并发的Echo服务
最简单的回声服务器: package main import ( "io" "net" "log" ) func main() { list ...
- SpringBoot结合Swagger2自动生成api文档
首先在pom.xml中添加如下依赖,其它web,lombok等依赖自行添加 <dependency> <groupId>io.springfox</groupId> ...
- Java读取excel(兼容03和07格式)
读取excel,首先需要下载POI的jar,可以去官网下,也可以在这里下载 一.简单说明 excel2003和excel2007区别比较大,最直观的感受就是扩展名不一样,哈哈 不过,使用POI的API ...
- 启动SpringBoot项目
Eclipse创建Spring Boot项目 1.访问http://start.spring.io/ 解压引入Maven项目 2.建议的目录结构 com +- example +- myproject ...
- video 在移动端播放禁止全屏
<video src="" preload controls x5-playsinline="" playsinline="" web ...