yaml - 如何引用yaml文件中的值?

标签 yaml

我写了一个 YAML 文件如下:

private_ips:
    - 192.168.1.1
    - 192.168.1.2
    - 192.168.1.3
    - 192.168.1.4

testcases:
    - name: test_outbound
      ip: << I want to use reference to  private_ips[0] = '192.168.1.1'

如何在 YAML 文件中使用引用?

最佳答案

您可以使用以下内容:

ip: !Ref private_ips.0

在 YAML 中。但这将要求加载 YAML 的程序为标签 !Ref 实现特殊类型。以相对于当前数据结构的方式解释其节点。这在大多数 YAML 加载器中有些问题,因为它们执行深度优先遍历并且在构建 !Ref 时没有任何概念。树 YAML 文档根的标记节点。这可以通过加载数据结构后的第二遍来解决。 YAML 规范中没有“快捷方式”来执行这种遍历文档以获取值而无需加载程序执行某些特殊操作(即未在 YAML 规范中指定)。

YAML 规范中包含 anchor (由 & 表示)和别名(由 * 表示)的概念,这取决于您想如何使用它,这可能会解决您的问题,例如如果您想尝试使用哪个 IP 地址进行测试:
private_ips:
    - &test 192.168.1.1
    - 192.168.1.2
    - 192.168.1.3
    - 192.168.1.4

testcases:
    - name: test_outbound
      ip: *test

这应该在任何符合规范的 YAML 加载器中加载,就好像最后一行写为:
      ip: 192.168.1.1

没有你的程序做任何额外的处理。

关于yaml - 如何引用yaml文件中的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54742161/

相关文章:

go - 如何创建用 golang sciter 库编写的程序的 snap YAML 文件?

java - 使用 Feign @RequestLine 添加decodeSlash

java - 将多行字符串从 JsonNode 序列化为 YAML 字符串会添加双引号和 "\n"

python - 通过 PyYAML 序列化命名元组

azure - 如何将参数值与Azure yaml管道中的字符串进行比较

Ruby:从 YAML 读取哈希数组

java - 如何在java中读取docker-compose.yml文件

python - Google App Engine URL 处理程序运行时出错

python - 在 Google 应用引擎 Python 中提供静态 html

go - Go 中的 YAML 自定义标签