Skip to content
This repository was archived by the owner on Jun 2, 2024. It is now read-only.

Commit

Permalink
#95: fix application config resource read
Browse files Browse the repository at this point in the history
  • Loading branch information
gessnerfl committed Apr 19, 2021
1 parent 5f9c3ec commit 6500f70
Show file tree
Hide file tree
Showing 4 changed files with 52 additions and 1 deletion.
10 changes: 10 additions & 0 deletions instana/filterexpression/filter-expression-parser.go
Original file line number Diff line number Diff line change
Expand Up @@ -218,6 +218,16 @@ var (
)
)

//Normalize parses the input and returns the normalized representation of the input string
func Normalize(input string) (string, error) {
parser := NewParser()
expr, err := parser.Parse(input)
if err != nil {
return input, err
}
return expr.Render(), nil
}

//NewParser creates a new instance of a Parser
func NewParser() Parser {
return new(parserImpl)
Expand Down
17 changes: 17 additions & 0 deletions instana/filterexpression/filter-expression-parser_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -467,3 +467,20 @@ func TestShouldGetEntityOriginByInstanaAPIEntity(t *testing.T) {
func TestShouldReturnEntityOriginDestinationAsFallbackValueWhenMatcherExpressionEntityIsNotValid(t *testing.T) {
require.Equal(t, EntityOriginDestination, SupportedEntityOrigins.ForInstanaAPIEntity(restapi.MatcherExpressionEntity("invalid")))
}

func TestShouldNormalizeExpression(t *testing.T) {
input := "entity.name NOT_EMPTY"
expectedResult := "entity.name@dest NOT_EMPTY"

result, err := Normalize(input)
require.NoError(t, err)
require.Equal(t, expectedResult, result)
}

func TestShouldFailToNormalizeExpressionWehnExpressionIsNotValied(t *testing.T) {
input := "entity.name bla bla bla"

result, err := Normalize(input)
require.Error(t, err)
require.Equal(t, input, result)
}
24 changes: 24 additions & 0 deletions instana/resource-application-config.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package instana

import (
"context"
"fmt"
"log"

"github.com/gessnerfl/terraform-provider-instana/instana/filterexpression"
Expand Down Expand Up @@ -65,6 +66,28 @@ var (
Type: schema.TypeString,
Required: true,
Description: "The match specification of the application config",
DiffSuppressFunc: func(k, old, new string, d *schema.ResourceData) bool {
normalized, err := filterexpression.Normalize(new)
if err == nil {
return normalized == old
}
return old == new
},
StateFunc: func(val interface{}) string {
normalized, err := filterexpression.Normalize(val.(string))
if err == nil {
return normalized
}
return val.(string)
},
ValidateFunc: func(val interface{}, key string) (warns []string, errs []error) {
v := val.(string)
if _, err := filterexpression.NewParser().Parse(v); err != nil {
errs = append(errs, fmt.Errorf("%q is not a valid match expression; %s", key, err))
}

return
},
}
//ApplicationConfigNormalizedMatchSpecification schema for the application config field normalized_match_specification
ApplicationConfigNormalizedMatchSpecification = &schema.Schema{
Expand Down Expand Up @@ -136,6 +159,7 @@ func (r *applicationConfigResource) UpdateState(d *schema.ResourceData, obj rest
d.Set(ApplicationConfigFieldScope, string(applicationConfig.Scope))
d.Set(ApplicationConfigFieldBoundaryScope, string(applicationConfig.BoundaryScope))
d.Set(ApplicationConfigFieldNormalizedMatchSpecification, normalizedExpressionString)
d.Set(ApplicationConfigFieldMatchSpecification, normalizedExpressionString)

d.SetId(applicationConfig.ID)
return nil
Expand Down
2 changes: 1 addition & 1 deletion instana/resource-application-config_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,7 @@ func createApplicationConfigResourceTestStep(httpPort int, iteration int) resour
resource.TestCheckResourceAttr(testApplicationConfigDefinition, ApplicationConfigFieldFullLabel, formatResourceFullName(iteration)),
resource.TestCheckResourceAttr(testApplicationConfigDefinition, ApplicationConfigFieldScope, string(restapi.ApplicationConfigScopeIncludeAllDownstream)),
resource.TestCheckResourceAttr(testApplicationConfigDefinition, ApplicationConfigFieldBoundaryScope, string(restapi.BoundaryScopeAll)),
resource.TestCheckResourceAttr(testApplicationConfigDefinition, ApplicationConfigFieldMatchSpecification, defaultMatchSpecification),
resource.TestCheckResourceAttr(testApplicationConfigDefinition, ApplicationConfigFieldMatchSpecification, defaultMatchSpecificationNormalized),
resource.TestCheckResourceAttr(testApplicationConfigDefinition, ApplicationConfigFieldNormalizedMatchSpecification, defaultMatchSpecificationNormalized),
),
}
Expand Down

0 comments on commit 6500f70

Please sign in to comment.