Skip to content

Commit 0e0f446

Browse files
fix provider server detailed diff
1 parent 65f21fc commit 0e0f446

File tree

1 file changed

+20
-3
lines changed

1 file changed

+20
-3
lines changed

pkg/pf/internal/plugin/provider_server.go

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ import (
1818
"context"
1919
"encoding/json"
2020
"fmt"
21+
"sort"
22+
"strings"
2123

2224
"github.com/blang/semver"
2325
pbempty "github.com/golang/protobuf/ptypes/empty"
@@ -76,13 +78,15 @@ func (p *providerServer) checkNYI(method string, err error) error {
7678
return err
7779
}
7880

79-
func (p *providerServer) marshalDiff(diff pl.DiffResult) (*pulumirpc.DiffResponse, error) {
80-
changes := pulumirpc.DiffResponse_DIFF_UNKNOWN
81+
func (p *providerServer) marshalDiff(diff plugin.DiffResult) (*pulumirpc.DiffResponse, error) {
82+
var changes pulumirpc.DiffResponse_DiffChanges
8183
switch diff.Changes {
8284
case pl.DiffNone:
8385
changes = pulumirpc.DiffResponse_DIFF_NONE
8486
case pl.DiffSome:
8587
changes = pulumirpc.DiffResponse_DIFF_SOME
88+
case pl.DiffUnknown:
89+
changes = pulumirpc.DiffResponse_DIFF_UNKNOWN
8690
}
8791

8892
// Infer the result from the detailed diff.
@@ -100,9 +104,16 @@ func (p *providerServer) marshalDiff(diff pl.DiffResult) (*pulumirpc.DiffRespons
100104
} else {
101105
changes = pulumirpc.DiffResponse_DIFF_SOME
102106

107+
properties := map[string]struct{}{}
103108
detailedDiff = make(map[string]*pulumirpc.PropertyDiff)
104109
for path, diff := range diff.DetailedDiff {
105-
diffs = append(diffs, path)
110+
for k := range detailedDiff {
111+
// Turn the attribute name into a top-level property name by trimming everything after the first dot.
112+
if firstSep := strings.IndexAny(k, ".["); firstSep != -1 {
113+
k = k[:firstSep]
114+
}
115+
properties[k] = struct{}{}
116+
}
106117

107118
var kind pulumirpc.PropertyDiff_Kind
108119
switch diff.Kind {
@@ -125,6 +136,11 @@ func (p *providerServer) marshalDiff(diff pl.DiffResult) (*pulumirpc.DiffRespons
125136
InputDiff: diff.InputDiff,
126137
}
127138
}
139+
diffs = make([]string, 0, len(properties))
140+
for k := range properties {
141+
diffs = append(diffs, k)
142+
}
143+
sort.Strings(diffs)
128144
}
129145

130146
return &pulumirpc.DiffResponse{
@@ -133,6 +149,7 @@ func (p *providerServer) marshalDiff(diff pl.DiffResult) (*pulumirpc.DiffRespons
133149
Changes: changes,
134150
Diffs: diffs,
135151
DetailedDiff: detailedDiff,
152+
HasDetailedDiff: len(detailedDiff) > 0,
136153
}, nil
137154
}
138155

0 commit comments

Comments
 (0)