Documentation
¶
Overview ¶
* * MIT License * * (C) Copyright 2024-2026 Hewlett Packard Enterprise Development LP * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR * OTHER DEALINGS IN THE SOFTWARE. *
* * MIT License * * (C) Copyright 2024-2026 Hewlett Packard Enterprise Development LP * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR * OTHER DEALINGS IN THE SOFTWARE. *
* * MIT License * * (C) Copyright 2024-2026 Hewlett Packard Enterprise Development LP * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR * OTHER DEALINGS IN THE SOFTWARE. *
* * MIT License * * (C) Copyright 2024-2026 Hewlett Packard Enterprise Development LP * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR * OTHER DEALINGS IN THE SOFTWARE. *
* * MIT License * * (C) Copyright 2024-2026 Hewlett Packard Enterprise Development LP * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR * OTHER DEALINGS IN THE SOFTWARE. *
* * MIT License * * (C) Copyright 2024-2026 Hewlett Packard Enterprise Development LP * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR * OTHER DEALINGS IN THE SOFTWARE. *
* * MIT License * * (C) Copyright 2024-2026 Hewlett Packard Enterprise Development LP * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR * OTHER DEALINGS IN THE SOFTWARE. *
* * MIT License * * (C) Copyright 2024-2026 Hewlett Packard Enterprise Development LP * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR * OTHER DEALINGS IN THE SOFTWARE. *
* * MIT License * * (C) Copyright 2024-2026 Hewlett Packard Enterprise Development LP * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR * OTHER DEALINGS IN THE SOFTWARE. *
* * MIT License * * (C) Copyright 2024-2026 Hewlett Packard Enterprise Development LP * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR * OTHER DEALINGS IN THE SOFTWARE. *
* * MIT License * * (C) Copyright 2024-2026 Hewlett Packard Enterprise Development LP * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR * OTHER DEALINGS IN THE SOFTWARE. *
* * MIT License * * (C) Copyright 2023-2024 Hewlett Packard Enterprise Development LP * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR * OTHER DEALINGS IN THE SOFTWARE. *
* * MIT License * * (C) Copyright 2024-2026 Hewlett Packard Enterprise Development LP * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR * OTHER DEALINGS IN THE SOFTWARE. *
* * MIT License * * (C) Copyright 2024-2026 Hewlett Packard Enterprise Development LP * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR * OTHER DEALINGS IN THE SOFTWARE. *
* * MIT License * * (C) Copyright 2023-2026 Hewlett Packard Enterprise Development LP * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR * OTHER DEALINGS IN THE SOFTWARE. *
* * MIT License * * (C) Copyright 2024-2026 Hewlett Packard Enterprise Development LP * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR * OTHER DEALINGS IN THE SOFTWARE. *
* * MIT License * * (C) Copyright 2024-2026 Hewlett Packard Enterprise Development LP * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR * OTHER DEALINGS IN THE SOFTWARE. *
* * MIT License * * (C) Copyright 2024-2026 Hewlett Packard Enterprise Development LP * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR * OTHER DEALINGS IN THE SOFTWARE. *
* * MIT License * * (C) Copyright 2024-2026 Hewlett Packard Enterprise Development LP * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR * OTHER DEALINGS IN THE SOFTWARE. *
* * MIT License * * (C) Copyright 2024-2026 Hewlett Packard Enterprise Development LP * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR * OTHER DEALINGS IN THE SOFTWARE. *
* * MIT License * * (C) Copyright 2024-2026 Hewlett Packard Enterprise Development LP * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR * OTHER DEALINGS IN THE SOFTWARE. *
* * MIT License * * (C) Copyright 2024-2026 Hewlett Packard Enterprise Development LP * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR * OTHER DEALINGS IN THE SOFTWARE. *
Index ¶
- Constants
- func CableAttachedToAnyDeviceInterface(c *devicetypes.CaniCableType, inv *devicetypes.Inventory) bool
- func CableMatchesAnyInterface(c *devicetypes.CaniCableType, dev *devicetypes.CaniDeviceType, ...) bool
- func Col(s string, width int) string
- func CollectInterfacesForDevices(devices []*devicetypes.CaniDeviceType, inv *devicetypes.Inventory) []*devicetypes.InterfaceInstance
- func ColorInGray(s, color string, noColor bool) string
- func CountLocationDescendants(loc *devicetypes.CaniLocationType, inv *devicetypes.Inventory) (racks int, devices int)
- func FindAllRacks(inv *devicetypes.Inventory) []*devicetypes.CaniDeviceType
- func FindCableForInterface(iface devicetypes.InterfaceSpec, deviceID uuid.UUID, ...) *devicetypes.CaniCableType
- func FindCablesForDevice(deviceID uuid.UUID, inv *devicetypes.Inventory) []*devicetypes.CaniCableType
- func FindFrusForDevice(deviceID uuid.UUID, inv *devicetypes.Inventory) []*devicetypes.CaniFruType
- func FindModulesForDevice(deviceID uuid.UUID, inv *devicetypes.Inventory) []*devicetypes.CaniModuleType
- func FormatTermination(deviceID uuid.UUID, port string, inv *devicetypes.Inventory) string
- func IntOrDash(n int) string
- func JoinNonEmpty(parts []string, sep string) string
- func Pad(s string, n int) string
- func PipeSep(parts ...string) string
- func PrintAllTables(inv *devicetypes.Inventory)
- func PrintCSVRowStep(rowNum, totalRows int, rawData string, parsed string, tally StepTally, ...)
- func PrintCSVRowStepRaw(rowNum, totalRows int, rawData string, parsed string, opts ETLOptions)
- func PrintCableDetails(index, total int, cable *devicetypes.CaniCableType, opts ETLOptions)
- func PrintCableTable(cables []*devicetypes.CaniCableType, inv *devicetypes.Inventory)
- func PrintCaniOperation(msg string, opts ETLOptions)
- func PrintDeviceDetails(index, total int, device *devicetypes.CaniDeviceType, opts ETLOptions)
- func PrintDeviceTable(devices []*devicetypes.CaniDeviceType, inv *devicetypes.Inventory, ...)
- func PrintEntriesTable(entries []devicetypes.MetadataEntry)
- func PrintError(msg string, opts ETLOptions)
- func PrintFieldMappings(mappings []FieldMapping, opts ETLOptions)
- func PrintFruTable(frus []*devicetypes.CaniFruType, inv *devicetypes.Inventory)
- func PrintIPAddressTable(addrs []*devicetypes.CaniIPAddress, inv *devicetypes.Inventory)
- func PrintImportSummary(summary ImportSummary, opts ETLOptions, stepMode bool)
- func PrintInterfaceInstanceTable(ifaces []*devicetypes.InterfaceInstance, inv *devicetypes.Inventory)
- func PrintLocationTable(locations []*devicetypes.CaniLocationType, inv *devicetypes.Inventory)
- func PrintMetadataTable(inv *devicetypes.Inventory)
- func PrintModuleTable(modules []*devicetypes.CaniModuleType, inv *devicetypes.Inventory)
- func PrintNodeTransformStep(info NodeStepInfo, tally StepTally, opts ETLOptions)
- func PrintPhaseComplete(phase string, opts ETLOptions)
- func PrintPhaseHeader(phase string, opts ETLOptions)
- func PrintPrefixTable(prefixes []*devicetypes.CaniPrefix, inv *devicetypes.Inventory)
- func PrintPrefixTree(prefixes []*devicetypes.CaniPrefix)
- func PrintProviderOperation(msg string, opts ETLOptions)
- func PrintRackDetails(index, total int, rack *devicetypes.CaniRackType, opts ETLOptions)
- func PrintRackTable(racks []*devicetypes.CaniRackType, inv *devicetypes.Inventory)
- func PrintRecordStepRaw(rowNum, totalRows int, rawData string, parsed string, identifier string, ...)
- func PrintRolesTable(entries []devicetypes.MetadataEntry)
- func PrintStepItem(itemDesc string, opts ETLOptions)
- func PrintVLANTable(vlans []*devicetypes.CaniVLAN, inv *devicetypes.Inventory)
- func PrintWarning(msg string, opts ETLOptions)
- func PromptCSVRowStep(rowNum, totalRows int, rawData string, parsed string, tally StepTally, ...) error
- func PromptCSVRowStepRaw(rowNum, totalRows int, rawData string, parsed string, opts ETLOptions) error
- func PromptFieldMappingStep(rowNum, totalRows int, hwType string, mappings []FieldMapping, tally StepTally, ...) error
- func PromptNodeTransformStep(info NodeStepInfo, tally StepTally, opts ETLOptions) error
- func PromptRecordStepRaw(rowNum, totalRows int, rawData string, parsed string, identifier string, ...) error
- func PromptStep(itemDesc string, opts ETLOptions) error
- func PromptTransformStep(rowNum, totalRows int, info TransformStepInfo, tally StepTally, ...) error
- func RemoteTermination(c *devicetypes.CaniCableType, localDevice uuid.UUID, ...) string
- func RenderAllRacks(inv *devicetypes.Inventory, opts RenderOptions) error
- func RenderAllRacksTo(w io.Writer, inv *devicetypes.Inventory, opts RenderOptions) error
- func RenderCompactRacks(inv *devicetypes.Inventory, opts CompactRenderOptions) error
- func RenderCompactRacksWithCables(inv *devicetypes.Inventory, opts CompactRenderOptions) error
- func RenderMinimapDetail(inv *devicetypes.Inventory, rv *CompactRackView, opts CompactRenderOptions) error
- func RenderMinimapDetailAll(inv *devicetypes.Inventory, opts CompactRenderOptions) error
- func RenderMinimapRacks(inv *devicetypes.Inventory, opts CompactRenderOptions) error
- func RenderRack(inv *devicetypes.Inventory, format RackFormat, opts CompactRenderOptions) error
- func RenderRackASCII(w io.Writer, rv *RackView, opts RenderOptions) error
- func RenderRacklessInventory(w io.Writer, inv *devicetypes.Inventory, opts RenderOptions) error
- func RenderRoutingView(inv *devicetypes.Inventory, opts CompactRenderOptions) error
- func RenderTree(w io.Writer, roots []TreeNode, opts TreeOptions)
- func RenderTreeOutput(nodes []TreeNode, noColor bool)
- func RenderTreeToStdout(roots []TreeNode, opts TreeOptions)
- func ResolveDeviceChildren(ids []uuid.UUID, inv *devicetypes.Inventory) []*devicetypes.CaniDeviceType
- func ResolveDeviceName(id uuid.UUID, inv *devicetypes.Inventory) string
- func ResolveDevices(ids []uuid.UUID, inv *devicetypes.Inventory) []*devicetypes.CaniDeviceType
- func ResolveLocationChildren(ids []uuid.UUID, inv *devicetypes.Inventory) []*devicetypes.CaniLocationType
- func ResolveLocationName(id uuid.UUID, inv *devicetypes.Inventory) string
- func ResolveRackName(id uuid.UUID, inv *devicetypes.Inventory) string
- func ResolveRacks(ids []uuid.UUID, inv *devicetypes.Inventory) []*devicetypes.CaniRackType
- func RunInteractiveRouting(inv *devicetypes.Inventory, opts CompactRenderOptions) error
- func StatusAnsi(status string) string
- func StatusColor(status string) string
- func TreeIcon(icon, color, typeTag, name string, noColor bool) string
- func TreeIconColored(icon, iconColor, typeTag, name, nameColor string, noColor bool) string
- func Trunc(s string, max int) string
- func ValidRackFormats() []string
- type CableEndpoint
- type CableRoute
- type CableSummary
- type CompactRackView
- type CompactRenderOptions
- type CreatedItemInfo
- type ETLOptions
- type FieldMapping
- type ImportSummary
- type InterRackCable
- type MinimapSlot
- type NodeStepInfo
- type RackFormat
- type RackSlot
- type RackView
- func (rv *RackView) AddDevice(device *devicetypes.CaniDeviceType, position, uHeight int)
- func (rv *RackView) AddUnpositionedDevice(device *devicetypes.CaniDeviceType)
- func (rv *RackView) DeviceCount() int
- func (rv *RackView) EmptyCount() int
- func (rv *RackView) GetSlot(u int) *RackSlot
- func (rv *RackView) IsOccupied(u int) bool
- func (rv *RackView) OccupiedCount() int
- type RenderOptions
- type StepTally
- type TransformStepInfo
- type TreeFilter
- type TreeNode
- func BuildCableTree(cables []*devicetypes.CaniCableType, inv *devicetypes.Inventory, tf TreeFilter) []TreeNode
- func BuildDeviceTree(devices []*devicetypes.CaniDeviceType, inv *devicetypes.Inventory, ...) []TreeNode
- func BuildFruTree(frus []*devicetypes.CaniFruType, inv *devicetypes.Inventory) []TreeNode
- func BuildFullTree(inv *devicetypes.Inventory, tf TreeFilter) []TreeNode
- func BuildInterfaceInstanceTree(ifaces []*devicetypes.InterfaceInstance, inv *devicetypes.Inventory, ...) []TreeNode
- func BuildLocationTree(inv *devicetypes.Inventory, tf TreeFilter) []TreeNode
- func BuildModuleTree(modules []*devicetypes.CaniModuleType, inv *devicetypes.Inventory, ...) []TreeNode
- func BuildRackTree(racks []*devicetypes.CaniRackType, inv *devicetypes.Inventory, tf TreeFilter) []TreeNode
- func CableLeafNode(c *devicetypes.CaniCableType, inv *devicetypes.Inventory, tf TreeFilter) TreeNode
- func DeviceToTreeNode(dev *devicetypes.CaniDeviceType, inv *devicetypes.Inventory, tf TreeFilter) TreeNode
- func DisconnectedCableNode(tf TreeFilter) TreeNode
- func EmptyBayNode(bayName string, tf TreeFilter) TreeNode
- func EmptyUNode(u int, tf TreeFilter) TreeNode
- func FruToTreeNode(fru *devicetypes.CaniFruType, tf TreeFilter) TreeNode
- func InterfaceToTreeNode(iface devicetypes.InterfaceSpec, deviceID uuid.UUID, ...) TreeNode
- func LocationToTreeNode(loc *devicetypes.CaniLocationType, inv *devicetypes.Inventory, tf TreeFilter) TreeNode
- func ModuleBayNode(bayName string, mod *devicetypes.CaniModuleType, inv *devicetypes.Inventory, ...) TreeNode
- func ModuleToTreeNode(mod *devicetypes.CaniModuleType, inv *devicetypes.Inventory, tf TreeFilter) TreeNode
- func RackToTreeNode(rack *devicetypes.CaniRackType, inv *devicetypes.Inventory, tf TreeFilter) TreeNode
- type TreeOptions
Constants ¶
const ( SymSwitch = 'S' // switch SymNode = 'N' // node/server/blade SymBlade = 'B' // blade (alias for node) SymPDU = 'P' // PDU SymCDU = 'C' // CDU SymChassis = '#' // chassis SymUnknown = '?' // unknown device type SymEmpty = '·' // empty slot // Cable drawing characters CableHoriz = "─" CableVertical = "│" CableLeft = "┤" CableRight = "├" CableCross = "┼" )
Device type symbols for compact display
const ( ColName = 30 ColType = 15 ColModel = 30 ColStatus = 10 ColLocation = 20 ColRack = 20 ColDevice = 20 ColBay = 15 ColUPos = 6 ColCount = 8 ColLabel = 25 ColCableTyp = 15 ColTerm = 25 ColSerial = 20 ColConnected = 12 ColRole = 14 )
Column widths for fixed-width table output.
const ( ColPrefix = 20 ColVID = 6 ColAddress = 20 ColDNS = 30 )
Column widths for IPAM tables.
const ( ColMetaName = 25 ColColor = 10 ColDesc = 30 ColCTypes = 30 ColWeight = 8 )
Column widths for metadata tables.
const ( IconRack = "■" IconDevice = "●" IconModule = "◆" IconCable = "═" IconCableDisconnected = "≄" IconInterface = "○" IconFru = "□" IconLocation = "◇" )
Tree icons per node type.
const ( ColorReset = "\033[0m" ColorRed = "\033[31m" ColorGreen = "\033[32m" ColorGray = "\033[90m" ColorYellow = "\033[33m" ColorCyan = "\033[36m" ColorBlue = "\033[34m" ColorMagenta = "\033[35m" ColorBold = "\033[1m" ColorWhite = "\033[97m" )
ANSI color codes
Variables ¶
This section is empty.
Functions ¶
func CableAttachedToAnyDeviceInterface ¶ added in v0.6.1
func CableAttachedToAnyDeviceInterface(c *devicetypes.CaniCableType, inv *devicetypes.Inventory) bool
CableAttachedToAnyDeviceInterface returns true if a cable's termination port matches an interface on either termination device.
func CableMatchesAnyInterface ¶ added in v0.6.1
func CableMatchesAnyInterface(c *devicetypes.CaniCableType, dev *devicetypes.CaniDeviceType, inv *devicetypes.Inventory) bool
CableMatchesAnyInterface returns true if cable c is connected to one of dev's interfaces (meaning it is already shown inline on an interface line).
func CollectInterfacesForDevices ¶ added in v0.6.1
func CollectInterfacesForDevices(devices []*devicetypes.CaniDeviceType, inv *devicetypes.Inventory) []*devicetypes.InterfaceInstance
CollectInterfacesForDevices returns all InterfaceInstances belonging to the given devices.
func ColorInGray ¶ added in v0.6.1
ColorInGray wraps text in a color then switches back to gray. When noColor is true, returns the text unchanged.
func CountLocationDescendants ¶ added in v0.6.1
func CountLocationDescendants(loc *devicetypes.CaniLocationType, inv *devicetypes.Inventory) (racks int, devices int)
CountLocationDescendants recursively counts racks and devices under a location.
func FindAllRacks ¶
func FindAllRacks(inv *devicetypes.Inventory) []*devicetypes.CaniDeviceType
FindAllRacks finds all rack-type devices in the inventory
func FindCableForInterface ¶ added in v0.6.1
func FindCableForInterface(iface devicetypes.InterfaceSpec, deviceID uuid.UUID, inv *devicetypes.Inventory) *devicetypes.CaniCableType
FindCableForInterface returns the cable connected to iface on deviceID, or nil.
func FindCablesForDevice ¶ added in v0.6.1
func FindCablesForDevice(deviceID uuid.UUID, inv *devicetypes.Inventory) []*devicetypes.CaniCableType
FindCablesForDevice returns all cables where TerminationADevice matches deviceID.
func FindFrusForDevice ¶ added in v0.6.1
func FindFrusForDevice(deviceID uuid.UUID, inv *devicetypes.Inventory) []*devicetypes.CaniFruType
FindFrusForDevice returns all FRUs whose Device matches deviceID.
func FindModulesForDevice ¶ added in v0.6.1
func FindModulesForDevice(deviceID uuid.UUID, inv *devicetypes.Inventory) []*devicetypes.CaniModuleType
FindModulesForDevice returns all modules whose ParentDevice matches deviceID.
func FormatTermination ¶ added in v0.6.1
FormatTermination builds a "device:port" string from a device UUID and port name.
func JoinNonEmpty ¶ added in v0.6.1
JoinNonEmpty joins non-empty strings with sep.
func PrintAllTables ¶ added in v0.6.1
func PrintAllTables(inv *devicetypes.Inventory)
PrintAllTables renders all inventory sections as tables with section headers.
func PrintCSVRowStep ¶
func PrintCSVRowStep(rowNum, totalRows int, rawData string, parsed string, tally StepTally, opts ETLOptions)
PrintCSVRowStep prints enhanced step info for a CSV row with raw data and tally
func PrintCSVRowStepRaw ¶
func PrintCSVRowStepRaw(rowNum, totalRows int, rawData string, parsed string, opts ETLOptions)
PrintCSVRowStepRaw prints step info for a raw CSV row without tally (for extract phase)
func PrintCableDetails ¶
func PrintCableDetails(index, total int, cable *devicetypes.CaniCableType, opts ETLOptions)
PrintCableDetails displays cable information during step mode
func PrintCableTable ¶ added in v0.6.1
func PrintCableTable(cables []*devicetypes.CaniCableType, inv *devicetypes.Inventory)
PrintCableTable renders cables as a fixed-width table.
func PrintCaniOperation ¶
func PrintCaniOperation(msg string, opts ETLOptions)
PrintCaniOperation prints a cani framework operation message (cyan)
func PrintDeviceDetails ¶
func PrintDeviceDetails(index, total int, device *devicetypes.CaniDeviceType, opts ETLOptions)
PrintDeviceDetails displays device information during step mode
func PrintDeviceTable ¶ added in v0.6.1
func PrintDeviceTable(devices []*devicetypes.CaniDeviceType, inv *devicetypes.Inventory, tf TreeFilter)
PrintDeviceTable renders devices as a fixed-width table.
func PrintEntriesTable ¶ added in v0.6.1
func PrintEntriesTable(entries []devicetypes.MetadataEntry)
PrintEntriesTable renders metadata entries without a WEIGHT column.
func PrintFieldMappings ¶
func PrintFieldMappings(mappings []FieldMapping, opts ETLOptions)
PrintFieldMappings prints a formatted table of CSV-to-target field mappings. Shows how each CSV field maps to the resulting inventory object field. Direct copies show "→", derived/computed fields show "→→".
func PrintFruTable ¶ added in v0.6.1
func PrintFruTable(frus []*devicetypes.CaniFruType, inv *devicetypes.Inventory)
PrintFruTable renders FRUs as a fixed-width table.
func PrintIPAddressTable ¶ added in v0.6.1
func PrintIPAddressTable(addrs []*devicetypes.CaniIPAddress, inv *devicetypes.Inventory)
PrintIPAddressTable renders IP addresses as a fixed-width table.
func PrintImportSummary ¶
func PrintImportSummary(summary ImportSummary, opts ETLOptions, stepMode bool)
PrintImportSummary prints a summary of imported items and their relationships
func PrintInterfaceInstanceTable ¶ added in v0.6.1
func PrintInterfaceInstanceTable(ifaces []*devicetypes.InterfaceInstance, inv *devicetypes.Inventory)
PrintInterfaceInstanceTable renders interface instances as a fixed-width table.
func PrintLocationTable ¶ added in v0.6.1
func PrintLocationTable(locations []*devicetypes.CaniLocationType, inv *devicetypes.Inventory)
PrintLocationTable renders locations as a fixed-width table.
func PrintMetadataTable ¶ added in v0.6.1
func PrintMetadataTable(inv *devicetypes.Inventory)
PrintMetadataTable renders inventory metadata as grouped tables.
func PrintModuleTable ¶ added in v0.6.1
func PrintModuleTable(modules []*devicetypes.CaniModuleType, inv *devicetypes.Inventory)
PrintModuleTable renders modules as a fixed-width table.
func PrintNodeTransformStep ¶
func PrintNodeTransformStep(info NodeStepInfo, tally StepTally, opts ETLOptions)
PrintNodeTransformStep shows raw HPCM node data and how fields map to CANI types. Includes per-node field mappings and a running tally.
func PrintPhaseComplete ¶
func PrintPhaseComplete(phase string, opts ETLOptions)
PrintPhaseComplete prints a completion marker for an ETL phase
func PrintPhaseHeader ¶
func PrintPhaseHeader(phase string, opts ETLOptions)
PrintPhaseHeader prints a boxed header for an ETL phase
func PrintPrefixTable ¶ added in v0.6.1
func PrintPrefixTable(prefixes []*devicetypes.CaniPrefix, inv *devicetypes.Inventory)
PrintPrefixTable renders prefixes as a fixed-width table.
func PrintPrefixTree ¶ added in v0.6.1
func PrintPrefixTree(prefixes []*devicetypes.CaniPrefix)
PrintPrefixTree renders prefixes as an indented hierarchy.
func PrintProviderOperation ¶
func PrintProviderOperation(msg string, opts ETLOptions)
PrintProviderOperation prints a provider-specific operation message (yellow)
func PrintRackDetails ¶
func PrintRackDetails(index, total int, rack *devicetypes.CaniRackType, opts ETLOptions)
PrintRackDetails displays rack information during step mode
func PrintRackTable ¶ added in v0.6.1
func PrintRackTable(racks []*devicetypes.CaniRackType, inv *devicetypes.Inventory)
PrintRackTable renders racks as a fixed-width table.
func PrintRecordStepRaw ¶
func PrintRecordStepRaw(rowNum, totalRows int, rawData string, parsed string, identifier string, opts ETLOptions)
PrintRecordStepRaw prints step info for a record without tally (for extract phase). identifier is an optional line (e.g. hostname or serial) shown in gray below the header.
func PrintRolesTable ¶ added in v0.6.1
func PrintRolesTable(entries []devicetypes.MetadataEntry)
PrintRolesTable renders role entries with a WEIGHT column.
func PrintStepItem ¶
func PrintStepItem(itemDesc string, opts ETLOptions)
PrintStepItem prints details about an item being processed (for step-through)
func PrintVLANTable ¶ added in v0.6.1
func PrintVLANTable(vlans []*devicetypes.CaniVLAN, inv *devicetypes.Inventory)
PrintVLANTable renders VLANs as a fixed-width table.
func PrintWarning ¶
func PrintWarning(msg string, opts ETLOptions)
PrintWarning prints a warning message
func PromptCSVRowStep ¶
func PromptCSVRowStep(rowNum, totalRows int, rawData string, parsed string, tally StepTally, opts ETLOptions) error
PromptCSVRowStep prints CSV row step info and waits for Enter
func PromptCSVRowStepRaw ¶
func PromptCSVRowStepRaw(rowNum, totalRows int, rawData string, parsed string, opts ETLOptions) error
PromptCSVRowStepRaw prints raw CSV row step info and waits for Enter (no tally)
func PromptFieldMappingStep ¶
func PromptFieldMappingStep(rowNum, totalRows int, hwType string, mappings []FieldMapping, tally StepTally, opts ETLOptions) error
PromptFieldMappingStep prints field mappings with tally and waits for Enter. Used for step-through mode during transform phase.
func PromptNodeTransformStep ¶
func PromptNodeTransformStep(info NodeStepInfo, tally StepTally, opts ETLOptions) error
PromptNodeTransformStep prints node transform step info and waits for Enter.
func PromptRecordStepRaw ¶
func PromptRecordStepRaw(rowNum, totalRows int, rawData string, parsed string, identifier string, opts ETLOptions) error
PromptRecordStepRaw prints record step info and waits for Enter (no tally). identifier is an optional line (e.g. hostname or serial) shown in gray below the header.
func PromptStep ¶
func PromptStep(itemDesc string, opts ETLOptions) error
PromptStep prints item details and waits for user to press Enter
func PromptTransformStep ¶
func PromptTransformStep(rowNum, totalRows int, info TransformStepInfo, tally StepTally, opts ETLOptions) error
PromptTransformStep prints detailed transform step info with quantity and created items.
func RemoteTermination ¶ added in v0.6.1
func RemoteTermination(c *devicetypes.CaniCableType, localDevice uuid.UUID, inv *devicetypes.Inventory) string
RemoteTermination returns the formatted device:port for the far end of a cable relative to localDevice.
func RenderAllRacks ¶
func RenderAllRacks(inv *devicetypes.Inventory, opts RenderOptions) error
RenderAllRacks renders all racks (or filtered by name) to stdout
func RenderAllRacksTo ¶
func RenderAllRacksTo(w io.Writer, inv *devicetypes.Inventory, opts RenderOptions) error
RenderAllRacksTo renders all racks to a specific writer
func RenderCompactRacks ¶
func RenderCompactRacks(inv *devicetypes.Inventory, opts CompactRenderOptions) error
RenderCompactRacks renders all racks in a compact ASCII format
func RenderCompactRacksWithCables ¶
func RenderCompactRacksWithCables(inv *devicetypes.Inventory, opts CompactRenderOptions) error
RenderCompactRacksWithCables renders racks one per line with chronyc-style cable visualization
func RenderMinimapDetail ¶
func RenderMinimapDetail(inv *devicetypes.Inventory, rv *CompactRackView, opts CompactRenderOptions) error
RenderMinimapDetail renders a single rack with right-side annotations.
func RenderMinimapDetailAll ¶
func RenderMinimapDetailAll(inv *devicetypes.Inventory, opts CompactRenderOptions) error
RenderMinimapDetailAll renders each rack one at a time with detail annotations.
func RenderMinimapRacks ¶
func RenderMinimapRacks(inv *devicetypes.Inventory, opts CompactRenderOptions) error
RenderMinimapRacks renders all racks as ultra-compact 2-char-wide columns.
func RenderRack ¶ added in v0.6.1
func RenderRack(inv *devicetypes.Inventory, format RackFormat, opts CompactRenderOptions) error
RenderRack dispatches to the appropriate rack renderer for the given format.
func RenderRackASCII ¶
func RenderRackASCII(w io.Writer, rv *RackView, opts RenderOptions) error
RenderRackASCII renders a single rack to a writer
func RenderRacklessInventory ¶
func RenderRacklessInventory(w io.Writer, inv *devicetypes.Inventory, opts RenderOptions) error
RenderRacklessInventory renders inventory that has no racks - shows device summary and cables
func RenderRoutingView ¶ added in v0.6.1
func RenderRoutingView(inv *devicetypes.Inventory, opts CompactRenderOptions) error
RenderRoutingView renders minimap-width racks with a wiring diagram. Without a RackFilter it renders one rack at a time sequentially.
func RenderTree ¶
func RenderTree(w io.Writer, roots []TreeNode, opts TreeOptions)
RenderTree writes a tree of nodes to w using box-drawing characters.
func RenderTreeOutput ¶ added in v0.6.1
RenderTreeOutput renders tree nodes to stdout.
func RenderTreeToStdout ¶
func RenderTreeToStdout(roots []TreeNode, opts TreeOptions)
RenderTreeToStdout is a convenience wrapper that writes to stdout.
func ResolveDeviceChildren ¶ added in v0.6.1
func ResolveDeviceChildren(ids []uuid.UUID, inv *devicetypes.Inventory) []*devicetypes.CaniDeviceType
ResolveDeviceChildren resolves child device UUIDs into sorted device pointers.
func ResolveDeviceName ¶ added in v0.6.1
func ResolveDeviceName(id uuid.UUID, inv *devicetypes.Inventory) string
ResolveDeviceName looks up a device name by UUID.
func ResolveDevices ¶ added in v0.6.1
func ResolveDevices(ids []uuid.UUID, inv *devicetypes.Inventory) []*devicetypes.CaniDeviceType
ResolveDevices resolves a slice of device UUIDs into sorted device pointers.
func ResolveLocationChildren ¶ added in v0.6.1
func ResolveLocationChildren(ids []uuid.UUID, inv *devicetypes.Inventory) []*devicetypes.CaniLocationType
ResolveLocationChildren resolves a slice of location UUIDs into sorted location pointers.
func ResolveLocationName ¶ added in v0.6.1
func ResolveLocationName(id uuid.UUID, inv *devicetypes.Inventory) string
ResolveLocationName looks up a location name by UUID.
func ResolveRackName ¶ added in v0.6.1
func ResolveRackName(id uuid.UUID, inv *devicetypes.Inventory) string
ResolveRackName looks up a rack name by UUID.
func ResolveRacks ¶ added in v0.6.1
func ResolveRacks(ids []uuid.UUID, inv *devicetypes.Inventory) []*devicetypes.CaniRackType
ResolveRacks resolves a slice of rack UUIDs into sorted rack pointers.
func RunInteractiveRouting ¶ added in v0.6.1
func RunInteractiveRouting(inv *devicetypes.Inventory, opts CompactRenderOptions) error
RunInteractiveRouting enters a raw-mode loop for toggle-based cable filtering.
func StatusAnsi ¶ added in v0.6.1
StatusAnsi returns the ANSI color code for a status string.
func StatusColor ¶
StatusColor returns a color key ("red", "green", "yellow", or "cyan") for the given device status string. The status is normalised via devicetypes.NormalizeStatus so callers may pass any casing.
func TreeIcon ¶ added in v0.6.1
TreeIcon returns "icon (type) name" with the icon colored, type dimmed, and name bold white.
func TreeIconColored ¶ added in v0.6.1
TreeIconColored is like TreeIcon but colors the name with nameColor instead of white.
func ValidRackFormats ¶ added in v0.6.1
func ValidRackFormats() []string
ValidRackFormats returns the rack-specific format names.
Types ¶
type CableEndpoint ¶
type CableEndpoint struct {
U int // U position in rack
Port string // Port name
DestName string // Destination device name
DestPort string // Destination port
DestU int // Destination U position
GoingUp bool // True if cable goes up (dest U > src U)
}
CableEndpoint represents one end of a cable for routing
type CableRoute ¶
type CableRoute struct {
StartU int
EndU int
Column int // Horizontal column for this cable's vertical segment
Endpoint CableEndpoint
}
CableRoute tracks a cable's path through the grid
type CableSummary ¶
type CableSummary struct {
SourceDevice string
SourcePort string
DestDevice string
DestPort string
CableType string
}
CableSummary describes a cable connection for display
type CompactRackView ¶
type CompactRackView struct {
Rack *devicetypes.CaniRackType
RackID uuid.UUID
Height int
Devices map[int]*devicetypes.CaniDeviceType // U position -> device (start position only)
Index int // Column index for cable drawing
}
CompactRackView holds pre-computed rack data for compact rendering
type CompactRenderOptions ¶
type CompactRenderOptions struct {
NoColor bool // Disable ANSI colors
RackFilter string // Filter to specific rack name
Columns int // Number of rack columns before wrapping (0 = auto)
Verbose int // 0 = no legend, 1 = legend, 2 = all cables
CableType string // Filter cables by type (e.g., "dac", "cat6")
Detail bool // Show single-rack detail with annotations
ShowLabels bool // Show A/B termination labels on routing view
Interactive bool // Enter interactive toggle mode for routing view
Inventory *devicetypes.Inventory // Full inventory for module/cable lookups
}
CompactRenderOptions controls compact rack visualization
type CreatedItemInfo ¶
type CreatedItemInfo struct {
ID string // Short UUID (first 8 chars)
Name string // Generated name
}
CreatedItemInfo holds info about items created from a single CSV record.
type ETLOptions ¶
ETLOptions controls ETL visual output
type FieldMapping ¶
type FieldMapping struct {
SourceField string // CSV column name (e.g., "PartNumber", "Description")
SourceValue string // Raw value from CSV
TargetType string // Target type (e.g., "CaniDeviceType", "CaniRackType")
TargetField string // Target field name (e.g., "Name", "DeviceTypeSlug")
TargetValue string // Transformed value (may differ from source)
IsDerived bool // True if value is computed/derived (not a direct copy)
}
FieldMapping represents a single CSV field to target field mapping. Used for step-through display to show how raw CSV data maps to inventory objects.
type ImportSummary ¶
type ImportSummary struct {
RackNames []string
DevicesByRack map[string][]string // rack name -> device names
Cables []CableSummary
}
ImportSummary holds summary data for post-import display
type InterRackCable ¶
type InterRackCable struct {
Cable *devicetypes.CaniCableType
RackAIndex int // Column index of rack A
RackBIndex int // Column index of rack B
PositionA int // U position in rack A
PositionB int // U position in rack B
DeviceAName string
DeviceBName string
PortA string
PortB string
}
InterRackCable represents a cable between two racks
type MinimapSlot ¶
type MinimapSlot struct {
Char1 rune // front/full-depth indicator
Char2 rune // rear/module indicator
Color1 string
Color2 string
}
MinimapSlot holds the 2-character representation for one U position.
type NodeStepInfo ¶
type NodeStepInfo struct {
NodeNum int
Total int
RawName string
RawType string
RawUUID string
RawRack string
FruCount int
FruNames []string // unique group IDs (e.g. "dimm.432890BE", "disk.disk0")
Mappings []FieldMapping
LibMatch string // slug of matched library entry, or ""
MatchQuery string // query string that produced the match
MatchScore int // confidence score (0-100)
LibModel string // model field of matched library entry
LibManufacturer string // manufacturer field of matched library entry
}
NodeStepInfo holds all info needed for an HPCM node transform step display.
type RackFormat ¶ added in v0.6.1
type RackFormat string
RackFormat identifies a rack-specific output format.
const ( RackFormatClassic RackFormat = "classic" RackFormatMinimap RackFormat = "minimap" RackFormatDetail RackFormat = "detail" RackFormatRouting RackFormat = "routing" )
type RackSlot ¶
type RackSlot struct {
Device *devicetypes.CaniDeviceType
IsStart bool // True if this is the starting U of a multi-U device
IsContinued bool // True if this is a continuation of a multi-U device
}
RackSlot represents a single U position in a rack
type RackView ¶
type RackView struct {
Rack *devicetypes.CaniDeviceType
Height int // Total rack height in U
Slots map[int]*RackSlot // U position -> slot info (1-indexed)
UnpositionedDevices []*devicetypes.CaniDeviceType
}
RackView represents a rack visualization
func BuildRackVisualization ¶
BuildRackVisualization creates a RackView from inventory for a specific rack
func NewRackView ¶
func NewRackView(rack *devicetypes.CaniDeviceType, height int) *RackView
NewRackView creates a new RackView for the given rack
func (*RackView) AddDevice ¶
func (rv *RackView) AddDevice(device *devicetypes.CaniDeviceType, position, uHeight int)
AddDevice adds a device to the rack view at the specified position
func (*RackView) AddUnpositionedDevice ¶
func (rv *RackView) AddUnpositionedDevice(device *devicetypes.CaniDeviceType)
AddUnpositionedDevice adds a device that lacks rack position info
func (*RackView) DeviceCount ¶
DeviceCount returns the number of unique devices in the rack
func (*RackView) EmptyCount ¶
EmptyCount returns the number of empty U positions
func (*RackView) IsOccupied ¶
IsOccupied returns true if the U position is occupied
func (*RackView) OccupiedCount ¶
OccupiedCount returns the number of occupied U positions
type RenderOptions ¶
type RenderOptions struct {
NoColor bool
RackFilter string // Filter to specific rack name
ShowCables bool // Show cable connections
Inventory *devicetypes.Inventory // Full inventory for cable lookups
}
RenderOptions controls visual output
type TransformStepInfo ¶
type TransformStepInfo struct {
Quantity int // CSV Quantity value
HwType string // Hardware type classification
Mappings []FieldMapping // Field mappings (from first item as template)
CreatedItems []CreatedItemInfo // All items created from this record
}
TransformStepInfo holds all info needed for a transform step display.
type TreeFilter ¶ added in v0.6.1
type TreeFilter struct {
Modules bool
Interfaces bool
Cables bool
EmptyUs bool
Roles bool
NoColor bool
}
TreeFilter controls which child types are included in tree output.
type TreeNode ¶
type TreeNode struct {
Label string // Primary name (rendered in normal text)
Detail string // Additional metadata (rendered in gray/dimmed)
Children []TreeNode
}
TreeNode represents a single node in a display tree.
func BuildCableTree ¶ added in v0.6.1
func BuildCableTree(cables []*devicetypes.CaniCableType, inv *devicetypes.Inventory, tf TreeFilter) []TreeNode
BuildCableTree groups cables by A-termination device as tree nodes.
func BuildDeviceTree ¶ added in v0.6.1
func BuildDeviceTree(devices []*devicetypes.CaniDeviceType, inv *devicetypes.Inventory, tf TreeFilter) []TreeNode
BuildDeviceTree builds tree nodes for devices → modules.
func BuildFruTree ¶ added in v0.6.1
func BuildFruTree(frus []*devicetypes.CaniFruType, inv *devicetypes.Inventory) []TreeNode
BuildFruTree groups FRUs by parent device as tree nodes.
func BuildFullTree ¶ added in v0.6.1
func BuildFullTree(inv *devicetypes.Inventory, tf TreeFilter) []TreeNode
BuildFullTree builds the complete inventory tree: Locations → Racks → Devices → Modules.
func BuildInterfaceInstanceTree ¶ added in v0.6.1
func BuildInterfaceInstanceTree(ifaces []*devicetypes.InterfaceInstance, inv *devicetypes.Inventory, tf TreeFilter) []TreeNode
BuildInterfaceInstanceTree groups interface instances by device as tree nodes.
func BuildLocationTree ¶ added in v0.6.1
func BuildLocationTree(inv *devicetypes.Inventory, tf TreeFilter) []TreeNode
BuildLocationTree builds tree nodes for the location hierarchy.
func BuildModuleTree ¶ added in v0.6.1
func BuildModuleTree(modules []*devicetypes.CaniModuleType, inv *devicetypes.Inventory, tf TreeFilter) []TreeNode
BuildModuleTree groups modules by parent device as tree nodes.
func BuildRackTree ¶ added in v0.6.1
func BuildRackTree(racks []*devicetypes.CaniRackType, inv *devicetypes.Inventory, tf TreeFilter) []TreeNode
BuildRackTree builds tree nodes for racks → devices → modules.
func CableLeafNode ¶ added in v0.6.1
func CableLeafNode(c *devicetypes.CaniCableType, inv *devicetypes.Inventory, tf TreeFilter) TreeNode
CableLeafNode converts a cable into a tree leaf showing the connection.
func DeviceToTreeNode ¶ added in v0.6.1
func DeviceToTreeNode(dev *devicetypes.CaniDeviceType, inv *devicetypes.Inventory, tf TreeFilter) TreeNode
DeviceToTreeNode converts a device and its modules/children into a tree node.
func DisconnectedCableNode ¶ added in v0.6.1
func DisconnectedCableNode(tf TreeFilter) TreeNode
DisconnectedCableNode returns a placeholder cable node for an unconnected interface.
func EmptyBayNode ¶ added in v0.6.1
func EmptyBayNode(bayName string, tf TreeFilter) TreeNode
EmptyBayNode renders an empty module bay in all-dim text.
func EmptyUNode ¶ added in v0.6.1
func EmptyUNode(u int, tf TreeFilter) TreeNode
EmptyUNode renders a dim placeholder for an unoccupied rack unit.
func FruToTreeNode ¶ added in v0.6.1
func FruToTreeNode(fru *devicetypes.CaniFruType, tf TreeFilter) TreeNode
FruToTreeNode converts a FRU into a tree leaf.
func InterfaceToTreeNode ¶ added in v0.6.1
func InterfaceToTreeNode(iface devicetypes.InterfaceSpec, deviceID uuid.UUID, inv *devicetypes.Inventory, tf TreeFilter) TreeNode
InterfaceToTreeNode converts an interface spec into a tree node.
func LocationToTreeNode ¶ added in v0.6.1
func LocationToTreeNode(loc *devicetypes.CaniLocationType, inv *devicetypes.Inventory, tf TreeFilter) TreeNode
LocationToTreeNode recursively converts a location and its children into a tree node.
func ModuleBayNode ¶ added in v0.6.1
func ModuleBayNode(bayName string, mod *devicetypes.CaniModuleType, inv *devicetypes.Inventory, tf TreeFilter) TreeNode
ModuleBayNode renders a module bay. When mod is non-nil, the bay is populated.
func ModuleToTreeNode ¶ added in v0.6.1
func ModuleToTreeNode(mod *devicetypes.CaniModuleType, inv *devicetypes.Inventory, tf TreeFilter) TreeNode
ModuleToTreeNode converts a module into a tree node with its interfaces and FRUs.
func RackToTreeNode ¶ added in v0.6.1
func RackToTreeNode(rack *devicetypes.CaniRackType, inv *devicetypes.Inventory, tf TreeFilter) TreeNode
RackToTreeNode converts a rack and its child devices into a tree node.
type TreeOptions ¶
TreeOptions controls tree rendering output.
Source Files
¶
- etl.go
- rack.go
- rack_compact.go
- rack_format.go
- rack_interactive.go
- rack_minimap.go
- rack_minimap_detail.go
- rack_routing.go
- rack_routing_labels.go
- resolve.go
- status_color.go
- step.go
- table.go
- table_extra.go
- table_ipam.go
- table_metadata.go
- tree.go
- tree_build.go
- tree_build_device.go
- tree_build_groups.go
- tree_format.go
- types.go