github.com/helmwave/helmwave@v0.36.4-0.20240509190856-b35563eba4c6/pkg/plan/kubedog.go (about) 1 package plan 2 3 import ( 4 "fmt" 5 6 "github.com/helmwave/helmwave/pkg/kubedog" 7 "github.com/helmwave/helmwave/pkg/release" 8 log "github.com/sirupsen/logrus" 9 "github.com/werf/kubedog/pkg/trackers/rollout/multitrack" 10 ) 11 12 type manifestGetter func(release.Config) (string, error) 13 14 func (p *Plan) kubedogSpecs( 15 kubedogConfig *kubedog.Config, 16 manifests manifestGetter, 17 ) (multitrack.MultitrackSpecs, string, error) { 18 foundContexts := make(map[string]bool) 19 var kubecontext string 20 specs := multitrack.MultitrackSpecs{} 21 22 for _, rel := range p.body.Releases { 23 kubecontext = rel.KubeContext() 24 foundContexts[kubecontext] = true 25 26 l := rel.Logger() 27 if !rel.HelmWait() { 28 l.Error("wait flag is disabled so kubedog can't correctly track this release") 29 } 30 31 m, err := manifests(rel) 32 if err != nil { 33 return specs, "", fmt.Errorf("cannot get manifests for release: %w", err) 34 } 35 36 manifest := kubedog.Parse([]byte(m)) 37 spec, err := kubedog.MakeSpecs(manifest, rel.Namespace(), kubedogConfig.TrackGeneric) 38 if err != nil { 39 return specs, "", fmt.Errorf("kubedog can't parse resources: %w", err) 40 } 41 42 l.WithFields(log.Fields{ 43 "Deployments": len(spec.Deployments), 44 "Jobs": len(spec.Jobs), 45 "DaemonSets": len(spec.DaemonSets), 46 "StatefulSets": len(spec.StatefulSets), 47 "Canaries": len(spec.Canaries), 48 "Generics": len(spec.Generics), 49 "release": rel.Uniq(), 50 }).Trace("kubedog track resources") 51 52 specs.Jobs = append(specs.Jobs, spec.Jobs...) 53 specs.Deployments = append(specs.Deployments, spec.Deployments...) 54 specs.DaemonSets = append(specs.DaemonSets, spec.DaemonSets...) 55 specs.StatefulSets = append(specs.StatefulSets, spec.StatefulSets...) 56 specs.Canaries = append(specs.Canaries, spec.Canaries...) 57 specs.Generics = append(specs.Generics, spec.Generics...) 58 } 59 60 if len(foundContexts) > 1 { 61 return specs, "", ErrMultipleKubecontexts 62 } 63 64 return specs, kubecontext, nil 65 }