Skip to content

Commit eee275f

Browse files
ephemeral: add WriteOnlyAttributesAllowed client capability
we allow it for all requests
1 parent fa53823 commit eee275f

File tree

13 files changed

+1340
-1284
lines changed

13 files changed

+1340
-1284
lines changed

docs/plugin-protocol/tfplugin5.8.proto

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,10 @@ message ClientCapabilities {
166166
// The deferral_allowed capability signals that the client is able to
167167
// handle deferred responses from the provider.
168168
bool deferral_allowed = 1;
169+
170+
// The write_only_attributes_allowed capability signals that the client
171+
// is able to handle write_only attributes for managed resources.
172+
bool write_only_attributes_allowed = 2;
169173
}
170174

171175
message Function {

docs/plugin-protocol/tfplugin6.8.proto

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -241,6 +241,10 @@ message ClientCapabilities {
241241
// The deferral_allowed capability signals that the client is able to
242242
// handle deferred responses from the provider.
243243
bool deferral_allowed = 1;
244+
245+
// The write_only_attributes_allowed capability signals that the client
246+
// is able to handle write_only attributes for managed resources.
247+
bool write_only_attributes_allowed = 2;
244248
}
245249

246250
// Deferred is a message that indicates that change is deferred for a reason.

internal/plugin6/grpc_provider.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -345,7 +345,8 @@ func (p *GRPCProvider) ConfigureProvider(r providers.ConfigureProviderRequest) (
345345
Msgpack: mp,
346346
},
347347
ClientCapabilities: &proto6.ClientCapabilities{
348-
DeferralAllowed: r.ClientCapabilities.DeferralAllowed,
348+
DeferralAllowed: r.ClientCapabilities.DeferralAllowed,
349+
WriteOnlyAttributesAllowed: r.ClientCapabilities.WriteOnlyAttributesAllowed,
349350
},
350351
}
351352

internal/providers/provider.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,10 @@ type ClientCapabilities struct {
166166
// The deferral_allowed capability signals that the client is able to
167167
// handle deferred responses from the provider.
168168
DeferralAllowed bool
169+
170+
// The write_only_attributes_allowed capability signals that the client
171+
// is able to handle write_only attributes for managed resources.
172+
WriteOnlyAttributesAllowed bool
169173
}
170174

171175
type ValidateProviderConfigRequest struct {

internal/stacks/stackruntime/internal/stackeval/provider_instance.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -259,7 +259,8 @@ func (p *ProviderInstance) CheckClient(ctx context.Context, phase EvalPhase) (pr
259259
TerraformVersion: version.SemVer.String(),
260260
Config: unmarkedArgs,
261261
ClientCapabilities: providers.ClientCapabilities{
262-
DeferralAllowed: true,
262+
DeferralAllowed: true,
263+
WriteOnlyAttributesAllowed: true,
263264
},
264265
})
265266
diags = diags.Append(resp.Diagnostics)

