Encryption 如何检查加密变量是否已解密?

Encryption 如何检查加密变量是否已解密?,encryption,ansible,ansible-vault,Encryption,Ansible,Ansible Vault,我有一张支票。现在,即使我没有解锁变量(使用--ask vault pass),我也希望能够运行我的playbook,并跳过依赖它的任务。理想情况下,会有一个警告,说明任务已被跳过 现在,当我在没有的情况下运行playbook时--询问vault pass,它会失败,并出现一个错误: 致命:[……]:失败!=>{“changed”:false,“msg”:“AnsibleError:模板化{(samba_密码)时发生未经处理的异常| 字符串| from_yaml)[samba_username]

我有一张支票。现在,即使我没有解锁变量(使用
--ask vault pass
),我也希望能够运行我的playbook,并跳过依赖它的任务。理想情况下,会有一个警告,说明任务已被跳过

现在,当我在没有
的情况下运行playbook时--询问vault pass
,它会失败,并出现一个错误:

致命:[……]:失败!=>{“changed”:false,“msg”:“AnsibleError:模板化{(samba_密码)时发生未经处理的异常| 字符串| from_yaml)[samba_username]}。错误是,原始消息:正在尝试解密bu t未找到任何保险库机密“}


有没有办法在
when:
子句中检查加密的变量是否未被解密,因此无法访问?

我已经研究过了,但没有找到任何方法。解决这个问题的简单方法是在任务中使用忽略错误:是。

我已经研究过了,但还没有找到任何方法。解决此问题的简单方法是在任务中使用“忽略错误:是”。

Q:“检查加密变量是否已解密。跳过依赖它的任务。理想情况下,会有一条警告,说明任务已被跳过。”

答:例如,给定带有变量的文件

shell>cat vars-test.yml
测试变量1:测试变量1
加密文件

shell>ansible vault encrypt vars-test.yml
新Vault密码:
确认新Vault密码:
加密成功
外壳>cat vars-test.yml
$ANSIBLE_保险库;1.1;AES256
61373230346437306135303463393166323063656561623863306333313837666561653466393835
37386665323038376139613766343930346263633032330A323336643061373039613330653237
30666364376266396633613162626536383161306262613062373239343232663935376364383431
6335623366613834360A3365316565376266623761663237663764336532326331393836613963
64356632633863353534323636313231633866613635343962383463636565303032
然后是剧本

shell>cat pb.yml
-主持人:test_01
任务:
-包括变量:vars-test.yml
忽略错误:true
-设定事实:
test_var1:“{{test_var1 | default('default')}”
-名称:如果test_var1被解密,则执行任务
区块:
-调试:
msg:executetask1
-调试:
msg:executetask2
时间:test_var1!='违约'
给出(节略)

shell>ansible playbook pb.yml——询问保险库通行证
任务[包括变量]****
ok:[测试单元01]
任务[设置事实]****
ok:[测试单元01]
任务[调试]****
确定:[测试\u 01]=>
msg:executetask1
任务[调试]****
确定:[测试\u 01]=>
msg:executetask2
如果您没有为命令提供playbook提供的密码(节略)

shell>ansible剧本pb.yml
播放[测试01]****
任务[包括变量]****
致命:[测试\u 01]:失败!=>更改=错误
ansible_事实:{}
ansible_包含的_var_文件:[]
消息:正在尝试解密,但未找到vault机密
…忽略
任务[设置事实]****
ok:[测试单元01]
任务[调试]****
跳过:[测试单元01]
任务[调试]****
跳过:[测试单元01]
Q:检查加密变量是否已解密。跳过依赖于该变量的任务。理想情况下,会出现一条警告,说明该任务已被跳过。“

答:例如,给定带有变量的文件

shell>cat vars-test.yml
测试变量1:测试变量1
加密文件

shell>ansible vault encrypt vars-test.yml
新Vault密码:
确认新Vault密码:
加密成功
外壳>cat vars-test.yml
$ANSIBLE_保险库;1.1;AES256
61373230346437306135303463393166323063656561623863306333313837666561653466393835
37386665323038376139613766343930346263633032330A323336643061373039613330653237
30666364376266396633613162626536383161306262613062373239343232663935376364383431
6335623366613834360A3365316565376266623761663237663764336532326331393836613963
64356632633863353534323636313231633866613635343962383463636565303032
然后是剧本

shell>cat pb.yml
-主持人:test_01
任务:
-包括变量:vars-test.yml
忽略错误:true
-设定事实:
test_var1:“{{test_var1 | default('default')}”
-名称:如果test_var1被解密,则执行任务
区块:
-调试:
msg:executetask1
-调试:
msg:executetask2
时间:test_var1!='违约'
给出(节略)

shell>ansible playbook pb.yml——询问保险库通行证
任务[包括变量]****
ok:[测试单元01]
任务[设置事实]****
ok:[测试单元01]
任务[调试]****
确定:[测试\u 01]=>
msg:executetask1
任务[调试]****
确定:[测试\u 01]=>
msg:executetask2
如果您没有为命令提供playbook提供的密码(节略)

shell>ansible剧本pb.yml
播放[测试01]****
任务[包括变量]****
致命:[测试\u 01]:失败!=>更改=错误
ansible_事实:{}
ansible_包含的_var_文件:[]
消息:正在尝试解密,但未找到vault机密
…忽略
任务[设置事实]****
ok:[测试单元01]
任务[调试]****
跳过:[测试单元01]
任务[调试]****
跳过:[测试单元01]

gary lopez方法的一个竞争理论是确保所有ansible vault变量在开始时都被解密,因此它很快就会失败;甚至说,正如mucha竞争理论对gary lopez的方法所说的那样,其方法是确保所有ansible vault变量在游戏开始时都被解密,因此它很快就会失败;甚至说了那么多