Skip to content

Commit

Permalink
fix: customize namespace generator issue (#721)
Browse files Browse the repository at this point in the history
  • Loading branch information
adohe committed Dec 25, 2023
1 parent a91a525 commit c1f0455
Show file tree
Hide file tree
Showing 27 changed files with 538 additions and 454 deletions.
44 changes: 24 additions & 20 deletions pkg/modules/generators/accessories/database/alicloud_rds_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -37,11 +37,12 @@ func TestGenerateAlicloudResources(t *testing.T) {
SubnetID: "test_subnet_id",
}
generator := &databaseGenerator{
project: project,
stack: stack,
appName: appName,
workload: workload,
database: database,
project: project,
stack: stack,
appName: appName,
workload: workload,
database: database,
namespace: project.Name,
}

alicloudProviderRegion = "cn-beijing"
Expand Down Expand Up @@ -99,11 +100,12 @@ func TestGenerateAlicloudDBInstance(t *testing.T) {
SubnetID: "test_subnet_id",
}
generator := &databaseGenerator{
project: project,
stack: stack,
appName: appName,
workload: workload,
database: database,
project: project,
stack: stack,
appName: appName,
workload: workload,
database: database,
namespace: project.Name,
}

alicloudDBInstanceID, r := generator.generateAlicloudDBInstance(alicloudProviderRegion, alicloudProvider, database)
Expand Down Expand Up @@ -171,11 +173,12 @@ func TestGenerateAlicloudDBConnection(t *testing.T) {
SubnetID: "test_subnet_id",
}
generator := &databaseGenerator{
project: project,
stack: stack,
appName: appName,
workload: workload,
database: database,
project: project,
stack: stack,
appName: appName,
workload: workload,
database: database,
namespace: project.Name,
}

dbInstanceID := "aliyun:alicloud:alicloud_db_instance:testapp"
Expand Down Expand Up @@ -228,11 +231,12 @@ func TestGenerateAlicloudRDSAccount(t *testing.T) {
SubnetID: "test_subnet_id",
}
generator := &databaseGenerator{
project: project,
stack: stack,
appName: appName,
workload: workload,
database: database,
project: project,
stack: stack,
appName: appName,
workload: workload,
database: database,
namespace: project.Name,
}

accountName := database.Username
Expand Down
33 changes: 18 additions & 15 deletions pkg/modules/generators/accessories/database/aws_rds_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -31,11 +31,12 @@ func TestGenerateAWSResources(t *testing.T) {
Username: "root",
}
generator := &databaseGenerator{
project: project,
stack: stack,
appName: appName,
workload: workload,
database: database,
project: project,
stack: stack,
appName: appName,
workload: workload,
database: database,
namespace: project.Name,
}

awsProviderRegion = "us-east-1"
Expand Down Expand Up @@ -87,11 +88,12 @@ func TestGenerateAWSSecurityGroup(t *testing.T) {
Username: "root",
}
generator := &databaseGenerator{
project: project,
stack: stack,
appName: appName,
workload: workload,
database: database,
project: project,
stack: stack,
appName: appName,
workload: workload,
database: database,
namespace: project.Name,
}

var cidrBlocks []string
Expand Down Expand Up @@ -154,11 +156,12 @@ func TestGenerateAWSDBInstance(t *testing.T) {
Username: "root",
}
generator := &databaseGenerator{
project: project,
stack: stack,
appName: appName,
workload: workload,
database: database,
project: project,
stack: stack,
appName: appName,
workload: workload,
database: database,
namespace: project.Name,
}

awsSecurityGroupID := "hashicorp:aws:aws_security_group:testapp-db"
Expand Down
46 changes: 16 additions & 30 deletions pkg/modules/generators/accessories/database/database_generator.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,42 +26,28 @@ const (
)

type databaseGenerator struct {
project *apiv1.Project
stack *apiv1.Stack
appName string
workload *workload.Workload
database *database.Database
project *apiv1.Project
stack *apiv1.Stack
appName string
workload *workload.Workload
database *database.Database
namespace string
}

func NewDatabaseGenerator(
project *apiv1.Project,
stack *apiv1.Stack,
appName string,
workload *workload.Workload,
database *database.Database,
) (modules.Generator, error) {
if len(project.Name) == 0 {
return nil, fmt.Errorf("project name must not be empty")
}

func NewDatabaseGenerator(ctx modules.GeneratorContext) (modules.Generator, error) {
return &databaseGenerator{
project: project,
stack: stack,
appName: appName,
workload: workload,
database: database,
project: ctx.Project,
stack: ctx.Stack,
appName: ctx.Application.Name,
workload: ctx.Application.Workload,
database: ctx.Application.Database,
namespace: ctx.Namespace,
}, nil
}

func NewDatabaseGeneratorFunc(
project *apiv1.Project,
stack *apiv1.Stack,
appName string,
workload *workload.Workload,
database *database.Database,
) modules.NewGeneratorFunc {
func NewDatabaseGeneratorFunc(ctx modules.GeneratorContext) modules.NewGeneratorFunc {
return func() (modules.Generator, error) {
return NewDatabaseGenerator(project, stack, appName, workload, database)
return NewDatabaseGenerator(ctx)
}
}

Expand Down Expand Up @@ -160,7 +146,7 @@ func (g *databaseGenerator) generateDBSecret(hostAddress, username, password str
},
ObjectMeta: metav1.ObjectMeta{
Name: g.appName + dbResSuffix,
Namespace: g.project.Name,
Namespace: g.namespace,
},
StringData: data,
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,46 +9,58 @@ import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"

apiv1 "kusionstack.io/kusion/pkg/apis/core/v1"
"kusionstack.io/kusion/pkg/modules"
"kusionstack.io/kusion/pkg/modules/inputs"
"kusionstack.io/kusion/pkg/modules/inputs/accessories/database"
"kusionstack.io/kusion/pkg/modules/inputs/workload"
"kusionstack.io/kusion/pkg/modules/inputs/workload/container"
)

func TestNewDatabaseGenerator(t *testing.T) {
project := &apiv1.Project{
Name: "testproject",
func newGeneratorContext(
project *apiv1.Project,
stack *apiv1.Stack,
appName string,
workload *workload.Workload,
database *database.Database,
) modules.GeneratorContext {
application := &inputs.AppConfiguration{
Name: appName,
Workload: workload,
Database: database,
}
stack := &apiv1.Stack{
Name: "teststack",
return modules.GeneratorContext{
Project: project,
Stack: stack,
Application: application,
Namespace: project.Name,
}
}

func TestNewDatabaseGenerator(t *testing.T) {
project := &apiv1.Project{Name: "testproject"}
stack := &apiv1.Stack{Name: "teststack"}
appName := "testapp"
workload := &workload.Workload{}
database := &database.Database{}
generator, err := NewDatabaseGenerator(project, stack, appName, workload, database)
context := newGeneratorContext(project, stack, appName, &workload.Workload{}, &database.Database{})
generator, err := NewDatabaseGenerator(context)

assert.NoError(t, err)
assert.NotNil(t, generator)
}

func TestGenerate(t *testing.T) {
project := &apiv1.Project{
Name: "testproject",
}
stack := &apiv1.Stack{
Name: "teststack",
}
project := &apiv1.Project{Name: "testproject"}
stack := &apiv1.Stack{Name: "teststack"}
appName := "testapp"
workload := &workload.Workload{}
database := &database.Database{
db := &database.Database{
Type: "aws",
Engine: "mysql",
Version: "5.7",
InstanceType: "db.t3.micro",
Size: 10,
Username: "root",
}
generator, _ := NewDatabaseGenerator(project, stack, appName, workload, database)
context := newGeneratorContext(project, stack, appName, &workload.Workload{}, db)
generator, _ := NewDatabaseGenerator(context)

awsProviderRegion = "us-east-1"
spec := &apiv1.Intent{}
Expand Down Expand Up @@ -105,15 +117,15 @@ func TestGenerate(t *testing.T) {
ID: "hashicorp:aws:aws_db_instance:testapp",
Type: "Terraform",
Attributes: map[string]interface{}{
"allocated_storage": database.Size,
"engine": database.Engine,
"engine_version": database.Version,
"allocated_storage": db.Size,
"engine": db.Engine,
"engine_version": db.Version,
"identifier": appName,
"instance_class": database.InstanceType,
"instance_class": db.InstanceType,
"password": "$kusion_path.hashicorp:random:random_password:testapp-db.result",
"publicly_accessible": false,
"skip_final_snapshot": true,
"username": database.Username,
"username": db.Username,
"vpc_security_group_ids": []string{
"$kusion_path.hashicorp:aws:aws_security_group:testapp-db.id",
},
Expand All @@ -140,7 +152,7 @@ func TestGenerate(t *testing.T) {
"stringData": map[string]interface{}{
"hostAddress": "$kusion_path.hashicorp:aws:aws_db_instance:testapp.address",
"password": "$kusion_path.hashicorp:random:random_password:testapp-db.result",
"username": database.Username,
"username": db.Username,
},
},
Extensions: map[string]interface{}{
Expand Down Expand Up @@ -183,11 +195,12 @@ func TestInjectSecret(t *testing.T) {
Username: "root",
}
generator := &databaseGenerator{
project: project,
stack: stack,
appName: appName,
workload: workload,
database: database,
project: project,
stack: stack,
appName: appName,
workload: workload,
database: database,
namespace: project.Name,
}

data := make(map[string]string)
Expand Down Expand Up @@ -242,11 +255,12 @@ func TestGenerateTFRandomPassword(t *testing.T) {
workload := &workload.Workload{}
database := &database.Database{}
generator := &databaseGenerator{
project: project,
stack: stack,
appName: appName,
workload: workload,
database: database,
project: project,
stack: stack,
appName: appName,
workload: workload,
database: database,
namespace: project.Name,
}
randomProvider := &inputs.Provider{}
randomProvider.SetString(randomProviderURL)
Expand Down Expand Up @@ -284,11 +298,12 @@ func TestGenerateDBSeret(t *testing.T) {
workload := &workload.Workload{}
database := &database.Database{}
generator := &databaseGenerator{
project: project,
stack: stack,
appName: appName,
workload: workload,
database: database,
project: project,
stack: stack,
appName: appName,
workload: workload,
database: database,
namespace: project.Name,
}

spec := &apiv1.Intent{}
Expand Down
8 changes: 4 additions & 4 deletions pkg/modules/generators/accessories/database/local_database.go
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ func (g *databaseGenerator) generateLocalSecret(spec *apiv1.Intent) (string, err
},
ObjectMeta: metav1.ObjectMeta{
Name: g.appName + dbResSuffix + localSecretSuffix,
Namespace: g.project.Name,
Namespace: g.namespace,
},
StringData: data,
}
Expand All @@ -89,7 +89,7 @@ func (g *databaseGenerator) generateLocalPVC(db *database.Database, spec *apiv1.
},
ObjectMeta: metav1.ObjectMeta{
Name: g.appName + dbResSuffix + localPVCSuffix,
Namespace: g.project.Name,
Namespace: g.namespace,
Labels: localMatchLabels,
},
Spec: v1.PersistentVolumeClaimSpec{
Expand Down Expand Up @@ -127,7 +127,7 @@ func (g *databaseGenerator) generateLocalDeployment(db *database.Database, spec
},
ObjectMeta: metav1.ObjectMeta{
Name: g.appName + dbResSuffix + localDeploymentSuffix,
Namespace: g.project.Name,
Namespace: g.namespace,
},
Spec: appsv1.DeploymentSpec{
Selector: &metav1.LabelSelector{
Expand Down Expand Up @@ -166,7 +166,7 @@ func (g *databaseGenerator) generateLocalService(db *database.Database, spec *ap
},
ObjectMeta: metav1.ObjectMeta{
Name: svcName,
Namespace: g.project.Name,
Namespace: g.namespace,
Labels: localMatchLabels,
},
Spec: v1.ServiceSpec{
Expand Down
Loading

0 comments on commit c1f0455

Please sign in to comment.