diff --git a/api/v1alpha1/runner_types.go b/api/v1alpha1/runner_types.go index 2a06dced..23bcd74e 100644 --- a/api/v1alpha1/runner_types.go +++ b/api/v1alpha1/runner_types.go @@ -21,6 +21,7 @@ import ( "fmt" "k8s.io/apimachinery/pkg/api/resource" + "k8s.io/apimachinery/pkg/util/validation/field" corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -166,8 +167,32 @@ type RunnerPodSpec struct { WorkVolumeClaimTemplate *WorkVolumeClaimTemplate `json:"workVolumeClaimTemplate,omitempty"` } +func (rs *RunnerSpec) Validate(rootPath *field.Path) field.ErrorList { + var ( + errList field.ErrorList + err error + ) + + err = rs.validateRepository() + if err != nil { + errList = append(errList, field.Invalid(rootPath.Child("repository"), rs.Repository, err.Error())) + } + + err = rs.validateWorkVolumeClaimTemplate() + if err != nil { + errList = append(errList, field.Invalid(rootPath.Child("workVolumeClaimTemplate"), rs.WorkVolumeClaimTemplate, err.Error())) + } + + err = rs.validateIsServiceAccountNameSet() + if err != nil { + errList = append(errList, field.Invalid(rootPath.Child("serviceAccountName"), rs.ServiceAccountName, err.Error())) + } + + return errList +} + // ValidateRepository validates repository field. -func (rs *RunnerSpec) ValidateRepository() error { +func (rs *RunnerSpec) validateRepository() error { // Enterprise, Organization and repository are both exclusive. foundCount := 0 if len(rs.Organization) > 0 { @@ -189,7 +214,7 @@ func (rs *RunnerSpec) ValidateRepository() error { return nil } -func (rs *RunnerSpec) ValidateWorkVolumeClaimTemplate() error { +func (rs *RunnerSpec) validateWorkVolumeClaimTemplate() error { if rs.ContainerMode != "kubernetes" { return nil } @@ -201,7 +226,7 @@ func (rs *RunnerSpec) ValidateWorkVolumeClaimTemplate() error { return rs.WorkVolumeClaimTemplate.validate() } -func (rs *RunnerSpec) ValidateIsServiceAccountNameSet() error { +func (rs *RunnerSpec) validateIsServiceAccountNameSet() error { if rs.ContainerMode != "kubernetes" { return nil } diff --git a/api/v1alpha1/runner_webhook.go b/api/v1alpha1/runner_webhook.go index be833cf1..414bbec1 100644 --- a/api/v1alpha1/runner_webhook.go +++ b/api/v1alpha1/runner_webhook.go @@ -66,25 +66,7 @@ func (r *Runner) ValidateDelete() error { // Validate validates resource spec. func (r *Runner) Validate() error { - var ( - errList field.ErrorList - err error - ) - - err = r.Spec.ValidateRepository() - if err != nil { - errList = append(errList, field.Invalid(field.NewPath("spec", "repository"), r.Spec.Repository, err.Error())) - } - - err = r.Spec.ValidateWorkVolumeClaimTemplate() - if err != nil { - errList = append(errList, field.Invalid(field.NewPath("spec", "workVolumeClaimTemplate"), r.Spec.WorkVolumeClaimTemplate, err.Error())) - } - - err = r.Spec.ValidateIsServiceAccountNameSet() - if err != nil { - errList = append(errList, field.Invalid(field.NewPath("spec", "serviceAccountName"), r.Spec.ServiceAccountName, err.Error())) - } + errList := r.Spec.Validate(field.NewPath("spec")) if len(errList) > 0 { return apierrors.NewInvalid(r.GroupVersionKind().GroupKind(), r.Name, errList) diff --git a/api/v1alpha1/runnerdeployment_webhook.go b/api/v1alpha1/runnerdeployment_webhook.go index d0242899..68cbc99f 100644 --- a/api/v1alpha1/runnerdeployment_webhook.go +++ b/api/v1alpha1/runnerdeployment_webhook.go @@ -66,25 +66,7 @@ func (r *RunnerDeployment) ValidateDelete() error { // Validate validates resource spec. func (r *RunnerDeployment) Validate() error { - var ( - errList field.ErrorList - err error - ) - - err = r.Spec.Template.Spec.ValidateRepository() - if err != nil { - errList = append(errList, field.Invalid(field.NewPath("spec", "template", "spec", "repository"), r.Spec.Template.Spec.Repository, err.Error())) - } - - err = r.Spec.Template.Spec.ValidateWorkVolumeClaimTemplate() - if err != nil { - errList = append(errList, field.Invalid(field.NewPath("spec", "template", "spec", "workVolumeClaimTemplate"), r.Spec.Template.Spec.WorkVolumeClaimTemplate, err.Error())) - } - - err = r.Spec.Template.Spec.ValidateIsServiceAccountNameSet() - if err != nil { - errList = append(errList, field.Invalid(field.NewPath("spec", "template", "spec", "serviceAccountName"), r.Spec.Template.Spec.ServiceAccountName, err.Error())) - } + errList := r.Spec.Template.Spec.Validate(field.NewPath("spec", "template", "spec")) if len(errList) > 0 { return apierrors.NewInvalid(r.GroupVersionKind().GroupKind(), r.Name, errList) diff --git a/api/v1alpha1/runnerreplicaset_webhook.go b/api/v1alpha1/runnerreplicaset_webhook.go index 3a970da8..8496ea2d 100644 --- a/api/v1alpha1/runnerreplicaset_webhook.go +++ b/api/v1alpha1/runnerreplicaset_webhook.go @@ -66,25 +66,7 @@ func (r *RunnerReplicaSet) ValidateDelete() error { // Validate validates resource spec. func (r *RunnerReplicaSet) Validate() error { - var ( - errList field.ErrorList - err error - ) - - err = r.Spec.Template.Spec.ValidateRepository() - if err != nil { - errList = append(errList, field.Invalid(field.NewPath("spec", "template", "spec", "repository"), r.Spec.Template.Spec.Repository, err.Error())) - } - - err = r.Spec.Template.Spec.ValidateWorkVolumeClaimTemplate() - if err != nil { - errList = append(errList, field.Invalid(field.NewPath("spec", "template", "spec", "workVolumeClaimTemplate"), r.Spec.Template.Spec.WorkVolumeClaimTemplate, err.Error())) - } - - err = r.Spec.Template.Spec.ValidateIsServiceAccountNameSet() - if err != nil { - errList = append(errList, field.Invalid(field.NewPath("spec", "template", "spec", "serviceAccountName"), r.Spec.Template.Spec.ServiceAccountName, err.Error())) - } + errList := r.Spec.Template.Spec.Validate(field.NewPath("spec", "template", "spec")) if len(errList) > 0 { return apierrors.NewInvalid(r.GroupVersionKind().GroupKind(), r.Name, errList)