В приложении, которое использует Python API ансибла и запускается с помощью Celery была обнаружена особенность, при которой ансибловский плейбук не отрабатывает и возвращает пустой результат:
# cat ansible.log
2017-08-02 16:02:08,764 --- INFO --- utils run():87 --- Playbook load
2017-08-02 16:02:08,868 --- INFO --- utils run():94 --- Playbook run
2017-08-02 16:02:08,870 --- DEBUG --- utils run():96 --- Options: Options(connection='ssh', module_path='', forks=100, become=True, become_method='sudo', become_user='root', check=False, remote_user='root')
2017-08-02 16:02:09,328 --- DEBUG --- utils run():108 --- 0
Если же этот плейбук запускать руками напрямую, а не через Ansible, то все нормально.
Ошибка заключается в том, что Celery почему-то не может взаимодействовать с ResultCallback функцией Ansible Python API.
Решение такое, перед запуском Celery-воркера нужно задать переменную:
PYTHONOPTIMIZE=1
или запустить Celery c параметром:
-O OPTIMIZATION
После этих манипуляций все работает отлично.
via.
# cat ansible.log
2017-08-02 16:02:08,764 --- INFO --- utils run():87 --- Playbook load
2017-08-02 16:02:08,868 --- INFO --- utils run():94 --- Playbook run
2017-08-02 16:02:08,870 --- DEBUG --- utils run():96 --- Options: Options(connection='ssh', module_path='', forks=100, become=True, become_method='sudo', become_user='root', check=False, remote_user='root')
2017-08-02 16:02:09,328 --- DEBUG --- utils run():108 --- 0
Если же этот плейбук запускать руками напрямую, а не через Ansible, то все нормально.
Ошибка заключается в том, что Celery почему-то не может взаимодействовать с ResultCallback функцией Ansible Python API.
Решение такое, перед запуском Celery-воркера нужно задать переменную:
PYTHONOPTIMIZE=1
или запустить Celery c параметром:
-O OPTIMIZATION
После этих манипуляций все работает отлично.
via.