@ -25,7 +25,6 @@ import (
"github.com/pkg/errors"
"github.com/pkg/errors"
v1 "k8s.io/api/core/v1"
v1 "k8s.io/api/core/v1"
"k8s.io/client-go/kubernetes"
"helm.sh/helm/v3/pkg/release"
"helm.sh/helm/v3/pkg/release"
helmtime "helm.sh/helm/v3/pkg/time"
helmtime "helm.sh/helm/v3/pkg/time"
@ -90,11 +89,7 @@ func (cfg *Configuration) execHook(rl *release.Release, hook release.HookEvent,
h . LastRun . CompletedAt = helmtime . Now ( )
h . LastRun . CompletedAt = helmtime . Now ( )
if isTestHook ( h ) {
if isTestHook ( h ) {
client , err := cfg . KubernetesClientSet ( ) // "Why create a new client for each hook?" Because `cfg.RESTClientGetter` can be `nil` before the `for` loop, as detected by the `TestInstall/basic_install` and `TestInstallRelease` tests.
hookLog , err := getHookLog ( cfg , rl , h )
if err != nil {
return errors . Wrapf ( err , "unable to create Kubernetes client set to fetch pod logs" )
}
hookLog , err := getHookLog ( client , rl , h )
if err != nil {
if err != nil {
return err
return err
}
}
@ -126,10 +121,14 @@ func (cfg *Configuration) execHook(rl *release.Release, hook release.HookEvent,
}
}
// getHookLog gets the log from the pod associated with the given hook, which is expected to be a test hook.
// getHookLog gets the log from the pod associated with the given hook, which is expected to be a test hook.
func getHookLog ( client kubernetes . Interface , rel * release . Release , hook * release . Hook ) ( release . HookLog , error ) {
func getHookLog ( cfg * Configuration , rel * release . Release , hook * release . Hook ) ( release . HookLog , error ) {
var nothing release . HookLog
client , err := cfg . KubernetesClientSet ( )
if err != nil {
return nothing , errors . Wrapf ( err , "unable to create Kubernetes client set to fetch pod logs" )
}
req := client . CoreV1 ( ) . Pods ( rel . Namespace ) . GetLogs ( hook . Name , & v1 . PodLogOptions { } )
req := client . CoreV1 ( ) . Pods ( rel . Namespace ) . GetLogs ( hook . Name , & v1 . PodLogOptions { } )
responseBody , err := req . Stream ( context . Background ( ) )
responseBody , err := req . Stream ( context . Background ( ) )
var nothing release . HookLog
if err != nil {
if err != nil {
return nothing , errors . Wrapf ( err , "unable to get pod logs for %s" , hook . Name )
return nothing , errors . Wrapf ( err , "unable to get pod logs for %s" , hook . Name )
}
}