1. 程式人生 > >57. Python saltstack 二次開發(2)

57. Python saltstack 二次開發(2)

http協議 class 方式 clas 調用 官網 創建 分享 tex

回顧上一節:

grains 和 pillar 都是定義他們的屬性的

grains 定義在minion端(定義完必須重啟minion,才能生效)

pillar 定義在master端(無需重啟即可生效)

saltstack的api

Salt-api有兩種方式:

第一種:是函數的形式,有人家定義好的函數,我們可以直接調用,直接寫python代碼調用函數或者類就可以了。

第二種:形式是salt-api有封裝好的http協議的,我們需要啟動一個服務端。



登錄官網查看文檔:

技術分享圖片


文檔內容,如下:

技術分享圖片


安裝salt-api:

yum install –y salt-api


1.加載master的配置文件

import  salt.config
master_opts = salt.config.client_config('/etc/salt/master')
print('master_opts')


master端,如果想查看配置文件的參數屬性:

技術分享圖片


2. 加載minion的配置文件

import salt.config
minion_opts = salt.config.minion_config('/etc/salt/minion')
print ('minion_opts')


minion端,想看配置文件內的參數屬性:

技術分享圖片


3. 在master上執行各種模塊:

>>> import salt.client
>>> local = salt.client.LocalClient('/etc/salt/minion')
>>> local.cmd('*', "test.ping")

返回:

{'192.168.48.129': True}


執行命令:

>> local.cmd('*', "cmd.run", "w")

【返回的是一個字典形式,很容易後期處理數據用】

{'192.168.48.129': ' 12:17:38 up  5:58,  1 user,  load average: 0.00, 0.01, 0.05\nUSER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT\nroot     pts/0    192.168.48.1     11:14    2:50   0.89s  0.89s python'}


如果一次要執行多個模塊:

一種方式:

>>> local.cmd('*', ['test.ping', 'cmd.run'], [[], ['whoami']])

結果:

{'192.168.48.129': {'test.ping': True, 'cmd.run': 'root'}}

【test.ping 對應 [](空列表),cmd.run 對應 whoami 命令】

另一種方式:(不推薦這樣用,還不如調兩次,這樣邏輯性不好)

>>> local.cmd('*', ['test.ping', 'cmd.run'], [[], ['w; df -h']])


自定義的模塊:

模塊目錄必須創建:

mkdir -p /srv/salt/_modules
cd  /srv/salt/_modules

創建 jd.py 文件:

vim jd.py

#!/usr/bin/python
#coding:utf-8
def hello(name):
return {"name": name}

寫完所有module要記得同步一下:

salt '*' saltutil.sync_all    #同步所有

或者

salt '*' saltutil.sync_modules    #只同步modules


技術分享圖片


執行命令獲取結果:

# salt '*' jd.hello  ajing

結果輸出,如圖:

技術分享圖片


python中這樣獲取:

技術分享圖片



57. Python saltstack 二次開發(2)