用例与建议
在数据中心自动化和部署领域,Day 0、Day 1、Day 2 和 Day N 是广泛使用的术语,用于确定设备配置和使用阶段。此分类确定配置应用的时间。
- Day 0 配置是交换机启动时的初始最小配置,它基于已设计的拓扑和网络架构。
- Day 1 配置包括设置常用服务,如 NTP、syslog 等。
- Day 2 到 Day N 是您为日常操作推送给设备的配置。 这也包括根据环境不断变化的需求进行补丁和升级。
自动化选项
选项 | 建议 |
---|---|
扁平文件自动化 | 您必须显式告知 NVUE 忽略使用 NVUE 之外的自动化方法推送的扁平文件。 |
REST API 驱动的自动化 | NVUE 是百分之百 API 驱动的,所有功能都可以通过 API 访问。 您可以使用 API 通过任何可以与 REST 交互的工具或脚本进行自动化,例如 Ansible、Python、Postman 等。 |
NVUE 配置文件自动化 | 您可以自动化并应用 startup.yaml 文件。 您今天可以使用上面提到的 PRA 来做到这一点。 |
与现有工具集成
工具 | 建议 |
---|---|
Ansible | 对于 Day 0 配置,您可以使用 PRA 软件包来自动化 startup.yaml 文件生成,或者使用 Ansible 模块来按需设置配置并在所有交换机上运行它。对于 Day 1 到 Day N 配置,您可以利用可用的 Ansible 模块随时进行配置更改。 |
Salt | 对于 Day 0 配置,您可以自动化 startup.yaml 文件生成。对于 Day 1 到 Day N 配置,您可以自动化 startup.yaml 文件更新并将它们应用在交换机上。 |
Puppet | 对于 Day 0 配置,您可以自动化 startup.yaml 文件生成。对于 Day 1 到 Day N 配置,您可以使用 http_request 模块与 NVUE API 交互。 |
脚本 | 大多数编程语言都支持进行 REST API 调用。 使用 RESTful NVUE API 集成到您现有的自动化脚本中。 |
代码片段
使用 REST API 进行任何更新 (PATCH) 是一个多步骤过程
- 创建新的修订 ID。
- 使用 PATCH 请求对上一步记录的修订 ID 进行更改。
- 将更改应用于修订变更集。
- 查看已应用修订的状态。 此步骤是可选的。
您可以将多个 PATCH 请求合并到一个修订中。
您可以在根级别或对象级别更改配置设置。 使用根补丁,您可以批量将所有配置推送到交换机。 使用有针对性的配置补丁,您可以控制单个资源。
以下示例使用 curl。 您可以使用任何工具或编程语言。
修订
查看当前已应用的配置。
curl -u 'cumulus:CumulusLinux!' -k -X GET "https://127.0.0.1:8765/nvue_v1/?rev=applied&filled=false"
"acl": {}, "bridge": { "domain": { "br_default": { "encap": "802.1Q", "mac-address": "auto", "multicast": { "snooping": { "enable": "off" } }, "stp": { "priority": 32768, "state": { "up": {} } }, "type": "vlan-aware", "untagged": 1, "vlan": { "10": { "multicast": { "snooping": { "querier": { "source-ip": "0.0.0.0" } } }, "ptp": { "enable": "off" }, "vni": { "10": { "flooding": { "enable": "auto" }, "mac-learning": "auto" } ....
cumulus@switch:~$ nv config show
创建新的修订 ID。
curl -u 'cumulus:CumulusLinux!' -k -X POST https://127.0.0.1:8765/nvue_v1/revision
{ "changeset/cumulus/2023-04-06_20.22.44_T2XP": { "state": "pending", "transition": { "issue": {}, "progress": "" } } }
在推送所有配置后,应用修订变更集。
Cumulus Linux 应用但不保存配置; 重启后配置不会持久存在。
curl -u 'cumulus:CumulusLinux!' -d '{"state":"apply","auto-prompt":{"ays":"ays_yes"}}' -H 'Content-Type:application/json' -k -X PATCH https://127.0.0.1:8765/nvue_v1/revision/changeset%2Fcumulus%2F2023-04-06_20.22.44_T2XP
{ "state": "apply", "transition": { "issue": {}, "progress": "" } }
cumulus@switch:~$ nv config apply
查看修订。
curl -u 'cumulus:CumulusLinux!' -k -X GET https://127.0.0.1:8765/nvue_v1/revision/changeset%2Fcumulus%2F2023-04-06_20.22.44_T2XP
{ "state": "applied", "transition": { "issue": {}, "progress": "" } }
保存修订。 将已应用的配置更改保存到启动配置 (`/etc/nvue.d/startup.yaml`),以便更改在重启后持久存在。
curl -u 'cumulus:CumulusLinux!' -k -X PATCH -d '{"state": "save", "auto-prompt": {"ays": "ays_yes"}}' -H 'Content-Type: application/json' https://127.0.0.1:8765/nvue_v1/revision/applied
{ "state": "save", "transition": { "issue": {}, "progress": "" } }
cumulus@switch:~$ nv config save
Day 0 - 设置基本连接
接口
设置环回接口 IP 地址。
curl -u 'cumulus:CumulusLinux!' -d '{"99.99.99.99/32": {}}' -H 'Content-Type: application/json' -k -X PATCH https://127.0.0.1:8765/nvue_v1/interface/lo/ip/address?rev=changeset%2Fcumulus%2F2023-04-06_20.22.44_T2XP
{ "99.99.99.99/32": {} }
cumulus@switch:~$ nv set interface lo ip address 99.99.99.99/32
在应用修订后,查看 IP 地址。
curl -u 'cumulus:CumulusLinux!' -k -X GET https://127.0.0.1:8765/nvue_v1/interface/lo/ip/address
{ "127.0.0.1/8": {}, "99.99.99.99/32": {}, "::1/128": {} }
cumulus@switch:~$ nv show interface lo ip address
Day 1 - 设置常用服务
系统主机名和时区
curl -u 'cumulus:CumulusLinux!' -d '{"hostname":"switch01","timezone":"America/Los_Angeles"}' -k -X PATCH https://127.0.0.1:8765/nvue_v1/system?rev=changeset%2Fcumulus%2F2023-04-06_20.31.58_T2XR
{}
cumulus@switch:~$ nv set system hostname switch01
cumulus@switch:~$ nv set system timezone America/Los_Angeles
NTP
curl -u 'cumulus:CumulusLinux!' -d '{"default":{"server:{"4.cumulusnetworks.pool.ntp.org":{"iburst":"on"}}}}' -k -X PATCH https://127.0.0.1:8765/nvue_v1/service/ntp?rev=changeset%2Fcumulus%2F2023-04-06_20.31.58_T2XR
{}
cumulus@switch:~$ nv set service ntp default server 4.cumulusnetworks.pool.ntp.org iburst on
DNS
curl -u 'cumulus:CumulusLinux!' -d '{"mgmt":{"server:{"192.168.1.100":{}}}}' -k -X PATCH https://127.0.0.1:8765/nvue_v1/service/dns?rev=changeset%2Fcumulus%2F2023-04-06_20.31.58_T2XR
{}
cumulus@switch:~$ nv set service dns mgmt server 192.168.1.100
Syslog
curl -u 'cumulus:CumulusLinux!' -d '{"mgmt":{"server:{"192.168.1.120":{"port":8000}}}}' -k -X PATCH https://127.0.0.1:8765/nvue_v1/service/syslog?rev=changeset%2Fcumulus%2F2023-04-06_20.31.58_T2XR
{}
cumulus@switch:~$ nv set service syslog mgmt server 192.168.1.120 port 8000
根级别的所有服务
curl -u 'cumulus:CumulusLinux!' -d '{"system": {"hostname":"switch01","timezone":"America/Los_Angeles"}, "service": { "ntp": {"default":{"server:{"4.cumulusnetworks.pool.ntp.org":{"iburst":"on"}}}}, "dns": {"mgmt":{"server:{"192.168.1.100":{}}}}, "syslog": {"mgmt":{"server:{"192.168.1.120":{"port":8000}}}}}}' -k -X PATCH https://127.0.0.1:8765/nvue_v1/?rev=changeset%2Fcumulus%2F2023-04-06_20.31.58_T2XR
{}
Day 2 到 Day N - 设置配置
Bond
curl -u 'cumulus:CumulusLinux!' -d '{"bond0": {"type":"bond","bond":{"member":{"swp1":{},"swp2":{},"swp3":{},"swp4":{}}}}}' -H 'Content-Type: application/json' -k -X PATCH https://127.0.0.1:8765/nvue_v1/interface?rev=changeset%2Fcumulus%2F2023-04-06_21.08.10_T2XV
{
"bond0": {
"bond": {
"member": {
"swp1": {},
"swp2": {},
"swp3": {},
"swp4": {}
}
},
"type": "bond"
},
"bond1": {
"bond": {
"lacp-bypass": "on",
"member": {
"swp1": {}
},
"mlag": {
"enable": "on",
"id": 1
},
"mode": "lacp"
},
"bridge": {
"domain": {
"br_default": {
"access": 10,
"stp": {
"admin-edge": "on",
"auto-edge": "on",
"bpdu-guard": "on"
}
}
}
},
"link": {
"mtu": 9000
},
"type": "bond"
},
"eth0": {
"ip": {
"address": {
"192.168.200.6/24": {}
},
"vrf": "mgmt"
},
"type": "eth"
},
"lo": {
"ip": {
"address": {
"10.10.10.1/32": {}
}
},
"type": "loopback"
}
}
cumulus@switch:~$ nv set interface bond0 bond member swp1-4
Bridge
curl -u 'cumulus:CumulusLinux!' -d '{"swp1": {"bridge":{"domain":{"br_default":{}}},"swp2": {"bridge":{"domain":{"br_default":{}}}}' -H 'Content-Type: application/json' -k -X PATCH https://127.0.0.1:8765/nvue_v1/interface?rev=changeset%2Fcumulus%2F2023-04-06_21.08.10_T2X
curl -u 'cumulus:CumulusLinux!' -d '{"untagged":1,"vlan":{"10":{},"20":{}}}' -H 'Content-Type: application/json' -k -X PATCH https://127.0.0.1:8765/nvue_v1/bridge/domain/br_default?rev=changeset%2Fcumulus%2F2023-04-06_21.08.10_T2XVResourcesResources
{}
cumulus@switch:~$ nv set interface swp1-2 bridge domain br_default
cumulus@switch:~$ nv set bridge domain br_default vlan 10,20
cumulus@switch:~$ nv set bridge domain br_default untagged 1