@pro_ansible

Страница 423 из 625
Vladimir
03.04.2018
13:20:33
Именно :)

Алексей
03.04.2018
13:21:20
сериал рабоает на play

Vladimir
03.04.2018
13:21:51
linear ?

Алексей
03.04.2018
13:21:53
на таск видимо надо изобретать колесо

Google
Vladimir
03.04.2018
13:22:11
Нет же

http://docs.ansible.com/ansible/latest/user_guide/playbooks_strategies.html

Алексей
03.04.2018
13:23:03
где там про task ?

Vladimir
03.04.2018
13:23:17
By default, plays run with a linear strategy, in which all hosts will run each task before any host starts the next task

Все должны выпонить задачу перед следующей

+ serial 1 и пойдет дело

Алексей
03.04.2018
13:24:01
дак надо только для одного таска же

Vladimir
03.04.2018
13:25:06
А linear не решит эту проблему ?

Roman
03.04.2018
13:25:16
В роли есть таск: - name: Get host var local_action: module: role_module db: "{{eon_seed_man_db}}" hostname: "{{ inventory_hostname_short }}" register: host_var - name: return var debug: msg: "{{host_var}}" Модуль обращается к БД берёт либо закрепленное за хостом значение, либо свободное и закрепляет его за хостом. В случае прогона плейбуков по множеству хостов, получается наложение: TASK [Role : return var] ok: [host1] => { "msg": "value1" } ok: [host2] => { "msg": "value1" }

Алексей
03.04.2018
13:25:17
linear дефолт

Vladimir
03.04.2018
13:25:24
Только последовательность там нет гарантии

Roman
03.04.2018
13:26:12
БД SQLная, т.е. одновременно возможнно параллельное выполнение SELECTов

Google
Алексей
03.04.2018
13:26:33
я такое делаю на консуле

Vladimir
03.04.2018
13:26:40
https://github.com/ansible/ansible/issues/12170 для таска есть ишью открытая

Vladimir
03.04.2018
13:27:03
Так пусть для всего плейбука идет и норм же

Да дольше, зато есть гарантия

Алексей
03.04.2018
13:28:21
филькина грамота а не гарантия. ибо требует реализации singleton для запуска плейбуа

Vladimir
03.04.2018
13:28:29
Так что используй пока для этого плейбука serial и жди когда ишью поправят

