Как загрузить файл 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)
Другие вопросы по тегам