如何在saltstack rest api中如何利用api异步去监控jid

saltstack的rest接口salt-api开发使用指南 - 推酷
saltstack的rest接口salt-api开发使用指南
& &saltsatck本身就提供了一套算完整的api,专业说法 sdk。 saltstack 的webui hahite就是用cherrypy框架和salt接口组成的。
salt-api 简单配置下
yum -y install salt-api
[root@65 ~]# tail -n 10 /etc/salt/master
rest_cherrypy:
port: 8000
debug: True
ssl_crt: /etc/pki/tls/certs/ca.crt
ssl_key: /etc/pki/tls/certs/ca.key
external_auth:
下面的测试用的是curl做的,线上环境调用的话,肯定不能这么搓,可以用python的urllib2 。
登录,然后获取token
curl -k https://10.10.10.65:8000/login -H "Accept: application/x-yaml"
-d username='admin'
-d password='123123'
-d eauth='pam'
650) this.width=650;" src="/MfAJB3.jpg!web" title="111.png" alt="wKiom1MLaOng1mAXAAHICb2x_Gs256.jpg" />
这里是使用获取的token,查询硬盘的使用情况
curl -k https://10.10.10.65:8000 \
-H "Accept: application/x-yaml" \
-H "X-Auth-Token: f43a327ec5dc988cc7e9e" \
-d client=local \
-d tgt='*' \
-d fun='status.diskusage'
650) this.width=650;" src="/RzUvuy.jpg!web" title="QQ截图44.png" alt="wKioL1MLaYzx7XBdAANGMPpGMcE458.jpg" />
调用它的模块
curl -k https://10.10.10.65:8000 \
-H "Accept: application/x-yaml" \
-H "X-Auth-Token: f43a327ec5dc988cc7e9e" \
-d client=local \
-d tgt='*' \
-d fun='cmd.run' \
-d arg="free -m"
650) this.width=650;" src="/AVVnMr.jpg!web" title="QQ截图32.png" alt="wKiom1MLaoTCTgFPAAK0f1MY1rY368.jpg" />
& &我这里测试了下他的性能,不是对他性能的测试,因为就算是bottle这样的web框架也能抗住500+的压力,这里测试他的是他的堵塞,我开了两个终端,都是sleep 5 ,第二个链接花费了9s,很明显是堵塞的接口。 当然,我的测试方法也很是片面,salt-api 也是有jobs的jid支持的。也可以cherrypy nginx的uwsgi配合,多开几个线程。
650) this.width=650;" src="/ZV7N3m.jpg!web" title="3.png" alt="wKiom1MLbm3wDYDZAAKkFhFLB6k627.jpg" />
虽然salt-api的接口相对来说,不管是文档还是使用易度算方便,但是这东西是cherrypy写的,绝对不主流的东西,我先前搞hahite的时候,研究一段时间的cherrypy,基本的mvc和session也都过了一遍,感觉用起来还是不爽。 所以 个人觉得完全可以自己写一套自己的api,不用非要rest,在接口上把安全做好就行了。
这里讲解下,saltsatck的api,我发现群里有人迷茫了,saltstack api 是一个直接调用函数的集合罢了,salt-api是一个基于cherrypy的rest接口 !!!
In [8]: import salt.client
In [9]: local = salt.client.LocalClient()
In [10]: local.cmd('*', 'cmd.run', ['ip a'])
Out[10]: {'': '1: lo:
mtu 16436 qdisc noqueue state UNKNOWN \n
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00\n
inet 127.0.0.1/8 scope host lo\n
inet6 ::1/128 scope host \n
valid_lft forever preferred_lft forever\n2: eth0:
mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 1000\n
link/ether 00:0c:29:06:f2:dc brd ff:ff:ff:ff:ff:ff\n
inet 10.10.10.66/24 brd 10.10.10.255 scope global eth0\n
inet6 fe80::20c:29ff:fe06:f2dc/64 scope link \n
valid_lft forever preferred_lft forever'}
可以一次套用多个模块 !
>>> local.cmd('*', [
'grains.items',
'sys.doc',
'cmd.run',
['uptime'],
通过saltstack的run_job可以实现任务的后台执行,扔到后面之前,会扔出一个job id !
650) this.width=650;" src="/uABvUr.jpg!web" title="55.png" alt="wKiom1MLdonTPf96AAJWHoZa7H0147.jpg" />
得到jid后,salt-run jobs.lookup_jid &job id number& 直接获取数据 !
在api里面可以用runner.low 方法:
runner.low({'fun': 'jobs.lookup_jid', 'jid': ''})
就说到这里啦,大家自己玩玩吧,有问题,拿出来咱们讨论下 ~ 有更好的见解,请指出,绝对受教 !!!
本文出自 “峰云,就她了。” 博客,谢绝转载!
已发表评论数()
已收藏到推刊!
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
排版有问题
没有分页内容
视频无法显示
图片无法显示当前访客身份:游客 [
:受益匪浅
:引用来自“不避风云”的评论幸好deepin都给默认配...
:幸好deepin都给默认配好啦。
:楼主总结的很好,受益匪浅
:我是用nrdp的,请问客户端那边怎么触发插件,nrd...
:通过iptables设置就可以搞定。
:先收藏了 改天试试
:引用来自“采女孩的小蘑菇”的评论防不了ddos 嗯...
今日访问:5
昨日访问:79
本周访问:417
本月访问:1995
所有访问:37620
saltstack 基础入门文档
发表于2年前( 10:41)&&
阅读(6697)&|&评论()
0人收藏此文章,
saltstack 和 Puppet Chef 一样可以让你同时在多台服务器上执行命令也包括安装和配置软件。Salt 有两个主要的功能:配置管理和远程执行。
这里讲述了saltstack的基本使用方法。
Salt 和 Puppet Chef 一样可以让你同时在多台服务器上执行命令也包括安装和配置软件。Salt 有两个主要的功能:配置管理和远程执行。
源码: https://pypi.python.org/pypi/salt
debian/ubuntu
设置debian更新源
wget -q -O- "/debian-salt-team-joehealy.gpg.key" | apt-key add -
echo "deb /debian wheezy-saltstack main" /etc/apt/sources.list
设置ubuntu更新源
add-apt-repository ppa:saltstack/salt 或
echo deb http://ppa.launchpad.net/saltstack/salt/ubuntu `lsb_release -sc` main | tee /etc/apt/sources.list.d/saltstack.list
wget -q -O- ":11371/pks/lookup?op=get&search=0xC0A6" | apt-key add -
安装软件包
apt-get update
apt-get install salt-master
# On the salt-master
apt-get install salt-minion
# On each salt-minion
apt-get install salt-syndic
RHEL6/CentOS6
设置RHEL/CentOS更新源
rpm -Uvh http://ftp.linux.ncsu.edu/pub/epel/6/i386/epel-release-6-8.noarch.rpm或
rpm -Uvh http://ftp.linux.ncsu.edu/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm/
name=Extra Packages for Enterprise Linux 6
baseurl=http://download.fedoraproject.org/pub/epel/6/x86_64
failovermethod=priority
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6
安装软件包
yum update
yum install salt-master # On the salt-master
yum install salt-minion # On each salt-minion
saltstack 的配置文件格式
Salt默认使用PyAMl语法(http://pyyaml.org) 作为它的模板文件的格式,其他很多模板语言在Salt中是可以使用的。 一定要按照正确的格式书写YAML,比如最基本的,它使用到两个空格代替tab,: 或 - 后面要有空格。
interface: 0.0.0.0
log_file: /var/log/salt/master
key_logfile: /var/log/salt/key
file_roots:
- /srv/salt
服务端配置
主控端基本设置 编辑配置文件 /etc/salt/master,修改如下所示配置项,去掉前面的注释符
interface: 0.0.0.0
# interface (服务端监听IP),0.0.0.0 是监听所有IP
log_file: /var/log/salt/master
# 记录主控端运行日志
key_logfile: /var/log/salt/key
# 记录认证证书日志
master默认监听两个端口, 4505(publish_port)为salt的消息发布系统,4506(ret_port)为salt客户端与服务端通信的端口,所以确保客户端能跟服务端的这2个端口通信
客户端配置
受控端基本设置 编辑配置文件 /etc/salt/minion,修改如下所示配置项,去掉前面的注释符#
master: 42.121.124.237
# 设置主控端IP
id: ubuntu-server-001
# 设定受控端编号
log_file: /var/log/salt/minion
# 记录受控端服务日志
key_logfile: /var/log/salt/key
# 记录认证证书日志
最基本字段:
master: 服务端,
主机名 id: 客户端主机名(在服务端看到的客户端的名字,可以不设置,默认与hostname相同)
小技巧:查看配置文件信息,过滤注释语句
sed -e '/^#/d;/^$/d' /etc/salt/minion
主控端,和受控端 启动各自的服务,确保服务启动后没有任何报错信息,如果异常请检查相应日志文件处理
主控端: service salt-master restart
受控端: service salt-minion restart
如果一切顺利,请继续!
saltstack 主控端是依靠openssl证书来与受控端主机认证通讯的,受控端启动后会发送给主控端一个公钥证书文件,在主控端用 salt-key 命令来管理证书。
salt minion和master的认证过程:
minion在第一次启动时,会在/etc/salt/pki/minion/下自动生成minion.pem(private key), minion.pub(public key),然后将minion.pub发送给master
master在接收到minion的public key后,通过salt-key命令accept minion public key,这样在master的/etc/salt/pki/master/minions下的将会存放以minion id命名的public key, 然后master就能对minion发送指令了
salt-key -L
# 用来查看证书情况
salt-key -a
# 用来管理接受证书
受控端证书认证后会显示如下情形:
Accepted Keys:
ubuntu-server-001
Unaccepted Keys:
Rejected Keys:
主控端和被控端的证书默认都存放在 /etc/salt/pki/ 中,如果遇到证书不生效的情况下,可在主控端证书存放目录删除受控端证书,重新认证一下。
简单的测试
你可以从master 使用一个内置命令 test.ping 来测试他们之间的连接
salt '*' cmd.run test.ping
它应该有如下输出:
ubuntu-server-001:
测试与外网的连接
salt '*' cmd.run "ping -c "
salt更多命令及手册
salt '*' sys.doc
如果能返回正确结果,salt的基本配置就完成了。
salt的基本使用
salt按照操作模式可以分为实时管理和配置管理:
远程执行,也可以称为实时管理: 通过执行命令来完成管理任务,优点就是实时性高,缺点就是无法跟踪,保存配置状态; 配置管理,也可以称为状态管理: 通过编写特定的文件用来记录目标系统的配置状态,然后将这些受控主机会定期同步这些配置状态信息;
有时候我们需要临时的查看一台或多台机器上的某个文件,或者执行某个命令,最通用的模块是 cmd.run
基本操作命令通用格式
格式: 命令 对象 执行模块 参数
示例:salt '*' cmd.run "ping -c "
'*' target,操作对象,可以使用salt命令的扩展模式 -E -G 等
cmd.run func, 执行模块,函数
参数 args, 传递给 执行模块的参数,
salt也将一些常用的命令做了集成,比如,查看所有节点磁盘使用情况:
salt '*' disk.usage
其他命令示例:
salt '*' grains.ls
查看grains分类
salt '*' grains.items
查看grains所有信息
salt '*' grains.item osrelease 查看grains某个信息
salt '*' pillar.items
查看pillar所有信息
更多请参考文档:/ref/modules/all/index.html
作用:对minion进行分组
参考文档: /topics/targeting/nodegroups.html
编辑 /etc/salt/master 启用分组,最基本分组示例:
nodegroups:
UBUNTU: 'ubuntu-12.04-*'
CENTOS: 'centos-6.4-*'
建立分组之后,操作对象使用分组功能才生效,更多示例:
nodegroups:
group1: 'L@,, or bl*.'
group2: 'G@os:Debian and '
在state或者pillar中引用的时候,如下:
- match: nodegroup
- webserver
请确保这条属性存在
- match: nodegroup
更多请参考文档:/topics/targeting/nodegroups.html
从最基本的测试命令来讲述:
salt '*' test.ping
引号中以实现很强大的minion的过滤与匹配技术
salt 'shell正则' 命令
salt -E 'prel 正则' 命令
salt -L 'server_id1,server_id2,server_id3' 命令
salt -C 'webserv* and G@os:Debian or E@web-dc1-srv.*' test.ping
更多请参考官方文档: /topics/targeting/compound.html
配置管理,或称状态管理
个人理解,管理一个服务器应用可以从 软件包,配置文件,服务管理 这个三个最基本角度来出发,要启用配置管理,首先应对受控端进行额外的配置
配置受控端
配置受控端主机,以root用户身份来接受主控端主机的管理
编辑/etc/salt/minion
user: root
配置主控端,开启配置管理功能
Salt的配置管理指令和文件保存在默认在/srv/salt目录下,这里存放着所有的配置文件,和一些你想要拷贝到从服务器的文件。
配置主控端,编辑 /etc/salt/master 文件
file_roots:
- /srv/salt
手动创建目录和配置文件 /srv/salt/top.sls
/srv/salt/top.sls 为默认入口配置文件,这个配置项可以自定义,基本配置如下:
- ubuntu.vim
详细解释一下这个本配置文件的参数
base: 默认的的起点配置项:
'*': 这个引号内的是匹配对象,针对所有受控主机
ubuntu.vim 就是指资源文件/srv/salt/ubuntu/vim.sls
一个简单的例子:ubuntu 基本系统默是不安装 vim 我们可以利用配置管理把被托管的ubuntu主机全部安装上vim
编辑 /srv/salt/ubuntu/vim.sls
- name: vim
- installed
salt '*' state.highstate
请注意观察返回结果,查看/var/log/salt/下面的日志来调试saltstack配置。
稍微复杂的例子:管理ssh服务
一个更复杂的例子:管理ssh服务,并且使用salt托管配置文件
/srv/salt/top.sls 内容:
- ubuntu.ssh
/srv/salt/ubuntu/ssh.sls
- name: ssh
- installed
- name: ssh
- reload: True
- file: /etc/ssh/ssh_config
/etc/ssh/ssh_config:
file.managed:
- source: salt://ubuntu/ssh_config
- user: root
- group: root
- mode: 644
简要解释一下配置文件
pkg, service , file 这些都是salt的管理模块,pkg 是包管理模块; file是文件管理模块; service 是包服务管理模块
模块下一级是各个管理模块配置项的属性,以 service: 模块为例
name: ssh ubuntu下的服务脚本名称是 ssh
running 状态是持续运行,如果受控端配置了自动同步,每格一段时间就会对其状态进行检查
reload: True 是否重载服务
watch: 监视文件
最后两条属性的整体含义是如果配置文件 /etc/ssh/ssh_config 发生变化,服务重启更新
source: salt://ubuntu/ssh_config 托管的配置文件实际存储在 /srv/salt/ubuntu/ssh_config
同样,使用如下命令来验证结果需要
salt '*' state.highstate
二进制软件包
rpm deb 不同包管理体系,不同发行版二进制包拆分命名规则不尽相同,相比之下 deb 拆分的力度要更细些。
RHEL6/CentOS 软件包列表
salt-master
salt-minion
salt-cloud
Deian/Ubuntu 软件包列表
salt-master
salt-minion
salt-syndic
salt-common
salt-cloud
salt-cloud-doc
下面按照服务端(主控端)和客户端(受控端)来说明主要功能项。
主控端命令列表
/usr/bin/salt 主控命令
/usr/bin/salt-cp 批量复制文件
/usr/bin/salt-key 证书管理
/usr/bin/salt-master 服务端程序
/usr/bin/salt-run 管理虚拟机
/usr/bin/salt-ssh 管理ssh
/usr/bin/salt-syndic master分布式节点服务程序
受控端命令列表
/usr/bin/salt-call
/usr/bin/salt-minion 客户端程序
启用扩展配置文件目录
主控端 /etc/salt/master default_include: master.d/*.conf
受控端 /etc/salt/minion default_include: master.d/*.conf
测试与受控主机网络是否通畅 salt '*' cmd.run test.ping
在全部受控主机行执行命令 salt '*' cmd.run “uptime”
使用 -E 按照正则匹配操作对象 salt -E 'ubuntu*' cmd.run “uptime”
使用 -N 按照分组匹配操作对象 salt -N 'UBUNTU-GROUPS' cmd.run “uptime”
使用 -G 按照查询信息匹配操作对象选项 salt -G 'cpuarch:x86_64' grains.item num_cpus
查看受控端模块函数帮助信息 salt '*' sys.doc
查看受控端模块函数帮助信息 salt '*' sys.doc service
salt-master
启动服务 salt-master -d
查看证书 salt-key -L
接受指定的证书 salt-key -a KeyName
接受所有未认证的证书 salt-key -A
删除所有证书 salt-key -D
删除指定的证书 salt-key -d KeyName
*批量复制文件到受控主机
salt-cp '*' /home/vmdisk.img /var/lib/libvirtsh/vmdisk.img
*拷贝小文件很有效,简单测试,拷贝2.5MB以上的文件就会超时报错
salt-run 是用于管理虚拟机的命令
查询虚拟机信息 salt-run virt.hyper_info
查询虚拟机信息 salt-run virt.query
基于云镜像创建一个新的虚拟机 salt-run virt.init centos1 2 512 salt://centos.img salt-ssh 编辑配置文件 /etc/salt/roster ubuntu-12.04-001:
host: 10.8.0.18
user: root
passwd: root
sudo: True
简单的测试 salt-ssh '*' test.ping
测试执行命令 salt-ssh '*' -r “ifconfig -a”
salt-syndic
salt的master和minion的交互很大程度上都和网络有关系,比如在管理多个国家的机器的时候(比如大中华局域网),一个master控制多个master,同时被控制的master又可以控制很多的minion,就好比是在 master 和 minions 之间又加了一层的分布式架构。
salt-minion
salt-minion -d
内置模块列表
内置的状态模块的完整列表: /ref/states/all/index.html
内置的执行模块的完整列表: /ref/modules/all/index.html
http://netkiller.github.io/linux/management/saltstack/
/blog//saltxiang-guan-shi-yong/
.cn/article/42398
saltstack 可能由于比较新的缘故,版本之间支持的模块差异较大,建议最好主控端,受控端使用相同版本的软件包,比如ssh_auth模块从0.17.2版本才开始出现。
证书管理 ssh_auth salt 模块.优先处理 (已完成)
配置仓库,符号链接 (已完成)
salt配置仓库能否托管目录? (已完成)
一台机器是否属于多个组? (已完成)
salt 配置仓库 致命错误情况能否回滚? (已完成)
是否支持,配置模板 (已完成)
怎么支持自定义的模块 (部分)
如何输出给程序解析结果? (已完成)
如何针对 特例机器进行定义配置?
是否支持 lsattr 如何保证重要配置文件不轻易被更改
主机列表管理功能, 查询当前主机列表的托管状态
自动计划任务以及,以及远程执行结果跟踪分析,
细粒度的主机权限认证控制,(LDAP)
主机命名分组避免使用正则表达式
A: Salt配置仓库托管的配置文件是否支持符号链接?
Q: Salt配置仓库支持文件符号链接。
A: salt 配置仓库中配置项存在致命错误情况能否回滚?
Q: 主要保证受控端主机网络通畅,配置仓库结合svn版本控制工具,就可以实现回滚功能。
A: salt 是否支持测试执行?
Q: Salt支持执行测试,需要做的仅仅是将Test设置为True salt '' state.highstate -v test=True
A: salt 是否支持配置模板?
Q: Salt默认使用yaml_jinja渲染器,还支持其他渲染器,包括:yaml_mako,使用Mako模板引擎;yaml_wempy,使用Wempy模板引擎;py,直接使用Python写SLS文件;pydsl,建立在Python语法基础上的描述语言。
A: 如何输出给程序解析结果?
Q: salt 可以将执行结果是输出为json格式,yaml等格式,见salt PDF文档 756 页!例如: salt '*' test.ping --out json
state.show_highstate --out yaml
state.show_sls edit.vim --out pprint
更多开发者职位上
1)">1)">1" ng-class="{current:{{currentPage==page}}}" ng-repeat="page in pages"><li class='page' ng-if="(endIndex<li class='page next' ng-if="(currentPage
相关文章阅读}

我要回帖

更多关于 saltstack api优化 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信