具有特定于案例值的 YAML 可重用变量
Posted
技术标签:
【中文标题】具有特定于案例值的 YAML 可重用变量【英文标题】:YAML reusable variables with case-specific values 【发布时间】:2015-09-03 11:40:33 【问题描述】:.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
【问题讨论】:
我对齐key1
和key2
假设有一个类型。因为你的例子是不正确的 YAML。
另见:***.com/questions/41620674/use-placeholders-in-yaml
另见: ***.com/questions/15777987/…
另见: ***.com/questions/37299882/…
【参考方案1】:
YAML 的锚点 (&MY_VAR
) 和引用 (*MY_VAR
) 在规范中是为了防止重复,同时也允许对层次结构中多次出现的对象进行序列化,并允许对它们进行反序列化,以便它们再次指向内存中的相同结构。
这不是带有参数和/或条件的字符串级宏工具。在您的示例中,如果您设置 MY_VAR->key1
,您还会更改 section1->var->key1
的值
当然,应用程序可以解释它加载的值(例如,在为映射中的键形成标量的复杂字符串上),但 YAML 规范中没有这种功能。这必须(并且可以)在应用程序级别完成。
【讨论】:
我知道 section1.var 映射到 MY_VAR & 如果 MY_VAR 发生变化,它会发生变化。我看到了一个 ruby 示例,它看起来可以更新共享变量中的属性,每个案例 (gist.github.com/bowsersenior/979804)。想知道这是否可以作为 yml 功能或使用 nodejs。 @trace 如果您留在 YAML 中,则不会。读取 YAML 文件的应用程序需要执行此操作。我已经通过修补我的 ruamel.yaml 解析器(python)来做到这一点,但它仍然是加载解析器的程序。尽管它对程序的其余部分看起来是透明的,但它不是 YAML 的一个特性,也不是可移植的。以上是关于具有特定于案例值的 YAML 可重用变量的主要内容,如果未能解决你的问题,请参考以下文章