繁体   English   中英

jinja2模板分隔符时的ansible with_items

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM