Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
35 commits
Select commit Hold shift + click to select a range
e91bf38
Clarify DisableMP field documentation to indicate it's ignored
andreaskaris Jan 7, 2026
052dad7
Merge pull request #388 from andreaskaris/issue387
oribon Jan 7, 2026
9fa2ec2
Fix BGPConfig routers field to be omitempty
andreaskaris Dec 29, 2025
8f02b42
Merge pull request #391 from andreaskaris/fix-bgpconfig-routers
fedepaol Jan 9, 2026
c4cf5ed
Fix build make target
andreaskaris Dec 22, 2025
537c40e
Merge pull request #389 from andreaskaris/fix-build-make-target
fedepaol Jan 20, 2026
fa6ee40
E2E: bump metallb/e2etest and metallb dependency to v0.15.2
andreaskaris Dec 19, 2025
19dd641
Rename frr-k8s container to controller for consistency
andreaskaris Jan 9, 2026
ec5fbe3
Fix status cleaner cache
andreaskaris Jan 11, 2026
cabba9c
Fix statuscleaner deployment labels and container naming for consistency
andreaskaris Jan 14, 2026
9d5d4b6
Add new v1beta1 type FRRK8sConfiguration
andreaskaris Jan 14, 2026
0b5fdf6
Remove ununsed vars from e2etest_suite_test.go
andreaskaris Jan 29, 2026
56876ac
Add support for configurable logging at runtime
andreaskaris Dec 29, 2025
30fc0e2
Add E2E tests for support for configurable logging at runtime
andreaskaris Jan 14, 2026
38fc4d8
Merge pull request #386 from andreaskaris/frr-log-level-simple
fedepaol Jan 30, 2026
6d67468
Merge pull request #395 from andreaskaris/remove-unused
oribon Feb 1, 2026
7df16b7
Add design proposal for basic EVPN support
jcaamano Dec 11, 2025
51539f9
Fix BFD profile merging to allow adding BFD to existing neighbors
andreaskaris Feb 11, 2026
be0ba5a
Merge pull request #372 from jcaamano/evpn
fedepaol Feb 23, 2026
3885dc3
Bump demo FRR image tag to 10.4.1
booxter Feb 27, 2026
7ed2070
Add e2etest for fixed BFD profile merging
andreaskaris Feb 11, 2026
28d5f53
Merge pull request #400 from andreaskaris/issues399
oribon Mar 3, 2026
382aa18
Merge pull request #404 from booxter/bump-demo-tag
fedepaol Mar 3, 2026
38059bd
TEMPORARY FIX: replace kube-rbac-proxy registry
oribon Mar 16, 2026
5705f69
Merge pull request #418 from oribon/kube-rbac-unblock-ci
oribon Mar 16, 2026
f5c7eed
Fix comment generation in helm docs README.md
andreaskaris Mar 12, 2026
93287f7
Add missing comments in helm docs README.md
andreaskaris Mar 17, 2026
2d012db
Add make verify-helm-docs-comments
andreaskaris Mar 17, 2026
62739dd
Merge pull request #416 from andreaskaris/helm-docs-update
oribon Mar 18, 2026
adfb5c3
go: bump to 1.25
oribon Mar 9, 2026
f7fdd2f
Replace kube-rbac-proxy with native TLS and RBAC
oribon Mar 9, 2026
a670e00
Merge pull request #409 from oribon/httpsify
oribon Mar 24, 2026
491f7a9
Merge remote-tracking branch 'upstream/main' into sync-25-3-2025
oribon Mar 25, 2026
78ad307
OpenShift only: align vendor
oribon Mar 25, 2026
9cccee9
OpenShift only: align .ci-operator.yaml
oribon Mar 25, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
2 changes: 1 addition & 1 deletion .ci-operator.yaml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
build_root_image:
name: release
namespace: openshift
tag: rhel-9-release-golang-1.24-openshift-4.21
tag: rhel-9-release-golang-1.25-openshift-4.22
15 changes: 9 additions & 6 deletions .github/workflows/ci.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ jobs:
- name: Checkout Source
uses: actions/checkout@v4
- name: Run Gosec Security Scanner
uses: securego/gosec@v2.22.3
uses: securego/gosec@v2.24.7
with:
args: -exclude-dir e2etest -severity medium ./...

