Skip to content

Commit 4128103

Browse files
authored
Update revalidation status correctly (#1205)
1 parent 28486a5 commit 4128103

File tree

1 file changed

+42
-20
lines changed

1 file changed

+42
-20
lines changed

pkg/vpwned/server/vjailbreak_proxy.go

Lines changed: 42 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -409,11 +409,11 @@ func (p *vjailbreakProxy) RevalidateCredentials(ctx context.Context, in *api.Rev
409409
vmwcreds.Status.VMwareValidationStatus = "Failed"
410410
vmwcreds.Status.VMwareValidationMessage = result.Message
411411
logrus.WithFields(logrus.Fields{"func": fn, "name": name, "namespace": namespace, "message": result.Message}).Warn("VMware validation failed")
412-
}
413412

414-
if err := p.K8sClient.Status().Update(ctx, vmwcreds); err != nil {
415-
logrus.WithFields(logrus.Fields{"func": fn, "name": name, "namespace": namespace}).WithError(err).Error("Failed to update VMwareCreds status")
416-
return nil, fmt.Errorf("failed to update VMwareCreds status: %w", err)
413+
if err := p.K8sClient.Status().Update(ctx, vmwcreds); err != nil {
414+
logrus.WithFields(logrus.Fields{"func": fn, "name": name, "namespace": namespace}).WithError(err).Error("Failed to update VMwareCreds status")
415+
return nil, fmt.Errorf("failed to update VMwareCreds status: %w", err)
416+
}
417417
}
418418

419419
responseMsg := fmt.Sprintf("Validation completed for %s: %s", name, result.Message)
@@ -434,36 +434,58 @@ func (p *vjailbreakProxy) RevalidateCredentials(ctx context.Context, in *api.Rev
434434
oscreds.Status.OpenStackValidationMessage = result.Message
435435
logrus.WithFields(logrus.Fields{"func": fn, "name": name, "namespace": namespace}).Info("OpenStack validation succeeded")
436436

437+
// Update status immediately after validation succeeds
438+
if err := p.K8sClient.Status().Update(ctx, oscreds); err != nil {
439+
logrus.WithFields(logrus.Fields{"func": fn, "name": name, "namespace": namespace}).WithError(err).Error("Failed to update OpenstackCreds status after success")
440+
return nil, fmt.Errorf("failed to update status: %w", err)
441+
}
442+
437443
// Fetch resources post-validation
438444
logrus.WithFields(logrus.Fields{"func": fn, "name": name, "namespace": namespace}).Info("Fetching OpenStack resources")
439445
resources, err := openstackvalidation.FetchResourcesPostValidation(ctx, p.K8sClient, oscreds)
440446
if err != nil {
441447
logrus.WithFields(logrus.Fields{"func": fn, "name": name, "namespace": namespace}).WithError(err).Warn("Failed to fetch OpenStack resources")
442448
} else {
443-
oscreds.Spec.Flavors = resources.Flavors
444-
445-
// Update the spec
446-
if err := p.K8sClient.Update(ctx, oscreds); err != nil {
447-
logrus.WithFields(logrus.Fields{"func": fn, "name": name, "namespace": namespace}).WithError(err).Warn("Failed to update OpenstackCreds spec")
449+
// Refetch the latest version before updating spec
450+
freshOSCreds := &vjailbreakv1alpha1.OpenstackCreds{}
451+
if err := p.K8sClient.Get(ctx, k8stypes.NamespacedName{Name: name, Namespace: namespace}, freshOSCreds); err != nil {
452+
logrus.WithFields(logrus.Fields{"func": fn, "name": name, "namespace": namespace}).WithError(err).Warn("Failed to refetch OpenstackCreds for spec update")
448453
} else {
449-
logrus.WithFields(logrus.Fields{"func": fn, "name": name, "namespace": namespace, "flavor_count": len(resources.Flavors)}).Info("Updated OpenstackCreds spec with flavors")
450-
}
451-
452-
// Update status with OpenStack info
453-
if resources.OpenstackInfo != nil {
454-
oscreds.Status.Openstack = *resources.OpenstackInfo
454+
freshOSCreds.Spec.Flavors = resources.Flavors
455+
456+
// Update the spec
457+
if err := p.K8sClient.Update(ctx, freshOSCreds); err != nil {
458+
logrus.WithFields(logrus.Fields{"func": fn, "name": name, "namespace": namespace}).WithError(err).Warn("Failed to update OpenstackCreds spec")
459+
} else {
460+
logrus.WithFields(logrus.Fields{"func": fn, "name": name, "namespace": namespace, "flavor_count": len(resources.Flavors)}).Info("Updated OpenstackCreds spec with flavors")
461+
}
462+
463+
// Refetch again before updating status with OpenStack info
464+
if err := p.K8sClient.Get(ctx, k8stypes.NamespacedName{Name: name, Namespace: namespace}, freshOSCreds); err != nil {
465+
logrus.WithFields(logrus.Fields{"func": fn, "name": name, "namespace": namespace}).WithError(err).Warn("Failed to refetch OpenstackCreds for status update")
466+
} else {
467+
// Update status with OpenStack info
468+
if resources.OpenstackInfo != nil {
469+
freshOSCreds.Status.Openstack = *resources.OpenstackInfo
470+
}
471+
472+
if err := p.K8sClient.Status().Update(ctx, freshOSCreds); err != nil {
473+
logrus.WithFields(logrus.Fields{"func": fn, "name": name, "namespace": namespace}).WithError(err).Warn("Failed to update OpenstackCreds status with OpenStack info")
474+
} else {
475+
logrus.WithFields(logrus.Fields{"func": fn, "name": name, "namespace": namespace, "flavor_count": len(resources.Flavors)}).Info("Successfully fetched and updated OpenStack resources")
476+
}
477+
}
455478
}
456-
logrus.WithFields(logrus.Fields{"func": fn, "name": name, "namespace": namespace, "flavor_count": len(resources.Flavors)}).Info("Successfully fetched OpenStack resources")
457479
}
458480
} else {
459481
oscreds.Status.OpenStackValidationStatus = "Failed"
460482
oscreds.Status.OpenStackValidationMessage = result.Message
461483
logrus.WithFields(logrus.Fields{"func": fn, "name": name, "namespace": namespace, "message": result.Message}).Warn("OpenStack validation failed")
462-
}
463484

464-
if err := p.K8sClient.Status().Update(ctx, oscreds); err != nil {
465-
logrus.WithFields(logrus.Fields{"func": fn, "name": name, "namespace": namespace}).WithError(err).Error("Failed to update OpenstackCreds status")
466-
return nil, fmt.Errorf("failed to update OpenstackCreds status: %w", err)
485+
if err := p.K8sClient.Status().Update(ctx, oscreds); err != nil {
486+
logrus.WithFields(logrus.Fields{"func": fn, "name": name, "namespace": namespace}).WithError(err).Error("Failed to update OpenstackCreds status")
487+
return nil, fmt.Errorf("failed to update OpenstackCreds status: %w", err)
488+
}
467489
}
468490

469491
responseMsg := fmt.Sprintf("Validation completed for %s: %s", name, result.Message)

0 commit comments

Comments
 (0)