我正在尝试使用共享via
和table
YAML 锚点语法添加多个静态路由。这是一个示例custom.yaml
文件:
network:
version: 2
renderer: networkd
ethernets:
enp5s0:
dhcp4: false
accept-ra: false
addresses:
- 192.0.2.2/24
gateway: 192.0.2.1
nameservers:
addresses:
[8.8.8.8, 1.1.1.1]
routing-policy:
- to: 0.0.0.0/0
table: 2 # custom
priority: 10
routes:
- &custom-route
to: 198.18.0.0/24
via: 192.0.2.1
table: 2
- <<: *custom-route
to: 198.18.2.0/24
- <<: *custom-route
to: 198.18.4.0/24
虽然它不是我的实际配置文件,但据我所知,它应该演示并重现我所面临的问题。
运行时netplan apply
,这是我得到的输出:
/etc/netplan/custom.yaml:48:11: Error in network definition: unknown key '<<'
- <<: *custom-route
^
有什么方法可以实现这个目标吗?
以防万一,我的服务器集群包含 Ubuntu 20.04 和 22.04 系统。如果解决方案适用于这两个版本,那就最好了。
答案1
正确确认netplan不支持合并键。
这意味着需要一个不太花哨的配置:
network:
version: 2
renderer: networkd
ethernets:
enp5s0:
dhcp4: false
accept-ra: false
addresses:
- 192.0.2.2/24
gateway: 192.0.2.1
nameservers:
addresses:
[8.8.8.8, 1.1.1.1]
routing-policy:
- to: 0.0.0.0/0
table: 2 # custom
priority: 10
routes:
- to: 198.18.0.0/24
via: 192.0.2.1
table: 2
- to: 198.18.2.0/24
via: 192.0.2.1
table: 2
- to: 198.18.4.0/24
via: 192.0.2.1
table: 2
来自您引用的页面:
警告:支持合并键
在特定 YAML 版本中支持(YAML 版本不同/每个版本都不同):
自 1.0 版起,锚点和别名就是 YAML 的一部分,也是 YAML 1.1 和当前 YAML 1.2 的一部分。
合并键只是 YAML 1.1 的一部分,该版本已弃用,而不是 YAML 1.2 或 1.0 的一部分。这意味着合并键天生就被弃用了。从技术上讲,这在规范中是不可能的,这也许可以解释为什么 YAML™ 版本 1.1 的合并键语言独立类型是一个仅有单个实例的工作草案。它似乎属于 YAML 1.1 版本的通用可用性。
根据 Flyx 在 Stackoverflow 上的一篇文章以及 YAML RFC(Ingy döt Net、Tinita)的说法,合并键在 YAML 1.1 中已被弃用。
2017 年的 SO 建议在即将发布的 YAML 版本中用“更好的东西”替换合并键(最佳猜测是 YAML 1.3 将于 2020 年 11 月发布),RFC 索引中逐字逐句地注明“删除合并键”(Brian Ingerson / Ingy döt Net),以使删除成为新的 RFC。
这就是合并密钥不适用于 Netplan 的原因。