如何在Molecule group_vars中指定加密字符串?(无法识别!vault标签构造器)
解决Molecule中配置Ansible Vault变量报错的问题
问题描述
之前在角色的vars/main.yml里配置Vault加密变量一切正常,现在把变量移到Molecule的molecule/default/molecule.yml的group_vars中后,运行molecule test报错:
yaml.constructor.ConstructorError: could not determine a constructor for the tag '!vault' in "<unicode string>", line 50, column 28: wiki_password: !vault |
原因
Molecule的molecule.yml由自身YAML解析器处理,它不识别Ansible的!vault标签,直接写入会触发解析错误。
解决办法
方法一:将Vault变量放到单独的group_vars文件中(推荐)
- 在Molecule的inventory目录下创建group_vars子目录:
mkdir -p molecule/default/group_vars/all
- 在该目录下新建
vault.yml文件,写入加密变量:
wiki_password: !vault | $ANSIBLE_VAULT;1.1;AES256 63343237 ... 省略内容 ...
- 修改
molecule/default/molecule.yml,移除group_vars.all里的wiki_password配置项。
这种方式下,Molecule会把该文件交给Ansible处理,Ansible能正常识别!vault标签并解密变量。
方法二:将加密内容转为字符串格式(不推荐)
如果一定要在molecule.yml里配置,把加密的多行内容转成带换行符转义的字符串:
wiki_password: "$ANSIBLE_VAULT;1.1;AES256\n63343237 ... 省略内容 ..."
需把每一行的换行替换成\n,并用双引号包裹整个内容。这种方法容易因格式错误导致解密失败,优先选择方法一。
内容的提问来源于stack exchange,提问作者Red Cricket
相关产品推荐
相关产品推荐

