diff --git a/components/usage/cmd/run.go b/components/usage/cmd/run.go index ad56205b22b851..543d927472a7cb 100644 --- a/components/usage/cmd/run.go +++ b/components/usage/cmd/run.go @@ -7,7 +7,10 @@ package cmd import ( "github.com/gitpod-io/gitpod/common-go/baseserver" "github.com/gitpod-io/gitpod/common-go/log" + "github.com/gitpod-io/gitpod/usage/pkg/db" "github.com/spf13/cobra" + "net" + "os" ) func init() { @@ -28,6 +31,16 @@ func run() *cobra.Command { log.Info("Hello world usage server") + _, err := db.Connect(db.ConnectionParams{ + User: os.Getenv("DB_USERNAME"), + Password: os.Getenv("DB_PASSWORD"), + Host: net.JoinHostPort(os.Getenv("DB_HOST"), os.Getenv("DB_PORT")), + Database: "gitpod", + }) + if err != nil { + log.WithError(err).Fatal("Failed to establish database connection.") + } + srv, err := baseserver.New("usage") if err != nil { log.WithError(err).Fatal("Failed to initialize server.") diff --git a/install/installer/pkg/components/usage/deployment.go b/install/installer/pkg/components/usage/deployment.go index 5f5f2ca3704ef2..f8514ece47243b 100644 --- a/install/installer/pkg/components/usage/deployment.go +++ b/install/installer/pkg/components/usage/deployment.go @@ -20,6 +20,7 @@ import ( func deployment(ctx *common.RenderContext) ([]runtime.Object, error) { labels := common.DefaultLabels(Component) + return []runtime.Object{ &appsv1.Deployment{ TypeMeta: common.TypeMetaDeployment, @@ -64,6 +65,7 @@ func deployment(ctx *common.RenderContext) ([]runtime.Object, error) { }, Env: common.MergeEnv( common.DefaultEnv(&ctx.Config), + common.DatabaseEnv(&ctx.Config), ), LivenessProbe: &corev1.Probe{ ProbeHandler: corev1.ProbeHandler{ diff --git a/install/installer/pkg/components/usage/deployment_test.go b/install/installer/pkg/components/usage/deployment_test.go new file mode 100644 index 00000000000000..9feadc77b12361 --- /dev/null +++ b/install/installer/pkg/components/usage/deployment_test.go @@ -0,0 +1,50 @@ +// Copyright (c) 2022 Gitpod GmbH. All rights reserved. +// Licensed under the MIT License. See License-MIT.txt in the project root for license information. + +package usage + +import ( + "github.com/stretchr/testify/require" + appsv1 "k8s.io/api/apps/v1" + corev1 "k8s.io/api/core/v1" + "testing" +) + +func TestDeployment_ContainsDBEnvVars(t *testing.T) { + ctx := renderContextWithUsageEnabled(t) + + objs, err := deployment(ctx) + require.NoError(t, err) + + dpl, ok := objs[0].(*appsv1.Deployment) + require.True(t, ok) + + containers := dpl.Spec.Template.Spec.Containers + require.Len(t, containers, 2) + + usageContainer := containers[0] + secretRef := corev1.LocalObjectReference{Name: ctx.Config.Database.CloudSQL.ServiceAccount.Name} + + require.Contains(t, usageContainer.Env, corev1.EnvVar{ + Name: "DB_HOST", + Value: "cloudsqlproxy", + }) + require.Contains(t, usageContainer.Env, corev1.EnvVar{ + Name: "DB_PORT", + Value: "3306", + }) + require.Contains(t, usageContainer.Env, corev1.EnvVar{ + Name: "DB_PASSWORD", + ValueFrom: &corev1.EnvVarSource{SecretKeyRef: &corev1.SecretKeySelector{ + LocalObjectReference: secretRef, + Key: "password", + }}, + }) + require.Contains(t, usageContainer.Env, corev1.EnvVar{ + Name: "DB_USERNAME", + ValueFrom: &corev1.EnvVarSource{SecretKeyRef: &corev1.SecretKeySelector{ + LocalObjectReference: secretRef, + Key: "username", + }}, + }) +} diff --git a/install/installer/pkg/components/usage/objects_test.go b/install/installer/pkg/components/usage/objects_test.go index d7cf18227701a7..f3ee0e0b6c3999 100644 --- a/install/installer/pkg/components/usage/objects_test.go +++ b/install/installer/pkg/components/usage/objects_test.go @@ -38,6 +38,13 @@ func renderContextWithUsageEnabled(t *testing.T) *common.RenderContext { Usage: &experimental.UsageConfig{Enabled: true}, }, }, + Database: config.Database{ + CloudSQL: &config.DatabaseCloudSQL{ + ServiceAccount: config.ObjectRef{ + Name: "gcp-db-creds-service-account-name", + }, + }, + }, }, versions.Manifest{ Components: versions.Components{ Usage: versions.Versioned{