为什么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
我有一个盐状态文件(方法 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