我有一个 python 字典,其中一个 AnsibleVault 作为值。我似乎无法将其正确转储到具有正确格式的 yaml 输出中。我正在使用该ansible-vault包生成加密数据,如下所示:
from ansible_vault import Vault
import yaml
vault = Vault('secretpassword')
data = "secretvalue"
Run Code Online (Sandbox Code Playgroud)
为了加密数据,我执行以下操作:
password = (vault.dump(data))
Run Code Online (Sandbox Code Playgroud)
这会生成正确的 AnsibleVault
$ANSIBLE_VAULT;1.1;AES256
36323830636261313833333932326661613063663361656362626432303232636463643030396366
3132623365633138613862333034626261336638613233650a653765386332666537613231626537
37666461653439616564343133656263613134643235363539396435616461626338393338616365
3339383030373532310a366662386665326132373535393930663737383136363735646361383066
65623033343262643138633839666237643735366465373932316233373339643835
Run Code Online (Sandbox Code Playgroud)
为了能够在保管库中使用它,我将以下内容附加到它:
$ANSIBLE_VAULT;1.1;AES256
36323830636261313833333932326661613063663361656362626432303232636463643030396366
3132623365633138613862333034626261336638613233650a653765386332666537613231626537
37666461653439616564343133656263613134643235363539396435616461626338393338616365
3339383030373532310a366662386665326132373535393930663737383136363735646361383066
65623033343262643138633839666237643735366465373932316233373339643835
Run Code Online (Sandbox Code Playgroud)
这样我就可以在 host_var 中使用它。然后我将它添加到带有其他一些值的字典中,然后我将使用 yaml 转储这些值。
password = "!vault |\n" + (vault.dump(data))
Run Code Online (Sandbox Code Playgroud)
直到这里一切看起来都很好,当我尝试将上面的字典输出到 yaml 输出时,事情就出了问题。
hostvar_dict = {
"a": "1",
"secret_item": password,
"b": "2"
}
Run Code Online (Sandbox Code Playgroud)
给我以下输出:
print(yaml.dump(hostvar_dict))
Run Code Online (Sandbox Code Playgroud)
我查看了yaml.dump 的答案,在多行字符串中添加不需要的换行符,但这些没有给出正确的输出。我想要得到的是:
a: '1'
b: '2'
secret_item: '!vault |
$ANSIBLE_VAULT;1.1;AES256
36353763313938663936303630306161393433633765353936656139363937373365376563623937
3762633462623434393036316264646535316233346166660a396634386439656437343162613365 …Run Code Online (Sandbox Code Playgroud)