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:仅当目录存在时才使用目录作为源的主要内容,如果未能解决你的问题,请参考以下文章

Makefile - 仅当文件不存在时才建立依赖关系

仅当 Firebase Firestore 中不存在文档时才创建文档

仅当外键存在时才保存的标准方法是啥?

仅当表中不存在该值时才更新 SQL 列

仅当它不存在时才在 SQLite 中创建表

仅当文件尚不存在时才将行附加到文件中