为什么不进行盐导出和命令执行?

时间:2019-02-20 07:45:19

标签: salt-stack

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

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

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

我用一个包含以上所有export和shell命令(方法2)的shell脚本尝试了salt sate文件:

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

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

1 个答案:

答案 0 :(得分:0)

问题是您要依次执行两个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