我是一个在北京互联网厂子里996的程序员,一边学习追赶新技术,怕被潮流甩下掉队,一边学习投资理财方法,让自己的薪水滚雪球。我相信,越努力越幸运,虽然刚开始雪球滚起来很慢,但是只要坚持下去,它就会越滚越快,自己的养老就靠它了。在财富自由的道路上,我与你共勉。欢迎来评论区与我交流心得和干货,这样我们就可以收获更多。
# 背景
源码路径在
`https://github.com/saltstack/salt.git`中`/salt/netapi/rest_tornado`
## 作用
通过net-api可以调用saltstack的服务, 包括执行master上的runner模块和给minion下发命令.
## 测试用例执行指令方法为
1. 验证, 获取token
2. 发送指令
测试环境
- salt-master为 'master'
- salt-client为 'windows-client' , 'linux-client'
curl的测试模式为
```
[root@puppet pushguidepuppet]# curl -si localhost/login
-H "Accept: application/json"
-d username='salt'
-d password='eAwCwXTpqoARrSxY'
-d eauth='pam' -v
```
正常返回消息为:
```
{"return": [{"perms": ["@runner"], "start": 1433923934.308167,
"token": "a2b545d7b9147bb2880c6c1f533ed313", "expire": 1433967134.308168,
"user": "salt", "eauth": "pam"}]}
```
获取其中的token作为下次接口调用的参数上传.
curl测试为
```
curl -si "localhost/run" -H "Accept: application/json"
-d "token=a2b545d7b9147bb2880c6c1f533ed313"
-v -d "client=runner" -d "fun=jobs.list_jobs"
```
整个测试不需要发布任务成功, 能调用 jobs.list_jobs 成功就行, 就可以验证api生效.
# 启动脚本启动命令
`/salt/pkg/rpm/salt-api` or `/etc/init.d/salt-api`
`daemon --pidfile=/var/run/salt-api.pid --check salt-api /usr/bin/salt-api -d`
其他启动参数
# salt-api --help
# 代码入口
入口代码为
/salt/scripts/salt-api (/usr/bin/salt-api)
->
/salt/salt/scripts.py
->
/salt/salt/cli/api.py
SaltAPI.setup_config() 寻找/etc/salt/master文件进行配置设置
->
/salt/salt/config.py
api_config() -> client_config()
->
SaltAPI.run():
- parse_args()
- /salt/salt/utils/parsers.py LogLevelMixIn.setup_logfile_logger()
->
/salt/salt/client/netapi.py NetapiClient
self.process_manager = ProcessManager()
self.netapi -> /salt/salt/loader.py LazyLoader : load rest_tornado模块
self.process_manager.run()
进入tornado
/salt/salt/netapi/rest_tornado/__init__.py
start()
```
paths = [
(r"/", saltnado.SaltAPIHandler),
(r"/login", saltnado.SaltAuthHandler),
(r"/minions/(.*)", saltnado.MinionSaltAPIHandler),
(r"/minions", saltnado.MinionSaltAPIHandler),
(r"/jobs/(.*)", saltnado.JobsSaltAPIHandler),
(r"/jobs", saltnado.JobsSaltAPIHandler),
(r"/run", saltnado.RunSaltAPIHandler),
(r"/events", saltnado.EventsSaltAPIHandler),
(r"/hook(/.*)?", saltnado.WebhookSaltAPIHandler),
]
```
根据不同的url匹配到不同的类去处理.
# 参考资料- [salt net-api源代码](https://github.com/saltstack/salt.git)
好了,今天的分享就到这里。 如果大家觉得我的分享对你有用,还请点一点关注,在评论区跟我交流,我会持续分享一些有用的知识点和心得。
Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved