我有一个Python字典,其中包含Ansible保险库作为值。我似乎无法正确地将其转储到具有正确格式的yaml输出中。我正在使用ansible-vault
软件包生成加密数据,如下所示:
from ansible_vault import Vault
import yaml
vault = Vault('secretpassword')
data = "secretvalue"
为了加密数据,我按照以下步骤进行:
password = (vault.dump(data))
生成正确的Ansible保险库
$ANSIBLE_VAULT;1.1;AES256
36323830636261313833333932326661613063663361656362626432303232636463643030396366
3132623365633138613862333034626261336638613233650a653765386332666537613231626537
37666461653439616564343133656263613134643235363539396435616461626338393338616365
3339383030373532310a366662386665326132373535393930663737383136363735646361383066
65623033343262643138633839666237643735366465373932316233373339643835
为了在保险库中使用它,我将以下内容追加到它:
password = "!vault |\n" + (vault.dump(data))
这样我就能够在host_var中使用它。然后我将它与一些其他值添加到字典中,最终我会通过yaml转储。
hostvar_dict = {
"a": "1",
"secret_item": password,
"b": "2"
}
一切看起来都很好,直到我尝试将上述字典输出为yaml格式时出现了问题。
print(yaml.dump(hostvar_dict))
输出以下内容:
a: '1'
b: '2'
secret_item: '!vault |
$ANSIBLE_VAULT;1.1;AES256
36353763313938663936303630306161393433633765353936656139363937373365376563623937
3762633462623434393036316264646535316233346166660a396634386439656437343162613365
34613661366163643333393163333335343632356330343939396133333665336566623037306432
3539366466353030310a313936376361366366316338636161303564346633373237363463373966
39353731323564393365633465303663373932613631353364626437633561643134
'
我查看了yaml.dump添加多余换行符的多行字符串中的答案,但是这些答案并没有给出正确的输出。我想要得到的是:
a: "1"
b: "2"
secret_item: !vault |
$ANSIBLE_VAULT;1.1;AES256
36353763313938663936303630306161393433633765353936656139363937373365376563623937
3762633462623434393036316264646535316233346166660a396634386439656437343162613365
34613661366163643333393163333335343632356330343939396133333665336566623037306432
3539366466353030310a313936376361366366316338636161303564346633373237363463373966
39353731323564393365633465303663373932613631353364626437633561643134
我尝试使用yaml.dump的选项包括:default_style="|"
,default_flow_style=False
。
有没有办法以我想要的方式在yaml文件中正确转储ansible-vault值?