From a99416ce927dd931b0e45e05a80ffc00417429cd Mon Sep 17 00:00:00 2001
From: Philipp Matthes
Date: Thu, 26 Feb 2026 16:42:54 +0100
Subject: [PATCH 01/18] Fix dashboard selector and integration test pipeline
name [skip ci]
---
internal/scheduling/nova/integration_test.go | 16 ++++++++--------
.../provisioning/dashboards/cortex-status.json | 4 ++--
2 files changed, 10 insertions(+), 10 deletions(-)
diff --git a/internal/scheduling/nova/integration_test.go b/internal/scheduling/nova/integration_test.go
index 33b2fc5f..137ac5a1 100644
--- a/internal/scheduling/nova/integration_test.go
+++ b/internal/scheduling/nova/integration_test.go
@@ -222,7 +222,7 @@ type PipelineConfig struct {
// filter_has_enough_capacity and kvm_failover_evacuation
func DefaultPipelineConfig() PipelineConfig {
return PipelineConfig{
- Name: "nova-external-scheduler-kvm-all-filters-enabled",
+ Name: "kvm-general-purpose-load-balancing-all-filters-enabled",
Filters: []v1alpha1.FilterSpec{
{Name: "filter_has_enough_capacity"},
},
@@ -371,7 +371,7 @@ func TestIntegration_SchedulingWithReservations(t *testing.T) {
reservations: []*v1alpha1.Reservation{
newFailoverReservation("failover-vm-existing", "host3", "m1.large", "4", "8Gi", map[string]string{"vm-existing": "host1"}),
},
- request: newNovaRequest("new-vm-uuid", "project-B", "m1.medium", "gp-1", 2, "4Gi", false, []string{"host1", "host2", "host3"}, "nova-external-scheduler-kvm-all-filters-enabled"),
+ request: newNovaRequest("new-vm-uuid", "project-B", "m1.medium", "gp-1", 2, "4Gi", false, []string{"host1", "host2", "host3"}, "kvm-general-purpose-load-balancing-all-filters-enabled"),
filteredHosts: []string{"host3"},
minExpectedHostsCount: 2,
},
@@ -384,7 +384,7 @@ func TestIntegration_SchedulingWithReservations(t *testing.T) {
reservations: []*v1alpha1.Reservation{
newFailoverReservation("failover-vm-123", "host3", "m1.large", "4", "8Gi", map[string]string{"vm-123": "host1"}),
},
- request: newNovaRequest("vm-123", "project-A", "m1.large", "gp-1", 4, "8Gi", true, []string{"host2", "host3"}, "nova-external-scheduler-kvm-all-filters-enabled"),
+ request: newNovaRequest("vm-123", "project-A", "m1.large", "gp-1", 4, "8Gi", true, []string{"host2", "host3"}, "kvm-general-purpose-load-balancing-all-filters-enabled"),
expectedHosts: []string{"host3", "host2"}, // Failover host should be first
expectedHostsOrdered: true,
minExpectedHostsCount: 2,
@@ -400,7 +400,7 @@ func TestIntegration_SchedulingWithReservations(t *testing.T) {
newFailoverReservation("failover-vm-456-on-host1", "host1", "m1.large", "4", "8Gi", map[string]string{"vm-456": "host-original"}),
newFailoverReservation("failover-vm-456-on-host3", "host3", "m1.large", "4", "8Gi", map[string]string{"vm-456": "host-original"}),
},
- request: newNovaRequest("vm-456", "project-A", "m1.large", "gp-1", 4, "8Gi", true, []string{"host1", "host2", "host3"}, "nova-external-scheduler-kvm-all-filters-enabled"),
+ request: newNovaRequest("vm-456", "project-A", "m1.large", "gp-1", 4, "8Gi", true, []string{"host1", "host2", "host3"}, "kvm-general-purpose-load-balancing-all-filters-enabled"),
expectedHosts: []string{"host1", "host2", "host3"},
minExpectedHostsCount: 3,
// Both host1 and host3 have failover reservations, so they should be preferred over host2
@@ -416,7 +416,7 @@ func TestIntegration_SchedulingWithReservations(t *testing.T) {
newFailoverReservation("failover-vm-456-on-host1", "host1", "m1.large", "4", "8Gi", map[string]string{"some-other-vm": "host-original"}),
newFailoverReservation("failover-vm-456-on-host3", "host3", "m1.large", "4", "8Gi", map[string]string{"vm-456": "host-original"}),
},
- request: newNovaRequest("vm-456", "project-A", "m1.large", "gp-1", 4, "8Gi", true, []string{"host1", "host2", "host3"}, "nova-external-scheduler-kvm-all-filters-enabled"),
+ request: newNovaRequest("vm-456", "project-A", "m1.large", "gp-1", 4, "8Gi", true, []string{"host1", "host2", "host3"}, "kvm-general-purpose-load-balancing-all-filters-enabled"),
expectedHosts: []string{"host3", "host2"},
expectedHostsOrdered: true,
minExpectedHostsCount: 2,
@@ -431,7 +431,7 @@ func TestIntegration_SchedulingWithReservations(t *testing.T) {
reservations: []*v1alpha1.Reservation{
newCommittedReservation("committed-res-host1", "host1", "host1", "project-A", "m1.large", "gp-1", "4", "8Gi"),
},
- request: newNovaRequest("new-vm should work", "project-A", "m1.large", "gp-1", 4, "8Gi", false, []string{"host1", "host2"}, "nova-external-scheduler-kvm-all-filters-enabled"),
+ request: newNovaRequest("new-vm should work", "project-A", "m1.large", "gp-1", 4, "8Gi", false, []string{"host1", "host2"}, "kvm-general-purpose-load-balancing-all-filters-enabled"),
expectedHosts: []string{"host1", "host2"}, // host1 unlocked because project/flavor match
minExpectedHostsCount: 2,
},
@@ -444,7 +444,7 @@ func TestIntegration_SchedulingWithReservations(t *testing.T) {
reservations: []*v1alpha1.Reservation{
newCommittedReservation("committed-res-host1", "host1", "host1", "project-A", "m1.large", "gp-1", "4", "8Gi"),
},
- request: newNovaRequest("new-vm", "project-B", "m1.large", "gp-1", 4, "8Gi", false, []string{"host1", "host2"}, "nova-external-scheduler-kvm-all-filters-enabled"),
+ request: newNovaRequest("new-vm", "project-B", "m1.large", "gp-1", 4, "8Gi", false, []string{"host1", "host2"}, "kvm-general-purpose-load-balancing-all-filters-enabled"),
expectedHosts: []string{"host2"},
filteredHosts: []string{"host1"}, // host1 blocked because project doesn't match
minExpectedHostsCount: 1,
@@ -457,7 +457,7 @@ func TestIntegration_SchedulingWithReservations(t *testing.T) {
newHypervisor("host3", "16", "4", "32Gi", "8Gi"),
},
reservations: []*v1alpha1.Reservation{},
- request: newNovaRequest("new-vm", "project-A", "m1.large", "gp-1", 4, "8Gi", false, []string{"host1", "host2", "host3"}, "nova-external-scheduler-kvm-all-filters-enabled"),
+ request: newNovaRequest("new-vm", "project-A", "m1.large", "gp-1", 4, "8Gi", false, []string{"host1", "host2", "host3"}, "kvm-general-purpose-load-balancing-all-filters-enabled"),
filters: []v1alpha1.FilterSpec{{Name: "filter_has_enough_capacity"}},
weighers: []v1alpha1.WeigherSpec{}, // No weighers
filteredHosts: []string{"host2"},
diff --git a/tools/plutono/provisioning/dashboards/cortex-status.json b/tools/plutono/provisioning/dashboards/cortex-status.json
index 95dc7372..043d0798 100644
--- a/tools/plutono/provisioning/dashboards/cortex-status.json
+++ b/tools/plutono/provisioning/dashboards/cortex-status.json
@@ -499,7 +499,7 @@
],
"timeFrom": null,
"timeShift": null,
- "title": "Pipeline: nova-external-scheduler-*",
+ "title": "Pipeline: kvm-* (Nova)",
"type": "text"
},
{
@@ -571,7 +571,7 @@
"targets": [
{
"exemplar": false,
- "expr": "sum(delta(cortex_filter_weigher_pipeline_step_shift_origin_bucket{outidx=\"0\",pipeline=~\"nova-external-scheduler-.*\"}[2m]) / 2) by (le)",
+ "expr": "sum(delta(cortex_filter_weigher_pipeline_step_shift_origin_bucket{outidx=\"0\",pipeline=~\"kvm-.*\"}[2m]) / 2) by (le)",
"format": "heatmap",
"instant": false,
"interval": "",
From 8bf0d4bc4541be21a53714ad4d0d6ebaab7d15aa Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Fri, 27 Feb 2026 05:13:33 +0000
Subject: [PATCH 02/18] Renovate: Update github.com/sapcc/go-bits digest to
c20f89b (#556)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
This PR contains the following updates:
| Package | Type | Update | Change |
|---|---|---|---|
| [github.com/sapcc/go-bits](https://redirect.github.com/sapcc/go-bits)
| require | digest | `1c2b75d` → `c20f89b` |
---
### Configuration
📅 **Schedule**: Branch creation - "before 8am on Friday" (UTC),
Automerge - At any time (no schedule defined).
🚦 **Automerge**: Enabled.
♻ **Rebasing**: Whenever PR is behind base branch, or you tick the
rebase/retry checkbox.
🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.
---
- [ ] If you want to rebase/retry this PR, check
this box
---
This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/cobaltcore-dev/cortex).
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
---
go.mod | 2 +-
go.sum | 4 ++--
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/go.mod b/go.mod
index ff151926..07192af6 100644
--- a/go.mod
+++ b/go.mod
@@ -9,7 +9,7 @@ require (
github.com/ironcore-dev/ironcore v0.2.4
github.com/prometheus/client_golang v1.23.2
github.com/prometheus/client_model v0.6.2
- github.com/sapcc/go-bits v0.0.0-20260219121224-1c2b75dbf776
+ github.com/sapcc/go-bits v0.0.0-20260226170120-c20f89b66c3c
k8s.io/api v0.35.1
k8s.io/apimachinery v0.35.1
k8s.io/client-go v0.35.1
diff --git a/go.sum b/go.sum
index 4485160b..a8146be4 100644
--- a/go.sum
+++ b/go.sum
@@ -176,8 +176,8 @@ github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
github.com/sapcc/go-api-declarations v1.19.0 h1:AdCHBhoDGC1REMJF6Rc/XLIcf4qMqjUXs5WLq83HImM=
github.com/sapcc/go-api-declarations v1.19.0/go.mod h1:eiRrXXUeQS5C/1kKn8/KMjk0Y0goUzgDQswj30rH0Zc=
-github.com/sapcc/go-bits v0.0.0-20260219121224-1c2b75dbf776 h1:WFpq3qAk60WUoqCMYOkTRiFkpKyjQ/Wq6xUslz/3y7g=
-github.com/sapcc/go-bits v0.0.0-20260219121224-1c2b75dbf776/go.mod h1:AYC4f8FYO9DllSt4TyMwm1e5iPn32/DGIrlgXtuEsJ0=
+github.com/sapcc/go-bits v0.0.0-20260226170120-c20f89b66c3c h1:GX6ADtKR6Bs2bBRBqeJf376MsxLNppC1SOHLIBuQwIA=
+github.com/sapcc/go-bits v0.0.0-20260226170120-c20f89b66c3c/go.mod h1:AYC4f8FYO9DllSt4TyMwm1e5iPn32/DGIrlgXtuEsJ0=
github.com/sergi/go-diff v1.4.0 h1:n/SP9D5ad1fORl+llWyN+D6qoUETXNZARKjyY2/KVCw=
github.com/sergi/go-diff v1.4.0/go.mod h1:A0bzQcvG0E7Rwjx0REVgAGH58e96+X0MeOfepqsbeW4=
github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ=
From f668c534daec7c0a379d752c7edcf5151c05aed5 Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
Date: Fri, 27 Feb 2026 05:22:24 +0000
Subject: [PATCH 03/18] Bump cortex chart appVersions to sha-8bf0d4bc [skip ci]
---
helm/library/cortex/Chart.yaml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/helm/library/cortex/Chart.yaml b/helm/library/cortex/Chart.yaml
index 5ee4696b..646c2595 100644
--- a/helm/library/cortex/Chart.yaml
+++ b/helm/library/cortex/Chart.yaml
@@ -3,6 +3,6 @@ name: cortex
description: A Helm chart to distribute cortex.
type: application
version: 0.0.24
-appVersion: "sha-94f91e5c"
+appVersion: "sha-8bf0d4bc"
icon: "https://example.com/icon.png"
dependencies: []
From 950544a9a49eb6dec117cca728e4658d1b5df417 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Fri, 27 Feb 2026 06:58:54 +0100
Subject: [PATCH 04/18] Renovate: Update GitHub Artifact Actions (major) (#559)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
This PR contains the following updates:
| Package | Type | Update | Change |
|---|---|---|---|
|
[actions/download-artifact](https://redirect.github.com/actions/download-artifact)
| action | major | `v7` → `v8` |
|
[actions/upload-artifact](https://redirect.github.com/actions/upload-artifact)
| action | major | `v6` → `v7` |
---
### Release Notes
actions/download-artifact (actions/download-artifact)
###
[`v8`](https://redirect.github.com/actions/download-artifact/compare/v7...v8)
[Compare
Source](https://redirect.github.com/actions/download-artifact/compare/v7...v8)
actions/upload-artifact (actions/upload-artifact)
###
[`v7`](https://redirect.github.com/actions/upload-artifact/compare/v6...v7)
[Compare
Source](https://redirect.github.com/actions/upload-artifact/compare/v6...v7)
---
### Configuration
📅 **Schedule**: Branch creation - "before 8am on Friday" (UTC),
Automerge - At any time (no schedule defined).
🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.
♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.
👻 **Immortal**: This PR will be recreated if closed unmerged. Get
[config
help](https://redirect.github.com/renovatebot/renovate/discussions) if
that's undesired.
---
- [ ] If you want to rebase/retry this PR, check
this box
---
This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/cobaltcore-dev/cortex).
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
---
.github/workflows/test.yaml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml
index fb60f664..69bfac01 100644
--- a/.github/workflows/test.yaml
+++ b/.github/workflows/test.yaml
@@ -52,7 +52,7 @@ jobs:
go tool cover -func profile.cov > func_coverage.txt
- name: Upload coverage files
- uses: actions/upload-artifact@v6
+ uses: actions/upload-artifact@v7
with:
name: pr-func-coverage
path: |
@@ -80,7 +80,7 @@ jobs:
}
- name: Download coverage files (PR only)
if: ${{ github.event_name == 'pull_request' }}
- uses: actions/download-artifact@v7
+ uses: actions/download-artifact@v8
with:
name: pr-func-coverage
path: .
From 5dc3af4026f538472d3f6bb4b3807d6e0ca998a7 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Fri, 27 Feb 2026 06:59:06 +0100
Subject: [PATCH 05/18] Renovate: Update actions/attest-build-provenance action
to v4 (#558)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
This PR contains the following updates:
| Package | Type | Update | Change |
|---|---|---|---|
|
[actions/attest-build-provenance](https://redirect.github.com/actions/attest-build-provenance)
| action | major | `v3` → `v4` |
---
### Release Notes
actions/attest-build-provenance
(actions/attest-build-provenance)
###
[`v4`](https://redirect.github.com/actions/attest-build-provenance/compare/v3...v4)
[Compare
Source](https://redirect.github.com/actions/attest-build-provenance/compare/v3...v4)
---
### Configuration
📅 **Schedule**: Branch creation - "before 8am on Friday" (UTC),
Automerge - At any time (no schedule defined).
🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.
♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.
🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.
---
- [ ] If you want to rebase/retry this PR, check
this box
---
This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/cobaltcore-dev/cortex).
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
---
.github/workflows/push-images.yaml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/.github/workflows/push-images.yaml b/.github/workflows/push-images.yaml
index a1e25dd3..7addc3e7 100644
--- a/.github/workflows/push-images.yaml
+++ b/.github/workflows/push-images.yaml
@@ -66,7 +66,7 @@ jobs:
GIT_COMMIT=${{ github.sha }}
- name: Generate Artifact Attestation for Cortex Postgres
if: steps.changed_postgres_files.outputs.all_changed_files != ''
- uses: actions/attest-build-provenance@v3
+ uses: actions/attest-build-provenance@v4
with:
subject-name: ${{ env.REGISTRY }}/${{ github.repository }}-postgres
subject-digest: ${{ steps.push_cortex_postgres.outputs.digest }}
@@ -99,7 +99,7 @@ jobs:
GIT_TAG=${{ github.ref_name }}
GIT_COMMIT=${{ github.sha }}
- name: Generate Artifact Attestation for Cortex
- uses: actions/attest-build-provenance@v3
+ uses: actions/attest-build-provenance@v4
with:
subject-name: ${{ env.REGISTRY }}/${{ github.repository }}
subject-digest: ${{ steps.push_cortex.outputs.digest }}
From 1b8cf5bc21dfa889bfaed81e3807be0ba403a02c Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Fri, 27 Feb 2026 06:59:19 +0100
Subject: [PATCH 06/18] Renovate: Update
github.com/cobaltcore-dev/openstack-hypervisor-operator digest to 0e26bc8
(#555)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
This PR contains the following updates:
| Package | Type | Update | Change |
|---|---|---|---|
|
[github.com/cobaltcore-dev/openstack-hypervisor-operator](https://redirect.github.com/cobaltcore-dev/openstack-hypervisor-operator)
| require | digest | `8f1e688` → `0e26bc8` |
---
### Configuration
📅 **Schedule**: Branch creation - "before 8am on Friday" (UTC),
Automerge - At any time (no schedule defined).
🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.
♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.
🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.
---
- [ ] If you want to rebase/retry this PR, check
this box
---
This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/cobaltcore-dev/cortex).
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
---
go.mod | 12 ++++++------
go.sum | 28 ++++++++++++++--------------
2 files changed, 20 insertions(+), 20 deletions(-)
diff --git a/go.mod b/go.mod
index 07192af6..697896cf 100644
--- a/go.mod
+++ b/go.mod
@@ -3,7 +3,7 @@ module github.com/cobaltcore-dev/cortex
go 1.26
require (
- github.com/cobaltcore-dev/openstack-hypervisor-operator v0.0.0-20260219132051-8f1e68817a12
+ github.com/cobaltcore-dev/openstack-hypervisor-operator v0.0.0-20260226120401-0e26bc8aa127
github.com/go-gorp/gorp v2.2.0+incompatible
github.com/gophercloud/gophercloud/v2 v2.10.0
github.com/ironcore-dev/ironcore v0.2.4
@@ -78,14 +78,14 @@ require (
github.com/stoewer/go-strcase v1.3.1 // indirect
github.com/x448/float16 v0.8.4 // indirect
github.com/ziutek/mymysql v1.5.4 // indirect
- go.opentelemetry.io/auto/sdk v1.1.0 // indirect
+ go.opentelemetry.io/auto/sdk v1.2.1 // indirect
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0 // indirect
- go.opentelemetry.io/otel v1.37.0 // indirect
+ go.opentelemetry.io/otel v1.40.0 // indirect
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.37.0 // indirect
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.37.0 // indirect
- go.opentelemetry.io/otel/metric v1.37.0 // indirect
- go.opentelemetry.io/otel/sdk v1.37.0 // indirect
- go.opentelemetry.io/otel/trace v1.37.0 // indirect
+ go.opentelemetry.io/otel/metric v1.40.0 // indirect
+ go.opentelemetry.io/otel/sdk v1.40.0 // indirect
+ go.opentelemetry.io/otel/trace v1.40.0 // indirect
go.opentelemetry.io/proto/otlp v1.7.0 // indirect
go.uber.org/multierr v1.11.0 // indirect
go.uber.org/zap v1.27.1 // indirect
diff --git a/go.sum b/go.sum
index a8146be4..53505a4f 100644
--- a/go.sum
+++ b/go.sum
@@ -20,8 +20,8 @@ github.com/cenkalti/backoff/v5 v5.0.3 h1:ZN+IMa753KfX5hd8vVaMixjnqRZ3y8CuJKRKj1x
github.com/cenkalti/backoff/v5 v5.0.3/go.mod h1:rkhZdG3JZukswDf7f0cwqPNk4K0sa+F97BxZthm/crw=
github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
-github.com/cobaltcore-dev/openstack-hypervisor-operator v0.0.0-20260219132051-8f1e68817a12 h1:W/CX9aGGy/Qtf7uuPoO465u1rJ57az09UP2h6fXrPJo=
-github.com/cobaltcore-dev/openstack-hypervisor-operator v0.0.0-20260219132051-8f1e68817a12/go.mod h1:tp9h2MM6OkufwEiIek9tIndpBar0SiPf8q31KM6MRUg=
+github.com/cobaltcore-dev/openstack-hypervisor-operator v0.0.0-20260226120401-0e26bc8aa127 h1:ILZs0hxLy7a673Hqb1kbzKFSnjVorgvxjbCycvUqxFQ=
+github.com/cobaltcore-dev/openstack-hypervisor-operator v0.0.0-20260226120401-0e26bc8aa127/go.mod h1:rJcEJJvLA02KI4uwNjpIi8F+JYxvvHvCFk+ZzMvInBU=
github.com/containerd/continuity v0.4.5 h1:ZRoN1sXq9u7V6QoHMcVWGhOwDFqZ4B9i5H6un1Wh0x4=
github.com/containerd/continuity v0.4.5/go.mod h1:/lNJvtJKUQStBzpVQ1+rasXO1LAWtUQssk28EZvJ3nE=
github.com/containerd/errdefs v1.0.0 h1:tg5yIfIlQIrxYtu9ajqY42W3lpS19XqdxRQeEwYG8PI=
@@ -205,24 +205,24 @@ github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM=
github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg=
github.com/ziutek/mymysql v1.5.4 h1:GB0qdRGsTwQSBVYuVShFBKaXSnSnYYC2d9knnE1LHFs=
github.com/ziutek/mymysql v1.5.4/go.mod h1:LMSpPZ6DbqWFxNCHW77HeMg9I646SAhApZ/wKdgO/C0=
-go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA=
-go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A=
+go.opentelemetry.io/auto/sdk v1.2.1 h1:jXsnJ4Lmnqd11kwkBV2LgLoFMZKizbCi5fNZ/ipaZ64=
+go.opentelemetry.io/auto/sdk v1.2.1/go.mod h1:KRTj+aOaElaLi+wW1kO/DZRXwkF4C5xPbEe3ZiIhN7Y=
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0 h1:F7Jx+6hwnZ41NSFTO5q4LYDtJRXBf2PD0rNBkeB/lus=
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0/go.mod h1:UHB22Z8QsdRDrnAtX4PntOl36ajSxcdUMt1sF7Y6E7Q=
-go.opentelemetry.io/otel v1.37.0 h1:9zhNfelUvx0KBfu/gb+ZgeAfAgtWrfHJZcAqFC228wQ=
-go.opentelemetry.io/otel v1.37.0/go.mod h1:ehE/umFRLnuLa/vSccNq9oS1ErUlkkK71gMcN34UG8I=
+go.opentelemetry.io/otel v1.40.0 h1:oA5YeOcpRTXq6NN7frwmwFR0Cn3RhTVZvXsP4duvCms=
+go.opentelemetry.io/otel v1.40.0/go.mod h1:IMb+uXZUKkMXdPddhwAHm6UfOwJyh4ct1ybIlV14J0g=
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.37.0 h1:Ahq7pZmv87yiyn3jeFz/LekZmPLLdKejuO3NcK9MssM=
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.37.0/go.mod h1:MJTqhM0im3mRLw1i8uGHnCvUEeS7VwRyxlLC78PA18M=
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.37.0 h1:EtFWSnwW9hGObjkIdmlnWSydO+Qs8OwzfzXLUPg4xOc=
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.37.0/go.mod h1:QjUEoiGCPkvFZ/MjK6ZZfNOS6mfVEVKYE99dFhuN2LI=
-go.opentelemetry.io/otel/metric v1.37.0 h1:mvwbQS5m0tbmqML4NqK+e3aDiO02vsf/WgbsdpcPoZE=
-go.opentelemetry.io/otel/metric v1.37.0/go.mod h1:04wGrZurHYKOc+RKeye86GwKiTb9FKm1WHtO+4EVr2E=
-go.opentelemetry.io/otel/sdk v1.37.0 h1:ItB0QUqnjesGRvNcmAcU0LyvkVyGJ2xftD29bWdDvKI=
-go.opentelemetry.io/otel/sdk v1.37.0/go.mod h1:VredYzxUvuo2q3WRcDnKDjbdvmO0sCzOvVAiY+yUkAg=
-go.opentelemetry.io/otel/sdk/metric v1.37.0 h1:90lI228XrB9jCMuSdA0673aubgRobVZFhbjxHHspCPc=
-go.opentelemetry.io/otel/sdk/metric v1.37.0/go.mod h1:cNen4ZWfiD37l5NhS+Keb5RXVWZWpRE+9WyVCpbo5ps=
-go.opentelemetry.io/otel/trace v1.37.0 h1:HLdcFNbRQBE2imdSEgm/kwqmQj1Or1l/7bW6mxVK7z4=
-go.opentelemetry.io/otel/trace v1.37.0/go.mod h1:TlgrlQ+PtQO5XFerSPUYG0JSgGyryXewPGyayAWSBS0=
+go.opentelemetry.io/otel/metric v1.40.0 h1:rcZe317KPftE2rstWIBitCdVp89A2HqjkxR3c11+p9g=
+go.opentelemetry.io/otel/metric v1.40.0/go.mod h1:ib/crwQH7N3r5kfiBZQbwrTge743UDc7DTFVZrrXnqc=
+go.opentelemetry.io/otel/sdk v1.40.0 h1:KHW/jUzgo6wsPh9At46+h4upjtccTmuZCFAc9OJ71f8=
+go.opentelemetry.io/otel/sdk v1.40.0/go.mod h1:Ph7EFdYvxq72Y8Li9q8KebuYUr2KoeyHx0DRMKrYBUE=
+go.opentelemetry.io/otel/sdk/metric v1.40.0 h1:mtmdVqgQkeRxHgRv4qhyJduP3fYJRMX4AtAlbuWdCYw=
+go.opentelemetry.io/otel/sdk/metric v1.40.0/go.mod h1:4Z2bGMf0KSK3uRjlczMOeMhKU2rhUqdWNoKcYrtcBPg=
+go.opentelemetry.io/otel/trace v1.40.0 h1:WA4etStDttCSYuhwvEa8OP8I5EWu24lkOzp+ZYblVjw=
+go.opentelemetry.io/otel/trace v1.40.0/go.mod h1:zeAhriXecNGP/s2SEG3+Y8X9ujcJOTqQ5RgdEJcawiA=
go.opentelemetry.io/proto/otlp v1.7.0 h1:jX1VolD6nHuFzOYso2E73H85i92Mv8JQYk0K9vz09os=
go.opentelemetry.io/proto/otlp v1.7.0/go.mod h1:fSKjH6YJ7HDlwzltzyMj036AJ3ejJLCgCSHGj4efDDo=
go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
From f3e5cf36c81873aee27084450b5ee9bf2676fd73 Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
Date: Fri, 27 Feb 2026 06:09:59 +0000
Subject: [PATCH 07/18] Bump cortex chart appVersions to sha-1b8cf5bc [skip ci]
---
helm/library/cortex/Chart.yaml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/helm/library/cortex/Chart.yaml b/helm/library/cortex/Chart.yaml
index 646c2595..12cbf011 100644
--- a/helm/library/cortex/Chart.yaml
+++ b/helm/library/cortex/Chart.yaml
@@ -3,6 +3,6 @@ name: cortex
description: A Helm chart to distribute cortex.
type: application
version: 0.0.24
-appVersion: "sha-8bf0d4bc"
+appVersion: "sha-1b8cf5bc"
icon: "https://example.com/icon.png"
dependencies: []
From 374ee4198f0b4242258c62f9750689bebaad67ff Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Fri, 27 Feb 2026 07:52:33 +0100
Subject: [PATCH 08/18] Renovate: Update External dependencies (#557)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
This PR contains the following updates:
| Package | Type | Update | Change |
|---|---|---|---|
|
[kube-prometheus-stack](https://redirect.github.com/prometheus-operator/kube-prometheus)
([source](https://redirect.github.com/prometheus-community/helm-charts))
| | minor | `82.1.1` → `82.4.1` |
| [python](https://redirect.github.com/actions/python-versions) |
uses-with | minor | `3.12` → `3.14` |
---
### Release Notes
prometheus-community/helm-charts
(kube-prometheus-stack)
###
[`v82.4.1`](https://redirect.github.com/prometheus-community/helm-charts/releases/tag/kube-prometheus-stack-82.4.1)
[Compare
Source](https://redirect.github.com/prometheus-community/helm-charts/compare/kube-prometheus-stack-82.4.0...kube-prometheus-stack-82.4.1)
kube-prometheus-stack collects Kubernetes manifests, Grafana dashboards,
and Prometheus rules combined with documentation and scripts to provide
easy to operate end-to-end Kubernetes cluster monitoring with Prometheus
using the Prometheus Operator.
#### What's Changed
- \[kube-prometheus-stack] Update kube-prometheus-stack dependency
non-major updates by
[@renovate](https://redirect.github.com/renovate)\[bot] in
[#6684](https://redirect.github.com/prometheus-community/helm-charts/pull/6684)
**Full Changelog**:
###
[`v82.4.0`](https://redirect.github.com/prometheus-community/helm-charts/releases/tag/kube-prometheus-stack-82.4.0)
[Compare
Source](https://redirect.github.com/prometheus-community/helm-charts/compare/kube-prometheus-stack-82.3.0...kube-prometheus-stack-82.4.0)
kube-prometheus-stack collects Kubernetes manifests, Grafana dashboards,
and Prometheus rules combined with documentation and scripts to provide
easy to operate end-to-end Kubernetes cluster monitoring with Prometheus
using the Prometheus Operator.
#### What's Changed
- \[kube-prometheus-stack] unify PodDisruptionBudget configuration by
[@mkmet](https://redirect.github.com/mkmet) in
[#6669](https://redirect.github.com/prometheus-community/helm-charts/pull/6669)
#### New Contributors
- [@mkmet](https://redirect.github.com/mkmet) made their first
contribution in
[#6669](https://redirect.github.com/prometheus-community/helm-charts/pull/6669)
**Full Changelog**:
###
[`v82.3.0`](https://redirect.github.com/prometheus-community/helm-charts/compare/kube-prometheus-stack-82.2.1...kube-prometheus-stack-82.3.0)
[Compare
Source](https://redirect.github.com/prometheus-community/helm-charts/compare/kube-prometheus-stack-82.2.1...kube-prometheus-stack-82.3.0)
###
[`v82.2.1`](https://redirect.github.com/prometheus-community/helm-charts/releases/tag/kube-prometheus-stack-82.2.1)
kube-prometheus-stack collects Kubernetes manifests, Grafana dashboards,
and Prometheus rules combined with documentation and scripts to provide
easy to operate end-to-end Kubernetes cluster monitoring with Prometheus
using the Prometheus Operator.
#### What's Changed
- \[kube-prometheus-stack] Update kube-prometheus-stack dependency
non-major updates by
[@renovate](https://redirect.github.com/renovate)\[bot] in
[#6668](https://redirect.github.com/prometheus-community/helm-charts/pull/6668)
**Full Changelog**:
###
[`v82.2.0`](https://redirect.github.com/prometheus-community/helm-charts/releases/tag/kube-prometheus-stack-82.2.0)
kube-prometheus-stack collects Kubernetes manifests, Grafana dashboards,
and Prometheus rules combined with documentation and scripts to provide
easy to operate end-to-end Kubernetes cluster monitoring with Prometheus
using the Prometheus Operator.
#### What's Changed
- \[kube-prometheus-stack] Update kube-prometheus-stack dependency
non-major updates by
[@renovate](https://redirect.github.com/renovate)\[bot] in
[#6665](https://redirect.github.com/prometheus-community/helm-charts/pull/6665)
**Full Changelog**:
actions/python-versions (python)
###
[`v3.14.3`](https://redirect.github.com/actions/python-versions/releases/tag/3.14.3-21673711214):
3.14.3
[Compare
Source](https://redirect.github.com/actions/python-versions/compare/3.14.2-20014991423...3.14.3-21673711214)
Python 3.14.3
###
[`v3.14.2`](https://redirect.github.com/actions/python-versions/releases/tag/3.14.2-20014991423):
3.14.2
[Compare
Source](https://redirect.github.com/actions/python-versions/compare/3.14.1-19879739908...3.14.2-20014991423)
Python 3.14.2
###
[`v3.14.1`](https://redirect.github.com/actions/python-versions/releases/tag/3.14.1-19879739908):
3.14.1
[Compare
Source](https://redirect.github.com/actions/python-versions/compare/3.14.0-18313368925...3.14.1-19879739908)
Python 3.14.1
###
[`v3.14.0`](https://redirect.github.com/actions/python-versions/releases/tag/3.14.0-18313368925):
3.14.0
[Compare
Source](https://redirect.github.com/actions/python-versions/compare/3.13.12-21673645133...3.14.0-18313368925)
Python 3.14.0
###
[`v3.13.12`](https://redirect.github.com/actions/python-versions/releases/tag/3.13.12-21673645133):
3.13.12
[Compare
Source](https://redirect.github.com/actions/python-versions/compare/3.13.11-20014977833...3.13.12-21673645133)
Python 3.13.12
###
[`v3.13.11`](https://redirect.github.com/actions/python-versions/releases/tag/3.13.11-20014977833):
3.13.11
[Compare
Source](https://redirect.github.com/actions/python-versions/compare/3.13.10-19879712315...3.13.11-20014977833)
Python 3.13.11
###
[`v3.13.10`](https://redirect.github.com/actions/python-versions/releases/tag/3.13.10-19879712315):
3.13.10
[Compare
Source](https://redirect.github.com/actions/python-versions/compare/3.13.9-18515951191...3.13.10-19879712315)
Python 3.13.10
###
[`v3.13.9`](https://redirect.github.com/actions/python-versions/releases/tag/3.13.9-18515951191):
3.13.9
[Compare
Source](https://redirect.github.com/actions/python-versions/compare/3.13.8-18331000654...3.13.9-18515951191)
Python 3.13.9
###
[`v3.13.8`](https://redirect.github.com/actions/python-versions/releases/tag/3.13.8-18331000654):
3.13.8
[Compare
Source](https://redirect.github.com/actions/python-versions/compare/3.13.7-16980743123...3.13.8-18331000654)
Python 3.13.8
###
[`v3.13.7`](https://redirect.github.com/actions/python-versions/releases/tag/3.13.7-16980743123):
3.13.7
[Compare
Source](https://redirect.github.com/actions/python-versions/compare/3.13.6-16792117939...3.13.7-16980743123)
Python 3.13.7
###
[`v3.13.6`](https://redirect.github.com/actions/python-versions/releases/tag/3.13.6-16792117939):
3.13.6
[Compare
Source](https://redirect.github.com/actions/python-versions/compare/3.13.5-15601068749...3.13.6-16792117939)
Python 3.13.6
###
[`v3.13.5`](https://redirect.github.com/actions/python-versions/releases/tag/3.13.5-15601068749):
3.13.5
[Compare
Source](https://redirect.github.com/actions/python-versions/compare/3.13.4-15433317575...3.13.5-15601068749)
Python 3.13.5
###
[`v3.13.4`](https://redirect.github.com/actions/python-versions/releases/tag/3.13.4-15433317575):
3.13.4
[Compare
Source](https://redirect.github.com/actions/python-versions/compare/3.13.3-14344076652...3.13.4-15433317575)
Python 3.13.4
###
[`v3.13.3`](https://redirect.github.com/actions/python-versions/releases/tag/3.13.3-14344076652):
3.13.3
[Compare
Source](https://redirect.github.com/actions/python-versions/compare/3.13.2-13708744326...3.13.3-14344076652)
Python 3.13.3
###
[`v3.13.2`](https://redirect.github.com/actions/python-versions/releases/tag/3.13.2-13708744326):
3.13.2
[Compare
Source](https://redirect.github.com/actions/python-versions/compare/3.13.1-13437882550...3.13.2-13708744326)
Python 3.13.2
###
[`v3.13.1`](https://redirect.github.com/actions/python-versions/releases/tag/3.13.1-13437882550):
3.13.1
[Compare
Source](https://redirect.github.com/actions/python-versions/compare/3.13.0-13707372259...3.13.1-13437882550)
Python 3.13.1
###
[`v3.13.0`](https://redirect.github.com/actions/python-versions/releases/tag/3.13.0-13707372259):
3.13.0
[Compare
Source](https://redirect.github.com/actions/python-versions/compare/3.12.12-18393146713...3.13.0-13707372259)
Python 3.13.0
---
### Configuration
📅 **Schedule**: Branch creation - "before 8am on Friday" (UTC),
Automerge - At any time (no schedule defined).
🚦 **Automerge**: Enabled.
♻ **Rebasing**: Whenever PR is behind base branch, or you tick the
rebase/retry checkbox.
👻 **Immortal**: This PR will be recreated if closed unmerged. Get
[config
help](https://redirect.github.com/renovatebot/renovate/discussions) if
that's undesired.
---
- [ ] If you want to rebase/retry this PR, check
this box
---
This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/cobaltcore-dev/cortex).
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
---
.github/workflows/helm-lint.yaml | 2 +-
helm/dev/cortex-prometheus-operator/Chart.yaml | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/.github/workflows/helm-lint.yaml b/.github/workflows/helm-lint.yaml
index 30709063..5490e8c0 100644
--- a/.github/workflows/helm-lint.yaml
+++ b/.github/workflows/helm-lint.yaml
@@ -24,7 +24,7 @@ jobs:
- uses: actions/setup-python@v6.2.0
with:
- python-version: "3.12"
+ python-version: "3.14"
check-latest: true
- name: Set up chart linting
diff --git a/helm/dev/cortex-prometheus-operator/Chart.yaml b/helm/dev/cortex-prometheus-operator/Chart.yaml
index 687e6a42..2c28dfe7 100644
--- a/helm/dev/cortex-prometheus-operator/Chart.yaml
+++ b/helm/dev/cortex-prometheus-operator/Chart.yaml
@@ -10,4 +10,4 @@ dependencies:
# CRDs of the prometheus operator, such as PrometheusRule, ServiceMonitor, etc.
- name: kube-prometheus-stack
repository: oci://ghcr.io/prometheus-community/charts
- version: 82.1.1
+ version: 82.4.1
From 1bd9461ae4a9dbacfc50bca49e0f35bbd9097fc8 Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
Date: Fri, 27 Feb 2026 07:01:40 +0000
Subject: [PATCH 09/18] Bump cortex chart appVersions to sha-374ee419 [skip ci]
---
helm/library/cortex/Chart.yaml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/helm/library/cortex/Chart.yaml b/helm/library/cortex/Chart.yaml
index 12cbf011..95d03cc8 100644
--- a/helm/library/cortex/Chart.yaml
+++ b/helm/library/cortex/Chart.yaml
@@ -3,6 +3,6 @@ name: cortex
description: A Helm chart to distribute cortex.
type: application
version: 0.0.24
-appVersion: "sha-1b8cf5bc"
+appVersion: "sha-374ee419"
icon: "https://example.com/icon.png"
dependencies: []
From 7ff10ea5b26d5797687f5299bb5bafefa2b35496 Mon Sep 17 00:00:00 2001
From: Philipp Matthes
Date: Fri, 27 Feb 2026 17:00:51 +0100
Subject: [PATCH 10/18] Stop filtering on kvm hypervisor tainted status
condition
---
.../plugins/filters/filter_status_conditions.go | 10 ++++++----
.../filters/filter_status_conditions_test.go | 14 +++++++-------
2 files changed, 13 insertions(+), 11 deletions(-)
diff --git a/internal/scheduling/nova/plugins/filters/filter_status_conditions.go b/internal/scheduling/nova/plugins/filters/filter_status_conditions.go
index 19f1036e..3d7f2aae 100644
--- a/internal/scheduling/nova/plugins/filters/filter_status_conditions.go
+++ b/internal/scheduling/nova/plugins/filters/filter_status_conditions.go
@@ -33,10 +33,12 @@ func (s *FilterStatusConditionsStep) Run(traceLog *slog.Logger, request api.Exte
hv1.ConditionTypeReady: metav1.ConditionTrue,
hv1.ConditionTypeHypervisorDisabled: metav1.ConditionFalse,
hv1.ConditionTypeTerminating: metav1.ConditionFalse,
- hv1.ConditionTypeTainted: metav1.ConditionFalse,
- hv1.ConditionTypeOnboarding: "", // Don't care
- hv1.ConditionTypeTraitsUpdated: "", // Don't care
- hv1.ConditionTypeAggregatesUpdated: "", // Don't care
+ // The hypervisor tainted condition is set when users touch the resource
+ // via kubectl, and shouldn't impact if we can schedule on this hypervisor.
+ hv1.ConditionTypeTainted: "",
+ hv1.ConditionTypeOnboarding: "", // Don't care
+ hv1.ConditionTypeTraitsUpdated: "", // Don't care
+ hv1.ConditionTypeAggregatesUpdated: "", // Don't care
}
var hostsReady = make(map[string]struct{})
diff --git a/internal/scheduling/nova/plugins/filters/filter_status_conditions_test.go b/internal/scheduling/nova/plugins/filters/filter_status_conditions_test.go
index beec0785..adbfc8c6 100644
--- a/internal/scheduling/nova/plugins/filters/filter_status_conditions_test.go
+++ b/internal/scheduling/nova/plugins/filters/filter_status_conditions_test.go
@@ -226,8 +226,8 @@ func TestFilterStatusConditionsStep_Run(t *testing.T) {
{ComputeHost: "host4"},
},
},
- expectedHosts: []string{"host1"},
- filteredHosts: []string{"host2", "host3", "host4"},
+ expectedHosts: []string{"host1", "host4"},
+ filteredHosts: []string{"host2", "host3"},
},
{
name: "Host not ready should be filtered",
@@ -250,14 +250,14 @@ func TestFilterStatusConditionsStep_Run(t *testing.T) {
filteredHosts: []string{"host3"},
},
{
- name: "Tainted host should be filtered",
+ name: "Tainted host should not be filtered",
request: api.ExternalSchedulerRequest{
Hosts: []api.ExternalSchedulerHost{
{ComputeHost: "host4"},
},
},
- expectedHosts: []string{},
- filteredHosts: []string{"host4"},
+ expectedHosts: []string{"host4"},
+ filteredHosts: []string{},
},
{
name: "Disabled hypervisor should be filtered",
@@ -329,8 +329,8 @@ func TestFilterStatusConditionsStep_Run(t *testing.T) {
{ComputeHost: "host5"},
},
},
- expectedHosts: []string{"host1", "host5"},
- filteredHosts: []string{"host2", "host3", "host4"},
+ expectedHosts: []string{"host1", "host5", "host4"},
+ filteredHosts: []string{"host2", "host3"},
},
}
From 014482e8589fa119bb3baa36e2748e97caaa4546 Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
Date: Fri, 27 Feb 2026 16:10:30 +0000
Subject: [PATCH 11/18] Bump cortex chart appVersions to sha-7ff10ea5 [skip ci]
---
helm/library/cortex/Chart.yaml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/helm/library/cortex/Chart.yaml b/helm/library/cortex/Chart.yaml
index 95d03cc8..a46c0fbc 100644
--- a/helm/library/cortex/Chart.yaml
+++ b/helm/library/cortex/Chart.yaml
@@ -3,6 +3,6 @@ name: cortex
description: A Helm chart to distribute cortex.
type: application
version: 0.0.24
-appVersion: "sha-374ee419"
+appVersion: "sha-7ff10ea5"
icon: "https://example.com/icon.png"
dependencies: []
From 38d94cdca10e520430003223cc4a989b294d1d4a Mon Sep 17 00:00:00 2001
From: Markus Wieland <44964229+SoWieMarkus@users.noreply.github.com>
Date: Fri, 6 Mar 2026 13:55:38 +0100
Subject: [PATCH 12/18] Fix hypervisor crd breaking changes (#562)
The hypervisor operator changed the representation of aggregates in
HypervisorStatus from a simple string array (`[]string`) to a structured
type (`[]Aggregate` with Name and UUID fields). Without this update,
watching Hypervisor resources fails with a "cannot unmarshal object into
Go struct field" error. The filter logic in
filter_requested_destination.go has been adjusted to extract aggregate
names from the new structure, and the corresponding tests have been
updated.
Go mod tidy updated the sap go bits dependency as well. Tbh I don't know
why renovate hasn't opened a PR today.
---
go.mod | 4 ++--
go.sum | 8 ++++----
.../filters/filter_requested_destination.go | 4 +++-
.../filters/filter_requested_destination_test.go | 14 +++++++-------
4 files changed, 16 insertions(+), 14 deletions(-)
diff --git a/go.mod b/go.mod
index 697896cf..245513cb 100644
--- a/go.mod
+++ b/go.mod
@@ -3,7 +3,7 @@ module github.com/cobaltcore-dev/cortex
go 1.26
require (
- github.com/cobaltcore-dev/openstack-hypervisor-operator v0.0.0-20260226120401-0e26bc8aa127
+ github.com/cobaltcore-dev/openstack-hypervisor-operator v0.0.0-20260305105543-733c59b0b17c
github.com/go-gorp/gorp v2.2.0+incompatible
github.com/gophercloud/gophercloud/v2 v2.10.0
github.com/ironcore-dev/ironcore v0.2.4
@@ -71,7 +71,7 @@ require (
github.com/poy/onpar v0.3.5 // indirect
github.com/prometheus/common v0.67.5 // indirect
github.com/prometheus/procfs v0.17.0 // indirect
- github.com/sapcc/go-api-declarations v1.19.0 // indirect
+ github.com/sapcc/go-api-declarations v1.20.2 // indirect
github.com/sirupsen/logrus v1.9.3 // indirect
github.com/spf13/cobra v1.10.1 // indirect
github.com/spf13/pflag v1.0.10 // indirect
diff --git a/go.sum b/go.sum
index 53505a4f..03dfd27f 100644
--- a/go.sum
+++ b/go.sum
@@ -20,8 +20,8 @@ github.com/cenkalti/backoff/v5 v5.0.3 h1:ZN+IMa753KfX5hd8vVaMixjnqRZ3y8CuJKRKj1x
github.com/cenkalti/backoff/v5 v5.0.3/go.mod h1:rkhZdG3JZukswDf7f0cwqPNk4K0sa+F97BxZthm/crw=
github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
-github.com/cobaltcore-dev/openstack-hypervisor-operator v0.0.0-20260226120401-0e26bc8aa127 h1:ILZs0hxLy7a673Hqb1kbzKFSnjVorgvxjbCycvUqxFQ=
-github.com/cobaltcore-dev/openstack-hypervisor-operator v0.0.0-20260226120401-0e26bc8aa127/go.mod h1:rJcEJJvLA02KI4uwNjpIi8F+JYxvvHvCFk+ZzMvInBU=
+github.com/cobaltcore-dev/openstack-hypervisor-operator v0.0.0-20260305105543-733c59b0b17c h1:XBqsQQwdSep27eJN7sACjahkhmR2zRlJwv9PrYcEou8=
+github.com/cobaltcore-dev/openstack-hypervisor-operator v0.0.0-20260305105543-733c59b0b17c/go.mod h1:b0KmJdxvRI8UXlGe8cRm5BD8Tm2WhF7zSKMSIRGyVL4=
github.com/containerd/continuity v0.4.5 h1:ZRoN1sXq9u7V6QoHMcVWGhOwDFqZ4B9i5H6un1Wh0x4=
github.com/containerd/continuity v0.4.5/go.mod h1:/lNJvtJKUQStBzpVQ1+rasXO1LAWtUQssk28EZvJ3nE=
github.com/containerd/errdefs v1.0.0 h1:tg5yIfIlQIrxYtu9ajqY42W3lpS19XqdxRQeEwYG8PI=
@@ -174,8 +174,8 @@ github.com/prometheus/procfs v0.17.0/go.mod h1:oPQLaDAMRbA+u8H5Pbfq+dl3VDAvHxMUO
github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ=
github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc=
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
-github.com/sapcc/go-api-declarations v1.19.0 h1:AdCHBhoDGC1REMJF6Rc/XLIcf4qMqjUXs5WLq83HImM=
-github.com/sapcc/go-api-declarations v1.19.0/go.mod h1:eiRrXXUeQS5C/1kKn8/KMjk0Y0goUzgDQswj30rH0Zc=
+github.com/sapcc/go-api-declarations v1.20.2 h1:GWqv8VgsF4k9id6N051AVTaEpcjT02APsOuz2yCvTPQ=
+github.com/sapcc/go-api-declarations v1.20.2/go.mod h1:eiRrXXUeQS5C/1kKn8/KMjk0Y0goUzgDQswj30rH0Zc=
github.com/sapcc/go-bits v0.0.0-20260226170120-c20f89b66c3c h1:GX6ADtKR6Bs2bBRBqeJf376MsxLNppC1SOHLIBuQwIA=
github.com/sapcc/go-bits v0.0.0-20260226170120-c20f89b66c3c/go.mod h1:AYC4f8FYO9DllSt4TyMwm1e5iPn32/DGIrlgXtuEsJ0=
github.com/sergi/go-diff v1.4.0 h1:n/SP9D5ad1fORl+llWyN+D6qoUETXNZARKjyY2/KVCw=
diff --git a/internal/scheduling/nova/plugins/filters/filter_requested_destination.go b/internal/scheduling/nova/plugins/filters/filter_requested_destination.go
index 1e3449b7..0c6b6d4c 100644
--- a/internal/scheduling/nova/plugins/filters/filter_requested_destination.go
+++ b/internal/scheduling/nova/plugins/filters/filter_requested_destination.go
@@ -86,7 +86,9 @@ func (s *FilterRequestedDestinationStep) Run(traceLog *slog.Logger, request api.
continue
}
hvAggregates := hv.Spec.Aggregates
- hvAggregates = append(hvAggregates, hv.Status.Aggregates...)
+ for _, agg := range hv.Status.Aggregates {
+ hvAggregates = append(hvAggregates, agg.Name)
+ }
// Check if any of the host's aggregates match the requested aggregates.
found := false
for _, reqAgg := range aggregatesToConsider {
diff --git a/internal/scheduling/nova/plugins/filters/filter_requested_destination_test.go b/internal/scheduling/nova/plugins/filters/filter_requested_destination_test.go
index 02afad2c..085268e7 100644
--- a/internal/scheduling/nova/plugins/filters/filter_requested_destination_test.go
+++ b/internal/scheduling/nova/plugins/filters/filter_requested_destination_test.go
@@ -184,15 +184,15 @@ func TestFilterRequestedDestinationStep_Run(t *testing.T) {
hypervisors: []hv1.Hypervisor{
{
ObjectMeta: metav1.ObjectMeta{Name: "host1"},
- Status: hv1.HypervisorStatus{Aggregates: []string{"aggregate1"}},
+ Status: hv1.HypervisorStatus{Aggregates: []hv1.Aggregate{{Name: "aggregate1"}}},
},
{
ObjectMeta: metav1.ObjectMeta{Name: "host2"},
- Status: hv1.HypervisorStatus{Aggregates: []string{"aggregate2"}},
+ Status: hv1.HypervisorStatus{Aggregates: []hv1.Aggregate{{Name: "aggregate2"}}},
},
{
ObjectMeta: metav1.ObjectMeta{Name: "host3"},
- Status: hv1.HypervisorStatus{Aggregates: []string{"aggregate1", "aggregate3"}},
+ Status: hv1.HypervisorStatus{Aggregates: []hv1.Aggregate{{Name: "aggregate1"}, {Name: "aggregate3"}}},
},
},
expectedHosts: []string{"host1", "host3"},
@@ -262,17 +262,17 @@ func TestFilterRequestedDestinationStep_Run(t *testing.T) {
{
ObjectMeta: metav1.ObjectMeta{Name: "host1"},
Spec: hv1.HypervisorSpec{Aggregates: []string{"aggregate1"}},
- Status: hv1.HypervisorStatus{Aggregates: []string{"aggregate3"}},
+ Status: hv1.HypervisorStatus{Aggregates: []hv1.Aggregate{{Name: "aggregate3"}}},
},
{
ObjectMeta: metav1.ObjectMeta{Name: "host2"},
Spec: hv1.HypervisorSpec{Aggregates: []string{"aggregate3"}},
- Status: hv1.HypervisorStatus{Aggregates: []string{"aggregate2"}},
+ Status: hv1.HypervisorStatus{Aggregates: []hv1.Aggregate{{Name: "aggregate2"}}},
},
{
ObjectMeta: metav1.ObjectMeta{Name: "host3"},
Spec: hv1.HypervisorSpec{Aggregates: []string{"aggregate4"}},
- Status: hv1.HypervisorStatus{Aggregates: []string{"aggregate5"}},
+ Status: hv1.HypervisorStatus{Aggregates: []hv1.Aggregate{{Name: "aggregate5"}}},
},
},
expectedHosts: []string{"host1", "host2"},
@@ -374,7 +374,7 @@ func TestFilterRequestedDestinationStep_Run(t *testing.T) {
{
ObjectMeta: metav1.ObjectMeta{Name: "host2"},
Spec: hv1.HypervisorSpec{Aggregates: []string{}},
- Status: hv1.HypervisorStatus{Aggregates: []string{}},
+ Status: hv1.HypervisorStatus{Aggregates: []hv1.Aggregate{}},
},
{
ObjectMeta: metav1.ObjectMeta{Name: "host3"},
From 155a83a8083ab3723dfbd4858ad43c423016309a Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
Date: Fri, 6 Mar 2026 13:07:02 +0000
Subject: [PATCH 13/18] Bump cortex chart appVersions to sha-38d94cdc [skip ci]
---
helm/library/cortex/Chart.yaml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/helm/library/cortex/Chart.yaml b/helm/library/cortex/Chart.yaml
index a46c0fbc..882c422a 100644
--- a/helm/library/cortex/Chart.yaml
+++ b/helm/library/cortex/Chart.yaml
@@ -3,6 +3,6 @@ name: cortex
description: A Helm chart to distribute cortex.
type: application
version: 0.0.24
-appVersion: "sha-7ff10ea5"
+appVersion: "sha-38d94cdc"
icon: "https://example.com/icon.png"
dependencies: []
From 87a325cf39aa619b96fe0c4cdec5278b48c98e07 Mon Sep 17 00:00:00 2001
From: Markus Wieland
Date: Fri, 6 Mar 2026 14:14:14 +0100
Subject: [PATCH 14/18] Update hypervisor aggregate field from Name to UUID in
filters
---
.../plugins/filters/filter_requested_destination.go | 2 +-
.../filters/filter_requested_destination_test.go | 12 ++++++------
2 files changed, 7 insertions(+), 7 deletions(-)
diff --git a/internal/scheduling/nova/plugins/filters/filter_requested_destination.go b/internal/scheduling/nova/plugins/filters/filter_requested_destination.go
index 0c6b6d4c..f5cf7b42 100644
--- a/internal/scheduling/nova/plugins/filters/filter_requested_destination.go
+++ b/internal/scheduling/nova/plugins/filters/filter_requested_destination.go
@@ -87,7 +87,7 @@ func (s *FilterRequestedDestinationStep) Run(traceLog *slog.Logger, request api.
}
hvAggregates := hv.Spec.Aggregates
for _, agg := range hv.Status.Aggregates {
- hvAggregates = append(hvAggregates, agg.Name)
+ hvAggregates = append(hvAggregates, agg.UUID)
}
// Check if any of the host's aggregates match the requested aggregates.
found := false
diff --git a/internal/scheduling/nova/plugins/filters/filter_requested_destination_test.go b/internal/scheduling/nova/plugins/filters/filter_requested_destination_test.go
index 085268e7..1a72b22e 100644
--- a/internal/scheduling/nova/plugins/filters/filter_requested_destination_test.go
+++ b/internal/scheduling/nova/plugins/filters/filter_requested_destination_test.go
@@ -184,15 +184,15 @@ func TestFilterRequestedDestinationStep_Run(t *testing.T) {
hypervisors: []hv1.Hypervisor{
{
ObjectMeta: metav1.ObjectMeta{Name: "host1"},
- Status: hv1.HypervisorStatus{Aggregates: []hv1.Aggregate{{Name: "aggregate1"}}},
+ Status: hv1.HypervisorStatus{Aggregates: []hv1.Aggregate{{UUID: "aggregate1"}}},
},
{
ObjectMeta: metav1.ObjectMeta{Name: "host2"},
- Status: hv1.HypervisorStatus{Aggregates: []hv1.Aggregate{{Name: "aggregate2"}}},
+ Status: hv1.HypervisorStatus{Aggregates: []hv1.Aggregate{{UUID: "aggregate2"}}},
},
{
ObjectMeta: metav1.ObjectMeta{Name: "host3"},
- Status: hv1.HypervisorStatus{Aggregates: []hv1.Aggregate{{Name: "aggregate1"}, {Name: "aggregate3"}}},
+ Status: hv1.HypervisorStatus{Aggregates: []hv1.Aggregate{{UUID: "aggregate1"}, {UUID: "aggregate3"}}},
},
},
expectedHosts: []string{"host1", "host3"},
@@ -262,17 +262,17 @@ func TestFilterRequestedDestinationStep_Run(t *testing.T) {
{
ObjectMeta: metav1.ObjectMeta{Name: "host1"},
Spec: hv1.HypervisorSpec{Aggregates: []string{"aggregate1"}},
- Status: hv1.HypervisorStatus{Aggregates: []hv1.Aggregate{{Name: "aggregate3"}}},
+ Status: hv1.HypervisorStatus{Aggregates: []hv1.Aggregate{{UUID: "aggregate3"}}},
},
{
ObjectMeta: metav1.ObjectMeta{Name: "host2"},
Spec: hv1.HypervisorSpec{Aggregates: []string{"aggregate3"}},
- Status: hv1.HypervisorStatus{Aggregates: []hv1.Aggregate{{Name: "aggregate2"}}},
+ Status: hv1.HypervisorStatus{Aggregates: []hv1.Aggregate{{UUID: "aggregate2"}}},
},
{
ObjectMeta: metav1.ObjectMeta{Name: "host3"},
Spec: hv1.HypervisorSpec{Aggregates: []string{"aggregate4"}},
- Status: hv1.HypervisorStatus{Aggregates: []hv1.Aggregate{{Name: "aggregate5"}}},
+ Status: hv1.HypervisorStatus{Aggregates: []hv1.Aggregate{{UUID: "aggregate5"}}},
},
},
expectedHosts: []string{"host1", "host2"},
From 9b8c072edc886e670390b8e15eafbb2564696b37 Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
Date: Fri, 6 Mar 2026 13:23:29 +0000
Subject: [PATCH 15/18] Bump cortex chart appVersions to sha-87a325cf [skip ci]
---
helm/library/cortex/Chart.yaml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/helm/library/cortex/Chart.yaml b/helm/library/cortex/Chart.yaml
index 882c422a..c979bff8 100644
--- a/helm/library/cortex/Chart.yaml
+++ b/helm/library/cortex/Chart.yaml
@@ -3,6 +3,6 @@ name: cortex
description: A Helm chart to distribute cortex.
type: application
version: 0.0.24
-appVersion: "sha-38d94cdc"
+appVersion: "sha-87a325cf"
icon: "https://example.com/icon.png"
dependencies: []
From 349d742bb6f9a6b3285b8b6df306f3ae27fcf4ac Mon Sep 17 00:00:00 2001
From: Philipp Matthes <27271818+PhilippMatthes@users.noreply.github.com>
Date: Mon, 9 Mar 2026 08:57:19 +0100
Subject: [PATCH 16/18] Only consider status aggregates in filter requested
destination (#563)
Before, we considered both spec and status aggregates. However, we
should only extract the ones from the status to see which aggregates
were actually reflected by the openstack hypervisor operator.
---
.../filters/filter_requested_destination.go | 9 ++-
.../filter_requested_destination_test.go | 78 +++++++++----------
2 files changed, 42 insertions(+), 45 deletions(-)
diff --git a/internal/scheduling/nova/plugins/filters/filter_requested_destination.go b/internal/scheduling/nova/plugins/filters/filter_requested_destination.go
index f5cf7b42..fd49aa5c 100644
--- a/internal/scheduling/nova/plugins/filters/filter_requested_destination.go
+++ b/internal/scheduling/nova/plugins/filters/filter_requested_destination.go
@@ -85,14 +85,15 @@ func (s *FilterRequestedDestinationStep) Run(traceLog *slog.Logger, request api.
traceLog.Info("filtered out host not in requested_destination aggregates (unknown host)", "host", host)
continue
}
- hvAggregates := hv.Spec.Aggregates
+ // The requested destination from Nova will contain aggregate uuids.
+ hvAggregateUUIDs := make([]string, 0, len(hv.Status.Aggregates))
for _, agg := range hv.Status.Aggregates {
- hvAggregates = append(hvAggregates, agg.UUID)
+ hvAggregateUUIDs = append(hvAggregateUUIDs, agg.UUID)
}
// Check if any of the host's aggregates match the requested aggregates.
found := false
for _, reqAgg := range aggregatesToConsider {
- if slices.Contains(hvAggregates, reqAgg) {
+ if slices.Contains(hvAggregateUUIDs, reqAgg) {
found = true
break
}
@@ -101,7 +102,7 @@ func (s *FilterRequestedDestinationStep) Run(traceLog *slog.Logger, request api.
delete(result.Activations, host)
traceLog.Info(
"filtered out host not in requested_destination aggregates",
- "host", host, "hostAggregates", hvAggregates,
+ "host", host, "hostAggregates", hvAggregateUUIDs,
"requestedAggregates", rd.Data.Aggregates,
"ignoredAggregates", s.Options.IgnoredAggregates,
"aggregatesConsidered", aggregatesToConsider,
diff --git a/internal/scheduling/nova/plugins/filters/filter_requested_destination_test.go b/internal/scheduling/nova/plugins/filters/filter_requested_destination_test.go
index 1a72b22e..101d10b2 100644
--- a/internal/scheduling/nova/plugins/filters/filter_requested_destination_test.go
+++ b/internal/scheduling/nova/plugins/filters/filter_requested_destination_test.go
@@ -44,15 +44,15 @@ func TestFilterRequestedDestinationStep_Run(t *testing.T) {
hypervisors: []hv1.Hypervisor{
{
ObjectMeta: metav1.ObjectMeta{Name: "host1"},
- Spec: hv1.HypervisorSpec{Aggregates: []string{"aggregate1"}},
+ Status: hv1.HypervisorStatus{Aggregates: []hv1.Aggregate{{UUID: "aggregate1"}}},
},
{
ObjectMeta: metav1.ObjectMeta{Name: "host2"},
- Spec: hv1.HypervisorSpec{Aggregates: []string{"aggregate2"}},
+ Status: hv1.HypervisorStatus{Aggregates: []hv1.Aggregate{{UUID: "aggregate2"}}},
},
{
ObjectMeta: metav1.ObjectMeta{Name: "host3"},
- Spec: hv1.HypervisorSpec{Aggregates: []string{"aggregate3"}},
+ Status: hv1.HypervisorStatus{Aggregates: []hv1.Aggregate{{UUID: "aggregate3"}}},
},
},
expectedHosts: []string{"host1", "host2", "host3"},
@@ -80,11 +80,11 @@ func TestFilterRequestedDestinationStep_Run(t *testing.T) {
hypervisors: []hv1.Hypervisor{
{
ObjectMeta: metav1.ObjectMeta{Name: "host1"},
- Spec: hv1.HypervisorSpec{Aggregates: []string{"aggregate1"}},
+ Status: hv1.HypervisorStatus{Aggregates: []hv1.Aggregate{{UUID: "aggregate1"}}},
},
{
ObjectMeta: metav1.ObjectMeta{Name: "host2"},
- Spec: hv1.HypervisorSpec{Aggregates: []string{"aggregate2"}},
+ Status: hv1.HypervisorStatus{Aggregates: []hv1.Aggregate{{UUID: "aggregate2"}}},
},
},
expectedHosts: []string{"host1", "host2"},
@@ -112,15 +112,15 @@ func TestFilterRequestedDestinationStep_Run(t *testing.T) {
hypervisors: []hv1.Hypervisor{
{
ObjectMeta: metav1.ObjectMeta{Name: "host1"},
- Spec: hv1.HypervisorSpec{Aggregates: []string{"aggregate1"}},
+ Status: hv1.HypervisorStatus{Aggregates: []hv1.Aggregate{{UUID: "aggregate1"}}},
},
{
ObjectMeta: metav1.ObjectMeta{Name: "host2"},
- Spec: hv1.HypervisorSpec{Aggregates: []string{"aggregate1"}},
+ Status: hv1.HypervisorStatus{Aggregates: []hv1.Aggregate{{UUID: "aggregate1"}}},
},
{
ObjectMeta: metav1.ObjectMeta{Name: "host3"},
- Spec: hv1.HypervisorSpec{Aggregates: []string{"aggregate1"}},
+ Status: hv1.HypervisorStatus{Aggregates: []hv1.Aggregate{{UUID: "aggregate1"}}},
},
},
expectedHosts: []string{"host2"},
@@ -148,15 +148,15 @@ func TestFilterRequestedDestinationStep_Run(t *testing.T) {
hypervisors: []hv1.Hypervisor{
{
ObjectMeta: metav1.ObjectMeta{Name: "host1"},
- Spec: hv1.HypervisorSpec{Aggregates: []string{"aggregate1"}},
+ Status: hv1.HypervisorStatus{Aggregates: []hv1.Aggregate{{UUID: "aggregate1"}}},
},
{
ObjectMeta: metav1.ObjectMeta{Name: "host2"},
- Spec: hv1.HypervisorSpec{Aggregates: []string{"aggregate2"}},
+ Status: hv1.HypervisorStatus{Aggregates: []hv1.Aggregate{{UUID: "aggregate2"}}},
},
{
ObjectMeta: metav1.ObjectMeta{Name: "host3"},
- Spec: hv1.HypervisorSpec{Aggregates: []string{"aggregate1", "aggregate2"}},
+ Status: hv1.HypervisorStatus{Aggregates: []hv1.Aggregate{{UUID: "aggregate1"}, {UUID: "aggregate2"}}},
},
},
expectedHosts: []string{"host1", "host3"},
@@ -221,19 +221,19 @@ func TestFilterRequestedDestinationStep_Run(t *testing.T) {
hypervisors: []hv1.Hypervisor{
{
ObjectMeta: metav1.ObjectMeta{Name: "host1"},
- Spec: hv1.HypervisorSpec{Aggregates: []string{"aggregate1"}},
+ Status: hv1.HypervisorStatus{Aggregates: []hv1.Aggregate{{UUID: "aggregate1"}}},
},
{
ObjectMeta: metav1.ObjectMeta{Name: "host2"},
- Spec: hv1.HypervisorSpec{Aggregates: []string{"aggregate2"}},
+ Status: hv1.HypervisorStatus{Aggregates: []hv1.Aggregate{{UUID: "aggregate2"}}},
},
{
ObjectMeta: metav1.ObjectMeta{Name: "host3"},
- Spec: hv1.HypervisorSpec{Aggregates: []string{"aggregate3"}},
+ Status: hv1.HypervisorStatus{Aggregates: []hv1.Aggregate{{UUID: "aggregate3"}}},
},
{
ObjectMeta: metav1.ObjectMeta{Name: "host4"},
- Spec: hv1.HypervisorSpec{Aggregates: []string{"aggregate4"}},
+ Status: hv1.HypervisorStatus{Aggregates: []hv1.Aggregate{{UUID: "aggregate4"}}},
},
},
expectedHosts: []string{"host1", "host3"},
@@ -261,18 +261,15 @@ func TestFilterRequestedDestinationStep_Run(t *testing.T) {
hypervisors: []hv1.Hypervisor{
{
ObjectMeta: metav1.ObjectMeta{Name: "host1"},
- Spec: hv1.HypervisorSpec{Aggregates: []string{"aggregate1"}},
- Status: hv1.HypervisorStatus{Aggregates: []hv1.Aggregate{{UUID: "aggregate3"}}},
+ Status: hv1.HypervisorStatus{Aggregates: []hv1.Aggregate{{UUID: "aggregate1"}, {UUID: "aggregate3"}}},
},
{
ObjectMeta: metav1.ObjectMeta{Name: "host2"},
- Spec: hv1.HypervisorSpec{Aggregates: []string{"aggregate3"}},
- Status: hv1.HypervisorStatus{Aggregates: []hv1.Aggregate{{UUID: "aggregate2"}}},
+ Status: hv1.HypervisorStatus{Aggregates: []hv1.Aggregate{{UUID: "aggregate2"}, {UUID: "aggregate3"}}},
},
{
ObjectMeta: metav1.ObjectMeta{Name: "host3"},
- Spec: hv1.HypervisorSpec{Aggregates: []string{"aggregate4"}},
- Status: hv1.HypervisorStatus{Aggregates: []hv1.Aggregate{{UUID: "aggregate5"}}},
+ Status: hv1.HypervisorStatus{Aggregates: []hv1.Aggregate{{UUID: "aggregate4"}, {UUID: "aggregate5"}}},
},
},
expectedHosts: []string{"host1", "host2"},
@@ -301,15 +298,15 @@ func TestFilterRequestedDestinationStep_Run(t *testing.T) {
hypervisors: []hv1.Hypervisor{
{
ObjectMeta: metav1.ObjectMeta{Name: "host1"},
- Spec: hv1.HypervisorSpec{Aggregates: []string{"aggregate1"}},
+ Status: hv1.HypervisorStatus{Aggregates: []hv1.Aggregate{{UUID: "aggregate1"}}},
},
{
ObjectMeta: metav1.ObjectMeta{Name: "host2"},
- Spec: hv1.HypervisorSpec{Aggregates: []string{"aggregate1"}},
+ Status: hv1.HypervisorStatus{Aggregates: []hv1.Aggregate{{UUID: "aggregate1"}}},
},
{
ObjectMeta: metav1.ObjectMeta{Name: "host3"},
- Spec: hv1.HypervisorSpec{Aggregates: []string{"aggregate2"}},
+ Status: hv1.HypervisorStatus{Aggregates: []hv1.Aggregate{{UUID: "aggregate2"}}},
},
},
expectedHosts: []string{"host2"},
@@ -337,11 +334,11 @@ func TestFilterRequestedDestinationStep_Run(t *testing.T) {
hypervisors: []hv1.Hypervisor{
{
ObjectMeta: metav1.ObjectMeta{Name: "host1"},
- Spec: hv1.HypervisorSpec{Aggregates: []string{"aggregate1"}},
+ Status: hv1.HypervisorStatus{Aggregates: []hv1.Aggregate{{UUID: "aggregate1"}}},
},
{
ObjectMeta: metav1.ObjectMeta{Name: "host2"},
- Spec: hv1.HypervisorSpec{Aggregates: []string{"aggregate1"}},
+ Status: hv1.HypervisorStatus{Aggregates: []hv1.Aggregate{{UUID: "aggregate1"}}},
},
},
expectedHosts: []string{"host1", "host2"},
@@ -369,16 +366,15 @@ func TestFilterRequestedDestinationStep_Run(t *testing.T) {
hypervisors: []hv1.Hypervisor{
{
ObjectMeta: metav1.ObjectMeta{Name: "host1"},
- Spec: hv1.HypervisorSpec{Aggregates: []string{"aggregate1"}},
+ Status: hv1.HypervisorStatus{Aggregates: []hv1.Aggregate{{UUID: "aggregate1"}}},
},
{
ObjectMeta: metav1.ObjectMeta{Name: "host2"},
- Spec: hv1.HypervisorSpec{Aggregates: []string{}},
Status: hv1.HypervisorStatus{Aggregates: []hv1.Aggregate{}},
},
{
ObjectMeta: metav1.ObjectMeta{Name: "host3"},
- Spec: hv1.HypervisorSpec{Aggregates: []string{"aggregate1"}},
+ Status: hv1.HypervisorStatus{Aggregates: []hv1.Aggregate{{UUID: "aggregate1"}}},
},
},
expectedHosts: []string{"host1", "host3"},
@@ -405,11 +401,11 @@ func TestFilterRequestedDestinationStep_Run(t *testing.T) {
hypervisors: []hv1.Hypervisor{
{
ObjectMeta: metav1.ObjectMeta{Name: "host1"},
- Spec: hv1.HypervisorSpec{Aggregates: []string{"aggregate1"}},
+ Status: hv1.HypervisorStatus{Aggregates: []hv1.Aggregate{{UUID: "aggregate1"}}},
},
{
ObjectMeta: metav1.ObjectMeta{Name: "host2"},
- Spec: hv1.HypervisorSpec{Aggregates: []string{"aggregate2"}},
+ Status: hv1.HypervisorStatus{Aggregates: []hv1.Aggregate{{UUID: "aggregate2"}}},
},
},
expectedHosts: []string{},
@@ -436,15 +432,15 @@ func TestFilterRequestedDestinationStep_Run(t *testing.T) {
hypervisors: []hv1.Hypervisor{
{
ObjectMeta: metav1.ObjectMeta{Name: "host1"},
- Spec: hv1.HypervisorSpec{Aggregates: []string{"aggregate1"}},
+ Status: hv1.HypervisorStatus{Aggregates: []hv1.Aggregate{{UUID: "aggregate1"}}},
},
{
ObjectMeta: metav1.ObjectMeta{Name: "host2"},
- Spec: hv1.HypervisorSpec{Aggregates: []string{"aggregate2"}},
+ Status: hv1.HypervisorStatus{Aggregates: []hv1.Aggregate{{UUID: "aggregate2"}}},
},
{
ObjectMeta: metav1.ObjectMeta{Name: "host-not-in-list"},
- Spec: hv1.HypervisorSpec{Aggregates: []string{"aggregate3"}},
+ Status: hv1.HypervisorStatus{Aggregates: []hv1.Aggregate{{UUID: "aggregate3"}}},
},
},
expectedHosts: []string{},
@@ -468,7 +464,7 @@ func TestFilterRequestedDestinationStep_Run(t *testing.T) {
hypervisors: []hv1.Hypervisor{
{
ObjectMeta: metav1.ObjectMeta{Name: "host1"},
- Spec: hv1.HypervisorSpec{Aggregates: []string{"aggregate1"}},
+ Status: hv1.HypervisorStatus{Aggregates: []hv1.Aggregate{{UUID: "aggregate1"}}},
},
},
expectedHosts: []string{},
@@ -608,15 +604,15 @@ func TestFilterRequestedDestinationStepOpts_Combined(t *testing.T) {
hypervisors: []hv1.Hypervisor{
{
ObjectMeta: metav1.ObjectMeta{Name: "host1"},
- Spec: hv1.HypervisorSpec{Aggregates: []string{"az-west"}},
+ Status: hv1.HypervisorStatus{Aggregates: []hv1.Aggregate{{UUID: "az-west"}}},
},
{
ObjectMeta: metav1.ObjectMeta{Name: "host2"},
- Spec: hv1.HypervisorSpec{Aggregates: []string{"az-east"}},
+ Status: hv1.HypervisorStatus{Aggregates: []hv1.Aggregate{{UUID: "az-east"}}},
},
{
ObjectMeta: metav1.ObjectMeta{Name: "host3"},
- Spec: hv1.HypervisorSpec{Aggregates: []string{"az-west"}},
+ Status: hv1.HypervisorStatus{Aggregates: []hv1.Aggregate{{UUID: "az-west"}}},
},
},
ignoredAggregates: []string{"az-west"},
@@ -646,15 +642,15 @@ func TestFilterRequestedDestinationStepOpts_Combined(t *testing.T) {
hypervisors: []hv1.Hypervisor{
{
ObjectMeta: metav1.ObjectMeta{Name: "host1"},
- Spec: hv1.HypervisorSpec{Aggregates: []string{"production"}},
+ Status: hv1.HypervisorStatus{Aggregates: []hv1.Aggregate{{UUID: "production"}}},
},
{
ObjectMeta: metav1.ObjectMeta{Name: "host2"},
- Spec: hv1.HypervisorSpec{Aggregates: []string{"production"}},
+ Status: hv1.HypervisorStatus{Aggregates: []hv1.Aggregate{{UUID: "production"}}},
},
{
ObjectMeta: metav1.ObjectMeta{Name: "host3"},
- Spec: hv1.HypervisorSpec{Aggregates: []string{"staging"}},
+ Status: hv1.HypervisorStatus{Aggregates: []hv1.Aggregate{{UUID: "staging"}}},
},
},
// az-west is ignored, so only production is considered
From e33d1b291845f1b6dfed1b23ac8440afbe769159 Mon Sep 17 00:00:00 2001
From: Philipp Matthes
Date: Mon, 9 Mar 2026 09:01:21 +0100
Subject: [PATCH 17/18] Bump bundles to 0.0.38 and core to 0.0.25 [skip ci]
---
helm/bundles/cortex-cinder/Chart.yaml | 6 +++---
helm/bundles/cortex-crds/Chart.yaml | 4 ++--
helm/bundles/cortex-ironcore/Chart.yaml | 4 ++--
helm/bundles/cortex-manila/Chart.yaml | 6 +++---
helm/bundles/cortex-nova/Chart.yaml | 6 +++---
helm/bundles/cortex-pods/Chart.yaml | 4 ++--
helm/library/cortex/Chart.yaml | 2 +-
7 files changed, 16 insertions(+), 16 deletions(-)
diff --git a/helm/bundles/cortex-cinder/Chart.yaml b/helm/bundles/cortex-cinder/Chart.yaml
index 4dca3668..b81e033d 100644
--- a/helm/bundles/cortex-cinder/Chart.yaml
+++ b/helm/bundles/cortex-cinder/Chart.yaml
@@ -5,7 +5,7 @@ apiVersion: v2
name: cortex-cinder
description: A Helm chart deploying Cortex for Cinder.
type: application
-version: 0.0.37
+version: 0.0.38
appVersion: 0.1.0
dependencies:
# from: file://../../library/cortex-postgres
@@ -16,12 +16,12 @@ dependencies:
# from: file://../../library/cortex
- name: cortex
repository: oci://ghcr.io/cobaltcore-dev/cortex/charts
- version: 0.0.24
+ version: 0.0.25
alias: cortex-knowledge-controllers
# from: file://../../library/cortex
- name: cortex
repository: oci://ghcr.io/cobaltcore-dev/cortex/charts
- version: 0.0.24
+ version: 0.0.25
alias: cortex-scheduling-controllers
# Owner info adds a configmap to the kubernetes cluster with information on
diff --git a/helm/bundles/cortex-crds/Chart.yaml b/helm/bundles/cortex-crds/Chart.yaml
index 45cc25c7..5427ac30 100644
--- a/helm/bundles/cortex-crds/Chart.yaml
+++ b/helm/bundles/cortex-crds/Chart.yaml
@@ -5,13 +5,13 @@ apiVersion: v2
name: cortex-crds
description: A Helm chart deploying Cortex CRDs.
type: application
-version: 0.0.37
+version: 0.0.38
appVersion: 0.1.0
dependencies:
# from: file://../../library/cortex
- name: cortex
repository: oci://ghcr.io/cobaltcore-dev/cortex/charts
- version: 0.0.24
+ version: 0.0.25
# Owner info adds a configmap to the kubernetes cluster with information on
# the service owner. This makes it easier to find out who to contact in case
diff --git a/helm/bundles/cortex-ironcore/Chart.yaml b/helm/bundles/cortex-ironcore/Chart.yaml
index 6b5d59ee..a555ba20 100644
--- a/helm/bundles/cortex-ironcore/Chart.yaml
+++ b/helm/bundles/cortex-ironcore/Chart.yaml
@@ -5,13 +5,13 @@ apiVersion: v2
name: cortex-ironcore
description: A Helm chart deploying Cortex for IronCore.
type: application
-version: 0.0.37
+version: 0.0.38
appVersion: 0.1.0
dependencies:
# from: file://../../library/cortex
- name: cortex
repository: oci://ghcr.io/cobaltcore-dev/cortex/charts
- version: 0.0.24
+ version: 0.0.25
# Owner info adds a configmap to the kubernetes cluster with information on
# the service owner. This makes it easier to find out who to contact in case
diff --git a/helm/bundles/cortex-manila/Chart.yaml b/helm/bundles/cortex-manila/Chart.yaml
index ce88b451..98e7f587 100644
--- a/helm/bundles/cortex-manila/Chart.yaml
+++ b/helm/bundles/cortex-manila/Chart.yaml
@@ -5,7 +5,7 @@ apiVersion: v2
name: cortex-manila
description: A Helm chart deploying Cortex for Manila.
type: application
-version: 0.0.37
+version: 0.0.38
appVersion: 0.1.0
dependencies:
# from: file://../../library/cortex-postgres
@@ -16,12 +16,12 @@ dependencies:
# from: file://../../library/cortex
- name: cortex
repository: oci://ghcr.io/cobaltcore-dev/cortex/charts
- version: 0.0.24
+ version: 0.0.25
alias: cortex-knowledge-controllers
# from: file://../../library/cortex
- name: cortex
repository: oci://ghcr.io/cobaltcore-dev/cortex/charts
- version: 0.0.24
+ version: 0.0.25
alias: cortex-scheduling-controllers
# Owner info adds a configmap to the kubernetes cluster with information on
diff --git a/helm/bundles/cortex-nova/Chart.yaml b/helm/bundles/cortex-nova/Chart.yaml
index 1d66f8e2..ec1c16b2 100644
--- a/helm/bundles/cortex-nova/Chart.yaml
+++ b/helm/bundles/cortex-nova/Chart.yaml
@@ -5,7 +5,7 @@ apiVersion: v2
name: cortex-nova
description: A Helm chart deploying Cortex for Nova.
type: application
-version: 0.0.37
+version: 0.0.38
appVersion: 0.1.0
dependencies:
# from: file://../../library/cortex-postgres
@@ -16,12 +16,12 @@ dependencies:
# from: file://../../library/cortex
- name: cortex
repository: oci://ghcr.io/cobaltcore-dev/cortex/charts
- version: 0.0.24
+ version: 0.0.25
alias: cortex-knowledge-controllers
# from: file://../../library/cortex
- name: cortex
repository: oci://ghcr.io/cobaltcore-dev/cortex/charts
- version: 0.0.24
+ version: 0.0.25
alias: cortex-scheduling-controllers
# Owner info adds a configmap to the kubernetes cluster with information on
diff --git a/helm/bundles/cortex-pods/Chart.yaml b/helm/bundles/cortex-pods/Chart.yaml
index 223914ee..949a2493 100644
--- a/helm/bundles/cortex-pods/Chart.yaml
+++ b/helm/bundles/cortex-pods/Chart.yaml
@@ -5,13 +5,13 @@ apiVersion: v2
name: cortex-pods
description: A Helm chart deploying Cortex for Pods.
type: application
-version: 0.0.37
+version: 0.0.38
appVersion: 0.1.0
dependencies:
# from: file://../../library/cortex
- name: cortex
repository: oci://ghcr.io/cobaltcore-dev/cortex/charts
- version: 0.0.24
+ version: 0.0.25
# Owner info adds a configmap to the kubernetes cluster with information on
# the service owner. This makes it easier to find out who to contact in case
diff --git a/helm/library/cortex/Chart.yaml b/helm/library/cortex/Chart.yaml
index c979bff8..e357779e 100644
--- a/helm/library/cortex/Chart.yaml
+++ b/helm/library/cortex/Chart.yaml
@@ -2,7 +2,7 @@ apiVersion: v2
name: cortex
description: A Helm chart to distribute cortex.
type: application
-version: 0.0.24
+version: 0.0.25
appVersion: "sha-87a325cf"
icon: "https://example.com/icon.png"
dependencies: []
From e8b5e3dd94b48d2be5a08f3dec94d0a604bae74a Mon Sep 17 00:00:00 2001
From: Philipp Matthes
Date: Mon, 9 Mar 2026 09:29:33 +0100
Subject: [PATCH 18/18] Bump cortex image version to sha-349d742b [skip ci]
---
helm/library/cortex/Chart.yaml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/helm/library/cortex/Chart.yaml b/helm/library/cortex/Chart.yaml
index e357779e..684bbd75 100644
--- a/helm/library/cortex/Chart.yaml
+++ b/helm/library/cortex/Chart.yaml
@@ -3,6 +3,6 @@ name: cortex
description: A Helm chart to distribute cortex.
type: application
version: 0.0.25
-appVersion: "sha-87a325cf"
+appVersion: "sha-349d742b"
icon: "https://example.com/icon.png"
dependencies: []