github.com/argoproj/argo-events@v1.9.1/webhook/validator/sensor.go (about) 1 package validator 2 3 import ( 4 "context" 5 "fmt" 6 7 "github.com/argoproj/argo-events/common" 8 admissionv1 "k8s.io/api/admission/v1" 9 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" 10 "k8s.io/client-go/kubernetes" 11 12 sensorcontroller "github.com/argoproj/argo-events/controllers/sensor" 13 sensorv1alpha1 "github.com/argoproj/argo-events/pkg/apis/sensor/v1alpha1" 14 eventbusclient "github.com/argoproj/argo-events/pkg/client/eventbus/clientset/versioned" 15 eventsourceclient "github.com/argoproj/argo-events/pkg/client/eventsource/clientset/versioned" 16 sensorclient "github.com/argoproj/argo-events/pkg/client/sensor/clientset/versioned" 17 ) 18 19 type sensor struct { 20 client kubernetes.Interface 21 eventBusClient eventbusclient.Interface 22 eventSourceClient eventsourceclient.Interface 23 sensorClient sensorclient.Interface 24 25 oldSensor *sensorv1alpha1.Sensor 26 newSensor *sensorv1alpha1.Sensor 27 } 28 29 // NewSensorValidator returns a validator for Sensor 30 func NewSensorValidator(client kubernetes.Interface, ebClient eventbusclient.Interface, 31 esClient eventsourceclient.Interface, sClient sensorclient.Interface, old, new *sensorv1alpha1.Sensor) Validator { 32 return &sensor{client: client, eventBusClient: ebClient, eventSourceClient: esClient, sensorClient: sClient, oldSensor: old, newSensor: new} 33 } 34 35 func (s *sensor) ValidateCreate(ctx context.Context) *admissionv1.AdmissionResponse { 36 eventBusName := common.DefaultEventBusName 37 if len(s.newSensor.Spec.EventBusName) > 0 { 38 eventBusName = s.newSensor.Spec.EventBusName 39 } 40 eventBus, err := s.eventBusClient.ArgoprojV1alpha1().EventBus(s.newSensor.Namespace).Get(ctx, eventBusName, metav1.GetOptions{}) 41 if err != nil { 42 return DeniedResponse(fmt.Sprintf("failed to get EventBus eventBusName=%s; err=%v", eventBusName, err)) 43 } 44 45 if err := sensorcontroller.ValidateSensor(s.newSensor, eventBus); err != nil { 46 return DeniedResponse(err.Error()) 47 } 48 return AllowedResponse() 49 } 50 51 func (s *sensor) ValidateUpdate(ctx context.Context) *admissionv1.AdmissionResponse { 52 if s.oldSensor.Generation == s.newSensor.Generation { 53 AllowedResponse() 54 } 55 return s.ValidateCreate(ctx) 56 }