Skip to content

Commit 07ab5ac

Browse files
committed
dump CAPK resources
Signed-off-by: Nahshon Unna Tsameret <nahsh.ut@gmail.com>
1 parent 3fd28ed commit 07ab5ac

File tree

4 files changed

+162
-33
lines changed

4 files changed

+162
-33
lines changed

e2e/clients_test.go

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
package e2e_test
2+
3+
import (
4+
"fmt"
5+
"sync"
6+
7+
"k8s.io/client-go/kubernetes"
8+
kubevirtv1 "kubevirt.io/api/core/v1"
9+
infrav1 "sigs.k8s.io/cluster-api-provider-kubevirt/api/v1alpha1"
10+
clusterv1 "sigs.k8s.io/cluster-api/api/v1beta1"
11+
"sigs.k8s.io/controller-runtime/pkg/client"
12+
"sigs.k8s.io/controller-runtime/pkg/client/config"
13+
)
14+
15+
var (
16+
k8sclient client.Client
17+
k8sClientSet *kubernetes.Clientset
18+
19+
clientsOnce = &sync.Once{}
20+
)
21+
22+
func initClients() error {
23+
var err error
24+
clientsOnce.Do(func() {
25+
cfg, doErr := config.GetConfig()
26+
if doErr != nil {
27+
err = fmt.Errorf("failed to get config; %w", doErr)
28+
return
29+
}
30+
31+
k8sclient, err = client.New(cfg, client.Options{})
32+
if err != nil {
33+
err = fmt.Errorf("failed to create client; %w", err)
34+
return
35+
}
36+
37+
k8sClientSet, err = kubernetes.NewForConfig(cfg)
38+
if err != nil {
39+
err = fmt.Errorf("failed to create clientset; %w", err)
40+
return
41+
}
42+
43+
s := k8sclient.Scheme()
44+
err = clusterv1.AddToScheme(s)
45+
if err != nil {
46+
err = fmt.Errorf("failed to setup scheme for clusterv1; %w", err)
47+
return
48+
}
49+
50+
err = infrav1.AddToScheme(s)
51+
if err != nil {
52+
err = fmt.Errorf("failed to setup scheme for infrav1; %w", err)
53+
return
54+
}
55+
56+
err = kubevirtv1.AddToScheme(s)
57+
if err != nil {
58+
err = fmt.Errorf("failed to setup scheme for kubevirtv1; %w", err)
59+
}
60+
})
61+
62+
return err
63+
}

