python rest api client_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.config2 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.client2 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.config2 import salt.loader3

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.config2 import salt.loader3

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.config2 import salt.loader3

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.config2 import salt.loader3

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.config2 import salt.loader3

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.client2

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值