From cff6a7443043008c8efa8b291ee3c52718dd61fa Mon Sep 17 00:00:00 2001 From: Hongchao Deng Date: Mon, 26 Oct 2020 20:00:48 -0700 Subject: [PATCH] capability: use def name as name Signed-off-by: Hongchao Deng --- api/types/capability.go | 1 - pkg/appfile/service.go | 8 +++----- pkg/appfile/template/manager.go | 10 ++++------ pkg/cue/convert.go | 16 +++++++--------- pkg/cue/convert_test.go | 9 +++------ pkg/plugins/cluster.go | 4 ++-- pkg/plugins/cluster_test.go | 11 ++++------- 7 files changed, 23 insertions(+), 36 deletions(-) diff --git a/api/types/capability.go b/api/types/capability.go index 8cb5daa4f..e02d91464 100644 --- a/api/types/capability.go +++ b/api/types/capability.go @@ -39,7 +39,6 @@ type CrdInfo struct { type Capability struct { Name string `json:"name"` Type CapType `json:"type"` - DefName string `json:"defName,omitempty"` CueTemplate string `json:"template,omitempty"` CueTemplateURI string `json:"templateURI,omitempty"` Parameters []Parameter `json:"parameters,omitempty"` diff --git a/pkg/appfile/service.go b/pkg/appfile/service.go index f33fdb358..fa3da65a0 100644 --- a/pkg/appfile/service.go +++ b/pkg/appfile/service.go @@ -104,8 +104,7 @@ func (s Service) RenderService(tm template.Manager, name, ns string, cg configGe } ctxData["config"] = data } - _, rawTmpl := tm.LoadTemplate(wtype) - u, err := evalComponent(rawTmpl, ctxData, intifyValues(workloadKeys)) + u, err := evalComponent(tm.LoadTemplate(wtype), ctxData, intifyValues(workloadKeys)) if err != nil { return nil, nil, fmt.Errorf("eval component failed: %w", err) } @@ -114,14 +113,13 @@ func (s Service) RenderService(tm template.Manager, name, ns string, cg configGe // render traits traits := make([]v1alpha2.ComponentTrait, 0) for traitType, traitData := range traitKeys { - defName, rawTmpl := tm.LoadTemplate(traitType) - ts, err := evalTraits(rawTmpl, ctxData, intifyValues(traitData)) + ts, err := evalTraits(tm.LoadTemplate(traitType), ctxData, intifyValues(traitData)) if err != nil { return nil, nil, fmt.Errorf("eval traits failed: %w", err) } // one capability corresponds to one trait only if len(ts) == 1 { - ts[0].SetLabels(map[string]string{oam.TraitTypeLabel: defName}) + ts[0].SetLabels(map[string]string{oam.TraitTypeLabel: traitType}) } for _, t := range ts { traits = append(traits, v1alpha2.ComponentTrait{ diff --git a/pkg/appfile/template/manager.go b/pkg/appfile/template/manager.go index 9e71d4443..78b06da7c 100644 --- a/pkg/appfile/template/manager.go +++ b/pkg/appfile/template/manager.go @@ -7,7 +7,7 @@ import ( type Manager interface { IsTrait(key string) bool - LoadTemplate(key string) (defName, tmpl string) + LoadTemplate(key string) (tmpl string) } func Load() (Manager, error) { @@ -20,7 +20,6 @@ func Load() (Manager, error) { t := &Template{} t.Captype = cap.Type t.Raw = cap.CueTemplate - t.DefName = cap.DefName m.Templates[cap.Name] = t } return m, nil @@ -29,7 +28,6 @@ func Load() (Manager, error) { type Template struct { Captype types.CapType Raw string - DefName string } type manager struct { @@ -50,10 +48,10 @@ func (m *manager) IsTrait(key string) bool { return t.Captype == types.TypeTrait } -func (m *manager) LoadTemplate(key string) (string, string) { +func (m *manager) LoadTemplate(key string) string { t, ok := m.Templates[key] if !ok { - return "", "" + return "" } - return t.DefName, t.Raw + return t.Raw } diff --git a/pkg/cue/convert.go b/pkg/cue/convert.go index f69670537..1bbed023f 100644 --- a/pkg/cue/convert.go +++ b/pkg/cue/convert.go @@ -57,19 +57,19 @@ func Eval(templatePath string, value map[string]interface{}) (*unstructured.Unst return &unstructured.Unstructured{Object: obj}, nil } -func GetParameters(templatePath string) ([]types.Parameter, string, error) { +func GetParameters(templatePath string) ([]types.Parameter, error) { r := cue.Runtime{} b, err := ioutil.ReadFile(templatePath) if err != nil { - return nil, "", err + return nil, err } template, err := r.Compile("", string(b)+BaseTemplate) if err != nil { - return nil, "", err + return nil, err } tempStruct, err := template.Value().Struct() if err != nil { - return nil, "", err + return nil, err } // find the parameter definition var paraDef cue.FieldInfo @@ -83,14 +83,12 @@ func GetParameters(templatePath string) ([]types.Parameter, string, error) { break } if !found { - return nil, "", errors.New("arguments not exist") + return nil, errors.New("arguments not exist") } arguments, err := paraDef.Value.Struct() if err != nil { - return nil, "", fmt.Errorf("arguments not defined as struct %v", err) + return nil, fmt.Errorf("arguments not defined as struct %v", err) } - // workloadType is the name of the parameter definition - var workloadType = strings.TrimPrefix(paraDef.Name, "#") // parse each fields in the parameter fields var params []types.Parameter for i := 0; i < arguments.Len(); i++ { @@ -115,7 +113,7 @@ func GetParameters(templatePath string) ([]types.Parameter, string, error) { param.Short, param.Usage = RetrieveComments(val) params = append(params, param) } - return params, workloadType, nil + return params, nil } func getDefaultByKind(k cue.Kind) interface{} { diff --git a/pkg/cue/convert_test.go b/pkg/cue/convert_test.go index f298a64e4..804efb0aa 100644 --- a/pkg/cue/convert_test.go +++ b/pkg/cue/convert_test.go @@ -55,9 +55,8 @@ func TestEvalDeployment(t *testing.T) { } func TestGetParameter(t *testing.T) { - params, workloadType, err := GetParameters("testdata/workloads/metrics.cue") + params, err := GetParameters("testdata/workloads/metrics.cue") assert.NoError(t, err) - assert.Equal(t, "metrics", workloadType) assert.Equal(t, params, []types.Parameter{ {Name: "format", Required: false, Default: "prometheus", Usage: "format of the metrics, " + "default as prometheus", Short: "f", Type: cue.StringKind}, @@ -66,9 +65,8 @@ func TestGetParameter(t *testing.T) { {Name: "selector", Required: false, Usage: "the label selector for the pods, default is the workload labels", Type: cue.StructKind}, }) - params, workloadType, err = GetParameters("testdata/workloads/deployment.cue") + params, err = GetParameters("testdata/workloads/deployment.cue") assert.NoError(t, err) - assert.Equal(t, "deployment", workloadType) assert.Equal(t, []types.Parameter{ {Name: "name", Required: true, Default: "", Type: cue.StringKind}, {Name: "env", Required: false, Default: nil, Type: cue.ListKind}, @@ -77,9 +75,8 @@ func TestGetParameter(t *testing.T) { Type: cue.IntKind}}, params) - params, workloadType, err = GetParameters("testdata/workloads/test-param.cue") + params, err = GetParameters("testdata/workloads/test-param.cue") assert.NoError(t, err) - assert.Equal(t, "deployment", workloadType) assert.Equal(t, []types.Parameter{ {Name: "name", Required: true, Default: "", Type: cue.StringKind}, {Name: "env", Required: false, Default: nil, Type: cue.ListKind}, diff --git a/pkg/plugins/cluster.go b/pkg/plugins/cluster.go index 9d6fd990f..baef15050 100644 --- a/pkg/plugins/cluster.go +++ b/pkg/plugins/cluster.go @@ -95,7 +95,7 @@ func HandleDefinition(name, syncDir, crdName string, annotation map[string]strin return types.Capability{}, err } tmp.Type = tp - tmp.DefName = name + tmp.Name = name if tp == types.TypeTrait { tmp.AppliesTo = applyTo } @@ -147,7 +147,7 @@ func HandleTemplate(in *runtime.RawExtension, name, syncDir string) (types.Capab return types.Capability{}, err } tmp.DefinitionPath = filePath - tmp.Parameters, tmp.Name, err = cue.GetParameters(filePath) + tmp.Parameters, err = cue.GetParameters(filePath) if err != nil { return types.Capability{}, err } diff --git a/pkg/plugins/cluster_test.go b/pkg/plugins/cluster_test.go index 1de6663a9..3cc40c7cd 100644 --- a/pkg/plugins/cluster_test.go +++ b/pkg/plugins/cluster_test.go @@ -18,9 +18,8 @@ import ( var _ = Describe("DefinitionFiles", func() { route := types.Capability{ - Name: "route", - Type: types.TypeTrait, - DefName: "routes.test", + Name: "routes.test", + Type: types.TypeTrait, Parameters: []types.Parameter{ { Name: "domain", @@ -34,9 +33,8 @@ var _ = Describe("DefinitionFiles", func() { } deployment := types.Capability{ - Name: "deployment", + Name: "deployments.testapps", Type: types.TypeWorkload, - DefName: "deployments.testapps", CrdName: "deployments.testapps", Description: "description not defined", Parameters: []types.Parameter{ @@ -63,9 +61,8 @@ var _ = Describe("DefinitionFiles", func() { } websvc := types.Capability{ - Name: "webservice", + Name: "webservice.testapps", Type: types.TypeWorkload, - DefName: "webservice.testapps", Description: "description not defined", Parameters: []types.Parameter{{ Name: "env", Type: cue.ListKind,