From 1701d4fe7f62dd57605a1d61cbbde50a74ada46c Mon Sep 17 00:00:00 2001 From: Koa Calloway Date: Wed, 31 Jul 2024 10:07:14 -0700 Subject: [PATCH 01/10] Use generic Link and Switch instead of NVLink specifically. --- protos/infra.proto | 4 ++++ src/generic.py | 32 ++++++++++++++++---------------- src/tests/test_device.py | 10 +++++----- 3 files changed, 25 insertions(+), 21 deletions(-) diff --git a/protos/infra.proto b/protos/infra.proto index 774d491..2d97017 100644 --- a/protos/infra.proto +++ b/protos/infra.proto @@ -48,10 +48,14 @@ message Pcie { message NvLink { } +message Custom { +} + message Switch { oneof type { Pcie pcie = 1; NvLink nvlink = 2; + Custom custom = 3; } } diff --git a/src/generic.py b/src/generic.py index e879a42..896e2b6 100644 --- a/src/generic.py +++ b/src/generic.py @@ -20,16 +20,16 @@ class GenericHost(bld.HostBuilder): def __init__( self, npu_count=1, - nvlink_bandwidth_gbps: int=0 + io_interconnect_bandwidth_gbps: int=0 ): """Creates a generic device with only npu and nic components that are connected by a pcie link. - Optionally, npu components can be connected via nvlink using a single nvswitch. + Optionally, npu components within a device can be interconnected via generic links attached to a single generic switch. name: The name of the generic device npu_count: The number of npu/nic components in the device. - nvlink_bandwidth_gbps: nvlink bandwidth in gigabits per second. If 0, no nvlink connections will be added to the device. + io_interconnect_bandwidth_gbps: npu-to-npu interconnect bandwidth in gigabits per second. If 0, no internal npu-to-npu connectivity will be added to the device. """ super(GenericHost).__init__() npu = infra.Component( @@ -46,15 +46,15 @@ def __init__( name="pcie", type=infra.LinkType.LINK_PCIE, ) - nvlink = infra.Link( - name="nvlink", - type=infra.LinkType.LINK_NVLINK, - bandwidth=infra.Bandwidth(gbps=nvlink_bandwidth_gbps), + io_interconnect = infra.Link( + name="io_interconnect", + type=infra.LinkType.LINK_CUSTOM, + bandwidth=infra.Bandwidth(gbps=io_interconnect_bandwidth_gbps), ) - nvswitch = infra.Component( - name="nvswitch", + io_interconnect_switch = infra.Component( + name="io_interconnect_switch", count=1, - switch=infra.Switch(nvlink=infra.NvLink()), + switch=infra.Switch(custom=infra.Custom()), ) links = { pcie.name: pcie } @@ -77,18 +77,18 @@ def __init__( ) ) - # Add nvlink connections if bandwidth was provided - if nvlink_bandwidth_gbps > 0: - components[nvswitch.name] = nvswitch - links[nvlink.name] = nvlink + # Add io_interconnect connections if bandwidth was provided + if io_interconnect_bandwidth_gbps > 0: + components[io_interconnect_switch.name] = io_interconnect_switch + links[io_interconnect.name] = io_interconnect for npu_idx_a in range(npu_count): connections.append( infra.ComponentConnection( link=infra.ComponentLink( c1=npu.name, c1_index=npu_idx_a, - link=nvlink.name, - c2=nvswitch.name, + link=io_interconnect.name, + c2=io_interconnect_switch.name, c2_index=0, ) ) diff --git a/src/tests/test_device.py b/src/tests/test_device.py index e7631f6..9420c7f 100644 --- a/src/tests/test_device.py +++ b/src/tests/test_device.py @@ -15,20 +15,20 @@ def test_generic_host_no_params(): host = GenericHost() assert host.get_component("npu") is not None assert host.get_component("nic") is not None - assert "nvlink" not in host._device.links + assert "io_interconnect" not in host._device.links def test_generic_host_with_params(): npu_count = 4 - host = GenericHost(npu_count=npu_count, nvlink_bandwidth_gbps=600) - assert "nvlink" in host._device.links - assert host._device.links["nvlink"].type == infra.LINK_NVLINK + host = GenericHost(npu_count=npu_count, io_interconnect_bandwidth_gbps=600) + assert "io_interconnect" in host._device.links + assert host._device.links["io_interconnect"].type == infra.LINK_CUSTOM seen_map = {} for npu_index in range(npu_count): seen_map[npu_index] = False for connection in host._device.connections: - if connection.link.c1 == "npu" and connection.link.c2 == "nvswitch": + if connection.link.c1 == "npu" and connection.link.c2 == "io_interconnect_switch": npu_index = connection.link.c1_index assert npu_index in seen_map assert not seen_map[npu_index] From 28187e598642fa565461e9417a6431d1dabe38c9 Mon Sep 17 00:00:00 2001 From: Koa Calloway Date: Wed, 31 Jul 2024 10:08:17 -0700 Subject: [PATCH 02/10] Update VERSION. --- VERSION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/VERSION b/VERSION index fe04e7f..236c7ad 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.0.20 +0.0.21 From 9f9f4cf5062198950961565131179e9ab966e7be Mon Sep 17 00:00:00 2001 From: Koa Calloway Date: Wed, 31 Jul 2024 11:21:59 -0700 Subject: [PATCH 03/10] Rename io_interconnect to npu_interconnect. --- src/generic.py | 26 +++++++++++++------------- src/tests/test_device.py | 10 +++++----- 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/src/generic.py b/src/generic.py index 896e2b6..75af49e 100644 --- a/src/generic.py +++ b/src/generic.py @@ -20,7 +20,7 @@ class GenericHost(bld.HostBuilder): def __init__( self, npu_count=1, - io_interconnect_bandwidth_gbps: int=0 + npu_interconnect_bandwidth_gbps: int=0 ): """Creates a generic device with only npu and nic components that are connected by a pcie link. @@ -29,7 +29,7 @@ def __init__( name: The name of the generic device npu_count: The number of npu/nic components in the device. - io_interconnect_bandwidth_gbps: npu-to-npu interconnect bandwidth in gigabits per second. If 0, no internal npu-to-npu connectivity will be added to the device. + npu_interconnect_bandwidth_gbps: npu-to-npu interconnect bandwidth in gigabits per second. If 0, no internal npu-to-npu connectivity will be added to the device. """ super(GenericHost).__init__() npu = infra.Component( @@ -46,13 +46,13 @@ def __init__( name="pcie", type=infra.LinkType.LINK_PCIE, ) - io_interconnect = infra.Link( - name="io_interconnect", + npu_interconnect = infra.Link( + name="npu_interconnect", type=infra.LinkType.LINK_CUSTOM, - bandwidth=infra.Bandwidth(gbps=io_interconnect_bandwidth_gbps), + bandwidth=infra.Bandwidth(gbps=npu_interconnect_bandwidth_gbps), ) - io_interconnect_switch = infra.Component( - name="io_interconnect_switch", + npu_interconnect_switch = infra.Component( + name="npu_interconnect_switch", count=1, switch=infra.Switch(custom=infra.Custom()), ) @@ -77,18 +77,18 @@ def __init__( ) ) - # Add io_interconnect connections if bandwidth was provided - if io_interconnect_bandwidth_gbps > 0: - components[io_interconnect_switch.name] = io_interconnect_switch - links[io_interconnect.name] = io_interconnect + # Add npu_interconnect connections if bandwidth was provided + if npu_interconnect_bandwidth_gbps > 0: + components[npu_interconnect_switch.name] = npu_interconnect_switch + links[npu_interconnect.name] = npu_interconnect for npu_idx_a in range(npu_count): connections.append( infra.ComponentConnection( link=infra.ComponentLink( c1=npu.name, c1_index=npu_idx_a, - link=io_interconnect.name, - c2=io_interconnect_switch.name, + link=npu_interconnect.name, + c2=npu_interconnect_switch.name, c2_index=0, ) ) diff --git a/src/tests/test_device.py b/src/tests/test_device.py index 9420c7f..f4ce2a1 100644 --- a/src/tests/test_device.py +++ b/src/tests/test_device.py @@ -15,20 +15,20 @@ def test_generic_host_no_params(): host = GenericHost() assert host.get_component("npu") is not None assert host.get_component("nic") is not None - assert "io_interconnect" not in host._device.links + assert "npu_interconnect" not in host._device.links def test_generic_host_with_params(): npu_count = 4 - host = GenericHost(npu_count=npu_count, io_interconnect_bandwidth_gbps=600) - assert "io_interconnect" in host._device.links - assert host._device.links["io_interconnect"].type == infra.LINK_CUSTOM + host = GenericHost(npu_count=npu_count, npu_interconnect_bandwidth_gbps=600) + assert "npu_interconnect" in host._device.links + assert host._device.links["npu_interconnect"].type == infra.LINK_CUSTOM seen_map = {} for npu_index in range(npu_count): seen_map[npu_index] = False for connection in host._device.connections: - if connection.link.c1 == "npu" and connection.link.c2 == "io_interconnect_switch": + if connection.link.c1 == "npu" and connection.link.c2 == "npu_interconnect_switch": npu_index = connection.link.c1_index assert npu_index in seen_map assert not seen_map[npu_index] From 9a74eb18138865457bc0e5f94b9e4d45229908f4 Mon Sep 17 00:00:00 2001 From: thomas-am Date: Mon, 4 Nov 2024 12:40:29 -0800 Subject: [PATCH 04/10] removed duplicate DeviceBuilder.port_up_component property --- src/builders.py | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/src/builders.py b/src/builders.py index fec8254..a6a1d49 100644 --- a/src/builders.py +++ b/src/builders.py @@ -4,6 +4,7 @@ - extended functionality for finding nodes, building inter-package adjacencies, calculating paths etc """ + from typing import List, Literal, Union, Type, Tuple from abc import ABC, abstractmethod import google.protobuf.json_format @@ -52,10 +53,6 @@ def description(self) -> str: def port_up_component(self) -> infra.Component: pass - @property - def port_up_component(self) -> infra.Component: - pass - def _add_component_link(self, c1, c1_index, link_name, c2, c2_index): connection = infra.ComponentConnection( link=infra.ComponentLink( @@ -168,6 +165,7 @@ def message_to_yaml(self, message) -> str: ) ) + class HostBuilder(DeviceBuilder): def __init__(self): super(DeviceBuilder).__init__() @@ -382,6 +380,7 @@ def get_link(self, link_type: int) -> infra.Link: f"Inter package link of type {link_type} does not exist in system {self._fabric.name}" ) + class InfraBuilder(ABC): def __init__( self, @@ -391,10 +390,7 @@ def __init__( links: List[Type[infra.Link]] = [], ): self._infra = infra.Infrastructure( - custom_fabric=fabric, - hosts=hosts, - connections=connections, - links={} + custom_fabric=fabric, hosts=hosts, connections=connections, links={} ) for link in links: From 5045f376345fe76a7065bf6a716cf7ceb051de76 Mon Sep 17 00:00:00 2001 From: thomas-am Date: Mon, 4 Nov 2024 12:40:41 -0800 Subject: [PATCH 05/10] updated vscode settings --- .env | 1 + .vscode/settings.json | 6 ++++++ 2 files changed, 7 insertions(+) create mode 100644 .env diff --git a/.env b/.env new file mode 100644 index 0000000..268cec6 --- /dev/null +++ b/.env @@ -0,0 +1 @@ +PYTHONTEST=. \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json index e680522..9988a1e 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -24,4 +24,10 @@ }, "clang-format.language.proto.enable": true, "clang-format.language.proto.style": "{ IndentWidth: 2, BasedOnStyle: google, ReflowComments: false, ColumnLimit: 0, AlignTrailingComments: true }", + "python.testing.pytestArgs": [ + "src/tests" + ], + "python.testing.unittestEnabled": false, + "python.testing.pytestEnabled": true, + "python.envFile": "${workspaceFolder}/.env", } From 1ff0b3da94ba664fbb76ee6c6d9f038b42d0d18c Mon Sep 17 00:00:00 2001 From: thomas-am Date: Mon, 4 Nov 2024 12:48:09 -0800 Subject: [PATCH 06/10] add rack-plane builders (fabric and host) TOOD: Scale out network modelling --- src/notes/rack-plane.png | Bin 0 -> 104120 bytes src/rack_plane_fabric.py | 73 +++++++++++++++++++++++++++++++ src/rack_plane_host.py | 76 ++++++++++++++++++++++++++++++++ src/tests/test_rack_plane.py | 81 +++++++++++++++++++++++++++++++++++ 4 files changed, 230 insertions(+) create mode 100644 src/notes/rack-plane.png create mode 100644 src/rack_plane_fabric.py create mode 100644 src/rack_plane_host.py create mode 100644 src/tests/test_rack_plane.py diff --git a/src/notes/rack-plane.png b/src/notes/rack-plane.png new file mode 100644 index 0000000000000000000000000000000000000000..50c172be3dc7cb8959ba859c186a0a1ca5f77733 GIT binary patch literal 104120 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 Tuple[bld.DeviceBuilder, int]: + """Adds fabric switches to the infrastructure + Returns: Tuple of the device and the number of devices + """ + down_link_count = int(host_builder.port_up_component.count * host_count) + up_link_count = 0 + device = ClosFabricSwitch(device_name, down_link_count, up_link_count) + # create one rack switch per host scale up nic + sw_count = host_builder.port_up_component.count + self._add_device(device, sw_count) + return (device, sw_count) + + def _add_device( + self, package_builder: bld.DeviceBuilder, device_count: int + ) -> None: + if package_builder is not None: + self.fabric.devices[package_builder.device.name].CopyFrom( + infra.DeviceCount( + count=device_count, + device=package_builder.device, + ) + ) diff --git a/src/rack_plane_host.py b/src/rack_plane_host.py new file mode 100644 index 0000000..240e723 --- /dev/null +++ b/src/rack_plane_host.py @@ -0,0 +1,76 @@ +"""RackPlaneHost package + +Uses the infra_pb2 protobuf generated code +to capture components, links, and connections of the +RackPlane block diagram. +""" + +if __package__ is None or __package__ == "": + import generated.infra_pb2 as infra + import builders as bld +else: + from .generated import infra_pb2 as infra + from . import builders as bld + + +class RackPlaneHostBuilder(bld.HostBuilder): + """ + generates infrastructure of a host that + supports connecting to switching via multiple planes + """ + + name = "rack plane host" + description = "a host with dedicated scale up and scale out NICs" + + def __init__( + self, npu_count: int, scale_up_nic_count: int, scale_out_nic_count: int + ): + super(RackPlaneHostBuilder).__init__() + # 1. Add components + npu = infra.Component(name="npu", count=npu_count, npu=infra.Npu()) + scale_up_nic = infra.Component( + name="scale-up-nic", count=scale_up_nic_count, nic=infra.Nic() + ) + self._port_component = scale_up_nic + + # TODO: Scale OUT NICs + # scale_out_nic = infra.Component( + # name="scale-out-nic", count=scale_out_nic_count, nic=infra.Nic() + # ) + + # 2. Add device + self._device = infra.Device( + name=self.name, + components={ + npu.name: npu, + scale_up_nic.name: scale_up_nic, + # scale_out_nic.name: scale_out_nic, + }, + ) + + # 3. Add component links + # scale UP NICs to NPU connections + for c1_index in range(npu.count): + for c2_index in range(scale_up_nic.count): + self._add_component_link( + npu.name, + c1_index, + f"{npu.name}.{c1_index}.to.{scale_up_nic.name}.{c2_index}", + scale_up_nic.name, + c2_index, + ) + + # scale OUT NICs to NPU connections + for c1_index in range(npu.count): + for c2_index in range(scale_up_nic.count): + self._add_component_link( + npu.name, + c1_index, + f"{npu.name}.{c1_index=}.to.{scale_up_nic.name}.{c2_index}", + scale_up_nic.name, + c2_index, + ) + + @property + def port_up_component(self) -> infra.Component: + return self._port_component diff --git a/src/tests/test_rack_plane.py b/src/tests/test_rack_plane.py new file mode 100644 index 0000000..7f1ebcb --- /dev/null +++ b/src/tests/test_rack_plane.py @@ -0,0 +1,81 @@ +"""rack plane related unit tests""" + +import pytest + +if __package__ is None or __package__ == "": + from src.generated import infra_pb2 + from src.rack_plane_host import RackPlaneHostBuilder + from src.rack_plane_fabric import RackPlaneFabricBuilder + from src.infrastructure import Infrastructure +else: + from .generated import infra_pb2 + from keysight_chakra.rack_plane_host import RackPlaneHostBuilder + from keysight_chakra.rack_plane_fabric import RackPlaneFabricBuilder + from keysight_chakra.infrastructure import Infrastructure + + +@pytest.mark.parametrize("host_count", [2, 3, 4, 8]) +@pytest.mark.parametrize("sup_nic_count", [2, 3, 4]) +def test_rack_plane_fabric_and_host(host_count: int, sup_nic_count: int): + """verifies that the correct infrastructure can be created from rack_plane fabric/host""" + rp_host_builder = RackPlaneHostBuilder( + npu_count=1, scale_up_nic_count=sup_nic_count, scale_out_nic_count=1 + ) + rp_fabric_builder = RackPlaneFabricBuilder(host_builder=rp_host_builder) + infra_builder = Infrastructure( + host_device=rp_host_builder, + host_devices=host_count, + fabric=rp_fabric_builder, + assignment_scheme="ROUND_ROBIN", + ) + infrastructure = infra_builder.infrastructure + + assert infrastructure is not None + # loose check confirming the correct number of connections + # between host and rack switches + assert len(infrastructure.connections) == host_count * sup_nic_count + + +def test_rack_plane_fabric_and_host_detailed(): + """verifies that the correct infrastructure can be created from rack_plane fabric/host""" + sup_nic_count = 2 + host_count = 2 + rp_host_builder = RackPlaneHostBuilder( + npu_count=1, scale_up_nic_count=sup_nic_count, scale_out_nic_count=1 + ) + rp_fabric_builder = RackPlaneFabricBuilder(host_builder=rp_host_builder) + infra_builder = Infrastructure( + host_device=rp_host_builder, + host_devices=host_count, + fabric=rp_fabric_builder, + assignment_scheme="ROUND_ROBIN", + ) + infrastructure = infra_builder.infrastructure + + assert infrastructure is not None + assert len(infrastructure.connections) == host_count * sup_nic_count + + # now let's confirm every details of the DeviceConnections + def assert_device_conn( + dev_conn: infra_pb2.DeviceConnection, + d1_index: int, + c1_index: int, + d2_index: int, + c2_index: int, + ): + assert dev_conn.link.d1 == "rack plane host" + assert dev_conn.link.c1 == "scale-up-nic" + assert dev_conn.link.d2 == "rack switch" + assert dev_conn.link.c2 == "port-down" + assert dev_conn.link.link == "eth" + assert dev_conn.link.d1_index == d1_index + assert dev_conn.link.c1_index == c1_index + assert dev_conn.link.d2_index == d2_index + assert dev_conn.link.c2_index == c2_index + + # plane 0 d1,c1,d2,c2 + assert_device_conn(infrastructure.connections[0], 0, 0, 0, 0) + assert_device_conn(infrastructure.connections[1], 0, 1, 1, 0) + # plane 1 (and thus rack switch 1; and scale up nic 1 on all hosts) + assert_device_conn(infrastructure.connections[2], 1, 0, 0, 1) + assert_device_conn(infrastructure.connections[3], 1, 1, 1, 1) From b5e3f046c4c3b10086d40c0b7458deeec524ec60 Mon Sep 17 00:00:00 2001 From: thomas-am Date: Mon, 4 Nov 2024 16:31:43 -0800 Subject: [PATCH 07/10] RackPlaneHost: Added mii placeholder link for NPU-NIC links Also using camel case for device names. --- src/rack_plane_fabric.py | 2 +- src/rack_plane_host.py | 29 +++++++++++++++++------------ src/tests/test_rack_plane.py | 4 ++-- 3 files changed, 20 insertions(+), 15 deletions(-) diff --git a/src/rack_plane_fabric.py b/src/rack_plane_fabric.py index 634f340..d24099f 100644 --- a/src/rack_plane_fabric.py +++ b/src/rack_plane_fabric.py @@ -34,7 +34,7 @@ def __init__(self, host_builder: bld.DeviceBuilder, host_count: int = 1): rack_switch, _ = self._add_fabric_devices( host_builder, host_count, - "rack switch", + "RackSwitch", ) self.lowest_device = rack_switch diff --git a/src/rack_plane_host.py b/src/rack_plane_host.py index 240e723..bb63a49 100644 --- a/src/rack_plane_host.py +++ b/src/rack_plane_host.py @@ -19,7 +19,7 @@ class RackPlaneHostBuilder(bld.HostBuilder): supports connecting to switching via multiple planes """ - name = "rack plane host" + name = "RackPlaneHost" description = "a host with dedicated scale up and scale out NICs" def __init__( @@ -38,7 +38,10 @@ def __init__( # name="scale-out-nic", count=scale_out_nic_count, nic=infra.Nic() # ) - # 2. Add device + # 2. Add link & device + # link is yet undetermined, using mii as placeholder with zero cost speed + mii_link = infra.Link(name="mii") + self._device = infra.Device( name=self.name, components={ @@ -46,6 +49,7 @@ def __init__( scale_up_nic.name: scale_up_nic, # scale_out_nic.name: scale_out_nic, }, + links={mii_link.name: mii_link}, ) # 3. Add component links @@ -55,21 +59,22 @@ def __init__( self._add_component_link( npu.name, c1_index, - f"{npu.name}.{c1_index}.to.{scale_up_nic.name}.{c2_index}", + mii_link.name, scale_up_nic.name, c2_index, ) + # TODO: Scale OUT NICs # scale OUT NICs to NPU connections - for c1_index in range(npu.count): - for c2_index in range(scale_up_nic.count): - self._add_component_link( - npu.name, - c1_index, - f"{npu.name}.{c1_index=}.to.{scale_up_nic.name}.{c2_index}", - scale_up_nic.name, - c2_index, - ) + # for c1_index in range(npu.count): + # for c2_index in range(scale_up_nic.count): + # self._add_component_link( + # npu.name, + # c1_index, + # mii_link.name, + # scale_up_nic.name, + # c2_index, + # ) @property def port_up_component(self) -> infra.Component: diff --git a/src/tests/test_rack_plane.py b/src/tests/test_rack_plane.py index 7f1ebcb..1ce34f8 100644 --- a/src/tests/test_rack_plane.py +++ b/src/tests/test_rack_plane.py @@ -63,9 +63,9 @@ def assert_device_conn( d2_index: int, c2_index: int, ): - assert dev_conn.link.d1 == "rack plane host" + assert dev_conn.link.d1 == "RackPlaneHost" assert dev_conn.link.c1 == "scale-up-nic" - assert dev_conn.link.d2 == "rack switch" + assert dev_conn.link.d2 == "RackSwitch" assert dev_conn.link.c2 == "port-down" assert dev_conn.link.link == "eth" assert dev_conn.link.d1_index == d1_index From ac1a0bc325cf86aa0b6d054eff5cf5d3315eda81 Mon Sep 17 00:00:00 2001 From: thomas-am Date: Tue, 5 Nov 2024 15:01:46 -0800 Subject: [PATCH 08/10] fixing ClosFabricSwitch import --- src/rack_plane_fabric.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/rack_plane_fabric.py b/src/rack_plane_fabric.py index d24099f..4160a00 100644 --- a/src/rack_plane_fabric.py +++ b/src/rack_plane_fabric.py @@ -7,14 +7,14 @@ from typing import Tuple -from src.closfabric import ClosFabricSwitch - if __package__ is None or __package__ == "": import generated.infra_pb2 as infra import builders as bld + from keysight_chakra.closfabric import ClosFabricSwitch else: from .generated import infra_pb2 as infra from . import builders as bld + from .closfabric import ClosFabricSwitch class RackPlaneFabricBuilder(bld.FabricBuilder): From 4d089eb3cc5de07ffa521327074d7b914ee7f67f Mon Sep 17 00:00:00 2001 From: thomas-am Date: Tue, 5 Nov 2024 15:02:28 -0800 Subject: [PATCH 09/10] RackPlaneFabricBuilder: setting name as RackPlaneFabric (which is consistent with RackPlaneHostBuilder) --- src/rack_plane_fabric.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/rack_plane_fabric.py b/src/rack_plane_fabric.py index 4160a00..6957e85 100644 --- a/src/rack_plane_fabric.py +++ b/src/rack_plane_fabric.py @@ -23,7 +23,7 @@ class RackPlaneFabricBuilder(bld.FabricBuilder): supports connecting to switching via multiple planes """ - name: str = "rack plane fabric" + name: str = "RackPlaneFabric" description: str = "fabric that users multiple planes inside a rack" lowest_device: bld.DeviceBuilder = None From 7f62f441631d6c0725d6815ee95956524793c7d8 Mon Sep 17 00:00:00 2001 From: Andy Balogh Date: Tue, 5 Nov 2024 16:05:03 -0800 Subject: [PATCH 10/10] Update VERSION to 0.0.22 --- VERSION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/VERSION b/VERSION index 236c7ad..818944f 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.0.21 +0.0.22