Feat: support with metadata as context render cue file in the addon (#3549)

Signed-off-by: barnettZQG <barnett.zqg@gmail.com>
This commit is contained in:
barnettZQG
2022-03-29 22:13:56 +08:00
committed by GitHub
parent dde8a8e4c0
commit 685d73a20c
4 changed files with 36 additions and 5 deletions
+15 -4
View File
@@ -567,7 +567,7 @@ func renderResources(addon *InstallPackage, args map[string]interface{}) ([]comm
}
for _, tmpl := range addon.CUETemplates {
comp, err := renderCUETemplate(tmpl, addon.Parameters, args)
comp, err := renderCUETemplate(tmpl, addon.Parameters, args, addon.Meta)
if err != nil {
return nil, NewAddonError(fmt.Sprintf("fail to render cue template %s", err.Error()))
}
@@ -932,17 +932,28 @@ func renderSchemaConfigmap(elem ElementFile) (*unstructured.Unstructured, error)
}
// renderCUETemplate will return a component from cue template
func renderCUETemplate(elem ElementFile, parameters string, args map[string]interface{}) (*common2.ApplicationComponent, error) {
func renderCUETemplate(elem ElementFile, parameters string, args map[string]interface{}, metadata Meta) (*common2.ApplicationComponent, error) {
bt, err := json.Marshal(args)
if err != nil {
return nil, err
}
var contextFile = strings.Builder{}
var paramFile = cuemodel.ParameterFieldName + ": {}"
if string(bt) != "null" {
paramFile = fmt.Sprintf("%s: %s", cuemodel.ParameterFieldName, string(bt))
}
param := fmt.Sprintf("%s\n%s", paramFile, parameters)
v, err := value.NewValue(param, nil, "")
// addon metadata context
metadataJSON, err := json.Marshal(metadata)
if err != nil {
return nil, err
}
contextFile.WriteString(fmt.Sprintf("context: metadata: %s\n", string(metadataJSON)))
// parameter definition
contextFile.WriteString(paramFile + "\n")
// user custom parameter
contextFile.WriteString(parameters + "\n")
v, err := value.NewValue(contextFile.String(), nil, "")
if err != nil {
return nil, err
}
+17
View File
@@ -880,3 +880,20 @@ func TestReadDefFile(t *testing.T) {
// verify
assert.True(t, len(uiData.Definitions) == 1)
}
func TestRenderCUETemplate(t *testing.T) {
fileDate, err := os.ReadFile("./testdata/example/resources/configmap.cue")
assert.NoError(t, err)
component, err := renderCUETemplate(ElementFile{Data: string(fileDate), Name: "configmap.cue"}, "{\"example\": \"\"}", map[string]interface{}{
"example": "render",
}, Meta{
Version: "1.0.1",
})
assert.NoError(t, err)
assert.True(t, component.Type == "raw")
var config = make(map[string]interface{})
err = json.Unmarshal(component.Properties.Raw, &config)
assert.NoError(t, err)
assert.True(t, component.Type == "raw")
assert.True(t, config["metadata"].(map[string]interface{})["labels"].(map[string]interface{})["version"] == "1.0.1")
}
+1 -1
View File
@@ -1,5 +1,5 @@
name: example
version: 1.0.0
version: 1.0.1
description: Extended workload to do continuous and progressive delivery
icon: https://raw.githubusercontent.com/fluxcd/flux/master/docs/_files/weave-flux.png
url: https://fluxcd.io
+3
View File
@@ -6,6 +6,9 @@ output: {
metadata: {
name: "exampleinput"
namespace: "default"
labels: {
version: context.metadata.version
}
}
data: input: parameter.example
}