Skip to content

Commit

Permalink
backport of commit 5bb00eb
Browse files Browse the repository at this point in the history
  • Loading branch information
erichaberkorn committed May 29, 2023
1 parent 5196775 commit dbac388
Show file tree
Hide file tree
Showing 3 changed files with 93 additions and 1 deletion.
3 changes: 3 additions & 0 deletions .changelog/2194.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
```release-note:
crd: fix bug on service intentions CRD causing some updates to be ignored.
```
19 changes: 18 additions & 1 deletion control-plane/api/v1alpha1/serviceintentions_types.go
Original file line number Diff line number Diff line change
Expand Up @@ -228,18 +228,34 @@ func (in *ServiceIntentions) ConsulGlobalResource() bool {
return false
}

func normalizeEmptyToDefault(value string) string {
if value == "" {
return "default"
}
return value
}

func (in *ServiceIntentions) MatchesConsul(candidate api.ConfigEntry) bool {
configEntry, ok := candidate.(*capi.ServiceIntentionsConfigEntry)
if !ok {
return false
}

specialEquality := cmp.Options{
cmp.FilterPath(func(path cmp.Path) bool {
return path.String() == "Sources.Namespace"
}, cmp.Transformer("NormalizeNamespace", normalizeEmptyToDefault)),
cmp.FilterPath(func(path cmp.Path) bool {
return path.String() == "Sources.Partition"
}, cmp.Transformer("NormalizePartition", normalizeEmptyToDefault)),
}

// No datacenter is passed to ToConsul as we ignore the Meta field when checking for equality.
return cmp.Equal(
in.ToConsul(""),
configEntry,
cmpopts.IgnoreFields(capi.ServiceIntentionsConfigEntry{}, "Partition", "Namespace", "Meta", "ModifyIndex", "CreateIndex"),
cmpopts.IgnoreFields(capi.SourceIntention{}, "Partition", "Namespace", "LegacyID", "LegacyMeta", "LegacyCreateTime", "LegacyUpdateTime", "Precedence", "Type"),
cmpopts.IgnoreFields(capi.SourceIntention{}, "LegacyID", "LegacyMeta", "LegacyCreateTime", "LegacyUpdateTime", "Precedence", "Type"),
cmpopts.IgnoreUnexported(),
cmpopts.EquateEmpty(),
// Consul will sort the sources by precedence when returning the resource
Expand All @@ -249,6 +265,7 @@ func (in *ServiceIntentions) MatchesConsul(candidate api.ConfigEntry) bool {
// piggyback on strings.Compare that returns -1 if a < b.
return strings.Compare(sourceIntentionSortKey(a), sourceIntentionSortKey(b)) == -1
}),
specialEquality,
)
}

Expand Down
72 changes: 72 additions & 0 deletions control-plane/api/v1alpha1/serviceintentions_types_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,78 @@ func TestServiceIntentions_MatchesConsul(t *testing.T) {
},
Matches: true,
},
"namespaces and partitions equate `default` and empty strings": {
Ours: ServiceIntentions{
ObjectMeta: metav1.ObjectMeta{
Name: "name",
},
Spec: ServiceIntentionsSpec{
Destination: IntentionDestination{
Name: "svc-name",
Namespace: "ns1",
},
Sources: []*SourceIntention{
{
Name: "svc1",
Namespace: "",
Partition: "default",
Action: "allow",
},
},
},
},
Theirs: &capi.ServiceIntentionsConfigEntry{
Kind: capi.ServiceIntentions,
Name: "svc-name",
Namespace: "ns1",
Sources: []*capi.SourceIntention{
{
Name: "svc1",
Namespace: "default",
Partition: "",
Action: "allow",
Precedence: 0,
},
},
},
Matches: true,
},
"source namespaces and partitions are compared": {
Ours: ServiceIntentions{
ObjectMeta: metav1.ObjectMeta{
Name: "name",
},
Spec: ServiceIntentionsSpec{
Destination: IntentionDestination{
Name: "svc-name",
Namespace: "test",
},
Sources: []*SourceIntention{
{
Name: "svc1",
Namespace: "test",
Partition: "test",
Action: "allow",
},
},
},
},
Theirs: &capi.ServiceIntentionsConfigEntry{
Kind: capi.ServiceIntentions,
Name: "svc-name",
Namespace: "test",
Sources: []*capi.SourceIntention{
{
Name: "svc1",
Namespace: "not-test",
Partition: "not-test",
Action: "allow",
Precedence: 0,
},
},
},
Matches: false,
},
"all fields set matches": {
Ours: ServiceIntentions{
ObjectMeta: metav1.ObjectMeta{
Expand Down

0 comments on commit dbac388

Please sign in to comment.