Saltstack cmd.run - if语句和除非

时间:2017-11-14 11:56:31

标签: ipa salt salt-stack

我使用 Saltstack 管理工作站的安装。 在我的客户端上安装ipa-client-automount的配方中,我需要:

  • 根据fqdn
  • 设置位置
  • 检查是否已配置ipa-client-automount

目前,我有以下状态:

 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和除非同时工作? 感谢

2 个答案:

答案 0 :(得分:1)

我认为问题出在if条件下。如果您使用<?xml version="1.0" encoding="utf-8"?> <android.support.v7.widget.RecyclerView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/list" android:name="it.ivannotarstefano.cojule.activity.PlayerFragment" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginLeft="16dp" android:layout_marginRight="16dp" app:layoutManager="LinearLayoutManager" tools:context="it.ivannotarstefano.cojule.activity.PlayerFragment" tools:listitem="@layout/fragment_player" > </android.support.v7.widget.RecyclerView> 方式,则第一个<?xml version="1.0" encoding="utf-8"?> <android.support.v7.widget.RecyclerView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/list" android:name="it.ivannotarstefano.cojule.activity.PlayerFragment" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginLeft="16dp" android:layout_marginRight="16dp" app:layoutManager="LinearLayoutManager" tools:context="it.ivannotarstefano.cojule.activity.PlayerFragment" tools:listitem="@layout/fragment_player" > <android.support.design.widget.FloatingActionButton android:id="@+id/floatingActionButton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="bottom|end" android:layout_margin="10dp" android:clickable="true" android:focusable="true" android:src="@drawable/ic_add_black_24dp" app:backgroundTint="#fff700" /> </android.support.v7.widget.RecyclerView> 将始终为真。

在盐中,更好的方法是使用if salt['cmd.run']()谷物,例如:

if

或者,如果您真的想使用host方法,请尝试以下方法:

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

答案 1 :(得分: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上起作用。