@@ -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