Skip to content

Commit

Permalink
Change: use build-tool for generating dbaas consumers in builds (#115)
Browse files Browse the repository at this point in the history
* refactor: use build-tool for generating dbaas consumers in builds

* chore: remove unused classes

* chore: add debug message for templating result

* chore: disable debug for ingress identification

* chore: disable debug for ingress identification

* chore: disable debug for dbaas identification

* chore: add dbaas command to identify

* chore: add dbaas support to exec-monitor since existing code that transformed types changed

* test: fix dbaas tests with new changes

* chore: remove redundant types

* chore: remove legacy dbaas charts

* refactor: support mongo-mongodb type conversion and add tests for mongo to mongodb-dbaas conversion

* refactor: remove dbaas images from images to pull
  • Loading branch information
shreddedbacon authored Feb 29, 2024
1 parent bd29992 commit 6d3534a
Show file tree
Hide file tree
Showing 34 changed files with 864 additions and 609 deletions.
46 changes: 46 additions & 0 deletions cmd/identify_dbaas.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
package cmd

import (
"fmt"

"github.com/spf13/cobra"
generator "github.com/uselagoon/build-deploy-tool/internal/generator"
)

// this is an intermediate helper command while transitioning from bash to go
// eventually this won't be required
var dbaasIdentify = &cobra.Command{
Use: "dbaas",
Aliases: []string{"db", "d"},
Short: "Identify if any dbaas consumers are created",
RunE: func(cmd *cobra.Command, args []string) error {
generator, err := generator.GenerateInput(*rootCmd, false)
if err != nil {
return err
}
dbaasConsumers, err := IdentifyDBaaSConsumers(generator)
if err != nil {
return err
}
for _, dbc := range dbaasConsumers {
fmt.Println(dbc)
}
return nil
},
}

func IdentifyDBaaSConsumers(g generator.GeneratorInput) ([]string, error) {
lagoonBuild, err := generator.NewGenerator(
g,
)
if err != nil {
return nil, err
}
ret := []string{}
for _, svc := range lagoonBuild.BuildValues.Services {
if svc.IsDBaaS {
ret = append(ret, fmt.Sprintf("%s:%s", svc.Name, svc.Type))
}
}
return ret, nil
}
162 changes: 162 additions & 0 deletions cmd/identify_dbaas_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,162 @@
package cmd

import (
"os"
"reflect"
"testing"

"github.com/uselagoon/build-deploy-tool/internal/dbaasclient"
"github.com/uselagoon/build-deploy-tool/internal/helpers"
"github.com/uselagoon/build-deploy-tool/internal/lagoon"
"github.com/uselagoon/build-deploy-tool/internal/testdata"
)

// these tests uses the same files as the dbaas templates
func TestIdentifyDBaaSConsumers(t *testing.T) {
type args struct {
name string
alertContact string
statusPageID string
projectName string
environmentName string
branch string
prNumber string
prHeadBranch string
prBaseBranch string
environmentType string
buildType string
activeEnvironment string
standbyEnvironment string
cacheNoCache string
serviceID string
secretPrefix string
projectVars string
envVars string
lagoonVersion string
lagoonYAML string
valuesFilePath string
templatePath string
}
tests := []struct {
name string
args testdata.TestData
vars []helpers.EnvironmentVariable
templatePath string
want []string
wantErr bool
}{
{
name: "test1 - mariadb to mariadb-dbaas only",
args: testdata.GetSeedData(
testdata.TestData{
ProjectName: "example-project",
EnvironmentName: "main",
Branch: "main",
LagoonYAML: "../internal/testdata/complex/lagoon.yml",
}, true),
templatePath: "testdata/output",
want: []string{
"mariadb:mariadb-dbaas",
},
},
{
name: "test2 - mariadb to mariadb-shared which converts to mariadb-dbaas",
args: testdata.GetSeedData(
testdata.TestData{
ProjectName: "example-project",
EnvironmentName: "main",
Branch: "main",
LagoonYAML: "../internal/testdata/complex/lagoon.yml",
ProjectVariables: []lagoon.EnvironmentVariable{
{Name: "LAGOON_SERVICE_TYPES", Value: "mariadb:mariadb-shared", Scope: "build"},
},
}, true),
templatePath: "testdata/output",
want: []string{
"mariadb:mariadb-dbaas",
},
},
{
name: "test3 - override provider to non-existent should result in failing dbaas check and a single pod no dbaas found",
args: testdata.GetSeedData(
testdata.TestData{
ProjectName: "example-project",
EnvironmentName: "main",
Branch: "main",
LagoonYAML: "../internal/testdata/complex/lagoon.yml",
ProjectVariables: []lagoon.EnvironmentVariable{
{Name: "LAGOON_DBAAS_ENVIRONMENT_TYPES", Value: "mariadb:development2", Scope: "build"},
},
}, true),
templatePath: "testdata/output",
want: []string{},
},
{
name: "test4 - mariadb-single to mariadb-dbaas (using mariadb-shared to mariadb-dbaas conversion)",
args: testdata.GetSeedData(
testdata.TestData{
ProjectName: "example-project",
EnvironmentName: "main",
Branch: "main",
LagoonYAML: "../internal/testdata/complex/lagoon.yml",
ProjectVariables: []lagoon.EnvironmentVariable{
{Name: "LAGOON_SERVICE_TYPES", Value: "mariadb:mariadb-shared", Scope: "build"},
},
}, true),
templatePath: "testdata/output",
want: []string{
"mariadb:mariadb-dbaas",
},
},
{
name: "test5 - multiple mariadb",
args: testdata.GetSeedData(
testdata.TestData{
ProjectName: "example-project",
EnvironmentName: "main",
Branch: "main",
LagoonYAML: "../internal/testdata/complex/lagoon.multidb.yml",
}, true),
templatePath: "testdata/output",
want: []string{
"mariadb:mariadb-dbaas",
"mariadb2:mariadb-dbaas",
},
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
savedTemplates := tt.templatePath
generator, err := testdata.SetupEnvironment(*rootCmd, savedTemplates, tt.args)
if err != nil {
t.Errorf("%v", err)
}
for _, envVar := range tt.vars {
err = os.Setenv(envVar.Name, envVar.Value)
if err != nil {
t.Errorf("%v", err)
}
}

// setup the fake dbaas server
ts := dbaasclient.TestDBaaSHTTPServer()
defer ts.Close()
err = os.Setenv("DBAAS_OPERATOR_HTTP", ts.URL)
if err != nil {
t.Errorf("%v", err)
}

got, err := IdentifyDBaaSConsumers(generator)
if (err != nil) != tt.wantErr {
t.Errorf("IdentifyDBaaSConsumers() error = %v, wantErr %v", err, tt.wantErr)
return
}
if !reflect.DeepEqual(got, tt.want) {
t.Errorf("IdentifyDBaaSConsumers() = %v, want %v", got, tt.want)
}
t.Cleanup(func() {
helpers.UnsetEnvVars(tt.vars)
})
})
}
}
1 change: 1 addition & 0 deletions cmd/identify_ingress.go
Original file line number Diff line number Diff line change
Expand Up @@ -120,5 +120,6 @@ func CreatedIngressIdentification(g generator.GeneratorInput) ([]string, []strin
func init() {
identifyCmd.AddCommand(primaryIngressIdentify)
identifyCmd.AddCommand(ingressIdentify)
identifyCmd.AddCommand(dbaasIdentify)
identifyCmd.AddCommand(autogenIngressIdentify)
}
3 changes: 3 additions & 0 deletions cmd/template_dbaas.go
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,9 @@ func DBaaSTemplateGeneration(g generator.GeneratorInput,
return fmt.Errorf("couldn't generate template: %v", err)
}
helpers.WriteTemplateFile(fmt.Sprintf("%s/%s.yaml", savedTemplates, "dbaas"), templateYAML)
if g.Debug {
fmt.Println(fmt.Sprintf("Templating dbaas consumers to %s", fmt.Sprintf("%s/%s.yaml", savedTemplates, "dbaas")))
}
return nil
}

