
bebebe
23.08.2018
10:13:13

Andrey
23.08.2018
10:13:38
я не это имел в виду.
я имел в виду что в переменных (например группы) я укажу хост БД, переменная будет использована для генерации конфига приложения.
и одновременно в списке хостов мне нужно будет внести этот же хост (например в группу database)
получается что я одну и ту же информацию продублирую.
или я чего-то не понимаю или можно этого избежать?

bebebe
23.08.2018
10:17:39
"{{ hostvars[groups['database'][0]].intentory_hostname }}"

Google

Andrey
23.08.2018
10:18:17
а так делают вообще? или я что-то на более высоком уровне неправильно делаю?

bebebe
23.08.2018
10:18:44
я делаю, другие - не знаю

Andrey
23.08.2018
10:19:02

bebebe
23.08.2018
10:26:36

Paul
23.08.2018
10:29:07
у крупных систем (типа шефа) для этих целей используется поиск

bebebe
23.08.2018
10:30:19

Paul
23.08.2018
10:30:35
хосты с ролью сервера БД

bebebe
23.08.2018
10:31:24
типа hostvars['database-role'][0].inventory_hostname ?

Paul
23.08.2018
10:31:36
типа того
но вообще какой именно цели вы хотите добиться?
что именно вы хотите сделать?

Alex
23.08.2018
10:32:06
уменьшить дублируемость кода

Google

Andrey
23.08.2018
10:32:08
избежать дублирования.

Paul
23.08.2018
10:32:26

Andrey
23.08.2018
10:32:30
чтобы те, кто будут потом править/адаптировать плейбук проще жили

Paul
23.08.2018
10:32:34
давайте начнем с самого начала, цель

bebebe
23.08.2018
10:33:34
цель проста, поменял в одном месте, не поменял в другом, не консистенность

Andrey
23.08.2018
10:33:44

bebebe
23.08.2018
10:34:04
но я бы все таки настоял, что-бы создавались дополнитеьные dns зоны для разруливания "где сервер"

Andrey
23.08.2018
10:34:29
ну можно и консул сделать и ему инвентори скормить, но хочется без такого оверхеда

bebebe
23.08.2018
10:34:54
это решение не требует консула.

Andrey
23.08.2018
10:35:04
я про днс.

bebebe
23.08.2018
10:35:16
и я про днс

Vadim
23.08.2018
10:35:23
при установке этой самой БД делайте set_fact: db_hostname: foo.example.com и потом читайте этот факт?

Andrey
23.08.2018
10:36:57
и я про днс
я как пример привел - динамическое нахождение сервисов тоже вариант, но на мой взгляд, поднимать DNS если можно сразу все сгенерировать - лишне

bebebe
23.08.2018
10:38:38
такая организация с архитектурной точки зрения правильнее. про "поднимать DNS" не понял пассаж, добавить CNAME запись в зону делается один раз.

Andrey
23.08.2018
10:38:46
но я сделаю сначала как bebebe предложил, еще раз спасибо

bebebe
23.08.2018
10:38:54
и далее изменяется как только у вас база переезжает с одного место в другое

Andrey
23.08.2018
10:39:00
на каждой машине?

bebebe
23.08.2018
10:39:19
какое доменное имя у вашего компьютера с базой данных?

Andrey
23.08.2018
10:39:40
нету, ip только непубличный

Google

bebebe
23.08.2018
10:41:25
поднимите dns серевер с доменом, .infra, добавьте туда ваши сервера, пропишите в /etc/resolv.conf на ваши машинах
все что не .infra, пересылайте forwarding на dns вашего провайдера
это можно сделать подняв один docker контейнер. есть так же роли которые это сделают из коробки

Andrey
23.08.2018
10:42:31
я понял решение. и по вашему это не лишне? не проще сразу при деплое все сгенерировать?

bebebe
23.08.2018
10:43:22
вам виднее безусловно, я полной картины не знаю, может быть вы над домашним проектом работаете и впринципе пофик

Andrey
23.08.2018
10:44:19
потому что в конечном счете конфиг днс тоже будет сгенерирован при деплое и вариант что-то поменять - запустить ansible снова, не предполагается что руками будут лазать. конечно при изменении хоста БД в моем варианте приложениям рестарт понадобится, но для меня это несущественно.

