我想做这样的事情:
如果文件A存在或没有符号链接B,我想创建一个符号链接B->A.
现在我有:
B:
file:
- symlink:
- target: A
- exists:
- name: A
但这很糟糕,它检查的不是我想要的东西。我怎样才能在盐中实现这个简单的东西?
我们可以使用file.directory_exists
{% if not salt['file.directory_exists' ]('/symlink/path/A') %}
symlink:
file.symlink:
- name: /path/to/A
- target: /symlink/path/A
{% endif %}
您应该使用Dan Garthwaite的优秀答案作为如何检查文件存在的基础。我修改了他的解决方案来回答你的问题。
{% if 1 == salt['cmd.retcode']('test -f /path/to/A') %}
/path/to/A:
file.symlink:
- target: /symlink/path/A
{% endif %}
/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(False(。
来自文档:
onlyif必备项指定,如果onlyif中列出的每个命令都返回True,则该状态将运行。如果指定的任何命令返回False,则该状态将不会运行。
注意:仅当调用cmd.retcode且python_shell=True时,才进行隐藏。这意味着onlyif引用的命令将由shell解析,因此要注意副作用,因为此shell将以与salt minion相同的权限运行。还要注意,布尔值是由shell的True和False概念决定的,而不是Python的True和False概念。