使用 Bash 脚本配置文件接口
虽然许多数据中心的长期策略是自动化 NVIDIA 交换机的配置,但这对于较小的环境通常是过度配置。
但是,手动将每个交换机端口添加到配置文件可能是一项枯燥的任务。因此,NCLU 支持 globs 是一件好事,因此您可以使用它快速定义端口范围。
但是,如果您是老派风格并且想要使用本机 Bash shell 提供的工具,本文将向您展示如何使用 Bash 脚本快速添加交换机端口。
使用
ip link show
命令确定设备上的交换机端口标识符cumulus@switch$ ip link show 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN mode DEFAULT link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT qlen 1000 link/ether 08:9e:01:f8:9b:ac brd ff:ff:ff:ff:ff:ff 3: swp1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT qlen 500 link/ether 08:9e:01:f8:9b:af brd ff:ff:ff:ff:ff:ff ... 53: swp51: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT qlen 500 link/ether 08:9e:01:f8:9b:df brd ff:ff:ff:ff:ff:ff 54: swp52: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT qlen 500 link/ether 08:9e:01:f8:9b:e0 brd ff:ff:ff:ff:ff:ff
对于此设备,您需要配置 swp1 到 swp52。
备份当前的
/etc/network/interfaces
文件cumulus@switch$ sudo cp /etc/network/interfaces /etc/network/interfaces.orig
如果您不小心损坏了要更新的文件,此步骤是一项保险策略。
在 cumulus 用户主目录中创建脚本。将以
while
开头的行上的数字替换为您交换机上编号最高的 swp。cumulus@switch$ vi populate.sh #!/bin/bash mycount=1 while (( $mycount <= 52 )) do echo >> /etc/network/interfaces echo auto swp$mycount >> /etc/network/interfaces echo iface swp$mycount >> /etc/network/interfaces ((mycount++)) done
准确转录间距和特殊字符,否则脚本可能会损坏您的
/etc/network/interfaces
文件。这就是您在步骤 2 中制作副本的原因。使用
sudo
运行脚本,然后应用更改cumulus@switch$ chmod 744 populate.sh cumulus@switch$ sudo bash populate.sh cumulus@switch$ cat /etc/network/interfaces # This file describes the network interfaces available on your system # and how to activate them. For more information, see interfaces(5), ifup(8) # # Please see /usr/share/doc/python-ifupdown2/examples/ for examples # # # The loopback network interface auto lo iface lo inet loopback # The primary network interface auto eth0 iface eth0 inet dhcp auto swp1 iface swp1 ... auto swp52 iface swp52 cumulus@switch$ sudo ifreload -a
使用
ip link show
命令验证端口是否处于活动状态cumulus@switch$ ip link show 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN mode DEFAULT link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT qlen 1000 link/ether 08:9e:01:f8:9b:ac brd ff:ff:ff:ff:ff:ff 3: swp1: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master bond0 state UP mode DEFAULT qlen 500 link/ether 08:9e:01:f8:9b:af brd ff:ff:ff:ff:ff:ff ... 53: swp51: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master bond0 state UP mode DEFAULT qlen 500 link/ether 08:9e:01:f8:9b:df brd ff:ff:ff:ff:ff:ff 54: swp52: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master bond0 state UP mode DEFAULT qlen 500 link/ether 08:9e:01:f8:9b:e0 brd ff:ff:ff:ff:ff:ff
奖励部分:此脚本的工作原理
步骤 3 中的脚本按编写方式工作——只需将其复制到您的交换机上(调整编号最高的 swp 的编号),它就可以正常工作。但是,如果您想开始学习 Bash 脚本编写,请逐行查看以下脚本。
您可以使用多种方法完成 shell 脚本编写中描述的任务。此示例使用了一些首选方法——有关脚本工具的更完整讨论,请查阅其他资源(例如,nixCraft)。
#!/bin/bash
此语句告诉脚本您应该使用哪个 shell(命令解释器)来运行它。通常,# 字符表示注释,但在这里它实际上将信息传递给脚本。
mycount=1
脚本使用计数器来循环遍历 swp 接口。在这里,您将名为 mycount
的变量设置为初始值 1。
while (( $mycount <= 52 ))
while 语句指示一个循环,只要指定的条件为真,该循环就会继续运行。包含在 do 和 done 语句之间的所有命令在循环的每次传递时运行。
双括号包含条件检查。使用 $ 字符替换它前面的变量的当前值——在本例中为 mycount
。此行检查计数器是否大于或等于交换机上最高的端口 ID。
此行中的空格至关重要——如果间距不正确,则使用的表示法将不起作用。
echo >> /etc/network/interfaces
echo auto swp$mycount >> /etc/network/interfaces
echo iface swp$mycount >> /etc/network/interfaces
echo
命令通常将任何参数直接打印到屏幕。添加 >> 字符会将该输出重定向并将其附加到指定文件的末尾。小心;单个 > 字符会覆盖文件,而不是添加到文件的末尾。
此代码块添加一个空行,后跟标准 auto 和 iface 语句,同时替换 mycount
变量的当前值以生成 swp 接口名称。
((mycount++))
这是此 while 循环中最关键的部分。如果计数器未递增,则循环不会自动退出,因为条件检查永远不会更改。