e2e/create-cluster_test.go

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@ import (
2727
clusterv1 "sigs.k8s.io/cluster-api/api/v1beta1"
2828
"sigs.k8s.io/cluster-api/util/conditions"
2929
"sigs.k8s.io/controller-runtime/pkg/client"
30-
"sigs.k8s.io/controller-runtime/pkg/client/config"
3130
"sigs.k8s.io/kind/pkg/cluster/constants"
3231

3332
infrav1 "sigs.k8s.io/cluster-api-provider-kubevirt/api/v1alpha1"
@@ -44,8 +43,6 @@ const (
4443
var _ = Describe("CreateCluster", func() {
4544

4645
var tmpDir string
47-
var k8sclient client.Client
48-
var k8sClientSet *kubernetes.Clientset
4946
var manifestsFile string
5047
var tenantKubeconfigFile string
5148
var namespace string
@@ -60,19 +57,6 @@ var _ = Describe("CreateCluster", func() {
6057
manifestsFile = filepath.Join(tmpDir, "manifests.yaml")
6158
tenantKubeconfigFile = filepath.Join(tmpDir, "tenant-kubeconfig.yaml")
6259

63-
cfg, err := config.GetConfig()
64-
Expect(err).ToNot(HaveOccurred())
65-
k8sclient, err = client.New(cfg, client.Options{})
66-
Expect(err).ToNot(HaveOccurred())
67-
68-
k8sClientSet, err = kubernetes.NewForConfig(cfg)
69-
ExpectWithOffset(1, err).ToNot(HaveOccurred())
70-
71-
s := k8sclient.Scheme()
72-
Expect(clusterv1.AddToScheme(s)).To(Succeed())
73-
Expect(infrav1.AddToScheme(s)).To(Succeed())
74-
Expect(kubevirtv1.AddToScheme(s)).To(Succeed())
75-
7660
namespace = "e2e-test-create-cluster-" + rand.String(6)
7761

7862
ns := &corev1.Namespace{

e2e/dump_test.go

Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
package e2e_test
2+
3+
import (
4+
"context"
5+
"encoding/json"
6+
"fmt"
7+
"os"
8+
"os/exec"
9+
"path/filepath"
10+
11+
. "github.com/onsi/ginkgo/v2"
12+
. "github.com/onsi/gomega"
13+
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
14+
"sigs.k8s.io/controller-runtime/pkg/client"
15+
16+
infrav1 "sigs.k8s.io/cluster-api-provider-kubevirt/api/v1alpha1"
17+
)
18+
19+
func dump(ctx context.Context, kubeconfig, artifactsSuffix string) {
20+
cmd := exec.CommandContext(ctx, DumpPath, "--kubeconfig", kubeconfig)
21+
22+
failureLocation := CurrentSpecReport().Failure.Location
23+
artifactsPath := filepath.Join(os.Getenv("ARTIFACTS"), fmt.Sprintf("%s:%d", filepath.Base(failureLocation.FileName), failureLocation.LineNumber), artifactsSuffix)
24+
cmd.Env = append(cmd.Env, fmt.Sprintf("ARTIFACTS=%s", artifactsPath))
25+
26+
By(fmt.Sprintf("dumping k8s artifacts to %s", artifactsPath))
27+
output, err := cmd.CombinedOutput()
28+
Expect(err).To(Succeed(), string(output))
29+
30+
By(fmt.Sprintf("dumping CAPK artifacts to %s", artifactsPath))
31+
dumpCAPKResources(ctx, artifactsPath)
32+
}
33+
34+
func dumpCAPKResources(ctx context.Context, artifactsDir string) {
35+
GinkgoHelper()
36+
37+
By("dump KubevirtClusters")
38+
kvClusterList := &infrav1.KubevirtClusterList{}
39+
Expect(k8sclient.List(ctx, kvClusterList, &client.ListOptions{})).To(Succeed())
40+
for i := range kvClusterList.Items {
41+
item := &kvClusterList.Items[i]
42+
item.SetManagedFields(nil)
43+
}
44+
45+
Expect(
46+
dumpJsonFile(kvClusterList, filepath.Join(artifactsDir, "0_kubevirtclusters.json")),
47+
).To(Succeed())
48+
49+
By("dump KubevirtClusterTemplates")
50+
kvClusterTmpltList := &infrav1.KubevirtClusterTemplateList{}
51+
Expect(k8sclient.List(ctx, kvClusterTmpltList, &client.ListOptions{})).To(Succeed())
52+
for i := range kvClusterTmpltList.Items {
53+
item := &kvClusterTmpltList.Items[i]
54+
item.SetManagedFields(nil)
55+
}
56+
Expect(
57+
dumpJsonFile(kvClusterTmpltList, filepath.Join(artifactsDir, "0_kubevirtclustertemplates.json")),
58+
).To(Succeed())
59+
60+
By("dump KubevirtMachines")
61+
kvMachineList := &infrav1.KubevirtMachineList{}
62+
Expect(k8sclient.List(ctx, kvMachineList, &client.ListOptions{})).To(Succeed())
63+
for i := range kvMachineList.Items {
64+
item := &kvMachineList.Items[i]
65+
item.SetManagedFields(nil)
66+
}
67+
Expect(
68+
dumpJsonFile(kvMachineList, filepath.Join(artifactsDir, "0_kubevirtmachines.json")),
69+
).To(Succeed())
70+
71+
By("dump KubevirtMachineTemplates")
72+
kvMachineTmpltList := &infrav1.KubevirtMachineTemplateList{}
73+
Expect(k8sclient.List(ctx, kvMachineTmpltList, &client.ListOptions{})).To(Succeed())
74+
for i := range kvMachineTmpltList.Items {
75+
item := &kvMachineTmpltList.Items[i]
76+
item.SetManagedFields(nil)
77+
}
78+
Expect(
79+
dumpJsonFile(kvMachineTmpltList, filepath.Join(artifactsDir, "0_kubevirtmachinetemplates.json")),
80+
).To(Succeed())
81+
}
82+
83+
func dumpJsonFile(objList metav1.ListInterface, artifactsFilePath string) error {
84+
file, err := os.OpenFile(artifactsFilePath, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0644)
85+
if err != nil {
86+
return err
87+
}
88+
defer file.Close()
89+
90+
encoder := json.NewEncoder(file)
91+
encoder.SetIndent("", " ")
92+
93+
return encoder.Encode(objList)
94+
}

e2e/e2e-suite_test.go

Lines changed: 5 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,9 @@
11
package e2e_test
22

33
import (
4+
"context"
45
"flag"
5-
"fmt"
66
"os"
7-
"os/exec"
8-
"path/filepath"
97
"testing"
108

119
. "github.com/onsi/ginkgo/v2"
@@ -67,22 +65,12 @@ var _ = BeforeSuite(func() {
6765
// parse test suite arguments
6866
flag.Parse()
6967
logf.SetLogger(GinkgoLogr)
68+
69+
Expect(initClients()).To(Succeed())
7070
})
7171

72-
var _ = JustAfterEach(func() {
72+
var _ = JustAfterEach(func(ctx context.Context) {
7373
if CurrentSpecReport().Failed() && DumpPath != "" {
74-
dump(os.Getenv("KUBECONFIG"), "")
74+
dump(ctx, os.Getenv("KUBECONFIG"), "")
7575
}
7676
})
77-
78-
func dump(kubeconfig, artifactsSuffix string) {
79-
cmd := exec.Command(DumpPath, "--kubeconfig", kubeconfig)
80-
81-
failureLocation := CurrentSpecReport().Failure.Location
82-
artifactsPath := filepath.Join(os.Getenv("ARTIFACTS"), fmt.Sprintf("%s:%d", filepath.Base(failureLocation.FileName), failureLocation.LineNumber), artifactsSuffix)
83-
cmd.Env = append(cmd.Env, fmt.Sprintf("ARTIFACTS=%s", artifactsPath))
84-
85-
By(fmt.Sprintf("dumping k8s artifacts to %s", artifactsPath))
86-
output, err := cmd.CombinedOutput()
87-
Expect(err).ToNot(HaveOccurred(), string(output))
88-
}

0 commit comments

Comments
 (0)