bebebe
23.08.2018
10:45:20
можно делать dnsupdate при изменении вашей инфры
https://docs.ansible.com/ansible/2.6/modules/nsupdate_module.html
впрочем это уже давно оффтопик
объяснять зачем в 2018 нужен dns как то даже неловко, впрочем как и в 2004

Andrey
23.08.2018
10:45:50
понял, спасибо за пищу для размышлений :)

Sergey
23.08.2018
10:58:51


Andrey
23.08.2018
11:01:56
Здесь нужно понимание решаемой задачи. Если "тупо указать единственный хост БД" - это одно, просто подстановка, как указано выше. Если нужно обеспечивать какую-то балансировку - это другое, и Ансибл не сможет решить за вас, как именно это нужно сделать, а самое главное - зачем. Наиболее очевидный, но и наиболее скучный вариант - клиент умеет перебирать хосты, тогда состав группы серверов БД туда пишется. Менее очевидный и более сложный - есть какая-то внешняя сущность (consul/etcd/zookeeper/younameit), куда клиент обращается с вопросом "дай-ка мне актуальное имя сервера БД".
я понял, спасибо. хотелось именно обойтись без внешней сущности, без service discovery вообще, по крайней мере на первом этапе, сервис не супер большой. возможно DNS и вариант, хотя посмотрев интернет, говорят что он не для этого (хоть и используют так) и нормальный заточенный под это сервис лучше.
спасибо за развернутые ответы


Danis
23.08.2018
15:18:33
Использую remote_user, есть способ передать пароль без set facts?
Или любой другой способ указать пароль без facts?

Vladimir
23.08.2018
18:03:58
Есть способ спрятать пароль ansible-vault

Constantin
23.08.2018
18:13:31

Admin
ERROR: S client not available

Paul
23.08.2018
18:39:19

Terminator
24.08.2018
06:30:44
@EvgenyLityushkin будет жить. Поприветствуем!

Joseph
24.08.2018
06:31:01
Приветствую друзья!
@varyumin в gitlab в секретную переменную
@varyumin ещё вариант - использовать сертификаты в смарткартах, но прямо с ansible я такого не использовал и полагаю, есть подводныеикамни

Google

Vladimir
24.08.2018
07:05:12

bebebe
24.08.2018
07:44:46

Joseph
24.08.2018
08:12:58
@varyumin да наверное так можно. Разве, что поколжовать над правами доступа как то. Чтобы запустить CI можно было но вывести переменную - нет

Terminator
24.08.2018
11:38:18
@deniswork81 будет жить. Поприветствуем!

den.work
24.08.2018
11:40:53
Коллеги, подскажите, как правильно работать из ансибла с приватными репозитариями в гите ?

bebebe
24.08.2018
11:42:16
ну и первая ссылка из гугла
https://www.jeffgeerling.com/blog/2018/cloning-private-github-repositories-ansible-on-remote-server-through-ssh

den.work
24.08.2018
11:43:27
ну может я не до конца понимаю, но условно на удаленом сервере, мне чтобы отклонировать репу, нужен будет приватный ключ, на УДАЛЕННОМ сервере. Куда ложить его не хочется

bebebe
24.08.2018
11:44:10
ssh-agent вам поможет в этом

den.work
24.08.2018
11:44:56
пойду попробую, спасибо за наводку

brestows
24.08.2018
11:48:29
Народ а кто-то сдавал экзамен у red hat по ansible ?

den.work
24.08.2018
12:28:59
Что то не горит он желанием туда форвардится. Сгенерировал ключ. ДОбавил в гит. Добавил в sshagent ключ видется, если сделать обычный git clone с локальной машины - вполне нормально отрабатывает.
В конфиг .ssh/config добавил
Host 1.2.3.4
ForwardAgent yes
что ему еще не нравится - фиг знает
правда лью с арча на убунту, но по идее в обще фиолетово должно быть

bebebe
24.08.2018
12:32:22

den.work
24.08.2018
12:36:04
причем если сделать через ансибл
ssh -T git@github.com
You've successfully authenticated, but GitHub does not provide shell access
но клонировать ни в какую
в общем само потупило - само завелось
не удобно как то
потом сломалось. Может кому поможет в будущем - очистите ssh ключи агента. Помогает

Terminator
24.08.2018
15:52:36
@Amelion будет жить. Поприветствуем!