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执行的结果,但是格式好奇怪,里面有好多\n

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子系统执行单个命令,并以生成器的方式返回结果

 

posted @ 2017-10-26 20:11  孤独的海浪  阅读(2597)  评论(0编辑  收藏  举报