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