我想知道只有在主服务器中定义目录源时才能运行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):
提前谢谢。
答案 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 %}