了解salt的execution模块、state模块及salt runners

目录
  1. salt的execution modules
  2. salt的state modules
  3. salt的runners

作者:杨冬 欢迎转载,也请保留这段声明。谢谢!
出处:https://andyyoung01.github.io/http://andyyoung01.16mb.com/

上篇学习了salt指定minions的方式,本篇了解一下salt中的各种模块,包括execution modules,state modules和salt runners。

salt模块是包含需要在minions上执行必要配置的参数和信息的实体。在salt中,主要有两种类型的模块:state模块和execution模块。下面就分别了解一下。

salt的execution modules

salt的执行模块可以在salt master上通过salt命令使用。完整的执行模块列表可以在http://docs.saltstack.com/en/latest/ref/modules/all找到。也可以通过内置在salt中的文档来查询其信息,这是通过sys.list_modules、sys.list_functions及sys.doc来实现的,使用方式如下:

[root@centos7-A ~]# salt 'stgdc1app01' sys.list_modules 
[root@centos7-A ~]# salt 'stgdc1app01' sys.list_functions cron
[root@centos7-A ~]# salt 'stgdc1app01' sys.doc cron.list_tab

也可以直接在minions上通过salt-call命令直接使用上述命令而不用指定target。上面几个指令可以直接在命令行得到模块的使用帮助而不用另外查找网页,非常方便。
其实在前面的文章中,我们早已使用到了执行模块,例如test.ping,pillar.items等,只是没有提到这个概念而已。现在就可以通过上面的命令来查看这些模块的详细用法。

salt的state modules

salt的state模块是通过创建正确的目录结构并且在目录中创建正确的文件而配置的。完整的state模块列表可以在http://docs.saltstack.com/en/latest/ref/states/all找到。类似的,state模块也可以通过内置在salt中的文档来查询其信息。主要是通过sys.list_state_modules、sys.list_state_functions及sys.state_doc实现的,下面使用salt-call命令而不是上面的salt命令为例:

[root@centos7-B ~]# salt-call sys.list_state_modules
[root@centos7-B ~]# salt-call sys.list_state_functions cron
[root@centos7-B ~]# salt-call sys.state_doc cron.present

前面也已经使用过了state模块,例如user.present等,可以通过上面几个命令查询其详细用法。
另外,有另外一种将state应用到minion上的方式,称为highstate,这是通过配置完state后,再添加一个top.sls文件到相应的环境中,然后在此文件中指定要应用到的minions匹配模式和state的列表来实现的。前面这种方式也使用过,通过state.highstate执行模块来执行。

salt的runners

salt runners是在salt master上运行的用来获取关于环境、minions、任务、状态以及其它一些详细信息的实用工具。命令salt-run用来执行salt runners。完整的salt runners列表可以在http://docs.saltstack.com/en/latest/ref/runners/all/index.html#all-salt-runners找到,也可以通过salt-run doc.runner来从命令行得到runners的帮助文档。如果要查看某个runner的文档,可以使用salt-run -d module_name来查看。比较常用的runners包括manage和jobs等。
Runners就是一些Python脚本和定义在脚本中的函数。自定义的runners可以通过修改一些参数来添加到salt中。下面来看几个具体使用runners的例子:

[root@centos7-A ~]# salt-run manage.status
down:
up:
    - stgdc1app01
    - stgdc2app01
[root@centos7-A ~]# salt -vv 'stgdc1app01' grains.item server_type
Executing job with jid 20161018010803516281
-------------------------------------------

stgdc1app01:
    ----------
    server_type:
        webserver
[root@centos7-A ~]# salt-run jobs.lookup_jid 20161018010803516281
stgdc1app01:
    ----------
    server_type:
        webserver
[root@centos7-A ~]# salt-run jobs.print_job 20161018010803516281
20161018010803516281:
    ----------
    Arguments:
        - server_type
    Function:
        grains.item
    Minions:
        - stgdc1app01
    Result:
        ----------
        stgdc1app01:
            ----------
            return:
                ----------
                server_type:
                    webserver
    StartTime:
        2016, Oct 18 01:08:03.516281
    Target:
        stgdc1app01
    Target-type:
        glob
    User:
        sudo_yangdong
[root@centos7-A ~]# salt-run jobs.list_jobs
...

第1个命令使用了manage.status的runner,来列出所有的minions的状态。
第2个命令通过-vv命令行参数,显示出了salt命令的job ID。
第3个命令通过job ID查找到了该命令的历史记录,它输出当时命令执行完毕后的输出记录。
第4个命令输出了关于该job的更加详细的信息。
最后一个命令列出了执行过所有job的详细信息。

本篇学习了salt中的execution modules、state modules及runners。如果你查看过关于它们的文档,会发现有很大数量的模块和runners,可以在使用到某个模块时根据本篇给出的输出文档命令来查看其帮助文件,边用边学。下篇我们给出一个综合应用salt state的示例,并学习一下state中的require和watch关键字。