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

[Cloudstack] SaltStack源码解析一

[复制链接]

尚未签到

发表于 2015-10-14 08:31:02 | 显示全部楼层 |阅读模式
  本文从sal命令行命令执行的角度,剖析一下saltstack的运行过程。代码分析过程结合运行日志进行解析。


  命令执行过程
  在终端输入salt '*' cmd.run ls命令
  

#salt "*" cmd.run ls
cloudstack-agent_4.2.0_all.deb
cloudstack-common_4.2.0_all.deb
zmq

  我们看一下salt master的输出日志
  
2014-01-03 14:28:36,087 [master.py] [_handle_clear] [640] [master] [-1221166336] [MainThread] [salt.master      ][INFO    ] Clear payload received with command publish

2014-01-03 14:28:36,497 [master.py] [publish] [2520] [master] [-1221166336] [MainThread] [salt.master      ][INFO    ] User root Published command cmd.run with jid 20140103142836087085

2014-01-03 14:28:36,499 [master.py] [publish] [2530] [master] [-1221166336] [MainThread] [salt.master      ][DEBUG   ] Published command details {'tgt_type': 'glob', 'jid': '20140103142836087085', 'tgt': 'stack', 'ret': '', 'user': 'root', 'arg': ['ls'], 'fun':
'cmd.run'}

2014-01-03 14:28:38,617 [master.py] [_handle_aes] [664] [master] [-1221166336] [MainThread] [salt.master      ][INFO    ] AES payload received with command _return

2014-01-03 14:28:38,622 [master.py] [_return] [1236] [master] [-1221166336] [MainThread] [salt.master      ][INFO    ] Got return from stack for job 20140103142836087085

2014-01-03 14:28:39,201 [master.py] [_handle_clear] [640] [master] [-1221166336] [MainThread] [salt.master      ][INFO    ] Clear payload received with command _auth

2014-01-03 14:28:39,203 [verify.py] [check_max_open_files] [392] [verify] [-1221166336] [MainThread] [salt.utils.verify][DEBUG   ] This salt-master instance has accepted 1 minion keys.

2014-01-03 14:28:39,205 [master.py] [_auth] [1795] [master] [-1221166336] [MainThread] [salt.master      ][INFO    ] Authentication request from stack

2014-01-03 14:28:39,208 [master.py] [_auth] [1922] [master] [-1221166336] [MainThread] [salt.master      ][INFO    ] Authentication accepted from stack

2014-01-03 14:28:40,371 [master.py] [_handle_aes] [664] [master] [-1221166336] [MainThread] [salt.master      ][INFO    ] AES payload received with command _return

2014-01-03 14:28:40,374 [master.py] [_return] [1236] [master] [-1221166336] [MainThread] [salt.master      ][INFO    ] Got return from stack for job 20140103142836087085



  看一下客户端minion的运行日志
  
2014-01-03 14:28:36,522 [minion.py] [_handle_aes] [612] [minion] [-1221879040] [MainThread] [salt.minion      ][INFO    ] User root Executing command cmd.run with jid 20140103142836087085

2014-01-03 14:28:36,527 [minion.py] [_handle_aes] [618] [minion] [-1221879040] [MainThread] [salt.minion      ][DEBUG   ] Command details {'tgt_type': 'glob', 'jid': '20140103142836087085', 'tgt': 'stack', 'ret': '', 'user': 'root', 'arg': ['ls'], 'fun': 'cmd.run'}

2014-01-03 14:28:37,790 [minion.py] [parse_args_and_kwargs] [165] [minion] [-1221879040] [MainThread] [salt.minion      ][DEBUG   ] Parsed args: ['ls']

2014-01-03 14:28:37,842 [minion.py] [parse_args_and_kwargs] [166] [minion] [-1221879040] [MainThread] [salt.minion      ][DEBUG   ] Parsed kwargs: {'__pub_user': 'root', '__pub_arg': ['ls'], '__pub_fun': 'cmd.run', '__pub_jid': '20140103142836087085', '__pub_tgt':
'stack', '__pub_tgt_type': 'glob', '__pub_ret': ''}

2014-01-03 14:28:37,913 [cmdmod.py] [_run] [283] [cmdmod] [-1221879040] [MainThread] [salt.loaded.int.module.cmdmod][INFO    ] Executing command 'ls' in directory '/root'

2014-01-03 14:28:38,607 [cmdmod.py] [run] [501] [cmdmod] [-1221879040] [MainThread] [salt.loaded.int.module.cmdmod][DEBUG   ] output: cloudstack-agent_4.2.0_all.deb

cloudstack-common_4.2.0_all.deb

zmq

2014-01-03 14:28:38,610 [minion.py] [_return_pub] [828] [minion] [-1221879040] [MainThread] [salt.minion      ][INFO    ] Returning information for job: 20140103142836087085



  执行过程解析
  1. Salt stack的Master与Minion之间通过ZeroMq进行消息传递,使用了ZeroMq的发布-订阅模式,连接方式包括tcp,ipc
  2. salt命令,将cmd.run ls命令从salt.client.LocalClient.cmd_cli发布到master,获取一个Jodid,根据jobid获取命令执行结果。
  3. master接收到命令后,将要执行的命令发送给客户端minion。
  4. minion从消息总线上接收到要处理的命令,交给minion._handle_aes处理
  5. minion._handle_aes发起一个本地线程调用cmdmod执行ls命令。线程执行完ls后,调用minion._return_pub方法,将执行结果通过消息总线返回给master
  6. master接收到客户端返回的结果,调用master._handle_aes方法,将结果写的文件中
  7.
salt
.client.LocalClient.cmd_cli通过轮询获取Job执行结果,将结果输出到终端。
  


  心得:
  1. Salt master和minion之间通过zeromq进行通信,传递消息。阅读salt源码,需要了解zeromq的使用方法
  2. salt都使用了zeromq的pub-sub模式,req-rep模式
  3. salt 使用了tcp,ipc的通信模式
  



版权声明:本文为博主原创文章,未经博主允许不得转载。

运维网声明 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-126448-1-1.html 上篇帖子: 如何为centos配置一个新的yum 下篇帖子: 专访许鹏:谈C程序员修养及大型项目源码阅读与学习
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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