manefesto
ты факты сначала собери
Ivan
она может быть не на всех серверах
manefesto
я вот так делал - name: gather facts from servers setup: delegate_to: "{{item}}" delegate_facts: True loop: "{{groups['servers']}}
Sergey
я вот так делал - name: gather facts from servers setup: delegate_to: "{{item}}" delegate_facts: True loop: "{{groups['servers']}}
Норм дичь. Что мешает сделать канонично? - hosts: servers gather_facts: yes tasks: []
manefesto
ну теперь то я знаю =)
Oleg
Норм дичь. Что мешает сделать канонично? - hosts: servers gather_facts: yes tasks: []
прочитал в доке, что ansible по дефолту собирает факты. By default, Ansible gathers facts at the beginning of each play.
Sergey
прочитал в доке, что ansible по дефолту собирает факты. By default, Ansible gathers facts at the beginning of each play.
На Хабре есть статья, которая и тему сбора фактов затрагивает, глянь ;-)
Vitalii
есть у кого идеи, почему эта конструкция не фейлится? - hosts: localhost gather_facts: false vars: testvar: - test_var: "test" - test_var: "{{ test }}" tasks: - debug: var=item when: item.test_var is defined loop: "{{ testvar }}"
Vitalii
а должна?
"{{ test }}" не задефайнен
manefesto
короче я мозг сломал хочу что-то вроде вот такого inventory [servers] master01-nomad1 ansible_host=192.168.88.201 [clients] agent01-nomad1 ansible_host=192.168.88.202 [servers:nfs] master01-nomad1 ansible_host=192.168.88.20 ну и роль nfs чтобы катилась только на servers:nfs
manefesto
у меня подготовка кластер и вот такой плейбук - hosts: all roles: - common - consul - nomad - nfs и я что-то делаю явно не так
manefesto
кажется я дебил можно ведь разбить на - hosts: server - hosts: clients - hosts: nfs-server
Vladimir
привет. подскажите плз можно ли модулем get_url стянуть не на машину, которая указана в /etc/hosts и с которой работает в данный момент плейбук, а на локальную машину где крутится ансибл
Grek 🇺🇦
local_action or delegate_to
Vladimir
а как ему dest_path указать чтобы дальше по таске с ним работать с этим файлом? например если win_copy будет идти из files/bla.txt , то dest: files/bla.txt он найти не может
Grek 🇺🇦
задача то у вас какая?
Vladimir
ансиблом стянуть файл с фтп и залить на машину. сама машина фтп не видит
Grek 🇺🇦
вообще - так же как и обычно, только он скачается на ансибл контроллер
Elenhil
Господа, а какой самый anisble-way мержить дикты из разных файлов? Хочу иметь в одной переменной ключи и из vars роли, и из group_vars
George
Господа, а какой самый anisble-way мержить дикты из разных файлов? Хочу иметь в одной переменной ключи и из vars роли, и из group_vars
Лучше не мержить. Заполняй итоговый словарь переменными, которые можно определять откуда угодно.
Vladimir
вообще - так же как и обычно, только он скачается на ансибл контроллер
т.е. юзать dest в какую-то локальную системную папку типа /tmp/bla.txt а потом оттуда сделать win_copy на ремоут машину?
Vladimir
ща гляну, спасибо
Elenhil
Лучше не мержить. Заполняй итоговый словарь переменными, которые можно определять откуда угодно.
ммм. Ну вот у меня в голове концепт. Есть некий дикт который сосется и обрабатывается ролью. Часть ключей в этом дикте должна быть одинакова для всех машин. Часть должна приходить из group_vars. Причем может из нескольких одновременно
Elenhil
Т.к. непонятно что за список групп будет у машины, хардкодить не вариант
George
Все, что в этом словаре может быть поменяно - переменные. Сам словарь а vars роли.
George
Если будешь мержить словари, будет больно. В основном тому, кто сопровождать будет.
Elenhil
вот у меня темплейтилка, которая выпускает сертификаты. Темплейтилка ставится везде где надо и выпускает разные сертификаты для разных сервисов. На одной машине может быть несколько относительно произвольных сервисов
Elenhil
Темплейтилке надо сказать имя сервиса и cmd.
Elenhil
В солте я бы это сделал написанием имени и cmd в словарь и мержем оных. А как это сделать в ансибле?
Отделение Bereke Bank
Может тебе нужны ансибловые openssl модули?
George
И что мешает вызывать соответствующий модуль ансибла с параметрами, нужными плейбуке?
Elenhil
И что мешает вызывать соответствующий модуль ансибла с параметрами, нужными плейбуке?
то что там есть конфиг. В конфиге есть список с файлами, которые должны обновляться. Этот список зависит от того, какие роли накатываются на машину.
Elenhil
можно написать 100500 строчек внутри jinja темплейта на все случаи жизни, но мне это не очень нравится
George
Т.е. ты хочешь принимать решение внутри роли или шаблона о том, для каких сервисов делать конфигурацию? Подозрительно напоминает программирование на ансибле.
George
Особенно в районе 'в зависимости от ролей' в другой роли.
Elenhil
или так {% if a is defined %} name: {{ a.name }} cmd: {{ a.cmd }} {% endif %} {% if b is defined %} name: {{b.name}} cmd: {{b.cmd}} {% endif %} и так пять раз или {% for name, cmd in dict.items() %} name: {{name}} cmd: {{cmd}} {% endif %}
George
Есть третий вариант - сформировать список для роли внутри play. Никаких if'ов, просто перечисление.
Elenhil
но для второго нужен мерженный дикт
Elenhil
хм. Вариант, да
Sergey
- name: Creates test directory file: path: /tmp/test state: directory when: - "ansible_role == 'test'" - name: Use 'argv' to send a command as a list - leave 'command' empty shell: kubeadm token create --print-join-command register: join_command when: - "ansible_role == 'test'"
Sergey
коллеги подскажите плиз уже всю голову сломал
Sergey
почему создание директории отрабатывает при услоии
Sergey
а команда не хотит на ноде выполнятся скипается
Sergey
толи бага не могу понять
George
Я ничего не понял из того, что ты сказал. Переформулируй плиз
Ivan
тебе к амарао
Ivan
он там в бинго играл
Александр
А как вообще по феншую разместить в разных репах гитлаба ансибловские инвентори, варсы, роли и плейбуки? У меня сейчас инвентори и хост/груп варсы в одном репозитории, плейбуки/роли в другом репозитории. Проекты, которые надо деплоить, в своих отдельных группах/репах. Сейчас я уже использую в основном раннеры с докер-экзекутором. Так вот, когда ансиблом надо задеплоить тот или иной проект я соответственно сначала в gitlab ci в прескрипте тяну инвентори, варсы и нужный плейбук/роль на раннер, а потом уже там работает этот вытащенный плейбук/роль. Так то всё это работает конечно, но это вообще нормально, или я завелосипедил чего?
Sergey
Запускаю таску условия одинаковые для запуска, но любые команды shell или command игнорируются
Sergey
Другие как создания директории итд итп работает
i4l
то есть вот из тех двух первая выполнится, а вторая скипнется
i4l
и они в одном плее да?
Sergey
так точно
Sergey
и такое только с command и shell
Sergey
с остальными все ок
i4l
а есть -vvv ?
Sergey
- name: Change the working directory to somedir/ before executing the command. shell: echo 123 args: chdir: / creates: /tmp/somelog.txt when: - "ansible_role == 'test'"
Sergey
вот пока не сделал вот так creates: /tmp/somelog.txt
Sergey
мистика какая то
Отделение Bereke Bank
Sergey
млин вот я наркоман
Sergey
—запускал с check
Sergey
ключем ))) а команды не выполняются когда драй ран режим)))
Александр
у меня в репе проекта лежали инвентори и плейбуки. роли были подключены либо как сабмодули, либо в requirements.yml жоба в before_script запускала ansible-galaxy install -r ./requirements.yml а дальше в самой жобе уже плейбук
Это наверное хорошо, если проект один. А если проектов не один-два, а сотня? В каждом держать свои инвентори варсы и плейбуки? Это же всё поддерживать надо, обновлять тот же инвентори и варсы везде в каждом проекте придётся. Или я что-то не догоняю?
Отделение Bereke Bank
Александр
Мда, автоматизация всего и вся тянет за собой всё больше и больше, одно за другое цепляется. А совсем недавно у меня был просто один хост с ансиблом, где всё собственно и хранилось и запускалось по надобности вручную, но этому тоже настал предел в один прекрасный момент :)
Александр
Да у меня просто сейчас сделан один большой статичный инвентори, там по группам всё разбито, соответственно переменные также по группам и хостам, ну и вот это всё. :) Инфраструктура тоже подросла последнее время, за сотню хостов уже перевалило, для неё отдельные плейбуки/роли тоже. Надо подумать в общем, к чему в итоге прийти в этом плане. :)
Александр
Дичь жи. Раскладывать в разные репы, чтобы потом мудохаться со склеиванием в одно?
Так вот и хочу сделать, чтоб не дичь была. У меня таких проектов мелких много надо деплоить ансиблом, больше сотни, все они немного отличаются, и их деплоить надо по-разному и на разные хосты. А инвентори один и hostvars и groupvars тоже сейчас в одном месте. Вот и приходиться при деплое каждого проекта на раннер в контейнере (docker executor) вытаскивать сначала инвентори и переменные из общей репы ансибла, а потом уже только всё остальное, плейбуки и т.д. Понимаю, что что-то я здесь неправильно горожу, но как упростить, чёт не понял пока.
Long
У нас на работе была мода раскладывать компоненты продукта по отдельным репам. Потом замучались с настройками сборки. Не делайте так, монорепа зэ бест.
Александр
У нас на работе была мода раскладывать компоненты продукта по отдельным репам. Потом замучались с настройками сборки. Не делайте так, монорепа зэ бест.
Ну у нас вот полирепа сейчас получается. Разрабов более 20, все в разных местах. Так порешили делать, пока с этим ничего не поделать. С монорепой в таких условиях тоже не особо гуд.