首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >条件盐国

条件盐国
EN

Stack Overflow用户
提问于 2017-12-08 20:34:25
回答 2查看 2.5K关注 0票数 5

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

我知道这样做的“正确”方法是安装mysql及其基于支柱数据、谷物数据或其他顶级文件过滤的监控。但是,在这个场景中,mysql是在配置管理之外安装的(例如,MSP有客户端安装mysql,然后依赖主机提供商进行配置监视)。

这种情况下的最佳实践是什么?

我想出了一些解决办法:

  1. 创建一个自定义谷物,其中列出正在运行的服务。
  2. 使用除非/只的假设(以及针对不同OS发行版的映射文件)
  3. 信标(说明服务正在运行)和反应堆(部署)
  4. 在状态文件中调用jinja中的service.status执行模块,如:

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

虽然#4看起来很简单,但我担心它会很慢,并且在大规模部署(1000多台服务器)中使用大量的系统资源。

这种情况下的最佳实践是什么?

EN

回答 2

Stack Overflow用户

发布于 2020-02-11 17:26:11

通常,人们应该容易在州,但使用jinja 地图

在您的示例中,我将使用require

代码语言:javascript
复制
mysqld:
  service.running

insert_sql:
  cmd.run:
    - name: mysql < /tmp/src.sql
    - require:
      - service: mysqld 
票数 1
EN

Stack Overflow用户

发布于 2018-01-23 10:45:23

我的SLS文件中也有类似的情况:

代码语言:javascript
复制
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条件下服务的状态:

代码语言:javascript
复制
{% if salt['cmd.run']('systemctl status mysql | grep active'%}
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47721767

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档