Timur
И PATH, и переменные окружения легко задаются ансиблом без всякого баша
Max
я бы рекомендовал использовать env
George
- name: add export path become: true shell: "{{ item }}" with_items: - echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc - echo 'eval "$(rbenv init -)"' >> ~/.bashrc - echo 'export PATH="$HOME/.rbenv/src:$PATH"' >> ~/.bashrc
George
вот этот фрагмент дичайший
George
и непонятно корректно ли он отрабатывает
Alex
и непонятно корректно ли он отрабатывает
отрабатывает - в башрс все ложиться
George
И PATH, и переменные окружения легко задаются ансиблом без всякого баша
ну, тут кейс, что PATH должен сохраниться для пользователя ПОСЛЕ того, как ансибл отработает
George
@tgadiev Ваши предложения?
George
я не вижу ничего плохого в редактировании .bashrc в отрыве от контекста установки руби - ну, подготавливает человек среду, чтобы потом по ссш на сервер ходить и иметь готовый PATH
Timur
ну, тут кейс, что PATH должен сохраниться для пользователя ПОСЛЕ того, как ансибл отработает
Без проблем. Записываем нужные данные в профиль пользователя
Alex
последняя команда не нужна - это так просто для эксперимента
Alex
- echo 'export PATH="$HOME/.rbenv/src:$PATH"' >> ~/.bashrc
Oleg
я бы заменил на args: env: ...
так оно же тогда только в рамках плейбука отработает.
Vladislav 👻
под рутом все делаю
под рутом bashrc а сам через become делаешь небось, отсюда и проблемы
Max
@tgadiev Ваши предложения?
можно добавить строку в башрц, которая будет сорсить файлы из известного каталога инит скриптов. либо общего, либо личного.
Артём
так оно же тогда только в рамках плейбука отработает.
Оно же для установки нужно - пусть и отработает. А юзеру отдельной задачей решить другую проблему.
Vladislav 👻
окружение же другое, в зависимости от метода повышения привилегей
Timur
Лучше через профиль или /etc/environment
Alex
еще как
хорошо - но отдельного пользователя я не создавал
Vladislav 👻
Лучше через профиль или /etc/environment
и да, для окружений есть это и profile.d
Vladislav 👻
хочешь что-то в таске добавить, смотри у модуля, как добавить переменные среды
Timur
bashrc - не системный файл конфигурации. Не стоит завязывать логику на него
Alex
и да, для окружений есть это и profile.d
да хоть через что - главное что бы экспорты подтянулись - иначе команда rbenv install 2.4.1 не будет работать
Timur
Типа такого как вариант: - name: Add another bin dir to system-wide $PATH. copy: dest: /etc/profile.d/custom-path.sh content: 'PATH=$PATH:{{ my_custom_path_var }}'
Timur
А туда можно загнать и экспорт, и энвы, и черта лысого
Max
Задавать переменные окружения через bashrc вообще плохая идея как по мне
согласен. стоит выбирать по надобности видимостей. может личный профиль будет лучше. смотря какая видимость переменной нужна.
Max
А туда можно загнать и экспорт, и энвы, и черта лысого
да, но это распространяется на всех пользователей системы. нередко, я не хочу чтобы nginx знал где лежит rvm
Vladislav 👻
в плейбуке есть environment
Alex
- name: Add another bin dir to system-wide $PATH. copy: dest: /etc/profile.d/custom-path.sh content: 'PATH=$PATH:$HOME/.rbenv/bin' - name: Add another bin dir to system-wide $PATH. copy: dest: /etc/profile.d/custom-path.sh content: '$(rbenv init -)'
Alex
так
George
код
George
и это тоже код
Alex
хорошо - а source ~/.bashrc - в скрипт положить и ансиблом это скрипт дернуть?
Oleg
использую шаблон (j2), есть часть конфига: {% for host in node.stdout_lines %} ; Default ; http://{{ host }} ; {% if host.split("-")[5] | regex_replace("^0*") | int == 1 %}true{% else %}false{% endif %} {% endfor %} пытаюсь построчно зафигачить, но почему то все в одну строку получается: ; Default ; http://aaa-bbb-ccc-ddd-eee-001 ; true ; Default ; http://aaa-bbb-ccc-ddd-eee-002 ; false "stdout_lines" выглядет так: "aaa-bbb-ccc-ddd-eee-001", "aaa-bbb-ccc-ddd-eee-002" в идеале должно быть так: ; Default ; http://aaa-bbb-ccc-ddd-eee-001 ; true ; Default ; http://aaa-bbb-ccc-ddd-eee-002 ; false подскажите плиз где ошибка?
Max
- name: Add another bin dir to system-wide $PATH. copy: dest: /etc/profile.d/custom-path.sh content: 'PATH=$PATH:$HOME/.rbenv/bin' - name: Add another bin dir to system-wide $PATH. copy: dest: /etc/profile.d/custom-path.sh content: '$(rbenv init -)'
если хочешь, чтобы это распространялось на группу или конкретного пользователя - либо добавь логику выбора, либо помести в ~/.bash_profile
George
код (````код````)
Oleg
использую шаблон (j2), есть часть конфига: {% for host in node.stdout_lines %} ; Default ; http://{{ host }} ; {% if host.split("-")[5] | regex_replace("^0*") | int == 1 %}true{% else %}false{% endif %} {% endfor %}пытаюсь построчно зафигачить, но почему то все в одну строку получается: ; Default ; http://aaa-bbb-ccc-ddd-eee-001 ; true ; Default ; http://aaa-bbb-ccc-ddd-eee-002 ; false"stdout_lines" выглядет так: "aaa-bbb-ccc-ddd-eee-001", "aaa-bbb-ccc-ddd-eee-002"в идеале должно быть так: ; Default ; http://aaa-bbb-ccc-ddd-eee-001 ; true ; Default ; http://aaa-bbb-ccc-ddd-eee-002 ; falseподскажите плиз где ошибка?
George
спасибо
Oleksandr
может я тупой, но зачем вообще переменные окружения для rvm?
kevit
А systemd что делает по-твоему?
делает все и даже выставляет переменные среды)
Max
все вы неправильно делаете, надо через systemd
вариант тоже... но для опр. случаев. если пользовательский слайс будет у всех начинаться с одного пропатченного, та же проблема как и /etc/profile.d
Timur
делает все и даже выставляет переменные среды)
И где они хранятся после этого? :)
Max
И где они хранятся после этого? :)
в файлах конфиг системд слайса.
Oleksandr
И где они хранятся после этого? :)
где-то далеко, куда юзеру не дотянуться
Timur
Это плохой фэн-шуй
Max
Это плохой фэн-шуй
непривычный, для ... олдскула. но вполне рабочий. и в некоторых случаях... необходимый
Timur
Впрочем, мы уже оффтопим опять. Ансибл к этому мало относится
Max
угу.
kevit
И где они хранятся после этого? :)
там же где и всегда, в /proc/pid/environ)
Oleksandr
Впрочем, мы уже оффтопим опять. Ансибл к этому мало относится
пытаются загнать олдскул стайл в ансибл и не очень довольны результатом
kevit
да не, пытаются написать сложный код на ансибле когда можно написать простой)
Timur
Если речь о том, как ансиблом выставить нужные переменные окружения на уровне системы или пользователя - ответ выше был дан
kevit
я скидывал пример
kevit
https://github.com/rvm/rvm1-ansible
kevit
там прямо авторами rvm написан ансибл, все их тараканы именно так как они хотят
Max
Можно пример простого кода, о котором вы говорите?
https://wiki.archlinux.org/index.php/Systemd/User#Service_example
Max
т.е. создать дроп-ин файл слайсу, через ансибл.
Oleksandr
докер с нужной версией руби еще никто не успел предложить?
Timur
Max
докер с нужной версией руби еще никто не успел предложить?
хороший вопрос, rvm обычно юзают когда нужно поддерживать несколько версий вроде.... н
Timur
https://wiki.archlinux.org/index.php/Systemd/User#Service_example
А, ну, можно и через такой файл, да
Timur
Суть та же