SaltStack:仅当目录存在时才使用目录作为源

时间:2014-04-21 19:41:35

标签: directory-structure createprocess salt-stack

我想知道只有在主服务器中定义目录源时才能运行SaltStack状态。

基本上,我想允许fo用户将某些配置文件放在他们的HOME目录中。大多数用户都没有什么特别之处,但其中一些可能(例如自定义.vimrc

我想做的是,只有当该目录存在于主目录中时,才为用户的file.recurse目录执行HOME

截至目前,我有以下内容:

{% 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 }},则执行{ {1}}将该目录作为file.recurse的来源。否则,只需跳过该状态,并在创建用户时使用file.recurse的任何默认内容(我的意思是什么都不做)。

我想在$HOME配置中添加一个onlyif子句(像file.recurse这样的东西会有帮助......但是nopes ...我还试图在{{{{}}中创建一个空目录1}}并将其作为默认值传递(如此处针对file.managed所述),但该技巧不适用于- onlyif: test -e salt://users/{{ username }}(至少not yet):

提前谢谢。

1 个答案:

答案 0 :(得分: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 %}