![](/img/trans.png)
[英]ansible when conditional statement - warning about jinja2 templating delimiters
[英]ansible with_items when jinja2 templating delimiters
如果未在vars中定义密码,则任务是生成密码。 它在小于2.3的版本中有效,但是现在我看到了警告。
任务:
- debug: var={{item}}
when:
- "{{item}} is not defined"
with_items:
- XXX_PASSWORD
- YYY_PASSWORD
结果:
TASK [bootstrap : debug] ****************************************************************************
[WARNING]: when statements should not include jinja2 templating delimiters such as {{ }} or {% %}.
Found: {{item}} is not defined
ok: [example.com] => (item=XXX_PASSWORD) => {
"XXX_PASSWORD": "VARIABLE IS NOT DEFINED!",
"item": "XXX_PASSWORD"
}
ok: [example.com] => (item=YYY_PASSWORD) => {
"YYY_PASSWORD": "VARIABLE IS NOT DEFINED!",
"item": "YYY_PASSWORD"
}
问题是,当我从when语句停止工作时删除“ {{}}”时,似乎总是定义了with_items中的vars。
我应该如何避免此警告并保持任务正常运行?
答案:此代码正在回答我的问题:
- set_fact:
XXX_PASSWORD: "{% if XXX_PASSWORD | default('') == '' %}{{ lookup('pipe','openssl rand -hex 16') }}{% else %}{{ XXX_PASSWORD }}{% endif %}"
YYY_PASSWORD: "{% if YYY_PASSWORD | default('') == '' %}{{ lookup('pipe','openssl rand -hex 16') }}{% else %}{{ YYY_PASSWORD }}{% endif %}"
ZZZ_PASSWORD: "{% if ZZZ_PASSWORD | default('') == '' %}{{ lookup('pipe','openssl rand -hex 16') }}{% else %}{{ ZZZ_PASSWORD }}{% endif %}"
...
and so on...
在我的情况下,似乎无法使用“ with_items”> = 2.3
为什么不只使用默认过滤器?
set_fact:
XXX_PASSWORD: "{{ XXX_PASSWORD | default('change_me' | shuffle | join) }}"
如果在执行set_fact
时设置了XXX_PASSWORD
,则将其保留XXX_PASSWORD
;如果未定义XXX_PASSWORD
生成新密码。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.