Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
42 changes: 42 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,47 @@
# Changelog

## 2026-07-03 — [#1009](https://github.com/cobaltcore-dev/cortex/pull/1009)

### cortex v0.2.2 (sha-f4d7df89)

Non-breaking changes:
- Include host information in error logs when multicluster connection fails ([#997](https://github.com/cobaltcore-dev/cortex/pull/997))
- Fix Perses config for local development ([#1007](https://github.com/cobaltcore-dev/cortex/pull/1007))
- Update `github.com/sapcc/go-bits` ([#1005](https://github.com/cobaltcore-dev/cortex/pull/1005))
- Update kube-prometheus-stack Docker tag to v87.4.0 ([#998](https://github.com/cobaltcore-dev/cortex/pull/998))

### cortex-shim v0.1.5 (sha-c98ddb05)

Includes updated image sha-c98ddb05.

### cortex-nova v0.0.79

Includes updated charts cortex v0.2.2, cortex-postgres v0.6.8.

### cortex-cinder v0.0.79

Includes updated charts cortex v0.2.2, cortex-postgres v0.6.8.

### cortex-manila v0.0.79

Includes updated charts cortex v0.2.2, cortex-postgres v0.6.8.

### cortex-crds v0.0.79

Includes updated chart cortex v0.2.2.

### cortex-ironcore v0.0.79

Includes updated chart cortex v0.2.2.

### cortex-pods v0.0.79

Includes updated chart cortex v0.2.2.

### cortex-placement-shim v0.1.5

Includes updated chart cortex-shim v0.1.5.

## 2026-07-01 — [#1001](https://github.com/cobaltcore-dev/cortex/pull/1001)

### cortex v0.2.1 (sha-44b8aab7)
Expand Down
1 change: 0 additions & 1 deletion api/v1alpha1/datasource_types.go
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,6 @@ const (
NovaDatasourceTypeFlavors NovaDatasourceType = "flavors"
NovaDatasourceTypeMigrations NovaDatasourceType = "migrations"
NovaDatasourceTypeAggregates NovaDatasourceType = "aggregates"
NovaDatasourceTypeImages NovaDatasourceType = "images"
)

type NovaDatasource struct {
Expand Down
25 changes: 23 additions & 2 deletions docs/reservations/failover-reservations.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,15 +26,36 @@ The controller has two reconciliation modes:
```mermaid
flowchart TD
P1[List Hypervisors from K8s]
P1b["Build active-VM set from<br/>Hypervisor CRD Status.Instances"]
P2["List VMs from Postgres<br/>(vm_source.go)"]
P3["Remove Invalid VMs from reservations<br/>(e.g., vm:host mapping wrong or vm deleted)"]
P3["Remove Invalid VMs from reservations<br/>(e.g., vm:host mapping wrong or vm deleted)<br/>with postgres data-loss safeguard"]
P4["Remove Non-eligible VMs from reservations<br/>(via eligibility rules, reservation_eligibility.go)"]
P5[Delete Empty Reservations]
P6["Create/Assign Reservations<br/>(reservation_scheduling.go)"]

P1 --> P2 --> P3 --> P4 --> P5 --> P6
P1 --> P1b --> P2 --> P3 --> P4 --> P5 --> P6
```

#### Postgres Data-Loss Safeguard

Before removing a VM from a failover reservation because it is missing from the
postgres-derived VM source, the controller cross-checks the Hypervisor CRD
`Status.Instances`. If the VM is still reported as active on any hypervisor, its
allocation is preserved in the reservation.

This safeguard prevents a postgres data loss or restore event from cascading into
the mass deletion of all failover reservations. Without it, a wiped or partially
restored Nova database would make every VM appear "deleted," causing the
controller to empty and then garbage-collect all reservations -- leaving the
entire fleet without failover coverage until postgres recovers and the
reservations are rebuilt.

The active-VM set (`vmsOnHypervisor`) is built once per reconciliation cycle by
iterating over all Hypervisor CRD `Status.Instances` entries that are marked
active. During the "Remove Invalid VMs" step, if a VM UUID is absent from the
postgres VM list but present in this set, the allocation is kept and a log
message is emitted.


### Watch-based Reconciliation

Expand Down
2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ require (
github.com/ironcore-dev/ironcore v0.4.2
github.com/prometheus/client_golang v1.23.2
github.com/prometheus/client_model v0.6.2
github.com/sapcc/go-bits v0.0.0-20260626143732-3999ce9f8fdc
github.com/sapcc/go-bits v0.0.0-20260703101005-27edea94477c
go.xyrillian.de/gg v1.11.1
k8s.io/api v0.36.2
k8s.io/apimachinery v0.36.2
Expand Down
4 changes: 2 additions & 2 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -204,8 +204,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.24.0 h1:sGBvOMVSM1olJlyvNoQSk7NX5uatXHKkztGDBPnTWMs=
github.com/sapcc/go-api-declarations v1.24.0/go.mod h1:ZWRTijvgF8o8aHg5stgg7u4DF6jFrd0X97le/uGlZsA=
github.com/sapcc/go-bits v0.0.0-20260626143732-3999ce9f8fdc h1:oflzbbZ1C2tc0EMCwf5tETd6nlqA5TMnckihJqz7joU=
github.com/sapcc/go-bits v0.0.0-20260626143732-3999ce9f8fdc/go.mod h1:WIr0qdewi9zEDh4egX9c7zB4e6JwrzTS3AA02y0EVxk=
github.com/sapcc/go-bits v0.0.0-20260703101005-27edea94477c h1:jqVSQNGIZ+V7mP+bjKoz/OEVy5qWoGvaYCfwXfohEWw=
github.com/sapcc/go-bits v0.0.0-20260703101005-27edea94477c/go.mod h1:uchHF8FNxncTCoQYDjGSO86AuxSzgIbN5mQzM95RYOA=
github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ=
github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
github.com/spf13/cobra v1.10.2 h1:DMTTonx5m65Ic0GOoRY2c16WCbHxOOw6xxezuLaBpcU=
Expand Down
8 changes: 4 additions & 4 deletions helm/bundles/cortex-cinder/Chart.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -5,23 +5,23 @@ apiVersion: v2
name: cortex-cinder
description: A Helm chart deploying Cortex for Cinder.
type: application
version: 0.0.78
version: 0.0.79
appVersion: 0.1.0
dependencies:
# from: file://../../library/cortex-postgres
- name: cortex-postgres
repository: oci://ghcr.io/cobaltcore-dev/cortex/charts
version: 0.6.7
version: 0.6.8

# from: file://../../library/cortex
- name: cortex
repository: oci://ghcr.io/cobaltcore-dev/cortex/charts
version: 0.2.1
version: 0.2.2
alias: cortex-knowledge-controllers
# from: file://../../library/cortex
- name: cortex
repository: oci://ghcr.io/cobaltcore-dev/cortex/charts
version: 0.2.1
version: 0.2.2
alias: cortex-scheduling-controllers

# Owner info adds a configmap to the kubernetes cluster with information on
Expand Down
4 changes: 2 additions & 2 deletions helm/bundles/cortex-crds/Chart.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,13 @@ apiVersion: v2
name: cortex-crds
description: A Helm chart deploying Cortex CRDs.
type: application
version: 0.0.78
version: 0.0.79
appVersion: 0.1.0
dependencies:
# from: file://../../library/cortex
- name: cortex
repository: oci://ghcr.io/cobaltcore-dev/cortex/charts
version: 0.2.1
version: 0.2.2

# 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
Expand Down
4 changes: 2 additions & 2 deletions helm/bundles/cortex-ironcore/Chart.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,13 @@ apiVersion: v2
name: cortex-ironcore
description: A Helm chart deploying Cortex for IronCore.
type: application
version: 0.0.78
version: 0.0.79
appVersion: 0.1.0
dependencies:
# from: file://../../library/cortex
- name: cortex
repository: oci://ghcr.io/cobaltcore-dev/cortex/charts
version: 0.2.1
version: 0.2.2

# 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
Expand Down
8 changes: 4 additions & 4 deletions helm/bundles/cortex-manila/Chart.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -5,23 +5,23 @@ apiVersion: v2
name: cortex-manila
description: A Helm chart deploying Cortex for Manila.
type: application
version: 0.0.78
version: 0.0.79
appVersion: 0.1.0
dependencies:
# from: file://../../library/cortex-postgres
- name: cortex-postgres
repository: oci://ghcr.io/cobaltcore-dev/cortex/charts
version: 0.6.7
version: 0.6.8

# from: file://../../library/cortex
- name: cortex
repository: oci://ghcr.io/cobaltcore-dev/cortex/charts
version: 0.2.1
version: 0.2.2
alias: cortex-knowledge-controllers
# from: file://../../library/cortex
- name: cortex
repository: oci://ghcr.io/cobaltcore-dev/cortex/charts
version: 0.2.1
version: 0.2.2
alias: cortex-scheduling-controllers

# Owner info adds a configmap to the kubernetes cluster with information on
Expand Down
8 changes: 4 additions & 4 deletions helm/bundles/cortex-nova/Chart.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -5,23 +5,23 @@ apiVersion: v2
name: cortex-nova
description: A Helm chart deploying Cortex for Nova.
type: application
version: 0.0.78
version: 0.0.79
appVersion: 0.1.0
dependencies:
# from: file://../../library/cortex-postgres
- name: cortex-postgres
repository: oci://ghcr.io/cobaltcore-dev/cortex/charts
version: 0.6.7
version: 0.6.8

# from: file://../../library/cortex
- name: cortex
repository: oci://ghcr.io/cobaltcore-dev/cortex/charts
version: 0.2.1
version: 0.2.2
alias: cortex-knowledge-controllers
# from: file://../../library/cortex
- name: cortex
repository: oci://ghcr.io/cobaltcore-dev/cortex/charts
version: 0.2.1
version: 0.2.2
alias: cortex-scheduling-controllers

# Owner info adds a configmap to the kubernetes cluster with information on
Expand Down
24 changes: 0 additions & 24 deletions helm/bundles/cortex-nova/templates/datasources.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -337,30 +337,6 @@ spec:
---
apiVersion: cortex.cloud/v1alpha1
kind: Datasource
metadata:
name: nova-images
spec:
schedulingDomain: nova
databaseSecretRef:
name: cortex-nova-postgres
namespace: {{ .Release.Namespace }}
{{- if .Values.openstack.sso.enabled }}
ssoSecretRef:
name: cortex-nova-openstack-sso
namespace: {{ .Release.Namespace }}
{{- end }}
type: openstack
openstack:
syncInterval: 3600s
secretRef:
name: cortex-nova-openstack-keystone
namespace: {{ .Release.Namespace }}
type: nova
nova:
type: images
---
apiVersion: cortex.cloud/v1alpha1
kind: Datasource
metadata:
name: limes-project-commitments
spec:
Expand Down
4 changes: 2 additions & 2 deletions helm/bundles/cortex-placement-shim/Chart.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,13 @@ apiVersion: v2
name: cortex-placement-shim
description: A Helm chart deploying the Cortex placement shim.
type: application
version: 0.1.4
version: 0.1.5
appVersion: 0.1.0
dependencies:
# from: file://../../library/cortex-shim
- name: cortex-shim
repository: oci://ghcr.io/cobaltcore-dev/cortex/charts
version: 0.1.4
version: 0.1.5
# 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
# of issues. See: https://github.com/sapcc/helm-charts/pkgs/container/helm-charts%2Fowner-info
Expand Down
4 changes: 2 additions & 2 deletions helm/bundles/cortex-pods/Chart.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,13 @@ apiVersion: v2
name: cortex-pods
description: A Helm chart deploying Cortex for Pods.
type: application
version: 0.0.78
version: 0.0.79
appVersion: 0.1.0
dependencies:
# from: file://../../library/cortex
- name: cortex
repository: oci://ghcr.io/cobaltcore-dev/cortex/charts
version: 0.2.1
version: 0.2.2

# 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
Expand Down
2 changes: 1 addition & 1 deletion helm/dev/cortex-prometheus-operator/Chart.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -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: 87.3.0
version: 87.10.1
2 changes: 1 addition & 1 deletion helm/library/cortex-postgres/Chart.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -5,5 +5,5 @@ apiVersion: v2
name: cortex-postgres
description: Postgres setup for Cortex.
type: application
version: 0.6.7
version: 0.6.8
appVersion: "sha-af707446"
4 changes: 2 additions & 2 deletions helm/library/cortex-shim/Chart.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ apiVersion: v2
name: cortex-shim
description: A Helm chart to distribute cortex shims.
type: application
version: 0.1.4
appVersion: "sha-44b8aab7"
version: 0.1.5
appVersion: "sha-c8295850"
icon: "https://example.com/icon.png"
dependencies: []
4 changes: 2 additions & 2 deletions helm/library/cortex/Chart.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ apiVersion: v2
name: cortex
description: A Helm chart to distribute cortex.
type: application
version: 0.2.1
appVersion: "sha-44b8aab7"
version: 0.2.2
appVersion: "sha-8d888397"
icon: "https://example.com/icon.png"
dependencies: []
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,6 @@ func TestNovaDatasourceTypeConstants(t *testing.T) {
{v1alpha1.NovaDatasourceTypeFlavors, "flavors"},
{v1alpha1.NovaDatasourceTypeMigrations, "migrations"},
{v1alpha1.NovaDatasourceTypeAggregates, "aggregates"},
{v1alpha1.NovaDatasourceTypeImages, "images"},
}

for _, test := range tests {
Expand Down
Loading
Loading