我在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
上的冒号后添加空格时,错误将更改为:
ERROR! The default/main.yml file for role 'dnsmasq' must contain a dictionary of
variables
我花了一些时间在yaml语法上,但我认为这个想法是错误的,我应该使用另一个ansible-playbook解决方案。
答案 0 :(得分:1)
你用:
开始你的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
行,它们是序列项中包含的映射的键。
答案 1 :(得分:1)
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
它为我提供了一个更简单,更直接的解决方案。