mirror of
https://github.com/kubevela/kubevela.git
synced 2026-08-19 04:26:39 +00:00
capability: use def name as name
Signed-off-by: Hongchao Deng <hongchaodeng1@gmail.com>
This commit is contained in:
@@ -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"`
|
||||
|
||||
@@ -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{
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
+7
-9
@@ -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{} {
|
||||
|
||||
@@ -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},
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user