@pro_ansible

Страница 261 из 625
Dmitrii
17.08.2017
16:44:13
Которой небыло в официальной версии, так что пропатчить еще раз уже не проблема

sic transit
17.08.2017
16:44:56
карочи inventory_hostname это "псевдоним" хоста, по которому ансибл оперирует им

Dmitrii
17.08.2017
16:45:25
Понял, теперь понятно где отправная точка для правок, спасибо большое!

sic transit
17.08.2017
16:46:58
пока не за что. Моя теория сводится к тому, что имя два одинаковых inventory_hostname в разных группах, одноименные переменные переопределяются на этапе парсинга плейбука

Google
sic transit
17.08.2017
16:47:29
*имея два одинаковых...

Dmitrii
17.08.2017
16:56:35
Блин, ec2.py высирает след структуру { "_meta": { "hostvars": { "172.30.1.10": { } } }И вот что то мне подсказывает, что этот IP адрес и является inventory_hostname в данном случае, а так же contact_point'ом к инстансу

Это я так, брифово, что все хуево ?

sic transit
17.08.2017
16:58:15
ну сдклай так, чтобы он генерил для второй группы другой inventory_hostname для того же айпишника

иначе логику плейбука перестраивать

у меня ec2 не было, конкретнее ничего не могу предположить

Dmitrii
17.08.2017
17:41:38
ну сдклай так, чтобы он генерил для второй группы другой inventory_hostname для того же айпишника
Я еще не тестил, но похоже все так и есть. Но для консистентности придется заводить дополнительные сетевые интерфейсы на инстансе под каждое приложение, потому что hostvars это хэш, а ключ это contact_point для инстанса, т.е. он должен быть доступен для ssh/

Т.е. в итоге чтобы не городить костылей, проще подсунуть ансиблу в итоге правильный инвентори как ты и предложил.

А т.к. внешники в Амазоне бесплатные пока ты их используешь то это вообще не проблема для меня

sic transit
17.08.2017
17:43:10
@korotovskii получается?

Dmitrii
17.08.2017
17:45:07
Ну я щас компаюсь в скрипте ec2.py и постепенно приходит понимание что ты был прав, да и вообще это стыкуется с идеологией асибла и моей разбивкой по группам. Просто видишь как они решили ИМХО неудачно взять идентификатор уникальности

sic transit
17.08.2017
17:45:48
амазон неудачно?

Dmitrii
17.08.2017
17:45:54
В моем случае для понятности всего этого дела не трогать идентификатор, не подпихивать туда левак и прочую чушь а просто предоставить два разных реальных IP адреса кторые будут связаны с одним хостом

Google
Dmitrii
17.08.2017
17:46:31
Я пока не могу сказать где конкретно ансибл решает что для ssh ему надо брать значение ключа из хэша hostvars

Так что ИМХО тут проблема ансибла, а лезть во внутрь и менять там что-то чтобы в ключ hostvars можно было положить любую ебанину, а ssh contact point забрать из атрибутов, только потому что я хочу упаковать пачку приложений на один хост это бред

Так что в этом случае логично просто "расширить" список значений в hostvars копией инстанса с другим IP адресом и все должно пойти своим чередом

(ну я так надеюсь)

sic transit
17.08.2017
17:51:04
проверить то просто на статичном inventory с разными inventory_hostname одинаковыми ip хоста в двух группах, имеющих одноименные переменные с разными значениями

Dmitrii
17.08.2017
17:51:38
А в целом, у меня довольно сложная система групп за счет того что этот проект живет в разных регионах AWS, по сути приложение одно и тоже но у него различия в параметрах, типа хост, бакет и т.д. поэтому это разделено на группы, а на стеджинге все валяется на одном инстансе, а для девелопмента так вообще AWS не используется и все упаковывается теми же самыми плейбуками и ролями в вагрант бокс

Поэтому у меня плейбук использует "абстрактную" группу, биндинг которой на реальные группы происходит уже в разных инвентори

Как результат у меня абсолютно независимые роли, которые ни капли не пришиты к AWS

sic transit
17.08.2017
17:54:58
ну у меня есть кейс, где один и тот же набор приложений живет на 4х хостах одновременно (dev, devops, staging, prod) и это один playbook с общим набором ролей.

lastsky
17.08.2017
17:55:45
а devops - это среда где админ может устроить хеллоуин? )

Evegeniy
17.08.2017
17:56:30
Скорее апокалипсис

sic transit
17.08.2017
17:56:33
на девопсе сборка все виды тестирования, а стеджинг для ручного тестирования только

Dmitrii
17.08.2017
17:56:41
Как только ты "вмажешься" в это говно то сразу станет больна

lastsky
17.08.2017
17:56:54
ага, но спасибо, всё равно любопытный подход, я подумаю чтобы кое-где такое устроить :)

Dmitrii
17.08.2017
17:57:47
Когда начинаешь в AWS с Ансиблом у тебя появляется текучая абстракция мгновенно, и чтобы ее залепить приходится реально попотеть

sic transit
17.08.2017
17:58:01
Dmitrii
17.08.2017
17:58:22
Если _только_ AWS то тоже врятли проблемы будут

