2017-11-14 12 views
1

Saltstackで私たちのワークステーションのインストールを管理しています。 は、クライアント上のIPA-クライアントの自動マウントをインストールするための私のレシピでは、私が行う必要があります。IPA-クライアント - 自動マウントがすでに Saltstack cmd.run - if文とそれ以外

を設定されている場合

  • はFQDN
  • チェックに基づいて場所を設定しました現在、私は以下の状態を持っています:

    ipa-client-automount: 
        cmd.run: 
        {% if salt['cmd.run']('hostname -f | grep domain1') %} 
        - name: ipa-client-automount --location=linkedtodomain1 -U 
        {% elif salt['cmd.run']('hostname -f | grep domain2') %} 
        - name: ipa-client-automount --location=linkedtodomain2 -U 
        {% endif %} 
        - unless: python -c "from ipapython import sysrestore; from ipaplatform.paths import paths; statestore = sysrestore.StateFile(paths.IPA_CLIENT_SYSRESTORE); exit(not statestore.has_state('autofs'))" 
    

    ifとelifステートメントを追加するときには、それは考慮されません。これは、条件をチェックせずにコマンドを直接実行します。 また、私の私の声明は機能していると確信しています。

    これを書いて、ifとandを同時に使用しないようにするにはどうすればよいですか? おかげ

+0

:あなたは本当にcmd.runアプローチを使用したい場合は、のような何かをしようと、

{% if grains.get('host') == 'domain1' %} 

か' - :false'のようなものを試しましたか? –

+0

また、['onlyif'](https://docs.saltstack.com/en/latest/ref/states/requisites.html#onlyif)を試してみてください。 –

+0

私は' - unless:false'を試しました。とにかくコマンドを実行します。 –

答えて

0

は、私は実用的なソリューションを持っている:

ipa-client-automount: 
    cmd.run: 
    - names: 
     {% if salt['cmd.run']('hostname -f | grep domain1') %} 
     - ipa-client-automount --location=linkedtodomain1 -U 
     {% elif salt['cmd.run']('hostname -f | grep domain2') %} 
     - ipa-client-automount --location=linkedtodomain2 -U 
     {% endif %} 
    - unless: condition 

はそれはきれいな解決策ではないのですが、それは私のために働きました。これがなぜnamesで動作しないのかわからないが、nameで行う。

+0

ありがとうございますケビン! –

1

問題はif条件にあると思います。 if salt['cmd.run']()をそのまま使用すると、最初のifが常に真となります。塩で

、より良いアプローチのようなものでhost穀物を使用することです:

{% if salt['cmd.run']('hostname -f') == 'domain1' %} 
+0

私の答え/回避策のソリューションで使用しているIF条件が問題なく動作しています。しかし、穀物の使用は面白いです、ありがとう。 –

関連する問題