diff --git a/datastore/longhorn.go b/datastore/longhorn.go index 893303b584..b7ae641d27 100644 --- a/datastore/longhorn.go +++ b/datastore/longhorn.go @@ -301,7 +301,7 @@ func (s *DataStore) ValidateSetting(name, value string) (err error) { } return fmt.Errorf("cannot modify BackupTarget since there are existing standby volumes: %v", standbyVolumeNames) } - if err := s.ValidateBackupTargetURL(value); err != nil { + if err := s.ValidateBackupTargetURL(types.DefaultBackupTargetName, value); err != nil { return err } case types.SettingNameBackupTargetCredentialSecret: @@ -4281,7 +4281,7 @@ func (s *DataStore) RemoveFinalizerForBackupTarget(backupTarget *longhorn.Backup } // ValidateBackupTargetURL checks if the given backup target URL is already used by other backup targets -func (s *DataStore) ValidateBackupTargetURL(backupTargetURL string) error { +func (s *DataStore) ValidateBackupTargetURL(backupTargetName, backupTargetURL string) error { if backupTargetURL == "" { return nil } @@ -4293,7 +4293,7 @@ func (s *DataStore) ValidateBackupTargetURL(backupTargetURL string) error { if err := checkBackupTargetURLFormat(u); err != nil { return err } - if err := s.validateBackupTargetURLExisting(u); err != nil { + if err := s.validateBackupTargetURLExisting(backupTargetName, u); err != nil { return err } @@ -4317,7 +4317,7 @@ func checkBackupTargetURLFormat(u *url.URL) error { } // validateBackupTargetURLExisting checks if the given backup target URL is already used by other backup targets -func (s *DataStore) validateBackupTargetURLExisting(u *url.URL) error { +func (s *DataStore) validateBackupTargetURLExisting(backupTargetName string, u *url.URL) error { newBackupTargetPath, err := getBackupTargetPath(u) if err != nil { return err @@ -4340,7 +4340,7 @@ func (s *DataStore) validateBackupTargetURLExisting(u *url.URL) error { if err != nil { return err } - if oldBackupTargetPath == newBackupTargetPath { + if oldBackupTargetPath == newBackupTargetPath && backupTargetName != bt.Name { return fmt.Errorf("url %s is the same to backup target %v", u.String(), bt.Name) } } diff --git a/webhook/resources/backuptarget/validator.go b/webhook/resources/backuptarget/validator.go index 12a9c0fe29..5417bc718d 100644 --- a/webhook/resources/backuptarget/validator.go +++ b/webhook/resources/backuptarget/validator.go @@ -53,7 +53,7 @@ func (b *backupTargetValidator) Create(request *admission.Request, newObj runtim return werror.NewInvalidError(fmt.Sprintf("invalid name %v", backupTarget.Name), "") } - if err := b.ds.ValidateBackupTargetURL(backupTarget.Spec.BackupTargetURL); err != nil { + if err := b.ds.ValidateBackupTargetURL(backupTarget.Name, backupTarget.Spec.BackupTargetURL); err != nil { return werror.NewInvalidError(err.Error(), "") } @@ -100,7 +100,7 @@ func (b *backupTargetValidator) Update(request *admission.Request, oldObj runtim secretChanged := oldBackupTarget.Spec.CredentialSecret != newBackupTarget.Spec.CredentialSecret if urlChanged { - if err := b.ds.ValidateBackupTargetURL(newBackupTarget.Spec.BackupTargetURL); err != nil { + if err := b.ds.ValidateBackupTargetURL(newBackupTarget.Name, newBackupTarget.Spec.BackupTargetURL); err != nil { return werror.NewInvalidError(err.Error(), "") } }