我有一个场景,如果另一个服务已在运行,我需要采取行动。具体来说,我想安装snmp监控,例如,如果mysql已经在运行。
我知道"对"这样做的方法是安装mysql及其监控基于支柱数据,谷物数据或其他一些顶级文件过滤。但是,在这种情况下,mysql正在配置管理之外安装(例如,MSP具有安装mysql但后来依赖托管提供商配置监视的客户端)。
在这种情况下,最佳做法是什么?
我想到的一些解决方案:
{% set mysqlrunning = salt['service.status'](mysql_service) %}
{% if mysqlrunning %}
<rest of state file>
{% endif %}
虽然#4看起来很简单,但我担心它会很慢并且在大型部署(1000多台服务器)中使用大量系统资源。
在这种情况下,最佳做法是什么?
答案 0 :(得分:1)
通常情况下,在州使用Jinja的人比较容易,但是使用Jinja maps。
在您的示例案例中,我将使用require
mysqld:
service.running
insert_sql:
cmd.run:
- name: mysql < /tmp/src.sql
- require:
- service: mysqld
答案 1 :(得分:0)
我的SLS文件中有类似的情况:
ipa-client-automount:
cmd.run:
- names:
{% if salt['cmd.run']('hostname -f | grep domain1') %}
- ipa-client-automount --location=domain1 -U
{% elif salt['cmd.run']('hostname -f | grep domain2') %}
- ipa-client-automount --location=domain2 -U
{% endif %}
- unless: ipa-client-automount 2>&1 | grep already
您可以执行相同的结构,但条件是grep服务的状态:
{% if salt['cmd.run']('systemctl status mysql | grep active'%}