Skip to content

Commit

Permalink
--skip-source-validation works with preflight validation
Browse files Browse the repository at this point in the history
  • Loading branch information
rrpolanco committed Dec 9, 2022
1 parent 25f7358 commit b8382ca
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 11 deletions.
10 changes: 7 additions & 3 deletions pkg/preflight/validate.go
Expand Up @@ -42,7 +42,7 @@ type ValidationFailure struct {
// Validate runs preflight check on storage volumes returning a list of failures
func Validate(ctx context.Context, w *log.Logger, clientset k8sclient.Interface, options migrate.Options) ([]ValidationFailure, error) {
// validate storage classes
scFailures, err := validateStorageClasses(ctx, w, clientset, options.SourceSCName, options.DestSCName)
scFailures, err := validateStorageClasses(ctx, w, clientset, options.SourceSCName, options.DestSCName, options.SkipSourceValidation)
if err != nil {
return nil, fmt.Errorf("failed to validate storage classes: %w", err)
}
Expand Down Expand Up @@ -111,7 +111,7 @@ func validateVolumeAccessModes(ctx context.Context, l *log.Logger, client k8scli

// validateStorageClasses returns any failures encountered when discovering the source and destination
// storage classes
func validateStorageClasses(ctx context.Context, l *log.Logger, clientset k8sclient.Interface, sourceSCName, destSCName string) ([]ValidationFailure, error) {
func validateStorageClasses(ctx context.Context, l *log.Logger, clientset k8sclient.Interface, sourceSCName, destSCName string, skipSourceValidation bool) ([]ValidationFailure, error) {
// get storage providers
storageClasses, err := clientset.StorageV1().StorageClasses().List(ctx, metav1.ListOptions{})
if err != nil {
Expand All @@ -129,7 +129,11 @@ func validateStorageClasses(ctx context.Context, l *log.Logger, clientset k8scli
}
}
if !sourceScFound {
scFailures = append(scFailures, ValidationFailure{Resource: "sc/" + sourceSCName, Message: "Resource not found"})
if skipSourceValidation {
l.Printf("Warning: unable to find source Storage Class %s, but continuing anyways", sourceSCName)
} else {
scFailures = append(scFailures, ValidationFailure{Resource: "sc/" + sourceSCName, Message: "Resource not found"})
}
}
if !destScFound {
scFailures = append(scFailures, ValidationFailure{Resource: "sc/" + destSCName, Message: "Resource not found"})
Expand Down
30 changes: 22 additions & 8 deletions pkg/preflight/validate_test.go
Expand Up @@ -871,12 +871,13 @@ func Test_pvcsForStorageClass(t *testing.T) {

func Test_validateStorageClasses(t *testing.T) {
for _, tt := range []struct {
name string
resources []runtime.Object
sourceSC string
destSC string
wantErr bool
expected []ValidationFailure
name string
resources []runtime.Object
sourceSC string
destSC string
wantErr bool
expected []ValidationFailure
skipSourceSCValidation bool
}{
{
name: "When both StorageClasses exist and are distinct expect no failures",
Expand Down Expand Up @@ -931,18 +932,31 @@ func Test_validateStorageClasses(t *testing.T) {
},
},
},
{
name: "When source storage class does not exist and skip storage class validation is enabled expect no failure",
sourceSC: "sourcesc",
destSC: "destsc",
skipSourceSCValidation: true,
resources: []runtime.Object{
&storagev1.StorageClass{
ObjectMeta: metav1.ObjectMeta{
Name: "destsc",
},
},
},
},
} {
t.Run(tt.name, func(t *testing.T) {
req := require.New(t)
clientset := fake.NewSimpleClientset(tt.resources...)
logger := log.New(io.Discard, "", 0)
result, err := validateStorageClasses(context.Background(), logger, clientset, tt.sourceSC, tt.destSC)
result, err := validateStorageClasses(context.Background(), logger, clientset, tt.sourceSC, tt.destSC, tt.skipSourceSCValidation)
if !tt.wantErr {
req.NoError(err)
} else {
req.Error(err)
}
req.Equal(result, tt.expected)
req.Equal(tt.expected, result)
})
}
}

0 comments on commit b8382ca

Please sign in to comment.