package allowed_image import ( "cloud.o-forge.io/core/oc-lib/models/utils" "cloud.o-forge.io/core/oc-lib/tools" ) // AllowedImage représente une image de conteneur autorisée à persister // sur un peer après l'exécution d'un workflow. // // La décision de rétention est entièrement locale au datacenter — // le fournisseur de processing n'a aucun levier sur cette liste. // // Règle de matching (côté oc-datacenter) : // - Registry vide = toutes les registries // - TagConstraint vide = toutes les versions // - TagConstraint non vide = exact ou glob (ex: "3.*", "1.2.3") // // Les entrées IsDefault sont créées au bootstrap et ne peuvent pas // être supprimées via l'API. type AllowedImage struct { utils.AbstractObject // Registry source (ex: "docker.io", "registry.example.com"). // Vide = wildcard, accepte n'importe quelle registry. Registry string `json:"registry,omitempty" bson:"registry,omitempty"` // Image est le nom de l'image sans registry ni tag // (ex: "natsio/nats-box", "library/alpine"). Image string `json:"image" bson:"image" validate:"required"` // TagConstraint est la contrainte sur le tag. // Vide = toutes les versions autorisées. // Supporte exact ("1.2.3") ou glob ("3.*", "*-alpine"). TagConstraint string `json:"tag_constraint,omitempty" bson:"tag_constraint,omitempty"` // IsDefault marque les entrées bootstrap insérées au démarrage. // Ces entrées ne peuvent pas être supprimées via l'API. IsDefault bool `json:"is_default,omitempty" bson:"is_default,omitempty"` } func (a *AllowedImage) StoreDraftDefault() { a.IsDraft = false // les allowed images sont actives immédiatement } func (a *AllowedImage) CanUpdate(set utils.DBObject) (bool, utils.DBObject) { return true, set } func (a *AllowedImage) CanDelete() bool { return !a.IsDefault // les entrées bootstrap sont non supprimables } func (a *AllowedImage) GetAccessor(request *tools.APIRequest) utils.Accessor { return NewAccessor(request) }