【问题标题】:SaltStack: Use directory as source only if it existsSaltStack:仅当目录存在时才使用目录作为源
【发布时间】:2014-04-21 19:41:35
【问题描述】:

我想知道是否只有在 master 中定义了目录源时才能运行 SaltStack 状态。

基本上,我希望允许用户将某些配置文件放在他们的HOME 目录中。大多数用户不会有任何特别之处,但其中一些可能(例如自定义.vimrc

我想做的是仅当主目录中存在该目录时为用户的HOME目录执行file.recurse

截至目前,我有以下几点:

{% for username in pillar['users'] %}

{{ username }}:

  user:
    - present
    - home: /home/{{ username }}
    [  . . . ] # (yadda, yadda, yadda)

# ToDo: Is there a way of not running this AT ALL if the users's directory is
# not present?
/home/{{ username }}:
  file.recurse:
    - user: {{ username }}
    - group: ubuntu
    - source: 
      - salt://users/{{ username }}
    - require:
      - user: {{ username }}

{% endfor %}

我想要做的是在代码中显示为ToDo:如果盐树(或盐主)中有一个目录salt://users/{{ username }},则执行file.recurse,将该目录作为file.recurse 的来源。否则,只需跳过该状态并使用 $HOME 创建用户时的任何默认内容(我的意思是什么都不做)。

我认为在file.recurse 配置中添加一个onlyif 子句(类似- onlyif: test -e salt://users/{{ username }} 会有所帮助...但是不行...我还尝试在salt://users/empty_dir/ 中创建一个空目录并将其作为默认(如file.managed 所述),但该技巧不适用于file.recurse(至少not yet):

提前谢谢你。

【问题讨论】:

    标签: directory-structure createprocess salt-stack


    【解决方案1】:

    你可以试试类似

    {% for username in pillar['users'] %}
    
    {{ username }}:
    
      user:
        - present
        - home: /home/{{ username }}
        [  . . . ] # (yadda, yadda, yadda)
    
    # NB!!!! POTENTIAL PERF BOTTLENECK
    {% if 'users/'+username not in salt['cp.list_master_dirs'](prefix='users') %}
    /home/{{ username }}:
      file.recurse:
        - user: {{ username }}
        - group: ubuntu
        - source: 
          - salt://users/{{ username }}
        - require:
          - user: {{ username }}
    {% endif %}
    
    {% endfor %}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-29
      • 2021-03-07
      • 1970-01-01
      • 2012-07-23
      • 1970-01-01
      • 2015-09-09
      • 1970-01-01
      • 2023-03-31
      相关资源
      最近更新 更多