SaltStack:仅当目录存在时才使用目录作为源
Posted
技术标签:
【中文标题】SaltStack:仅当目录存在时才使用目录作为源【英文标题】:SaltStack: Use directory as source only if it exists 【发布时间】: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):
提前谢谢你。
【问题讨论】:
【参考方案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 %
【讨论】:
以上是关于SaltStack:仅当目录存在时才使用目录作为源的主要内容,如果未能解决你的问题,请参考以下文章