Expand All @@ -44,7 +44,7 @@ jobs:
uses: actions/checkout@v4
with:
fetch-depth: 0
- uses: actions/setup-go@v5
- uses: actions/setup-go@v6
with:
go-version-file: "go.mod"
cache: true
Expand All @@ -64,6 +64,9 @@ jobs:
- name: Helm doc generate
uses: docker://jnorwood/helm-docs:v1.10.0

- name: Check helm docs comments
run: make verify-helm-docs-comments

- name: Check if docs are different
run: make checkuncommitted

Expand All @@ -80,7 +83,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-go@v5
- uses: actions/setup-go@v6
with:
go-version-file: "go.mod"
cache: true
Expand All @@ -95,7 +98,7 @@ jobs:
- name: Checkout
uses: actions/checkout@v4

- uses: actions/setup-go@v5
- uses: actions/setup-go@v6
with:
go-version-file: "go.mod"
cache: true
Expand Down Expand Up @@ -149,7 +152,7 @@ jobs:
- name: Checkout
uses: actions/checkout@v4

- uses: actions/setup-go@v5
- uses: actions/setup-go@v6
with:
go-version-file: "go.mod"
cache: true
Expand Down Expand Up @@ -206,7 +209,7 @@ jobs:
- name: Checkout
uses: actions/checkout@v4

- uses: actions/setup-go@v5
- uses: actions/setup-go@v6
with:
go-version-file: "go.mod"
cache: true
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/publish.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ jobs:
- name: Checkout
uses: actions/checkout@v4

- uses: actions/setup-go@v5
- uses: actions/setup-go@v6
with:
go-version-file: "go.mod"
cache: true
Expand Down
146 changes: 95 additions & 51 deletions API-DOCS.md

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# syntax=docker/dockerfile:1.2

FROM --platform=$BUILDPLATFORM docker.io/golang:1.24.2 AS builder
FROM --platform=$BUILDPLATFORM docker.io/golang:1.25.8 AS builder
ARG GIT_COMMIT=dev
ARG GIT_BRANCH=dev
WORKDIR $GOPATH/frr-k8s
Expand Down
19 changes: 15 additions & 4 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,10 @@ test: manifests generate fmt vet envtest ## Run tests.

.PHONY: build
build: manifests generate fmt vet ## Build k8s-frr binary.
go build -o bin/frr-k8s cmd/main.go
go build -v -o bin/frr-k8s ./cmd/frr-k8s-controller
go build -v -o bin/frr-metrics ./cmd/metrics
go build -v -o bin/frr-status ./cmd/status
go build -v -o bin/statuscleaner ./cmd/statuscleaner

.PHONY: run
run: manifests generate fmt vet ## Run a controller from your host.
Expand Down Expand Up @@ -123,15 +126,15 @@ export KUBECONFIG=$(KUBECONFIG_PATH)

## Tool Versions
KUSTOMIZE_VERSION ?= v5.0.0
CONTROLLER_TOOLS_VERSION ?= v0.14.0
CONTROLLER_TOOLS_VERSION ?= v0.17.3
KUBECTL_VERSION ?= v1.27.0
GINKGO_VERSION ?= v2.19.0
GOLANGCI_LINT_VERSION ?= v2.2.2
KIND_VERSION ?= v0.27.0
KIND_CLUSTER_NAME ?= frr-k8s
HELM_VERSION ?= v3.12.3
HELM_DOCS_VERSION ?= v1.10.0
APIDOCSGEN_VERSION ?= v0.0.12
APIDOCSGEN_VERSION ?= v0.3.0

.PHONY: install
install: kubectl manifests kustomize ## Install CRDs into the K8s cluster specified in $KUBECONFIG_PATH.
Expand Down Expand Up @@ -287,9 +290,17 @@ generate-all-in-one: manifests kustomize ## Create manifests
$(KUSTOMIZE) build config/prometheus > config/all-in-one/frr-k8s-prometheus.yaml

