Commit graph

2842 commits

Author SHA1 Message Date
Andrei Kvapil
601b605f97
Release v1.1.5 (#2305)
This PR prepares the release `v1.1.5`.
2026-03-31 10:15:40 +02:00
cozystack-bot
8364c25787 Prepare release v1.1.5
Signed-off-by: cozystack-bot <217169706+cozystack-bot@users.noreply.github.com>
2026-03-31 01:39:31 +00:00
Andrei Kvapil
fe26737ede
[Backport release-1.1] [linstor] Preserve TCP ports during toggle-disk operations (#2300)
# Description
Backport of #2292 to `release-1.1`.
2026-03-30 20:08:34 +02:00
Andrei Kvapil
a81a3679d2 fix(linstor): preserve TCP ports during toggle-disk operations
Update fix-duplicate-tcp-ports patch to preserve existing TCP ports when
DrbdRscData is recreated during toggle-disk operations. Without this,
removeLayerData() frees ports and ensureStackDataExists() may allocate
different ones, causing port mismatches between controller and satellites
if the satellite misses the update.

Also add dh_strip_nondeterminism override in Dockerfile to fix build
failures on some JAR files.

Upstream: https://github.com/LINBIT/linstor-server/pull/476#issuecomment-4147527442

Co-Authored-By: Claude <noreply@anthropic.com>
Signed-off-by: Andrei Kvapil <kvapss@gmail.com>
(cherry picked from commit 812d4138bb)
2026-03-30 18:06:57 +00:00
Andrei Kvapil
7880d55587
[Backport release-1.1] [platform] Prevent installed packages deletion (#2298)
# Description
Backport of #2273 to `release-1.1`.
2026-03-30 20:04:55 +02:00
Myasnikov Daniil
ae72c69c1c [platform] Added resource-policy to keep installed packages
Signed-off-by: Myasnikov Daniil <myasnikovdaniil2001@gmail.com>
(cherry picked from commit a243f3d72a)
2026-03-30 16:37:02 +00:00
Andrei Kvapil
576e9ac5d7
Release v1.1.4 (#2275)
This PR prepares the release `v1.1.4`.
2026-03-30 13:33:08 +02:00
cozystack-bot
82a833267e Prepare release v1.1.4
Signed-off-by: cozystack-bot <217169706+cozystack-bot@users.noreply.github.com>
2026-03-30 01:37:40 +00:00
Kirill Ilin
9910188c5a
[Backport release-1.1] [linstor] Fix swapped VMPodScrape job labels (#2289)
# Description
Backport of #2264 to `release-1.1`.
2026-03-27 17:51:42 +05:00
Kirill Ilin
7fc6207fbc
[Backport release-1.1] [piraeus-operator] Fix LINSTOR satellite alert labels and scrape flapping false positives (#2286)
# Description
Backport of #2265 to `release-1.1`.
2026-03-27 17:51:33 +05:00
Kirill Ilin
8c24435ee7
[Backport release-1.1] [dashboard] Fix EndpointSlice column definitions for Pod serving table (#2283)
# Description
Backport of #2266 to `release-1.1`.
2026-03-27 17:51:11 +05:00
Kirill Ilin
9fb1f79d7c
[Backport release-1.1] [system] Fix tenant RBAC for endpointslices read access (#2285)
# Description
Backport of #2257 to `release-1.1`.
2026-03-27 17:51:04 +05:00
sasha-sup
890bb00e4b [linstor] Fix swapped VMPodScrape job labels
Signed-off-by: sasha-sup <alexsup4ik@gmail.com>
(cherry picked from commit bad59103f4)
2026-03-27 12:51:01 +00:00
sasha-sup
f961438c9d [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
53d603f50c [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
f7161c2af8 [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
a33c143c2d 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:02 +00:00
Kirill Ilin
002d3eb44c 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:56 +00:00
Kirill Ilin
e77ee47e15
[Backport release-1.1] [dashboard] Fix StorageClass "Error" in forms by granting RBAC read access (#2274)
# Description
Backport of #2267 to `release-1.1`.
2026-03-26 21:02:05 +05:00
Kirill Ilin
7780f50714 fix(dashboard): grant read access to storageclasses for authenticated users
The dashboard UI fetches StorageClasses via the Kubernetes API to populate
dropdowns (e.g. in the Postgres form), but the cozystack-dashboard-readonly
ClusterRole did not include storage.k8s.io/storageclasses. This caused
authenticated users to see "Error" instead of the StorageClass name.

Add get/list/watch permissions for storageclasses to the dashboard readonly
role, consistent with the existing backupclasses entry.

Assisted-By: Claude AI
Signed-off-by: Kirill Ilin <stitch14@yandex.ru>
(cherry picked from commit a7a80a7628)
2026-03-26 14:58:14 +00:00
Kirill Ilin
ec7cef8c69
[Backport release-1.1] [dashboard] Fix broken backup menu links missing cluster context (#2269)
# Description
Backport of #2232 to `release-1.1`.
2026-03-26 18:56:22 +05:00
Kirill Ilin
bcdf308226
[Backport release-1.1] [platform] Add missing apps to tenant admin RBAC (#2272)
# Description
Backport of #2268 to `release-1.1`.
2026-03-26 18:55:32 +05:00
Kirill Ilin
d5d4d86556 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
efc640103d [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
d799731923
Release v1.1.3 (#2236)
This PR prepares the release `v1.1.3`.
2026-03-19 07:59:36 +01:00
cozystack-bot
7fed9d4a42 Prepare release v1.1.3
Signed-off-by: cozystack-bot <217169706+cozystack-bot@users.noreply.github.com>
2026-03-19 01:36:21 +00:00
Andrei Kvapil
01ef9f1223
[Backport release-1.1] [dashboard] Add secret-hash annotation to KeycloakClient for secret sync (#2241)
# Description
Backport of #2231 to `release-1.1`.
2026-03-18 12:53:33 +01:00
Kirill Ilin
e4fadb50dc [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:43 +00:00
Andrei Kvapil
736790852e
[Backport release-1.1] [etcd] Add protective limits to defrag CronJob (#2234)
# Description
Backport of #2233 to `release-1.1`.
2026-03-17 17:41:04 +01:00
Kirill Ilin
6017dabaee 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:28 +00:00
Andrei Kvapil
ea641f7ec7
[Backport release-1.1] [kubernetes] Fix CiliumNetworkPolicy endpointSelector for multi-node RWX volumes (#2229)
# Description
Backport of #2227 to `release-1.1`.
2026-03-17 09:31:24 +01:00
mattia-eleuteri
2c23f1fab6 [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
2de20be50b
Release v1.1.2 (#2218)
This PR prepares the release `v1.1.2`.
2026-03-16 09:38:35 +01:00
cozystack-bot
1c87fe2004 Prepare release v1.1.2
Signed-off-by: cozystack-bot <217169706+cozystack-bot@users.noreply.github.com>
2026-03-16 01:36:47 +00:00
Andrei Kvapil
a18047fc16
[Backport release-1.1] fix(api): skip OpenAPI post-processor for non-apps group versions (#2217)
# Description
Backport of #2212 to `release-1.1`.
2026-03-13 16:24:27 +01:00
Andrei Kvapil
803d6b15ba
[Backport release-1.1] [bucket] Fix s3manager endpoint mismatch with COSI credentials (#2215)
# Description
Backport of #2211 to `release-1.1`.
2026-03-13 16:23:58 +01:00
Andrei Kvapil
c94768c64b 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
093329cdce 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
0e3c7fabff 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
IvanHunters
0ba129b4b7 [bucket] Fix s3manager endpoint to use actual S3 endpoint from BucketInfo
The deployment template was constructing the S3 endpoint from the tenant's
namespace host (e.g. s3.freedom.infra.example.com), while COSI credentials
are issued for the actual SeaweedFS endpoint (e.g. s3.infra.example.com).
This mismatch caused 'invalid credentials' errors when users tried to log
in with valid credentials from the bucket secret.

Now the endpoint is resolved from BucketInfo (same source as credentials),
with a fallback to the constructed namespace host for first-time deploys
before BucketAccess secrets are created.

Signed-off-by: IvanHunters <xorokhotnikov@gmail.com>
(cherry picked from commit f647cfd7b9)
2026-03-13 15:23:24 +00:00
Andrei Kvapil
095d3ab150
Release v1.1.1 (#2184)
This PR prepares the release `v1.1.1`.
2026-03-11 00:12:15 +01:00
cozystack-bot
b06e2cecd5 Prepare release v1.1.1
Signed-off-by: cozystack-bot <217169706+cozystack-bot@users.noreply.github.com>
2026-03-10 20:31:40 +00:00
Andrei Kvapil
b255214da0
[Backport release-1.1] fix(dashboard): exclude hidden MarketplacePanel resources from sidebar menu (#2203)
# Description
Backport of #2177 to `release-1.1`.
2026-03-10 17:50:15 +01:00
Andrei Kvapil
4c9c68b7f5
[Backport release-1.1] fix(dashboard): preserve disabled/hidden state on MarketplacePanel reconciliation (#2201)
# Description
Backport of #2176 to `release-1.1`.
2026-03-10 17:50:04 +01:00
IvanHunters
002bd20f19 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
22c46d7271 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
dce757c884
[Backport release-1.1] fix(dashboard): fix External IPs factory EnrichedTable rendering (#2193)
# Description
Backport of #2175 to `release-1.1`.
2026-03-10 15:19:42 +01:00
Andrei Kvapil
109b4a333e
[Backport release-1.1] [platform] Fix VM MAC address not preserved during migration (#2190)
# Description
Backport of #2169 to `release-1.1`.
2026-03-10 15:19:15 +01:00
IvanHunters
4dada99a92 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
fd18a699b9 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