Ansible 变量名 `environment` 是保留的吗?

Ansible variable name `environment` is reserved?

我今天遇到了一个奇怪的情况。我在剧本 environment 中调用了我的一个变量。如果我使用 debug 指令转储变量,则显示正常

   "environment": "development",

但是如果我尝试使用 {{ environment }} 从脚本访问它,它总是被分配一个值 {}。我重命名它并且它工作正常。这是为什么? environment 是 Ansible 中的保留名称吗?我检查了变量转储 - 与定义的变量没有冲突。

我在 Google group 中找到了关于 environment 的声明:

Yes, environment is a restricted keyword. Initially specific within playbooks, but it gets injected in the runner:

inject['environment'] = self.environment

so it will erase whatever value was set by inventory of vars.

如果使用保留变量,有一个尚未解决的 feature request 警告。

有趣的是,Environment(大写)是可用的,但 environment(小写)并不像您发现的那样。

有一天,我不小心使用了以小写字母指定的现有环境变量,并在尝试诊断问题时玩得很开心。

我也会坚持使用不同的名称(尽管我仍然故意使用 Environment 只是为了提醒自己变量名称区分大小写)。