Aleksey
я использую git сабмодули но это не очень удобно
George
а что ты хочешь? ansible-galaxy умеет тянуть и из гит репо напрямую
George
т.е. субмодули выкидываешь - прописываешь роли полными https+git путями
Aleksey
посмотрю еще раз на ansible-galaxy, может этот вариант будет удобнее. Я просто хочу вынести стандартные конфигурации и использовать их в разных проектах.
George
ты всегда можешь роль опубликовать в галакси, которая основной репозиторий - но это не всегда допустимо, т.к. в роли может быть специфичная для компании инфа. поэтому - https://t.me/pro_ansible/108770
Aleksey
ок, спасибо!
Timur
Но вообще из ролей специфичную инфу лучше убирать.
George
да
George
я тебе об этом выше говорю
George
https://t.me/pro_ansible/108770
Timur
А если все же роли непубличные, ansible-galaxy может тянуть из приватных реп?
# from galaxy - src: yatesr.timezone # from GitHub - src: https://github.com/bennojoy/nginx # from GitHub, overriding the name and specifying a specific tag - src: https://github.com/bennojoy/nginx version: master name: nginx_role # from a webserver, where the role is packaged in a tar.gz - src: https://some.webserver.example.com/files/master.tar.gz name: http-role # from Bitbucket - src: git+https://bitbucket.org/willthames/git-ansible-galaxy version: v1.4 # from Bitbucket, alternative syntax and caveats - src: https://bitbucket.org/willthames/hg-ansible-galaxy scm: hg # from GitLab or other git-based scm, using git+ssh - src: git@gitlab.company.com:mygroup/ansible-base.git scm: git version: "0.1" # quoted, so YAML doesn't parse this as a floating-point value
Aleksey
немножко не пойму как аутентификация происходит
Timur
немножко не пойму как аутентификация происходит
https://docs.ansible.com/ansible/latest/reference_appendices/galaxy.html#authenticate-with-galaxy
George
по ssh ключу
Timur
по ssh ключу
Не обязательно
George
либо сделай токен в гитлабе и вшей его в ссылку
George
вариантов масса )
Timur
Самый секьюрный - сгенерить токен и передать его ansible-galaxy через ansible-galaxy login
Aleksey
понял, благодарю!
Timur
Работает даже с двухфакторкой
Alexander
Подскажите, как в таске указать, что код выхода, отличный от 0, это ок?
Max
failed_when
Alexander
Понял, спасибо
kbks
Приветы. А напомните пожалуйста, я могу в shell указать command < {{ file }} без копирования этого самого file из ./files на хост ?
George
ты хочешь всосать в переменнeую file само тело файла ?
George
ну, поверь - чудес не бывает - и ты на трафик равный объему файла все равно попадаешь, так что - без разницы
kbks
ой, туплю. там без переменной( я хочу скормить команде содержимое файла. вот и думаю можно ли это сделать без копирования файла на удаленный хост
kbks
если копировать, получается +2 действия. Скопировать и удалить после.
inqfen
А откуда шелл на хосте возьмёт файл для перенеправления вывода, если файла нет?
inqfen
если копировать, получается +2 действия. Скопировать и удалить после.
Ну попробуй застегнуть ширинку на штанах, не надевая штаны, а то их надевать тоже + действие
kbks
вот потому и спрашиваю можно ли)
inqfen
Но почему-то мне кажется, что обычно ты его выполняешь
kbks
туплю. решил задачу без файла
kbks
сразу кормлю нужную инфу без копирования файла
inqfen
Вот это другое дело)
🦆Nikita
- name: Установки принтеров {{ inventory_hostname }} include_tasks: /etc/ansible/roles/print/tasks/print.yml vars: Args: "{{ (lookup('file', '/etc/ansible/roles/win_backup/tmp/Users_{{ inventory_hostname }}.txt') | from_json).Printers }}" when: (lookup('file', '/etc/ansible/roles/win_backup/tmp/Users_{{ inventory_hostname }}.txt') | from_json) | json_query('Printers[*].device_uri') is defined кто знает, как можно написать условие на наличия в файле обьекта "device_uri"? уже задолбался с ситаксисом: when: {{ (lookup('file', '/etc/ansible/roles/win_backup/tmp/Users_{{ inventory_hostname }}.txt') | from_json) | json_query('Printers[*].device_uri') }} is defined или when: {% (lookup('file', '/etc/ansible/roles/win_backup/tmp/Users_{{ inventory_hostname }}.txt') | from_json) | json_query('Printers[*].device_uri') %} is defined или when: (lookup('file', '/etc/ansible/roles/win_backup/tmp/Users_{{ inventory_hostname }}.txt')) | json_query('Printers[*].device_uri') в файле лежат массивы json: {"Users": [{"Name": "Admin1"}, {"Name": "admi2n"}], "Printers": [{"description": null, "device_uri": "XPSPort:"}, {"description": null, "device_uri": "172.18.4.10"}, {"description": null, "device_uri": "SHRFAX:"}]}
George
- name: Установки принтеров {{ inventory_hostname }} include_tasks: /etc/ansible/roles/print/tasks/print.yml vars: Args: "{{ (lookup('file', '/etc/ansible/roles/win_backup/tmp/Users_{{ inventory_hostname }}.txt') | from_json).Printers }}" when: (lookup('file', '/etc/ansible/roles/win_backup/tmp/Users_{{ inventory_hostname }}.txt') | from_json) | json_query('Printers[*].device_uri') is defined кто знает, как можно написать условие на наличия в файле обьекта "device_uri"? уже задолбался с ситаксисом: when: {{ (lookup('file', '/etc/ansible/roles/win_backup/tmp/Users_{{ inventory_hostname }}.txt') | from_json) | json_query('Printers[*].device_uri') }} is defined или when: {% (lookup('file', '/etc/ansible/roles/win_backup/tmp/Users_{{ inventory_hostname }}.txt') | from_json) | json_query('Printers[*].device_uri') %} is defined или when: (lookup('file', '/etc/ansible/roles/win_backup/tmp/Users_{{ inventory_hostname }}.txt')) | json_query('Printers[*].device_uri') в файле лежат массивы json: {"Users": [{"Name": "Admin1"}, {"Name": "admi2n"}], "Printers": [{"description": null, "device_uri": "XPSPort:"}, {"description": null, "device_uri": "172.18.4.10"}, {"description": null, "device_uri": "SHRFAX:"}]}
пожалуйста, просто умоляю - используйте форматирование
George
- name: Установки принтеров {{ inventory_hostname }} include_tasks: /etc/ansible/roles/print/tasks/print.yml vars: Args: "{{ (lookup('file', '/etc/ansible/roles/win_backup/tmp/Users_{{ inventory_hostname }}.txt') | from_json).Printers }}" when: (lookup('file', '/etc/ansible/roles/win_backup/tmp/Users_{{ inventory_hostname }}.txt') | from_json) | json_query('Printers[*].device_uri') is defined
George
пример
Sergey
- name: Установки принтеров {{ inventory_hostname }} include_tasks: /etc/ansible/roles/print/tasks/print.yml vars: Args: "{{ (lookup('file', '/etc/ansible/roles/win_backup/tmp/Users_{{ inventory_hostname }}.txt') | from_json).Printers }}" when: (lookup('file', '/etc/ansible/roles/win_backup/tmp/Users_{{ inventory_hostname }}.txt') | from_json) | json_query('Printers[*].device_uri') is defined кто знает, как можно написать условие на наличия в файле обьекта "device_uri"? уже задолбался с ситаксисом: when: {{ (lookup('file', '/etc/ansible/roles/win_backup/tmp/Users_{{ inventory_hostname }}.txt') | from_json) | json_query('Printers[*].device_uri') }} is defined или when: {% (lookup('file', '/etc/ansible/roles/win_backup/tmp/Users_{{ inventory_hostname }}.txt') | from_json) | json_query('Printers[*].device_uri') %} is defined или when: (lookup('file', '/etc/ansible/roles/win_backup/tmp/Users_{{ inventory_hostname }}.txt')) | json_query('Printers[*].device_uri') в файле лежат массивы json: {"Users": [{"Name": "Admin1"}, {"Name": "admi2n"}], "Printers": [{"description": null, "device_uri": "XPSPort:"}, {"description": null, "device_uri": "172.18.4.10"}, {"description": null, "device_uri": "SHRFAX:"}]}
#странное
Sergey
Как минимум нужно отказаться от использования {{, т.к. условия в 'when' _уже_ ставятся в templates
Vitaliy
Если мне хочется получать в выводе список установленных пакетов, на сколько плохим будет решение применять loop в модуле установки пакетов? Иначе просто получаем эфект подвисания. пока множество пакетов не будет установлено. А так, видно какой пакет ужже установлен...
Vitaliy
В доке пишут slower and may cause issues with interdependencies Ну по скорости норм было, проблем с зависимостями тоже небыло.
Vitaliy
Ладно, сам ответил на вопрос)
🦆Nikita
почему-то условие: when: (lookup('file', '/etc/ansible/roles/win_backup/tmp/Users_{{ inventory_hostname }}.txt') | from_json) | json_query('Printers[*].device_uri') is defined отрабатывает даже если такого обьекта нету "msg": [] когда есть: "msg": [ "XPSPort:", "172.18.4.10", "SHRFAX:" ]
Sergey
пустой список, или список с элементами
Aleksey
Ребята, скажите, вы ансиблом докер контейнеры как разворачиваете?
Ждун
https://docs.ansible.com/ansible/latest/modules/docker_container_module.html
Aleksey
https://docs.ansible.com/ansible/latest/modules/docker_container_module.html
Это понятно, просто может кто-то compose собирает и потом запускает может еще какие-то кейсы
George
просто смотри какой кейс. напрямую ансиблом - у тебя нужен python-docker на удаленной машине, все рулишь переменными с компоузом - тебе нужен #компост, все его зависимости (там еще приколы с совместимостью), нужно доставлять сам компоуз файл на удаленную машину
George
потом компоуз отрабатывает через вызовы API docker'а, что в случае 100500 контейнеров может быть долго и больно
George
вот и вопрос - а зачем оно нужно? Единственный плюс, что компоуз - трекает те контейнеры, которые он создал, в ансибле - для этого придется немного написать обвязки
Aleksey
Понял
George
Понял
хочу услышать встречные комментарии и вопросы, предложения
Aleksey
хочу услышать встречные комментарии и вопросы, предложения
Мне просто интересно как вы предпочитаете организовывать управление контейнерами, я композ сам не люблю
Aleksey
Обычно стараюсь выносить в общую роль и использовать в разных проектах
Aleksey
Например ansible-role-nginx
inqfen
А если нет, то одним ансиблом все можно делать
George
ок, понял
George
т.е. мы думаем в одном направлении
Aleksey
ок, понял
но такую роль приходится сопровождать, тестировать и это несет накладные расходы
Aleksey
Используете какие-то паттерны для тестирования ролей, интеграцией с ci системами?
inqfen
Molecule
Aleksey
ci через travis?
George
Используете какие-то паттерны для тестирования ролей, интеграцией с ci системами?
ну, как минимум хорошая идея их хоть как-нибудь тестировать
inqfen
ci через travis?
Да без разницы через что
Oleg
Здравствуйте! А можно ли как то в инвентори создать переменную в которой будет массив? пример: db_name: db1, db2, db3 чтобы потом в плейбуке с помощью loop она подставлялась значениями?
George
а зачем ?
George
скажем - так. Все зависит от того, в какой момент ты хочешь значения подставлять. В конце-концов - ты в переменную всегда можешь засунуть джисон, а потом его десериализовать, и потом сделать по его элементам лукап
George
пример сейчас не найду, но это не должно выглядеть гипер-сложно