Skip to content
Draft
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,9 @@ go.work.sum
# Generated build-installer
dist/*

# Generated provider matrix tool
generate-provider-matrix

# Kubernetes Generated files - skip generated files, except for vendored files
!vendor/**/zz_generated.*

Expand Down
9 changes: 7 additions & 2 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -180,7 +180,7 @@ run-docs:
@docker build -t $(DOCS_IMG) -f docs/Dockerfile docs --load
@docker run --rm --init -p 5173:5173 -v $(ROOT_DIR)/docs:/workspace -v /workspace/node_modules $(DOCS_IMG)

docs: install-crd-ref-docs
docs: install-crd-ref-docs provider-matrix
crd-ref-docs --source-path=./api --config=./hack/api-reference/config.yaml --renderer=markdown --output-path=./docs/api-reference/index.md
@$(SED) -i \
-e 's/#networkingmetalironcoredevv1alpha1/#networking-metal-ironcore-dev-v1alpha1/g' \
Expand All @@ -189,6 +189,11 @@ docs: install-crd-ref-docs
-e 's/#xrcisconetworkingmetalironcoredevv1alpha1/#xr-cisco-networking-metal-ironcore-dev-v1alpha1/g' \
docs/api-reference/index.md

# Generate provider implementation matrix
provider-matrix: FORCE
@printf "\e[1;36m>> go run ./hack/generate-provider-matrix.go > docs/provider-compatibility.md\e[0m\n"
@go run ./hack/generate-provider-matrix.go > docs/provider-compatibility.md

install-goimports: FORCE
@if ! hash goimports 2>/dev/null; then printf "\e[1;36m>> Installing goimports (this may take a while)...\e[0m\n"; go install golang.org/x/tools/cmd/goimports@latest; fi

Expand Down Expand Up @@ -310,7 +315,7 @@ license-headers: FORCE install-addlicense
@printf "\e[1;36m>> addlicense (for license headers on source code files)\e[0m\n"
@printf "%s\0" $(patsubst $(shell awk '$$1 == "module" {print $$2}' go.mod)%,.%/*.go,$(shell go list ./...)) | $(XARGS) -0 -I{} bash -c 'year="$$(grep 'Copyright' {} | head -n1 | grep -E -o '"'"'[0-9]{4}(-[0-9]{4})?'"'"')"; if [[ -z "$$year" ]]; then year=$$(date +%Y); fi; gawk -i inplace '"'"'{if (display) {print} else {!/^\/\*/ && !/^\*/}}; {if (!display && $$0 ~ /^(package |$$)/) {display=1} else { }}'"'"' {}; addlicense -c "SAP SE or an SAP affiliate company and IronCore contributors" -s=only -y "$$year" -- {}; $(SED) -i '"'"'1s+// Copyright +// SPDX-FileCopyrightText: +'"'"' {}; '
@printf "\e[1;36m>> reuse annotate (for license headers on other files)\e[0m\n"
@reuse lint -j | jq -r '.non_compliant.missing_licensing_info[]' | grep -vw vendor | $(XARGS) reuse annotate -c 'SAP SE or an SAP affiliate company and IronCore contributors' -l Apache-2.0 --skip-unrecognised
@reuse lint -j | jq -r '.non_compliant.missing_licensing_info[]' | sed '/\<vendor\>/d' | $(XARGS) reuse annotate -c 'SAP SE or an SAP affiliate company and IronCore contributors' -l Apache-2.0 --skip-unrecognised
@printf "\e[1;36m>> reuse download --all\e[0m\n"
@reuse download --all
@printf "\e[1;35mPlease review the changes. If *.license files were generated, consider instructing go-makefile-maker to add overrides to REUSE.toml instead.\e[0m\n"
Expand Down
7 changes: 6 additions & 1 deletion Makefile.maker.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -224,11 +224,16 @@ verbatim: |
@docker build -t $(DOCS_IMG) -f docs/Dockerfile docs --load
@docker run --rm --init -p 5173:5173 -v $(ROOT_DIR)/docs:/workspace -v /workspace/node_modules $(DOCS_IMG)

docs: install-crd-ref-docs
docs: install-crd-ref-docs provider-matrix
crd-ref-docs --source-path=./api --config=./hack/api-reference/config.yaml --renderer=markdown --output-path=./docs/api-reference/index.md
@$(SED) -i \
-e 's/#networkingmetalironcoredevv1alpha1/#networking-metal-ironcore-dev-v1alpha1/g' \
-e 's/#nxcisconetworkingmetalironcoredevv1alpha1/#nx-cisco-networking-metal-ironcore-dev-v1alpha1/g' \
-e 's/#xecisconetworkingmetalironcoredevv1alpha1/#xe-cisco-networking-metal-ironcore-dev-v1alpha1/g' \
-e 's/#xrcisconetworkingmetalironcoredevv1alpha1/#xr-cisco-networking-metal-ironcore-dev-v1alpha1/g' \
docs/api-reference/index.md

