@@ -464,18 +464,36 @@ func (r *ReconcilePerconaServerMongoDB) reconcileBackupVersion(ctx context.Conte
464464 return nil
465465 }
466466
467+ stdout := & bytes.Buffer {}
467468 stderr := & bytes.Buffer {}
468469 cmd := []string {"pbm-agent" , "version" , "--short" }
469470
470- err = r .clientcmd .Exec (ctx , pod , naming .ContainerBackupAgent , cmd , nil , nil , stderr , false )
471+ err = r .clientcmd .Exec (ctx , pod , naming .ContainerBackupAgent , cmd , nil , stdout , stderr , false )
471472 if err != nil {
472473 return errors .Wrap (err , "get pbm-agent version" )
473474 }
474475
475- cr .Status .BackupVersion = strings .TrimSpace (stderr .String ())
476+ // PBM v2.9.0 and above prints version to stderr, below prints it to stdout
477+ stdoutStr := strings .TrimSpace (stdout .String ())
478+ stderrStr := strings .TrimSpace (stderr .String ())
479+ if stdoutStr != "" && stderrStr != "" {
480+ log .V (1 ).Info ("pbm-agent version found in both stdout and stderr; using stdout" ,
481+ "stdout" , stdoutStr , "stderr" , stderrStr )
482+ cr .Status .BackupVersion = stdoutStr
483+ } else if stdoutStr != "" {
484+ cr .Status .BackupVersion = stdoutStr
485+ } else if stderrStr != "" {
486+ cr .Status .BackupVersion = stderrStr
487+ } else {
488+ return errors .New ("pbm-agent version not found in stdout or stderr" )
489+ }
490+
476491 cr .Status .BackupImage = cr .Spec .Backup .Image
477492
478- log .Info ("pbm-agent version" , "version" , cr .Status .BackupVersion , "image" , cr .Status .BackupImage , "pod" , pod .Name )
493+ log .Info ("pbm-agent version" ,
494+ "pod" , pod .Name ,
495+ "image" , cr .Status .BackupImage ,
496+ "version" , cr .Status .BackupVersion )
479497
480498 pbmInfo := pbmVersion .Current ()
481499
0 commit comments