Skip to content

Commit 8c5cfe3

Browse files
authored
Release cortex core v0.1.2 & bundles v0.0.76 (#966)
## Release cortex core v0.1.2 & bundles v0.0.76 ### Prerequisites - [x] Merge chart-bump PR: #969 - [x] Merge changelog PR: #970 - [x] Merge changelog update PR: #974 ### cortex v0.1.2 (sha-6daa5050) Non-breaking changes: - Pre-allocate PAYG VMs into CR reservation slots on CR creation/modification (#951) - Keep failover allocation if VM missing from postgres but present on hypervisor (#909) - All datasources are synced on restart (#956) - Honor domain restrictions for CR reservation scheduling (#955) - Create InFlightReservation as part of Reservation CRD (#954) - Move committed resource status summary business logic to internal (#953) - Bypass grace period for confirmed VM departure (#925) - Track VM placements in reservations and classify no-host-found (#847) - Refactor reservations: move VMSource to shared package, unify VM data layer (#930) - Add suffix gX to postgresql (#939) - Update External dependencies to v1.9.1 (#952), v1.14.46 (#959) - Update `github.com/sapcc` (#938) ### cortex-nova v0.0.76 Includes updated chart cortex v0.1.2. - Add `keystoneSecretRef` and `ssoSecretRef` config keys for domain resolution in committed resource reservation scheduling (#955) - Add `enablePaygPreAllocation` config key for pre-allocating PAYG VMs into reservation slots (#951) ### cortex-crds v0.0.76 Includes updated chart cortex v0.1.2. ### cortex-cinder v0.0.76 Includes updated chart cortex v0.1.2. ### cortex-pods v0.0.76 Includes updated chart cortex v0.1.2. ### cortex-ironcore v0.0.76 Includes updated chart cortex v0.1.2. ### cortex-manila v0.0.76 Includes updated chart cortex v0.1.2. ### General - Switch chart appVersion bump to PR-based flow via ghcr (#943) - Track Helm chart appVersions via custom regex managers (#940) - Document candidate reservation cleanup on VM confirm (#916) - Document scheduling.Options struct fields (#941)
2 parents b5bbdbc + 4904bd0 commit 8c5cfe3

39 files changed

Lines changed: 2324 additions & 141 deletions

CHANGELOG.md

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,49 @@
11
# Changelog
22

3+
## 2026-06-23 — [#966](https://github.com/cobaltcore-dev/cortex/pull/966)
4+
5+
### cortex v0.1.2 (sha-6daa5050)
6+
7+
Non-breaking changes:
8+
- Pre-allocate PAYG VMs into CR reservation slots on CR creation/modification ([#951](https://github.com/cobaltcore-dev/cortex/pull/951))
9+
- Keep failover allocation if VM missing from postgres but present on hypervisor ([#909](https://github.com/cobaltcore-dev/cortex/pull/909))
10+
- All datasources are synced on restart ([#956](https://github.com/cobaltcore-dev/cortex/pull/956))
11+
- Honor domain restrictions for CR reservation scheduling ([#955](https://github.com/cobaltcore-dev/cortex/pull/955))
12+
- Create InFlightReservation as part of Reservation CRD ([#954](https://github.com/cobaltcore-dev/cortex/pull/954))
13+
- Move committed resource status summary business logic to internal ([#953](https://github.com/cobaltcore-dev/cortex/pull/953))
14+
- Bypass grace period for confirmed VM departure ([#925](https://github.com/cobaltcore-dev/cortex/pull/925))
15+
- Track VM placements in reservations and classify no-host-found ([#847](https://github.com/cobaltcore-dev/cortex/pull/847))
16+
- Refactor reservations: move VMSource to shared package, unify VM data layer ([#930](https://github.com/cobaltcore-dev/cortex/pull/930))
17+
- Add suffix gX to postgresql ([#939](https://github.com/cobaltcore-dev/cortex/pull/939))
18+
- Update External dependencies to v1.9.1 ([#952](https://github.com/cobaltcore-dev/cortex/pull/952)), v1.14.46 ([#959](https://github.com/cobaltcore-dev/cortex/pull/959))
19+
- Update `github.com/sapcc` ([#938](https://github.com/cobaltcore-dev/cortex/pull/938))
20+
21+
### cortex-nova v0.0.76
22+
23+
Includes updated chart cortex v0.1.2.
24+
25+
- Add `keystoneSecretRef` and `ssoSecretRef` config keys for domain resolution in committed resource reservation scheduling ([#955](https://github.com/cobaltcore-dev/cortex/pull/955))
26+
27+
### cortex-crds v0.0.76
28+
29+
Includes updated chart cortex v0.1.2.
30+
31+
### cortex-cinder v0.0.76
32+
33+
Includes updated chart cortex v0.1.2.
34+
35+
### cortex-pods v0.0.76
36+
37+
Includes updated chart cortex v0.1.2.
38+
39+
### cortex-ironcore v0.0.76
40+
41+
Includes updated chart cortex v0.1.2.
42+
43+
### cortex-manila v0.0.76
44+
45+
Includes updated chart cortex v0.1.2.
46+
347
## 2026-06-08 — [#919](https://github.com/cobaltcore-dev/cortex/pull/919)
448

549
### cortex v0.1.0 (sha-a0373875)

api/v1alpha1/reservation_types.go

Lines changed: 38 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,9 @@ const (
2121
ReservationTypeCommittedResource ReservationType = "CommittedResourceReservation"
2222
// ReservationTypeFailover is a reservation for failover capacity.
2323
ReservationTypeFailover ReservationType = "FailoverReservation"
24+
// ReservationTypeInFlight is a reservation that blocks capacity for virtual
25+
// machines that are currently being scheduled, to avoid double-booking.
26+
ReservationTypeInFlight ReservationType = "InFlightReservation"
2427
)
2528

2629
// Label keys for Reservation metadata.
@@ -35,6 +38,7 @@ const (
3538
// Reservation type label values
3639
ReservationTypeLabelCommittedResource = "committed-resource"
3740
ReservationTypeLabelFailover = "failover"
41+
ReservationTypeLabelInFlight = "in-flight"
3842
)
3943

4044
// Annotation keys for Reservation metadata.
@@ -104,10 +108,30 @@ type FailoverReservationSpec struct {
104108
ResourceGroup string `json:"resourceGroup,omitempty"`
105109
}
106110

111+
// InFlightReservationSpec defines the nature and shape of the virtual machine
112+
// that is expected to land on the designated reservation slot. This spec
113+
// carries information needed for the scheduler to produce a valid placement
114+
// for new virtual machines for the duration the virtual machine is still
115+
// in buildup.
116+
type InFlightReservationSpec struct {
117+
// VMID is the OpenStack server uuid from Nova assigned to the virtual
118+
// machine expected to land on this reservation slot.
119+
VMID string `json:"vmID,omitempty"`
120+
// UserID is the identifier of the user who owns the virtual machine.
121+
UserID string `json:"userID,omitempty"`
122+
// ProjectID is the identifier of the project/tenant that owns
123+
// the virtual machine.
124+
ProjectID string `json:"projectID,omitempty"`
125+
// Intent defines which kind of virtual machine lifecycle operation
126+
// triggered the placement of this in-flight reservation.
127+
// +kubebuilder:validation:Optional
128+
Intent SchedulingIntent `json:"intent"`
129+
}
130+
107131
// ReservationSpec defines the desired state of Reservation.
108132
type ReservationSpec struct {
109133
// Type of reservation.
110-
// +kubebuilder:validation:Enum=CommittedResourceReservation;FailoverReservation
134+
// +kubebuilder:validation:Enum=CommittedResourceReservation;FailoverReservation;InFlightReservation
111135
// +kubebuilder:validation:Required
112136
Type ReservationType `json:"type"`
113137

@@ -148,6 +172,10 @@ type ReservationSpec struct {
148172
// Only used when Type is FailoverReservation.
149173
// +kubebuilder:validation:Optional
150174
FailoverReservation *FailoverReservationSpec `json:"failoverReservation,omitempty"`
175+
176+
// InFlightReservation specifies which kind of virtual machine is expected
177+
// to land on the reserved slot. Set when Type is InFlightReservation.
178+
InFlightReservation *InFlightReservationSpec `json:"inFlightReservation,omitempty"`
151179
}
152180

153181
const (
@@ -189,6 +217,10 @@ type FailoverReservationStatus struct {
189217
AcknowledgedAt *metav1.Time `json:"acknowledgedAt,omitempty"`
190218
}
191219

220+
// InFlightReservationStatus defines the status fields specific to
221+
// in-flight reservations.
222+
type InFlightReservationStatus struct{} // No captured state for now.
223+
192224
// ReservationStatus defines the observed state of Reservation.
193225
type ReservationStatus struct {
194226
// The current status conditions of the reservation.
@@ -219,6 +251,11 @@ type ReservationStatus struct {
219251
// Only used when Type is FailoverReservation.
220252
// +kubebuilder:validation:Optional
221253
FailoverReservation *FailoverReservationStatus `json:"failoverReservation,omitempty"`
254+
255+
// InFlightReservation contains status fields specific to in-flight reservations.
256+
// Only used when Type is InFlightReservation.
257+
// +kubebuilder:validation:Optional
258+
InFlightReservation *InFlightReservationStatus `json:"inFlightReservation,omitempty"`
222259
}
223260

224261
// +kubebuilder:object:root=true

api/v1alpha1/zz_generated.deepcopy.go

Lines changed: 40 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

cmd/manager/main.go

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,12 @@ func main() {
115115
switch os.Args[1] {
116116
case "e2e-nova":
117117
novaChecksConfig := conf.GetConfigOrDie[nova.ChecksConfig]()
118+
if len(os.Args) >= 3 {
119+
if err := json.Unmarshal([]byte(os.Args[2]), &novaChecksConfig); err != nil {
120+
slog.Error("invalid json override for e2e-nova", "err", err)
121+
os.Exit(1)
122+
}
123+
}
118124
nova.RunChecks(ctx, client, novaChecksConfig)
119125
return
120126
case "e2e-cinder":
@@ -598,10 +604,11 @@ func main() {
598604
metrics.Registry.MustRegister(&crControllerMonitor)
599605

600606
if err := (&commitments.CommittedResourceController{
601-
Client: multiclusterClient,
602-
Scheme: mgr.GetScheme(),
603-
Conf: crControllerConf,
604-
Monitor: &crControllerMonitor,
607+
Client: multiclusterClient,
608+
Scheme: mgr.GetScheme(),
609+
Conf: crControllerConf,
610+
Monitor: &crControllerMonitor,
611+
VMSource: commitmentsVMSource,
605612
}).SetupWithManager(mgr, multiclusterClient); err != nil {
606613
setupLog.Error(err, "unable to create controller", "controller", "CommittedResource")
607614
os.Exit(1)

go.mod

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ require (
1010
github.com/prometheus/client_golang v1.23.2
1111
github.com/prometheus/client_model v0.6.2
1212
github.com/sapcc/go-bits v0.0.0-20260611141223-328f49772fed
13-
go.xyrillian.de/gg v1.9.0
13+
go.xyrillian.de/gg v1.10.1
1414
k8s.io/api v0.36.2
1515
k8s.io/apimachinery v0.36.2
1616
k8s.io/client-go v0.36.2
@@ -73,7 +73,7 @@ require (
7373
github.com/json-iterator/go v1.1.12 // indirect
7474
github.com/kylelemons/godebug v1.1.0 // indirect
7575
github.com/lib/pq v1.12.3
76-
github.com/mattn/go-sqlite3 v1.14.45
76+
github.com/mattn/go-sqlite3 v1.14.47
7777
github.com/moby/sys/user v0.4.0 // indirect
7878
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
7979
github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee // indirect

go.sum

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -153,8 +153,8 @@ github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0
153153
github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw=
154154
github.com/lib/pq v1.12.3 h1:tTWxr2YLKwIvK90ZXEw8GP7UFHtcbTtty8zsI+YjrfQ=
155155
github.com/lib/pq v1.12.3/go.mod h1:/p+8NSbOcwzAEI7wiMXFlgydTwcgTr3OSKMsD2BitpA=
156-
github.com/mattn/go-sqlite3 v1.14.45 h1:6KA/spDguL3KV8rnybG7ezSaE4SeMR3KC9VbUoAQaIk=
157-
github.com/mattn/go-sqlite3 v1.14.45/go.mod h1:pjEuOr8IwzLJP2MfGeTb0A35jauH+C2kbHKBr7yXKVQ=
156+
github.com/mattn/go-sqlite3 v1.14.47 h1:jOBI62gS7nKeZv+as1oGEy0+1qISgXwH/QBlR6KbfIo=
157+
github.com/mattn/go-sqlite3 v1.14.47/go.mod h1:6JTjA44L93a0QCyJef5YvlPoKXntQPjzWv5gtm9sB6w=
158158
github.com/moby/docker-image-spec v1.3.1 h1:jMKff3w6PgbfSa69GfNg+zN/XLhfXJGnEx3Nl2EsFP0=
159159
github.com/moby/docker-image-spec v1.3.1/go.mod h1:eKmb5VW8vQEh/BAr2yvVNvuiJuY6UIocYsFu/DxxRpo=
160160
github.com/moby/sys/user v0.4.0 h1:jhcMKit7SA80hivmFJcbB1vqmw//wU61Zdui2eQXuMs=
@@ -259,8 +259,8 @@ go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
259259
go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
260260
go.uber.org/zap v1.28.0 h1:IZzaP1Fv73/T/pBMLk4VutPl36uNC+OSUh3JLG3FIjo=
261261
go.uber.org/zap v1.28.0/go.mod h1:rDLpOi171uODNm/mxFcuYWxDsqWSAVkFdX4XojSKg/Q=
262-
go.xyrillian.de/gg v1.9.0 h1:vszip+UjOBaczo/s9tr6Ij2eo39pxWlVZdbBcLkzXBM=
263-
go.xyrillian.de/gg v1.9.0/go.mod h1:dj+ZhCwC6JKWyFvImhVNXQAErrRcYMUkXu6vwWYNrzQ=
262+
go.xyrillian.de/gg v1.10.1 h1:V6oSU+tl25vaRQaMy6Y3jl/0kNoY/a25x4WIk5zQFAw=
263+
go.xyrillian.de/gg v1.10.1/go.mod h1:DoO4fQSWIrBRlNlCjVyrYM0kAEBt/Jg2GkMH+cGRZ0k=
264264
go.yaml.in/yaml/v2 v2.4.4 h1:tuyd0P+2Ont/d6e2rl3be67goVK4R6deVxCUX5vyPaQ=
265265
go.yaml.in/yaml/v2 v2.4.4/go.mod h1:gMZqIpDtDqOfM0uNfy0SkpRhvUryYH0Z6wdMYcacYXQ=
266266
go.yaml.in/yaml/v3 v3.0.4 h1:tfq32ie2Jv2UxXFdLJdh3jXuOzWiL1fo0bu/FbuKpbc=

helm/bundles/cortex-cinder/Chart.yaml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ apiVersion: v2
55
name: cortex-cinder
66
description: A Helm chart deploying Cortex for Cinder.
77
type: application
8-
version: 0.0.75
8+
version: 0.0.76
99
appVersion: 0.1.0
1010
dependencies:
1111
# from: file://../../library/cortex-postgres
@@ -16,12 +16,12 @@ dependencies:
1616
# from: file://../../library/cortex
1717
- name: cortex
1818
repository: oci://ghcr.io/cobaltcore-dev/cortex/charts
19-
version: 0.1.1
19+
version: 0.1.2
2020
alias: cortex-knowledge-controllers
2121
# from: file://../../library/cortex
2222
- name: cortex
2323
repository: oci://ghcr.io/cobaltcore-dev/cortex/charts
24-
version: 0.1.1
24+
version: 0.1.2
2525
alias: cortex-scheduling-controllers
2626

2727
# Owner info adds a configmap to the kubernetes cluster with information on

helm/bundles/cortex-crds/Chart.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,13 @@ apiVersion: v2
55
name: cortex-crds
66
description: A Helm chart deploying Cortex CRDs.
77
type: application
8-
version: 0.0.75
8+
version: 0.0.76
99
appVersion: 0.1.0
1010
dependencies:
1111
# from: file://../../library/cortex
1212
- name: cortex
1313
repository: oci://ghcr.io/cobaltcore-dev/cortex/charts
14-
version: 0.1.1
14+
version: 0.1.2
1515

1616
# Owner info adds a configmap to the kubernetes cluster with information on
1717
# the service owner. This makes it easier to find out who to contact in case

helm/bundles/cortex-ironcore/Chart.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,13 @@ apiVersion: v2
55
name: cortex-ironcore
66
description: A Helm chart deploying Cortex for IronCore.
77
type: application
8-
version: 0.0.75
8+
version: 0.0.76
99
appVersion: 0.1.0
1010
dependencies:
1111
# from: file://../../library/cortex
1212
- name: cortex
1313
repository: oci://ghcr.io/cobaltcore-dev/cortex/charts
14-
version: 0.1.1
14+
version: 0.1.2
1515

1616
# Owner info adds a configmap to the kubernetes cluster with information on
1717
# the service owner. This makes it easier to find out who to contact in case

helm/bundles/cortex-manila/Chart.yaml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ apiVersion: v2
55
name: cortex-manila
66
description: A Helm chart deploying Cortex for Manila.
77
type: application
8-
version: 0.0.75
8+
version: 0.0.76
99
appVersion: 0.1.0
1010
dependencies:
1111
# from: file://../../library/cortex-postgres
@@ -16,12 +16,12 @@ dependencies:
1616
# from: file://../../library/cortex
1717
- name: cortex
1818
repository: oci://ghcr.io/cobaltcore-dev/cortex/charts
19-
version: 0.1.1
19+
version: 0.1.2
2020
alias: cortex-knowledge-controllers
2121
# from: file://../../library/cortex
2222
- name: cortex
2323
repository: oci://ghcr.io/cobaltcore-dev/cortex/charts
24-
version: 0.1.1
24+
version: 0.1.2
2525
alias: cortex-scheduling-controllers
2626

2727
# Owner info adds a configmap to the kubernetes cluster with information on

0 commit comments

Comments
 (0)