@@ -23,9 +23,9 @@ import (
23
23
pbempty "github.com/golang/protobuf/ptypes/empty"
24
24
"github.com/pulumi/pulumi/sdk/v3/go/common/resource"
25
25
"github.com/pulumi/pulumi/sdk/v3/go/common/resource/config"
26
- "github.com/pulumi/pulumi/sdk/v3/go/common/resource/plugin"
27
26
pl "github.com/pulumi/pulumi/sdk/v3/go/common/resource/plugin"
28
27
"github.com/pulumi/pulumi/sdk/v3/go/common/tokens"
28
+ "github.com/pulumi/pulumi/sdk/v3/go/common/util/contract"
29
29
pulumirpc "github.com/pulumi/pulumi/sdk/v3/proto/go"
30
30
"google.golang.org/grpc/codes"
31
31
"google.golang.org/grpc/status"
@@ -76,82 +76,85 @@ func (p *providerServer) checkNYI(method string, err error) error {
76
76
return err
77
77
}
78
78
79
+ func pluginDiffKindToRPC (kind pl.DiffKind ) pulumirpc.PropertyDiff_Kind {
80
+ switch kind {
81
+ case pl .DiffAdd :
82
+ return pulumirpc .PropertyDiff_ADD
83
+ case pl .DiffAddReplace :
84
+ return pulumirpc .PropertyDiff_ADD_REPLACE
85
+ case pl .DiffDelete :
86
+ return pulumirpc .PropertyDiff_DELETE
87
+ case pl .DiffDeleteReplace :
88
+ return pulumirpc .PropertyDiff_DELETE_REPLACE
89
+ case pl .DiffUpdate :
90
+ return pulumirpc .PropertyDiff_UPDATE
91
+ case pl .DiffUpdateReplace :
92
+ return pulumirpc .PropertyDiff_UPDATE_REPLACE
93
+ default :
94
+ contract .Assertf (false , "unknown diff kind: %v" , kind )
95
+ return pulumirpc .PropertyDiff_ADD
96
+ }
97
+ }
98
+
79
99
func (p * providerServer ) marshalDiff (diff pl.DiffResult ) (* pulumirpc.DiffResponse , error ) {
80
- changes := pulumirpc .DiffResponse_DIFF_UNKNOWN
100
+ var changes pulumirpc.DiffResponse_DiffChanges
81
101
switch diff .Changes {
82
102
case pl .DiffNone :
83
103
changes = pulumirpc .DiffResponse_DIFF_NONE
84
104
case pl .DiffSome :
85
105
changes = pulumirpc .DiffResponse_DIFF_SOME
106
+ case pl .DiffUnknown :
107
+ changes = pulumirpc .DiffResponse_DIFF_UNKNOWN
86
108
}
87
109
88
110
// Infer the result from the detailed diff.
89
111
var diffs , replaces []string
90
112
var detailedDiff map [string ]* pulumirpc.PropertyDiff
91
- if len (diff .DetailedDiff ) == 0 {
92
- diffs = make ([]string , len (diff .ChangedKeys ))
93
- for i , k := range diff .ChangedKeys {
94
- diffs [i ] = string (k )
95
- }
96
- replaces = make ([]string , len (diff .ReplaceKeys ))
97
- for i , k := range diff .ReplaceKeys {
98
- replaces [i ] = string (k )
99
- }
100
- } else {
101
- changes = pulumirpc .DiffResponse_DIFF_SOME
102
-
113
+ if len (diff .DetailedDiff ) != 0 {
103
114
detailedDiff = make (map [string ]* pulumirpc.PropertyDiff )
104
115
for path , diff := range diff .DetailedDiff {
105
- diffs = append (diffs , path )
106
-
107
- var kind pulumirpc.PropertyDiff_Kind
108
- switch diff .Kind {
109
- case pl .DiffAdd :
110
- kind = pulumirpc .PropertyDiff_ADD
111
- case pl .DiffAddReplace :
112
- kind , replaces = pulumirpc .PropertyDiff_ADD_REPLACE , append (replaces , path )
113
- case pl .DiffDelete :
114
- kind = pulumirpc .PropertyDiff_DELETE
115
- case pl .DiffDeleteReplace :
116
- kind , replaces = pulumirpc .PropertyDiff_DELETE , append (replaces , path )
117
- case pl .DiffUpdate :
118
- kind = pulumirpc .PropertyDiff_UPDATE
119
- case pl .DiffUpdateReplace :
120
- kind , replaces = pulumirpc .PropertyDiff_UPDATE_REPLACE , append (replaces , path )
121
- }
122
-
123
116
detailedDiff [path ] = & pulumirpc.PropertyDiff {
124
- Kind : kind ,
117
+ Kind : pluginDiffKindToRPC ( diff . Kind ) ,
125
118
InputDiff : diff .InputDiff ,
126
119
}
127
120
}
128
121
}
129
122
123
+ diffs = make ([]string , len (diff .ChangedKeys ))
124
+ for i , k := range diff .ChangedKeys {
125
+ diffs [i ] = string (k )
126
+ }
127
+ replaces = make ([]string , len (diff .ReplaceKeys ))
128
+ for i , k := range diff .ReplaceKeys {
129
+ replaces [i ] = string (k )
130
+ }
131
+
130
132
return & pulumirpc.DiffResponse {
131
133
Replaces : replaces ,
132
134
DeleteBeforeReplace : diff .DeleteBeforeReplace ,
133
135
Changes : changes ,
134
136
Diffs : diffs ,
135
137
DetailedDiff : detailedDiff ,
138
+ HasDetailedDiff : len (detailedDiff ) > 0 ,
136
139
}, nil
137
140
}
138
141
139
142
type forwardServer struct {
140
- plugin .UnimplementedProvider
143
+ pl .UnimplementedProvider
141
144
142
- parameterize func (context.Context , plugin .ParameterizeRequest ) (plugin .ParameterizeResponse , error )
145
+ parameterize func (context.Context , pl .ParameterizeRequest ) (pl .ParameterizeResponse , error )
143
146
}
144
147
145
148
func (p forwardServer ) Parameterize (
146
- ctx context.Context , req plugin .ParameterizeRequest ,
147
- ) (plugin .ParameterizeResponse , error ) {
149
+ ctx context.Context , req pl .ParameterizeRequest ,
150
+ ) (pl .ParameterizeResponse , error ) {
148
151
return p .parameterize (ctx , req )
149
152
}
150
153
151
154
func (p * providerServer ) Parameterize (
152
155
ctx context.Context , req * pulumirpc.ParameterizeRequest ,
153
156
) (* pulumirpc.ParameterizeResponse , error ) {
154
- return plugin .NewProviderServer (& forwardServer {
157
+ return pl .NewProviderServer (& forwardServer {
155
158
parameterize : p .provider .ParameterizeWithContext ,
156
159
}).Parameterize (ctx , req )
157
160
}
@@ -167,7 +170,7 @@ func (p *providerServer) GetSchema(ctx context.Context,
167
170
}
168
171
subpackageVersion = & ver
169
172
}
170
- schema , err := p .provider .GetSchemaWithContext (ctx , plugin .GetSchemaRequest {
173
+ schema , err := p .provider .GetSchemaWithContext (ctx , pl .GetSchemaRequest {
171
174
Version : req .GetVersion (),
172
175
SubpackageName : req .SubpackageName ,
173
176
SubpackageVersion : subpackageVersion ,
0 commit comments