设为首页 收藏本站
查看: 2145|回复: 0

[经验分享] Salt-API安装配置及使用

[复制链接]
累计签到:6 天
连续签到:1 天
发表于 2015-11-26 13:01:38 | 显示全部楼层 |阅读模式
Salt-API安装配置及使用
  SaltStack 官方提供有REST API格式的 salt-api 项目,将使Salt与第三方系统集成变得尤为简单。本文讲带你了解如何安装配置Salt-API,
如何利用Salt-API获取想要的信息。

前置阅读


  • salt-api手册
  • Salt External Authentication System

环境说明


  • 操作系统环境: CentOS 6.4,已配置EPEL源
  • Salt Master/Minion版本: 0.17.2, Master IP地址为 192.168.3, 用于本次测试的Minion ID为 minion-01.example.com

开工

Note
以下操作如非特别注明,均在Master上进行

安装Salt-API

Note
当前EPEL中的salt-api版本为0.8.2, 存在几处bug, 本文讲使用pip方式安装0.8.3版本

# 安装salt-api
pip install salt-api
# 下载服务维护脚本
wget https://raw.github.com/saltstack/salt-api/develop/pkg/rpm/salt-api -O /etc/init.d/salt-api
chmod +x /etc/init.d/salt-api
chkconfig salt-api on


配置Salt-API

生成自签名证书(用于ssl)

cd  /etc/pki/tls/certs
# 生成自签名证书, 过程中需要输入key密码及RDNs
make testcert
cd /etc/pki/tls/private/
# 解密key文件,生成无密码的key文件, 过程中需要输入key密码,该密码为之前生成证书时设置的密码
openssl rsa -in localhost.key -out localhost_nopass.key


Salt-API配置


  • 创建用于salt-api的用户

useradd -M -s /sbin/nologin pengyao
echo "pengyao_pass" | passwd pengyao —stdin


  • 配置eauth, /etc/salt/master.d/eauth.conf

external_auth:
pam:
pengyao:
- .*
- '@wheel'
- '@runner'


  • 配置Salt-API, /etc/salt/master.d/api.conf

rest_cherrypy:
port: 8000
ssl_crt: /etc/pki/tls/certs/localhost.crt
ssl_key: /etc/pki/tls/private/localhost_nopass.key


  • 启动Salt-API

service salt-api start


Salt-API使用


  • 测试工具为操作系统自带的 curl

Login


  • Request

curl -k https://192.168.38.10:8000/login -H "Accept: application/x-yaml" \
-d username='pengyao' \
-d password='pengyao_pass' \
-d eauth='pam'


  • Response

return:
- eauth: pam
expire: 1385579710.806725
perms:
- .*
start: 1385536510.8067241
token: 784ee23c63794576a50ca5d3d890eb71efb0de6f
user: pengyao

  其中 token 后边的串为认证成功后获取的token串,之后可以不用再次输入密码,直接使用本Token即可

查询Minion(minion-01.example.com)的信息


  • Request

curl -k https://192.168.38.10:8000/minions/minion-01.example.com \
-H "Accept: application/x-yaml" \
-H "X-Auth-Token: 8e211da5d6bbb51fbffe6468a3ca0c6a24b3e535"

  其中 X-Auth-Token 后边的串为之前Login获取到的Token串, 如果请求的URL不包含 minion-01.example.com ,则请求的为所有Minion的信息


  • Response

return:
- minion-01.example.com:
cpu_flags:
- fpu
- vme
- de
......


job管理

获取缓存的jobs列表


  • Request

curl -k https://192.168.38.10:8000/jobs/ \
-H "Accept: application/x-yaml" \
-H "X-Auth-Token: 8e211da5d6bbb51fbffe6468a3ca0c6a24b3e535"


  • Response

return:
- '20131127065003726179':
Arguments: []
Function: test.ping
Start Time: 2013, Nov 27 06:50:03.726179
Target: '*'
Target-type: glob
User: sudo_vagrant


查询指定的job


  • Request

curl -k https://192.168.38.10:8000/jobs/20131127065003726179 \
-H "Accept: application/x-yaml" \
-H "X-Auth-Token: 8e211da5d6bbb51fbffe6468a3ca0c6a24b3e535"


  • Response

return:
- minion-01.example.com: true


远程执行模块


  • Request

curl -k https://192.168.38.10:8000/ \
-H "Accept: application/x-yaml" \
-H "X-Auth-Token: 8e211da5d6bbb51fbffe6468a3ca0c6a24b3e535" \
-d client='local' \
-d tgt='*' \
-d fun='test.ping'

  也可以请求 https://192.168.38.10:8000/run ,不过该方法为一次性使用,无法使用Token, 只能使用username和password


  • Response:

return:
- minion-01.example.com: true


运行runner


  • Request

curl -k https://192.168.38.10:8000/ \
-H "Accept: application/x-yaml" \
-H "X-Auth-Token: 8e211da5d6bbb51fbffe6468a3ca0c6a24b3e535" \
-d client='runner' \
-d fun='manage.status'


  • Response

return:
- down: []
up:
- minion-01.example.com


运行wheel


  • 注意: 由于当前版本的Salt Master有一处bug, 导致wheel的结果无法返回(https://groups.google.com/forum/#!topic/salt-users/9HcZ6R7MB0g),官方在最新的代码中已经修复,使用时需要使用github中最新的salt代码
  • Request(例子为查询所有的minion key列表)

curl -k https://localhost:8000/ \
-H "Accept: application/x-yaml" \
-H "X-Auth-Token: 8e211da5d6bbb51fbffe6468a3ca0c6a24b3e535" \
-d client='wheel' \
-d fun='key.list_all'


  • Response

return:
- data:
_stamp: 2013-12-23_04:54:22.483159
fun: wheel.key.list_all
jid: '20131223045422481844'
return:
local:
- master.pem
- master.pub
minions:
- minion-01.example.com
minions_pre: []
minions_rejected: []
success: true
tag: salt/wheel/20131223045422481844
user: pengyao
tag: salt/wheel/20131223045422481844


Targeting
  谢谢 苦咖啡 提供
  如果想在api中使用salt的 Targeting 功能,可以在Request的Post Data中增加expr_form (默认是 glob )及值即可:
  依然以curl为例:

curl -k https://192.168.38.10:8000/ \
-H "Accept: application/x-yaml" \
-H "X-Auth-Token: 8e211da5d6bbb51fbffe6468a3ca0c6a24b3e535" \
-d client='local' \
-d tgt='webcluster' \
-d expr_form='nodegroup' \
-d fun='test.ping'

  将利用 nodegroup 匹配到名为 webcluster 的target。

总结
  Salt API几乎涵盖了所有的salt操作,功能强劲,尤其是需要salt和第三方系统集成的场景,值得拥有。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-143900-1-1.html 上篇帖子: 运维人员需要有产品观 下篇帖子: python&django开发与生产环境部署总结
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表