Skip to content

Commit

Permalink
replaces gcp credentials secret to manifest template
Browse files Browse the repository at this point in the history
Signed-off-by: neelanjan00 <[email protected]>
  • Loading branch information
neelanjan00 committed Sep 24, 2023
1 parent c40ebe1 commit 5657319
Show file tree
Hide file tree
Showing 10 changed files with 43 additions and 74 deletions.
3 changes: 2 additions & 1 deletion config/crd/bases/keda.sh_clustertriggerauthentications.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,8 @@ apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.13.0
controller-gen.kubebuilder.io/version: v0.9.0
creationTimestamp: null
name: clustertriggerauthentications.keda.sh
spec:
group: keda.sh
Expand Down
52 changes: 2 additions & 50 deletions config/crd/bases/keda.sh_scaledjobs.yaml

Large diffs are not rendered by default.

3 changes: 2 additions & 1 deletion config/crd/bases/keda.sh_scaledobjects.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,8 @@ apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.13.0
controller-gen.kubebuilder.io/version: v0.9.0
creationTimestamp: null
name: scaledobjects.keda.sh
spec:
group: keda.sh
Expand Down
3 changes: 2 additions & 1 deletion config/crd/bases/keda.sh_triggerauthentications.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,8 @@ apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.13.0
controller-gen.kubebuilder.io/version: v0.9.0
creationTimestamp: null
name: triggerauthentications.keda.sh
spec:
group: keda.sh
Expand Down
2 changes: 1 addition & 1 deletion config/manager/kustomization.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -6,5 +6,5 @@ apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
images:
- name: ghcr.io/kedacore/keda
newName: ghcr.io/kedacore/keda
newName: docker.io/neelanjan00/keda
newTag: main
2 changes: 1 addition & 1 deletion config/metrics-server/kustomization.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -10,5 +10,5 @@ apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
images:
- name: ghcr.io/kedacore/keda-metrics-apiserver
newName: ghcr.io/kedacore/keda-metrics-apiserver
newName: docker.io/neelanjan00/keda-metrics-apiserver
newTag: main
2 changes: 2 additions & 0 deletions config/rbac/role.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
creationTimestamp: null
name: keda-operator
rules:
- apiGroups:
Expand Down Expand Up @@ -122,6 +123,7 @@ rules:
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
creationTimestamp: null
name: keda-operator
namespace: keda
rules:
Expand Down
2 changes: 1 addition & 1 deletion config/webhooks/kustomization.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -7,5 +7,5 @@ apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
images:
- name: ghcr.io/kedacore/keda-admission-webhooks
newName: ghcr.io/kedacore/keda-admission-webhooks
newName: docker.io/neelanjan00/keda-admission-webhooks
newTag: main
2 changes: 1 addition & 1 deletion pkg/scaling/resolver/gcp_secretmanager_handler.go
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,7 @@ func (vh *GCPSecretManagerHandler) Initialize(client client.Client, logger logr.
return fmt.Errorf("failed to create secretmanager client: %w", err)
}
default:
return fmt.Errorf("key vault does not support pod identity provider - %s", podIdentity)
return fmt.Errorf("key vault does not support pod identity provider - %v", podIdentity)
}

