使用 WHEN 定义变量时出现 yaml 语法错误
yaml syntax error when defining variables using WHEN
我在 defaults/main.yml:
中定义了这些
- mode : production
- consul_server_address :192.168.1.5
when : mode == "production"
- consul_server_address :192.168.2.5
when : mode == "staging"
但我得到了:
The offending line appears to be:
- consul_server_address : 192.168.1.5
when : mode == "production"
^ here
当我在 consul_server_address
的冒号后添加 space 时,错误变为:
ERROR! The default/main.yml file for role 'dnsmasq' must contain a dictionary of
variables
我花了一些时间在 yaml 语法上,但我认为这个想法是错误的,我应该使用另一个 ansible-playbook 解决方案。
您使用 YAML 启动:
- mode : production
-
表示一个序列项,因此这一行定义了 YAML 文档的根元素是一个序列。另一个序列项如下:
- consul_server_address : 192.168.1.5
但是现在,有一行不是序列项:
when : mode == "production"
这是无效的,因为我们处于缩进级别 0
,其中包含根元素,它是一个序列,可能只包含序列项。但是 when : …
是一个映射键,因此在这里是非法的。
您可能想要做的是:
- mode : production
- consul_server_address : 192.168.1.5
when : mode == "production"
- consul_server_address : 192.168.2.5
when : mode == "staging"
通过适当缩进 when
行,它们是序列项中包含的映射的键。
有人在 Ansible 的 IRC 频道上建议我为此目的使用 groupvars/hostvars
。
我编辑了我的 hosts
清单文件并做了如下操作:
[nginx-staging]
IP_ADDRESS OR FQDN
[nginx-staging:vars]
...
consul_server_address=192.168.2.5
[nginx-production]
IP_ADDRESS OR FQDN
[nginx-production:vars]
...
consul_server_address=192.168.1.5
它为我提供了一个更简单、更直接的解决方案。
我在 defaults/main.yml:
中定义了这些- mode : production
- consul_server_address :192.168.1.5
when : mode == "production"
- consul_server_address :192.168.2.5
when : mode == "staging"
但我得到了:
The offending line appears to be:
- consul_server_address : 192.168.1.5
when : mode == "production"
^ here
当我在 consul_server_address
的冒号后添加 space 时,错误变为:
ERROR! The default/main.yml file for role 'dnsmasq' must contain a dictionary of
variables
我花了一些时间在 yaml 语法上,但我认为这个想法是错误的,我应该使用另一个 ansible-playbook 解决方案。
您使用 YAML 启动:
- mode : production
-
表示一个序列项,因此这一行定义了 YAML 文档的根元素是一个序列。另一个序列项如下:
- consul_server_address : 192.168.1.5
但是现在,有一行不是序列项:
when : mode == "production"
这是无效的,因为我们处于缩进级别 0
,其中包含根元素,它是一个序列,可能只包含序列项。但是 when : …
是一个映射键,因此在这里是非法的。
您可能想要做的是:
- mode : production
- consul_server_address : 192.168.1.5
when : mode == "production"
- consul_server_address : 192.168.2.5
when : mode == "staging"
通过适当缩进 when
行,它们是序列项中包含的映射的键。
有人在 Ansible 的 IRC 频道上建议我为此目的使用 groupvars/hostvars
。
我编辑了我的 hosts
清单文件并做了如下操作:
[nginx-staging]
IP_ADDRESS OR FQDN
[nginx-staging:vars]
...
consul_server_address=192.168.2.5
[nginx-production]
IP_ADDRESS OR FQDN
[nginx-production:vars]
...
consul_server_address=192.168.1.5
它为我提供了一个更简单、更直接的解决方案。