Skip to content

Commit edabcee

Browse files
provider: enable k3d cluster log export helper
1 parent 6e42505 commit edabcee

File tree

2 files changed

+24
-5
lines changed

2 files changed

+24
-5
lines changed

go.mod

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ go 1.23.0
55
toolchain go1.23.4
66

77
require (
8+
github.com/blang/semver/v4 v4.0.0
89
github.com/stretchr/testify v1.10.0
910
github.com/vladimirvivien/gexe v0.4.1
1011
k8s.io/api v0.32.1
@@ -18,7 +19,6 @@ require (
1819

1920
require (
2021
github.com/beorn7/perks v1.0.1 // indirect
21-
github.com/blang/semver/v4 v4.0.0 // indirect
2222
github.com/cespare/xxhash/v2 v2.3.0 // indirect
2323
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
2424
github.com/emicklei/go-restful/v3 v3.11.0 // indirect

third_party/k3d/k3d.go

+23-4
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import (
2525
"os"
2626
"strings"
2727

28+
"github.com/blang/semver/v4"
2829
"k8s.io/apimachinery/pkg/util/json"
2930

3031
"k8s.io/client-go/rest"
@@ -37,7 +38,8 @@ import (
3738
log "k8s.io/klog/v2"
3839
)
3940

40-
var k3dVersion = "v5.7.2"
41+
var k3dVersion = "v5.8.0"
42+
var k3dWithExportLogSupport = "v5.8.0"
4143

4244
type Cluster struct {
4345
path string
@@ -88,7 +90,7 @@ func WithImage(image string) support.ClusterOpts {
8890
}
8991

9092
func NewCluster(name string) *Cluster {
91-
return &Cluster{name: name}
93+
return &Cluster{name: name, version: k3dVersion}
9294
}
9395

9496
func NewProvider() support.E2EClusterProvider {
@@ -251,8 +253,25 @@ func (c *Cluster) GetKubectlContext() string {
251253
}
252254

253255
func (c *Cluster) ExportLogs(ctx context.Context, dest string) error {
254-
log.Warning("ExportLogs not implemented for k3d. Please use regular kubectl like commands to extract the logs from the cluster")
255-
return nil
256+
reqVersion, err := semver.Parse(c.version)
257+
supVersion, _ := semver.Parse(k3dWithExportLogSupport)
258+
if err != nil {
259+
log.ErrorS(err, "failed to determine the k3d version to decide if the current version supporst the log export helpers. Please use regular kubectl like commands to extract the logs from the cluster")
260+
return nil
261+
}
262+
var stdout, stderr bytes.Buffer
263+
if reqVersion.GE(supVersion) {
264+
p := utils.RunCommandWithCustomWriter(fmt.Sprintf("%s debug export-logs %s --path %s", c.path, c.name, dest), &stdout, &stderr)
265+
err = p.Err()
266+
if err != nil {
267+
log.ErrorS(err, "failed to export cluster logs due to an error", "stdout", stdout.String(), "stderr", stderr.String(), "result", p.Result())
268+
return err
269+
}
270+
return nil
271+
} else {
272+
log.Warning("ExportLogs not implemented for k3d. Please use regular kubectl like commands to extract the logs from the cluster")
273+
return nil
274+
}
256275
}
257276

258277
func (c *Cluster) Destroy(ctx context.Context) error {

0 commit comments

Comments
 (0)