当第一次试用salt时,它并不总是清楚所有的模块组件在哪儿以及它们做什么。salt比通常使用者所知道的有更多的系统模块,这使salt能够在很多地方非常容易的进行扩展。
最常用的系统模块是执行模块和states。但是系统模块的扩展远远超出了那些相对容易了解的组件,它被常用来加入salt使整个系统更加灵活。
执行模块弥补了salt的核心功能被用来与客户端系统进行交互。执行模块创建了被用于所有salt系统的核心系统管理库,包含states,它可以和minion系统进行交互。
执行模块在到执行结束过程是完全打开的。它们常用来处理来自一个minion的任何请求,从安装一个软件包到检查系统参数信息。在执行模块中唯一的约束是定义一个默认函数常常用来返回一个JSON序列化的对象。
关于内置的执行模块列表,请点击:doc:here </ref/modules/all/index>`
关于如何自定义执行模块的信息,请看:doc:this page </ref/modules/index>`.
Sometimes debugging with print()
and extra logs sprinkled everywhere is not
the best strategy.
IPython is a helpful debug tool that has an interactive python environment which can be embedded in python programs.
First the system will require IPython to be installed.
# Debian
apt-get install ipython
# Arch Linux
pacman -Syu ipython2
# RHEL/CentOS (via EPEL)
yum install python-ipython
Now, in the troubling python module, add the following line at a location where the debugger should be started:
test = 'test123'
import IPython; IPython.embed_kernel()
After running a Salt command that hits that line, the following will show up in the log file:
[CRITICAL] To connect another client to this kernel, use:
[IPKernelApp] --existing kernel-31271.json
Now on the system that invoked embed_kernel
, run the following command from
a shell:
# NOTE: use ipython2 instead of ipython for Arch Linux
ipython console --existing
This provides a console that has access to all the vars and functions, and even supports tab-completion.
print(test)
test123
To exit IPython and continue running Salt, press Ctrl-d
to logout.
state modules 常常被salt states 用来定义状态接口。这些模块是有限制性的,它们要正常使用必须要遵守一些规则。
注解
state modules 在sls文件中定义了可用的范例。如果需要直接调用执行模块,需要在module state中查找。
授权模块系统非常容易的允许外部的验证程序加入到salt中。auth功能的实现需要一个auth模块的要求来满足。使用“pam”模块作为一个范例。
文件服务器模块系统常常被salt master用来创建文件服务器的备份。这些模块需要用于在文件服务器中子系统的功能来实现。使用“gitfs(礼物)”模块为例。
Grain 模块定义额外的程序来扩展grains 数据。所有已定义的公共函数将用来执行并必须返回一个python的dict对象。这个dict参数加入到grins中提供给minion。
输出模块提供输出系统的程序在终端显示数据。这个模块是非常简单并且仅仅要求‘输出’函数来执行。默认系统的输出程序是"nested内嵌的"模块。
用于定义外部可选的pillar系统。pillar通过文件系统的生成传递到外部的pillars。这对pillar来说常常用来作为一个桥梁来写入数据库,但也作为后端到libvirt状态来生成和标识libvirt证书在运行。
Renderers是用来渲染sls文件到salt highdata的状态编译器所使用的系统。他们可以像渲染“PY”一样简单,同样也可以像“stateconf”和“pyDSL”一样复杂。
返回器常用来发送数据从minions到外部的源,常常是数据库。一个完整的返回器将实现所有的例程来支持作为一个额外的工作缓存。使用“redis”返回器作为一个范例。
Runners are purely master-side execution sequences.
Tops模块常用来为系统状态来转换外部数据源到top文件数据。
Wheel系统常用来管理master端的管理程序。这些程序是主要用来启用master的配置为API做准备。