DevOps干货:Saltstack netapi源码分析

DevOps干货:Saltstack netapi源码分析

首页模拟经营minion谷更新时间:2024-04-26

我是一个在北京互联网厂子里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