SaltStack - 无法检查文件是否存在于 minion 上
SaltStack - Unable to check if file exists on minion
我正在尝试使用 salt stack 检查 centos 主机上是否存在具有某些扩展名的特定文件。
create:
cmd.run:
- name: touch /tmp/filex
{% set output = salt['cmd.run']("ls /tmp/filex") %}
output:
cmd.run:
- name: "echo {{ output }}"
即使文件存在,我也会收到如下错误:
ls: cannot access /tmp/filex: No such file or directory
在 SaltStack 中,Jinja 在 YAML 之前评估。文件创建将 (cmd.run) 在 Jinja 之后执行。所以你的 Jinja 变量是空的,因为文件还没有创建。
见https://docs.saltproject.io/en/latest/topics/jinja/index.html
Jinja 语句,例如您的 set output
行,在呈现 sls 文件时,在执行其中的任何状态之前进行评估。它没有看到该文件,因为尚未创建该文件。
将检查移动到状态定义应该可以解决它:
output:
cmd.run:
- name: ls /tmp/filex
# if your underlying intent is to ensure something runs only
# once the file exists, you can enforce that here
- require:
- cmd: create
我看到您已经接受了关于首先渲染 jinja 的答案。这是真的。但我想补充一点,您不必使用 cmd.run 来检查文件。为此,盐中内置了一种状态。
file.exists 将以有状态的方式检查文件或目录是否存在。
关于盐的其中一件事是你应该尽可能地寻找远离cmd.run的方法。
create:
file.managed:
- name: /tmp/filex
check_file:
file.exists:
- name: /tmp/filex
- require:
- file: create
我正在尝试使用 salt stack 检查 centos 主机上是否存在具有某些扩展名的特定文件。
create:
cmd.run:
- name: touch /tmp/filex
{% set output = salt['cmd.run']("ls /tmp/filex") %}
output:
cmd.run:
- name: "echo {{ output }}"
即使文件存在,我也会收到如下错误:
ls: cannot access /tmp/filex: No such file or directory
在 SaltStack 中,Jinja 在 YAML 之前评估。文件创建将 (cmd.run) 在 Jinja 之后执行。所以你的 Jinja 变量是空的,因为文件还没有创建。
见https://docs.saltproject.io/en/latest/topics/jinja/index.html
Jinja 语句,例如您的 set output
行,在呈现 sls 文件时,在执行其中的任何状态之前进行评估。它没有看到该文件,因为尚未创建该文件。
将检查移动到状态定义应该可以解决它:
output:
cmd.run:
- name: ls /tmp/filex
# if your underlying intent is to ensure something runs only
# once the file exists, you can enforce that here
- require:
- cmd: create
我看到您已经接受了关于首先渲染 jinja 的答案。这是真的。但我想补充一点,您不必使用 cmd.run 来检查文件。为此,盐中内置了一种状态。
file.exists 将以有状态的方式检查文件或目录是否存在。
关于盐的其中一件事是你应该尽可能地寻找远离cmd.run的方法。
create:
file.managed:
- name: /tmp/filex
check_file:
file.exists:
- name: /tmp/filex
- require:
- file: create