
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ов

Алексей
03.04.2018
13:26:16

Google

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

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

Алексей
03.04.2018
13:26:52

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
но костыль, однако
если ты заранее вытащишь из базы количество элементов равное количеству хостов, запихнешь их в лист и потом будешь на каждом хосте вынимать по индексу хоста, то каждый из хостов получит уникальный элемент

Алексей
03.04.2018
14:02:44

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*

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
Ну тогда проверь дебагом все входящие значения