ephemeral: add WriteOnlyAttributesAllowed client capability to validate resource

pull/36232/head
Daniel Schmidt 1 year ago
parent 572d12bfd3
commit e29708c4d9
No known key found for this signature in database
GPG Key ID: 377C3A4D62FBBBE2

@ -391,6 +391,7 @@ message ValidateResourceTypeConfig {
message Request {
string type_name = 1;
DynamicValue config = 2;
ClientCapabilities client_capabilities = 3;
}
message Response {
repeated Diagnostic diagnostics = 1;

@ -408,6 +408,7 @@ message ValidateResourceConfig {
message Request {
string type_name = 1;
DynamicValue config = 2;
ClientCapabilities client_capabilities = 3;
}
message Response {
repeated Diagnostic diagnostics = 1;

@ -121,6 +121,9 @@ func (p *provider) ValidateResourceTypeConfig(_ context.Context, req *tfplugin5.
validateResp := p.provider.ValidateResourceConfig(providers.ValidateResourceConfigRequest{
TypeName: req.TypeName,
Config: configVal,
ClientCapabilities: providers.ClientCapabilities{
WriteOnlyAttributesAllowed: true,
},
})
resp.Diagnostics = convert.AppendProtoDiag(resp.Diagnostics, validateResp.Diagnostics)

@ -236,8 +236,9 @@ func (p *GRPCProvider) ValidateResourceConfig(r providers.ValidateResourceConfig
}
protoReq := &proto.ValidateResourceTypeConfig_Request{
TypeName: r.TypeName,
Config: &proto.DynamicValue{Msgpack: mp},
TypeName: r.TypeName,
Config: &proto.DynamicValue{Msgpack: mp},
ClientCapabilities: clientCapabilitiesToProto(r.ClientCapabilities),
}
protoResp, err := p.client.ValidateResourceTypeConfig(p.ctx, protoReq)
@ -355,9 +356,7 @@ func (p *GRPCProvider) ConfigureProvider(r providers.ConfigureProviderRequest) (
Config: &proto.DynamicValue{
Msgpack: mp,
},
ClientCapabilities: &proto.ClientCapabilities{
DeferralAllowed: r.ClientCapabilities.DeferralAllowed,
},
ClientCapabilities: clientCapabilitiesToProto(r.ClientCapabilities),
}
protoResp, err := p.client.Configure(p.ctx, protoReq)
@ -407,12 +406,10 @@ func (p *GRPCProvider) ReadResource(r providers.ReadResourceRequest) (resp provi
}
protoReq := &proto.ReadResource_Request{
TypeName: r.TypeName,
CurrentState: &proto.DynamicValue{Msgpack: mp},
Private: r.Private,
ClientCapabilities: &proto.ClientCapabilities{
DeferralAllowed: r.ClientCapabilities.DeferralAllowed,
},
TypeName: r.TypeName,
CurrentState: &proto.DynamicValue{Msgpack: mp},
Private: r.Private,
ClientCapabilities: clientCapabilitiesToProto(r.ClientCapabilities),
}
if metaSchema.Block != nil {
@ -488,14 +485,12 @@ func (p *GRPCProvider) PlanResourceChange(r providers.PlanResourceChangeRequest)
}
protoReq := &proto.PlanResourceChange_Request{
TypeName: r.TypeName,
PriorState: &proto.DynamicValue{Msgpack: priorMP},
Config: &proto.DynamicValue{Msgpack: configMP},
ProposedNewState: &proto.DynamicValue{Msgpack: propMP},
PriorPrivate: r.PriorPrivate,
ClientCapabilities: &proto.ClientCapabilities{
DeferralAllowed: r.ClientCapabilities.DeferralAllowed,
},
TypeName: r.TypeName,
PriorState: &proto.DynamicValue{Msgpack: priorMP},
Config: &proto.DynamicValue{Msgpack: configMP},
ProposedNewState: &proto.DynamicValue{Msgpack: propMP},
PriorPrivate: r.PriorPrivate,
ClientCapabilities: clientCapabilitiesToProto(r.ClientCapabilities),
}
if metaSchema.Block != nil {
@ -625,11 +620,9 @@ func (p *GRPCProvider) ImportResourceState(r providers.ImportResourceStateReques
}
protoReq := &proto.ImportResourceState_Request{
TypeName: r.TypeName,
Id: r.ID,
ClientCapabilities: &proto.ClientCapabilities{
DeferralAllowed: r.ClientCapabilities.DeferralAllowed,
},
TypeName: r.TypeName,
Id: r.ID,
ClientCapabilities: clientCapabilitiesToProto(r.ClientCapabilities),
}
protoResp, err := p.client.ImportResourceState(p.ctx, protoReq)
@ -740,9 +733,7 @@ func (p *GRPCProvider) ReadDataSource(r providers.ReadDataSourceRequest) (resp p
Config: &proto.DynamicValue{
Msgpack: config,
},
ClientCapabilities: &proto.ClientCapabilities{
DeferralAllowed: r.ClientCapabilities.DeferralAllowed,
},
ClientCapabilities: clientCapabilitiesToProto(r.ClientCapabilities),
}
if metaSchema.Block != nil {
@ -833,9 +824,7 @@ func (p *GRPCProvider) OpenEphemeralResource(r providers.OpenEphemeralResourceRe
Config: &proto.DynamicValue{
Msgpack: config,
},
ClientCapabilities: &proto.ClientCapabilities{
DeferralAllowed: r.ClientCapabilities.DeferralAllowed,
},
ClientCapabilities: clientCapabilitiesToProto(r.ClientCapabilities),
}
protoResp, err := p.client.OpenEphemeralResource(p.ctx, protoReq)
@ -1026,3 +1015,10 @@ func decodeDynamicValue(v *proto.DynamicValue, ty cty.Type) (cty.Value, error) {
}
return res, err
}
func clientCapabilitiesToProto(c providers.ClientCapabilities) *proto.ClientCapabilities {
return &proto.ClientCapabilities{
DeferralAllowed: c.DeferralAllowed,
WriteOnlyAttributesAllowed: c.WriteOnlyAttributesAllowed,
}
}

@ -229,8 +229,9 @@ func (p *GRPCProvider) ValidateResourceConfig(r providers.ValidateResourceConfig
}
protoReq := &proto6.ValidateResourceConfig_Request{
TypeName: r.TypeName,
Config: &proto6.DynamicValue{Msgpack: mp},
TypeName: r.TypeName,
Config: &proto6.DynamicValue{Msgpack: mp},
ClientCapabilities: clientCapabilitiesToProto(r.ClientCapabilities),
}
protoResp, err := p.client.ValidateResourceConfig(p.ctx, protoReq)
@ -344,10 +345,7 @@ func (p *GRPCProvider) ConfigureProvider(r providers.ConfigureProviderRequest) (
Config: &proto6.DynamicValue{
Msgpack: mp,
},
ClientCapabilities: &proto6.ClientCapabilities{
DeferralAllowed: r.ClientCapabilities.DeferralAllowed,
WriteOnlyAttributesAllowed: r.ClientCapabilities.WriteOnlyAttributesAllowed,
},
ClientCapabilities: clientCapabilitiesToProto(r.ClientCapabilities),
}
protoResp, err := p.client.ConfigureProvider(p.ctx, protoReq)
@ -397,12 +395,10 @@ func (p *GRPCProvider) ReadResource(r providers.ReadResourceRequest) (resp provi
}
protoReq := &proto6.ReadResource_Request{
TypeName: r.TypeName,
CurrentState: &proto6.DynamicValue{Msgpack: mp},
Private: r.Private,
ClientCapabilities: &proto6.ClientCapabilities{
DeferralAllowed: r.ClientCapabilities.DeferralAllowed,
},
TypeName: r.TypeName,
CurrentState: &proto6.DynamicValue{Msgpack: mp},
Private: r.Private,
ClientCapabilities: clientCapabilitiesToProto(r.ClientCapabilities),
}
if metaSchema.Block != nil {
@ -478,14 +474,12 @@ func (p *GRPCProvider) PlanResourceChange(r providers.PlanResourceChangeRequest)
}
protoReq := &proto6.PlanResourceChange_Request{
TypeName: r.TypeName,
PriorState: &proto6.DynamicValue{Msgpack: priorMP},
Config: &proto6.DynamicValue{Msgpack: configMP},
ProposedNewState: &proto6.DynamicValue{Msgpack: propMP},
PriorPrivate: r.PriorPrivate,
ClientCapabilities: &proto6.ClientCapabilities{
DeferralAllowed: r.ClientCapabilities.DeferralAllowed,
},
TypeName: r.TypeName,
PriorState: &proto6.DynamicValue{Msgpack: priorMP},
Config: &proto6.DynamicValue{Msgpack: configMP},
ProposedNewState: &proto6.DynamicValue{Msgpack: propMP},
PriorPrivate: r.PriorPrivate,
ClientCapabilities: clientCapabilitiesToProto(r.ClientCapabilities),
}
if metaSchema.Block != nil {
@ -615,11 +609,9 @@ func (p *GRPCProvider) ImportResourceState(r providers.ImportResourceStateReques
}
protoReq := &proto6.ImportResourceState_Request{
TypeName: r.TypeName,
Id: r.ID,
ClientCapabilities: &proto6.ClientCapabilities{
DeferralAllowed: r.ClientCapabilities.DeferralAllowed,
},
TypeName: r.TypeName,
Id: r.ID,
ClientCapabilities: clientCapabilitiesToProto(r.ClientCapabilities),
}
protoResp, err := p.client.ImportResourceState(p.ctx, protoReq)
@ -730,9 +722,7 @@ func (p *GRPCProvider) ReadDataSource(r providers.ReadDataSourceRequest) (resp p
Config: &proto6.DynamicValue{
Msgpack: config,
},
ClientCapabilities: &proto6.ClientCapabilities{
DeferralAllowed: r.ClientCapabilities.DeferralAllowed,
},
ClientCapabilities: clientCapabilitiesToProto(r.ClientCapabilities),
}
if metaSchema.Block != nil {
@ -823,9 +813,7 @@ func (p *GRPCProvider) OpenEphemeralResource(r providers.OpenEphemeralResourceRe
Config: &proto6.DynamicValue{
Msgpack: config,
},
ClientCapabilities: &proto6.ClientCapabilities{
DeferralAllowed: r.ClientCapabilities.DeferralAllowed,
},
ClientCapabilities: clientCapabilitiesToProto(r.ClientCapabilities),
}
protoResp, err := p.client.OpenEphemeralResource(p.ctx, protoReq)
@ -1016,3 +1004,10 @@ func decodeDynamicValue(v *proto6.DynamicValue, ty cty.Type) (cty.Value, error)
}
return res, err
}
func clientCapabilitiesToProto(c providers.ClientCapabilities) *proto6.ClientCapabilities {
return &proto6.ClientCapabilities{
DeferralAllowed: c.DeferralAllowed,
WriteOnlyAttributesAllowed: c.WriteOnlyAttributesAllowed,
}
}

@ -191,6 +191,9 @@ type ValidateResourceConfigRequest struct {
// Config is the configuration value to validate, which may contain unknown
// values.
Config cty.Value
// ClientCapabilities contains information about the client's capabilities.
ClientCapabilities ClientCapabilities
}
type ValidateResourceConfigResponse struct {

@ -865,6 +865,9 @@ func (n *NodeAbstractResourceInstance) plan(
providers.ValidateResourceConfigRequest{
TypeName: n.Addr.Resource.Resource.Type,
Config: unmarkedConfigVal,
ClientCapabilities: providers.ClientCapabilities{
WriteOnlyAttributesAllowed: true,
},
},
)
diags = diags.Append(validateResp.Diagnostics.InConfigBody(config.Config, n.Addr.String()))

@ -392,6 +392,9 @@ func (n *NodeValidatableResource) validateResource(ctx EvalContext) tfdiags.Diag
req := providers.ValidateResourceConfigRequest{
TypeName: n.Config.Type,
Config: unmarkedConfigVal,
ClientCapabilities: providers.ClientCapabilities{
WriteOnlyAttributesAllowed: true,
},
}
resp := provider.ValidateResourceConfig(req)

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff
Loading…
Cancel
Save