Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
55 commits
Select commit Hold shift + click to select a range
081184c
Remove filter packed virtqueue (#565)
PhilippMatthes Mar 10, 2026
03031a8
Bump cortex chart appVersions to sha-081184cd [skip ci]
github-actions[bot] Mar 10, 2026
3ee76b6
Add basic committed resource functionality with reservations (#566)
mblos Mar 12, 2026
c509b50
Bump cortex chart appVersions to sha-3ee76b67 [skip ci]
github-actions[bot] Mar 12, 2026
8f6dfef
Remove duplicate namePrefix from cortex values (#571) [skpi ci]
SoWieMarkus Mar 13, 2026
546bf5e
Bump cortex chart appVersions to sha-8f6dfef5 [skip ci]
github-actions[bot] Mar 13, 2026
02cfa32
Remove visualizer components and related files (#570)
SoWieMarkus Mar 13, 2026
52e8d85
Bump cortex chart appVersions to sha-02cfa32d [skip ci]
github-actions[bot] Mar 13, 2026
3e9c27e
Renovate: Update github.com/cobaltcore-dev/openstack-hypervisor-opera…
renovate[bot] Mar 14, 2026
339dc95
Bump cortex chart appVersions to sha-3e9c27ef [skip ci]
github-actions[bot] Mar 14, 2026
7d1b869
Renovate: Update docker/setup-qemu-action action to v4 (#580)
renovate[bot] Mar 14, 2026
8c1f61d
Bump cortex chart appVersions to sha-7d1b8692 [skip ci]
github-actions[bot] Mar 14, 2026
8278d9a
Renovate: Update docker/setup-buildx-action action to v4 (#579)
renovate[bot] Mar 14, 2026
b33635e
Bump cortex chart appVersions to sha-8278d9a7 [skip ci]
github-actions[bot] Mar 14, 2026
7151a84
Renovate: Update docker/login-action action to v4 (#577)
renovate[bot] Mar 14, 2026
50bf73f
Bump cortex chart appVersions to sha-7151a847 [skip ci]
github-actions[bot] Mar 14, 2026
9de0594
Renovate: Update docker/build-push-action action to v7 (#576)
renovate[bot] Mar 14, 2026
b209b55
Bump cortex chart appVersions to sha-9de0594b [skip ci]
github-actions[bot] Mar 14, 2026
70974a4
Renovate: Update External dependencies (#575)
renovate[bot] Mar 14, 2026
94c919c
Bump cortex chart appVersions to sha-70974a43 [skip ci]
github-actions[bot] Mar 14, 2026
7086080
Renovate: Update github.com/sapcc/go-bits digest to 034b497 (#574)
renovate[bot] Mar 14, 2026
a95bd2f
Bump cortex chart appVersions to sha-7086080f [skip ci]
github-actions[bot] Mar 14, 2026
26ef0b1
Renovate: Update docker/metadata-action action to v6 (#578)
renovate[bot] Mar 14, 2026
4e9d48f
Bump cortex chart appVersions to sha-26ef0b1d [skip ci]
github-actions[bot] Mar 14, 2026
781dec1
Configure code rabbit (#582)
SoWieMarkus Mar 16, 2026
eceedce
Bump cortex chart appVersions to sha-781dec12 [skip ci]
github-actions[bot] Mar 16, 2026
1aec52b
Upgrade to latest hypervisor crd (#581)
PhilippMatthes Mar 16, 2026
ed610ea
Bump cortex chart appVersions to sha-1aec52b7 [skip ci]
github-actions[bot] Mar 16, 2026
60fef16
Add AGENTS.md (#561)
PhilippMatthes Mar 16, 2026
cc15c60
Support server groups in workload spawner (#560)
PhilippMatthes Mar 16, 2026
bcb664f
Bump cortex chart appVersions to sha-cc15c604 [skip ci]
github-actions[bot] Mar 16, 2026
6db36b8
fix: Bump and fix postgresql base image (#586)
umswmayj Mar 17, 2026
f98b132
Bump cortex-postgres chart appVersions to sha-6db36b81 [skip ci]
github-actions[bot] Mar 17, 2026
9b9b835
Bump cortex chart appVersions to sha-6db36b81 [skip ci]
github-actions[bot] Mar 17, 2026
6f843fe
fix: Bump postgres chart (#588)
umswmayj Mar 17, 2026
354b3d8
Restore descheduler alerting (#587)
PhilippMatthes Mar 17, 2026
19ec6e6
Bump cortex chart appVersions to sha-354b3d8b [skip ci]
github-actions[bot] Mar 17, 2026
47117be
fix: Bump cortex-x (new postgres version) (#591)
umswmayj Mar 17, 2026
6b9fa29
Bump cortex chart appVersions to sha-47117be2 [skip ci]
github-actions[bot] Mar 17, 2026
c02bd8a
fix: Bump cortex
umswmayj Mar 17, 2026
63434bc
Bump cortex chart appVersions to sha-c02bd8af [skip ci]
github-actions[bot] Mar 17, 2026
13aca98
Bump CortexNovaSchedulingDown alert to critical (#589)
PhilippMatthes Mar 17, 2026
ca7b0ea
Use hv1 effective capacity for weighing + filtering (#583)
PhilippMatthes Mar 17, 2026
c71d9d4
Provide hypervisor overcommit controller (#584)
PhilippMatthes Mar 17, 2026
3c025df
Refactor kvm resource capacity kpi to use effective capacity (#585)
SoWieMarkus Mar 17, 2026
5bd6777
Bump cortex chart appVersions to sha-3c025dfa [skip ci]
github-actions[bot] Mar 17, 2026
cd9a8be
Fix hypervisor crd url
PhilippMatthes Mar 17, 2026
9b5fa57
Fix incorrect scoping in hypervisor overcommit controller
PhilippMatthes Mar 17, 2026
03638cf
Bump cortex chart appVersions to sha-9b5fa574 [skip ci]
github-actions[bot] Mar 17, 2026
1669faa
fix: commitment change API integration test (#592)
mblos Mar 18, 2026
c2bc683
Bump cortex chart appVersions to sha-1669faac [skip ci]
github-actions[bot] Mar 18, 2026
9daeb24
Add filter_correct_az to "hot" pipelines
PhilippMatthes Mar 18, 2026
b3401a2
Bump cortex chart appVersions to sha-9daeb244 [skip ci]
github-actions[bot] Mar 18, 2026
1401e19
feat: Add fallback to capacity filter and external customer filter (#…
umswmayj Mar 18, 2026
a43b058
Bump cortex chart appVersions to sha-1401e19e [skip ci]
github-actions[bot] Mar 18, 2026
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
2 changes: 2 additions & 0 deletions .coderabbit.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
reviews:
high_level_summary: false
2 changes: 1 addition & 1 deletion .github/workflows/push-charts.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ jobs:
- name: Set up Helm
uses: azure/setup-helm@v4.3.1
- name: Log into registry
uses: docker/login-action@v3
uses: docker/login-action@v4
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
Expand Down
14 changes: 7 additions & 7 deletions .github/workflows/push-images.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -21,11 +21,11 @@ jobs:
steps:
- uses: actions/checkout@v6
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
uses: docker/setup-qemu-action@v4
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
uses: docker/setup-buildx-action@v4
- name: Login to Docker Registry
uses: docker/login-action@v3
uses: docker/login-action@v4
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
Expand All @@ -41,7 +41,7 @@ jobs:
- name: Docker Meta (Cortex Postgres)
if: steps.changed_postgres_files.outputs.all_changed_files != ''
id: meta_cortex_postgres
uses: docker/metadata-action@v5
uses: docker/metadata-action@v6
with:
images: ${{ env.REGISTRY }}/${{ github.repository }}-postgres
tags: |
Expand All @@ -54,7 +54,7 @@ jobs:
- name: Build and Push Cortex Postgres
if: steps.changed_postgres_files.outputs.all_changed_files != ''
id: push_cortex_postgres
uses: docker/build-push-action@v6
uses: docker/build-push-action@v7
with:
context: postgres
platforms: linux/amd64,linux/arm64
Expand All @@ -75,7 +75,7 @@ jobs:
# Build & push new cortex image
- name: Docker Meta (Cortex)
id: meta_cortex
uses: docker/metadata-action@v5
uses: docker/metadata-action@v6
with:
images: ${{ env.REGISTRY }}/${{ github.repository }}
tags: |
Expand All @@ -87,7 +87,7 @@ jobs:
DOCKER_METADATA_SHORT_SHA_LENGTH: 8
- name: Build and Push Cortex
id: push_cortex
uses: docker/build-push-action@v6
uses: docker/build-push-action@v7
with:
context: .
file: Dockerfile
Expand Down
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -34,4 +34,5 @@ cortex.secrets.yaml
!.github
!.golangci.yaml
!.license-scan-overrides.jsonl
!.license-scan-rules.json
!.license-scan-rules.json
!.coderabbit.yaml
79 changes: 79 additions & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
<!--
# SPDX-FileCopyrightText: Copyright SAP SE or an SAP affiliate company and cobaltcore-dev contributors
#
# SPDX-License-Identifier: Apache-2.0
-->

# Instructions for Agents

## Context

You are developing code in the open-source project github.com/cobaltcore-dev/cortex.

Cortex is a modular and extensible service for initial placement and scheduling in cloud-native environments covering workloads such as compute, storage, network, and other scheduling domains.

It improves resource utilization and operational performance by making smart placement decisions based on the current state of the environment and defined constraints and objectives.

Cortex is written in Golang and is designed for production-scale deployments using algorithmic approaches to balance decision quality, execution efficiency, and maintaining a low resource footprint.

## Best Practices

All code files must contain this license header:
```go
// Copyright SAP SE
// SPDX-License-Identifier: Apache-2.0
```

General:
- Keep it concise and always focus on good code quality. We go to production
- We are on modern Golang, so you no longer need `interface{}` and use `any` instead
- Similarly, you no longer have to capture loop variables in closures, as this is now the default behavior in Go
- Don’t document trivial steps you do and avoid unnecessary empty lines between code segments
- When adding imports, keep in mind that the autoformatter will remove them if you don't use them
- `fmt.Errorf` should not be used when there are no parameters. Use `errors.New`
- Errors should always be lowercase like `errors.New("this is an error")` to conform to linting rules
- You can use `maps.Copy` instead of iteratively copying a map
- You can use `strings.Contains` to check if some string is in another
- You can use `slices.Contains` to check if an element is part of a slice
- And definitely use `testlib.Ptr` for test cases that require pointer values

Testing:
- Ideally test files should be short and contain only the necessary cases
- Avoid creating testing libraries, keep helper functions in the same file as the tests that use them
- Use golang native testing whenever possible, avoid using Ginkgo or testify
- Don't test for the existence of interface methods
- If applicable, use struct based test cases, but limit yourself to the most relevant cases

Helm charts:
- Note the `# from: file://../../library/cortex-postgres` comment in `Chart.yaml` files, this is required and should point to the local chart path

## Repository Structure

Code:
- `cmd/main.go` is the entry point for the manager, which starts the controllers and webhooks
- `api/v1alpha1` is where the CRD specs of cortex lives
- `api/external` contains messages sent to cortex via http from external openstack services
- `internal/scheduling` contains the logic for scheduling in different cloud domains
- `internal/knowledge` has all the logic for feature extraction and raw data downloads from sources like prometheus and openstack
- `pkg` is the code that is very non-cortex-specific and can be used across other projects as well

Deployment:
- `helm/library` contains a generic cortex setup, i.e. the manager and its dependencies
- `helm/dev` contains charts that can deploy cortex dependencies that a typical production cluster already has, such as a fine-tuned kube-prometheus-stack for monitoring
- `helm/bundles` here are the charts that stylize the library chart into a deployment for a specific domain, for example a bundle for deploying cortex with openstack nova
- In the `helm` folders there are also helpers for syncing helm dependencies which are used by the tiltfile for local development and our ci pipelines to replace oci dependencies with local paths

Tooling:
- `tools` contains miscallaneous tools for development, which should typically **not** be used by agents

Documentation:
- `docs` contains documentation for cortex, which should be written in markdown

## Tooling

Before finishing your task, you should always ensure local tests and lints are passing:
- `make` regenerates CRDs and deepcopy methods, runs tests, and performs lints
- Avoid running `make` when you don't want to apply your crd changes just yet
- `make lint` runs golangci-lint, `make lint-fix` runs golangci-lint with `--fix`
- `make test` runs all the unit tests with `go test ./...`
- If you are struggling with the Makefile, you can use `make help` to get a list of all available commands and their descriptions
2 changes: 1 addition & 1 deletion CODEOWNERS
Original file line number Diff line number Diff line change
@@ -1 +1 @@
* arno.uhlig@sap.com julius.clausnitzer@sap.com malte.viering@sap.com marcel.bloecher@sap.com markus.wieland@sap.com p.matthes@sap.com
* arno.uhlig@sap.com julius.clausnitzer@sap.com malte.viering@sap.com marcel.gute@sap.com markus.wieland@sap.com p.matthes@sap.com
18 changes: 18 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,17 @@ lint-fix: golangci-lint ## Run golangci-lint linter and perform fixes
test: ## Run all tests.
go test ./...

.PHONY: testsum
testsum: gotestsum ## Run all tests (clean output for passing, verbose for failing). Options: WATCH=1, RUN=<pattern>, PACKAGE=<pkg>, FORMAT=<fmt> (e.g., standard-verbose for all output)
$(GOTESTSUM) \
$(if $(WATCH),--watch) \
--format $(if $(FORMAT),$(FORMAT),testname) \
--hide-summary=all \
-- \
$(if $(VERBOSE),-v) \
$(if $(RUN),-run $(RUN)) \
$(if $(PACKAGE),$(PACKAGE),./...)

.PHONY: generate
generate: deepcopy crds ## Regenerate CRDs and DeepCopy after API type changes.

Expand All @@ -45,9 +56,11 @@ $(LOCALBIN):

CONTROLLER_GEN ?= $(LOCALBIN)/controller-gen
GOLANGCI_LINT = $(LOCALBIN)/golangci-lint
GOTESTSUM = $(LOCALBIN)/gotestsum

CONTROLLER_TOOLS_VERSION ?= v0.20.0
GOLANGCI_LINT_VERSION ?= v2.9.0
GOTESTSUM_VERSION ?= v1.13.0

.PHONY: controller-gen
controller-gen: $(CONTROLLER_GEN) ## Download controller-gen locally if necessary.
Expand All @@ -59,6 +72,11 @@ golangci-lint: $(GOLANGCI_LINT) ## Download golangci-lint locally if necessary.
$(GOLANGCI_LINT): $(LOCALBIN)
$(call go-install-tool,$(GOLANGCI_LINT),github.com/golangci/golangci-lint/v2/cmd/golangci-lint,$(GOLANGCI_LINT_VERSION))

.PHONY: gotestsum
gotestsum: $(GOTESTSUM) ## Download gotestsum locally if necessary.
$(GOTESTSUM): $(LOCALBIN)
$(call go-install-tool,$(GOTESTSUM),gotest.tools/gotestsum,$(GOTESTSUM_VERSION))

# go-install-tool will 'go install' any package with custom target and name of binary, if it doesn't exist
# $1 - target path with name of binary
# $2 - package url which can be installed
Expand Down
10 changes: 1 addition & 9 deletions Tiltfile
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ local('kubectl wait --namespace cert-manager --for=condition=available deploymen

########### Dependency CRDs
# Make sure the local cluster is running if you are running into startup issues here.
url = 'https://raw.githubusercontent.com/cobaltcore-dev/openstack-hypervisor-operator/refs/heads/main/charts/openstack-hypervisor-operator/crds/hypervisor-crd.yaml'
url = 'https://raw.githubusercontent.com/cobaltcore-dev/openstack-hypervisor-operator/refs/heads/main/charts/openstack-hypervisor-operator/crds/kvm.cloud.sap_hypervisors.yaml'
local('curl -L ' + url + ' | kubectl apply -f -')

########### Cortex Operator & CRDs
Expand Down Expand Up @@ -268,14 +268,6 @@ k8s_resource(
labels=['Monitoring'],
)

k8s_yaml('./tools/visualizer/role.yaml')
docker_build('cortex-visualizer', './tools/visualizer')
k8s_yaml('./tools/visualizer/app.yaml')
k8s_resource('cortex-visualizer', port_forwards=[
port_forward(4000, 80),
], links=[
link('localhost:4000', 'nova visualizer'),
], labels=['Monitoring'])
docker_build('cortex-plutono', './tools/plutono')
k8s_yaml('./tools/plutono/app.yaml')
k8s_resource('cortex-plutono', port_forwards=[
Expand Down
6 changes: 6 additions & 0 deletions api/v1alpha1/knowledge_types.go
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,11 @@ type KnowledgeStatus struct {
// +kubebuilder:validation:Optional
LastExtracted metav1.Time `json:"lastExtracted"`

// When the extracted knowledge content last changed.
// Updated only when the Raw data actually changes, not on every reconcile.
// +kubebuilder:validation:Optional
LastContentChange metav1.Time `json:"lastContentChange,omitempty"`

// The raw data behind the extracted knowledge, e.g. a list of features.
// +kubebuilder:validation:Optional
Raw runtime.RawExtension `json:"raw"`
Expand All @@ -111,6 +116,7 @@ type KnowledgeStatus struct {
// +kubebuilder:printcolumn:name="Domain",type="string",JSONPath=".spec.schedulingDomain"
// +kubebuilder:printcolumn:name="Created",type="date",JSONPath=".metadata.creationTimestamp"
// +kubebuilder:printcolumn:name="Extracted",type="date",JSONPath=".status.lastExtracted"
// +kubebuilder:printcolumn:name="Changed",type="date",JSONPath=".status.lastContentChange"
// +kubebuilder:printcolumn:name="Recency",type="string",JSONPath=".spec.recency"
// +kubebuilder:printcolumn:name="Features",type="integer",JSONPath=".status.rawLength"
// +kubebuilder:printcolumn:name="Ready",type="string",JSONPath=".status.conditions[?(@.type=='Ready')].status"
Expand Down
29 changes: 26 additions & 3 deletions api/v1alpha1/reservation_types.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
package v1alpha1

import (
hv1 "github.com/cobaltcore-dev/openstack-hypervisor-operator/api/v1"
"k8s.io/apimachinery/pkg/api/resource"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)
Expand All @@ -21,6 +22,20 @@ const (
ReservationTypeFailover ReservationType = "FailoverReservation"
)

// Label keys for Reservation metadata.
// Labels follow Kubernetes naming conventions using reverse-DNS notation
const (
// ===== Common Reservation Labels =====

// LabelReservationType identifies the type of reservation.
// This label is present on all reservations to enable type-based filtering.
LabelReservationType = "reservations.cortex.sap.com/type"

// Reservation type label values
ReservationTypeLabelCommittedResource = "committed-resource"
ReservationTypeLabelFailover = "failover"
)

// CommittedResourceAllocation represents a workload's assignment to a committed resource reservation slot.
// The workload could be a VM (Nova/IronCore), Pod (Kubernetes), or other resource.
type CommittedResourceAllocation struct {
Expand All @@ -30,7 +45,7 @@ type CommittedResourceAllocation struct {

// Resources consumed by this instance.
// +kubebuilder:validation:Required
Resources map[string]resource.Quantity `json:"resources"`
Resources map[hv1.ResourceName]resource.Quantity `json:"resources"`
}

// CommittedResourceReservationSpec defines the spec fields specific to committed resource reservations.
Expand All @@ -39,6 +54,10 @@ type CommittedResourceReservationSpec struct {
// +kubebuilder:validation:Optional
ResourceName string `json:"resourceName,omitempty"`

// CommitmentUUID is the UUID of the commitment that this reservation corresponds to.
// +kubebuilder:validation:Optional
CommitmentUUID string `json:"commitmentUUID,omitempty"`

// ResourceGroup is the group/category of the resource (e.g., flavor group for Nova)
// +kubebuilder:validation:Optional
ResourceGroup string `json:"resourceGroup,omitempty"`
Expand Down Expand Up @@ -79,9 +98,13 @@ type ReservationSpec struct {
// +kubebuilder:validation:Optional
SchedulingDomain string `json:"schedulingDomain,omitempty"`

// AvailabilityZone specifies the availability zone for this reservation, if restricted to a specific AZ.
// +kubebuilder:validation:Optional
AvailabilityZone string `json:"availabilityZone,omitempty"`

// Resources to reserve for this instance.
// +kubebuilder:validation:Optional
Resources map[string]resource.Quantity `json:"resources,omitempty"`
Resources map[hv1.ResourceName]resource.Quantity `json:"resources,omitempty"`

// StartTime is the time when the reservation becomes active.
// +kubebuilder:validation:Optional
Expand Down Expand Up @@ -166,7 +189,7 @@ type ReservationStatus struct {
// +kubebuilder:object:root=true
// +kubebuilder:subresource:status
// +kubebuilder:resource:scope=Cluster
// +kubebuilder:printcolumn:name="Type",type="string",JSONPath=".spec.type"
// +kubebuilder:printcolumn:name="Type",type="string",JSONPath=".metadata.labels['reservations\\.cortex\\.sap\\.com/type']"
// +kubebuilder:printcolumn:name="Host",type="string",JSONPath=".status.host"
// +kubebuilder:printcolumn:name="Ready",type="string",JSONPath=".status.conditions[?(@.type=='Ready')].status"

Expand Down
6 changes: 4 additions & 2 deletions api/v1alpha1/zz_generated.deepcopy.go

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

21 changes: 17 additions & 4 deletions cmd/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -309,6 +309,10 @@ func main() {
httpAPIConf := conf.GetConfigOrDie[nova.HTTPAPIConfig]()
nova.NewAPI(httpAPIConf, filterWeigherController).Init(mux)

// Initialize commitments API for LIQUID interface
commitmentsAPI := commitments.NewAPI(multiclusterClient)
commitmentsAPI.Init(mux)

// Detector pipeline controller setup.
novaClient := nova.NewNovaClient()
novaClientConfig := conf.GetConfigOrDie[nova.NovaClientConfig]()
Expand Down Expand Up @@ -365,6 +369,15 @@ func main() {
os.Exit(1)
}
}
if slices.Contains(mainConfig.EnabledControllers, "hypervisor-overcommit-controller") {
hypervisorOvercommitController := &nova.HypervisorOvercommitController{}
hypervisorOvercommitController.Client = multiclusterClient
if err := hypervisorOvercommitController.SetupWithManager(mgr); err != nil {
setupLog.Error(err, "unable to create controller",
"controller", "HypervisorOvercommitController")
os.Exit(1)
}
}
if slices.Contains(mainConfig.EnabledControllers, "manila-decisions-pipeline-controller") {
controller := &manila.FilterWeigherPipelineController{
Monitor: filterWeigherPipelineMonitor,
Expand Down Expand Up @@ -456,11 +469,11 @@ func main() {
monitor := reservationscontroller.NewControllerMonitor(multiclusterClient)
metrics.Registry.MustRegister(&monitor)
reservationsControllerConfig := conf.GetConfigOrDie[reservationscontroller.Config]()

if err := (&reservationscontroller.ReservationReconciler{
Client: multiclusterClient,
Scheme: mgr.GetScheme(),
Conf: reservationsControllerConfig,
HypervisorClient: reservationscontroller.NewHypervisorClient(),
Client: multiclusterClient,
Scheme: mgr.GetScheme(),
Conf: reservationsControllerConfig,
}).SetupWithManager(mgr, multiclusterClient); err != nil {
setupLog.Error(err, "unable to create controller", "controller", "Reservation")
os.Exit(1)
Expand Down
Loading