SaltStack源码解析 — salt ‘*’ test.ping执行过程

前言

 

本文我们来学习salt ‘*’ test.ping命令实现的整个过程,涉及的组件比较多,将有助于更进一步了解SaltStack的运行机制。

 

总体概述

 

salt ‘*’ test.ping涉及的组件比较多,包括Master Req Server,Master Publisher,Minion,Master EventPubliser等,现在概要地介绍下整个实现流程:

  • 1、在salt-master机器执行salt ‘*’ test.ping命令;
  • 2、salt向Master Req Server发送带publish命令的消息;
  • 3、Master Req Server收到消息后向publish_pull.ipc push消息;
  • 4、Master Publisher向Minion Publish消息;
  • 5、Minion收到消息后启动一个新进程来执行消息中fun指定的函数;
  • 6、函数执行完成后,返回结果给Master Req Server;
  • 7、Master Req Server把结果push给Master EventPublisher;
  • 8、这时因为salt客户端订阅了Master EventPublisher,将收到返回结果,之后直接输出到终端。整个流程结束。

 

活动图

 

为了更清楚了解整个流程,下面是活动图:
源码解析

 

salt ‘*’ test.ping函数调用图

 

源码解析

 

Master Req Server处理salt test.ping消息函数调用图

 

源码解析

 

Minion处理Master Pub消息函数调用图

 

源码解析

 

Master Req Server处理Minion数据返回函数调用图

 

源码解析

SaltStack源码解析 — Master与Minion认证过程

前言

 

在Minion进程启动的时候,先会连接Master的Req Server请求认证,直到认证成功才会继续。下面我们分析其认证过程。

 

总体概述

 

  • 1、完成Minion进程启动前,Minon向Master Req Server发送cmd为_auth的payload消息;
  • 2、Master Req Server收到Minion的消息后,使用_auth方法执行认证处理;
  • 3、开始对key文件作如下判断,如果key在minions_rejected目录,则拒绝连接;如果key在minions目录,验证pub key是否相等,如果不相等,加入到minions_denied;如果key不在minions_pre目录,则把key写入到minions_pre目录;如果minions_pre不存在,如果pub key验证不通过,加入到minions_denied目录。

 

minion认证请求过程活动图

 

源码解析

 

minion发送认证请求函数调用图

 

源码解析

 

master处理minion验证请求函数调用图

 

源码解析

SaltStack源码解析 — salt-minion启动过程

功能介绍

 

salt-minion负责接收salt-master的消息,执行相应的指令。

 

环境介绍

 

  • 系统:CentOS-7
  • python版本:2.7.5
  • saltstack版本:2015.5.2 (Lithium)

 

场景描述

 

本节分析salt-minion启动过程,我们使用如下命令启动salt-minion:

  1. /usr/bin/salt-minion -d

 

总体分析

 

salt-minion启动过程总体分析如下:
1、使用parsers.MinionOptionParser类解析命令行参数及配置文件,此类继承了MasterOptionParser类,与salt-master解析过程差不多;
2、加载必要的模块,如grains,pillar;
3、开始连接salt-master的Req Server,评估与master的验证状态,如果master没有把minion的key加入信任列表,minion则循环验证直到验证通过;
4、发送消息通过master,minion已启动;
5、订阅salt-master pub服务器。

 

详细分析

 

函数调用流程图

 

源码解析

 

核心类功能介绍

 

类关系图

源码解析

MinionOptionParser类

MinionOptionParser类继承了MasterOptionParser,覆盖了MasterOptionParser的setup_config方法,改为由之前的master配置文件为minion配置文件。MasterOptionParser的讲解可以参考SaltStack源码解析 — salt-master启动过程

 

Minion类

这个应该算是比较重要的类了,包括了与master通信的所有方法。比如_do_socket_recv,负责接收master pub信息;_do_event_poll,负责处理事件;authenticate负责处理与master的验证。