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  }