Timur
https://github.com/nginxinc/ansible-role-nginx
Roman
Одна большая портянка для всех модулей - так себе. Конфиг под модуль, можно в своём репе держать, версионность. как писали выше
Aleksandr
nginx вполне поддерживает конфиги в виде отдельных файлов в директории
Разделить конфиг nginx - не проблема, если в одну с модулем репу класть конфиг nginx, его необходимо делать темплейтом, как его потом деплоить?
Aleksandr
maven
Aleksandr
Мы же параметризовали конфиг, а далее его в ансибле надо прогнать
Timur
Что, прямо напрямую через maven install, без артифактов и интеграционных тестов?
Aleksandr
Gitlab ci +jenkins
Timur
Gitlab ci +jenkins
Ну добавьте в пайплайн одну строчку для nginx конфига
Timur
В чем проблема-то?
Aleksandr
В чем проблема-то?
Где переменные подстановки хранить для разных сред, в репе с модулем?
Timur
Вообще, это скорее уже вопрос для DevOps частика. Проблемы на уровне ansible я тут не вижу вообще. Для темплейтинга конфига ансиблом нужна плейбука с одной таской - вызовом модуля template
Timur
Где переменные подстановки хранить для разных сред, в репе с модулем?
Как вариант. Если у вас другого общего хранилища нет
Timur
Думаю, лучше все же сюда с этим вопросом: https://t.me/devops_ru
Timur
Про ансибл тут особо нечего обсуждать
Roman
Где переменные подстановки хранить для разных сред, в репе с модулем?
У тебя гитлаб? Там есть переменные в настройках CI/CD для репо
Aleksandr
У тебя гитлаб? Там есть переменные в настройках CI/CD для репо
Не прокатит;) есть несколько сред. Вопрос то как раз про то, как организовать репы, чтобы с одной стороны поддерживать nginx IaC( серт, права на папки, состояние и т.д), с другой - деплоить модули с конфигом nginx на разные среды
Timur
Ребята, это уже не проблема ансибла
Timur
Давайте в более подходящий чат
Alex
stdout: |- Traceback (most recent call last): File "/usr/lib/python3/dist-packages/pkg_resources/__init__.py", line 635, in _build_master ws.require(__requires__) File "/usr/lib/python3/dist-packages/pkg_resources/__init__.py", line 943, in require needed = self.resolve(parse_requirements(requirements)) File "/usr/lib/python3/dist-packages/pkg_resources/__init__.py", line 834, in resolve raise VersionConflict(dist, req).with_context(dependent_req) pkg_resources.VersionConflict: (yamllint 1.2.1 (/usr/lib/python3/dist-packages), Requirement.parse('yamllint==1.10.0')) During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/home/ansible/.ansible/tmp/ansible-tmp-1571664613.8057463-81203150607731/yamllint", line 6, in <module> from pkg_resources import load_entry_point File "/usr/lib/python3/dist-packages/pkg_resources/__init__.py", line 2927, in <module> @_call_aside File "/usr/lib/python3/dist-packages/pkg_resources/__init__.py", line 2913, in _call_aside f(*args, **kwargs) File "/usr/lib/python3/dist-packages/pkg_resources/__init__.py", line 2940, in _initialize_master_working_set working_set = WorkingSet._build_master() File "/usr/lib/python3/dist-packages/pkg_resources/__init__.py", line 637, in _build_master return cls._build_from_requirements(__requires__) File "/usr/lib/python3/dist-packages/pkg_resources/__init__.py", line 650, in _build_from_requirements dists = ws.resolve(reqs, Environment()) File "/usr/lib/python3/dist-packages/pkg_resources/__init__.py", line 829, in resolve raise DistributionNotFound(req, requirers) pkg_resources.DistributionNotFound: The 'yamllint==1.10.0' distribution was not found and is required by the application а я что то упускаю при попытке запустить yamllint через script?
Alex
сам таск проще некуда - name: Run yamllint script: /usr/bin/yamllint --help args: executable: python3 register: result
Anonymous
сам таск проще некуда - name: Run yamllint script: /usr/bin/yamllint --help args: executable: python3 register: result
Твой скрипт видимо использует модуль yammlint, которого нет на целевой системе
Alex
есть
Alex
из командной строки все отрабатывает
Alex
# python3 /usr/bin/yamllint -v yamllint 1.2.1
Sergey
stdout: |- Traceback (most recent call last): File "/usr/lib/python3/dist-packages/pkg_resources/__init__.py", line 635, in _build_master ws.require(__requires__) File "/usr/lib/python3/dist-packages/pkg_resources/__init__.py", line 943, in require needed = self.resolve(parse_requirements(requirements)) File "/usr/lib/python3/dist-packages/pkg_resources/__init__.py", line 834, in resolve raise VersionConflict(dist, req).with_context(dependent_req) pkg_resources.VersionConflict: (yamllint 1.2.1 (/usr/lib/python3/dist-packages), Requirement.parse('yamllint==1.10.0')) During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/home/ansible/.ansible/tmp/ansible-tmp-1571664613.8057463-81203150607731/yamllint", line 6, in <module> from pkg_resources import load_entry_point File "/usr/lib/python3/dist-packages/pkg_resources/__init__.py", line 2927, in <module> @_call_aside File "/usr/lib/python3/dist-packages/pkg_resources/__init__.py", line 2913, in _call_aside f(*args, **kwargs) File "/usr/lib/python3/dist-packages/pkg_resources/__init__.py", line 2940, in _initialize_master_working_set working_set = WorkingSet._build_master() File "/usr/lib/python3/dist-packages/pkg_resources/__init__.py", line 637, in _build_master return cls._build_from_requirements(__requires__) File "/usr/lib/python3/dist-packages/pkg_resources/__init__.py", line 650, in _build_from_requirements dists = ws.resolve(reqs, Environment()) File "/usr/lib/python3/dist-packages/pkg_resources/__init__.py", line 829, in resolve raise DistributionNotFound(req, requirers) pkg_resources.DistributionNotFound: The 'yamllint==1.10.0' distribution was not found and is required by the application а я что то упускаю при попытке запустить yamllint через script?
английским же по тёмному написано: The 'yamllint==1.10.0' distribution was not found and is required by the application
Sergey
так что да, люто упускаешь.
Alex
тогда откуда он берет эту версию?
Alex
# pip3 list | grep yaml yamllint (1.2.1)
Sergey
тогда откуда он берет эту версию?
Вообще-то в стейктрейсе написано, откуда. У тебя, возможно, питоны перепутаны, ну и их venvs.
Lamobot
# pip3 list | grep yaml yamllint (1.2.1)
Так требуется же 1.10 а не 1.2
Sergey
^^^ +++
Alex
требуется кем?
Alex
и почему тогда из командной строки работает с 1.2?
Alex
как бы # cat /usr/bin/yamllint #!/usr/bin/python3 # EASY-INSTALL-ENTRY-SCRIPT: 'yamllint==1.2.1','console_scripts','yamllint' __requires__ = 'yamllint==1.2.1' import sys from pkg_resources import load_entry_point if __name__ == '__main__': sys.exit( load_entry_point('yamllint==1.2.1', 'console_scripts', 'yamllint')() )
Sergey
и почему тогда из командной строки работает с 1.2?
ты предлагаешь вылечит ьзубы твоему коню по фотографии? Тогда всё как следует: 1. Cоздай venv c Python3 2. Поставь в него Ansible через pip install 3. Запусти и сравни
Alex
не по фотографии, а по конкретным ошибкам
Alex
ансибл у меня и так установлен через pip $ pip3 list | grep ansible ansible (2.7.13)
Sergey
а куда именно он установлен?
Sergey
И почему ты пропускаешь п.1?
Alex
не совсем понимаю как это связанно со странным поведением модуля script
Alex
ok, попробую с venv
Sergey
не совсем понимаю как это связанно со странным поведением модуля script
кстати ,а как задача-то выглядит? а то ,кажись, опять проблема XY настигла?
Sergey
Если используется модуль скрипт - дык нужно, чтобы удалённо вся нужная машинерия была (тот же yamllint).
Timur
не совсем понимаю как это связанно со странным поведением модуля script
Вы вообще странным образом модуль используете
Alex
The local script at path will be transferred to the remote node and then executed. 🤦‍♂️
Alex
вопрос снят
Timur
И вообще непонятна задача. Зачем ансиблом вызывать yamllint?
Alex
помню вроде здесь советовали именно модуль script для запуска python скрипта
Alex
И вообще непонятна задача. Зачем ансиблом вызывать yamllint?
проверка корректности конф-го файла приложения
Alex
$ yamllint etc/system.yaml etc/system.yaml 1:1 warning missing document start "---" (document-start) 10:1 error duplication of key "router" in mapping (key-duplicates) чтобы отлавливать подобные ошибки (дубликаты и не только)
Sergey
помню вроде здесь советовали именно модуль script для запуска python скрипта
если этот модуль самодостаточен, то кинь его сюда: https://docs.ansible.com/ansible/latest/dev_guide/developing_module_utilities.html#naming-and-finding-module-utilities
Timur
помню вроде здесь советовали именно модуль script для запуска python скрипта
И где ты видишь у себя питон скрипт? yamllint - это не совсем скрипт, как бы
Alex
# cat /usr/bin/yamllint #!/usr/bin/python3 # EASY-INSTALL-ENTRY-SCRIPT: 'yamllint==1.2.1','console_scripts','yamllint' __requires__ = 'yamllint==1.2.1' import sys from pkg_resources import load_entry_point if __name__ == '__main__': sys.exit( load_entry_point('yamllint==1.2.1', 'console_scripts', 'yamllint')() ) а что это?
Timur
Но так его обычно не вызывают
Timur
В любом случае, script копирует и запускает локальный скрипт
Timur
Если тебе нужно запустить удаленный - используй просто command
Alex
да, я уже понял
Alex
как то упустил момент про комирование локального скрипта
Lex
Ребят, привет. а есть кто пользуется AWX? у меня структура проектов такова - роли лежат в одной репе, а варсы и плэйбуки лежат в другой репе. можно ли в таком формате это заставить работать в AWX? с варсами понятно - их придется вытаскивать из репы и привязывать к хостам и группам. а вот как быть с ролями? Как его заставить искать роли в другом "project"?
Lex
сталкивался кто?
Lex
мысль уловил...ушел пробовать
Radik
а в чем смысл по репам раскидывать?
Lex
обезличенная репа
Timur
Установка SAP Machine ннада?
Timur
https://sap.github.io/SapMachine/
Timur
Я про то, что тут новый релиз нашей роли вышел: https://github.com/lean-delivery/ansible-role-java
Timur
Теперь поддерживает и установку SAP Machine
Александр
Чем shell отличается от command?
Timur
Чем shell отличается от command?
shell поддерживает всякие директивы перенаправления вывода, операторы консоли и т.п.
Timur
Т.е. в shell можно сделать, грубо говоря, echo 123 > test.log
Timur
А в command так не сделаешь
Александр
shell поддерживает всякие директивы перенаправления вывода, операторы консоли и т.п.
Благодарю! А я-то думаю, что за хрень с пайпами и выводом в файл
Anonymous
Подскажите пожалуйста: у меня есть хост, на который я хожу через другой jumphost. Задачка следующая: выполнить template конфигурационного файла, используя некоторые факты с jumphost'a. Но при таком инвентори (ниже) - факты с jumphost'а просто не собираются. Можно как-то сделать так, чтобы все таки собрать факты с хоста "prod-tools-bastion" и использовать их на машине "jenkins"? --- all: vars: ansible_user: ansible tools: hosts: jenkins: ansible_host: 10.9.141.9 vars: bastion_server_addr: "{{ hostvars['prod-tools-bastion']['ansible_host'] }}" bastion_servers: hosts: prod-tools-bastion: ansible_host: 1.1.1.1 behind_bastion: children: tools: vars: ansible_ssh_common_args: | -o ProxyCommand="ssh -W %h:%p -q {{ ansible_user }}@{{ bastion_server_addr }}"