繁体   English   中英

如何在 Ansible 中使用我的自定义 yaml 标签?

[英]How to use my custom yaml tag in Ansible?

我在 Python 中创建了一个 YAML 解析器来使用yaml 标签解密值。

password: !decrypt LS0tLS1CRUdJ...TiBQRS0tCg==

在我的解析器脚本中,我可以添加自定义构造函数来解密这些值。

def get_loader():
  loader = yaml.SafeLoader
  loader.add_constructor("!decrypt", decrypt_constructor)
  return loader

data = yaml.load(open(file, "rb"), Loader=get_loader())

使用 Ansible 解析 YAML 文件时,出现以下错误:

ERROR! We were unable to read either as JSON nor YAML, these are the errors we got from each:
JSON: Expecting value: line 1 column 1 (char 0)

Syntax Error while loading YAML.
  could not determine a constructor for the tag '!decrypt'

如何向 Ansible 使用的 YAML 解析器添加构造函数? 我以前见过这些标签,比如!vault!unsafe

您需要将代码添加到 Ansible 以教它如何解析您的自定义 YAML 标签。

看起来这种东西存在于 Ansible 存储库的lib/ansible/parsing/yaml中。 例如,您可以在objects.py中找到对!vault对象的支持:

class AnsibleVaultEncryptedUnicode(Sequence, AnsibleBaseYAMLObject):
    '''Unicode like object that is not evaluated (decrypted) until it needs to be'''
    __UNSAFE__ = True
    __ENCRYPTED__ = True
    yaml_tag = u'!vault'

[...]

您最终会维护自己的自定义版本 Ansible。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM