2017-12-08 4 views
3

私は、私は別のサービスが既に実行されている場合は、アクションを取る必要があるシナリオを持っています。具体的には、たとえばmysqlがすでに実行されている場合は、snmpモニタリングをインストールします。条件塩州立

私はこれを行うには「正しい」方法は、MySQLとそのピラーデータ、穀物のデータ、または他のいくつかのトップのファイルのフィルタリングに基づいて、両方の監視をインストールすることです知っています。ただし、このシナリオでは、MySQLは(例えば、MSPは、MySQLをインストールしたクライアントを持っているが、その後の監視を設定するには、ホスティングプロバイダに依存している)構成管理の外に設置されています。

このような状況でのベストプラクティスは何ですか?私が考えてきた

いくつかの解決策:

  1. 実行されているサービスを一覧表示するカスタム穀物を作成します。
  2. 使用しない限り、/だけであれば(と異なるため、マップファイルOSディストリビューション)
  3. Aビーコン(サービスが実行されていることを示す)と反応器はservice.status実行モジュールを呼び出す
  4. (展開します)以下のような、状態ファイルの神社で:第4位は十分に単純思えますが

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

、私はそれが遅くなるとサーバーの(1000の大規模な展開で多くのシステムリソースを使用します怖いです)。

このような状況でのベストプラクティスは何ですか?

答えて

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'%} 
+0

私は、これは似ていると思いますそれはcmd.runを使用しているため、リソースの問題に苦しむだろうということを除き、上記の私の例#4に。 –