RUNNERS
Salt runners是使用salt-run命令执行的便捷应用程序。
Salt runners与Salt执行模块的工作方式类似,但是它们需要在Salt master节点本身而不是远程在Salt minions上执行。
Salt runner可以是简单的客户调用,也可以是复杂的应用程序。
可以查看一份完整的runner模块列表,以了解更多runner知识
WRITING SALT RUNNERS
Salt runner程序以类似于Salt执行模块的方式编写。 两者都是包含函数的Python模块,每个公共函数都是一个可以通过salt-run命令执行的runner。
例如,如果在runners目录中创建了名为test.py
的Python模块并包含一个名为foo
的函数,则可以使用以下命令调用测试runner运行器:
# salt-run test.foo
Runner有几种控制输出的选择。
Runner中的任何打印语句也会自动触发到master事件总线上。 例如:
def a_runner(outputter=None, display_progress=False):
print('Hello world')
...
上面的打印操作将会触发下面的事件:
Event fired at Tue Jan 13 15:26:45 2015
*************************
Tag: salt/run/20150113152644070246/print
Data:
{'_stamp': '2015-01-13T15:26:45.078707',
'data': 'hello',
'outputter': 'pprint'}
Runner还可以发送进度事件,该进度事件在runner执行期间显示给用户,并且如果runner的display_progress
参数设置为True,则也通过事件总线传递。
自定义runner可以使用__jid_event_.fire_event()
方法发送自己的progress事件,如下所示:
if display_progress:
__jid_event__.fire_event({'message': 'A progress message'}, 'progress')
以上将在控制台上产生输出:A progress message
,以及事件总线上的事件消息类似于下面:
Event fired at Tue Jan 13 15:21:20 2015
*************************
Tag: salt/run/20150113152118341421/progress
Data:
{'_stamp': '2015-01-13T15:21:20.390053',
'message': "A progress message"}
Runner可以使用相同的方法将具有自定义标签的事件发送到事件总线上,方法是将第二个参数(progress
)替换为所需的任何标记。 但是,这不会显示在命令行中,只会触发到事件总线上。
SYNCHRONOUS VS. ASYNCHRONOUS
可以异步执行一个runner程序,这将立即返回控制。 在这种情况下,如果从命令行使用salt-run,则不会向用户显示任何输出。 如果以编程方式使用,则不会返回任何结果。 如果需要结果,则必须通过从runner在事件总线上触发事件然后观察它们或通过其他方式来收集它们。
注意:在异步模式下运行运行程序时,
--progress
标志不会将输出传递给salt运行的CLI。 但是,仍然会在总线上触发进度事件。
在同步模式(默认情况下),在runner完成执行之前,不会返回控制。
要添加自定义runners程序,请将它们放在目录中并将其添加到master配置文件中的runner_dirs。
例子
Runer的例子可以在Salt发行版本中找到:
https://github.com/saltstack/salt/blob/develop/salt/runners
一个简单的tunner,返回一个格式化的响应Salt调用的minions列表,如下所示:
# Import salt modules
import salt.client
def up():
'''
Print a list of all of the minions that are up
'''
client = salt.client.LocalClient(__opts__['conf_file'])
minions = client.cmd('*', 'test.version', timeout=1)
for minion in sorted(minions):
print minion
SALT ENGINES
New in version 2015.8.0.
Salt Engines,是长期运行的外部系统流程,其可以按需利用Salt。
- 引擎可以访问Salt配置、执行模块和runners程序(
__opts __
,__salt__
和__runners__
)。 - 引擎在由Salt监视的单独进程中执行。 如果Salt引擎停止,它将自动重启。
- 引擎可以在Salt master和Salt minions上运行。
Salt引擎增强并取代了外部流程功能。
配置Salt引擎
Salt引擎配置在Salt master或Salt minion配置中的engines
顶级部分下。 下面是一部分的引擎和参数列表配置示例。
engines:
- logstash:
host: log.my_network.com
port: 5959
proto: tcp
Salt引擎必须位于Salt路径中,或者你也可以在Salt master配置中添加engines_dirs
选项,指定Salt尝试查找Salt引擎的目录列表。 此选项应格式化为要搜索的目录列表,例如:
engines_dirs:
- /home/bob/engines
WRITING AN ENGINE
一个Salt engine的配置示例, https://github.com/saltstack/salt/blob/develop/salt/engines/test.py, 可以从Salt source代码中获取。定制开发自己的Salt engine, 唯一的要求是实现一个start()
函数。