Почему не происходит экспорт соли и выполнение команд? - PullRequest
0 голосов
/ 20 февраля 2019

У меня есть файл состояния состояния (подход 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 не установлена.

Я пробовал солт-файл с помощью скрипта оболочки, в котором есть все команды экспорта и оболочки, описанные выше (подход 2):

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

И скрипт оболочки:

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

Оба подхода предназначены для одной и той же задачи: экспортировать значение и выполнить команду.Второй подход работает нормально, как и ожидалось.Я не уверен, почему первый подход не удался.Есть мысли?

1 Ответ

0 голосов
/ 20 февраля 2019

Дело в том, что вы выполняете два cmd.run последовательно, каждый из которых порождает новую и независимую оболочку, поэтому переменная среды, экспортируемая в первом, недоступна во втором.

Это должно работатьс

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

или лучше, используя параметр env, определенный в cmd.run doc https://docs.saltstack.com/en/latest/ref/states/all/salt.states.cmd.html#salt.states.cmd.run

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