SaltStack Runners 运行器以及Salt Engines引擎使用说明

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() 函数。

猜你喜欢

转载自blog.csdn.net/watermelonbig/article/details/91355453