internal/stacks/stackruntime/internal/stackeval/provider_instance_test.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -384,7 +384,8 @@ func TestProviderInstanceCheckClient(t *testing.T) {
384384
"test": cty.StringVal("yep"),
385385
}),
386386
ClientCapabilities: providers.ClientCapabilities{
387-
DeferralAllowed: true,
387+
DeferralAllowed: true,
388+
WriteOnlyAttributesAllowed: true,
388389
},
389390
}
390391
if diff := cmp.Diff(want, got, ctydebug.CmpOptions); diff != "" {
@@ -426,7 +427,8 @@ func TestProviderInstanceCheckClient(t *testing.T) {
426427
"test": cty.StringVal("yep"),
427428
}),
428429
ClientCapabilities: providers.ClientCapabilities{
429-
DeferralAllowed: true,
430+
DeferralAllowed: true,
431+
WriteOnlyAttributesAllowed: true,
430432
},
431433
}
432434
if diff := cmp.Diff(want, got, ctydebug.CmpOptions); diff != "" {

internal/terraform/context_plan_test.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1762,6 +1762,10 @@ func TestContext2Plan_blockNestingGroup(t *testing.T) {
17621762
"baz": cty.NullVal(cty.String),
17631763
}),
17641764
}),
1765+
ClientCapabilities: providers.ClientCapabilities{
1766+
DeferralAllowed: false,
1767+
WriteOnlyAttributesAllowed: true,
1768+
},
17651769
}
17661770
if !cmp.Equal(got, want, valueTrans) {
17671771
t.Errorf("wrong PlanResourceChange request\n%s", cmp.Diff(got, want, valueTrans))

internal/terraform/eval_context_builtin.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -228,7 +228,8 @@ func (ctx *BuiltinEvalContext) ConfigureProvider(addr addrs.AbsProviderConfig, c
228228
TerraformVersion: version.String(),
229229
Config: cfg,
230230
ClientCapabilities: providers.ClientCapabilities{
231-
DeferralAllowed: ctx.Deferrals().DeferralAllowed(),
231+
DeferralAllowed: ctx.Deferrals().DeferralAllowed(),
232+
WriteOnlyAttributesAllowed: true,
232233
},
233234
}
234235

internal/terraform/node_resource_abstract_instance.go

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -439,7 +439,8 @@ func (n *NodeAbstractResourceInstance) planDestroy(ctx EvalContext, currentState
439439
PriorPrivate: currentState.Private,
440440
ProviderMeta: metaConfigVal,
441441
ClientCapabilities: providers.ClientCapabilities{
442-
DeferralAllowed: deferralAllowed,
442+
DeferralAllowed: deferralAllowed,
443+
WriteOnlyAttributesAllowed: true,
443444
},
444445
})
445446
deferred = resp.Deferred
@@ -639,7 +640,8 @@ func (n *NodeAbstractResourceInstance) refresh(ctx EvalContext, deposedKey state
639640
Private: state.Private,
640641
ProviderMeta: metaConfigVal,
641642
ClientCapabilities: providers.ClientCapabilities{
642-
DeferralAllowed: deferralAllowed,
643+
DeferralAllowed: deferralAllowed,
644+
WriteOnlyAttributesAllowed: true,
643645
},
644646
})
645647

@@ -941,7 +943,8 @@ func (n *NodeAbstractResourceInstance) plan(
941943
PriorPrivate: priorPrivate,
942944
ProviderMeta: metaConfigVal,
943945
ClientCapabilities: providers.ClientCapabilities{
944-
DeferralAllowed: deferralAllowed,
946+
DeferralAllowed: deferralAllowed,
947+
WriteOnlyAttributesAllowed: true,
945948
},
946949
})
947950
// If we don't support deferrals, but the provider reports a deferral and does not
@@ -1114,7 +1117,8 @@ func (n *NodeAbstractResourceInstance) plan(
11141117
PriorPrivate: plannedPrivate,
11151118
ProviderMeta: metaConfigVal,
11161119
ClientCapabilities: providers.ClientCapabilities{
1117-
DeferralAllowed: deferralAllowed,
1120+
DeferralAllowed: deferralAllowed,
1121+
WriteOnlyAttributesAllowed: true,
11181122
},
11191123
})
11201124

@@ -1561,7 +1565,8 @@ func (n *NodeAbstractResourceInstance) readDataSource(ctx EvalContext, configVal
15611565
Config: configVal,
15621566
ProviderMeta: metaConfigVal,
15631567
ClientCapabilities: providers.ClientCapabilities{
1564-
DeferralAllowed: deferralAllowed,
1568+
DeferralAllowed: deferralAllowed,
1569+
WriteOnlyAttributesAllowed: true,
15651570
},
15661571
})
15671572

internal/terraform/node_resource_import.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,8 @@ func (n *graphNodeImportState) Execute(ctx EvalContext, op walkOperation) (diags
106106
TypeName: n.Addr.Resource.Resource.Type,
107107
ID: n.ID,
108108
ClientCapabilities: providers.ClientCapabilities{
109-
DeferralAllowed: false,
109+
DeferralAllowed: false,
110+
WriteOnlyAttributesAllowed: true,
110111
},
111112
})
112113
diags = diags.Append(resp.Diagnostics)

0 commit comments

Comments
 (0)