|
|
|
@ -50,7 +50,6 @@ func (cfg *Configuration) execHook(rl *release.Release, hook release.HookEvent,
|
|
|
|
|
for i, h := range executingHooks {
|
|
|
|
|
// Set default delete policy to before-hook-creation
|
|
|
|
|
cfg.hookSetDeletePolicy(h)
|
|
|
|
|
setDefaultDeletePolicy(h)
|
|
|
|
|
|
|
|
|
|
if err := cfg.deleteHookByPolicy(h, release.HookBeforeHookCreation, waitStrategy, timeout); err != nil {
|
|
|
|
|
return err
|
|
|
|
@ -69,7 +68,7 @@ func (cfg *Configuration) execHook(rl *release.Release, hook release.HookEvent,
|
|
|
|
|
|
|
|
|
|
toBeUpdated, err := existingResourceConflict(resources, rl.Name, rl.Namespace)
|
|
|
|
|
if err != nil {
|
|
|
|
|
return errors.Wrap(err, "rendered hook manifests contain a resource that already exists. Unable to continue")
|
|
|
|
|
return fmt.Errorf("rendered hook manifests contain a resource that already exists. Unable to continue: %w", err)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Record the time at which the hook was applied to the cluster
|
|
|
|
@ -88,11 +87,16 @@ func (cfg *Configuration) execHook(rl *release.Release, hook release.HookEvent,
|
|
|
|
|
if _, err := cfg.KubeClient.Create(
|
|
|
|
|
resources,
|
|
|
|
|
kube.ClientCreateOptionServerSideApply(serverSideApply, false)); err != nil {
|
|
|
|
|
// Create or update the hook resources
|
|
|
|
|
if _, err := cfg.KubeClient.Update(toBeUpdated, resources, false); err != nil {
|
|
|
|
|
h.LastRun.CompletedAt = helmtime.Now()
|
|
|
|
|
h.LastRun.Phase = release.HookPhaseFailed
|
|
|
|
|
return fmt.Errorf("warning: Hook %s %s failed: %w", hook, h.Path, err)
|
|
|
|
|
// Create or update the hook resources
|
|
|
|
|
if _, err := cfg.KubeClient.Update(
|
|
|
|
|
toBeUpdated,
|
|
|
|
|
resources,
|
|
|
|
|
kube.ClientUpdateOptionServerSideApply(serverSideApply, false),
|
|
|
|
|
); err != nil {
|
|
|
|
|
h.LastRun.CompletedAt = helmtime.Now()
|
|
|
|
|
h.LastRun.Phase = release.HookPhaseFailed
|
|
|
|
|
return fmt.Errorf("warning: Hook %s %s failed: %w", hook, h.Path, err)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
waiter, err := cfg.KubeClient.GetWaiter(waitStrategy)
|
|
|
|
@ -209,11 +213,11 @@ func (cfg *Configuration) hookHasDeletePolicy(h *release.Hook, policy release.Ho
|
|
|
|
|
func (cfg *Configuration) hookSetDeletePolicy(h *release.Hook) {
|
|
|
|
|
cfg.mutex.Lock()
|
|
|
|
|
defer cfg.mutex.Unlock()
|
|
|
|
|
if len(h.DeletePolicies) == 0 {
|
|
|
|
|
// TODO(jlegrone): Only apply before-hook-creation delete policy to run to completion
|
|
|
|
|
// resources. For all other resource types update in place if a
|
|
|
|
|
// resource with the same name already exists and is owned by the
|
|
|
|
|
// current release.
|
|
|
|
|
if len(h.DeletePolicies) > 0 {
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
// TODO(luisdavim): We should probably add the group/version to the hook resources to avoid conflicts with CRs
|
|
|
|
|
if h.Kind == "Job" || h.Kind == "Pod" {
|
|
|
|
|
h.DeletePolicies = []release.HookDeletePolicy{release.HookBeforeHookCreation}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
@ -271,13 +275,3 @@ func (cfg *Configuration) deriveNamespace(h *release.Hook, namespace string) (st
|
|
|
|
|
func hookHasOutputLogPolicy(h *release.Hook, policy release.HookOutputLogPolicy) bool {
|
|
|
|
|
return slices.Contains(h.OutputLogPolicies, policy)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func setDefaultDeletePolicy(h *release.Hook) {
|
|
|
|
|
if h.DeletePolicies != nil && len(h.DeletePolicies) > 0 {
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
// TODO(luisdavim): We should probably add the group/version to the hook resources to avoid conflicts with CRs
|
|
|
|
|
if h.Kind == "Job" || h.Kind == "Pod" {
|
|
|
|
|
h.DeletePolicies = []release.HookDeletePolicy{release.HookBeforeHookCreation}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|