Files
2025-02-14 12:29:43 -05:00

58 lines
1.6 KiB
Go

package builder
import (
"context"
"k8s.io/apimachinery/pkg/runtime/schema"
"k8s.io/apiserver/pkg/admission"
)
type builderAdmission struct {
mutators map[schema.GroupVersion]APIGroupMutation
validators map[schema.GroupVersion]APIGroupValidation
}
var _ admission.MutationInterface = (*builderAdmission)(nil)
var _ admission.ValidationInterface = (*builderAdmission)(nil)
func (b *builderAdmission) Admit(ctx context.Context, a admission.Attributes, o admission.ObjectInterfaces) (err error) {
if m, ok := b.mutators[a.GetResource().GroupVersion()]; ok {
return m.Mutate(ctx, a, o)
}
return nil
}
func (b *builderAdmission) Validate(ctx context.Context, a admission.Attributes, o admission.ObjectInterfaces) (err error) {
if v, ok := b.validators[a.GetResource().GroupVersion()]; ok {
return v.Validate(ctx, a, o)
}
return nil
}
func (b *builderAdmission) Handles(operation admission.Operation) bool {
return true
}
func NewAdmissionFromBuilders(builders []APIGroupBuilder) *builderAdmission {
mutators := make(map[schema.GroupVersion]APIGroupMutation)
validators := make(map[schema.GroupVersion]APIGroupValidation)
for _, builder := range builders {
for _, gv := range GetGroupVersions(builder) {
if m, ok := builder.(APIGroupMutation); ok {
mutators[gv] = m
}
if v, ok := builder.(APIGroupValidation); ok {
validators[gv] = v
}
}
}
return NewAdmission(mutators, validators)
}
func NewAdmission(mutators map[schema.GroupVersion]APIGroupMutation, validators map[schema.GroupVersion]APIGroupValidation) *builderAdmission {
return &builderAdmission{
mutators: mutators,
validators: validators,
}
}