Павел П.
Антон
Хочу из netbox переносить инфу по ip адресам в зону dns на ipa
Там вроде есть отдельный модуль для работы с днс впринципе
Антон
Да
Konstantin
То есть, предлагаете не трогать ipa для этого, а работать просто с dns?
Konstantin
Была такая мысль, но есть предположение, что могут портить жизнь всякие dns кеши
Konstantin
Там вроде есть отдельный модуль для работы с днс впринципе
Спасибо. Попробую с этой стороны подойти. Кеш по сути ничего страшного - когда протухнет, тогда и удалим в netbox
Timur
господа, есть разные сценарии развёртывания СУБД - из basebackup, из sql-дампа, поверх уже готовой раскатанной БД (тогда ничего делать не надо), с бэкапами и без (и разными методами бэкапов). как концептуально правильнее организовать соотв. роли? технически никто не мешает запихнуть всё в одну и рулить через переменные, но будет ли это _правильно_?
Timur
кто как делает?
Timur
делать ли разные роли для development-развёртываний и для прода (но тогда это логически неправильно - dev-среда должна быть максимально приближена к продакшену) или максимально унифицировать всё?
Timur
конфиг самого постгреса уже генерируется исходя из количества доступной памяти, т.е. хотя бы эту задачу я уже решил :)
Timur
но вот вопрос с самим развёртыванием остаётся открытым
Anonymous
Добрый день, у кого есть возможность поделиться советом: есть таска - hosts: infra remote_user: root tasks: - name: setup iptables command: iptables -t filter -N DOCKER retries: 3 delay: 1 register: result - debug: msg = {{ result }} таск отрабатывает, но выпадает в ошибку, т.к. прилетает месседж "Chain already exists" fatal: [028-16221]: FAILED! => { "changed": true, "cmd": [ "iptables", "-t", "filter", "-N", "DOCKER" ], "delta": "0:00:00.001868", "end": "2019-12-11 12:35:17.751483", "invocation": { "module_args": { "_raw_params": "iptables -t filter -N DOCKER", "_uses_shell": false, "argv": null, "chdir": null, "creates": null, "executable": null, "removes": null, "stdin": null, "stdin_add_newline": true, "strip_empty_ends": true, "warn": true } }, "msg": "non-zero return code", "rc": 1, "start": "2019-12-11 12:35:17.749615", "stderr": "iptables: Chain already exists.", "stderr_lines": [ "iptables: Chain already exists." ], "stdout": "", "stdout_lines": [] } каким образом можно сделать: - если прилетела ошибка "Chain already exists": скипать таску
Alex
какую таску?
Anonymous
Alex
если в нем падает ошибка - то никак :)
Anonymous
если в нем падает ошибка - то никак :)
этот момент наверняка предусмотрен, например задача: - настроить iptables запускать таск, до тех пор пока changed не будет true, но в случае если цепочка уже есть - скипнуть правильно ли понимаю, что ваша точка зрения в подобном случае просто напросто не пытаться это обработать и ехать дальше?
Alex
вы хотите скипнуть таск, если в нем ошибка без запуска таска?
Timur
Добрый день, у кого есть возможность поделиться советом: есть таска - hosts: infra remote_user: root tasks: - name: setup iptables command: iptables -t filter -N DOCKER retries: 3 delay: 1 register: result - debug: msg = {{ result }} таск отрабатывает, но выпадает в ошибку, т.к. прилетает месседж "Chain already exists" fatal: [028-16221]: FAILED! => { "changed": true, "cmd": [ "iptables", "-t", "filter", "-N", "DOCKER" ], "delta": "0:00:00.001868", "end": "2019-12-11 12:35:17.751483", "invocation": { "module_args": { "_raw_params": "iptables -t filter -N DOCKER", "_uses_shell": false, "argv": null, "chdir": null, "creates": null, "executable": null, "removes": null, "stdin": null, "stdin_add_newline": true, "strip_empty_ends": true, "warn": true } }, "msg": "non-zero return code", "rc": 1, "start": "2019-12-11 12:35:17.749615", "stderr": "iptables: Chain already exists.", "stderr_lines": [ "iptables: Chain already exists." ], "stdout": "", "stdout_lines": [] } каким образом можно сделать: - если прилетела ошибка "Chain already exists": скипать таску
жаль модуль iptables не умеет в создание цепочек :)
Anonymous
вы хотите скипнуть таск, если в нем ошибка без запуска таска?
почему, таск запустился: "cmd": [ "iptables", "-t", "filter", "-N", "DOCKER" ], но в результате выполнения получил ошибку, что цепьуже существует
Timur
последняя активность в PR, реализующем эту функциональность была 11 ноября
Timur
https://github.com/ansible/ansible/pull/32158
Anonymous
жаль модуль iptables не умеет в создание цепочек :)
в этом модуле не нашел каким образом можно подать флаг -N )))
Timur
тогда можно по-другому
Timur
tasks: - name: check that the DOCKER chain is present command: iptables -L DOCKER register: chain_present ignore_errors: yes - name: create chain if not present command: iptables -N DOCKER when: chain_present is failed
Timur
что-то в таком духе
Timur
(я не тестировал, так что могут быть ошибки, но идея понятна, думаю)
Anonymous
большое спасибо, а каким образом ты ловишь chain_present, получается как бы на памяти знаешь, что в оутпуте есть такая переменная?)
Timur
(.env) eill@debvirt:~$ ansible-playbook iptables.yml PLAY [localhost] *** TASK [check that the TESTCHAIN chain is present] *** fatal: [localhost]: FAILED! => {"changed": true, "cmd": ["iptables", "-L", "TESTCHAIN"], "delta": "0:00:00.002022", "end": "2019-12-11 14:48:57.543999", "msg": "non-zero return code", "rc": 1, "start": "2019-12-11 14:48:57.541977", "stderr": "iptables: No chain/target/match by that name.", "stderr_lines": ["iptables: No chain/target/match by that name."], "stdout": "", "stdout_lines": []} ...ignoring TASK [create chain if not present] *** changed: [localhost] PLAY RECAP *** localhost : ok=2 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=1 (.env) eill@debvirt:~$ sudo iptables -L TESTCHAIN Chain TESTCHAIN (0 references) target prot opt source destination
Timur
- hosts: localhost become: yes gather_facts: no vars: chain_name: TESTCHAIN tasks: - name: "check that the {{ chain_name }} chain is present" command: "iptables -L {{ chain_name }}" register: chain_present ignore_errors: yes - name: create chain if not present command: "iptables -N {{ chain_name }}" when: chain_present is failed
Anonymous
я же сам её создаю директивой register
большое спасибо :) ход мысли понял, буду тренироваться
Timur
@tgadiev не подскажете по концептуальному вопросу? Т.е. "как лучше сделать", а не "как сделать" :)
Timur
сейчас ещё раз пройдусь по best practices, вдруг упустил что
Timur
По сценариям - разделять на разные роли или делать одну с параметрами - можете решить только вы, руководствуясь здравым смыслом
Timur
Если большая часть тасков в разных сценариях совпадает, то логичнее делать общую роль
Timur
ну в общем-то да, на самом деле
Timur
А если большинство тасков разные, то логичнее наверное разные роли сразу делать
Timur
наверное, я всё-таки параметризую, а всякие специфичные вещи вынесу в инклюды
Timur
Роли нужны для упрощения поддержки и переиспользования кода
Timur
Соответственно так и нужно смотреть на их организацию
Timur
Разделение ролей между продом и другими окружениями делать не стоит
Timur
я не очень долго работаю с ansible - меньше года
Timur
Между окружениями разница должна быть в инвентаре и параметрах
Alexander
Ну, так, а параметры инвентаря?
В общем, я с delegate_to сделал, отлично работает. Это не правильно?
Alexander
Ну а инвентори, там всякая фигня по winrm - логин, пароль, порт, таймауты
Павел П.
В общем, я с delegate_to сделал, отлично работает. Это не правильно?
работает? десять раз подряд запустить работает? значит правильно))
Alexander
работает? десять раз подряд запустить работает? значит правильно))
Ну я к тому, может оно не правильно концептуально)
Alex
а как в ансибле декодировать файл, который был зашифрован с помощью вольта, перед копированием на удаленный сервер?
Alex
что то не смог найти примеров
Lamobot
а как в ансибле декодировать файл, который был зашифрован с помощью вольта, перед копированием на удаленный сервер?
https://docs.ansible.com/ansible/latest/user_guide/vault.html#file-level-encryption Ansible Vault can also encrypt arbitrary files, even binary files. If a vault-encrypted file is given as the src argument to the copy, template, unarchive, script or assemble modules, the file will be placed at the destination on the target host decrypted (assuming a valid vault password is supplied when running the play).
Alex
точно, спасибо
Alex
думал с файлами надо как то хитро
GDI
Коллеги, всем привет. Подскажите как лучше, правильно и с помощью какого модуля можно реализовать проверку конфига. Нашел модуль grep, или есть более адекватный путь - бест практикс? https://www.mydailytutorials.com/using-grep-commands-ansible-tasks/
UglyKoyote
какого конфига?
UglyKoyote
многие популярные сервисы умеют сами проверять свой конфиг
GDI
какого конфига?
В данном случае docker info |grep overlay2
GDI
многие популярные сервисы умеют сами проверять свой конфиг
Пойду курну докеровский модуль. Спасибо)
UglyKoyote
я про другое говорил) но да, и это тоже есть
UglyKoyote
но я тут часто слышу ругань на функционал данного модуля, многим не подходит
GDI
я про другое говорил) но да, и это тоже есть
Я просто совсем зеленый в ансимбле, по этому интересно мнение опытных коллег :)
GDI
Еще раз спасибо.
GDI
Это не модуль. Это галимый башсибл
Значит определенно идти в докеровский модуль и использовать его. Спасибо!)
Artem
Добрый день подскажите можно ли использовать переменную в переменной? Либо возможно посоветуете как это можно сделать по другом. Собираю ansible факты с хостов по сетевым интерфейсам потом данные запихиваю в модуль netbox_interface, мне нужно каким то образом получить список сетевых интерфейсов (ansible_interfaces) и подставить поочерёдно результаты в место eno1 - name: Create interface within Netbox with only required information netbox_interface: netbox_url: netbox_token: data: enabled: "{{ item.enabled }}" device: "{{ inventory_hostname }}" name: "{{ item.name }}" mac_address: "{{ item.mac_address }}" form_factor: 1000Base-T (1GE) mtu: "{{ item.mtu }}" #description: "{{ item.module }}" state: present delegate_to: 127.0.0.1 with_items: - { enabled: "{{ ansible_eno1.active }}", name: "{{ ansible_eno1.device }}", mac_address: "{{ ansible_eno1.macaddress }}", mtu: "{{ ansible_eno1.mtu }}", module: "{{ ansible_eno1.module }}" }
Elastic
День добрый. есть вопрос - как для нескольких тасок в плейбуке поставить рабочую директорию? Условно, в одной таске склонил репу и надо работать в ее директории остальным таскам с плейбуки. а сейчас получается, каждая таска ранается в home директории юзика, и дока ансибла на этот счет говорит юзать command(chdir) или shell: 'some commands', но это не то.
Timur
Ну и?
Timur
В чем проблема?
Artem
В чем проблема?
Не совсем понимаю как сделать переменную в переменной