Ansible错误地抱怨未报价的值

时间:2019-08-27 16:35:44

标签: ansible yaml jinja2

我有一个类似的Ansible设置:

roles/myrole/defaults/main.yml
some_flag: "False"
roles/myrole/vars/some_env.yml
SOME_FLAG: "{{ some_flag }}"
roles/myrole/tasks/main.yml
---
- name: Load env
  include_vars:
    file: "vars/some_env.yml"
    name: "some_env"

- name: Some Task
  docker_container:
    name: "some_container"
    image: "some_image"
    env: "{{ some_env }}"

这里一切看起来不错,所有内容都被引用了(另请参见this question)。即便如此,Ansible(2.8.3)仍抱怨:

  致命:[myhost]:失败! => {“ changed”:false,“ msg”:“发现env选项的非字符串值。模糊的env选项必须用引号引起来,以避免被解释。关键:SOME_FLAG”}

这是怎么回事?

2 个答案:

答案 0 :(得分:1)

也可以使用quote过滤器。

SOME_FLAG: "{{ some_flag|quote }}"

详细信息。 False是布尔值,不是字符串。这就是消息说的“为env选项找到非字符串值”。 Ansible要求您引用它“模糊的env选项必须用引号引起来,以避免被解释”,否则它将被“解释”为布尔值而不是字符串。


引用YAML Basics

  

Ansible并没有真正使用太多,但是您也可以以几种形式指定布尔值(真/假):

create_key: yes
needs_agent: no
knows_oop: True
likes_emacs: TRUE
uses_cvs: false

答案 1 :(得分:0)

我不知道到底发生了什么,但显然在替换管道中的某个地方,"False"被解析为布尔值。

添加一组额外的转义引号有助于:

roles/myrole/defaults/main.yml
some_flag: "\"False\""