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子系統執行單個命令,並以生成器的方式返回結果

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM