我有一个 Salt 公式在我的 minions 上运行,它运行一个自定义模块,该模块会访问网络以获取最新版本的 chrome 的一些 JSON 数据。它工作得很好,但我认为最好将它作为 master 上的运行器运行,并将其存储为 pillar 数据以供 minions 访问。这样,我就不需要数百个 minions 不必要地查询网络,而只需要在 master 上查询一次。
我在网上找不到任何有用的信息。这可能吗?
def latest():
import json
import urllib.request
url = 'https://omahaproxy.appspot.com/all.json'
resp = urllib.request.urlopen(url)
data = json.loads(resp.read())
for each in data:
if each.get("os") == "win":
versions = each.get("versions")
for version in versions:
if version.get("channel") == "stable":
latest = (version.get("current_version"))
return latest
我可以在 /etc/salt/_modules 中按原样运行它,也可以在主服务器上的 /etc/salt/_runners 中作为运行器运行它。
答案1
显而易见的方法是让它成为定制支柱但是,这仅仅意味着 master 为每个 minion 运行一次,而不是 minion 自己运行。
为了让你的运行器将结果放在所有 minions 都可以获取的地方,你可以这样做,例如,假设默认的 pillar root 配置:
__salt__["file.write"]("/srv/pillar/omahaproxy.sls",
"omahaproxy.latest: " + latest)