用例与建议

在数据中心自动化和部署领域,Day 0、Day 1、Day 2 和 Day N 是广泛使用的术语,用于确定设备配置和使用阶段。此分类确定配置应用的时间。

  • Day 0 配置是交换机启动时的初始最小配置,它基于已设计的拓扑和网络架构。
  • Day 1 配置包括设置常用服务,如 NTP、syslog 等。
  • Day 2Day 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) 是一个多步骤过程

  1. 创建新的修订 ID。
  2. 使用 PATCH 请求对上一步记录的修订 ID 进行更改。
  3. 将更改应用于修订变更集。
  4. 查看已应用修订的状态。 此步骤是可选的。

您可以将多个 PATCH 请求合并到一个修订中。

您可以在根级别或对象级别更改配置设置。 使用根补丁,您可以批量将所有配置推送到交换机。 使用有针对性的配置补丁,您可以控制单个资源。

以下示例使用 curl。 您可以使用任何工具或编程语言。

修订

  1. 查看当前已应用的配置。

    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
    
  2. 创建新的修订 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": "" 
        } 
    } 
    }
    
  3. 在推送所有配置后,应用修订变更集。

    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
    
  4. 查看修订。

    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": "" 
      } 
    } 
    
  5. 保存修订。 将已应用的配置更改保存到启动配置 (`/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 - 设置基本连接

接口

  1. 设置环回接口 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
    
  2. 在应用修订后,查看 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

资源