импортировать ansible.module_utils в 2.2.1.0 как часть модуля инвентаризации

Импорт классов UTILS в Inventory — можно ли это сделать?

Я создал пользовательский импортер данных LDAP как часть создания класса инвентаризации. Имеющаяся у нас схема LDAP недостаточно похожа на подключаемый модуль LDAP, представленный в примерах.

Мой класс называется ldapDataModule; класс находится в:

/home/agt/ansible/agt_module_utils/ldapDataModule.py

Мой файл «$ HOME/.ansible.cfg» имеет следующее:

module_utils = /home/agt/ansible/agt_module_utils

При запуске моего модуля инвентаризации Ansible я получаю следующий вывод:

ansible ecomtest37 -m ping ОШИБКА! Попытка выполнить «/sites/utils/local/ansible/hosts» в качестве сценария инвентаризации: сценарий инвентаризации (/sites/utils/local/ansible/hosts) имел ошибку выполнения: Traceback (последний последний вызов): файл «/sites». /utils/local/ansible/hosts», строка 22, из файла ansible.module_utils import ldapDataModule ImportError: нет модуля с именем module.utils

Оператор include внутри hosts выглядит так:

import copy
import ldap
import re
import sys
import operator
import os
import argparse
import datetime
import os.path
try:
    import json
except:
    import simplejson as json
from ansible.module_utils import ldapDataModule

class agtInventory(object):

РЕКОМЕНДАЦИИ?


person nverkland    schedule 26.06.2017    source источник


Ответы (1)


Я смог сделать следующее как «обходной путь». Я все еще хотел бы услышать от гуру Ansible о правильном использовании переменной «module_utils» из ansible.cfg

sys.path.insert(0, '/home/agt/ansible/agt_module_utils')

from ldapDataModule import ldapDataModule
person nverkland    schedule 26.06.2017
comment
Насколько я знаю, магия переопределения пути работает только для модулей/плагинов. Но скрипты инвентаризации из другого мира. Вам следует дождаться выпуска Ansible 2.4, в котором инвентаризация полностью переработана с поддержкой плагинов инвентаризации — это должно работать как любые другие плагины. - person Konstantin Suvorov; 26.06.2017
comment
Хорошо знать. Пожалуйста, не меняйте слишком много: D текущий механизм инвентаризации (также известный как API) - хотя и медленный, но «хороший». В идеале я хотел бы видеть более полный API для реализации в моем модуле инвентаризации (вместо двух методов), потому что выполнение поиска переменной хоста для каждого отдельного хоста в больших группах дорого, но, по крайней мере, это было достаточно просто реализовать. -Спасибо еще раз за помощь - person nverkland; 26.06.2017