Skip to content

Commit

Permalink
feat: modify the generators to adapt to the new model's adjustments (#…
Browse files Browse the repository at this point in the history
…453)

#### What type of PR is this?
/kind feature

#### What this PR does / why we need it:
Modify the go model of AppConfiguration, generators to adapt to the new model's adjustments.

New model:
https://github.com/KusionStack/catalog/blob/main/models/schema/v1/app_configuration.k
  • Loading branch information
elliotxx committed Aug 14, 2023
1 parent d7cbfab commit 8e06f7f
Show file tree
Hide file tree
Showing 19 changed files with 341 additions and 458 deletions.
14 changes: 7 additions & 7 deletions pkg/cmd/spec/generator.go
Original file line number Diff line number Diff line change
Expand Up @@ -69,11 +69,11 @@ func GenerateSpec(o *generator.Options, project *projectstack.Project, stack *pr
case projectstack.KCLGenerator:
g = &kcl.Generator{}
case projectstack.AppConfigurationGenerator:
appConfig, err := buildAppConfig(o, stack)
appConfigs, err := buildAppConfigs(o, stack)
if err != nil {
return nil, err
}
g = &appconfiguration.Generator{AppConfiguration: appConfig}
g = &appconfiguration.Generator{Apps: appConfigs}
default:
return nil, fmt.Errorf("unknow generator type:%s", gt)
}
Expand All @@ -86,7 +86,7 @@ func GenerateSpec(o *generator.Options, project *projectstack.Project, stack *pr
return spec, nil
}

