2015-12-18 3 views
3

Проблема, с которой мы сталкиваемся, связана с переменными окружения. Значение JAVA_HOME установлено равным 1,5 для пользователя A, а для root - 1,7. Когда я вхожу в систему вручную &, проверьте версии как в корне, так и в A &.Ansible env variable отличается для пользователя sudo

Когда я SSH через анзибль как пользователя А с Судо установленным истинным (sudo_user=root), я ожидал, что версия Java будет 1.7, но он вернулся в 1,5, который является версией пользователя А.

Любые идеи почему вещи ведут себя по-разному между ручным входом & ansible login?

+0

Как вы проверяете переменные среды? – ydaetskcoR

+0

Я использую команду env. Также проверка java -version дает мне другую версию и ту, которую я установил явно для пользователя в своем .bashrc. Я попытался установить в .bash_profile –

+0

, возможно, он должен что-то сделать с помощью sudo env vars. См. [Здесь] (http://stackoverflow.com/questions/8633461/how-to-keep-environment-variables-when-using-sudo) – user2599522

ответ

0

Есть две вещи, которые важны здесь:

  • Как вы проверка переменной окружения суперпользователя? sudo env не дает вам правильных переменных окружения для root.
  • Как вы устанавливаете переменные окружения root?

Мое лучшее предположение, что вы не задаете переменные среды правильно. См. this ответ на вопрос о том, как считываются переменные среды и задаются ли они в нужном месте.

1

В зависимости от конфигурации вашей системы, когда Ansible увеличивает свои привилегии через sudo, среда будет «дезинфицирована», предоставляя минимальный набор переменных env. Возможно, файл /etc/sudoers имеет значение env_reset.

У вас есть несколько вариантов.

В файлах sudoers вы можете удалить env_reset или вы могли бы добавить env_keep MY_VAR записей для каждой из переменных, которые вы хотите сохранить.

Внутри Ansible вы можете явно указать требуемые переменные среды. Делать это на конкретной задаче выглядит следующим образом:

- hosts: all 
    tasks: 
    - cmd: echo $MY_ENV 
     become: true 
     environment: 
     MY_ENV: "foo" 

Вы можете прочитать больше о настройке среды для анзибля в Setting the Environment разделе их документов.

Не зная ничего о ваших потребностях, я настоятельно рекомендую установить переменную в вашем коде Ansible и оставить файл sudoers самостоятельно, если вам действительно не нужны эти значения, хранящиеся в env вне контекста Ansible. Это помогает избежать непоследовательной среды sudo для пользователей.

Смежные вопросы