Move client creation into getHookLog

Signed-off-by: Simon Alling <alling.simon@gmail.com>
pull/9677/head
Simon Alling 4 years ago
parent d1ec5e0735
commit 2dff115c56

@ -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)
} }

@ -100,14 +100,9 @@ func (r *ReleaseTesting) Run(name string) (*release.Release, error) {
// the given writer. These can be immediately output to the user or captured for // the given writer. These can be immediately output to the user or captured for
// other uses // other uses
func (r *ReleaseTesting) GetPodLogs(out io.Writer, rel *release.Release) error { func (r *ReleaseTesting) GetPodLogs(out io.Writer, rel *release.Release) error {
client, err := r.cfg.KubernetesClientSet()
if err != nil {
return errors.Wrap(err, "unable to get kubernetes client to fetch pod logs")
}
for _, h := range rel.Hooks { for _, h := range rel.Hooks {
if isTestHook(h) { if isTestHook(h) {
hookLog, err := getHookLog(client, rel, h) hookLog, err := getHookLog(r.cfg, rel, h)
if err != nil { if err != nil {
return err return err
} }

Loading…
Cancel
Save