条件盐状态

Sol*_*ord 5 salt-stack

我有一个场景,如果另一个服务已经在运行,我需要采取行动。具体来说,我想安装 snmp 监控,例如,如果 mysql 已经在运行。

我知道这样做的“正确”方法是安装 mysql 及其基于支柱数据、谷物数据或其他一些顶级文件过滤的监控。但是,在这种情况下,mysql 是在配置管理之外安装的(例如,MSP 的客户端安装了 mysql,但随后依赖托管提供商来配置监控)。

在这种情况下,最佳做法是什么?

我想到的一些解决方案:

  1. 创建一个列出正在运行的服务的自定义粒度。
  2. 使用除非/仅当(以及不同操作系统发行版的映射文件)
  3. 一个 Beacon(表明服务正在运行)和一个反应器(用于部署)
  4. 在状态文件中调用jinja中的service.status执行模块,如:

{% set mysqlrunning = salt['service.status'](mysql_service) %} {% if mysqlrunning %} <rest of state file> {% endif %}

虽然#4 看起来很简单,但恐怕它会很慢,并且在大型部署(1000 台服务器)中会使用大量系统资源。

在这种情况下,最佳做法是什么?