NVUE 代码片段
NVUE 支持传统代码片段和灵活代码片段
- 使用传统代码片段将配置添加到
/etc/network/interfaces
、/etc/frr/frr.conf
、/etc/frr/daemons
、/etc/cumulus/switchd.conf
、/etc/cumulus/datapath/traffic.conf
或/etc/ssh/sshd_config
文件。 - 使用灵活代码片段来管理系统上的任何其他文本文件。
- 代码片段配置与特定配置文件关联的单个参数。
- 您只能设置或取消设置代码片段;您不能修改、部分更新或更改代码片段。
- 设置代码片段值会替换任何现有代码片段值。
- Cumulus Linux 仅支持一个配置文件的代码片段。
- 只有某些配置文件支持代码片段。
- NVUE 不解析或验证代码片段内容,也不在您应用代码片段后验证生成的文件。
- PATCH 只是应用代码片段的方法,并不指任何代码片段功能。
- 随着 NVUE 支持更多功能并引入新语法,代码片段和灵活代码片段将变为无效。在您将 Cumulus Linux 升级到新版本之前,请查看新增功能以了解新的 NVUE 语法,如果 NVUE 为代码片段配置的功能引入了新语法,请删除该代码片段。
传统代码片段
如果您使用 NVUE 命令配置 Cumulus Linux,然后想要配置尚不支持 NVUE 对象模型的功能,请使用传统代码片段。您以 yaml
格式创建代码片段,然后使用 nv config patch
命令将配置添加到文件。
nv config patch
命令要求您使用代码片段 .yaml
文件的完全限定路径名;例如,您不能将 ./
与 nv config patch
命令一起使用。
/etc/frr/frr.conf 代码片段
示例 1:顶层配置
NVUE 不支持配置 BGP 以跨默认路由进行对等。以下示例配置 BGP 以从默认 VRF 跨默认路由进行对等
使用以下传统代码片段创建
.yaml
文件cumulus@switch:~$ sudo nano bgp_snippet.yaml - set: system: config: snippet: frr.conf: | ip nht resolve-via-default
运行以下命令以修补配置
cumulus@switch:~$ nv config patch bgp_snippet.yaml
运行
nv config apply
命令以应用配置cumulus@switch:~$ nv config apply
验证配置是否存在于
/etc/frr/frr.conf
文件的末尾cumulus@switch:~$ sudo cat /etc/frr/frr.conf ... ! end of router ospf block !---- CUE snippets ---- ip nht resolve-via-default
示例 2:嵌套配置
NVUE 不支持使用来自 RFC 8365 的自动派生值配置 EVPN 路由目标。以下示例配置 BGP 以启用 RFC 8365 派生的路由器目标
使用以下传统代码片段创建
.yaml
文件cumulus@switch:~$ sudo nano bgp_snippet.yaml - set: system: config: snippet: frr.conf: | router bgp 65517 vrf default address-family l2vpn evpn autort rfc8365-compatible
确保使用空格而不是制表符;解析器期望 yaml 格式中使用空格。
运行以下命令以修补配置
cumulus@switch:~$ nv config patch bgp_snippet.yaml
运行
nv config apply
命令以应用配置cumulus@switch:~$ nv config apply
验证配置是否存在于
/etc/frr/frr.conf
文件的末尾cumulus@switch:~$ sudo cat /etc/frr/frr.conf ... ! end of router bgp 65517 vrf default !---- CUE snippets ---- router bgp 65517 vrf default address-family l2vpn evpn autort rfc8365-compatible
FRR 的传统代码片段将内容写入 /etc/frr/frr.conf
文件。当您使用 nv config apply
命令应用配置和代码片段时,FRR 服务会遍历并读取 /etc/frr/frr.conf
文件。
示例 3:EVPN 多宿主 FRR 调试
NVUE 不支持为 EVPN 多宿主配置 FRR 调试。以下示例配置 FRR 调试
创建一个
.yaml
文件并添加以下传统代码片段cumulus@switch:~$ sudo nano mh_debug_snippet.yaml - set: system: config: snippet: frr.conf: | debug bgp evpn mh es debug bgp evpn mh route debug bgp zebra debug zebra evpn mh es debug zebra evpn mh mac debug zebra evpn mh neigh debug zebra evpn mh nh debug zebra vxlan
运行以下命令以修补配置
cumulus@switch:~$ nv config patch mh_debug_snippet.yaml
运行
nv config apply
命令以应用配置cumulus@switch:~$ nv config apply
验证配置是否存在于
/etc/frr/frr.conf
文件中cumulus@switch:~$ sudo cat /etc/frr/frr.conf ... !---- NVUE snippets ---- debug bgp evpn mh es debug bgp evpn mh route debug bgp zebra debug zebra evpn mh es debug zebra evpn mh mac debug zebra evpn mh neigh debug zebra evpn mh nh debug zebra vxlan
FRR 的传统代码片段将内容写入 /etc/frr/frr.conf
文件。当您使用 nv config apply
命令应用配置和代码片段时,FRR 服务会遍历并读取 /etc/frr/frr.conf
文件。
/etc/network/interfaces 代码片段
MLAG 定时器示例
NVUE 仅支持配置 MLAG 服务超时(initDelay)中的一个。以下示例将 MLAG 对等超时配置为 400 秒
创建一个
.yaml
文件并添加以下传统代码片段cumulus@switch:~$ sudo nano mlag_snippet.yaml - set: system: config: snippet: ifupdown2_eni: peerlink.4094: | clagd-args --peerTimeout 400
运行以下命令以修补配置
cumulus@switch:~$ nv config patch mlag_snippet.yaml
运行
nv config apply
命令以应用配置cumulus@switch:~$ nv config apply
验证配置是否存在于
/etc/network/interfaces
文件的 peerlink.4094 节中cumulus@switch:~$ sudo cat /etc/network/interfaces ... auto peerlink.4094 iface peerlink.4094 clagd-args --peerTimeout 400 clagd-peer-ip linklocal clagd-backup-ip 10.10.10.2 clagd-sys-mac 44:38:39:BE:EF:AA clagd-args --initDelay 180 ...
传统桥接示例
NVUE 不支持配置传统网桥。以下示例配置一个名为 br0
的传统网桥,IP 地址为 11.0.0.10/24。swp1、swp2 是网桥的成员。
创建一个
.yaml
文件并添加以下传统代码片段cumulus@switch:~$ sudo nano bridge_snippet.yaml - set: system: config: snippet: ifupdown2_eni: eni_stanzas: | auto br0 iface br0 address 11.0.0.10/24 bridge-ports swp1 swp2 bridge-vlan-aware no
运行以下命令以修补配置
cumulus@switch:~$ nv config patch bridge_snippet.yaml
运行
nv config apply
命令以应用配置cumulus@switch:~$ nv config apply
验证配置是否存在于
/etc/network/interfaces
文件的末尾cumulus@switch:~$ sudo cat /etc/network/interfaces ... auto br0 iface br0 address 11.0.0.10/24 bridge-ports swp1 swp2 bridge-vlan-aware no
VLAN 感知 RSTP 定时器示例
NVUE 不支持在 VLAN 感知网桥上配置 RSTP 定时器。以下示例为 NVUE 默认网桥 br_default
配置非默认 RSTP 定时器
创建一个
.yaml
文件并添加以下传统代码片段cumulus@switch:~$ sudo nano vlan-aware_bridge_snippet.yaml - set: system: config: snippet: ifupdown2_eni: br_default: | mstpctl-maxage 10 mstpctl-hello 1 mstpctl-fdelay 8
运行以下命令以修补配置
cumulus@switch:~$ nv config patch vlan-aware_bridge_snippet.yaml
运行
nv config apply
命令以应用配置cumulus@switch:~$ nv config apply
验证配置是否存在于
/etc/network/interfaces
文件的末尾cumulus@switch:~$ sudo cat /etc/network/interfaces ... auto br_default iface br_default mstpctl-maxage 10 mstpctl-hello 1 mstpctl-fdelay 8 ...
/etc/cumulus/datapath/traffic.conf 代码片段
要为 NVUE 尚不支持的 Cumulus Linux switchd
模块添加数据路径配置,请创建 traffic.conf
代码片段。
以下示例创建一个名为 traffic_conf_snippet.yaml
的文件,并启用弹性哈希设置。
创建一个
.yaml
文件并添加以下传统代码片段cumulus@switch:~$ sudo nano traffic_conf_snippet.yaml - set: system: config: snippet: traffic.conf: | resilient_hash_enable = TRUE
运行以下命令以修补配置
cumulus@switch:~$ nv config patch traffic_conf_snippet.yaml
运行
nv config apply
命令以应用配置cumulus@switch:~$ nv config apply
验证配置是否存在于
/etc/cumulus/datapath/traffic.conf
文件的末尾cumulus@switch:~$ sudo cat /etc/cumulus/datapath/traffic.conf ... !---- NVUE snippets ---- resilient_hash_enable = TRUE
/etc/snmp/snmpd.conf 代码片段
要添加 NVUE 命令尚不可用的 Cumulus Linux SNMP 代理配置,请创建 snmpd.conf
代码片段。
以下示例创建一个名为 snmpd.conf_snippet.yaml
的文件,并将只读社区字符串和侦听地址设置为在 mgmt VRF 中运行。
除非您首先使用 NVUE nv set system snmp-server state enable
和 nv set system snmp-server listening-address
命令(或使用等效的 REST API 方法)启用 SNMP,否则 SNMP 代码片段不会生效。
创建一个
.yaml
文件并添加以下传统代码片段cumulus@switch:~$ sudo nano snmpd.conf_snippet.yaml - set: system: config: snippet: snmpd.conf: | rocommunity cumuluspassword default agentaddress udp:@mgmt:161
运行以下命令以修补配置
cumulus@switch:~$ nv config patch snmpd.conf_snippet.yaml
运行
nv config apply
命令以应用配置cumulus@switch:~$ nv config apply
验证配置是否存在于
/etc/snmp/snmpd.conf
文件的末尾cumulus@switch:~$ sudo cat /etc/snmp/snmpd.conf ... !---- NVUE SNMP Server Snippets ---- rocommunity cumuluspassword default agentaddress udp:@mgmt:161
/etc/ssh/sshd_config 代码片段
要添加 NVUE 命令尚不可用的 SSH 服务配置,请创建 sshd_config
代码片段。
以下示例创建一个名为 sshd_config_snippet.yaml
的文件,以允许 root 登录并为除用户 anoncvs
之外的所有用户启用 X11 转发。该代码片段还禁用用户 anoncvs
的 TCP 转发,并在 anoncvs
登录时运行 cvs server
命令。
创建一个
.yaml
文件并添加以下传统代码片段cumulus@switch:~$ sudo nano sshd_config_snippet.yaml - set: system: config: snippet: sshd_config: | PermitRootLogin yes X11Forwarding yes Match User anoncvs X11Forwarding no AllowTcpForwarding no ForceCommand cvs server
运行以下命令以修补配置
cumulus@switch:~$ nv config patch sshd_config_snippet.yaml
运行
nv config apply
命令以应用配置cumulus@switch:~$ nv config apply
验证配置是否存在于
/etc/ssh/sshd_config
文件的末尾cumulus@switch:~$ sudo cat /etc/ssh/sshd_config ... !---- NVUE snippets ---- PermitRootLogin yes X11Forwarding yes Match User anoncvs X11Forwarding no AllowTcpForwarding no ForceCommand cvs server
灵活代码片段
灵活代码片段是传统代码片段的扩展,可让您管理系统上的任何文本文件。
- 您可以创建新文件或修改 NVUE 不管理的现有文件。
- 您可以将配置添加到 NVUE 管理的文件。
您通过 CLI 或 REST API 用于配置和管理灵活代码片段的帐户必须在 sudo 组中,其中包括 NVUE system-admin
角色,或者您必须是 root 用户。
NVUE 管理的文件
您可以使用灵活代码片段将配置添加到以下 NVUE 管理的文件
文件名 | 描述 |
---|---|
/etc/cumulus/csmgrd | csmgrctl 命令的配置文件。 |
/etc/default/isc-dhcp-relay-<VRF> | DHCP 中继的配置文件。对此文件的更改需要重启 dhcrelay@<VRF>.service 。 |
/etc/resolv.conf | DNS 解析的配置文件。 |
/etc/hosts | 交换机主机名的配置文件。 |
/etc/default/isc-dhcp-server-<VRF> | DHCP 服务器的配置文件。对此文件的更改需要重启 dhcpd@<VRF>.service 。 |
/etc/default/isc-dhcp-server6-<VRF> | IPv6 DHCP 服务器的配置文件。对此文件的更改需要重启 dhcpd6@<VRF>.service |
/etc/dhcp/dhcpd-<VRF>.conf | dhcpd 服务的配置文件。对此文件的更改需要重启 dhcpd@<VRF>.service |
/etc/dhcp/dhcpd6-<VRF>.conf | IPv6 dhcpd 服务的配置文件。对此文件的更改需要重启 dhcpd6@<VRF>.service |
etc/ntpsec/ntp.conf | NTP 服务器的配置文件。对此文件的更改需要重启 ntp 服务。 |
/etc/default/isc-dhcp-relay6-<VRF> | IPv6 DHCP 中继的配置文件。对此文件的更改需要重启 dhcrelay6@<VRF>.service 。 |
/etc/snmp/snmpd.conf | SNMP 的配置文件。对此文件的更改需要重启 snmpd 。 |
/etc/cumulus/datapath/traffic.conf | 转发表配置文件的配置文件。对此文件的更改需要重启 switchd 。 |
/etc/cumulus/switchd.conf | switchd 的配置文件。对此文件的更改需要重启 switchd 。 |
灵活代码片段不支持
- 二进制文件。
- 符号链接。
- 超过 1MB 的内容。
- 同一目标文件中的多个灵活代码片段。
创建灵活代码片段时请谨慎
- 如果您错误地配置灵活代码片段,它们可能会影响交换机功能。例如,即使灵活代码片段验证仅允许您添加文本内容,Cumulus Linux 也不会阻止您创建添加到敏感文本文件(例如
/boot/grub.cfg
和/etc/fstab
)或添加损坏内容的灵活代码片段。此类代码片段可能会导致交换机无法使用或造成潜在的安全漏洞(NVUE 服务 (nvued
) 以超级用户权限运行)。 - 请勿手动更新您向其中添加灵活代码片段的配置文件。
- 纯文本中的任何敏感数据(例如密码)都以纯文本形式显示在 NVUE 管理的配置文件中。
创建灵活代码片段
要创建灵活代码片段
以
yaml
格式创建一个文件,并按以下格式添加您要应用的每个灵活代码片段。NVUE 将灵活代码片段附加到现有文件的末尾。如果该文件不存在,NVUE 将创建该文件,然后添加内容。cumulus@leaf01:mgmt:~$ sudo nano <filename>.yaml> - set: system: config: snippet: <snippet-name>: file: "<filename>" permissions: "<umask-permissions>" content: | # This is my content services: <name>: service: <service-name> action: <action>
- 您只能为创建的新文件设置 umast 权限。添加
permissions:
行是可选的。默认 umask 权限为 644。 - 您可以添加具有操作的服务,例如
start
、restart
或stop
。添加services:
行是可选的;但是,如果您添加service:
行,则必须至少指定一项服务。
- 您只能为创建的新文件设置 umast 权限。添加
运行以下命令以修补配置
cumulus@switch:~$ nv config patch <filename>.yaml>
运行
nv config apply
命令以应用配置cumulus@switch:~$ nv config apply
验证修补的配置。
nv config patch
命令要求您使用代码片段 .yaml
文件的完全限定路径名;例如,您不能将 ./
与 nv config patch
命令一起使用。
灵活代码片段示例
以下名为 crontab-flex-snippet
的灵活代码片段将单行 @daily /opt/utils/run-backup.sh
附加到现有 /etc/crontab
文件的末尾,然后重启 cron
服务。
cumulus@leaf01:mgmt:~$ sudo nano crontab-flex-snippet.yaml
- set:
system:
config:
snippet:
crontab-flex-snippet:
file: "/etc/crontab"
content: |
@daily /opt/utils/run-backup.sh
services:
schedule:
service: cron
action: restart
以下名为 apt-flex-snippet
的灵活代码片段创建一个新的文件 /etc/apt/sources.list.d/microsoft-prod.list
,权限为 0644,并添加多行文本
cumulus@leaf01:mgmt:~$ sudo nano apt-flex-snippet.yaml
- set:
system:
config:
snippet:
apt-flexible-snippet:
file: "/etc/apt/sources.list.d/microsoft-prod.list"
content: |
# Adding Microsoft SQL Server Sources
deb [arch=amd64] https://packages.microsoft.com/debian/10/prod buster main
permissions: "0644"
以下名为 lldp_config_snipppet
的灵活代码片段使用 configure system interface pattern-blacklist
命令禁用 swp1 和 swp2 上的 LLDP
cumulus@leaf01:mgmt:~$ sudo nano lldp_config_snipppet.yaml
- set:
system:
config:
snippet:
lldp-interfaces-config:
file: "/etc/lldpd.d/lldp-interfaces.conf"
content: |
configure system interface pattern-blacklist swp1,swp2
services:
lldp:
service: lldpd
action: restart
以下名为 lldp_config_snipppet
的灵活代码片段使用 system interface pattern
关键字禁用 swp1 和 swp2 上的 LLDP
cumulus@leaf01:mgmt:~$ sudo nano lldp_config_snipppet.yaml
- set:
system:
config:
snippet:
lldp-interfaces-config:
file: "/etc/lldpd.d/lldp-interfaces.conf"
content: |
configure system interface pattern eth*,swp*,!swp1,!swp2
services:
lldp:
service: lldpd
action: restart
在您修补并应用上述配置后,该代码片段将在 /etc/lldp.d
目录中创建一个新文件,然后重启 lldpd
服务以停止在 swp1 和 swp2 上发送和接收 LLDP。其他接口将继续参与 LLDP。
如果您尝试将灵活代码片段应用于 NVUE 不允许的文件,您将看到类似于以下的错误消息
cumulus@leaf01:mgmt:~$ nv config apply
Invalid config [rev_id: 8]
Flexible snippets are not allowed to be configured on the file '/etc/cumulus/ports.conf’.
Flexible snippets are not allowed to be configured on the file '/etc/cumulus/ports_width.conf’.
如果您尝试将灵活代码片段应用于支持传统代码片段的文件,您将看到类似于以下的错误消息
cumulus@leaf01:mgmt:~$ nv config apply
Invalid config [rev_id: 1]
Flexible snippet cannot be used to modify the file '/etc/ssh/sshd_config'. Traditional snippets (for e.g., 'sshd_config') are supported on this file. Consult NVIDIA NVUE documentation for further information on snippets.
您还可以使用 REST API 创建灵活代码片段。请参阅 NVUE API。
删除代码片段
要删除传统或灵活代码片段,请编辑代码片段 .yaml
文件以将 set
更改为 unset
,然后修补并应用配置。您也可以使用 REST API DELETE 和 PATCH 方法。
以下示例删除上面创建的用于配置 MLAG 对等超时的MLAG 定时器传统代码片段
编辑
mlag_snippet.yaml
文件以将set
更改为unset
cumulus@switch:~$ sudo nano mlag_snippet.yaml - unset: system: config: snippet: ifupdown2_eni:
运行以下命令以修补配置
cumulus@switch:~$ nv config patch mlag_snippet.yaml
运行
nv config apply
命令以应用配置cumulus@switch:~$ nv config apply
验证对等超时参数不再存在于
/etc/network/interfaces
文件的peerlink.4094
节中cumulus@switch:~$ sudo cat /etc/network/interfaces ... auto peerlink.4094 iface peerlink.4094 clagd-peer-ip linklocal clagd-backup-ip 10.10.10.2 clagd-sys-mac 44:38:39:BE:EF:AA clagd-args --initDelay 180 ...