Привет, я пытаюсь узнать, как установить переменную среды с помощью Ansible.
что-то, что простая команда оболочки вроде этого:
EXPORT LC_ALL=C
попытался использовать команду оболочки и получил ошибку, попытался использовать модуль среды, но ничего не произошло.
что мне не хватает
Ответы:
Есть несколько способов сделать это, и из вашего вопроса непонятно, что вам нужно.
1. Если вам нужно, чтобы переменная среды определялась ТОЛЬКО ДЛЯ ЗАДАЧИ, сделайте следующее:
Обратите внимание, что
MY_ENV_VARIABLE
доступно ТОЛЬКО для первой задачи,environment
а не постоянно в вашей системе.Надеюсь, скоро буду использовать
environment
станет возможным и на игровом уровне , а не только на уровне задач, как указано выше. В настоящее время для этой функции открыт запрос на перенос на GitHub Ansible: https://github.com/ansible/ansible/pull/8651ОБНОВЛЕНИЕ: теперь он объединен 2 января 2015 года.
2. Если вам нужна постоянная переменная среды + общесистемная / только для определенного пользователя
Вы должны изучить, как вы это делаете в вашем дистрибутиве / оболочке Linux, для этого есть несколько мест. Например, в Ubuntu вы определяете это в файлах, например:
~/.profile
/etc/environment
/etc/profile.d
каталогЗдесь вы найдете документацию по Ubuntu: https://help.ubuntu.com/community/EnvironmentVariables
В конце концов, для установки переменной окружения в ex. В Ubuntu вы можете просто использовать
lineinfile
модуль из Ansible и добавить нужную строку в определенный файл. Проконсультируйтесь с документацией по вашей ОС, чтобы узнать, где его добавить, чтобы сделать его постоянным.источник
У меня недостаточно репутации для комментариев, поэтому я добавляю новый ответ.
Ответ Гасека вполне правильный. Только одно: если вы обновляете
.bash_profile
файл или файл/etc/profile
, эти изменения будут отражены только после того, как вы выполните новый вход в систему. Если вы хотите установить переменную env, а затем использовать ее в последующих задачах в той же книге воспроизведения, рассмотрите возможность добавления этих переменных среды в.bashrc
файл.Я предполагаю, что причиной этого является вход в систему и оболочки без входа.
Анзибль, при выполнении различных задач, считывает параметры из
.bashrc
файла вместо.bash_profile
или/etc/profile
.Например, если я обновил свою переменную пути, чтобы включить настраиваемый двоичный
.bash_profile
файл в файл соответствующего пользователя, а затем сделал источник файла. Следующие последующие задачи не распознают мою команду. Однако, если вы обновите.bashrc
файл, команда будет работать.Это сработает , но если бы я сделал это с помощью файлов профиля, то выдала
mysql -e "show databases"
бы ошибку.Этот не будет работать , если у нас все эти задачи будут в одной книге.
источник
source file
делать. file
Вот быстрая локальная задача для постоянной установки ключей / значений
/etc/environment
(общесистемная, для всех пользователей):и вары для него:
и, да, если вы выходите и входите ssh,
env
показывает новые переменные среды.источник
dest
был заменен наpath
, но, согласно документации, должен работать. Если этого не произошло, переключитесь наpath
.Для постоянной установки переменных среды вы можете использовать одну из существующих ролей в Ansible Galaxy. Я рекомендую weareinteractive.environment .
Использование ansible-galaxy:
Используя requirements.yml:
Затем в вашей пьесе:
источник
Это лучший вариант. Как сказал Михал Гасек (первый ответ), поскольку запрос на перенос был объединен ( https://github.com/ansible/ansible/pull/8651 ), мы можем легко устанавливать постоянные переменные среды по уровню игры.
источник