...
1
16
17
18
19
20 package drivers
21
22 import (
23 "context"
24 "fmt"
25 "os"
26 "path"
27 "path/filepath"
28
29 v1 "k8s.io/api/core/v1"
30 apierrors "k8s.io/apimachinery/pkg/api/errors"
31 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
32 "k8s.io/apimachinery/pkg/util/uuid"
33
34 clientset "k8s.io/client-go/kubernetes"
35 "k8s.io/kubernetes/test/e2e/framework"
36 )
37
38 func shredFile(filePath string) {
39 if _, err := os.Stat(filePath); os.IsNotExist(err) {
40 framework.Logf("File %v was not found, skipping shredding", filePath)
41 return
42 }
43 framework.Logf("Shredding file %v", filePath)
44 _, _, err := framework.RunCmd("shred", "--remove", filePath)
45 if err != nil {
46 framework.Logf("Failed to shred file %v: %v", filePath, err)
47 }
48 if _, err := os.Stat(filePath); os.IsNotExist(err) {
49 framework.Logf("File %v successfully shredded", filePath)
50 return
51 }
52
53 err = os.Remove(filePath)
54 framework.ExpectNoError(err, "Failed to remove service account file %s", filePath)
55
56 }
57
58
59
60 func createGCESecrets(client clientset.Interface, ns string) {
61 saEnv := "E2E_GOOGLE_APPLICATION_CREDENTIALS"
62 saFile := fmt.Sprintf("/tmp/%s/cloud-sa.json", string(uuid.NewUUID()))
63
64 os.MkdirAll(path.Dir(saFile), 0750)
65 defer os.Remove(path.Dir(saFile))
66
67 premadeSAFile, ok := os.LookupEnv(saEnv)
68 if !ok {
69 framework.Logf("Could not find env var %v, please either create cloud-sa"+
70 " secret manually or rerun test after setting %v to the filepath of"+
71 " the GCP Service Account to give to the GCE Persistent Disk CSI Driver", saEnv, saEnv)
72 return
73 }
74
75 framework.Logf("Found CI service account key at %v", premadeSAFile)
76
77 stdout, stderr, err := framework.RunCmd("cp", premadeSAFile, saFile)
78 framework.ExpectNoError(err, "error copying service account key: %s\nstdout: %s\nstderr: %s", err, stdout, stderr)
79 defer shredFile(saFile)
80
81 fileBytes, err := os.ReadFile(saFile)
82 framework.ExpectNoError(err, "Failed to read file %v", saFile)
83
84 s := &v1.Secret{
85 ObjectMeta: metav1.ObjectMeta{
86 Name: "cloud-sa",
87 Namespace: ns,
88 },
89 Type: v1.SecretTypeOpaque,
90 Data: map[string][]byte{
91 filepath.Base(saFile): fileBytes,
92 },
93 }
94
95 _, err = client.CoreV1().Secrets(ns).Create(context.TODO(), s, metav1.CreateOptions{})
96 if !apierrors.IsAlreadyExists(err) {
97 framework.ExpectNoError(err, "Failed to create Secret %v", s.GetName())
98 }
99 }
100
View as plain text