[英]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
的新實例的方法,該實例持有對相關奴才的引用,但似乎不存在這樣的功能。 誰能幫助我們解決這個問題?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.