zoukankan      html  css  js  c++  java
  • PYTHON CLIENT API

    salt提供了与Python应用程序接口的几个入口点,这些入口点通常被称为* client() API。每个客户端访问的salt的不同部分,无论是从master或minion,每个客户端详细如下:

    1、以编程的方式访问salt
    2、salt可以用于CLI脚本,也可以通过REST接口使用。
    3、盐的 outputter system从salt为JSON检索结构化数据,或为shell友好的文本,或许多其他格式。
    4、看state.event,salt的事件系统
    5、salt netapi模块提供了访问salt扩展的外部REST接口


    SALT'S OPTS DICTIONARY

    一些客户端需要访问salt opts字典,这个字典包含了master或minion端的配置

    salt.config.client_config(path, env_var='SALT_CLIENT_CONFIG', defaults=None)
    加载master端的配置
    示例

    1 import salt.config
    2 master_opts = salt.config.client_config('/etc/salt/master'

    salt.config.minion_config(path, env_var='SALT_MINION_CONFIG', defaults=None, cache_minion_id=False)
    加载minion端的配置,在minion端操作
    示例:

    1 import salt.client
    2 minion_opts = salt.config.minion_config('/etc/salt/minion')

    SALT'S LOADER INTERFACE

    salt loader 接口
    salt生态系统中的模块使用自定义加载系统加载到内存中。这允许模块有条件的(OS、OS版本、已安装的库等)允许salt注入特殊变量,每一个模块类型都应该有相应的加载函数

    salt.loader.minion_mods(opts, context=None, utils=None, whitelist=None, include_errors=False, initial_load=False, loaded_base_name=None, notify=False, static_modules=None, proxy=None)
    加载执行模块,通过评估每个模块中的__virtual __()函数来返回适用于当前系统的执行模块的字典。
    参数:

      opts (dict) --salt配置选项的一个字典
      context (dict) --应该在__context__中生成的模块中存在的salt上下文
      utils (dict) -- Utility functions which should be made available to Salt modules in __utils__. See utils_dir in salt.config for additional information about configuration.
      whitelist (list) -- A list of modules which should be whitelisted.
      include_errors (bool) -- Deprecated flag! Unused.
      initial_load (bool) -- Deprecated flag! Unused.
      loaded_base_name (str) -- A string marker for the loaded base name.
      notify (bool) -- Flag indicating that an event should be fired upon completion of module loading.

    示例:

    1 import salt.config
    2 import salt.loader
    3 
    4 __opts__ = salt.config.minion_config('/etc/salt/minion')
    5 __grains__ = salt.loader.grains(__opts__)
    6 __opts__['grains'] = __grains__
    7 __salt__ = salt.loader.minion_mods(__opts__)    #获取执行模块函数的字典
    8 __salt__['test.ping']()

    salt.loader.raw_mod(opts, name, functions, mod='modules')
    返回单一的模块,绕过__virtual__函数
    示例:

    1 import salt.config
    2 import salt.loader
    3 
    4 __opts__ = salt.config.minion_config('/etc/salt/minion')
    5 testmod = salt.loader.raw_mod(__opts__, 'test', None)
    6 testmod['test.ping']()

    salt.loader.states(opts, functions, utils, serializers, whitelist=None)
    返回states模块
    示例:

    1 import salt.config
    2 import salt.loader
    3 
    4 __opts__ = salt.config.minion_config('/etc/salt/minion')
    5 statemods = salt.loader.states(__opts__, None, None, None)

    salt.loader.grains(opts, force_refresh=False, proxy=None)
    返回动态或静态的grains的值
    示例:

    1 import salt.config
    2 import salt.loader
    3 
    4 __opts__ = salt.config.minion_config('/etc/salt/minion')
    5 __grains__ = salt.loader.grains(__opts__)
    6 print __grains__['id']

    salt.loader.grain_funcs(opts)
    返回grains函数
    示例:

    1 import salt.config
    2 import salt.loader
    3 
    4 __opts__ = salt.config.minion_config('/etc/salt/minion')
    5 grainfuncs = salt.loader.grain_funcs(__opts__)

    SALT'S CLIENT INTERFACES

    class salt.client.LocalClient(c_path='/etc/salt/master', mopts=None, skip_perm_errors=False, io_loop=None)
    这个接口作为master端salt命令行接口的一个工具
    LocalClient被用于发送一个命令到salt minion执行,并返回一个结果到salt master。
    进口和使用localclient必须在同一台机器做为salt master,它必须使用与salt master运行的相同用户完成,除非external_auth有相关的配置。
    示例:

    1 import salt.client
    2 
    3 local = salt.client.LocalClient()
    4 local.cmd('*', 'test.fib', [10])

    LocalClient的相关函数的使用方法;

    cmd(tgt, fun, arg=(), timeout=None, expr_form='glob', ret='', jid='', kwarg=None, **kwargs)
    cmd设置的timeout值为等待最后一个minion返回结果后等待的时间

    1 local.cmd('*', 'cmd.run', ['whoami'])
    2 {'jerry': 'root'}

    带参数的用法:
    local.cmd('*', 'test.arg', ['arg1', 'arg2'], kwarg={'foo': 'bar'})
    复合命令可以用于单个发布中的多次执行。函数名和函数参数在单独的列表中提供,但是索引值必须关联,如果不需要参数,则必须使用空列表。
    示例:

     1  local.cmd('*', [
     2         'grains.items',
     3         'sys.doc',
     4         'cmd.run',
     5     ],
     6     [
     7         [],
     8         [],
     9         ['uptime'],
    10     ])

    用法介绍:

      tgt (string or list): 选择被执行minion的标记,如果是组的话使用expr_form选项
      fun (string or list of strings) :指定执行的功能模块,可以使用复合命令
      arg (list or list-of-lists): 执行模块使用的参数,复合命令需要执行一个参数列表
      timeout : 指定超时时间,在所有minion返回之前等待的超时时间,并不是指命令执行的超时时间
      expr_form: 指定tgt的类型,可以为以下值:
      glob - Bash glob completion - Default
      pcre - Perl 样式的正则表达式
      list - 指定为主机列表
      grain - 匹配minion端的grains变量
      grain_pcre - 基于正则的匹配minion端的grains变量
      pillar - Pillar data comparison
      pillar_pcre - Pillar data comparison with a regex
      nodegroup - 使用nodegroup信息
        range - 指定一个服务器范围
      compound - Pass a compound match string
      ret: 不理解,有点像设置返回值的意思
      kwarg : 设置函数执行的参数

    using external_auth:
    For example: local.cmd('*', 'test.ping', username='saltdev', password='saltdev', eauth='pam').
    Or: local.cmd('*', 'test.ping', token='5871821ea51754fdcea8153c1c745433')

    各函数的使用方法:

    cmd_async(tgt, fun, arg=(), expr_form='glob', ret='', jid='', kwarg=None, **kwargs)
    异步的执行命令,返回值为作业ID,执行失败返回0

    cmd_batch(tgt, fun, arg=(), expr_form='glob', ret='', kwarg=None, batch='10%', **kwargs)
    返回一个执行结果的迭代器

    returns = local.cmd_batch('*', 'state.highstate', bat='10%')
    {'XX.1.39': 'xd-asp-nginx-1064139'}

    cmd_iter(tgt, fun, arg=(), timeout=None, expr_form='glob', ret='', kwarg=None, **kwargs)
    返回一个迭代器,迭代器里面包含结果的状态
    {'XX.1.43': {'retcode': 0, 'ret': 'xd-asp-nginx-1064143'}}

    cmd_iter_no_block(tgt, fun, arg=(), timeout=None, expr_form='glob', ret='', kwarg=None, **kwargs)
    返回一个生成器,没有返回的minion结果会被置None

    cmd_subset(tgt, fun, arg=(), expr_form='glob', ret='', kwarg=None, sub=3, cli=False, progress=False,
    在执行目标里面随机挑选一个目标执行

    get_cli_returns(jid, minions, timeout=None, tgt='*', tgt_type='glob', verbose=False, show_jid=False, **kwargs)
    暂时不太明白,应该是返回一个任务ID执行的结果,但是格式好奇怪,里面有好多

    local.cmd_async('XX.1.35', 'cmd.run', ['ls /'])
    a = local.get_cli_returns('20170817145623282510', 'XX.1.35')

    get_event_iter_returns(jid, minions, timeout=None)
    支持任务中断,返回的信息还比较好处理

    run_job(tgt, fun, arg=(), expr_form='glob', ret='', timeout=None, jid='', kwarg=None, **kwargs)
    异步的发送命令到minion端执行,返回jid和相应的minion,这样利于异步发送命令之后再进行结果收集

    a = local.get_event_iter_returns('20170817150543850815', 'BJ-sn-XX')
    #但是返回了一些并不匹配minion的响应信息


    SALT CALLER

    class salt.client.Caller(c_path='/etc/salt/minion', mopts=None)
    Caller在salt-minion端和salt-call命令行一样的接口,增加了和其他salt clients一样的cmd方法,导入和使用必须是在同一台salt minion上执行。
    示例:

    1 import salt.client
    2 caller = salt.client.Caller()
    3 caller.cmd('test.ping')
    4 运行salt-call --local等同于在minion端的配置文件中设置file_client的值,默认为remote。

    cmd(fun, *args, **kwargs)
    调用一个执行模块需要提供一些参数
    示例:

    1 caller.cmd('test.arg', 'Foo', 'Bar', baz='Baz')
    2 
    3 caller.cmd('event.send', 'myco/myevent/something',
    4     data={'foo': 'Foo'}, with_env=['GIT_COMMIT'], with_grains=True)

    RUNNERCLIENT

    class salt.runner.RunnerClient(opts)
    被用于在salt master端使用salt-run的命令行接口。
    它执行运行在salt master主机上的执行模块,RunnerClient导入和使用需要在salt master机器上。

    async(fun, low, user='UNKNOWN')
    执行多进程中的函数并返回事件标记以用于监视返回

    cmd(fun, arg=None, pub_data=None, kwarg=None)
    执行一个函数
    示例:

     1 >>> opts = salt.config.master_config('/etc/salt/master')
     2 >>> runner = salt.runner.RunnerClient(opts)
     3 >>> runner.cmd('jobs.list_jobs', [])
     4 {
     5     '20131219215650131543': {
     6         'Arguments': [300],
     7         'Function': 'test.sleep',
     8         'StartTime': '2013, Dec 19 21:56:50.131543',
     9         'Target': '*',
    10         'Target-type': 'glob',
    11         'User': 'saltdev'
    12     },
    13     '20131219215921857715': {
    14         'Arguments': [300],
    15         'Function': 'test.sleep',
    16         'StartTime': '2013, Dec 19 21:59:21.857715',
    17         'Target': '*',
    18         'Target-type': 'glob',
    19         'User': 'saltdev'
    20     },
    21 }

    cmd_async(low)
    以异步的方式执行函数
    示例:

    1 runner.eauth_async({
    2     'fun': 'jobs.list_jobs',
    3     'username': 'saltdev',
    4     'password': 'saltdev',
    5     'eauth': 'pam',
    6 })

    cmd_sync(low, timeout=None)
    以同步的方式执行函数
    示例:

    1 runner.eauth_sync({
    2     'fun': 'jobs.list_jobs',
    3     'username': 'saltdev',
    4     'password': 'saltdev',
    5     'eauth': 'pam',
    6 })

    WHEELCLIENT

    class salt.wheel.WheelClient(opts=None)
    Salt's wheel 模块的接口
    使用示例:

    1 import salt.config
    2 import salt.wheel
    3 opts = salt.config.master_config('/etc/salt/master')
    4 wheel = salt.wheel.WheelClient(opts)

    async(fun, low, user='UNKNOWN')

    cmd(fun, arg=None, pub_data=None, kwarg=None)
    示例:

    1 >>> wheel.cmd('key.finger', ['jerry'])
    2 {'minions': {'jerry': '5d:f6:79:43:5e:d4:42:3f:57:b8:45:a8:7e:a4:6e:ca'}}

    cmd_async(low)
    异步执行函数
    示例:

    1 >>> wheel.cmd_async({
    2     'fun': 'key.finger',
    3     'match': 'jerry',
    4     'eauth': 'auto',
    5     'username': 'saltdev',
    6     'password': 'saltdev',
    7 })
    8 {'jid': '20131219224744416681', 'tag': 'salt/wheel/20131219224744416681'}

    cmd_sync(low, timeout=None)
    同步执行函数命令

    1 >>> wheel.cmd_sync({
    2 'fun': 'key.finger',
    3 'match': 'jerry',
    4 'eauth': 'auto',
    5 'username': 'saltdev',
    6 'password': 'saltdev',
    7 })
    8 {'minions': {'jerry': '5d:f6:79:43:5e:d4:42:3f:57:b8:45:a8:7e:a4:6e:ca'}}

    SSHCLIENT

    class salt.client.ssh.client.SSHClient(c_path='/etc/salt/master', mopts=None)
    创建一个客户端对象,用于通过salt-ssh后端执行

    cmd(tgt, fun, arg=(), timeout=None, expr_form='glob', kwarg=None, **kwargs)
    通过盐SSH子系统执行单个命令,并立即返回所有结果

    cmd_iter(tgt, fun, arg=(), timeout=None, expr_form='glob', ret='', kwarg=None, **kwargs)
    通过盐SSH子系统执行单个命令,并以生成器的方式返回结果

  • 相关阅读:
    一次简单的数据库追溯
    CI(-)框架结构
    网易有毛病,我的账号被锁了,去解锁时候又几把提示不成功,浪费劳资感情啊
    指定360浏览器内核渲染页面
    JS 拼凑字符串
    jQuery.ajax() datatype:“json" 转换失败
    html <base/>标签
    使用JExcel导出excel文件
    Java web 文件下载
    jQuery ajax 传递数组到struts2
  • 原文地址:https://www.cnblogs.com/solitarywares/p/7738937.html
Copyright © 2011-2022 走看看