Skip to content

Commit

Permalink
fix DT case for hcl parsing with percentage delimiter (#4012)
Browse files Browse the repository at this point in the history
  • Loading branch information
subhashish-devtron committed Oct 4, 2023
1 parent 2ecc785 commit d29e963
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 7 deletions.
9 changes: 5 additions & 4 deletions pkg/variables/parsers/VariableTemplateParser.go
Original file line number Diff line number Diff line change
Expand Up @@ -213,20 +213,21 @@ func (impl *VariableTemplateParserImpl) convertToHclCompatible(templateType Vari
}
template = fmt.Sprintf(`{"root":%s}`, template)
}
template = impl.diluteExistingHclVars(template)
template = impl.diluteExistingHclVars(template, "$")
template = impl.diluteExistingHclVars(template, "%")
return impl.convertToHclExpression(template), nil
}

func (impl *VariableTemplateParserImpl) diluteExistingHclVars(template string) string {
hclVarRegex := regexp.MustCompile(`\$\{`)
func (impl *VariableTemplateParserImpl) diluteExistingHclVars(template string, templateControlKeyword string) string {
hclVarRegex := regexp.MustCompile(templateControlKeyword + `\{`)
indexesData := hclVarRegex.FindAllIndex([]byte(template), -1)
var strBuilder strings.Builder
strBuilder.Grow(len(template))
currentIndex := 0
for _, datum := range indexesData {
startIndex := datum[0]
endIndex := datum[1]
strBuilder.WriteString(template[currentIndex:startIndex] + "$" + template[startIndex:endIndex])
strBuilder.WriteString(template[currentIndex:startIndex] + templateControlKeyword + template[startIndex:endIndex])
currentIndex = endIndex
}
if currentIndex <= len(template) {
Expand Down
6 changes: 3 additions & 3 deletions pkg/variables/parsers/VariableTemplateParser_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,22 +35,22 @@ func TestVariableTemplateParserImpl_ParseTemplate(t *testing.T) {
assert.Nil(t, err)
templateParser := NewVariableTemplateParserImpl(logger)
t.Run("parse template", func(t *testing.T) {
scopedVariables := []*models.ScopedVariableData{{VariableName: "container-port-number-new", VariableValue: models.VariableValue{Value: "1800"}}}
scopedVariables := []*models.ScopedVariableData{{VariableName: "container-port-number-new", VariableValue: &models.VariableValue{Value: "1800"}}}
parserResponse := templateParser.ParseTemplate(VariableParserRequest{TemplateType: JsonVariableTemplate, Template: JsonWithIntParam, Variables: scopedVariables})
parsedTemplate := parserResponse.ResolvedTemplate
assert.Equal(t, JsonWithIntParamResolvedTemplate, parsedTemplate)
})

t.Run("parse stringify template", func(t *testing.T) {
scopedVariables := []*models.ScopedVariableData{{VariableName: "Variable1", VariableValue: models.VariableValue{Value: "123"}}}
scopedVariables := []*models.ScopedVariableData{{VariableName: "Variable1", VariableValue: &models.VariableValue{Value: "123"}}}
parserResponse := templateParser.ParseTemplate(VariableParserRequest{TemplateType: StringVariableTemplate, Template: StringTemplate, Variables: scopedVariables})
err = parserResponse.Error
assert.Nil(t, err)
assert.Equal(t, StringTemplateResolved, parserResponse.ResolvedTemplate)
})

t.Run("parse stringify template with int value", func(t *testing.T) {
scopedVariables := []*models.ScopedVariableData{{VariableName: "container-port-number-new", VariableValue: models.VariableValue{Value: "1800"}}}
scopedVariables := []*models.ScopedVariableData{{VariableName: "container-port-number-new", VariableValue: &models.VariableValue{Value: "1800"}}}
parserResponse := templateParser.ParseTemplate(VariableParserRequest{TemplateType: StringVariableTemplate, Template: StringTemplateWithIntParam, Variables: scopedVariables})
err = parserResponse.Error
assert.Nil(t, err)
Expand Down

0 comments on commit d29e963

Please sign in to comment.