我有一个类似的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”}
这是怎么回事?
答案 0 :(得分:1)
也可以使用quote过滤器。
SOME_FLAG: "{{ some_flag|quote }}"
详细信息。 False
是布尔值,不是字符串。这就是消息说的“为env选项找到非字符串值”。 Ansible要求您引用它“模糊的env选项必须用引号引起来,以避免被解释”,否则它将被“解释”为布尔值而不是字符串。
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\""