salt-stack - 安装特定软件包时如何在盐中查找主机
问题描述
我有数百台服务器连接到 salt-master。安装特定软件包或运行服务时,我需要查找所有服务器。我如何编写查询(minion 目标)来查找这些 minions 并运行单个命令(例如 service restart)。
解决方案
针对目标奴才的临时命令
首先,通过参考Targeting Minions Salt 文档或Getting Started: Targeting指南,找到定位 Minions 的最佳方法。
例如,如果它正在检查所有运行 CentOS 的 minions,你可以只使用一个关注于os
grain 的查询来定位:
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>
关于-L
arg 的信息:
-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。
资源
以下应该是很好的资源:
推荐阅读
- scala - 未来 onComplete 每隔一段时间工作一次
- bash - 在while循环中打印当前迭代
- c# - 正则表达式 IsMatch aways 返回 false
- python - 大熊猫中功能等效的Numpy
- php - 传递需要使用 foreach 循环 PHP 从数据库中显示表的函数
- html - 为什么 div 标签内的对象被页脚标签覆盖?
- c# - 错误将列附加到现有excel文件c#的末尾
- javascript - 使用 node.js 编辑和创建 HTML 内容
- css - 如何在 Angular Material 中的 mat-basic-chip 中添加关闭图标按钮?
- servicestack - 一次反序列化json一条记录