为什么salt导出和命令执行没有发生?

Why doesnt salt export and command execution happen?

我有一个盐状态文件(方法 1):

export_port:
  cmd.run:
    - name: export PORT=53000
    - cwd: /tmp
execute_cmd:
  cmd.run:
    - name: ./test.sh db host user log
    - cwd: /tmp

执行作业时,状态文件returns一个错误,指出未安装 psql 程序。

我用 shell 脚本尝试了 salt sate 文件,该脚本包含上面的所有导出和 shell 命令(方法 2):

script:
  cmd.script:
    - name: /tmp/test.sh
    - source: /source/dir/test.sh
    - cwd: /tmp

并且 shell 脚本具有:

#! /bin/sh
export PORT=53000
./test.sh db host user log

这两种方法都是针对同一任务导出值并执行命令。第二种方法按预期工作正常。我不确定为什么第一种方法失败了。有什么想法吗?

问题是您要按顺序执行两个 cmd.run,每个都会生成一个新的独立 shell,因此在第一个中导出的环境变量在第二个中不可用。

它应该适用于

execute_cmd:
  cmd.run:
    - name: PORT=53000 ./test.sh db host user log
    - cwd: /tmp

或更好地使用 cmd.run doc https://docs.saltstack.com/en/latest/ref/states/all/salt.states.cmd.html#salt.states.cmd.run

中定义的 env 参数
execute_cmd:
  cmd.run:
    - name: ./test.sh db host user log
    - cwd: /tmp
    - env:
      - PORT: 53000