gcp.go 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. /*
  2. Licensed under the Apache License, Version 2.0 (the "License");
  3. you may not use this file except in compliance with the License.
  4. You may obtain a copy of the License at
  5. http://www.apache.org/licenses/LICENSE-2.0
  6. Unless required by applicable law or agreed to in writing, software
  7. distributed under the License is distributed on an "AS IS" BASIS,
  8. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  9. limitations under the License.
  10. */
  11. package gcp
  12. import (
  13. "context"
  14. "fmt"
  15. "os"
  16. // nolint
  17. . "github.com/onsi/ginkgo"
  18. // nolint
  19. . "github.com/onsi/gomega"
  20. v1 "k8s.io/api/core/v1"
  21. metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
  22. esv1alpha1 "github.com/external-secrets/external-secrets/apis/externalsecrets/v1alpha1"
  23. esmeta "github.com/external-secrets/external-secrets/apis/meta/v1"
  24. "github.com/external-secrets/external-secrets/e2e/framework"
  25. )
  26. var _ = Describe("[gcp] ", func() {
  27. f := framework.New("eso-gcp")
  28. var secretStore *esv1alpha1.SecretStore
  29. projectID := "external-secrets-operator"
  30. credentials := os.Getenv("GCP_SM_SA_JSON")
  31. BeforeEach(func() {
  32. By("creating a secret in GCP SM")
  33. gcpCred := &v1.Secret{
  34. ObjectMeta: metav1.ObjectMeta{
  35. Name: f.Namespace.Name,
  36. Namespace: f.Namespace.Name,
  37. },
  38. StringData: map[string]string{
  39. "secret-access-credentials": credentials,
  40. },
  41. }
  42. err := f.CRClient.Create(context.Background(), gcpCred)
  43. Expect(err).ToNot(HaveOccurred())
  44. secretStore = &esv1alpha1.SecretStore{
  45. ObjectMeta: metav1.ObjectMeta{
  46. Name: f.Namespace.Name,
  47. Namespace: f.Namespace.Name,
  48. },
  49. Spec: esv1alpha1.SecretStoreSpec{
  50. Provider: &esv1alpha1.SecretStoreProvider{
  51. GCPSM: &esv1alpha1.GCPSMProvider{
  52. ProjectID: projectID,
  53. Auth: esv1alpha1.GCPSMAuth{
  54. SecretRef: esv1alpha1.GCPSMAuthSecretRef{
  55. SecretAccessKey: esmeta.SecretKeySelector{
  56. Name: f.Namespace.Name,
  57. Key: "secret-access-credentials",
  58. },
  59. },
  60. },
  61. },
  62. },
  63. },
  64. }
  65. err = f.CRClient.Create(context.Background(), secretStore)
  66. Expect(err).ToNot(HaveOccurred())
  67. })
  68. It("should sync secrets", func() {
  69. By("creating a GCP SM Secret")
  70. secretKey1 := fmt.Sprintf("%s-%s", f.Namespace.Name, "one")
  71. secretValue := "great-value-test"
  72. targetSecret := "target-secret"
  73. secret, err := createGCPSecretsManagerSecret(
  74. projectID,
  75. secretKey1, secretValue, []byte(credentials))
  76. Expect(err).ToNot(HaveOccurred())
  77. err = f.CRClient.Create(context.Background(), &esv1alpha1.ExternalSecret{
  78. ObjectMeta: metav1.ObjectMeta{
  79. Name: "simple-sync",
  80. Namespace: f.Namespace.Name,
  81. },
  82. Spec: esv1alpha1.ExternalSecretSpec{
  83. SecretStoreRef: esv1alpha1.SecretStoreRef{
  84. Name: f.Namespace.Name,
  85. },
  86. Target: esv1alpha1.ExternalSecretTarget{
  87. Name: targetSecret,
  88. },
  89. Data: []esv1alpha1.ExternalSecretData{
  90. {
  91. SecretKey: secretKey1,
  92. RemoteRef: esv1alpha1.ExternalSecretDataRemoteRef{
  93. Key: secretKey1,
  94. },
  95. },
  96. },
  97. },
  98. })
  99. Expect(err).ToNot(HaveOccurred())
  100. _, err = f.WaitForSecretValue(f.Namespace.Name, targetSecret, map[string][]byte{
  101. secretKey1: []byte(secretValue),
  102. })
  103. Expect(err).ToNot(HaveOccurred())
  104. err = deleteGCPSecretsManagerSecret(secret.Name, []byte(credentials))
  105. Expect(err).ToNot(HaveOccurred())
  106. })
  107. It("should sync secrets with dataFrom", func() {
  108. By("creating a GCP SM Secret with JSON string")
  109. secretKey1 := fmt.Sprintf("%s-%s", f.Namespace.Name, "one")
  110. targetSecretKey1 := "name"
  111. targetSecretValue1 := "great-name"
  112. targetSecretKey2 := "surname"
  113. targetSecretValue2 := "great-surname"
  114. secretValue := fmt.Sprintf("{ \"%s\": \"%s\", \"%s\": \"%s\" }", targetSecretKey1, targetSecretValue1, targetSecretKey2, targetSecretValue2)
  115. targetSecret := "target-secret"
  116. secret, err := createGCPSecretsManagerSecret(
  117. projectID,
  118. secretKey1, secretValue, []byte(credentials))
  119. Expect(err).ToNot(HaveOccurred())
  120. err = f.CRClient.Create(context.Background(), &esv1alpha1.ExternalSecret{
  121. ObjectMeta: metav1.ObjectMeta{
  122. Name: "datafrom-sync",
  123. Namespace: f.Namespace.Name,
  124. },
  125. Spec: esv1alpha1.ExternalSecretSpec{
  126. SecretStoreRef: esv1alpha1.SecretStoreRef{
  127. Name: f.Namespace.Name,
  128. },
  129. Target: esv1alpha1.ExternalSecretTarget{
  130. Name: targetSecret,
  131. },
  132. DataFrom: []esv1alpha1.ExternalSecretDataRemoteRef{
  133. {
  134. Key: secretKey1,
  135. },
  136. },
  137. },
  138. })
  139. Expect(err).ToNot(HaveOccurred())
  140. _, err = f.WaitForSecretValue(f.Namespace.Name, targetSecret, map[string][]byte{
  141. targetSecretKey1: []byte(targetSecretValue1),
  142. targetSecretKey2: []byte(targetSecretValue2),
  143. })
  144. Expect(err).ToNot(HaveOccurred())
  145. err = deleteGCPSecretsManagerSecret(secret.Name, []byte(credentials))
  146. Expect(err).ToNot(HaveOccurred())
  147. })
  148. })