func buildAppConfig(o *generator.Options, stack *projectstack.Stack) (*appconfigmodel.AppConfiguration, error) {
func buildAppConfigs(o *generator.Options, stack *projectstack.Stack) (map[string]appconfigmodel.AppConfiguration, error) {
compileResult, err := kcl.Run(o, stack)
if err != nil {
return nil, err
Expand All @@ -102,14 +102,14 @@ func buildAppConfig(o *generator.Options, stack *projectstack.Stack) (*appconfig
return nil, err
}

log.Debugf("unmarshal %s to app config", out)
appConfig := &appconfigmodel.AppConfiguration{}
err = yaml.Unmarshal(out, appConfig)
log.Debugf("unmarshal %s to app configs", out)
appConfigs := map[string]appconfigmodel.AppConfiguration{}
err = yaml.Unmarshal(out, appConfigs)
if err != nil {
return nil, err
}

return appConfig, nil
return appConfigs, nil
}

func GenerateSpecFromFile(filePath string) (*models.Spec, error) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,12 @@ import (
"kusionstack.io/kusion/pkg/generator"
"kusionstack.io/kusion/pkg/generator/appconfiguration/generators"
"kusionstack.io/kusion/pkg/models"
"kusionstack.io/kusion/pkg/models/appconfiguration"
appmodel "kusionstack.io/kusion/pkg/models/appconfiguration"
"kusionstack.io/kusion/pkg/projectstack"
)

type Generator struct {
*appconfiguration.AppConfiguration
Apps map[string]appmodel.AppConfiguration
}

func (acg *Generator) GenerateSpec(
Expand All @@ -21,11 +21,12 @@ func (acg *Generator) GenerateSpec(
Resources: []models.Resource{},
}

g, err := generators.NewAppConfigurationGenerator(project.Name, acg.AppConfiguration)
if err != nil {
return nil, err
}
if err = g.Generate(spec); err != nil {
gfs := []generators.NewGeneratorFunc{}
generators.ForeachOrderedApps(acg.Apps, func(appName string, app appmodel.AppConfiguration) error {
gfs = append(gfs, generators.NewAppConfigurationGeneratorFunc(project.Name, appName, &app))
return nil
})
if err := generators.CallGenerators(spec, gfs...); err != nil {
return nil, err
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,35 +9,47 @@ import (

type appConfigurationGenerator struct {
projectName string
ac *appconfiguration.AppConfiguration
appName string
app *appconfiguration.AppConfiguration
}

func NewAppConfigurationGenerator(projectName string, ac *appconfiguration.AppConfiguration) (Generator, error) {
func NewAppConfigurationGenerator(projectName, appName string, app *appconfiguration.AppConfiguration) (Generator, error) {
if len(projectName) == 0 {
return nil, fmt.Errorf("project name must not be empty")
}

if ac == nil {
if len(appName) == 0 {
return nil, fmt.Errorf("app name must not be empty")
}

if app == nil {
return nil, fmt.Errorf("can not find app configuration when generating the Spec")
}

return &appConfigurationGenerator{
projectName: projectName,
ac: ac,
appName: appName,
app: app,
}, nil
}

func NewAppConfigurationGeneratorFunc(projectName, appName string, app *appconfiguration.AppConfiguration) NewGeneratorFunc {
return func() (Generator, error) {
return NewAppConfigurationGenerator(projectName, appName, app)
}
}

func (g *appConfigurationGenerator) Generate(spec *models.Spec) error {
if spec.Resources == nil {
spec.Resources = make(models.Resources, 0)
}

gfs := []NewGeneratorFunc{
NewNamespaceGeneratorFunc(g.projectName),
NewComponentsGeneratorFunc(g.projectName, g.ac.Components),
NewWorkloadGeneratorFunc(g.projectName, g.appName, g.app.Workload),
}

if err := callGenerators(spec, gfs...); err != nil {
if err := CallGenerators(spec, gfs...); err != nil {
return err
}

Expand Down
55 changes: 0 additions & 55 deletions pkg/generator/appconfiguration/generators/components_generator.go

This file was deleted.

112 changes: 0 additions & 112 deletions pkg/generator/appconfiguration/generators/deployment_generator.go

This file was deleted.

26 changes: 13 additions & 13 deletions pkg/generator/appconfiguration/generators/job_generator.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,31 +6,31 @@ import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"

"kusionstack.io/kusion/pkg/models"
"kusionstack.io/kusion/pkg/models/appconfiguration/component"
"kusionstack.io/kusion/pkg/models/appconfiguration/workload"
)

type jobGenerator struct {
projectName string
compName string
comp *component.Component
jobName string
job *workload.Job
}

func NewJobGenerator(projectName, compName string, comp *component.Component) (Generator, error) {
func NewJobGenerator(projectName, jobName string, job *workload.Job) (Generator, error) {
return &jobGenerator{
projectName: projectName,
compName: compName,
comp: comp,
jobName: jobName,
job: job,
}, nil
}

func NewJobGeneratorFunc(projectName, compName string, comp *component.Component) NewGeneratorFunc {
func NewJobGeneratorFunc(projectName, jobName string, job *workload.Job) NewGeneratorFunc {
return func() (Generator, error) {
return NewJobGenerator(projectName, compName, comp)
return NewJobGenerator(projectName, jobName, job)
}
}

func (g *jobGenerator) Generate(spec *models.Spec) error {
job := g.comp.Job
job := g.job
if job == nil {
return nil
}
Expand All @@ -41,9 +41,9 @@ func (g *jobGenerator) Generate(spec *models.Spec) error {

meta := metav1.ObjectMeta{
Namespace: g.projectName,
Name: uniqueComponentName(g.projectName, g.compName),
Labels: g.comp.Labels,
Annotations: g.comp.Annotations,
Name: uniqueWorkloadName(g.projectName, g.jobName),
Labels: g.job.Labels,
Annotations: g.job.Annotations,
}

containers, err := toOrderedContainers(job.Containers)
Expand All @@ -53,7 +53,7 @@ func (g *jobGenerator) Generate(spec *models.Spec) error {
jobSpec := batchv1.JobSpec{
Template: corev1.PodTemplateSpec{
ObjectMeta: metav1.ObjectMeta{
Labels: uniqueComponentLabels(g.projectName, g.compName),
Labels: uniqueWorkloadLabels(g.projectName, g.jobName),
},
Spec: corev1.PodSpec{
Containers: containers,
Expand Down
Loading

0 comments on commit 8e06f7f

Please sign in to comment.