Но у меня тут комбинация вообще оверкил. Вагрант, АВС, и АВС на одном инстансе кучи приложух

Google
Dmitrii
17.08.2017
17:58:55
И все это может один плейбук

sic transit
17.08.2017
17:58:56
Если _только_ AWS то тоже врятли проблемы будут
Абстракции и сущности моя сильная сторона ;)

Dmitrii
17.08.2017
17:59:37
Абстракции и сущности моя сильная сторона ;)
Я тоже так думал ибо не настоящий сварщик а из кодинга пришел.

Но не тут то было

Про DRY в Ansible порой лучше забыть

sic transit
17.08.2017
18:00:09
Добавь jenkins

Dmitrii
17.08.2017
18:00:27
Дженкинс в дженкнс?)

У нас он есть

sic transit
17.08.2017
18:01:27
Добавь дженкинс в пару с ансиблом, чтобы неконсистентные вещи рулить

Dmitrii
17.08.2017
18:01:56
У нас нет орды девопсов чтобы следить за консистентностью плейбуков каждый день

sic transit
17.08.2017
18:01:56
если аппарата ансибла вам не хватает

Про DRY в Ansible порой лучше забыть
это я заметил с грустью

Sergey
17.08.2017
18:46:53
Про DRY в Ansible порой лучше забыть
ансибл за тебя не будет этот принцип применять ?

Dmitrii
17.08.2017
23:27:24
@vastepanov Короче, все допилил ? В итоге обошлось правкой ec2.py (что и логично то в общем-то). В конечном счете он дополнительно прочитывает тег Host если он проставлен, и там точно так же должны быть указаны домены на которые можно будет коннектиться по SSH, т.е. я даже решил с помощью этого проблему создания доп. интерфейсов к инстансу. В итоге оно пихает нужный айтем из Host тега как значение в ключ необходимого Kind на данной итерации, связывая их таким образом. Пример JSON от ec2.py: "tag_Host_app_A_backend": [ "11.11.11.11" ], "tag_Host_app_B_backend": [ "11.11.11.11" ], "tag_Kind_app_A_backend": [ "app-A.example.com" ], "tag_Kind_app_B_backend": [ "app-B.example.com" ], Ну и через группы связано. Таким образом когда в плейбуке я обращаюсь к группе app_A путем hosts: app_A_backend у меня подхватываются все переменные из файла app_A (группы app_A_backend и app_A тоже связаны между собой в инвентори)

sic transit
18.08.2017
02:51:14
@vastepanov Короче, все допилил ? В итоге обошлось правкой ec2.py (что и логично то в общем-то). В конечном счете он дополнительно прочитывает тег Host если он проставлен, и там точно так же должны быть указаны домены на которые можно будет коннектиться по SSH, т.е. я даже решил с помощью этого проблему создания доп. интерфейсов к инстансу. В итоге оно пихает нужный айтем из Host тега как значение в ключ необходимого Kind на данной итерации, связывая их таким образом. Пример JSON от ec2.py: "tag_Host_app_A_backend": [ "11.11.11.11" ], "tag_Host_app_B_backend": [ "11.11.11.11" ], "tag_Kind_app_A_backend": [ "app-A.example.com" ], "tag_Kind_app_B_backend": [ "app-B.example.com" ], Ну и через группы связано. Таким образом когда в плейбуке я обращаюсь к группе app_A путем hosts: app_A_backend у меня подхватываются все переменные из файла app_A (группы app_A_backend и app_A тоже связаны между собой в инвентори)
чота тут уже я не проснулся еще наверное. Мое предположение ок или не ок? :)

lastsky
18.08.2017
03:24:14
Про DRY в Ansible порой лучше забыть
лично я вот сделал вывод, что если сразу писать как recommended, а не на каких-нибудь preview модулях замешивая в это command/shell/raw, то --check нормально работает. хули на него смотреть, его надо юзать вместе с --diff :) с оговоркой, что почему-то почти для всего, что начинается с ec2, это не работает. однако по амазону ещё @lig11 разъяснял одним гифаком выше по тексту.

впрочем, есть люди, вообще не подозревающие о существовании ключа --check, или считающие, что он не нужен. здесь нечего добавить.

lastsky
18.08.2017
03:32:49
что тебя сподвигло на подобные размышления?
~5k строк кода, который пришлось переработать чтобы не ломать деплой с криком "блять где эта переменная и как оно работало?"

Google
lastsky
18.08.2017
03:38:12
проблема найти переменную?
не, мне просто лень в уме это прогонять перед тем как выполнить. лентяй, хуле. ну ещё ошибиться боюсь, роботом стать не удалось

но это пока. посмотрим как будет в 2.4 и в stonic :)

lastsky
18.08.2017
03:42:10
да сарказм же епта )

конечно блять очевидно

но далеко блять не всем :)

sic transit
18.08.2017
03:42:51
Крик души?

lastsky
18.08.2017
03:43:40
где?

