Eduard
Да всегда хватало одной виртуалки на ДО, если честно.
Timur
Если накатите роль на уже работающую машину с измененным конфигом - что произойдет?
Eduard
handlers работают не всегда предсказуемо, посему и не использую
Timur
handlers работают не всегда предсказуемо, посему и не использую
Если накатите роль на уже работающую машину с измененным конфигом - что произойдет?
Bsod
Если накатите роль на уже работающую машину с измененным конфигом - что произойдет?
Eduard
Если накатите роль на уже работающую машину с измененным конфигом - что произойдет?
Реконфигурнётся гитлаб, 100%. Ошибки возможны при закрытых инсталяциях, где например gitlab со внешки не доступен, а серт протух. В остальном chef доведёт сам инстанс до работоспособного состояния, ибо не проверяет omniauth/ldap/backup при реконфигурях.
Timur
chef?
Eduard
gitlab-ctl reconfigure = запуск чефа.
Eduard
....
Eduard
reconfigure как бы умный
Eduard
Он доводит, и только при необходимости рестартует.
Eduard
За то, чтобы в конце работы reconfigure все сервисы работали - отвечает тоже чеф 🙂
Timur
Я бы рекомндовал глянуть более развернутые и хорошо оттестированные роли с гэлекси
Timur
И либо контрибьютнуть туда, либо форкнуть какой-то хорошо отработанный проект и допилить до своих нужд
Timur
Чтобы не плодить лишние велосипеды
Timur
А то на гэлекси такого самопального треша и так полно, а нормальных отточенных ролей с тестами и нормальной параметризацией можно по пальцам пересчитать
Eduard
Я бы рекомндовал глянуть более развернутые и хорошо оттестированные роли с гэлекси
Я думаю что загляну туда, чтобы стырить пару идей. По крайней мере уже есть понимание, как реализовать внешние БД+редиску+артефакты. (хотя кому это нужно будет - не очень понятно, ибо хранилка артов работала всегда на рандоме).
Timur
Там сразу все тесты нужные прикручены
Eduard
Я честно говоря терраформом тестировал....
Timur
И линт, и деплой на разные облака, и идемпотентность
Eduard
До молекулы руки не доходят вечно
Timur
Вот можете глянуть и взять за образец
Timur
Терраформ немного для другого уровня, это инфра
Eduard
ldap configuration for gitlab Вот где вы раньше были 🙂
Eduard
Терраформ немного для другого уровня, это инфра
Зато тесты полноценные, с живым LE
Eduard
А в чём смысл юзать yamllint в связке с ansible-lint?
Timur
А в чём смысл юзать yamllint в связке с ansible-lint?
Там немного разные аспекты затрагиваются
Eduard
Форматирование?
Timur
Гэлекси тоже юзает оба эти линта
Timur
Да
Timur
Мы берем их конфигурацию для тестов
Timur
С дополнительными правилами некоторыми
Timur
Но дефолтные именно из Galaxy
Eduard
===== LINTING ROLE ===== yamllint Warnings: ./tasks/main.yml:89:1: [error] too many blank lines (1 > 0) (empty-lines) ansible-lint Warnings: ./galaxy/downloads/tmp30bvPM/tasks/main.yml:62: [E305] Use shell only when shell functionality is required ===== IMPORTING ROLE: gitlab ===== Adding role metadata tags Adding role platforms Updating repository versions... Import completed with 2 warnings and 0 errors
Eduard
Смысл самому то проверять...
Eduard
Ладно, запилим, спасибо
Timur
Если будут вопросы или дополнения к роли - можете смело поднимать ишуи или даже pull-request
Vasiliy
Всем привет :) Может кто сталкивался с такой штукой? Есть playbook, в одном play играется 2 target'a. Нужно конкретную задачу из плея выполнить последовательно(!) на всех таргетах. Я побегал по инету и нашел только несколько таких решений: - сериализовать play целиком - заморачиваться с loop_control ( как вот тут: https://github.com/ansible/ansible/issues/12170#issuecomment-372263149 ) Может кто-то решал/знает какие еще варианты?
Eduard
Фаст костыль: when: inventory_hostname == groups["stage-k8s"][0] с вариациями от копипасты таски до with_sequence
Vasiliy
Что именно за таска примерно? В зависимости от типа задачи возможны разные варианты
Это собственный продукт. В нем создается группа инстансов с помощью консольной команды. Если в плее на всех инстансах(это разные сервера) одновременно запускается команда, то рандомно может выскакивать ошибка на любом из инстансов (типа такая группа уже существует)
да, это я
Коллеги, всем привет. Можете пожалуйста подсказать, что я делаю не так?
да, это я
Vasiliy
Имеет значение, на каком хосте этот таск запускать?
этот таск надо запускать на каждом хосте, но если запускать параллельно, то ловлю ошибку рэндомно
Vasiliy
там под капотом инстансы начинают обмениваться друг с другом информацией и возможно что один создал группу и заслал второму, а второй тоже создает в этот момент :)
Vasiliy
как я вижу тут надо либо сериализовать таску, либо бить на 2 таски
Vasiliy
как я вижу тут надо либо сериализовать таску, либо бить на 2 таски
типа: 1. запустить на first из всех таргетов принудительно 2. запустить на всех остальных параллельно
Vasiliy
короче race_condition сплошной - кто первым создаст группу
Timur
Тогда я бы вынес таску в отдельный плей и указал strategy: linear
Vasiliy
Тогда я бы вынес таску в отдельный плей и указал strategy: linear
спасибо! я пока не до конца представляю это. пойду читать и пробовать
Vasiliy
Тогда я бы вынес таску в отдельный плей и указал strategy: linear
похоже не выйдет фокус, у меня плейбук на основе ролей написан. Получается надо отдельную роль создавать для одной задачи
Vasiliy
проще сделать 2 таски
Timur
Vasiliy
- name: create group instance [Master] shell: _some_command_ when: is_master - name: create group instance [all other hosts] shell: _some_command_ when: not is_master
Vladislav 👻
при include_task не пробрасывается ansible_ssh_private_key_file, кто-нибудь сталкивался и как-то можно вылечить?
Eduard
@tgadiev А как решить задачу правильно? changed_when в зависимости от содержимого stdout (полного или частичного - без разницы). register: task changed_when: "'namespace \"{{ item }}\" deleted' in task.stdout" Ансибло ругается, но работает [WARNING]: when statements should not include jinja2 templating delimiters such as {{ }} or {% %}. Found: 'release "{{ item }}" deleted' in task.stdout
Timur
И что значит "не пробрасывается"?
Vladislav 👻
Создания пользователя
Vladislav 👻
Это значит, что пинг прошел, а после инклуд переменная пустая ввиде "[]"
Vladislav 👻
Так, разобрался частично, у меня приватный ключ берется вот так {{ lookup('fileglob', 'openstack_rsa') }} и в инклуде это возвращает пустой список... Вопрос, куда можно положить приват ключ, чтобы его увидели в инклуде? Сейчас приват ключ лежит в files рядом с плейбуком
Vladislav 👻
И опять кажись разобрался, копирнул в files в роли
Vladislav 👻
проблему решил, но решение какое-то странное, из плейбука не видно файлы в роли, из инклуда не видно файлы в плейбуке
Timur
У плейбук и ролей разные дефолтные пути
Timur
Можно использовать переменные вида {{ playbook_path }} для точного указания местоположения
Vladislav 👻
блин, теперь другая проблема, там vault не работает
Vladislav 👻
https://github.com/ansible/ansible/issues/22382
Timur
блин, теперь другая проблема, там vault не работает
А зачем ключ через vault передавать?