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  }