11package perconaservermongodb
22
33import (
4- "bytes"
54 "container/heap"
65 "context"
7- "strings"
86 "time"
97
108 "github.com/pkg/errors"
@@ -19,12 +17,9 @@ import (
1917 logf "sigs.k8s.io/controller-runtime/pkg/log"
2018
2119 "github.com/percona/percona-backup-mongodb/pbm/defs"
22- pbmVersion "github.com/percona/percona-backup-mongodb/pbm/version"
2320
2421 api "github.com/percona/percona-server-mongodb-operator/pkg/apis/psmdb/v1"
25- "github.com/percona/percona-server-mongodb-operator/pkg/k8s"
2622 "github.com/percona/percona-server-mongodb-operator/pkg/naming"
27- "github.com/percona/percona-server-mongodb-operator/pkg/psmdb"
2823 "github.com/percona/percona-server-mongodb-operator/pkg/psmdb/backup"
2924)
3025
@@ -444,117 +439,3 @@ func isPodUpToDate(pod *corev1.Pod, stsRevision, image string) bool {
444439
445440 return true
446441}
447-
448- func (r * ReconcilePerconaServerMongoDB ) reconcileBackupVersion (ctx context.Context , cr * api.PerconaServerMongoDB ) error {
449- log := logf .FromContext (ctx )
450-
451- if ! cr .Spec .Backup .Enabled {
452- return nil
453- }
454-
455- if cr .Status .State != api .AppStateReady {
456- return nil
457- }
458-
459- if cr .Status .BackupVersion != "" && cr .Status .BackupImage == cr .Spec .Backup .Image {
460- return nil
461- }
462-
463- if len (cr .Spec .Replsets ) < 1 {
464- return errors .New ("no replsets found" )
465- }
466-
467- var rs * api.ReplsetSpec
468- for _ , r := range cr .Spec .Replsets {
469- rs = r
470- break
471- }
472-
473- stsName := naming .MongodStatefulSetName (cr , rs )
474- sts := psmdb .NewStatefulSet (stsName , cr .Namespace )
475- err := r .client .Get (ctx , client .ObjectKeyFromObject (sts ), sts )
476- if err != nil {
477- return errors .Wrapf (err , "get statefulset/%s" , stsName )
478- }
479-
480- matchLabels := naming .RSLabels (cr , rs )
481- label , ok := sts .Labels [naming .LabelKubernetesComponent ]
482- if ok {
483- matchLabels [naming .LabelKubernetesComponent ] = label
484- }
485-
486- podList := corev1.PodList {}
487- if err := r .client .List (ctx ,
488- & podList ,
489- & client.ListOptions {
490- Namespace : cr .Namespace ,
491- LabelSelector : labels .SelectorFromSet (matchLabels ),
492- },
493- ); err != nil {
494- return errors .Wrap (err , "get pod list" )
495- }
496-
497- var pod * corev1.Pod
498- for _ , p := range podList .Items {
499- if ! k8s .IsPodReady (p ) {
500- continue
501- }
502-
503- if ! isPodUpToDate (& p , sts .Status .UpdateRevision , cr .Spec .Backup .Image ) {
504- continue
505- }
506-
507- pod = & p
508- break
509- }
510- if pod == nil {
511- log .V (1 ).Error (nil , "no ready pods to get pbm-agent version" )
512- return nil
513- }
514-
515- stdout := & bytes.Buffer {}
516- stderr := & bytes.Buffer {}
517- cmd := []string {"pbm-agent" , "version" , "--short" }
518-
519- err = r .clientcmd .Exec (ctx , pod , naming .ContainerBackupAgent , cmd , nil , stdout , stderr , false )
520- if err != nil {
521- return errors .Wrap (err , "get pbm-agent version" )
522- }
523-
524- // PBM v2.9.0 and above prints version to stderr, below prints it to stdout
525- stdoutStr := strings .TrimSpace (stdout .String ())
526- stderrStr := strings .TrimSpace (stderr .String ())
527- if stdoutStr != "" && stderrStr != "" {
528- log .V (1 ).Info ("pbm-agent version found in both stdout and stderr; using stdout" ,
529- "stdout" , stdoutStr , "stderr" , stderrStr )
530- cr .Status .BackupVersion = stdoutStr
531- } else if stdoutStr != "" {
532- cr .Status .BackupVersion = stdoutStr
533- } else if stderrStr != "" {
534- cr .Status .BackupVersion = stderrStr
535- } else {
536- return errors .New ("pbm-agent version not found in stdout or stderr" )
537- }
538-
539- cr .Status .BackupImage = cr .Spec .Backup .Image
540-
541- log .Info ("pbm-agent version" ,
542- "pod" , pod .Name ,
543- "image" , cr .Status .BackupImage ,
544- "version" , cr .Status .BackupVersion )
545-
546- pbmInfo := pbmVersion .Current ()
547-
548- compare , err := cr .ComparePBMAgentVersion (pbmInfo .Version )
549- if err != nil {
550- return errors .Wrap (err , "compare pbm-agent version with go module" )
551- }
552-
553- if compare != 0 {
554- log .Info ("pbm-agent version is different than the go module, this might create problems" ,
555- "pbmAgentVersion" , cr .Status .BackupVersion ,
556- "goModuleVersion" , pbmInfo .Version )
557- }
558-
559- return nil
560- }
0 commit comments