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 }