Expand Down
55 changes: 55 additions & 0 deletions cmd/template_dbaas_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import (

"github.com/uselagoon/build-deploy-tool/internal/dbaasclient"
"github.com/uselagoon/build-deploy-tool/internal/helpers"
"github.com/uselagoon/build-deploy-tool/internal/lagoon"
"github.com/uselagoon/build-deploy-tool/internal/testdata"
)

Expand All @@ -32,6 +33,60 @@ func TestDBaaSTemplateGeneration(t *testing.T) {
templatePath: "testdata/output",
want: "../internal/testdata/complex/dbaas-templates/dbaas-1",
},
{
name: "test2 - mariadb-single to mariadb-dbaas (using mariadb-shared to mariadb-dbaas conversion)",
args: testdata.GetSeedData(
testdata.TestData{
ProjectName: "example-project",
EnvironmentName: "main",
Branch: "main",
LagoonYAML: "../internal/testdata/complex/lagoon.yml",
ProjectVariables: []lagoon.EnvironmentVariable{
{Name: "LAGOON_SERVICE_TYPES", Value: "mariadb:mariadb-shared", Scope: "build"},
},
}, true),
templatePath: "testdata/output",
want: "../internal/testdata/complex/dbaas-templates/dbaas-2",
},
{
name: "test3 - multiple mariadb",
args: testdata.GetSeedData(
testdata.TestData{
ProjectName: "example-project",
EnvironmentName: "main",
Branch: "main",
LagoonYAML: "../internal/testdata/complex/lagoon.multidb.yml",
}, true),
templatePath: "testdata/output",
want: "../internal/testdata/complex/dbaas-templates/dbaas-3",
},
{
name: "test4 - mongo",
args: testdata.GetSeedData(
testdata.TestData{
ProjectName: "example-project",
EnvironmentName: "main",
Branch: "main",
LagoonYAML: "../internal/testdata/node/lagoon.mongo.yml",
}, true),
templatePath: "testdata/output",
want: "../internal/testdata/node/dbaas-templates/dbaas-1",
},
{
name: "test5 - mongo override (the mongo should not generate because it has a mongodb-single override)",
args: testdata.GetSeedData(
testdata.TestData{
ProjectName: "example-project",
EnvironmentName: "main",
Branch: "main",
LagoonYAML: "../internal/testdata/node/lagoon.mongo.yml",
ProjectVariables: []lagoon.EnvironmentVariable{
{Name: "LAGOON_SERVICE_TYPES", Value: "mongo:mongodb-single", Scope: "build"},
},
}, true),
templatePath: "testdata/output",
want: "../internal/testdata/node/dbaas-templates/dbaas-2",
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
Expand Down
3 changes: 2 additions & 1 deletion internal/generator/buildvalues.go
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,6 @@ type ServiceValues struct {
AutogeneratedRoutesTLSAcme bool `json:"autogeneratedRoutesTLSAcme"`
AutogeneratedRouteDomain string `json:"autogeneratedRouteDomain"`
ShortAutogeneratedRouteDomain string `json:"shortAutogeneratedRouteDomain"`
DBaaSEnvironment string `json:"dbaasEnvironment"`
NativeCronjobs map[string]CronjobValues `json:"nativeCronjobs"`
InPodCronjobs string `json:"inPodCronjobs"`
ImageName string `json:"imageName"`
Expand All @@ -92,6 +91,8 @@ type ServiceValues struct {
CronjobTolerations *[]corev1.Toleration `json:"cronjobTolerations"`
CronjobAffinity *corev1.Affinity `json:"cronjobAffinity"`
DBaasReadReplica bool `json:"dBaasReadReplica"`
DBaaSEnvironment string `json:"dbaasEnvironment"`
IsDBaaS bool `json:"isDBaaS"`
BackupsEnabled bool `json:"backupsEnabled"`
}

Expand Down
Loading

0 comments on commit 6d3534a

Please sign in to comment.