Commit graph

2774 commits

Author SHA1 Message Date
Andrei Kvapil
63af323142
Release v1.0.7 (#2276)
This PR prepares the release `v1.0.7`.
2026-03-30 13:33:17 +02:00
cozystack-bot
a19de3f4f2 Prepare release v1.0.7
Signed-off-by: cozystack-bot <217169706+cozystack-bot@users.noreply.github.com>
2026-03-30 01:36:34 +00:00
Kirill Ilin
f70d03d2c2
[Backport release-1.0] [linstor] Fix swapped VMPodScrape job labels (#2288)
# Description
Backport of #2264 to `release-1.0`.
2026-03-27 17:51:57 +05:00
Kirill Ilin
58df2d6fbf
[Backport release-1.0] [piraeus-operator] Fix LINSTOR satellite alert labels and scrape flapping false positives (#2287)
# Description
Backport of #2265 to `release-1.0`.
2026-03-27 17:51:36 +05:00
Kirill Ilin
bf29c700dd
[Backport release-1.0] [dashboard] Fix EndpointSlice column definitions for Pod serving table (#2282)
# Description
Backport of #2266 to `release-1.0`.
2026-03-27 17:51:17 +05:00
Kirill Ilin
d0ad701c87
[Backport release-1.0] [system] Fix tenant RBAC for endpointslices read access (#2284)
# Description
Backport of #2257 to `release-1.0`.
2026-03-27 17:51:07 +05:00
sasha-sup
ee148f3e26 [linstor] Fix swapped VMPodScrape job labels
Signed-off-by: sasha-sup <alexsup4ik@gmail.com>
(cherry picked from commit bad59103f4)
2026-03-27 12:50:59 +00:00
sasha-sup
0ac077fde5 [piraeus-operator] Split LINSTOR controller availability and metrics alerts
Signed-off-by: sasha-sup <alexsup4ik@gmail.com>
(cherry picked from commit a052a650b0)
2026-03-27 12:50:55 +00:00
sasha-sup
125dd4997e [piraeus-operator] Add hold time to LINSTOR controller offline alert
Signed-off-by: sasha-sup <alexsup4ik@gmail.com>
(cherry picked from commit 4a92d7753c)
2026-03-27 12:50:55 +00:00
sasha-sup
683547013e [piraeus-operator] Fix LINSTOR satellite alert labels and scrape flapping false positives
Signed-off-by: sasha-sup <alexsup4ik@gmail.com>
(cherry picked from commit a562d9cb80)
2026-03-27 12:50:55 +00:00
Kirill Ilin
4f3d613219 fix(rbac): add endpointslices read access for tenant roles
Dashboard requests EndpointSlices from discovery.k8s.io API group
to display "Pod serving" section on Service details page. Without
this permission, tenant users see a 403 error.

Assisted-By: Claude AI
Signed-off-by: Kirill Ilin <stitch14@yandex.ru>
(cherry picked from commit ab92b67c3f)
2026-03-27 12:49:00 +00:00
Kirill Ilin
f37dda8f79 fix(dashboard): add EndpointSlice column definitions for Pod serving table
The service details page showed "Raw:" and "Invalid Date" in the Pod
serving table because the EnrichedTable referenced customizationId
"factory-kube-service-details-endpointslice" which had no corresponding
CustomColumnsOverride. Add column definitions for Pod, Addresses, Ready,
and Node fields.

Assisted-By: Claude AI
Signed-off-by: Kirill Ilin <stitch14@yandex.ru>
(cherry picked from commit 37f1b3b59c)
2026-03-27 12:48:55 +00:00
Kirill Ilin
f54ec49ce5
[Backport release-1.0] [dashboard] Fix broken backup menu links missing cluster context (#2270)
# Description
Backport of #2232 to `release-1.0`.
2026-03-26 18:56:13 +05:00
Kirill Ilin
f4d4e82c49
[Backport release-1.0] [platform] Add missing apps to tenant admin RBAC (#2271)
# Description
Backport of #2268 to `release-1.0`.
2026-03-26 18:55:29 +05:00
Kirill Ilin
8295eaaeac fix(platform): add missing apps to tenant admin RBAC
The cozy:tenant:admin:base ClusterRole was missing several application
resources from apps.cozystack.io, preventing tenant admins from creating
them (the "Add" button was inactive in the dashboard).

Add the following resources: foundationdbs, harbors, mongodbs, openbaos,
opensearches, qdrants, vpns.

Assisted-By: Claude AI
Signed-off-by: Kirill Ilin <stitch14@yandex.ru>
(cherry picked from commit 8e01eb5f7e)
2026-03-26 13:05:16 +00:00
Kirill Ilin
6ef4d5d97e [dashboard] Add missing baseFactoriesMapping for backup resources
Backup resources (plans, backupjobs, backups) are not
ApplicationDefinitions, so ensureNavigation() never adds their
baseFactoriesMapping entries. Without these mappings the OpenUI
frontend cannot resolve the {cluster} context for backup pages,
producing broken sidebar links with an empty cluster segment
(e.g. /openapi-ui//tenant-root/...).

Add the three missing entries to the static Navigation resource.

Assisted-By: Claude AI
Signed-off-by: Kirill Ilin <stitch14@yandex.ru>
(cherry picked from commit 398ca5844a)
2026-03-26 12:49:30 +00:00
Andrei Kvapil
fa97b3b8e6
Release v1.0.6 (#2250)
This PR prepares the release `v1.0.6`.
2026-03-20 15:47:15 +01:00
cozystack-bot
e0b669b0e0 Prepare release v1.0.6
Signed-off-by: cozystack-bot <217169706+cozystack-bot@users.noreply.github.com>
2026-03-20 01:36:04 +00:00
Andrei Kvapil
a41e120b83
Release v1.0.6 (#2237)
This PR prepares the release `v1.0.6`.
2026-03-19 07:59:45 +01:00
cozystack-bot
e61e14b300 Prepare release v1.0.6
Signed-off-by: cozystack-bot <217169706+cozystack-bot@users.noreply.github.com>
2026-03-19 01:36:21 +00:00
Andrei Kvapil
f793ebd0a3
[Backport release-1.0] [dashboard] Add secret-hash annotation to KeycloakClient for secret sync (#2240)
# Description
Backport of #2231 to `release-1.0`.
2026-03-18 12:53:25 +01:00
Kirill Ilin
e7b1256d14 [dashboard] Add secret-hash annotation to KeycloakClient for secret sync
Add secret-hash annotation to the dashboard KeycloakClient CRD resource
so that when the Kubernetes Secret value changes, the operator detects
the CRD update and reconciles the client secret in Keycloak.

Without this annotation, if the dashboard-client Secret is recreated
with a new value (e.g. after upgrade), the KeycloakClient spec remains
unchanged, the operator skips reconciliation, and Keycloak retains the
stale secret — causing authentication failures for the dashboard.

Assisted-By: Claude AI
Signed-off-by: Kirill Ilin <stitch14@yandex.ru>
(cherry picked from commit bb5ee3ea4a)
2026-03-18 10:23:41 +00:00
Andrei Kvapil
4de45cb6ac
[Backport release-1.0] [etcd] Add protective limits to defrag CronJob (#2235)
# Description
Backport of #2233 to `release-1.0`.
2026-03-17 17:40:55 +01:00
Kirill Ilin
9e80439d4e fix(etcd): add protective limits to defrag CronJob
Without concurrencyPolicy and job limits, the defrag CronJob can
accumulate hundreds of running/failed pods during cluster upgrades
when etcd is temporarily unavailable. This was observed after
upgrading to v1.1.2 where defrag jobs piled up across tenants.

Assisted-By: Claude AI
Signed-off-by: Kirill Ilin <stitch14@yandex.ru>
(cherry picked from commit ed8ba3beec)
2026-03-17 16:36:29 +00:00
Andrei Kvapil
593adcd9cf
[Backport release-1.0] [kubernetes] Fix CiliumNetworkPolicy endpointSelector for multi-node RWX volumes (#2228)
# Description
Backport of #2227 to `release-1.0`.
2026-03-17 09:31:15 +01:00
mattia-eleuteri
1dfa6c4317 [kubernetes] Fix CiliumNetworkPolicy endpointSelector for multi-node RWX volumes
When an NFS-backed RWX volume is published to multiple VMs, the
CiliumNetworkPolicy egress rule only allowed traffic from the first VM.
The endpointSelector.matchLabels was set once on creation and never
broadened, causing NFS mounts to hang on all nodes except the first.

Switch from matchLabels to matchExpressions (operator: In) so the
selector can list multiple VM names. Rebuild the selector whenever
ownerReferences are added or removed.

Signed-off-by: mattia-eleuteri <mattia@hidora.io>
(cherry picked from commit cc5ec0b7a3)
2026-03-16 16:22:05 +00:00
Andrei Kvapil
28c9ad9253
Release v1.0.5 (#2219)
This PR prepares the release `v1.0.5`.
2026-03-13 18:30:05 +01:00
cozystack-bot
8c49cf373d Prepare release v1.0.5
Signed-off-by: cozystack-bot <217169706+cozystack-bot@users.noreply.github.com>
2026-03-13 15:34:14 +00:00
Andrei Kvapil
c0ea9daca5
[Backport release-1.0] fix(api): skip OpenAPI post-processor for non-apps group versions (#2216)
# Description
Backport of #2212 to `release-1.0`.
2026-03-13 16:24:16 +01:00
Andrei Kvapil
f0134cf6ae Revert "fix(operator): requeue packages when dependencies are not ready"
This reverts commit f906a0d8ad.

Signed-off-by: Andrei Kvapil <kvapss@gmail.com>
(cherry picked from commit 2b60c010dd)
2026-03-13 15:23:34 +00:00
Andrei Kvapil
5e897ef207 fix(operator): requeue packages when dependencies are not ready
When dependencies are not ready the reconciler returned without
requeueing, relying solely on watch events to re-trigger. If a watch
event was missed (controller restart, race condition, dependency already
ready before watch setup), the package would stay stuck in
DependenciesNotReady forever.

Add RequeueAfter: 30s so dependencies are periodically rechecked.

Co-Authored-By: Claude <noreply@anthropic.com>
Signed-off-by: Andrei Kvapil <kvapss@gmail.com>
(cherry picked from commit f906a0d8ad)
2026-03-13 15:23:34 +00:00
Andrei Kvapil
c10fdc36b8 fix(api): skip OpenAPI post-processor for non-apps group versions
The OpenAPI PostProcessSpec callback is invoked for every group-version
(apps, core, version, etc.), but the Application schema cloning logic
only applies to apps.cozystack.io. When called for other GVs the base
Application schemas are absent, causing a spurious error log on every
API server start.

Return early instead of erroring when the base schemas are not found.

Co-Authored-By: Claude <noreply@anthropic.com>
Signed-off-by: Andrei Kvapil <kvapss@gmail.com>
(cherry picked from commit ee83aaa82e)
2026-03-13 15:23:34 +00:00
Andrei Kvapil
92bf13a9fc
Release v1.0.4 (#2186)
This PR prepares the release `v1.0.4`.
2026-03-10 22:58:56 +01:00
cozystack-bot
c055fcbb48 Prepare release v1.0.4
Signed-off-by: cozystack-bot <217169706+cozystack-bot@users.noreply.github.com>
2026-03-10 20:34:42 +00:00
Andrei Kvapil
81f2546f44
[Backport release-1.0] fix(dashboard): exclude hidden MarketplacePanel resources from sidebar menu (#2204)
# Description
Backport of #2177 to `release-1.0`.
2026-03-10 17:50:23 +01:00
Andrei Kvapil
3251991014
[Backport release-1.0] fix(dashboard): preserve disabled/hidden state on MarketplacePanel reconciliation (#2202)
# Description
Backport of #2176 to `release-1.0`.
2026-03-10 17:49:56 +01:00
IvanHunters
1f0df5fbcd fix(dashboard): exclude hidden MarketplacePanel resources from sidebar menu
The sidebar was generated independently from MarketplacePanels, always
showing all resources regardless of their hidden state. Fetch
MarketplacePanels during sidebar reconciliation and skip resources
where hidden=true, so hiding a resource from the marketplace also
removes it from the sidebar navigation.

Signed-off-by: IvanHunters <xorokhotnikov@gmail.com>
(cherry picked from commit 318079bf66)
2026-03-10 16:49:44 +00:00
IvanHunters
d412bd54f2 fix(dashboard): preserve disabled/hidden state on MarketplacePanel reconciliation
The controller was hardcoding disabled=false and hidden=false on every
reconciliation, overwriting any user changes made through the dashboard
UI. Move spec building inside the CreateOrUpdate mutate function to read
and preserve current disabled/hidden values from the existing resource.

Signed-off-by: IvanHunters <xorokhotnikov@gmail.com>
(cherry picked from commit e69efd80c4)
2026-03-10 16:48:33 +00:00
Andrei Kvapil
ca0282d3c7
[Backport release-1.0] fix(dashboard): fix External IPs factory EnrichedTable rendering (#2192)
# Description
Backport of #2175 to `release-1.0`.
2026-03-10 15:19:33 +01:00
Andrei Kvapil
4389b60571
[Backport release-1.0] [platform] Fix VM MAC address not preserved during migration (#2191)
# Description
Backport of #2169 to `release-1.0`.
2026-03-10 15:19:23 +01:00
IvanHunters
1eaf32812d fix(dashboard): fix External IPs factory EnrichedTable rendering
The external-ips factory used incorrect EnrichedTable properties causing
empty rows in the dashboard. Replace `clusterNamePartOfUrl` with
`cluster` and change `pathToItems` from array to dot-path string format
to match the convention used by all other working EnrichedTable instances.

Signed-off-by: IvanHunters <xorokhotnikov@gmail.com>
(cherry picked from commit 49601b166d)
2026-03-10 14:19:13 +00:00
Kirill Ilin
2658bfabda fix(migration): preserve VM MAC address during virtual-machine to vm-instance migration
Kube-OVN reads MAC address exclusively from the pod annotation
ovn.kubernetes.io/mac_address, not from the IP resource spec.macAddress.
Without pod-level annotations, migrated VMs receive a new random MAC,
breaking OS-level network config that matches by MAC (e.g. netplan).

Add a Helm lookup for the Kube-OVN IP resource in the vm-instance chart
template. When the IP resource exists, its macAddress and ipAddress are
automatically injected as pod annotations. This removes the need for
fragile Flux postRenderers on the HelmRelease — the chart itself handles
MAC/IP preservation based on actual cluster state.

Remove the postRenderers approach from migration 29 since the chart now
handles this natively.

Co-Authored-By: Claude <noreply@anthropic.com>
Signed-off-by: Kirill Ilin <stitch14@yandex.ru>
(cherry picked from commit 9a4f49238c)
2026-03-10 14:18:35 +00:00
Andrei Kvapil
448b4d9c80
[Backport release-1.0] fix(etcd-operator): replace deprecated kube-rbac-proxy image (#2183)
# Description
Backport of #2181 to `release-1.0`.
2026-03-10 12:39:09 +01:00
Andrei Kvapil
80a62bd3ee fix(etcd-operator): replace deprecated kube-rbac-proxy image
The gcr.io/kubebuilder/kube-rbac-proxy image is no longer available
since GCR was deprecated. Replace it with quay.io/brancz/kube-rbac-proxy
from the original upstream author.

Co-Authored-By: Claude <noreply@anthropic.com>
Signed-off-by: Andrei Kvapil <kvapss@gmail.com>
(cherry picked from commit 4946383cf1)
2026-03-10 11:37:08 +00:00
Andrei Kvapil
ca330b2aca
[Backport release-1.0] fix(keycloak): use management port health endpoints for probes (#2178)
# Description
Backport of #2162 to `release-1.0`.
2026-03-10 08:17:23 +01:00
mattia-eleuteri
352be923ae fix(keycloak): add startupProbe, remove initialDelaySeconds
Use a startupProbe to defer liveness/readiness checks until Keycloak
has fully started, instead of relying on initialDelaySeconds. This is
more robust for applications with variable startup times.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Signed-off-by: mattia-eleuteri <mattia@hidora.io>
(cherry picked from commit d18ed79382)
2026-03-10 07:15:32 +00:00
mattia-eleuteri
5356a5260a fix(keycloak): use management port health endpoints for probes
Keycloak 26.x exposes dedicated health endpoints on the management
port (9000) via /health/live and /health/ready. The previous probes
used GET / on port 8080 which redirects to the configured KC_HOSTNAME
(HTTPS), causing kubelet to fail the probe with "Probe terminated
redirects" and eventually kill the pod in a crashloop.

Changes:
- Add KC_HEALTH_ENABLED=true to activate health endpoints
- Expose management port 9000 in container ports
- Switch liveness probe to /health/live on port 9000
- Switch readiness probe to /health/ready on port 9000
- Increase failure thresholds for more tolerance during startup

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Signed-off-by: mattia-eleuteri <mattia@hidora.io>
(cherry picked from commit 0873691913)
2026-03-10 07:15:32 +00:00
IvanHunters
64b4be5c78
Release v1.0.3 (#2159)
This PR prepares the release `v1.0.3`.
2026-03-06 12:21:14 +03:00
cozystack-bot
c79545ba04 Prepare release v1.0.3
Signed-off-by: cozystack-bot <217169706+cozystack-bot@users.noreply.github.com>
2026-03-06 01:37:07 +00:00
Andrei Kvapil
eda0e8ee50
[Backport release-1.0] Fixed packages name conversion in migration script (#2148)
# Description
Backport of #2144 to `release-1.0`.
2026-03-05 17:25:11 +01:00