检查文件存在并创建符号链接

时间:2014-03-26 21:04:46

标签: salt-stack

我想做那样的事情:

如果文件A存在或者没有符号链接B,我想创建一个符号链接B - > A.

现在我有:

 B:
   file:
    - symlink:
       - target: A
    - exists:
        - name: A

但这很糟糕,它不是我想要的东西。我怎样才能在盐中实现这个简单的事情呢?

3 个答案:

答案 0 :(得分:40)

我们可以使用file.directory_exists

{% if not salt['file.directory_exists' ]('/symlink/path/A') %}
symlink:
  file.symlink:
    - name: /path/to/A
    - target: /symlink/path/A
{% endif %}

答案 1 :(得分:10)

您应该使用Dan Garthwaite的优秀答案here作为检查文件是否存在的基础。我修改了他的解决方案以回答你的问题。

{% if 1 == salt['cmd.retcode']('test -f /path/to/A') %}
/path/to/A:
  file.symlink:
    - target: /symlink/path/A
{% endif %}

答案 2 :(得分:0)

/path/to/symlink/B:
  file.symlink:
    - target: /path/to/target/A
    - onlyif:
      - test -f /path/to/target/A      # check that the target exists
      - test ! -L /path/to/symlink/B   # check that B is not a symlink

这将要求两个条件都为True,才能创建符号链接。请注意,如果文件存在但不是符号链接,-L也将返回1(假)。

来自the docs

onlyif必要条件指定,如果onlyif中列出的每个命令返回True,则运行状态。如果任何指定的命令返回False,则状态将不会运行。

注意:仅当使用python_shell = True调用cmd.retcode时,才会公开提示。这意味着onlyif引用的命令将由shell解析,因此请注意副作用,因为该shell将以与salt-minion相同的特权运行。另外请注意,布尔值是由Shell的True和False概念决定的,而不是Python的True和False概念。