/etc/netplan/yaml文件优先级问题
-
字典顺序规则:
- Netplan 会按照文件名的字母顺序加载配置文件。
- 例如,
01-netcfg.yaml
的文件名在字典顺序上排在50-cloud-init.yaml
之前,因此01-netcfg.yaml
会先被加载,50-cloud-init.yaml
会后被加载。
-
覆盖机制:
- 如果两个文件中存在相同的配置项,后加载的文件会覆盖先加载的文件。
- 例如:
- 如果
01-netcfg.yaml
中定义了eth0
的 IP 地址,而50-cloud-init.yaml
中也定义了eth0
的 IP 地址,那么50-cloud-init.yaml
中的配置会覆盖01-netcfg.yaml
中的配置。
- 如果
-
新建文件的命名:
- 为了让新建的文件优先级更高,你可以将文件名命名为字典顺序上排在
50-cloud-init.yaml
之前的名称,例如01-netcfg.yaml
或10-static-config.yaml
。 - 这样,Netplan 会先加载你的自定义配置文件,然后再加载
50-cloud-init.yaml
,确保你的配置不会被覆盖。
- 为了让新建的文件优先级更高,你可以将文件名命名为字典顺序上排在
示例
假设有以下两个文件:
01-netcfg.yaml
network:
version: 2
ethernets:
eth0:
dhcp4: no
addresses:
- 192.168.1.100/24
gateway4: 192.168.1.1
50-cloud-init.yaml
network:
version: 2
ethernets:
eth0:
dhcp4: yes
最终生效的配置
Netplan 会合并这两个文件,最终的配置为:
network:
version: 2
ethernets:
eth0:
dhcp4: yes
addresses:
- 192.168.1.100/24
gateway4: 192.168.1.1
50-cloud-init.yaml
中的dhcp4: yes
会覆盖01-netcfg.yaml
中的dhcp4: no
。01-netcfg.yaml
中的addresses
和gateway4
配置会被保留,因为50-cloud-init.yaml
中没有定义这些字段。
如何确保新建文件的优先级更高?
-
文件名命名规则:
- 将新建的文件命名为字典顺序上排在
50-cloud-init.yaml
之前的名称,例如:01-netcfg.yaml
10-static-config.yaml
00-custom-config.yaml
- 将新建的文件命名为字典顺序上排在
-
避免冲突:
- 如果你希望完全避免
50-cloud-init.yaml
的影响,可以禁用cloud-init
的网络配置功能(见下文)。
- 如果你希望完全避免
禁用 cloud-init
的网络配置(可选)
如果你不希望 cloud-init
干扰你的网络配置,可以禁用它:
-
创建一个新的配置文件:
sudo nano /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg
-
添加以下内容:
network: {config: disabled}
-
删除
50-cloud-init.yaml
文件:sudo rm /etc/netplan/50-cloud-init.yaml