首页 > 解决方案 > 安装特定软件包时如何在盐中查找主机

问题描述

我有数百台服务器连接到 salt-master。安装特定软件包或运行服务时,我需要查找所有服务器。我如何编写查询(minion 目标)来查找这些 minions 并运行单个命令(例如 service restart)。

标签: salt-stacksalt

解决方案


针对目标奴才的临时命令

首先,通过参考Targeting Minions Salt 文档或Getting Started: Targeting指南,找到定位 Minions 的最佳方法。

例如,如果它正在检查所有运行 CentOS 的 minions,你可以只使用一个关注于osgrain 的查询来定位:

salt -G 'os:centos' test.ping

如果您希望每个都安装了vim-enhanced软件包,请使用pkg 执行模块修改查询:

salt -G 'os:centos' pkg.version vim-enhanced

然后,您可以使用简单的 bash 脚本来循环使用您想要运行的命令的结果,但使用--out txt参数来简化输出以供在 bash 脚本中使用。

一个使用服务执行模块的简单 bash 脚本示例:

PKG_INSTALLED=`salt -G 'os:centos' pkg.version vim-enhanced --out txt | cut -d':' -f1`
for PKG in "$PKG_INSTALLED"; do
  salt "$PKG" service.start <target-service>
done

这可以通过以下-L参数进一步简化:

TARGETS=`salt -G 'os:centos' pkg.version vim-enhanced --out txt | cut -d':' -f1`
salt -L "$TARGETS" service.start <service>

关于-Larg 的信息:

-L, --list    Instead of using shell globs to evaluate the target
              servers, take a comma or whitespace delimited list 
              of servers.

从技术上讲,该命令可以简化为单行命令,但它很长:

salt -L "$(salt -G 'os:centos' pkg.version vim-enhanced --out txt | cut -d':' -f1)" service.start <service>

使用盐状态

如果不希望只是临时定位,建议使用Salt States

资源

以下应该是很好的资源:


推荐阅读