簡體   English   中英

以編程方式訪問Saltstack Minion

[英]Accessing saltstack minion programmatically

在過去的一周中,我一直在努力解決這個問題,根據SaltStack文檔,我擔心我的解決方案不是傳統的。 我們在全國各地的各種服務器上運行着大約20個小兵,他們不僅需要能夠監視它們,而且還需要不時發出命令和mysql查詢。 通過CLI可以很容易地通過以下方式完成此操作:

salt '[minion name here]' cmd.run "tail -4 /usr/local/bin/file.txt"

這將有效地返回運行該奴才的服務器上file.txt中的最后四行。 但是,我們接下來要做的是有一個腳本,該腳本會定期拉該文件並將其緩存在salt master上。 由於SaltStack是用python編寫的,因此毫無疑問地將相同的語言用於我們的守護程序/ cron作業。 但是,我們遇到的問題是,我們非常希望與SaltStack進行接口連接,而不必訴諸於在python腳本中運行進程。 當前,我們有以下幾行代碼執行幾乎相同的操作:

subprocess.Popen(['salt', minion, 'cmd.run', '"tail -4 /usr/local/bin/file.txt"', '--out', 'json'], stdout=subprocess.PIPE)

閱讀文檔后,很明顯,SaltStack提供了一種方法來執行此操作。 我們面臨的問題是,如果不使用subprocess模塊​​,就無法找出實際運行這樣的命令所需的代碼。 此外,我們還希望對其中的一些奴才執行遠程mysql查詢,但是我們經驗不足(或者如此愚蠢),以至於我們無法理解相關代碼應該是什么。

出於示例目的,我們希望列出位於我們節點之一上的所有數據庫。 我們找到了以下兩篇文章來解釋如何執行此操作,但是對於要獲得最終結果實際上必須執行什么卻感到困惑。

https://docs.saltstack.com/en/2015.8/ref/clients/index.html
https://docs.saltstack.com/en/latest/ref/modules/all/salt.modules.mysql.html

我們期望從mysql salt模塊可以使用salt.modules.mysql.db_list ,但是根據文檔,該函數不接受任何參數。 我們如何指定要在哪個小兵上運行查詢? 我以為有一種實例化salt.modules.mysql的新實例的方法,該實例持有對相關奴才的引用,但似乎不存在這樣的功能。 誰能幫助我們解決這個問題?

如果您從cli執行模塊,並且您的minion ID以特定的內容開頭,例如db-00db-01 ,那么您將執行以下操作:

salt 'db*' mysql.db_list

除了依賴minion id,還有其他方法。 詳細了解有關定位小兵的更多信息。

在python中,您可以執行與鏈接文檔中所述相同的操作。 稍作調整的示例:

import salt.client

local = salt.client.LocalClient()
local.cmd('db-*', 'mysql.db_list')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM