В Ansible, как используется ключевое слово среды?
У меня есть учебник для установки PythonBrew. Для этого мне нужно изменить среду оболочки. Поскольку шаги оболочки в Ansible не являются постоянными, мне нужно добавить export PYTHONBREW_ROOT=${pythonbrew.root}; source ${pythonbrew.root}/etc/bashrc;
в начало каждой из моих команд, связанных с PythonBrew:
- name: Install python binary
shell: export PYTHONBREW_ROOT=${pythonbrew.root}; source ${pythonbrew.root}/etc/bashrc; pythonbrew install ${python.version}
executable=/bin/bash
- name: Switch to python version
shell: export PYTHONBREW_ROOT=${pythonbrew.root}; source ${pythonbrew.root}/etc/bashrc; pythonbrew switch ${python.version}
executable=/bin/bash
Я бы хотел устранить эту избыточность. На Бесконечная дискуссионная группа, мне было передано ключевое слово environment
. Я просмотрел примеры в документации и не нажимал на меня. Для меня ключевое слово environment выглядит не так, как любая другая переменная.
Я искал другие примеры, но смог найти этот очень простой пример.
Может ли кто-нибудь продемонстрировать, как ключевое слово environment
работает в Ansible, желательно с образцом кода, который я предоставил выше?
Ответы
Ответ 1
Не уверен, что это будет соответствовать вашим потребностям, но вот как я это вижу:
- hosts: all
vars:
env:
PYTHONBREW_ROOT: "{{ pythonbrew.root }}"
tasks:
- name: Install python binary
shell: pythonbrew install {{ python.version }} executable=/bin/bash
environment: env
- name: Switch to python version
shell: pythonbrew switch {{ python.version }} executable=/bin/bash
environment: env
Он просто устанавливает переменную с именем env
и повторно использует ее как среду в обеих командах оболочки. Таким образом, у вашей команды оболочки будет установлен путь PYTHONBREW_ROOT.
Ответ 2
У меня очень похожая проблема; Я бы хотел, чтобы это было возможно сделать внутри виртуального виртуального Python (после того, как он удостоверился, что он настроен для меня, конечно).
Здесь один из способов я сделал предварительные условия среды до сих пор; по существу мне пришлось добавить (и, возможно, удалить) строки в .bashrc:
tasks:
- name: "Enable virtualenv in .bashrc"
lineinfile: dest=.bashrc
line="source {{ PROJECT_HOME }}/venv/bin/activate"
# Put tasks that rely on this environmental precondition here (?)
- name: "Disable virtualenv in .bashrc"
lineinfile: dest=.bashrc
line="source {{ PROJECT_HOME }}/venv/bin/activate"
state=absent
Я не знаю, "Я делаю это неправильно", но пока не выясню это, или кто-то приходит, чтобы рассказать мне, как сделать это лучше, я полагаю, это сработает.