Я не понял почему нет :(

Ему главное что бы это не было параллельно, serial 1 говорит что будет по очереди ... все

Мб я чего не понимаю -__-

Roman
03.04.2018
13:30:44
Задачи в форке последовательно делаются, я так понял.

Алексей
03.04.2018
13:31:50
база compare and swap умеет ?

Roman
03.04.2018
13:32:50
PGSql, воде умеет.

Vladimir
03.04.2018
13:33:50
попробуй плейбук прогнать несколько раз с serial:1 с дебагом

посмотри

Алексей
03.04.2018
13:33:57
ну тогда имеет смысл на ее завязаться. cas block retry until. или питонячий код.

A.nimE
03.04.2018
13:40:20
/rmkb@remkeybot

Roman
03.04.2018
13:42:17
значит, пока что, будем костылить с блокировками таблиц....

Спасибо за информацию!

Ievgen
03.04.2018
13:43:02
свободные IP, номера? что то такое?

Google
Roman
03.04.2018
13:43:41
да, типа того.

Алексей
03.04.2018
13:45:34
блокировки на таблице сильно более правильное imho решение чем serial:1

Ievgen
03.04.2018
13:50:06
походу есть вариант

кстати интересно что я его раньше не находил

но надо тестить

ansible_play_batch.index(inventory_hostname)

выбрать единожды на localhost из базы нужное количество а потом доставать из list по индексу

я не дам гарантии что это точно сработает, надо делать тестовый плейбук и смотреть, но это решение лежит внутри ansible без завязок на блокировки итд

если оно работает конечно

Roman
03.04.2018
13:55:52
Впринципе.... "LOCK TABLE seedlist IN ACCESS EXCLUSIVE MODE;" сработало.

но костыль, однако

Ievgen
03.04.2018
13:59:23
офигенно сработает

Ievgen
03.04.2018
14:00:40
- set_fact: current_index: "{{ ansible_play_batch.index(inventory_hostname) }}" - debug: var: current_index - meta: end_play ok: [host-02] => { "current_index": "0" } ok: [host-01] => { "current_index": "1" } ok: [host-03] => { "current_index": "2" }

serial: 0

но костыль, однако
если ты заранее вытащишь из базы количество элементов равное количеству хостов, запихнешь их в лист и потом будешь на каждом хосте вынимать по индексу хоста, то каждый из хостов получит уникальный элемент

Ievgen
03.04.2018
14:03:13
а что не так с кодом?

это как раз не костыль

костыль это полагаться на внешний источник в то время когда можно решить внутри и непротиворечиво

имхо

Google
Алексей
03.04.2018
14:04:24
ну так же нет защиты от паралельного вызова плейбука

Ievgen
03.04.2018
14:04:38
от паралельного нет

согласен

Алексей
03.04.2018
14:05:00
с кодом всё так. но через месяц помнять зачем там будет не просто. по этому комментарий нужен

Ievgen
03.04.2018
14:05:23
но с этим вообще печально, я имею в виду с паралельностью и такими вещами

Алексей
03.04.2018
14:05:45
это так 3 строки на питоне и 290 в ансибле

Ievgen
03.04.2018
14:07:24
но я бы все равно не лочил таблицу постоянно, можно при первой выборке один раз залочить и пометить эелементы как занятые (но это уже требует вмешательства в базу)

а по концу пробега зайти и отпустить те для которых play сфэйлился

и все равно имхо это лучше чем 100500 раз бегать в базу и лочить

Admin
ERROR: S client not available

Ievgen
03.04.2018
14:09:39
хоть и сложнее в реализации

eucariot
03.04.2018
16:00:45
Вот такая ошибка при долгой заливке длинного конфига на сетевую железку это ошибка ansible или модуля? An exception occurred during task execution. To see the full traceback, use -vvv. The error was: error: [Errno 2] No such file or directory fatal: [device-name]: FAILED! => {"changed": false, "err": "[Errno 2] No such file or directory", "msg": "unable to connect to socket"}

Очень любопытное для меня замечание, что после этой ошибки и завершения работы плейбука недостающие команды всё-таки доезжают до железки (вижу по истории команд) - как это?

Pavel
03.04.2018
16:03:26
FAILED не FATAL

Ещё можно же пропускать ошибки принудительно

eucariot
03.04.2018
16:03:46
fatal: [device-name]:

Pavel
03.04.2018
16:04:51
Вообще No such file or directory странное сообщение

Как будто файла нет

Поставить retry, чтобы раз 100 пробовал подключиться. Помогает когда с сетью плохо

Алексей
03.04.2018
16:05:46
ансибл часто так херачит.

Google
Алексей
03.04.2018
16:06:09
думаю ошибка на самом деле другая но после многих уровней отлова ошибки в итоге приехало что приехало

eucariot
03.04.2018
16:08:09
С сетью порядок. Выглядит так, словно либо по времени вылетает, либо примерно на 3000-й строке.

Pavel
03.04.2018
16:08:57
Попробуй вырезать код в отдельный файл и повторить локально только этот кусок, будет проще понять

eucariot
03.04.2018
16:09:51
Пробовал - менял местами разные куски - всегда ± на одном месте показывает ошибку

Pavel
03.04.2018
16:10:59
Это по идее хорошо. Если проблема стабильна, то либо в коде, либо лезь в ансибловые скрипты питоновские и смотри как это работает

eucariot
03.04.2018
16:12:09
Понять бы ошибка ансибла или модуля.

Pavel
03.04.2018
16:13:00
В обычных задачах, ошибки модулей относительно редко встречаются

eucariot
03.04.2018
16:14:35
Это модуль Huawei*

Поставить retry, чтобы раз 100 пробовал подключиться. Помогает когда с сетью плохо
Вот не знаю, ставить ли - ведь в итоге он проливает конфигурацию дальше. Причём после того, как плейбук уже перестал выполняться

Pavel
03.04.2018
16:16:18
Модулей ансибла я имел ввиду

eucariot
03.04.2018
16:16:54
Я тоже) Я уже пару забавных вещей в нём обнаружил)

Pavel
03.04.2018
16:17:07
А если вендору написать?

Модуль хуавея на чём?

На питоне?

eucariot
03.04.2018
16:17:40
ce_config - аналог ios_config

да, а может быть иначе?

Pavel
03.04.2018
16:17:50
Жесть

Ну внешний модуль. Смотри как он работает тогда

eucariot
03.04.2018
16:18:12
Про найденные ошибки уже написал. Про вот эту пока нет, потому что не уверен, что в нём дело.

Pavel
03.04.2018
16:19:15
А руками такая операция проходит нормально?

eucariot
03.04.2018
16:19:30
да

Pavel
03.04.2018
16:20:18
Ну тогда проверь дебагом все входящие значения

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