Aleksey
я использую git сабмодули но это не очень удобно
George
а что ты хочешь? ansible-galaxy умеет тянуть и из гит репо напрямую
George
т.е. субмодули выкидываешь - прописываешь роли полными https+git путями
Aleksey
посмотрю еще раз на ansible-galaxy, может этот вариант будет удобнее. Я просто хочу вынести стандартные конфигурации и использовать их в разных проектах.
George
ты всегда можешь роль опубликовать в галакси, которая основной репозиторий - но это не всегда допустимо, т.к. в роли может быть специфичная для компании инфа.
поэтому - https://t.me/pro_ansible/108770
Aleksey
ок, спасибо!
Timur
Timur
Timur
Но вообще из ролей специфичную инфу лучше убирать.
Aleksey
George
да
Gleb
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
немножко не пойму как аутентификация происходит
George
по ssh ключу
George
либо сделай токен в гитлабе и вшей его в ссылку
George
вариантов масса )
Timur
Самый секьюрный - сгенерить токен и передать его ansible-galaxy через ansible-galaxy login
Aleksey
понял, благодарю!
Timur
Работает даже с двухфакторкой
Alexander
Подскажите, как в таске указать, что код выхода, отличный от 0, это ок?
Max
failed_when
Max
Alexander
Понял, спасибо
kbks
Приветы. А напомните пожалуйста, я могу в shell указать command < {{ file }}
без копирования этого самого file из ./files на хост ?
George
ты хочешь всосать в переменнeую file само тело файла ?
George
ну, поверь - чудес не бывает - и ты на трафик равный объему файла все равно попадаешь, так что - без разницы
kbks
ой, туплю. там без переменной(
я хочу скормить команде содержимое файла.
вот и думаю можно ли это сделать без копирования файла на удаленный хост
kbks
если копировать, получается +2 действия. Скопировать и удалить после.
inqfen
А откуда шелл на хосте возьмёт файл для перенеправления вывода, если файла нет?
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
Sergey
пустой список, или список с элементами
Aleksey
Ребята, скажите, вы ансиблом докер контейнеры как разворачиваете?
Ждун
https://docs.ansible.com/ansible/latest/modules/docker_container_module.html
George
George
Alexey
George
просто смотри какой кейс.
напрямую ансиблом - у тебя нужен python-docker на удаленной машине, все рулишь переменными
с компоузом - тебе нужен #компост, все его зависимости (там еще приколы с совместимостью), нужно доставлять сам компоуз файл на удаленную машину
George
потом компоуз отрабатывает через вызовы API docker'а, что в случае 100500 контейнеров может быть долго и больно
George
вот и вопрос - а зачем оно нужно? Единственный плюс, что компоуз - трекает те контейнеры, которые он создал, в ансибле - для этого придется немного написать обвязки
Aleksey
Понял
George
Понял
хочу услышать встречные комментарии и вопросы, предложения
Aleksey
Обычно стараюсь выносить в общую роль и использовать в разных проектах
inqfen
Aleksey
Например ansible-role-nginx
inqfen
А если нет, то одним ансиблом все можно делать
George
ок, понял
George
т.е. мы думаем в одном направлении
Aleksey
ок, понял
но такую роль приходится сопровождать, тестировать и это несет накладные расходы
Aleksey
Используете какие-то паттерны для тестирования ролей, интеграцией с ci системами?
inqfen
Molecule
Aleksey
ci через travis?
George
Oleg
Здравствуйте! А можно ли как то в инвентори создать переменную в которой будет массив?
пример: db_name: db1, db2, db3 чтобы потом в плейбуке с помощью loop она подставлялась значениями?
George
а зачем ?
George
скажем - так. Все зависит от того, в какой момент ты хочешь значения подставлять. В конце-концов - ты в переменную всегда можешь засунуть джисон, а потом его десериализовать, и потом сделать по его элементам лукап
George
пример сейчас не найду, но это не должно выглядеть гипер-сложно