Skip to content

Commit 3a962e8

Browse files
ephemeral: add WriteOnlyAttributesAllowed client capability
we allow it for all requests
1 parent 17581e4 commit 3a962e8

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

@@ -928,7 +930,8 @@ func (n *NodeAbstractResourceInstance) plan(
928930
PriorPrivate: priorPrivate,
929931
ProviderMeta: metaConfigVal,
930932
ClientCapabilities: providers.ClientCapabilities{
931-
DeferralAllowed: deferralAllowed,
933+
DeferralAllowed: deferralAllowed,
934+
WriteOnlyAttributesAllowed: true,
932935
},
933936
})
934937
// If we don't support deferrals, but the provider reports a deferral and does not
@@ -1101,7 +1104,8 @@ func (n *NodeAbstractResourceInstance) plan(
11011104
PriorPrivate: plannedPrivate,
11021105
ProviderMeta: metaConfigVal,
11031106
ClientCapabilities: providers.ClientCapabilities{
1104-
DeferralAllowed: deferralAllowed,
1107+
DeferralAllowed: deferralAllowed,
1108+
WriteOnlyAttributesAllowed: true,
11051109
},
11061110
})
11071111

@@ -1548,7 +1552,8 @@ func (n *NodeAbstractResourceInstance) readDataSource(ctx EvalContext, configVal
15481552
Config: configVal,
15491553
ProviderMeta: metaConfigVal,
15501554
ClientCapabilities: providers.ClientCapabilities{
1551-
DeferralAllowed: deferralAllowed,
1555+
DeferralAllowed: deferralAllowed,
1556+
WriteOnlyAttributesAllowed: true,
15521557
},
15531558
})
15541559

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)