.PHONY: helm-docs
helm-docs:
helm-docs: ## Generate helm documentation
docker run --rm -v $$(pwd):/app -w /app jnorwood/helm-docs:$(HELM_DOCS_VERSION) helm-docs

.PHONY: verify-helm-docs-comments
verify-helm-docs-comments: ## Check that all documented helm values have comments
@if grep -n -E '\|\s*\|\s*$$' charts/frr-k8s/README.md; then \
echo "Error: Found helm values with empty descriptions in README.md"; \
echo "Please add documentation comments for all helm values int charts/frr-k8s/values.yaml"; \
exit 1; \
fi

.PHONY: api-docs
api-docs: crd-ref-docs
$(APIDOCSGEN) --config hack/crd-ref-docs.yaml --max-depth 10 --source-path "./api" --renderer=markdown --output-path ./API-DOCS.md
Expand Down
7 changes: 4 additions & 3 deletions api/v1beta1/frrconfiguration_types.go
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ type RawConfig struct {
type BGPConfig struct {
// Routers is the list of routers we want FRR to configure (one per VRF).
// +optional
Routers []Router `json:"routers"`
Routers []Router `json:"routers,omitempty"`
// BFDProfiles is the list of bfd profiles to be used when configuring the neighbors.
// +optional
BFDProfiles []BFDProfile `json:"bfdProfiles,omitempty"`
Expand Down Expand Up @@ -195,9 +195,10 @@ type Neighbor struct {
// +optional
ToReceive Receive `json:"toReceive,omitempty"`

// To set if we want to disable MP BGP that will separate IPv4 and IPv6 route exchanges into distinct BGP sessions.
// DisableMP is no longer used and has no effect.
// Use DualStackAddressFamily instead to enable the neighbor for both IPv4 and IPv6 address families.
//
// Deprecated: DisableMP is deprecated in favor of dualStackAddressFamily.
// Deprecated: This field is ignored. Use DualStackAddressFamily instead.
// +optional
// +kubebuilder:default:=false
DisableMP bool `json:"disableMP,omitempty"`
Expand Down
62 changes: 62 additions & 0 deletions api/v1beta1/frrk8sconfiguration.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
/*
Copyright 2023.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package v1beta1

import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)

// FRRK8sConfigurationSpec defines the desired state of FRRK8sConfiguration.
type FRRK8sConfigurationSpec struct {
// LogLevel sets the logging verbosity for the FRR-K8s components at runtime.
// When configured, this value overrides the defaults established by the --log-level CLI flag.
// Valid values are: all, debug, info, warn, error, none.
// +kubebuilder:validation:Enum=all;debug;info;warn;error;none
// +optional
LogLevel string `json:"logLevel,omitempty"`
}

// FRRK8sConfigurationStatus defines the observed state of FRRK8sConfiguration.
type FRRK8sConfigurationStatus struct {
// INSERT ADDITIONAL STATUS FIELD - define observed state of cluster
// Important: Run "make" to regenerate code after modifying this file
}

//+kubebuilder:object:root=true
//+kubebuilder:subresource:status
//nolint
//+genclient

// FRRK8sConfiguration holds the FRR Operator configuration with global
// settings for the K8s and FRR.
type FRRK8sConfiguration struct {
metav1.TypeMeta `json:",inline"`
metav1.ObjectMeta `json:"metadata,omitempty"`

Spec FRRK8sConfigurationSpec `json:"spec,omitempty"`
Status FRRK8sConfigurationStatus `json:"status,omitempty"`
}

//+kubebuilder:object:root=true

// FRRK8sConfigurationList contains a list of FRRK8sConfiguration.
type FRRK8sConfigurationList struct {
metav1.TypeMeta `json:",inline"`
metav1.ListMeta `json:"metadata,omitempty"`
Items []FRRK8sConfiguration `json:"items"`
}

func init() {
SchemeBuilder.Register(&FRRK8sConfiguration{}, &FRRK8sConfigurationList{})
}
89 changes: 89 additions & 0 deletions api/v1beta1/zz_generated.deepcopy.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading