Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
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 -->

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 |

## 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

## 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