github.com/helmwave/helmwave@v0.36.4-0.20240509190856-b35563eba4c6/pkg/release/helm_actions.go (about)

     1  package release
     2  
     3  import (
     4  	"fmt"
     5  	"regexp"
     6  
     7  	"github.com/helmwave/helmwave/pkg/helper"
     8  	"helm.sh/helm/v3/pkg/action"
     9  	helm "helm.sh/helm/v3/pkg/cli"
    10  )
    11  
    12  func (rel *config) Cfg() *action.Configuration {
    13  	cfg, err := helper.NewCfg(rel.Namespace(), rel.KubeContext())
    14  	if err != nil {
    15  		rel.Logger().Fatal(err)
    16  
    17  		return nil
    18  	}
    19  
    20  	return cfg
    21  }
    22  
    23  func (rel *config) Helm() *helm.EnvSettings {
    24  	if rel.helm == nil {
    25  		var err error
    26  		rel.helm, err = helper.NewHelm(rel.Namespace())
    27  		if err != nil {
    28  			rel.Logger().Fatal(err)
    29  
    30  			return nil
    31  		}
    32  
    33  		rel.helm.Debug = helper.Helm.Debug
    34  	}
    35  
    36  	return rel.helm
    37  }
    38  
    39  func (rel *config) newInstall() *action.Install {
    40  	client := action.NewInstall(rel.Cfg())
    41  
    42  	// client.IncludeCRDs = true
    43  
    44  	// Only Up
    45  	client.CreateNamespace = rel.CreateNamespace
    46  	client.ReleaseName = rel.Name()
    47  
    48  	// Common Part
    49  	client.DryRun = rel.dryRun
    50  	client.Namespace = rel.Namespace()
    51  	client.EnableDNS = rel.EnableDNS
    52  	client.Labels = rel.Labels
    53  
    54  	rel.Chart().CopyOptions(&client.ChartPathOptions)
    55  
    56  	client.DisableHooks = rel.DisableHooks
    57  	client.SkipCRDs = rel.SkipCRDs
    58  	client.Timeout = rel.Timeout
    59  	client.Wait = rel.Wait
    60  	client.WaitForJobs = rel.WaitForJobs
    61  	client.Atomic = rel.Atomic
    62  	client.DisableOpenAPIValidation = rel.DisableOpenAPIValidation
    63  	client.SubNotes = rel.SubNotes
    64  	client.Description = rel.Description()
    65  
    66  	pr, err := rel.PostRenderer()
    67  	if err != nil {
    68  		rel.Logger().WithError(err).Warn("failed to create post-renderer")
    69  	} else {
    70  		client.PostRenderer = pr
    71  	}
    72  
    73  	if client.DryRun {
    74  		client.Replace = true
    75  	}
    76  
    77  	if client.DryRun && nil != rel.OfflineKubeVersion() {
    78  		client.ClientOnly = true
    79  		client.KubeVersion = rel.OfflineKubeVersion()
    80  	}
    81  
    82  	return client
    83  }
    84  
    85  func (rel *config) newUpgrade() *action.Upgrade {
    86  	client := action.NewUpgrade(rel.Cfg())
    87  
    88  	// Only Upgrade
    89  	client.CleanupOnFail = rel.CleanupOnFail
    90  	client.MaxHistory = rel.MaxHistory
    91  	client.Recreate = rel.Recreate
    92  	client.ReuseValues = rel.ReuseValues
    93  	client.ResetValues = rel.ResetValues
    94  	client.ResetThenReuseValues = rel.ResetThenReuseValues
    95  
    96  	// Common Part
    97  	client.DryRun = rel.dryRun
    98  	client.Namespace = rel.Namespace()
    99  	client.EnableDNS = rel.EnableDNS
   100  	client.Labels = rel.Labels
   101  
   102  	rel.Chart().CopyOptions(&client.ChartPathOptions)
   103  
   104  	client.Force = rel.Force
   105  	client.DisableHooks = rel.DisableHooks
   106  	client.SkipCRDs = rel.SkipCRDs
   107  	client.Timeout = rel.Timeout
   108  	client.Wait = rel.Wait
   109  	client.WaitForJobs = rel.WaitForJobs
   110  	client.Atomic = rel.Atomic
   111  	client.DisableOpenAPIValidation = rel.DisableOpenAPIValidation
   112  	client.SubNotes = rel.SubNotes
   113  	client.Description = rel.Description()
   114  
   115  	pr, err := rel.PostRenderer()
   116  	if err != nil {
   117  		rel.Logger().WithError(err).Warn("failed to create post_renderer")
   118  	} else {
   119  		client.PostRenderer = pr
   120  	}
   121  
   122  	return client
   123  }
   124  
   125  func (rel *config) newUninstall() *action.Uninstall {
   126  	client := action.NewUninstall(rel.Cfg())
   127  
   128  	client.KeepHistory = false // TODO: pass it via flags
   129  
   130  	client.IgnoreNotFound = true // make it idempotent
   131  
   132  	client.DryRun = rel.dryRun
   133  	client.DisableHooks = rel.DisableHooks
   134  	client.Timeout = rel.Timeout
   135  	client.Wait = rel.Wait
   136  	client.DeletionPropagation = rel.DeletePropagation
   137  	client.Description = rel.Description()
   138  
   139  	return client
   140  }
   141  
   142  func (rel *config) newTest() *action.ReleaseTesting {
   143  	client := action.NewReleaseTesting(rel.Cfg())
   144  
   145  	client.Timeout = rel.Timeout
   146  	client.Namespace = rel.Namespace()
   147  	client.Filters = rel.Tests.Filters
   148  
   149  	return client
   150  }
   151  
   152  func (rel *config) newRollback() *action.Rollback {
   153  	client := action.NewRollback(rel.Cfg())
   154  
   155  	client.CleanupOnFail = rel.CleanupOnFail
   156  	client.MaxHistory = rel.MaxHistory
   157  	client.Recreate = rel.Recreate
   158  	client.Timeout = rel.Timeout
   159  
   160  	client.DisableHooks = rel.DisableHooks
   161  	client.Timeout = rel.Timeout
   162  	client.Wait = rel.Wait
   163  	client.WaitForJobs = rel.WaitForJobs
   164  	client.Force = rel.Force
   165  
   166  	return client
   167  }
   168  
   169  func (rel *config) newStatus() *action.Status {
   170  	client := action.NewStatus(rel.Cfg())
   171  
   172  	client.ShowDescription = true
   173  
   174  	return client
   175  }
   176  
   177  func (rel *config) newGet() *action.Get {
   178  	client := action.NewGet(rel.Cfg())
   179  
   180  	return client
   181  }
   182  
   183  func (rel *config) newGetValues() *action.GetValues {
   184  	client := action.NewGetValues(rel.Cfg())
   185  
   186  	return client
   187  }
   188  
   189  func (rel *config) newList() *action.List {
   190  	client := action.NewList(rel.Cfg())
   191  
   192  	client.Filter = fmt.Sprintf("^%s$", regexp.QuoteMeta(rel.Name()))
   193  
   194  	return client
   195  }
   196  
   197  func (rel *config) newHistory() *action.History {
   198  	client := action.NewHistory(rel.Cfg())
   199  
   200  	return client
   201  }