Как загрузить файл yaml в пользовательский модуль ansible
У меня есть ansible
пользовательский модуль, у которого есть файл конфигурации в YAML
формат. Теперь вопрос в том, как мне загрузить этоYAML
файл внутри модуля?
ПРИМЕЧАНИЕ, насколько я понимаю, я не могу просто использовать что-то вродеPyYAML
поскольку ansible
запустит мой модуль на узле, который он настраивает, и, возможно, в этой системе нет PyYAML
установлен.
ПРИМЕЧАНИЕ Такжеansible
сам имеет ansible.parsing.utils.yaml.from_yaml
модули не могут использовать его.
Как бы смешно это ни звучало, я не знаю, как загрузить YAML
файл в кастомном ansible
модуль. Пожалуйста помоги
1 ответ
Отличный вопрос. Звучит забавно, и вы ожидаете простого ответа, но, насколько я понимаю, это факты.
Последняя ветка разработки ansible имеет
/lib/ansible/module_utils/common/yaml.py
который может использоваться модулями, потому что он находится под
module_utils
. см. здесь
Если вы посмотрите на исходный код, все, что он делает,
import yaml as _yaml
, который вы можете сделать самостоятельно в своем настраиваемом модуле. Насколько я понимаю, это использует PyYAML, который задокументирован здесь . (кто-нибудь поправит меня, если я ошибаюсь! Я не совсем понимаю комментарий в этом файле, в котором говорится, что "предпочитаю скомпилированные расширения C YAML ...")
В любом случае, если на вашей целевой машине нет PyYAML, вы всегда можете добавить задачу, чтобы обеспечить ее наличие. например
- name: Install PyYAML python package
pip:
name: pyyaml
а затем используйте его в своем собственном модуле с помощью:
from yaml import load, dump
try:
from yaml import CLoader as Loader, CDumper as Dumper
except ImportError:
from yaml import Loader, Dumper
# ...
data = load(stream, Loader=Loader)
# ...
output = dump(data, Dumper=Dumper)