在 kafka 代理属性的模板文件中,我们使用变量{{kafka.broker.id}}
引用库存文件hosts.yml
。 但是{{kafka}}
变量是在角色的defaults
。
由于Ansible 的变量优先级层次结构,这仍然会正确运行,因为{{kafka.broker.id}}
将首先从inventory_host
字典中获取,但为了清楚起见,最好不要混合命名空间。
我认为我们应该使用{{ inventory_hostname.kafka.broker.id }}
来说明这一点。
同样的事情发生在listeners=PLAINTEXT://:{{broker.config.port}}
。 在这种情况下, {{broker}}
来自confluent.common/defaults/main.yml
。 在这里更好地命名空间将使事情更加清晰。
我现在看到这就是ansible.cfg
的合并属性正在做的事情。 我仍然认为这会使剧本的可读性降低并且更难学习。
当我今天运行“confluent.kafka-broker”角色并花了几个小时找到它时,我遇到了同样的麻烦。
@chuck-confluent - 我今天遇到了这种情况。 当我更新 base_server_properties Jinja 模板以使用broker.id={{ inventory_hostname.kafka.broker.id }}
并重新运行 Ansible 时,出现以下错误。 仍在尝试调试原因。
TASK [confluent.kafka经纪人:经纪人sasl_ssl配置] * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
致命:[本地主机]:失败! => {"changed": false, "msg": "AnsibleUndefinedVariable: 'ansible.parsing.yaml.objects.AnsibleUnicode object' 没有属性 'kafka'"}
@chuck-confluent 我们刚刚合并了以下 PR,这使得大多数(如果不是全部)属性都可以覆盖。 应该可以解决您所看到的问题。
最有用的评论
我现在看到这就是
ansible.cfg
的合并属性正在做的事情。 我仍然认为这会使剧本的可读性降低并且更难学习。