Introduction to netapi modules - netapi模块介绍
您也可以参考在Github上维护的这一份技术资料:SaltStack netapi模块开发指南
netapi
模块提供了以API为中心的对Salt的访问支持。 通常是面向外部的服务调用,例如REST或WebSockets,XMPP,XMLRPC等。
通常,netapi
模块绑定到一个端口并启动服务,对外部应用提供Salt管理服务。 可以单个模块运行,也可以同时运行多个模块。
通过将配置添加到Salt Master配置文件中,然后启动salt-api
守护程序来启用netapi
模块。 在使用前请检查每个模块的文档以查看外部依赖要求和配置设置。
与Salt和Salt 周边卫星项目的通信是使用Salt自己的Python API完成的。 可用客户端接口的列表如下。
salt-api
在Salt的2014.7.0发行版之前,
netapi
模块存在于单独的姊妹项目salt-api
中。 目前,该项目已合并到Salt项目的主干分支中。
Client interfaces - 客户端接口
Salt的客户端接口通过制作映射到函数参数的值的字典来对外暴露可执行的功能函数。 这允许仅通过创建数据结构来调用函数。 (而这也正是Salt自己内部的工作方式!)
class salt.netapi.NetapiClient(opts)
提供一种以low-data数据结构形式访问Salt中各种客户端接口的统一方法。 例如:
>>> client = NetapiClient(__opts__)
>>> lowstate = {'client': 'local', 'tgt': '*', 'fun': 'test.ping', 'arg': ''}
>>> client.run(lowstate)
HTTP Modules
本教程演示了Salt中可用的各种HTTP模块,它们分布于多个其它的Salt核心功能模块里。 这些模块通过包装Python tornado
,urllib2
和requests
库,以使用与Salt工作流更一致的方式扩展它们。
Writing netapi modules
简单地说,netapi
模块绑定一个服务端口并启动服务。 它们是开放式的,可以用来为Salt提供各种外部接口,甚至可以同时提供多个接口。
CONFIGURATION
所有netapi
配置均在Salt master配置中完成,并采用类似于以下的形式:
rest_cherrypy:
port: 8000
debug: True
ssl_crt: /etc/pki/tls/certs/localhost.crt
ssl_key: /etc/pki/tls/certs/localhost.key
THE __VIRTUAL__ FUNCTION
与Salt中的所有模块类型一样,netapi
模块会通过Salt的加载程序接口来确定是否应将其加载到内存中然后执行。
模块中的__virtual__
函数进行此确定,并应返回False
或将用作模块名称的字符串。 如果模块引发ImportError
或任何其他错误,则将不会加载该模块。
THE START FUNCTION
将为每个已加载的netapi
模块调用start()
函数。 此函数应包含实际启动服务的代码。 这是使用multiprocess多进程启动的。
MULTIPLE INSTANCES
New in version 2016.11.0.
rest_cherrypy
和rest_tornado
支持通过复制和重命名实例的整个目录来运行多个实例。 要启动复制出来的多个netapi
模块,请在Salt Master配置中为复制得到的netapi
模块添加相应的配置块。 每个添加的配置块的名称必须与复制得到的netapi
模块的每个目录的名称匹配。
INLINE DOCUMENTATION
与Salt的其余部分一样,最佳实践是在netapi
模块中的类、方法和函数上添加适当的注释说明。
LOADER “MAGIC” METHODS
Salt加载器使得netapi模块中的任意函数都可以访问到 __opts__
配置数据。