2015-01-05 3 views
3

В анзибль module development documentation состояния:Импорт анзибль модуля Utils

Основные детали [написания модуля анзибль] включают в себя всегда заканчивается файл модуля с:

from ansible.module_utils.basic import * 
main() 

Это противоречит обычной практике группируя импорт в верхней части файла. Использование import * также предотвращает эффективную работу инструментов линта (например, flake8) и составляет generally regarded as bad practice.

Есть ли какие-либо причины для импорта таким образом, или это Ansible просто делает свой собственный стиль рекомендации здесь?

+0

Ansible просто задумывается над тем, как они идут. Игнорируйте их и сделайте это правильно. – VooDooNOFX

ответ

2

ПРИМЕЧАНИЕ: Нижеприведенный ответ больше не относится к Ansible 2.1+. Из комментариев:

Я понимаю, что это старый пост, но если кто-то все еще будет заинтересован, стоит отметить, что это уже не так, поскольку невозможно 2.1. Взято с here: До Ansible-2.1.0 импортирование только того, что вы использовали из ansible.module_utils.basic, не работало. Вам нужно было использовать подстановочный импорт - bouletta

Оригинал ответ

анзибля (prior to version 2.1) will refuse to run, если вы не делаете import * бизнеса. Я не на 100% определенно что магия делается, но я знаю some есть.

Replacer используется для вставки кусков кода в модули до передачи . Вместо того, чтобы делать классический импорт python, это позволяет использовать более эффективную передачу в сценарии без перезагрузки, не перемещая дополнительные файлы по проводу, а также заботится о вложении аргументов в переданные модули .

Эта версия выполнена таким образом, что локальный импорт по-прежнему может быть , используемый в коде модуля, поэтому IDE не должны знать, что происходит.

Пример:

from ansible.module_utils.basic import * 

... приведет вставки basic.py в модуль из module_utils/каталога в исходном дереве.

Все модули должны импортировать как минимум базовые, хотя также будут другими фрагментами.

+1

@augurar Я понимаю, что это старый пост, но если кто-то все еще будет заинтересован, стоит отметить, что это уже не так, как только возможно 2.1. Взято из [здесь] (https://docs.ansible.com/ansible/dev_guide/developing_modules.html): До Ansible-2.1.0 импортирование только того, что вы использовали из ansible.module_utils.basic, не работало. Вам нужно было использовать импорт подстановочных знаков – bouletta

Смежные вопросы