Files
cozystack/internal/gpu/config.go
Aleksei Sviridkin ef53ba9070 fix(gpu): keep template device names and marks within API limits
A VMI name can be a 253-character DNS subdomain, and worker VMIs
named after Cluster API machines do grow long. Carried as a label
value it fails the 63-character limit, and with a suffix appended it
fails the name limit, so the webhook could not create the template
device at all. The mark is now a plain "true", and a name too long
for the suffix is shortened with a hash of the full VMI name.

The device-reference parser also refused nothing after the JSON list,
so a malformed annotation could pass as valid.

Fixes: a11737a2dd ("feat(gpu): fix the shared GPU keys, settings and binding contract")

Assisted-by: LLM
Signed-off-by: Aleksei Sviridkin <f@lex.la>
2026-10-20 15:42:36 +03:00

49 lines
1.7 KiB
Go

/*
Copyright 2026 The Cozystack Authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package gpu
import "time"
// Config is the GPU feature configuration cozystack-controller takes from
// its flags.
type Config struct {
// Enabled turns on everything that watches KubeVirt objects: binder
// placement, the VMI and pod webhooks, VMI garbage collection. The
// gpu.cozystack.io lifecycle paths (finalizers, usage-record cleanup)
// run regardless, so disabling the feature never hangs a deletion.
Enabled bool
// ResourceNames is the hoster's gpu.resourceNames list. The effective
// set adds class and agent-reported names (model.ResourceNames).
ResourceNames []string
// RawResourceNames is the hoster's gpu.rawResourceNames; empty means
// RawNamesAllowed.
RawResourceNames RawNamesPolicy
// LostCapacityGrace is how long a device stays missing or unhealthy, or
// a node NotReady, before the node has lost capacity. kubelet reports
// zero allocatable after every restart, so it must outlast a plugin
// re-registration.
LostCapacityGrace time.Duration
// AttachmentGrace is how long an attachment, or a template device, may
// wait for its VMI to appear. It must exceed the API server request
// timeout.
AttachmentGrace time.Duration
}