# Generate provider implementation matrix
provider-matrix: FORCE
@printf "\e[1;36m>> go run ./hack/generate-provider-matrix.go > docs/provider-compatibility.md\e[0m\n"
@go run ./hack/generate-provider-matrix.go > docs/provider-compatibility.md
14 changes: 14 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,20 @@ Users can just run kubectl apply -f <URL for YAML BUNDLE> to install the project
kubectl apply -f https://raw.githubusercontent.com/<org>/network-operator/<tag or branch>/dist/install.yaml
```

## Supported Providers

network-operator supports multiple network device providers with varying levels of feature support:

<!-- BEGIN provider-summary -->
| Provider | Supported API Types |
|----------|---------------------|
| Cisco NX-OS | 22 / 22 |
| Cisco IOS-XR | 1 / 22 |
| OpenConfig | 1 / 22 |
<!-- END provider-summary -->

Comment thread
nikatza marked this conversation as resolved.
Outdated
For a detailed compatibility matrix showing which API types are supported by each provider, see [Provider Compatibility Matrix](docs/provider-compatibility.md).

## Support, Feedback, Contributing

This project is open to feature requests/suggestions, bug reports etc. via [GitHub issues](https://github.com/ironcore-dev/network-operator/issues). Contribution and feedback are encouraged and always welcome. For more information about how to contribute, the project structure, as well as additional contribution information, see our [Contribution Guidelines](CONTRIBUTING.md).
Expand Down
84 changes: 84 additions & 0 deletions docs/provider-compatibility.md

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There is no navigation entry for this page. How would I navigate to it from the Documentation? 😅

Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
<!--
SPDX-FileCopyrightText: 2026 SAP SE or an SAP affiliate company and IronCore contributors
SPDX-License-Identifier: Apache-2.0
-->

# Provider Compatibility Matrix

This document provides a detailed overview of which API types are supported by each network device provider.

<!-- To regenerate this matrix, run: make provider-matrix -->

## Compatibility Matrix

| Core Kind | Cisco NX-OS | Cisco IOS-XR | OpenConfig |
|-----------|--------|--------|--------|
| `AccessControlList` | ✅ | — | — |
| `BGPPeer` | ✅ | — | — |
| `BGP` | ✅ | — | — |
| `Banner` | ✅ | — | — |
| `Certificate` | ✅ | — | — |
| `DNS` | ✅ | — | — |
| `EVPNInstance` | ✅ | — | — |
| `ISIS` | ✅ | — | — |
| `Interface` | ✅ | ✅ | ✅ |
| `LLDP` | ✅ | — | — |
| `ManagementAccess` | ✅ | — | — |
| `NTP` | ✅ | — | — |
| `NetworkVirtualizationEdge` | ✅ | — | — |
| `OSPF` | ✅ | — | — |
| `PIM` | ✅ | — | — |
| `PrefixSet` | ✅ | — | — |
| `RoutingPolicy` | ✅ | — | — |
| `SNMP` | ✅ | — | — |
| `Syslog` | ✅ | — | — |
| `User` | ✅ | — | — |
| `VLAN` | ✅ | — | — |
| `VRF` | ✅ | — | — |

**Legend:**
- ✅ Supported
- — Not supported

## Cisco NX-OS

Cisco NX-OS provides comprehensive support for network configuration through the network-operator.

**Core API types:** 22 / 22

**Provider-specific types:**

| Kind | Category |
|------|----------|
| `BGPConfig` | Extends core type `BGP` |
| `InterfaceConfig` | Extends core type `Interface` |
| `LLDPConfig` | Extends core type `LLDP` |
| `ManagementAccessConfig` | Extends core type `ManagementAccess` |
| `NetworkVirtualizationEdgeConfig` | Extends core type `NetworkVirtualizationEdge` |
| `BorderGateway` | Provider-exclusive |
| `System` | Provider-exclusive |
| `VPCDomain` | Provider-exclusive |
Comment thread
nikatza marked this conversation as resolved.

## Cisco IOS-XR

Cisco IOS-XR support is currently in early development.

**Core API types:** 1 / 22

## OpenConfig

OpenConfig provides a vendor-neutral configuration interface using standard OpenConfig YANG models.

**Core API types:** 1 / 22
Comment thread
nikatza marked this conversation as resolved.
Outdated

## Contributing

To add support for a new API type or provider:

1. Define the provider interface in `internal/provider/`
2. Implement the interface methods in your provider package
3. Run `make provider-matrix` to regenerate this document
4. Submit a pull request with your changes

The matrix is automatically generated by checking which provider interfaces
each provider implements, ensuring accuracy and eliminating manual maintenance.
Loading
Loading