Павел П.
Антон
Konstantin
Антон
Да
Konstantin
То есть, предлагаете не трогать ipa для этого, а работать просто с dns?
Konstantin
Была такая мысль, но есть предположение, что могут портить жизнь всякие dns кеши
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
какую таску?
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 не умеет в создание цепочек :)
Timur
последняя активность в PR, реализующем эту функциональность была 11 ноября
Timur
https://github.com/ansible/ansible/pull/32158
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
Timur
Timur
Timur
Timur
Timur
@tgadiev не подскажете по концептуальному вопросу? Т.е. "как лучше сделать", а не "как сделать" :)
Timur
Timur
Timur
сейчас ещё раз пройдусь по best practices, вдруг упустил что
Timur
По сценариям - разделять на разные роли или делать одну с параметрами - можете решить только вы, руководствуясь здравым смыслом
Timur
Если большая часть тасков в разных сценариях совпадает, то логичнее делать общую роль
Timur
ну в общем-то да, на самом деле
Timur
А если большинство тасков разные, то логичнее наверное разные роли сразу делать
Timur
наверное, я всё-таки параметризую, а всякие специфичные вещи вынесу в инклюды
Timur
Роли нужны для упрощения поддержки и переиспользования кода
Timur
Соответственно так и нужно смотреть на их организацию
Timur
Разделение ролей между продом и другими окружениями делать не стоит
Timur
я не очень долго работаю с ansible - меньше года
Timur
Между окружениями разница должна быть в инвентаре и параметрах
Timur
Alexander
Ну а инвентори, там всякая фигня по winrm - логин, пароль, порт, таймауты
Павел П.
Alexander
Alex
а как в ансибле декодировать файл, который был зашифрован с помощью вольта, перед копированием на удаленный сервер?
Alex
что то не смог найти примеров
Anonymous
Alex
точно, спасибо
Alex
думал с файлами надо как то хитро
GDI
Коллеги, всем привет. Подскажите как лучше, правильно и с помощью какого модуля можно реализовать проверку конфига. Нашел модуль grep, или есть более адекватный путь - бест практикс?
https://www.mydailytutorials.com/using-grep-commands-ansible-tasks/
UglyKoyote
какого конфига?
UglyKoyote
многие популярные сервисы умеют сами проверять свой конфиг
GDI
UglyKoyote
я про другое говорил) но да, и это тоже есть
UglyKoyote
но я тут часто слышу ругань на функционал данного модуля, многим не подходит
GDI
Еще раз спасибо.
Timur
Timur
Artem
Elastic
День добрый.
есть вопрос - как для нескольких тасок в плейбуке поставить рабочую директорию? Условно, в одной таске склонил репу и надо работать в ее директории остальным таскам с плейбуки. а сейчас получается, каждая таска ранается в home директории юзика, и дока ансибла на этот счет говорит юзать command(chdir) или shell: 'some commands', но это не то.
Artem
Timur
Timur
Timur
В чем проблема?
Artem
В чем проблема?
Не совсем понимаю как сделать переменную в переменной