具有特定于案例的值的YAML可重用变量

具有特定于案例的值的YAML可重用变量,yaml,template-variables,Yaml,Template Variables,在.yml配置中,是否可以根据特定情况设置变量的动态属性。例如: MY_VAR: &MY_VAR keys: key2: blahblahblah key3: blahblahblah # only apply this for section2, not section1 section1: var: *MY_VAR section2: # this case needs key3 set, otherwise everything else is the

.yml
配置中,是否可以根据特定情况设置变量的动态属性。例如:

MY_VAR: &MY_VAR
  keys:
   key2: blahblahblah
   key3: blahblahblah  # only apply this for section2, not section1

section1: 
 var: *MY_VAR

section2:  # this case needs key3 set, otherwise everything else is the same 
 var: *MY_VAR
YAML的锚(
&MY_VAR
)和引用(
*MY_VAR
)在规范中是为了防止重复,但也允许序列化层次结构中多次出现的对象,并允许对它们进行反序列化,以便它们再次指向内存中的相同结构

这不是带有参数和/或条件的字符串级宏工具。在您的示例中,如果设置了
MY_VAR->key1
,则也会更改
section1->VAR->key1


当然,应用程序可以解释它加载的值(例如,在映射中形成键标量的复杂字符串上),但是YAML规范中没有这方面的工具。这必须(并且可以)在应用程序级别完成。

我将
key1
key2
对齐,假设存在类型。正如您的示例所示,YAML是不正确的。另请参见:另请参见:另请参见:我知道section1.var映射到MY_var&如果MY_var发生变化,则会发生变化。我看到了一个ruby的示例,其中每个case()都可以更新共享变量中的属性。我想知道这是否可能作为yml功能或与nodejs一起使用。@如果您在YAML内,则不进行跟踪。读取YAML文件的应用程序需要这样做。我已经通过修补我的ruamel.yaml解析器(python)完成了这项工作,但仍然是程序加载解析器来完成这项工作。尽管它看起来对程序的其余部分是透明的,但它不是YAML的一个特性,也不可移植。