【发布时间】:2017-02-03 00:18:54
【问题描述】:
过去一周我一直在努力解决这个问题,我担心根据 SaltStack 文档,我的解决方案不是传统的。我们在全国各地的各种服务器上运行着大约 20 个 minions,不仅需要能够监控它们,还需要不时发出命令和 mysql 查询。这很容易通过 CLI 执行,例如:
salt '[minion name here]' cmd.run "tail -4 /usr/local/bin/file.txt"
这将有效地返回运行该 minion 的服务器上 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,但根据文档,该函数不接受任何参数。我们如何指定要在哪个 minion 上运行查询?我认为会有某种方法可以实例化一个新的 salt.modules.mysql 实例,该实例包含对相关小兵的引用,但似乎不存在这样的功能。谁能帮助我们解决这个问题?
【问题讨论】:
标签: python salt-stack