Ansible错误地抱怨未引用的值

Ansible错误地抱怨未引用的值,ansible,yaml,jinja2,Ansible,Yaml,Jinja2,我有一个类似这样的Ansible设置: roles/myrole/defaults/main.yml some_flag: "False" --- - name: Load env include_vars: file: "vars/some_env.yml" name: "some_env" - name: Some Task docker_container: name: "some_container" image: "some_image"

我有一个类似这样的Ansible设置:

roles/myrole/defaults/main.yml
some_flag: "False"
---
- 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 }}"
some_flag: "\"False\""
roles/myrole/vars/some_env.yml
SOME_FLAG: "{{ some_flag }}"
roles/myrole/tasks/main.yml
some_flag: "False"
---
- 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 }}"
some_flag: "\"False\""
这里的一切看起来都很好,一切都被引用了(另请参阅)。即便如此,Ansible(2.8.3)仍抱怨:

致命:[myhost]:失败!=>{“changed”:false,“msg”:“为env选项找到了非字符串值。不明确的env选项必须用引号括起来,以避免被解释。键:SOME_标志”}


发生了什么事?

我不知道确切发生了什么,但显然在替换管道的某个地方,
将“False”
解析为布尔值

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

roles/myrole/defaults/main.yml
some_flag: "False"
---
- 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 }}"
some_flag: "\"False\""

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

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

roles/myrole/defaults/main.yml
some_flag: "False"
---
- 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 }}"
some_flag: "\"False\""

也可以使用过滤器

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

Ansible实际上并没有过多地使用这些值,但您也可以以多种形式指定布尔值(真/假):


也可以使用过滤器

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

Ansible实际上并没有过多地使用这些值,但您也可以以多种形式指定布尔值(真/假):


FWIW,我们有像
“8080”
这样的端口通过同一管道,它们不会导致任何错误。FWIW,我们有像
“8080”这样的端口
通过相同的管道,它们不会导致任何错误。问题仍然是为什么Ansible或Jinja2有时会丢弃我在任何地方都有的完美的引号。我是否正确理解该过滤器与我的答案中的转义引号具有相同的效果?问题仍然是为什么Ansible或Jinja2有时会丢弃这些完美的引号去掉我在任何地方都有的完美的引号。我是否正确地理解了过滤器与我的答案中的转义引号具有相同的效果?