Wom
18.08.2017
05:18:17
как обойти как можно правильнее ситуацию с обновлением rabbitmq и 3rd party plugins? The enabled plugins configuration is preserved between upgrades, so there is no need to re-enable plugins after an upgrade, but because the plugins directory changes between versions, any third party plugins will need to be copied to the new directory.

sic transit
18.08.2017
09:18:14
И так норм

Anatoly
18.08.2017
13:47:03
а факты докера по прежнему shellом собирать, ничего нормального так и не завезли(кроме third party plugins)

Ilya
20.08.2017
14:58:25
Привет всем! Нужна небольшая помощь. Загоняю результат выполнения команды в переменную при помощи register и подставляю ее в дальше, и ругается, что переменная слишком длинная, хотя не так

Когда просто вывод команды подставляю - все ок работает

Может кто подскажет как правильно сделать, чтобы заработало?

sic transit
20.08.2017
15:00:21
Пакажи

Ilya
20.08.2017
15:01:18
TASK [main : export public key inti variable] *************************************************************************************************************************************************************************************************************** changed: [localhost] => {"changed": true, "cmd": "cat /etc/opendkim/keys/mail.txt | sed -r 's/^[^\"]+//' | sed -r 's/\\).+//' | sed 's,\",,g' | tr -d '\\n' | fold -w 197 | sed ':a;N;$!ba;s/\\n/ /g'", "delta": "0:00:00.007873", "end": "2017-08-20 14:55:52.973793", "rc": 0, "start": "2017-08-20 14:55:52.965920", "stderr": "", "stderr_lines": [], "stdout": "v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DCBiQKBgQDhEhu9fERU5so+ob/4NJe1rfQ/DW2uzj1F3ZfTmpqijPihsjIiCfu60Qact0due81Wun0tNgHCfSZNWL7m9bFmyyc+G7tA+P53w9Iei3qUffY7+Dpdot5FNPUzRyjYj8FdzQ5ZCJZwXuW TERxXdnrQQzmj0AbsVN2HkHDfmODhywIDAQAB ", "stdout_lines": ["v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEgQDhEhu9fERU5so+ob/4NJe1rfQ/DW2uzj1F3ZfTmpqijPihsjIiCfu60Qact0due81Wun0tNgHCfSZNWL7m9bFmyyc+G7tA+P53w9Iei3qUffY7+Dpdot5FNPUzRyjYj8FdzQ5ZCJZwXuW TERxXdnrQQzmj0AbsVN2HkHDfmODhywIDAQAB "]} TASK [main : cloudflare_dns] ******************************************************************************************************************************************************************************************************************************** fatal: [localhost]: FAILED! => {"changed": false, "failed": true, "msg": "API bad request; Status: 400; Method: GET: Call: /zones/edbd88ce17fabc96e6f96149f184320e/dns_records?content=%7B%27stderr_lines%27%3A+%5B%5D%2C+%27changed%27%3A+True%2C+%27end%27%3A+%272017-08-20+14%3A55%3A52.973793%27%2C+%27stdout%27%3A+%27v%3DDKIM1%3B+k%3Drsa%3B+p%3DMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDhEhu9fERU5so%2Bob%2F4NJe1rfQ%2FDW2uzj1F3ZfTmpqijPihsjIiCfu7%2C+%27rc%27%3A+0%2C+%27stdout_lines%27%3A+%5B%27v%3DDKIM1%3B+k%3Drsa%3B+p%3DMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDhEhu9fERU5so%2Bob%2F4NJe1rfQ%2FDW2uzj1F3ZfTmpqijPihsjIiCfu60Qact0due81Wun0tNgHCfSZNWL7m9bFmyyc%2BG7tA%2BP53w9Iei3qUffY7%2BDpdot5FNPUzRyjYj8FdzQ5ZCJZwXuW+TERxXdnrQQzmj0AbsVN2HkHDfmODhywIDAQAB+%27%5D%7D&type=TXT&name=mail._domainkey.; Error details: code: 6009, error: Invalid filter value length specified. Max length is 200; "} to retry, use: --limit @/root/ansible-dkim/test.retry

Max length is 200 - хотя туда можно подставить ручками хоть 500 символов и все будет работать. Как только подставляешь переменную - хер

Google
Ilya
20.08.2017
15:02:40
- name: export public key inti variable shell: cat /etc/opendkim/keys/mail.txt | sed -r 's/^[^"]+//' | sed -r 's/\).+//' | sed 's,",,g' | tr -d '\n' | fold -w 197 | sed ':a;N;$!ba;s/\n/ /g' register: public_key - cloudflare_dns: state: present zone: "{{ domain }}" record: "{{ dkim_selector }}._domainkey" type: TXT value: "{{ public_key }}" ttl: 120 account_email: "{{ cloudflare_email }}" account_api_token: "{{ cloudflare_api_token }}" register: record

sic transit
20.08.2017
15:03:11
API bad request; Status: 400

Дело в request

а не в переменной ansible

Ilya
20.08.2017
15:04:58
Т.е. я все верно сделал с переменной?

sic transit
20.08.2017
15:06:26
у тебя таск не отрабатывает

там где ты наружу стучишься к апи

Страница 261 из 625