return nil
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import (
"encoding/json"
"fmt"
"os"
"strings"
"testing"

secretmanager "cloud.google.com/go/secretmanager/apiv1"
Expand Down Expand Up @@ -74,6 +75,7 @@ type templateData struct {
GCPCredentialsSecretName string
GCPCredentialsSecretKey string
SecretManagerSecretID string
GCPKeyBase64 string
}

const (
Expand Down Expand Up @@ -120,6 +122,15 @@ type: Opaque
data:
postgresql_conn_str: {{.PostgreSQLConnectionStringBase64}}
`
gcpCredentialsSecretTemplate = `apiVersion: v1
kind: Secret
metadata:
name: {{.GCPCredentialsSecretName}}
namespace: {{.TestNamespace}}
type: Opaque
data:
{{.GCPCredentialsSecretKey}}: {{.GCPKeyBase64}}
`

triggerAuthenticationTemplate = `apiVersion: keda.sh/v1alpha1
kind: TriggerAuthentication
Expand All @@ -131,14 +142,14 @@ spec:
gcpProjectID: {{.GCPProjectID}}
secrets:
- parameter: connection
id: {{.SecretManagerSecretID}}
version: "latest"
id: {{.SecretManagerSecretID}}
version: "1"
gcpCredentials:
clientSecret:
valueFrom:
secretKeyRef:
name: {{.GCPCredentialsSecretName}}
key: {{.GCPCredentialsSecretKey}}
valueFrom:
secretKeyRef:
name: {{.GCPCredentialsSecretName}}
key: {{.GCPCredentialsSecretKey}}
`

scaledObjectTemplate = `apiVersion: keda.sh/v1alpha1
Expand Down Expand Up @@ -279,12 +290,12 @@ spec:
`
)

func TestPostreSQLScaler(t *testing.T) {
func TestPostgreSQLScaler(t *testing.T) {
require.NotEmpty(t, gcpKey, "TF_GCP_SA_CREDENTIALS env variable is required for GCP Secret Manager test")
require.NoErrorf(t, errGcpKey, "Failed to load credentials from gcpKey - %s", errGcpKey)

// Create the secret in GCP
err := createGCPSecret()
err := createGCPSecret(t)
assert.NoErrorf(t, err, "cannot create GCP Secret Manager secret - %s", err)

// Create kubernetes resources for PostgreSQL server
Expand All @@ -302,9 +313,6 @@ func TestPostreSQLScaler(t *testing.T) {
ok, out, errOut, err := WaitForSuccessfulExecCommandOnSpecificPod(t, postgresqlPodName, testNamespace, psqlCreateTableCmd, 60, 3)
assert.True(t, ok, "executing a command on PostreSQL Pod should work; Output: %s, ErrorOutput: %s, Error: %s", out, errOut, err)

_, err = ExecuteCommand(fmt.Sprintf("kubectl create secret generic %s --from-literal=%s=%s -n %s", gcpCredentialsSecretName, gcpCredentialsSecretKey, gcpKey, testNamespace))
assert.NoErrorf(t, err, "cannot create Kubernetes GCP Service Account key secret - %s", err)

// Create kubernetes resources for testing
data, templates := getTemplateData()

Expand All @@ -321,7 +329,7 @@ func TestPostreSQLScaler(t *testing.T) {
DeleteKubernetesResources(t, testNamespace, data, postgreSQLtemplates)

// Delete the secret in GCP
err = deleteGCPSecret()
err = deleteGCPSecret(t)
assert.NoErrorf(t, err, "cannot delete GCP Secret Manager secret - %s", err)
}

Expand All @@ -340,6 +348,9 @@ var data = templateData{
PostgreSQLConnectionStringBase64: base64.StdEncoding.EncodeToString([]byte(postgreSQLConnectionString)),
GCPProjectID: projectID.(string),
SecretManagerSecretID: secretManagerSecretID,
GCPKeyBase64: base64.StdEncoding.EncodeToString([]byte(strings.TrimSpace(gcpKey))),
GCPCredentialsSecretName: gcpCredentialsSecretName,
GCPCredentialsSecretKey: gcpCredentialsSecretKey,
}

func getPostgreSQLTemplateData() (templateData, []Template) {
Expand All @@ -355,6 +366,7 @@ func getTemplateData() (templateData, []Template) {
{Name: "deploymentTemplate", Config: deploymentTemplate},
{Name: "triggerAuthenticationTemplate", Config: triggerAuthenticationTemplate},
{Name: "scaledObjectTemplate", Config: scaledObjectTemplate},
{Name: "gcpCredentialsSecretTemplate", Config: gcpCredentialsSecretTemplate},
}
}

Expand All @@ -380,7 +392,7 @@ func testScaleIn(t *testing.T, kc *kubernetes.Clientset) {
"replica count should be %d after 3 minutes", minReplicaCount)
}

func createGCPSecret() error {
func createGCPSecret(t *testing.T) error {
ctx := context.Background()

gcpCreds, err := google.CredentialsFromJSON(ctx, []byte(gcpKey), secretmanager.DefaultAuthScopes()...)
Expand Down Expand Up @@ -421,17 +433,17 @@ func createGCPSecret() error {
},
}

version, err := client.AddSecretVersion(ctx, createVersionReq)
_, err = client.AddSecretVersion(ctx, createVersionReq)
if err != nil {
return fmt.Errorf("failed to create secret version: %v", err)
}

fmt.Printf("Created secret version: %s\n", version.Name)
t.Log("Created secret in GCP Secret Manager.")

return nil
}

func deleteGCPSecret() error {
func deleteGCPSecret(t *testing.T) error {
ctx := context.Background()

gcpCreds, err := google.CredentialsFromJSON(ctx, []byte(gcpKey), secretmanager.DefaultAuthScopes()...)
Expand All @@ -458,7 +470,7 @@ func deleteGCPSecret() error {
return fmt.Errorf("failed to delete secret: %w", err)
}

fmt.Printf("Secret %s deleted.\n", secretName)
t.Log("Deleted secret from GCP Secret Manager.")

return nil
}

0 comments on commit 5657319

Please sign in to comment.