Oleg
manefesto
ты факты сначала собери
Ivan
она может быть не на всех серверах
manefesto
я вот так делал
- name: gather facts from servers
setup:
delegate_to: "{{item}}"
delegate_facts: True
loop: "{{groups['servers']}}
Sergey
manefesto
ну теперь то я знаю =)
Sergey
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
Grek 🇺🇦
Vladimir
ща гляну, спасибо
Elenhil
Т.к. непонятно что за список групп будет у машины, хардкодить не вариант
George
Все, что в этом словаре может быть поменяно - переменные. Сам словарь а vars роли.
George
Если будешь мержить словари, будет больно. В основном тому, кто сопровождать будет.
Elenhil
Elenhil
вот у меня темплейтилка, которая выпускает сертификаты. Темплейтилка ставится везде где надо и выпускает разные сертификаты для разных сервисов. На одной машине может быть несколько относительно произвольных сервисов
Elenhil
Темплейтилке надо сказать имя сервиса и cmd.
Elenhil
В солте я бы это сделал написанием имени и cmd в словарь и мержем оных. А как это сделать в ансибле?
Отделение Bereke Bank
Может тебе нужны ансибловые openssl модули?
George
Elenhil
George
И что мешает вызывать соответствующий модуль ансибла с параметрами, нужными плейбуке?
Elenhil
можно написать 100500 строчек внутри jinja темплейта на все случаи жизни, но мне это не очень нравится
George
Т.е. ты хочешь принимать решение внутри роли или шаблона о том, для каких сервисов делать конфигурацию? Подозрительно напоминает программирование на ансибле.
George
Особенно в районе 'в зависимости от ролей' в другой роли.
Elenhil
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
А как вообще по феншую разместить в разных репах гитлаба ансибловские инвентори, варсы, роли и плейбуки?
У меня сейчас инвентори и хост/груп варсы в одном репозитории, плейбуки/роли в другом репозитории. Проекты, которые надо деплоить, в своих отдельных группах/репах.
Сейчас я уже использую в основном раннеры с докер-экзекутором.
Так вот, когда ансиблом надо задеплоить тот или иной проект я соответственно сначала в gitlab ci в прескрипте тяну инвентори, варсы и нужный плейбук/роль на раннер, а потом уже там работает этот вытащенный плейбук/роль.
Так то всё это работает конечно, но это вообще нормально, или я завелосипедил чего?
у меня в репе проекта лежали инвентори и плейбуки.
роли были подключены либо как сабмодули, либо в requirements.yml
жоба в before_script запускала ansible-galaxy install -r ./requirements.yml
а дальше в самой жобе уже плейбук
Sergey
млин вот я наркоман
Sergey
—запускал с check
Sergey
ключем ))) а команды не выполняются когда драй ран режим)))
Отделение Bereke Bank
citius
Александр
Мда, автоматизация всего и вся тянет за собой всё больше и больше, одно за другое цепляется.
А совсем недавно у меня был просто один хост с ансиблом, где всё собственно и хранилось и запускалось по надобности вручную, но этому тоже настал предел в один прекрасный момент :)
Отделение Bereke Bank
Александр
Да у меня просто сейчас сделан один большой статичный инвентори, там по группам всё разбито, соответственно переменные также по группам и хостам, ну и вот это всё. :)
Инфраструктура тоже подросла последнее время, за сотню хостов уже перевалило, для неё отдельные плейбуки/роли тоже.
Надо подумать в общем, к чему в итоге прийти в этом плане. :)
Sergey
А как вообще по феншую разместить в разных репах гитлаба ансибловские инвентори, варсы, роли и плейбуки?
У меня сейчас инвентори и хост/груп варсы в одном репозитории, плейбуки/роли в другом репозитории. Проекты, которые надо деплоить, в своих отдельных группах/репах.
Сейчас я уже использую в основном раннеры с докер-экзекутором.
Так вот, когда ансиблом надо задеплоить тот или иной проект я соответственно сначала в gitlab ci в прескрипте тяну инвентори, варсы и нужный плейбук/роль на раннер, а потом уже там работает этот вытащенный плейбук/роль.
Так то всё это работает конечно, но это вообще нормально, или я завелосипедил чего?
Дичь жи. Раскладывать в разные репы, чтобы потом мудохаться со склеиванием в одно?
Александр
Дичь жи. Раскладывать в разные репы, чтобы потом мудохаться со склеиванием в одно?
Так вот и хочу сделать, чтоб не дичь была. У меня таких проектов мелких много надо деплоить ансиблом, больше сотни, все они немного отличаются, и их деплоить надо по-разному и на разные хосты. А инвентори один и hostvars и groupvars тоже сейчас в одном месте. Вот и приходиться при деплое каждого проекта на раннер в контейнере (docker executor) вытаскивать сначала инвентори и переменные из общей репы ансибла, а потом уже только всё остальное, плейбуки и т.д.
Понимаю, что что-то я здесь неправильно горожу, но как упростить, чёт не понял пока.
Long
У нас на работе была мода раскладывать компоненты продукта по отдельным репам. Потом замучались с настройками сборки. Не делайте так, монорепа зэ бест.