configs/configschema: Introduce the NestingGroup mode for blocks

In study of existing providers we've found a pattern we werent previously
accounting for of using a nested block type to represent a group of
arguments that relate to a particular feature that is always enabled but
where it improves configuration readability to group all of its settings
together in a nested block.

The existing NestingSingle was not a good fit for this because it is
designed under the assumption that the presence or absence of the block
has some significance in enabling or disabling the relevant feature, and
so for these always-active cases we'd generate a misleading plan where
the settings for the feature appear totally absent, rather than showing
the default values that will be selected.

NestingGroup is, therefore, a slight variation of NestingSingle where
presence vs. absence of the block is not distinguishable (it's never null)
and instead its contents are treated as unset when the block is absent.
This then in turn causes any default values associated with the nested
arguments to be honored and displayed in the plan whenever the block is
not explicitly configured.

The current SDK cannot activate this mode, but that's okay because its
"legacy type system" opt-out flag allows it to force a block to be
processed in this way anyway. We're adding this now so that we can
introduce the feature in a future SDK without causing a breaking change
to the protocol, since the set of possible block nesting modes is not
extensible.
This commit is contained in:
Martin Atkins 2019-04-08 15:32:53 -07:00
parent a20084dc0e
commit 88e76fa9ef
25 changed files with 391 additions and 255 deletions

View File

@ -278,19 +278,20 @@ func (p *blockBodyDiffPrinter) writeNestedBlockDiffs(name string, blockS *config
// the objects within are computed.
switch blockS.Nesting {
case configschema.NestingSingle:
case configschema.NestingSingle, configschema.NestingGroup:
var action plans.Action
eqV := new.Equals(old)
switch {
case old.IsNull():
action = plans.Create
case new.IsNull():
action = plans.Delete
case !new.IsKnown() || !old.IsKnown():
case !new.IsWhollyKnown() || !old.IsWhollyKnown():
// "old" should actually always be known due to our contract
// that old values must never be unknown, but we'll allow it
// anyway to be robust.
action = plans.Update
case !(new.Equals(old).True()):
case !eqV.IsKnown() || !eqV.True():
action = plans.Update
}

View File

@ -97,7 +97,7 @@ func marshalExpressions(body hcl.Body, schema *configschema.Block) expressions {
}
switch blockS.Nesting {
case configschema.NestingSingle:
case configschema.NestingSingle, configschema.NestingGroup:
ret[typeName] = marshalExpressions(block.Body, &blockS.Block)
case configschema.NestingList, configschema.NestingSet:
if _, exists := ret[typeName]; !exists {

View File

@ -29,6 +29,8 @@ func marshalBlockTypes(nestedBlock *configschema.NestedBlock) *blockType {
switch nestedBlock.Nesting {
case configschema.NestingSingle:
ret.NestingMode = "single"
case configschema.NestingGroup:
ret.NestingMode = "group"
case configschema.NestingList:
ret.NestingMode = "list"
case configschema.NestingSet:

View File

@ -75,7 +75,7 @@ func ConfigValueFromHCL2Block(v cty.Value, schema *configschema.Block) map[strin
switch blockS.Nesting {
case configschema.NestingSingle:
case configschema.NestingSingle, configschema.NestingGroup:
ret[name] = ConfigValueFromHCL2Block(bv, &blockS.Block)
case configschema.NestingList, configschema.NestingSet:

View File

@ -74,7 +74,7 @@ func (b *Block) coerceValue(in cty.Value, path cty.Path) (cty.Value, error) {
for typeName, blockS := range b.BlockTypes {
switch blockS.Nesting {
case NestingSingle:
case NestingSingle, NestingGroup:
switch {
case ty.HasAttribute(typeName):
var err error
@ -84,7 +84,11 @@ func (b *Block) coerceValue(in cty.Value, path cty.Path) (cty.Value, error) {
return cty.UnknownVal(b.ImpliedType()), err
}
case blockS.MinItems != 1 && blockS.MaxItems != 1:
attrs[typeName] = cty.NullVal(blockS.ImpliedType())
if blockS.Nesting == NestingGroup {
attrs[typeName] = blockS.EmptyValue()
} else {
attrs[typeName] = cty.NullVal(blockS.ImpliedType())
}
default:
// We use the word "attribute" here because we're talking about
// the cty sense of that word rather than the HCL sense.

View File

@ -34,12 +34,20 @@ func (b *Block) DecoderSpec() hcldec.Spec {
childSpec := blockS.Block.DecoderSpec()
switch blockS.Nesting {
case NestingSingle:
case NestingSingle, NestingGroup:
ret[name] = &hcldec.BlockSpec{
TypeName: name,
Nested: childSpec,
Required: blockS.MinItems == 1 && blockS.MaxItems >= 1,
}
if blockS.Nesting == NestingGroup {
ret[name] = &hcldec.DefaultSpec{
Primary: ret[name],
Default: &hcldec.LiteralSpec{
Value: blockS.EmptyValue(),
},
}
}
case NestingList:
// We prefer to use a list where possible, since it makes our
// implied type more complete, but if there are any

View File

@ -35,6 +35,8 @@ func (b *NestedBlock) EmptyValue() cty.Value {
switch b.Nesting {
case NestingSingle:
return cty.NullVal(b.Block.ImpliedType())
case NestingGroup:
return b.Block.EmptyValue()
case NestingList:
if ty := b.Block.ImpliedType(); ty.HasDynamicTypes() {
return cty.EmptyTupleVal

View File

@ -47,6 +47,25 @@ func TestBlockEmptyValue(t *testing.T) {
})),
}),
},
{
&Block{
BlockTypes: map[string]*NestedBlock{
"group": {
Nesting: NestingGroup,
Block: Block{
Attributes: map[string]*Attribute{
"str": {Type: cty.String, Required: true},
},
},
},
},
},
cty.ObjectVal(map[string]cty.Value{
"group": cty.ObjectVal(map[string]cty.Value{
"str": cty.NullVal(cty.String),
}),
}),
},
{
&Block{
BlockTypes: map[string]*NestedBlock{

View File

@ -72,6 +72,10 @@ func (b *Block) internalValidate(prefix string, err error) error {
case blockS.MinItems < 0 || blockS.MinItems > 1:
err = multierror.Append(err, fmt.Errorf("%s%s: MinItems and MaxItems must be set to either 0 or 1 in NestingSingle mode", prefix, name))
}
case NestingGroup:
if blockS.MinItems != 0 || blockS.MaxItems != 0 {
err = multierror.Append(err, fmt.Errorf("%s%s: MinItems and MaxItems cannot be used in NestingGroup mode", prefix, name))
}
case NestingList, NestingSet:
if blockS.MinItems > blockS.MaxItems && blockS.MaxItems != 0 {
err = multierror.Append(err, fmt.Errorf("%s%s: MinItems must be less than or equal to MaxItems in %s mode", prefix, name, blockS.Nesting))

View File

@ -4,9 +4,21 @@ package configschema
import "strconv"
const _NestingMode_name = "nestingModeInvalidNestingSingleNestingListNestingSetNestingMap"
func _() {
// An "invalid array index" compiler error signifies that the constant values have changed.
// Re-run the stringer command to generate them again.
var x [1]struct{}
_ = x[nestingModeInvalid-0]
_ = x[NestingSingle-1]
_ = x[NestingGroup-2]
_ = x[NestingList-3]
_ = x[NestingSet-4]
_ = x[NestingMap-5]
}
var _NestingMode_index = [...]uint8{0, 18, 31, 42, 52, 62}
const _NestingMode_name = "nestingModeInvalidNestingSingleNestingGroupNestingListNestingSetNestingMap"
var _NestingMode_index = [...]uint8{0, 18, 31, 43, 54, 64, 74}
func (i NestingMode) String() string {
if i < 0 || i >= NestingMode(len(_NestingMode_index)-1) {

View File

@ -93,6 +93,23 @@ const (
// provided directly as an object value.
NestingSingle
// NestingGroup is similar to NestingSingle in that it calls for only a
// single instance of a given block type with no labels, but it additonally
// guarantees that its result will never be null, even if the block is
// absent, and instead the nested attributes and blocks will be treated
// as absent in that case. (Any required attributes or blocks within the
// nested block are not enforced unless the block is explicitly present
// in the configuration, so they are all effectively optional when the
// block is not present.)
//
// This is useful for the situation where a remote API has a feature that
// is always enabled but has a group of settings related to that feature
// that themselves have default values. By using NestingGroup instead of
// NestingSingle in that case, generated plans will show the block as
// present even when not present in configuration, thus allowing any
// default values within to be displayed to the user.
NestingGroup
// NestingList indicates that multiple blocks of the given type are
// permitted, with no labels, and that their corresponding objects should
// be provided in a list.

View File

@ -115,7 +115,7 @@ func (b *Block) StaticValidateTraversal(traversal hcl.Traversal) tfdiags.Diagnos
}
func (b *NestedBlock) staticValidateTraversal(typeName string, traversal hcl.Traversal) tfdiags.Diagnostics {
if b.Nesting == NestingSingle {
if b.Nesting == NestingSingle || b.Nesting == NestingGroup {
// Single blocks are easy: just pass right through.
return b.Block.StaticValidateTraversal(traversal)
}

View File

@ -550,7 +550,7 @@ func printDynamicBlockBody(buf *bytes.Buffer, iterName string, schema *configsch
case configschema.NestingMap:
printAttribute(buf, "for_each", []byte(fmt.Sprintf(`lookup(%s.value, %q, {})`, iterName, name)), nil)
printAttribute(buf, "labels", []byte(fmt.Sprintf(`[%s.key]`, name)), nil)
case configschema.NestingSingle:
case configschema.NestingSingle, configschema.NestingGroup:
printAttribute(buf, "for_each", []byte(fmt.Sprintf(`lookup(%s.value, %q, null) != null ? [%s.value.%s] : []`, iterName, name, iterName, name)), nil)
default:
printAttribute(buf, "for_each", []byte(fmt.Sprintf(`lookup(%s.value, %q, [])`, iterName, name)), nil)

View File

@ -64,7 +64,7 @@ func SetUnknowns(val cty.Value, schema *configschema.Block) cty.Value {
// This switches on the value type here, so we can correctly switch
// between Tuples/Lists and Maps/Objects.
switch {
case blockS.Nesting == configschema.NestingSingle:
case blockS.Nesting == configschema.NestingSingle || blockS.Nesting == configschema.NestingGroup:
// NestingSingle is the only exception here, where we treat the
// block directly as an object
newVals[name] = SetUnknowns(blockVal, &blockS.Block)

View File

@ -46,7 +46,7 @@ func (x Diagnostic_Severity) String() string {
return proto.EnumName(Diagnostic_Severity_name, int32(x))
}
func (Diagnostic_Severity) EnumDescriptor() ([]byte, []int) {
return fileDescriptor_tfplugin5_0417c8e6dca655d3, []int{1, 0}
return fileDescriptor_tfplugin5_56820f4fb67360c5, []int{1, 0}
}
type Schema_NestedBlock_NestingMode int32
@ -57,6 +57,7 @@ const (
Schema_NestedBlock_LIST Schema_NestedBlock_NestingMode = 2
Schema_NestedBlock_SET Schema_NestedBlock_NestingMode = 3
Schema_NestedBlock_MAP Schema_NestedBlock_NestingMode = 4
Schema_NestedBlock_GROUP Schema_NestedBlock_NestingMode = 5
)
var Schema_NestedBlock_NestingMode_name = map[int32]string{
@ -65,6 +66,7 @@ var Schema_NestedBlock_NestingMode_name = map[int32]string{
2: "LIST",
3: "SET",
4: "MAP",
5: "GROUP",
}
var Schema_NestedBlock_NestingMode_value = map[string]int32{
"INVALID": 0,
@ -72,13 +74,14 @@ var Schema_NestedBlock_NestingMode_value = map[string]int32{
"LIST": 2,
"SET": 3,
"MAP": 4,
"GROUP": 5,
}
func (x Schema_NestedBlock_NestingMode) String() string {
return proto.EnumName(Schema_NestedBlock_NestingMode_name, int32(x))
}
func (Schema_NestedBlock_NestingMode) EnumDescriptor() ([]byte, []int) {
return fileDescriptor_tfplugin5_0417c8e6dca655d3, []int{5, 2, 0}
return fileDescriptor_tfplugin5_56820f4fb67360c5, []int{5, 2, 0}
}
// DynamicValue is an opaque encoding of terraform data, with the field name
@ -95,7 +98,7 @@ func (m *DynamicValue) Reset() { *m = DynamicValue{} }
func (m *DynamicValue) String() string { return proto.CompactTextString(m) }
func (*DynamicValue) ProtoMessage() {}
func (*DynamicValue) Descriptor() ([]byte, []int) {
return fileDescriptor_tfplugin5_0417c8e6dca655d3, []int{0}
return fileDescriptor_tfplugin5_56820f4fb67360c5, []int{0}
}
func (m *DynamicValue) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_DynamicValue.Unmarshal(m, b)
@ -143,7 +146,7 @@ func (m *Diagnostic) Reset() { *m = Diagnostic{} }
func (m *Diagnostic) String() string { return proto.CompactTextString(m) }
func (*Diagnostic) ProtoMessage() {}
func (*Diagnostic) Descriptor() ([]byte, []int) {
return fileDescriptor_tfplugin5_0417c8e6dca655d3, []int{1}
return fileDescriptor_tfplugin5_56820f4fb67360c5, []int{1}
}
func (m *Diagnostic) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_Diagnostic.Unmarshal(m, b)
@ -202,7 +205,7 @@ func (m *AttributePath) Reset() { *m = AttributePath{} }
func (m *AttributePath) String() string { return proto.CompactTextString(m) }
func (*AttributePath) ProtoMessage() {}
func (*AttributePath) Descriptor() ([]byte, []int) {
return fileDescriptor_tfplugin5_0417c8e6dca655d3, []int{2}
return fileDescriptor_tfplugin5_56820f4fb67360c5, []int{2}
}
func (m *AttributePath) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_AttributePath.Unmarshal(m, b)
@ -244,7 +247,7 @@ func (m *AttributePath_Step) Reset() { *m = AttributePath_Step{} }
func (m *AttributePath_Step) String() string { return proto.CompactTextString(m) }
func (*AttributePath_Step) ProtoMessage() {}
func (*AttributePath_Step) Descriptor() ([]byte, []int) {
return fileDescriptor_tfplugin5_0417c8e6dca655d3, []int{2, 0}
return fileDescriptor_tfplugin5_56820f4fb67360c5, []int{2, 0}
}
func (m *AttributePath_Step) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_AttributePath_Step.Unmarshal(m, b)
@ -404,7 +407,7 @@ func (m *Stop) Reset() { *m = Stop{} }
func (m *Stop) String() string { return proto.CompactTextString(m) }
func (*Stop) ProtoMessage() {}
func (*Stop) Descriptor() ([]byte, []int) {
return fileDescriptor_tfplugin5_0417c8e6dca655d3, []int{3}
return fileDescriptor_tfplugin5_56820f4fb67360c5, []int{3}
}
func (m *Stop) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_Stop.Unmarshal(m, b)
@ -434,7 +437,7 @@ func (m *Stop_Request) Reset() { *m = Stop_Request{} }
func (m *Stop_Request) String() string { return proto.CompactTextString(m) }
func (*Stop_Request) ProtoMessage() {}
func (*Stop_Request) Descriptor() ([]byte, []int) {
return fileDescriptor_tfplugin5_0417c8e6dca655d3, []int{3, 0}
return fileDescriptor_tfplugin5_56820f4fb67360c5, []int{3, 0}
}
func (m *Stop_Request) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_Stop_Request.Unmarshal(m, b)
@ -455,7 +458,7 @@ func (m *Stop_Request) XXX_DiscardUnknown() {
var xxx_messageInfo_Stop_Request proto.InternalMessageInfo
type Stop_Response struct {
Error string `protobuf:"bytes,1,opt,name=Error,json=error,proto3" json:"Error,omitempty"`
Error string `protobuf:"bytes,1,opt,name=Error,proto3" json:"Error,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
@ -465,7 +468,7 @@ func (m *Stop_Response) Reset() { *m = Stop_Response{} }
func (m *Stop_Response) String() string { return proto.CompactTextString(m) }
func (*Stop_Response) ProtoMessage() {}
func (*Stop_Response) Descriptor() ([]byte, []int) {
return fileDescriptor_tfplugin5_0417c8e6dca655d3, []int{3, 1}
return fileDescriptor_tfplugin5_56820f4fb67360c5, []int{3, 1}
}
func (m *Stop_Response) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_Stop_Response.Unmarshal(m, b)
@ -507,7 +510,7 @@ func (m *RawState) Reset() { *m = RawState{} }
func (m *RawState) String() string { return proto.CompactTextString(m) }
func (*RawState) ProtoMessage() {}
func (*RawState) Descriptor() ([]byte, []int) {
return fileDescriptor_tfplugin5_0417c8e6dca655d3, []int{4}
return fileDescriptor_tfplugin5_56820f4fb67360c5, []int{4}
}
func (m *RawState) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_RawState.Unmarshal(m, b)
@ -558,7 +561,7 @@ func (m *Schema) Reset() { *m = Schema{} }
func (m *Schema) String() string { return proto.CompactTextString(m) }
func (*Schema) ProtoMessage() {}
func (*Schema) Descriptor() ([]byte, []int) {
return fileDescriptor_tfplugin5_0417c8e6dca655d3, []int{5}
return fileDescriptor_tfplugin5_56820f4fb67360c5, []int{5}
}
func (m *Schema) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_Schema.Unmarshal(m, b)
@ -605,7 +608,7 @@ func (m *Schema_Block) Reset() { *m = Schema_Block{} }
func (m *Schema_Block) String() string { return proto.CompactTextString(m) }
func (*Schema_Block) ProtoMessage() {}
func (*Schema_Block) Descriptor() ([]byte, []int) {
return fileDescriptor_tfplugin5_0417c8e6dca655d3, []int{5, 0}
return fileDescriptor_tfplugin5_56820f4fb67360c5, []int{5, 0}
}
func (m *Schema_Block) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_Schema_Block.Unmarshal(m, b)
@ -663,7 +666,7 @@ func (m *Schema_Attribute) Reset() { *m = Schema_Attribute{} }
func (m *Schema_Attribute) String() string { return proto.CompactTextString(m) }
func (*Schema_Attribute) ProtoMessage() {}
func (*Schema_Attribute) Descriptor() ([]byte, []int) {
return fileDescriptor_tfplugin5_0417c8e6dca655d3, []int{5, 1}
return fileDescriptor_tfplugin5_56820f4fb67360c5, []int{5, 1}
}
func (m *Schema_Attribute) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_Schema_Attribute.Unmarshal(m, b)
@ -747,7 +750,7 @@ func (m *Schema_NestedBlock) Reset() { *m = Schema_NestedBlock{} }
func (m *Schema_NestedBlock) String() string { return proto.CompactTextString(m) }
func (*Schema_NestedBlock) ProtoMessage() {}
func (*Schema_NestedBlock) Descriptor() ([]byte, []int) {
return fileDescriptor_tfplugin5_0417c8e6dca655d3, []int{5, 2}
return fileDescriptor_tfplugin5_56820f4fb67360c5, []int{5, 2}
}
func (m *Schema_NestedBlock) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_Schema_NestedBlock.Unmarshal(m, b)
@ -812,7 +815,7 @@ func (m *GetProviderSchema) Reset() { *m = GetProviderSchema{} }
func (m *GetProviderSchema) String() string { return proto.CompactTextString(m) }
func (*GetProviderSchema) ProtoMessage() {}
func (*GetProviderSchema) Descriptor() ([]byte, []int) {
return fileDescriptor_tfplugin5_0417c8e6dca655d3, []int{6}
return fileDescriptor_tfplugin5_56820f4fb67360c5, []int{6}
}
func (m *GetProviderSchema) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetProviderSchema.Unmarshal(m, b)
@ -842,7 +845,7 @@ func (m *GetProviderSchema_Request) Reset() { *m = GetProviderSchema_Req
func (m *GetProviderSchema_Request) String() string { return proto.CompactTextString(m) }
func (*GetProviderSchema_Request) ProtoMessage() {}
func (*GetProviderSchema_Request) Descriptor() ([]byte, []int) {
return fileDescriptor_tfplugin5_0417c8e6dca655d3, []int{6, 0}
return fileDescriptor_tfplugin5_56820f4fb67360c5, []int{6, 0}
}
func (m *GetProviderSchema_Request) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetProviderSchema_Request.Unmarshal(m, b)
@ -876,7 +879,7 @@ func (m *GetProviderSchema_Response) Reset() { *m = GetProviderSchema_Re
func (m *GetProviderSchema_Response) String() string { return proto.CompactTextString(m) }
func (*GetProviderSchema_Response) ProtoMessage() {}
func (*GetProviderSchema_Response) Descriptor() ([]byte, []int) {
return fileDescriptor_tfplugin5_0417c8e6dca655d3, []int{6, 1}
return fileDescriptor_tfplugin5_56820f4fb67360c5, []int{6, 1}
}
func (m *GetProviderSchema_Response) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetProviderSchema_Response.Unmarshal(m, b)
@ -934,7 +937,7 @@ func (m *PrepareProviderConfig) Reset() { *m = PrepareProviderConfig{} }
func (m *PrepareProviderConfig) String() string { return proto.CompactTextString(m) }
func (*PrepareProviderConfig) ProtoMessage() {}
func (*PrepareProviderConfig) Descriptor() ([]byte, []int) {
return fileDescriptor_tfplugin5_0417c8e6dca655d3, []int{7}
return fileDescriptor_tfplugin5_56820f4fb67360c5, []int{7}
}
func (m *PrepareProviderConfig) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_PrepareProviderConfig.Unmarshal(m, b)
@ -965,7 +968,7 @@ func (m *PrepareProviderConfig_Request) Reset() { *m = PrepareProviderCo
func (m *PrepareProviderConfig_Request) String() string { return proto.CompactTextString(m) }
func (*PrepareProviderConfig_Request) ProtoMessage() {}
func (*PrepareProviderConfig_Request) Descriptor() ([]byte, []int) {
return fileDescriptor_tfplugin5_0417c8e6dca655d3, []int{7, 0}
return fileDescriptor_tfplugin5_56820f4fb67360c5, []int{7, 0}
}
func (m *PrepareProviderConfig_Request) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_PrepareProviderConfig_Request.Unmarshal(m, b)
@ -1004,7 +1007,7 @@ func (m *PrepareProviderConfig_Response) Reset() { *m = PrepareProviderC
func (m *PrepareProviderConfig_Response) String() string { return proto.CompactTextString(m) }
func (*PrepareProviderConfig_Response) ProtoMessage() {}
func (*PrepareProviderConfig_Response) Descriptor() ([]byte, []int) {
return fileDescriptor_tfplugin5_0417c8e6dca655d3, []int{7, 1}
return fileDescriptor_tfplugin5_56820f4fb67360c5, []int{7, 1}
}
func (m *PrepareProviderConfig_Response) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_PrepareProviderConfig_Response.Unmarshal(m, b)
@ -1048,7 +1051,7 @@ func (m *UpgradeResourceState) Reset() { *m = UpgradeResourceState{} }
func (m *UpgradeResourceState) String() string { return proto.CompactTextString(m) }
func (*UpgradeResourceState) ProtoMessage() {}
func (*UpgradeResourceState) Descriptor() ([]byte, []int) {
return fileDescriptor_tfplugin5_0417c8e6dca655d3, []int{8}
return fileDescriptor_tfplugin5_56820f4fb67360c5, []int{8}
}
func (m *UpgradeResourceState) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_UpgradeResourceState.Unmarshal(m, b)
@ -1087,7 +1090,7 @@ func (m *UpgradeResourceState_Request) Reset() { *m = UpgradeResourceSta
func (m *UpgradeResourceState_Request) String() string { return proto.CompactTextString(m) }
func (*UpgradeResourceState_Request) ProtoMessage() {}
func (*UpgradeResourceState_Request) Descriptor() ([]byte, []int) {
return fileDescriptor_tfplugin5_0417c8e6dca655d3, []int{8, 0}
return fileDescriptor_tfplugin5_56820f4fb67360c5, []int{8, 0}
}
func (m *UpgradeResourceState_Request) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_UpgradeResourceState_Request.Unmarshal(m, b)
@ -1146,7 +1149,7 @@ func (m *UpgradeResourceState_Response) Reset() { *m = UpgradeResourceSt
func (m *UpgradeResourceState_Response) String() string { return proto.CompactTextString(m) }
func (*UpgradeResourceState_Response) ProtoMessage() {}
func (*UpgradeResourceState_Response) Descriptor() ([]byte, []int) {
return fileDescriptor_tfplugin5_0417c8e6dca655d3, []int{8, 1}
return fileDescriptor_tfplugin5_56820f4fb67360c5, []int{8, 1}
}
func (m *UpgradeResourceState_Response) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_UpgradeResourceState_Response.Unmarshal(m, b)
@ -1190,7 +1193,7 @@ func (m *ValidateResourceTypeConfig) Reset() { *m = ValidateResourceType
func (m *ValidateResourceTypeConfig) String() string { return proto.CompactTextString(m) }
func (*ValidateResourceTypeConfig) ProtoMessage() {}
func (*ValidateResourceTypeConfig) Descriptor() ([]byte, []int) {
return fileDescriptor_tfplugin5_0417c8e6dca655d3, []int{9}
return fileDescriptor_tfplugin5_56820f4fb67360c5, []int{9}
}
func (m *ValidateResourceTypeConfig) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ValidateResourceTypeConfig.Unmarshal(m, b)
@ -1222,7 +1225,7 @@ func (m *ValidateResourceTypeConfig_Request) Reset() { *m = ValidateReso
func (m *ValidateResourceTypeConfig_Request) String() string { return proto.CompactTextString(m) }
func (*ValidateResourceTypeConfig_Request) ProtoMessage() {}
func (*ValidateResourceTypeConfig_Request) Descriptor() ([]byte, []int) {
return fileDescriptor_tfplugin5_0417c8e6dca655d3, []int{9, 0}
return fileDescriptor_tfplugin5_56820f4fb67360c5, []int{9, 0}
}
func (m *ValidateResourceTypeConfig_Request) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ValidateResourceTypeConfig_Request.Unmarshal(m, b)
@ -1267,7 +1270,7 @@ func (m *ValidateResourceTypeConfig_Response) Reset() { *m = ValidateRes
func (m *ValidateResourceTypeConfig_Response) String() string { return proto.CompactTextString(m) }
func (*ValidateResourceTypeConfig_Response) ProtoMessage() {}
func (*ValidateResourceTypeConfig_Response) Descriptor() ([]byte, []int) {
return fileDescriptor_tfplugin5_0417c8e6dca655d3, []int{9, 1}
return fileDescriptor_tfplugin5_56820f4fb67360c5, []int{9, 1}
}
func (m *ValidateResourceTypeConfig_Response) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ValidateResourceTypeConfig_Response.Unmarshal(m, b)
@ -1304,7 +1307,7 @@ func (m *ValidateDataSourceConfig) Reset() { *m = ValidateDataSourceConf
func (m *ValidateDataSourceConfig) String() string { return proto.CompactTextString(m) }
func (*ValidateDataSourceConfig) ProtoMessage() {}
func (*ValidateDataSourceConfig) Descriptor() ([]byte, []int) {
return fileDescriptor_tfplugin5_0417c8e6dca655d3, []int{10}
return fileDescriptor_tfplugin5_56820f4fb67360c5, []int{10}
}
func (m *ValidateDataSourceConfig) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ValidateDataSourceConfig.Unmarshal(m, b)
@ -1336,7 +1339,7 @@ func (m *ValidateDataSourceConfig_Request) Reset() { *m = ValidateDataSo
func (m *ValidateDataSourceConfig_Request) String() string { return proto.CompactTextString(m) }
func (*ValidateDataSourceConfig_Request) ProtoMessage() {}
func (*ValidateDataSourceConfig_Request) Descriptor() ([]byte, []int) {
return fileDescriptor_tfplugin5_0417c8e6dca655d3, []int{10, 0}
return fileDescriptor_tfplugin5_56820f4fb67360c5, []int{10, 0}
}
func (m *ValidateDataSourceConfig_Request) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ValidateDataSourceConfig_Request.Unmarshal(m, b)
@ -1381,7 +1384,7 @@ func (m *ValidateDataSourceConfig_Response) Reset() { *m = ValidateDataS
func (m *ValidateDataSourceConfig_Response) String() string { return proto.CompactTextString(m) }
func (*ValidateDataSourceConfig_Response) ProtoMessage() {}
func (*ValidateDataSourceConfig_Response) Descriptor() ([]byte, []int) {
return fileDescriptor_tfplugin5_0417c8e6dca655d3, []int{10, 1}
return fileDescriptor_tfplugin5_56820f4fb67360c5, []int{10, 1}
}
func (m *ValidateDataSourceConfig_Response) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ValidateDataSourceConfig_Response.Unmarshal(m, b)
@ -1418,7 +1421,7 @@ func (m *Configure) Reset() { *m = Configure{} }
func (m *Configure) String() string { return proto.CompactTextString(m) }
func (*Configure) ProtoMessage() {}
func (*Configure) Descriptor() ([]byte, []int) {
return fileDescriptor_tfplugin5_0417c8e6dca655d3, []int{11}
return fileDescriptor_tfplugin5_56820f4fb67360c5, []int{11}
}
func (m *Configure) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_Configure.Unmarshal(m, b)
@ -1450,7 +1453,7 @@ func (m *Configure_Request) Reset() { *m = Configure_Request{} }
func (m *Configure_Request) String() string { return proto.CompactTextString(m) }
func (*Configure_Request) ProtoMessage() {}
func (*Configure_Request) Descriptor() ([]byte, []int) {
return fileDescriptor_tfplugin5_0417c8e6dca655d3, []int{11, 0}
return fileDescriptor_tfplugin5_56820f4fb67360c5, []int{11, 0}
}
func (m *Configure_Request) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_Configure_Request.Unmarshal(m, b)
@ -1495,7 +1498,7 @@ func (m *Configure_Response) Reset() { *m = Configure_Response{} }
func (m *Configure_Response) String() string { return proto.CompactTextString(m) }
func (*Configure_Response) ProtoMessage() {}
func (*Configure_Response) Descriptor() ([]byte, []int) {
return fileDescriptor_tfplugin5_0417c8e6dca655d3, []int{11, 1}
return fileDescriptor_tfplugin5_56820f4fb67360c5, []int{11, 1}
}
func (m *Configure_Response) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_Configure_Response.Unmarshal(m, b)
@ -1532,7 +1535,7 @@ func (m *ReadResource) Reset() { *m = ReadResource{} }
func (m *ReadResource) String() string { return proto.CompactTextString(m) }
func (*ReadResource) ProtoMessage() {}
func (*ReadResource) Descriptor() ([]byte, []int) {
return fileDescriptor_tfplugin5_0417c8e6dca655d3, []int{12}
return fileDescriptor_tfplugin5_56820f4fb67360c5, []int{12}
}
func (m *ReadResource) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ReadResource.Unmarshal(m, b)
@ -1564,7 +1567,7 @@ func (m *ReadResource_Request) Reset() { *m = ReadResource_Request{} }
func (m *ReadResource_Request) String() string { return proto.CompactTextString(m) }
func (*ReadResource_Request) ProtoMessage() {}
func (*ReadResource_Request) Descriptor() ([]byte, []int) {
return fileDescriptor_tfplugin5_0417c8e6dca655d3, []int{12, 0}
return fileDescriptor_tfplugin5_56820f4fb67360c5, []int{12, 0}
}
func (m *ReadResource_Request) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ReadResource_Request.Unmarshal(m, b)
@ -1610,7 +1613,7 @@ func (m *ReadResource_Response) Reset() { *m = ReadResource_Response{} }
func (m *ReadResource_Response) String() string { return proto.CompactTextString(m) }
func (*ReadResource_Response) ProtoMessage() {}
func (*ReadResource_Response) Descriptor() ([]byte, []int) {
return fileDescriptor_tfplugin5_0417c8e6dca655d3, []int{12, 1}
return fileDescriptor_tfplugin5_56820f4fb67360c5, []int{12, 1}
}
func (m *ReadResource_Response) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ReadResource_Response.Unmarshal(m, b)
@ -1654,7 +1657,7 @@ func (m *PlanResourceChange) Reset() { *m = PlanResourceChange{} }
func (m *PlanResourceChange) String() string { return proto.CompactTextString(m) }
func (*PlanResourceChange) ProtoMessage() {}
func (*PlanResourceChange) Descriptor() ([]byte, []int) {
return fileDescriptor_tfplugin5_0417c8e6dca655d3, []int{13}
return fileDescriptor_tfplugin5_56820f4fb67360c5, []int{13}
}
func (m *PlanResourceChange) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_PlanResourceChange.Unmarshal(m, b)
@ -1689,7 +1692,7 @@ func (m *PlanResourceChange_Request) Reset() { *m = PlanResourceChange_R
func (m *PlanResourceChange_Request) String() string { return proto.CompactTextString(m) }
func (*PlanResourceChange_Request) ProtoMessage() {}
func (*PlanResourceChange_Request) Descriptor() ([]byte, []int) {
return fileDescriptor_tfplugin5_0417c8e6dca655d3, []int{13, 0}
return fileDescriptor_tfplugin5_56820f4fb67360c5, []int{13, 0}
}
func (m *PlanResourceChange_Request) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_PlanResourceChange_Request.Unmarshal(m, b)
@ -1770,7 +1773,7 @@ func (m *PlanResourceChange_Response) Reset() { *m = PlanResourceChange_
func (m *PlanResourceChange_Response) String() string { return proto.CompactTextString(m) }
func (*PlanResourceChange_Response) ProtoMessage() {}
func (*PlanResourceChange_Response) Descriptor() ([]byte, []int) {
return fileDescriptor_tfplugin5_0417c8e6dca655d3, []int{13, 1}
return fileDescriptor_tfplugin5_56820f4fb67360c5, []int{13, 1}
}
func (m *PlanResourceChange_Response) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_PlanResourceChange_Response.Unmarshal(m, b)
@ -1835,7 +1838,7 @@ func (m *ApplyResourceChange) Reset() { *m = ApplyResourceChange{} }
func (m *ApplyResourceChange) String() string { return proto.CompactTextString(m) }
func (*ApplyResourceChange) ProtoMessage() {}
func (*ApplyResourceChange) Descriptor() ([]byte, []int) {
return fileDescriptor_tfplugin5_0417c8e6dca655d3, []int{14}
return fileDescriptor_tfplugin5_56820f4fb67360c5, []int{14}
}
func (m *ApplyResourceChange) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ApplyResourceChange.Unmarshal(m, b)
@ -1870,7 +1873,7 @@ func (m *ApplyResourceChange_Request) Reset() { *m = ApplyResourceChange
func (m *ApplyResourceChange_Request) String() string { return proto.CompactTextString(m) }
func (*ApplyResourceChange_Request) ProtoMessage() {}
func (*ApplyResourceChange_Request) Descriptor() ([]byte, []int) {
return fileDescriptor_tfplugin5_0417c8e6dca655d3, []int{14, 0}
return fileDescriptor_tfplugin5_56820f4fb67360c5, []int{14, 0}
}
func (m *ApplyResourceChange_Request) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ApplyResourceChange_Request.Unmarshal(m, b)
@ -1950,7 +1953,7 @@ func (m *ApplyResourceChange_Response) Reset() { *m = ApplyResourceChang
func (m *ApplyResourceChange_Response) String() string { return proto.CompactTextString(m) }
func (*ApplyResourceChange_Response) ProtoMessage() {}
func (*ApplyResourceChange_Response) Descriptor() ([]byte, []int) {
return fileDescriptor_tfplugin5_0417c8e6dca655d3, []int{14, 1}
return fileDescriptor_tfplugin5_56820f4fb67360c5, []int{14, 1}
}
func (m *ApplyResourceChange_Response) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ApplyResourceChange_Response.Unmarshal(m, b)
@ -2008,7 +2011,7 @@ func (m *ImportResourceState) Reset() { *m = ImportResourceState{} }
func (m *ImportResourceState) String() string { return proto.CompactTextString(m) }
func (*ImportResourceState) ProtoMessage() {}
func (*ImportResourceState) Descriptor() ([]byte, []int) {
return fileDescriptor_tfplugin5_0417c8e6dca655d3, []int{15}
return fileDescriptor_tfplugin5_56820f4fb67360c5, []int{15}
}
func (m *ImportResourceState) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ImportResourceState.Unmarshal(m, b)
@ -2040,7 +2043,7 @@ func (m *ImportResourceState_Request) Reset() { *m = ImportResourceState
func (m *ImportResourceState_Request) String() string { return proto.CompactTextString(m) }
func (*ImportResourceState_Request) ProtoMessage() {}
func (*ImportResourceState_Request) Descriptor() ([]byte, []int) {
return fileDescriptor_tfplugin5_0417c8e6dca655d3, []int{15, 0}
return fileDescriptor_tfplugin5_56820f4fb67360c5, []int{15, 0}
}
func (m *ImportResourceState_Request) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ImportResourceState_Request.Unmarshal(m, b)
@ -2087,7 +2090,7 @@ func (m *ImportResourceState_ImportedResource) Reset() { *m = ImportReso
func (m *ImportResourceState_ImportedResource) String() string { return proto.CompactTextString(m) }
func (*ImportResourceState_ImportedResource) ProtoMessage() {}
func (*ImportResourceState_ImportedResource) Descriptor() ([]byte, []int) {
return fileDescriptor_tfplugin5_0417c8e6dca655d3, []int{15, 1}
return fileDescriptor_tfplugin5_56820f4fb67360c5, []int{15, 1}
}
func (m *ImportResourceState_ImportedResource) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ImportResourceState_ImportedResource.Unmarshal(m, b)
@ -2140,7 +2143,7 @@ func (m *ImportResourceState_Response) Reset() { *m = ImportResourceStat
func (m *ImportResourceState_Response) String() string { return proto.CompactTextString(m) }
func (*ImportResourceState_Response) ProtoMessage() {}
func (*ImportResourceState_Response) Descriptor() ([]byte, []int) {
return fileDescriptor_tfplugin5_0417c8e6dca655d3, []int{15, 2}
return fileDescriptor_tfplugin5_56820f4fb67360c5, []int{15, 2}
}
func (m *ImportResourceState_Response) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ImportResourceState_Response.Unmarshal(m, b)
@ -2184,7 +2187,7 @@ func (m *ReadDataSource) Reset() { *m = ReadDataSource{} }
func (m *ReadDataSource) String() string { return proto.CompactTextString(m) }
func (*ReadDataSource) ProtoMessage() {}
func (*ReadDataSource) Descriptor() ([]byte, []int) {
return fileDescriptor_tfplugin5_0417c8e6dca655d3, []int{16}
return fileDescriptor_tfplugin5_56820f4fb67360c5, []int{16}
}
func (m *ReadDataSource) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ReadDataSource.Unmarshal(m, b)
@ -2216,7 +2219,7 @@ func (m *ReadDataSource_Request) Reset() { *m = ReadDataSource_Request{}
func (m *ReadDataSource_Request) String() string { return proto.CompactTextString(m) }
func (*ReadDataSource_Request) ProtoMessage() {}
func (*ReadDataSource_Request) Descriptor() ([]byte, []int) {
return fileDescriptor_tfplugin5_0417c8e6dca655d3, []int{16, 0}
return fileDescriptor_tfplugin5_56820f4fb67360c5, []int{16, 0}
}
func (m *ReadDataSource_Request) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ReadDataSource_Request.Unmarshal(m, b)
@ -2262,7 +2265,7 @@ func (m *ReadDataSource_Response) Reset() { *m = ReadDataSource_Response
func (m *ReadDataSource_Response) String() string { return proto.CompactTextString(m) }
func (*ReadDataSource_Response) ProtoMessage() {}
func (*ReadDataSource_Response) Descriptor() ([]byte, []int) {
return fileDescriptor_tfplugin5_0417c8e6dca655d3, []int{16, 1}
return fileDescriptor_tfplugin5_56820f4fb67360c5, []int{16, 1}
}
func (m *ReadDataSource_Response) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ReadDataSource_Response.Unmarshal(m, b)
@ -2306,7 +2309,7 @@ func (m *GetProvisionerSchema) Reset() { *m = GetProvisionerSchema{} }
func (m *GetProvisionerSchema) String() string { return proto.CompactTextString(m) }
func (*GetProvisionerSchema) ProtoMessage() {}
func (*GetProvisionerSchema) Descriptor() ([]byte, []int) {
return fileDescriptor_tfplugin5_0417c8e6dca655d3, []int{17}
return fileDescriptor_tfplugin5_56820f4fb67360c5, []int{17}
}
func (m *GetProvisionerSchema) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetProvisionerSchema.Unmarshal(m, b)
@ -2336,7 +2339,7 @@ func (m *GetProvisionerSchema_Request) Reset() { *m = GetProvisionerSche
func (m *GetProvisionerSchema_Request) String() string { return proto.CompactTextString(m) }
func (*GetProvisionerSchema_Request) ProtoMessage() {}
func (*GetProvisionerSchema_Request) Descriptor() ([]byte, []int) {
return fileDescriptor_tfplugin5_0417c8e6dca655d3, []int{17, 0}
return fileDescriptor_tfplugin5_56820f4fb67360c5, []int{17, 0}
}
func (m *GetProvisionerSchema_Request) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetProvisionerSchema_Request.Unmarshal(m, b)
@ -2368,7 +2371,7 @@ func (m *GetProvisionerSchema_Response) Reset() { *m = GetProvisionerSch
func (m *GetProvisionerSchema_Response) String() string { return proto.CompactTextString(m) }
func (*GetProvisionerSchema_Response) ProtoMessage() {}
func (*GetProvisionerSchema_Response) Descriptor() ([]byte, []int) {
return fileDescriptor_tfplugin5_0417c8e6dca655d3, []int{17, 1}
return fileDescriptor_tfplugin5_56820f4fb67360c5, []int{17, 1}
}
func (m *GetProvisionerSchema_Response) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetProvisionerSchema_Response.Unmarshal(m, b)
@ -2412,7 +2415,7 @@ func (m *ValidateProvisionerConfig) Reset() { *m = ValidateProvisionerCo
func (m *ValidateProvisionerConfig) String() string { return proto.CompactTextString(m) }
func (*ValidateProvisionerConfig) ProtoMessage() {}
func (*ValidateProvisionerConfig) Descriptor() ([]byte, []int) {
return fileDescriptor_tfplugin5_0417c8e6dca655d3, []int{18}
return fileDescriptor_tfplugin5_56820f4fb67360c5, []int{18}
}
func (m *ValidateProvisionerConfig) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ValidateProvisionerConfig.Unmarshal(m, b)
@ -2443,7 +2446,7 @@ func (m *ValidateProvisionerConfig_Request) Reset() { *m = ValidateProvi
func (m *ValidateProvisionerConfig_Request) String() string { return proto.CompactTextString(m) }
func (*ValidateProvisionerConfig_Request) ProtoMessage() {}
func (*ValidateProvisionerConfig_Request) Descriptor() ([]byte, []int) {
return fileDescriptor_tfplugin5_0417c8e6dca655d3, []int{18, 0}
return fileDescriptor_tfplugin5_56820f4fb67360c5, []int{18, 0}
}
func (m *ValidateProvisionerConfig_Request) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ValidateProvisionerConfig_Request.Unmarshal(m, b)
@ -2481,7 +2484,7 @@ func (m *ValidateProvisionerConfig_Response) Reset() { *m = ValidateProv
func (m *ValidateProvisionerConfig_Response) String() string { return proto.CompactTextString(m) }
func (*ValidateProvisionerConfig_Response) ProtoMessage() {}
func (*ValidateProvisionerConfig_Response) Descriptor() ([]byte, []int) {
return fileDescriptor_tfplugin5_0417c8e6dca655d3, []int{18, 1}
return fileDescriptor_tfplugin5_56820f4fb67360c5, []int{18, 1}
}
func (m *ValidateProvisionerConfig_Response) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ValidateProvisionerConfig_Response.Unmarshal(m, b)
@ -2518,7 +2521,7 @@ func (m *ProvisionResource) Reset() { *m = ProvisionResource{} }
func (m *ProvisionResource) String() string { return proto.CompactTextString(m) }
func (*ProvisionResource) ProtoMessage() {}
func (*ProvisionResource) Descriptor() ([]byte, []int) {
return fileDescriptor_tfplugin5_0417c8e6dca655d3, []int{19}
return fileDescriptor_tfplugin5_56820f4fb67360c5, []int{19}
}
func (m *ProvisionResource) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ProvisionResource.Unmarshal(m, b)
@ -2550,7 +2553,7 @@ func (m *ProvisionResource_Request) Reset() { *m = ProvisionResource_Req
func (m *ProvisionResource_Request) String() string { return proto.CompactTextString(m) }
func (*ProvisionResource_Request) ProtoMessage() {}
func (*ProvisionResource_Request) Descriptor() ([]byte, []int) {
return fileDescriptor_tfplugin5_0417c8e6dca655d3, []int{19, 0}
return fileDescriptor_tfplugin5_56820f4fb67360c5, []int{19, 0}
}
func (m *ProvisionResource_Request) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ProvisionResource_Request.Unmarshal(m, b)
@ -2596,7 +2599,7 @@ func (m *ProvisionResource_Response) Reset() { *m = ProvisionResource_Re
func (m *ProvisionResource_Response) String() string { return proto.CompactTextString(m) }
func (*ProvisionResource_Response) ProtoMessage() {}
func (*ProvisionResource_Response) Descriptor() ([]byte, []int) {
return fileDescriptor_tfplugin5_0417c8e6dca655d3, []int{19, 1}
return fileDescriptor_tfplugin5_56820f4fb67360c5, []int{19, 1}
}
func (m *ProvisionResource_Response) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ProvisionResource_Response.Unmarshal(m, b)
@ -3327,125 +3330,126 @@ var _Provisioner_serviceDesc = grpc.ServiceDesc{
Metadata: "tfplugin5.proto",
}
func init() { proto.RegisterFile("tfplugin5.proto", fileDescriptor_tfplugin5_0417c8e6dca655d3) }
func init() { proto.RegisterFile("tfplugin5.proto", fileDescriptor_tfplugin5_56820f4fb67360c5) }
var fileDescriptor_tfplugin5_0417c8e6dca655d3 = []byte{
// 1867 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x59, 0xcd, 0x73, 0x1b, 0x49,
0x15, 0xcf, 0x68, 0x24, 0x5b, 0x7a, 0xf2, 0x87, 0xdc, 0xc9, 0x06, 0x31, 0xbb, 0x0b, 0x46, 0x7c,
0xd8, 0x5b, 0xbb, 0x51, 0xb6, 0x1c, 0xd8, 0x5d, 0x4c, 0x6a, 0x0b, 0xc7, 0x31, 0x89, 0x8b, 0xac,
0x31, 0xad, 0x6c, 0x42, 0x15, 0x55, 0xab, 0xea, 0x68, 0xda, 0xca, 0x10, 0x69, 0x66, 0xb6, 0xa7,
0x65, 0x5b, 0xc5, 0x91, 0x82, 0x33, 0x17, 0x3e, 0xaa, 0x58, 0xb8, 0xf0, 0x2f, 0x70, 0x00, 0x6e,
0x9c, 0xf8, 0x07, 0xb8, 0x2d, 0x9c, 0x28, 0x8e, 0x14, 0x47, 0xb8, 0x50, 0x45, 0xf5, 0xd7, 0x4c,
0x4b, 0x1a, 0xd9, 0x13, 0x7b, 0x53, 0xd4, 0xde, 0xa6, 0xfb, 0xfd, 0xfa, 0xbd, 0x5f, 0xbf, 0xf7,
0xfa, 0xbd, 0x6e, 0x09, 0x56, 0xf9, 0x51, 0x3c, 0x18, 0xf5, 0x83, 0xf0, 0x6b, 0xed, 0x98, 0x45,
0x3c, 0x42, 0xb5, 0x74, 0xa2, 0x75, 0x1b, 0x96, 0xee, 0x8e, 0x43, 0x32, 0x0c, 0x7a, 0x8f, 0xc8,
0x60, 0x44, 0x51, 0x13, 0x16, 0x87, 0x49, 0x3f, 0x26, 0xbd, 0x67, 0x4d, 0x67, 0xdd, 0xd9, 0x5c,
0xc2, 0x66, 0x88, 0x10, 0x94, 0x7f, 0x90, 0x44, 0x61, 0xb3, 0x24, 0xa7, 0xe5, 0x77, 0xeb, 0xef,
0x0e, 0xc0, 0xdd, 0x80, 0xf4, 0xc3, 0x28, 0xe1, 0x41, 0x0f, 0x6d, 0x43, 0x35, 0xa1, 0xc7, 0x94,
0x05, 0x7c, 0x2c, 0x57, 0xaf, 0x6c, 0x7d, 0xae, 0x9d, 0xd9, 0xce, 0x80, 0xed, 0x8e, 0x46, 0xe1,
0x14, 0x2f, 0x0c, 0x27, 0xa3, 0xe1, 0x90, 0xb0, 0xb1, 0xb4, 0x50, 0xc3, 0x66, 0x88, 0xae, 0xc3,
0x82, 0x4f, 0x39, 0x09, 0x06, 0x4d, 0x57, 0x0a, 0xf4, 0x08, 0xbd, 0x05, 0x35, 0xc2, 0x39, 0x0b,
0x9e, 0x8c, 0x38, 0x6d, 0x96, 0xd7, 0x9d, 0xcd, 0xfa, 0x56, 0xd3, 0x32, 0xb7, 0x63, 0x64, 0x87,
0x84, 0x3f, 0xc5, 0x19, 0xb4, 0x75, 0x13, 0xaa, 0xc6, 0x3e, 0xaa, 0xc3, 0xe2, 0xfe, 0xc1, 0xa3,
0x9d, 0x07, 0xfb, 0x77, 0x1b, 0x57, 0x50, 0x0d, 0x2a, 0x7b, 0x18, 0x7f, 0x07, 0x37, 0x1c, 0x31,
0xff, 0x78, 0x07, 0x1f, 0xec, 0x1f, 0xdc, 0x6b, 0x94, 0x5a, 0x7f, 0x75, 0x60, 0x79, 0x42, 0x1b,
0xba, 0x05, 0x95, 0x84, 0xd3, 0x38, 0x69, 0x3a, 0xeb, 0xee, 0x66, 0x7d, 0xeb, 0xd5, 0x79, 0x66,
0xdb, 0x1d, 0x4e, 0x63, 0xac, 0xb0, 0xde, 0xcf, 0x1c, 0x28, 0x8b, 0x31, 0xda, 0x80, 0x95, 0x94,
0x4d, 0x37, 0x24, 0x43, 0x2a, 0x9d, 0x55, 0xbb, 0x7f, 0x05, 0x2f, 0xa7, 0xf3, 0x07, 0x64, 0x48,
0x51, 0x1b, 0x10, 0x1d, 0xd0, 0x21, 0x0d, 0x79, 0xf7, 0x19, 0x1d, 0x77, 0x13, 0xce, 0x82, 0xb0,
0xaf, 0xdc, 0x73, 0xff, 0x0a, 0x6e, 0x68, 0xd9, 0xb7, 0xe9, 0xb8, 0x23, 0x25, 0x68, 0x13, 0x56,
0x6d, 0x7c, 0x10, 0x72, 0xe9, 0x32, 0x57, 0x68, 0xce, 0xc0, 0xfb, 0x21, 0xbf, 0x03, 0x22, 0x52,
0x03, 0xda, 0xe3, 0x11, 0x6b, 0xdd, 0x12, 0xb4, 0xa2, 0xd8, 0xab, 0xc1, 0x22, 0xa6, 0x1f, 0x8e,
0x68, 0xc2, 0xbd, 0x75, 0xa8, 0x62, 0x9a, 0xc4, 0x51, 0x98, 0x50, 0x74, 0x0d, 0x2a, 0x7b, 0x8c,
0x45, 0x4c, 0x91, 0xc4, 0x15, 0x2a, 0x06, 0xad, 0x9f, 0x3b, 0x50, 0xc5, 0xe4, 0xa4, 0xc3, 0x09,
0xa7, 0x69, 0x6a, 0x38, 0x59, 0x6a, 0xa0, 0x6d, 0x58, 0x3c, 0x1a, 0x10, 0x3e, 0x24, 0x71, 0xb3,
0x24, 0x9d, 0xb4, 0x6e, 0x39, 0xc9, 0xac, 0x6c, 0x7f, 0x4b, 0x41, 0xf6, 0x42, 0xce, 0xc6, 0xd8,
0x2c, 0xf0, 0xb6, 0x61, 0xc9, 0x16, 0xa0, 0x06, 0xb8, 0xcf, 0xe8, 0x58, 0x13, 0x10, 0x9f, 0x82,
0xd4, 0xb1, 0xc8, 0x57, 0x9d, 0x2b, 0x6a, 0xb0, 0x5d, 0x7a, 0xc7, 0x69, 0x7d, 0x5c, 0x81, 0x85,
0x4e, 0xef, 0x29, 0x1d, 0x12, 0x91, 0x52, 0xc7, 0x94, 0x25, 0x81, 0x66, 0xe6, 0x62, 0x33, 0x44,
0x37, 0xa0, 0xf2, 0x64, 0x10, 0xf5, 0x9e, 0xc9, 0xe5, 0xf5, 0xad, 0xcf, 0x58, 0xd4, 0xd4, 0xda,
0xf6, 0x1d, 0x21, 0xc6, 0x0a, 0xe5, 0xfd, 0xc6, 0x81, 0x8a, 0x9c, 0x38, 0x43, 0xe5, 0x37, 0x00,
0xd2, 0xe0, 0x25, 0x7a, 0xcb, 0x2f, 0xcf, 0xea, 0x4d, 0xd3, 0x03, 0x5b, 0x70, 0xf4, 0x2e, 0xd4,
0xa5, 0xa5, 0x2e, 0x1f, 0xc7, 0x34, 0x69, 0xba, 0x33, 0x59, 0xa5, 0x57, 0x1f, 0xd0, 0x84, 0x53,
0x5f, 0x71, 0x03, 0xb9, 0xe2, 0xa1, 0x58, 0xe0, 0xfd, 0xd9, 0x81, 0x5a, 0xaa, 0x59, 0x84, 0x23,
0xcb, 0x2a, 0x2c, 0xbf, 0xc5, 0x9c, 0xd0, 0x6d, 0x4e, 0xaf, 0xf8, 0x46, 0xeb, 0x50, 0xf7, 0x69,
0xd2, 0x63, 0x41, 0xcc, 0xc5, 0x86, 0xd4, 0xe9, 0xb2, 0xa7, 0x90, 0x07, 0x55, 0x46, 0x3f, 0x1c,
0x05, 0x8c, 0xfa, 0xf2, 0x84, 0x55, 0x71, 0x3a, 0x16, 0xb2, 0x48, 0xa2, 0xc8, 0xa0, 0x59, 0x51,
0x32, 0x33, 0x16, 0xb2, 0x5e, 0x34, 0x8c, 0x47, 0x9c, 0xfa, 0xcd, 0x05, 0x25, 0x33, 0x63, 0xf4,
0x0a, 0xd4, 0x12, 0x1a, 0x26, 0x01, 0x0f, 0x8e, 0x69, 0x73, 0x51, 0x0a, 0xb3, 0x09, 0xef, 0xa3,
0x12, 0xd4, 0xad, 0x5d, 0xa2, 0x97, 0xa1, 0x26, 0xb8, 0x5a, 0xc7, 0x04, 0x57, 0xc5, 0x84, 0x3c,
0x1f, 0xcf, 0x17, 0x46, 0xb4, 0x0b, 0x8b, 0x21, 0x4d, 0xb8, 0x38, 0x43, 0xae, 0xac, 0x4e, 0xaf,
0x9d, 0xe9, 0x61, 0xf9, 0x1d, 0x84, 0xfd, 0xf7, 0x22, 0x9f, 0x62, 0xb3, 0x52, 0x10, 0x1a, 0x06,
0x61, 0x37, 0xe0, 0x74, 0x98, 0x48, 0x9f, 0xb8, 0xb8, 0x3a, 0x0c, 0xc2, 0x7d, 0x31, 0x96, 0x42,
0x72, 0xaa, 0x85, 0x15, 0x2d, 0x24, 0xa7, 0x52, 0xd8, 0xba, 0xa3, 0x76, 0xa6, 0x35, 0x4e, 0x96,
0x1e, 0x80, 0x85, 0xce, 0xfe, 0xc1, 0xbd, 0x07, 0x7b, 0x0d, 0x07, 0x55, 0xa1, 0xfc, 0x60, 0xbf,
0xf3, 0xb0, 0x51, 0x42, 0x8b, 0xe0, 0x76, 0xf6, 0x1e, 0x36, 0x5c, 0xf1, 0xf1, 0xde, 0xce, 0x61,
0xa3, 0xdc, 0xfa, 0x65, 0x19, 0xd6, 0xee, 0x51, 0x7e, 0xc8, 0xa2, 0xe3, 0xc0, 0xa7, 0x4c, 0x91,
0xb6, 0x4f, 0xee, 0xbf, 0x5d, 0xeb, 0xe8, 0xde, 0x80, 0x6a, 0xac, 0x91, 0xd2, 0x77, 0xf5, 0xad,
0xb5, 0x99, 0x1d, 0xe3, 0x14, 0x82, 0x28, 0x34, 0x18, 0x4d, 0xa2, 0x11, 0xeb, 0xd1, 0x6e, 0x22,
0x85, 0x26, 0x91, 0xb7, 0xad, 0x65, 0x33, 0xe6, 0xdb, 0xc6, 0x9e, 0xf8, 0x90, 0xab, 0xd5, 0x7c,
0xa2, 0x4e, 0xf5, 0x2a, 0x9b, 0x9c, 0x45, 0x03, 0xb8, 0xea, 0x13, 0x4e, 0xba, 0x53, 0x96, 0x54,
0xd2, 0xdf, 0x2e, 0x66, 0xe9, 0x2e, 0xe1, 0xa4, 0x33, 0x6b, 0x6b, 0xcd, 0x9f, 0x9e, 0x47, 0x6f,
0x43, 0xdd, 0x4f, 0x1b, 0x8f, 0x88, 0x98, 0xb0, 0xf2, 0x52, 0x6e, 0x5b, 0xc2, 0x36, 0xd2, 0x7b,
0x1f, 0xae, 0xe5, 0xed, 0x27, 0xa7, 0x18, 0x6d, 0xd8, 0xc5, 0x28, 0xd7, 0xc7, 0x59, 0x7d, 0xf2,
0x1e, 0xc3, 0xf5, 0x7c, 0xf2, 0x97, 0x54, 0xdc, 0xfa, 0xd8, 0x81, 0x97, 0x0e, 0x19, 0x8d, 0x09,
0xa3, 0xc6, 0x6b, 0xbb, 0x51, 0x78, 0x14, 0xf4, 0xbd, 0xed, 0x34, 0x3d, 0xd0, 0x4d, 0x58, 0xe8,
0xc9, 0x49, 0x9d, 0x0f, 0xf6, 0x91, 0xb1, 0xef, 0x01, 0x58, 0xc3, 0xbc, 0x1f, 0x3b, 0x56, 0x3e,
0x7d, 0x13, 0x56, 0x63, 0x65, 0xc1, 0xef, 0x16, 0x53, 0xb3, 0x62, 0xf0, 0x8a, 0xca, 0x74, 0x34,
0x4a, 0x45, 0xa3, 0xd1, 0xfa, 0x69, 0x09, 0xae, 0xbd, 0x1f, 0xf7, 0x19, 0xf1, 0x69, 0x1a, 0x15,
0xd1, 0x41, 0x3c, 0x96, 0x6d, 0xee, 0xcc, 0x5a, 0x61, 0x55, 0xee, 0xd2, 0x64, 0xe5, 0x7e, 0x13,
0x6a, 0x8c, 0x9c, 0x74, 0x13, 0xa1, 0x4e, 0x16, 0x86, 0xfa, 0xd6, 0xd5, 0x9c, 0x5e, 0x85, 0xab,
0x4c, 0x7f, 0x79, 0x3f, 0xb2, 0x9d, 0xf2, 0x2e, 0xac, 0x8c, 0x14, 0x31, 0x5f, 0xeb, 0x38, 0xc7,
0x27, 0xcb, 0x06, 0xae, 0x9a, 0xe7, 0x85, 0x5d, 0xf2, 0x47, 0x07, 0xbc, 0x47, 0x64, 0x10, 0xf8,
0x82, 0x9c, 0xf6, 0x89, 0x68, 0x07, 0x3a, 0xea, 0x8f, 0x0b, 0x3a, 0x26, 0x4b, 0x89, 0x52, 0xb1,
0x94, 0xd8, 0xb5, 0x36, 0x3f, 0x45, 0xde, 0x29, 0x4c, 0xfe, 0xf7, 0x0e, 0x34, 0x0d, 0xf9, 0xec,
0x3c, 0x7c, 0x2a, 0xa8, 0xff, 0xc1, 0x81, 0x9a, 0x22, 0x3a, 0x62, 0xd4, 0xeb, 0x67, 0x5c, 0x5f,
0x87, 0x35, 0x4e, 0x19, 0x23, 0x47, 0x11, 0x1b, 0x76, 0xed, 0x6b, 0x42, 0x0d, 0x37, 0x52, 0xc1,
0x23, 0x9d, 0x75, 0xff, 0x1f, 0xee, 0xff, 0x72, 0x60, 0x09, 0x53, 0xe2, 0x9b, 0x7c, 0xf1, 0xfc,
0x82, 0xae, 0xbe, 0x0d, 0xcb, 0xbd, 0x11, 0x63, 0xe2, 0x6a, 0xa9, 0x92, 0xfc, 0x1c, 0xd6, 0x4b,
0x1a, 0xad, 0x0e, 0xcc, 0xd8, 0xe2, 0xfe, 0x55, 0xa8, 0x85, 0xf4, 0xa4, 0xd8, 0x51, 0xa9, 0x86,
0xf4, 0xe4, 0x92, 0xa7, 0xe4, 0x77, 0x65, 0x40, 0x87, 0x03, 0x12, 0x9a, 0x1d, 0xef, 0x3e, 0x25,
0x61, 0x9f, 0x7a, 0xff, 0x75, 0x0a, 0x6e, 0xfc, 0x1d, 0xa8, 0xc7, 0x2c, 0x88, 0x58, 0xb1, 0x6d,
0x83, 0xc4, 0x2a, 0xca, 0x7b, 0x80, 0x62, 0x16, 0xc5, 0x51, 0x42, 0xfd, 0x6e, 0xb6, 0x63, 0xf7,
0x6c, 0x05, 0x0d, 0xb3, 0xe4, 0xc0, 0xec, 0x3c, 0x4b, 0x94, 0x72, 0xa1, 0x44, 0x41, 0x5f, 0x84,
0x65, 0xc5, 0x38, 0x66, 0xc1, 0xb1, 0x30, 0x59, 0x91, 0x77, 0xbe, 0x25, 0x39, 0x79, 0xa8, 0xe6,
0xbc, 0x5f, 0x97, 0xac, 0x90, 0xdc, 0x86, 0xe5, 0x78, 0x40, 0xc2, 0xb0, 0x68, 0x05, 0x5b, 0xd2,
0x68, 0x45, 0x70, 0x57, 0x5c, 0x1b, 0xe4, 0xa5, 0x30, 0xe9, 0x32, 0x1a, 0x0f, 0x48, 0x8f, 0xea,
0xf8, 0xcc, 0x7f, 0x8e, 0xad, 0x9a, 0x15, 0x58, 0x2d, 0x40, 0x1b, 0xb0, 0x6a, 0x28, 0x18, 0xda,
0xae, 0xa4, 0xbd, 0xa2, 0xa7, 0x35, 0xf1, 0x0b, 0xf7, 0x73, 0xf4, 0x06, 0xa0, 0x01, 0xed, 0x93,
0xde, 0x58, 0x5e, 0xb2, 0xbb, 0xc9, 0x38, 0xe1, 0x74, 0xa8, 0x6f, 0xae, 0x0d, 0x25, 0x11, 0xd5,
0xb3, 0x23, 0xe7, 0x5b, 0x7f, 0x71, 0xe1, 0xea, 0x4e, 0x1c, 0x0f, 0xc6, 0x53, 0x79, 0xf3, 0x9f,
0x17, 0x9f, 0x37, 0x33, 0xd1, 0x70, 0x9f, 0x27, 0x1a, 0xcf, 0x9d, 0x2e, 0x39, 0x9e, 0xaf, 0xe4,
0x79, 0xde, 0xfb, 0x93, 0x73, 0xe9, 0x53, 0xdc, 0x84, 0x45, 0x63, 0x43, 0x3d, 0x44, 0xcc, 0x70,
0x3a, 0xac, 0xee, 0x25, 0xc3, 0x5a, 0x9e, 0x13, 0xd6, 0x7f, 0x96, 0xe0, 0xea, 0xfe, 0x30, 0x8e,
0x18, 0x9f, 0xbc, 0x45, 0xbc, 0x55, 0x30, 0xaa, 0x2b, 0x50, 0x0a, 0x7c, 0xfd, 0xe8, 0x2c, 0x05,
0xbe, 0x77, 0x0a, 0x0d, 0xa5, 0x8e, 0xa6, 0x25, 0xf5, 0xdc, 0x27, 0x4b, 0xa1, 0x84, 0x50, 0x28,
0xdb, 0x61, 0xee, 0x84, 0xc3, 0xbc, 0xdf, 0xda, 0xd1, 0xf8, 0x00, 0x50, 0xa0, 0x69, 0x74, 0xcd,
0x75, 0xdb, 0xb4, 0x85, 0x9b, 0x96, 0x89, 0x9c, 0xad, 0xb7, 0xa7, 0xf9, 0xe3, 0xb5, 0x60, 0x6a,
0x26, 0xb9, 0x78, 0xf5, 0xfd, 0x9b, 0x03, 0x2b, 0xa2, 0xdf, 0x64, 0x2d, 0xfe, 0xc5, 0x35, 0x77,
0x36, 0xf1, 0xf2, 0xa9, 0x14, 0x4a, 0x4d, 0xed, 0xe6, 0x0b, 0xef, 0xef, 0x57, 0x0e, 0x5c, 0x33,
0xcf, 0x14, 0xd1, 0xd6, 0xf3, 0x9e, 0x64, 0xa7, 0x16, 0xaf, 0x5b, 0xa2, 0x2a, 0xa4, 0xd8, 0xf9,
0x8f, 0x32, 0x1b, 0x75, 0x71, 0x76, 0x1f, 0x39, 0xf0, 0x59, 0x73, 0xc9, 0xb2, 0x28, 0x7e, 0x02,
0xcf, 0x82, 0x4f, 0xe4, 0x32, 0xf2, 0x0f, 0x07, 0xd6, 0x52, 0x5a, 0xe9, 0x8d, 0x24, 0xb9, 0x38,
0x2d, 0xf4, 0x36, 0x40, 0x2f, 0x0a, 0x43, 0xda, 0xe3, 0xe6, 0x9e, 0x7f, 0x56, 0xcd, 0xcd, 0xa0,
0xde, 0xf7, 0xad, 0xfd, 0x5c, 0x87, 0x85, 0x68, 0xc4, 0xe3, 0x11, 0xd7, 0x29, 0xa9, 0x47, 0x17,
0x0e, 0xc3, 0xd6, 0x2f, 0x6a, 0x50, 0x35, 0x4f, 0x32, 0xf4, 0x3d, 0xa8, 0xdd, 0xa3, 0x5c, 0xff,
0x42, 0xf5, 0xa5, 0x73, 0x5e, 0xbb, 0x2a, 0x81, 0xbe, 0x5c, 0xe8, 0x4d, 0x8c, 0x06, 0x73, 0xde,
0x7f, 0x68, 0xd3, 0x5a, 0x9f, 0x8b, 0x48, 0x2d, 0xbd, 0x56, 0x00, 0xa9, 0xad, 0xfd, 0xf0, 0xac,
0xc7, 0x07, 0xba, 0x61, 0x29, 0x9a, 0x0f, 0x4b, 0xed, 0xb6, 0x8b, 0xc2, 0xb5, 0xf1, 0xd1, 0xfc,
0xc7, 0x03, 0x7a, 0x3d, 0x47, 0xd7, 0x34, 0x28, 0x35, 0xfc, 0x46, 0x31, 0xb0, 0x36, 0x1b, 0xe4,
0xbf, 0x41, 0xd1, 0x86, 0xa5, 0x25, 0x0f, 0x90, 0x9a, 0xdb, 0x3c, 0x1f, 0xa8, 0x4d, 0xdd, 0xb7,
0xde, 0x18, 0xe8, 0x15, 0x6b, 0x59, 0x3a, 0x9b, 0x2a, 0x7d, 0x75, 0x8e, 0x54, 0x6b, 0xfa, 0xee,
0xe4, 0x8d, 0x1f, 0x7d, 0xde, 0x7e, 0xdb, 0x5a, 0x82, 0x54, 0xdf, 0xfa, 0x7c, 0x80, 0x56, 0xd9,
0xcb, 0xbb, 0x52, 0x23, 0x3b, 0x4d, 0x67, 0xc5, 0xa9, 0xfa, 0xaf, 0x9c, 0x07, 0xd3, 0x46, 0x8e,
0x72, 0x2f, 0x60, 0xc8, 0x5e, 0x9e, 0x23, 0x4f, 0xcd, 0x6c, 0x9c, 0x8b, 0xcb, 0xec, 0xe4, 0xb4,
0xc5, 0x09, 0x3b, 0x79, 0x6d, 0x33, 0xcf, 0x4e, 0x3e, 0x4e, 0xdb, 0x79, 0x3c, 0xdd, 0x09, 0xd1,
0x17, 0xa6, 0x1c, 0x9d, 0x89, 0x52, 0xed, 0xad, 0xb3, 0x20, 0x5a, 0xf1, 0xd7, 0xd5, 0xef, 0xf7,
0x68, 0xe2, 0xe7, 0x4f, 0x1e, 0xc5, 0xa9, 0x92, 0xe6, 0xac, 0x40, 0x2d, 0xdd, 0xfa, 0x89, 0x0b,
0x75, 0xab, 0x31, 0xa0, 0x0f, 0xec, 0xe2, 0xb4, 0x91, 0x53, 0x76, 0xec, 0x1e, 0x97, 0x9b, 0xd5,
0x73, 0x80, 0x9a, 0xea, 0xe9, 0x19, 0xfd, 0x08, 0xe5, 0x9d, 0xc5, 0x19, 0x54, 0x6a, 0xf4, 0x46,
0x41, 0xb4, 0xb6, 0xfc, 0x24, 0xa7, 0xd5, 0x4c, 0x94, 0xdf, 0x19, 0x69, 0x6e, 0xf9, 0xcd, 0x43,
0x29, 0x0b, 0x6f, 0x3a, 0x97, 0x08, 0xc4, 0x93, 0x05, 0xf9, 0xc7, 0xdc, 0xad, 0xff, 0x05, 0x00,
0x00, 0xff, 0xff, 0xbc, 0x68, 0xf6, 0x08, 0xab, 0x1b, 0x00, 0x00,
var fileDescriptor_tfplugin5_56820f4fb67360c5 = []byte{
// 1876 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x59, 0xcd, 0x6f, 0x23, 0x49,
0x15, 0x9f, 0x76, 0xdb, 0x89, 0xfd, 0x9c, 0x0f, 0xa7, 0x66, 0x76, 0x30, 0xbd, 0xbb, 0x10, 0xcc,
0x47, 0xb2, 0xda, 0x1d, 0xcf, 0x2a, 0x03, 0xbb, 0x4b, 0x18, 0xad, 0xc8, 0x66, 0x42, 0x26, 0x62,
0x26, 0x1b, 0xca, 0xf3, 0x81, 0x84, 0xb4, 0x56, 0x8d, 0xbb, 0xe2, 0x69, 0xc6, 0xee, 0xee, 0xad,
0x2e, 0x67, 0x62, 0x71, 0x44, 0x70, 0xe6, 0xc2, 0x87, 0xc4, 0xc7, 0x85, 0x03, 0xff, 0x00, 0x07,
0xe0, 0xc6, 0x89, 0x7f, 0x80, 0x1b, 0x70, 0x42, 0x70, 0x43, 0x1c, 0xe1, 0x82, 0x84, 0xea, 0xab,
0xbb, 0x6c, 0xb7, 0x93, 0x9e, 0x64, 0x57, 0x88, 0x5b, 0x57, 0xbd, 0x5f, 0xbd, 0xf7, 0xab, 0xf7,
0x5e, 0xbd, 0x57, 0x65, 0xc3, 0x2a, 0x3f, 0x8e, 0x07, 0xa3, 0x7e, 0x10, 0x7e, 0xa9, 0x1d, 0xb3,
0x88, 0x47, 0xa8, 0x96, 0x4e, 0xb4, 0x6e, 0xc3, 0xd2, 0x9d, 0x71, 0x48, 0x86, 0x41, 0xef, 0x11,
0x19, 0x8c, 0x28, 0x6a, 0xc2, 0xe2, 0x30, 0xe9, 0xc7, 0xa4, 0xf7, 0xac, 0xe9, 0xac, 0x3b, 0x9b,
0x4b, 0xd8, 0x0c, 0x11, 0x82, 0xf2, 0xb7, 0x93, 0x28, 0x6c, 0x96, 0xe4, 0xb4, 0xfc, 0x6e, 0xfd,
0xd5, 0x01, 0xb8, 0x13, 0x90, 0x7e, 0x18, 0x25, 0x3c, 0xe8, 0xa1, 0x6d, 0xa8, 0x26, 0xf4, 0x84,
0xb2, 0x80, 0x8f, 0xe5, 0xea, 0x95, 0xad, 0x4f, 0xb5, 0x33, 0xdb, 0x19, 0xb0, 0xdd, 0xd1, 0x28,
0x9c, 0xe2, 0x85, 0xe1, 0x64, 0x34, 0x1c, 0x12, 0x36, 0x96, 0x16, 0x6a, 0xd8, 0x0c, 0xd1, 0x75,
0x58, 0xf0, 0x29, 0x27, 0xc1, 0xa0, 0xe9, 0x4a, 0x81, 0x1e, 0xa1, 0xb7, 0xa0, 0x46, 0x38, 0x67,
0xc1, 0x93, 0x11, 0xa7, 0xcd, 0xf2, 0xba, 0xb3, 0x59, 0xdf, 0x6a, 0x5a, 0xe6, 0x76, 0x8c, 0xec,
0x88, 0xf0, 0xa7, 0x38, 0x83, 0xb6, 0x6e, 0x42, 0xd5, 0xd8, 0x47, 0x75, 0x58, 0x3c, 0x38, 0x7c,
0xb4, 0x73, 0xef, 0xe0, 0x4e, 0xe3, 0x0a, 0xaa, 0x41, 0x65, 0x0f, 0xe3, 0xf7, 0x71, 0xc3, 0x11,
0xf3, 0x8f, 0x77, 0xf0, 0xe1, 0xc1, 0xe1, 0x7e, 0xa3, 0xd4, 0xfa, 0xb3, 0x03, 0xcb, 0x13, 0xda,
0xd0, 0x2d, 0xa8, 0x24, 0x9c, 0xc6, 0x49, 0xd3, 0x59, 0x77, 0x37, 0xeb, 0x5b, 0xaf, 0xce, 0x33,
0xdb, 0xee, 0x70, 0x1a, 0x63, 0x85, 0xf5, 0x7e, 0xe8, 0x40, 0x59, 0x8c, 0xd1, 0x06, 0xac, 0xa4,
0x6c, 0xba, 0x21, 0x19, 0x52, 0xe9, 0xac, 0xda, 0xdd, 0x2b, 0x78, 0x39, 0x9d, 0x3f, 0x24, 0x43,
0x8a, 0xda, 0x80, 0xe8, 0x80, 0x0e, 0x69, 0xc8, 0xbb, 0xcf, 0xe8, 0xb8, 0x9b, 0x70, 0x16, 0x84,
0x7d, 0xe5, 0x9e, 0xbb, 0x57, 0x70, 0x43, 0xcb, 0xbe, 0x4e, 0xc7, 0x1d, 0x29, 0x41, 0x9b, 0xb0,
0x6a, 0xe3, 0x83, 0x90, 0x4b, 0x97, 0xb9, 0x42, 0x73, 0x06, 0x3e, 0x08, 0xf9, 0x7b, 0x20, 0x22,
0x35, 0xa0, 0x3d, 0x1e, 0xb1, 0xd6, 0x2d, 0x41, 0x2b, 0x8a, 0xbd, 0x1a, 0x2c, 0x62, 0xfa, 0xe1,
0x88, 0x26, 0xdc, 0x5b, 0x87, 0x2a, 0xa6, 0x49, 0x1c, 0x85, 0x09, 0x45, 0xd7, 0xa0, 0xb2, 0xc7,
0x58, 0xc4, 0x14, 0x49, 0xac, 0x06, 0xad, 0x1f, 0x39, 0x50, 0xc5, 0xe4, 0x79, 0x87, 0x13, 0x4e,
0xd3, 0xd4, 0x70, 0xb2, 0xd4, 0x40, 0xdb, 0xb0, 0x78, 0x3c, 0x20, 0x7c, 0x48, 0xe2, 0x66, 0x49,
0x3a, 0x69, 0xdd, 0x72, 0x92, 0x59, 0xd9, 0xfe, 0x9a, 0x82, 0xec, 0x85, 0x9c, 0x8d, 0xb1, 0x59,
0xe0, 0x6d, 0xc3, 0x92, 0x2d, 0x40, 0x0d, 0x70, 0x9f, 0xd1, 0xb1, 0x26, 0x20, 0x3e, 0x05, 0xa9,
0x13, 0x91, 0xaf, 0x3a, 0x57, 0xd4, 0x60, 0xbb, 0xf4, 0x8e, 0xd3, 0xfa, 0x7b, 0x05, 0x16, 0x3a,
0xbd, 0xa7, 0x74, 0x48, 0x44, 0x4a, 0x9d, 0x50, 0x96, 0x04, 0x9a, 0x99, 0x8b, 0xcd, 0x10, 0xdd,
0x80, 0xca, 0x93, 0x41, 0xd4, 0x7b, 0x26, 0x97, 0xd7, 0xb7, 0x3e, 0x61, 0x51, 0x53, 0x6b, 0xdb,
0xef, 0x09, 0x31, 0x56, 0x28, 0xef, 0x17, 0x0e, 0x54, 0xe4, 0xc4, 0x19, 0x2a, 0xbf, 0x02, 0x90,
0x06, 0x2f, 0xd1, 0x5b, 0x7e, 0x79, 0x56, 0x6f, 0x9a, 0x1e, 0xd8, 0x82, 0xa3, 0x77, 0xa1, 0x2e,
0x2d, 0x75, 0xf9, 0x38, 0xa6, 0x49, 0xd3, 0x9d, 0xc9, 0x2a, 0xbd, 0xfa, 0x90, 0x26, 0x9c, 0xfa,
0x8a, 0x1b, 0xc8, 0x15, 0x0f, 0xc4, 0x02, 0xef, 0x0f, 0x0e, 0xd4, 0x52, 0xcd, 0x22, 0x1c, 0x59,
0x56, 0x61, 0xf9, 0x2d, 0xe6, 0x84, 0x6e, 0x73, 0x7a, 0xc5, 0x37, 0x5a, 0x87, 0xba, 0x4f, 0x93,
0x1e, 0x0b, 0x62, 0x2e, 0x36, 0xa4, 0x4e, 0x97, 0x3d, 0x85, 0x3c, 0xa8, 0x32, 0xfa, 0xe1, 0x28,
0x60, 0xd4, 0x97, 0x27, 0xac, 0x8a, 0xd3, 0xb1, 0x90, 0x45, 0x12, 0x45, 0x06, 0xcd, 0x8a, 0x92,
0x99, 0xb1, 0x90, 0xf5, 0xa2, 0x61, 0x3c, 0xe2, 0xd4, 0x6f, 0x2e, 0x28, 0x99, 0x19, 0xa3, 0x57,
0xa0, 0x96, 0xd0, 0x30, 0x09, 0x78, 0x70, 0x42, 0x9b, 0x8b, 0x52, 0x98, 0x4d, 0x78, 0xbf, 0x2a,
0x41, 0xdd, 0xda, 0x25, 0x7a, 0x19, 0x6a, 0x82, 0xab, 0x75, 0x4c, 0x70, 0x55, 0x4c, 0xc8, 0xf3,
0xf1, 0x62, 0x61, 0x44, 0xbb, 0xb0, 0x18, 0xd2, 0x84, 0x8b, 0x33, 0xe4, 0xca, 0xea, 0xf4, 0xda,
0x99, 0x1e, 0x96, 0xdf, 0x41, 0xd8, 0xbf, 0x1f, 0xf9, 0x14, 0x9b, 0x95, 0x82, 0xd0, 0x30, 0x08,
0xbb, 0x01, 0xa7, 0xc3, 0x44, 0xfa, 0xc4, 0xc5, 0xd5, 0x61, 0x10, 0x1e, 0x88, 0xb1, 0x14, 0x92,
0x53, 0x2d, 0xac, 0x68, 0x21, 0x39, 0x95, 0xc2, 0xd6, 0x7d, 0xb5, 0x33, 0xad, 0x71, 0xb2, 0xf4,
0x00, 0x2c, 0x74, 0x0e, 0x0e, 0xf7, 0xef, 0xed, 0x35, 0x1c, 0x54, 0x85, 0xf2, 0xbd, 0x83, 0xce,
0x83, 0x46, 0x09, 0x2d, 0x82, 0xdb, 0xd9, 0x7b, 0xd0, 0x70, 0xc5, 0xc7, 0xfd, 0x9d, 0xa3, 0x46,
0x59, 0x94, 0xa8, 0x7d, 0xfc, 0xfe, 0xc3, 0xa3, 0x46, 0xa5, 0xf5, 0x93, 0x32, 0xac, 0xed, 0x53,
0x7e, 0xc4, 0xa2, 0x93, 0xc0, 0xa7, 0x4c, 0xf1, 0xb7, 0x0f, 0xf1, 0xbf, 0x5c, 0xeb, 0x14, 0xdf,
0x80, 0x6a, 0xac, 0x91, 0xd2, 0x8d, 0xf5, 0xad, 0xb5, 0x99, 0xcd, 0xe3, 0x14, 0x82, 0x28, 0x34,
0x18, 0x4d, 0xa2, 0x11, 0xeb, 0xd1, 0x6e, 0x22, 0x85, 0x26, 0xa7, 0xb7, 0xad, 0x65, 0x33, 0xe6,
0xdb, 0xc6, 0x9e, 0xf8, 0x90, 0xab, 0xd5, 0x7c, 0xa2, 0x0e, 0xf8, 0x2a, 0x9b, 0x9c, 0x45, 0x03,
0xb8, 0xea, 0x13, 0x4e, 0xba, 0x53, 0x96, 0x54, 0xfe, 0xdf, 0x2e, 0x66, 0xe9, 0x0e, 0xe1, 0xa4,
0x33, 0x6b, 0x6b, 0xcd, 0x9f, 0x9e, 0x47, 0x6f, 0x43, 0xdd, 0x4f, 0x7b, 0x90, 0x08, 0x9e, 0xb0,
0xf2, 0x52, 0x6e, 0x87, 0xc2, 0x36, 0xd2, 0x7b, 0x08, 0xd7, 0xf2, 0xf6, 0x93, 0x53, 0x97, 0x36,
0xec, 0xba, 0x94, 0xeb, 0xe3, 0xac, 0x54, 0x79, 0x8f, 0xe1, 0x7a, 0x3e, 0xf9, 0x4b, 0x2a, 0x6e,
0xfd, 0xc9, 0x81, 0x97, 0x8e, 0x18, 0x8d, 0x09, 0xa3, 0xc6, 0x6b, 0xbb, 0x51, 0x78, 0x1c, 0xf4,
0xbd, 0xed, 0x34, 0x3d, 0xd0, 0x4d, 0x58, 0xe8, 0xc9, 0x49, 0x9d, 0x0f, 0xf6, 0xe9, 0xb1, 0xaf,
0x04, 0x58, 0xc3, 0xbc, 0xef, 0x39, 0x56, 0x3e, 0x7d, 0x15, 0x56, 0x63, 0x65, 0xc1, 0xef, 0x16,
0x53, 0xb3, 0x62, 0xf0, 0x8a, 0xca, 0x74, 0x34, 0x4a, 0x45, 0xa3, 0xd1, 0xfa, 0x41, 0x09, 0xae,
0x3d, 0x8c, 0xfb, 0x8c, 0xf8, 0x34, 0x8d, 0x8a, 0x68, 0x26, 0x1e, 0xcb, 0x36, 0x77, 0x66, 0xd9,
0xb0, 0x8a, 0x78, 0x69, 0xb2, 0x88, 0xbf, 0x09, 0x35, 0x46, 0x9e, 0x77, 0x13, 0xa1, 0x4e, 0xd6,
0x88, 0xfa, 0xd6, 0xd5, 0x9c, 0xb6, 0x85, 0xab, 0x4c, 0x7f, 0x79, 0xdf, 0xb5, 0x9d, 0xf2, 0x2e,
0xac, 0x8c, 0x14, 0x31, 0x5f, 0xeb, 0x38, 0xc7, 0x27, 0xcb, 0x06, 0xae, 0xfa, 0xe8, 0x85, 0x5d,
0xf2, 0x3b, 0x07, 0xbc, 0x47, 0x64, 0x10, 0xf8, 0x82, 0x9c, 0xf6, 0x89, 0xe8, 0x0c, 0x3a, 0xea,
0x8f, 0x0b, 0x3a, 0x26, 0x4b, 0x89, 0x52, 0xb1, 0x94, 0xd8, 0xb5, 0x36, 0x3f, 0x45, 0xde, 0x29,
0x4c, 0xfe, 0x37, 0x0e, 0x34, 0x0d, 0xf9, 0xec, 0x3c, 0xfc, 0x5f, 0x50, 0xff, 0xad, 0x03, 0x35,
0x45, 0x74, 0xc4, 0xa8, 0xd7, 0xcf, 0xb8, 0xbe, 0x0e, 0x6b, 0x9c, 0x32, 0x46, 0x8e, 0x23, 0x36,
0xec, 0xda, 0x37, 0x86, 0x1a, 0x6e, 0xa4, 0x82, 0x47, 0x3a, 0xeb, 0xfe, 0x37, 0xdc, 0xff, 0xe9,
0xc0, 0x12, 0xa6, 0xc4, 0x37, 0xf9, 0xe2, 0xf9, 0x05, 0x5d, 0x7d, 0x1b, 0x96, 0x7b, 0x23, 0xc6,
0xc4, 0x2d, 0x53, 0x25, 0xf9, 0x39, 0xac, 0x97, 0x34, 0x5a, 0x1d, 0x98, 0xb1, 0xc5, 0xfd, 0x8b,
0x50, 0x0b, 0xe9, 0xf3, 0x62, 0x47, 0xa5, 0x1a, 0xd2, 0xe7, 0x97, 0x3c, 0x25, 0xbf, 0x2e, 0x03,
0x3a, 0x1a, 0x90, 0xd0, 0xec, 0x78, 0xf7, 0x29, 0x09, 0xfb, 0xd4, 0xfb, 0x8f, 0x53, 0x70, 0xe3,
0xef, 0x40, 0x3d, 0x66, 0x41, 0xc4, 0x8a, 0x6d, 0x1b, 0x24, 0x56, 0x51, 0xde, 0x03, 0x14, 0xb3,
0x28, 0x8e, 0x12, 0xea, 0x77, 0xb3, 0x1d, 0xbb, 0x67, 0x2b, 0x68, 0x98, 0x25, 0x87, 0x66, 0xe7,
0x59, 0xa2, 0x94, 0x0b, 0x25, 0x0a, 0xfa, 0x2c, 0x2c, 0x2b, 0xc6, 0x31, 0x0b, 0x4e, 0x84, 0xc9,
0x8a, 0xbc, 0xfe, 0x2d, 0xc9, 0xc9, 0x23, 0x35, 0xe7, 0xfd, 0xbc, 0x64, 0x85, 0xe4, 0x36, 0x2c,
0xc7, 0x03, 0x12, 0x86, 0x45, 0x2b, 0xd8, 0x92, 0x46, 0x2b, 0x82, 0xbb, 0xe2, 0xda, 0x20, 0xef,
0x87, 0x49, 0x97, 0xd1, 0x78, 0x40, 0x7a, 0x54, 0xc7, 0x67, 0xfe, 0xcb, 0x6c, 0xd5, 0xac, 0xc0,
0x6a, 0x01, 0xda, 0x80, 0x55, 0x43, 0xc1, 0xd0, 0x76, 0x25, 0xed, 0x15, 0x3d, 0xad, 0x89, 0x5f,
0xb8, 0x9f, 0xa3, 0x37, 0x00, 0x0d, 0x68, 0x9f, 0xf4, 0xc6, 0xf2, 0xbe, 0xdd, 0x4d, 0xc6, 0x09,
0xa7, 0x43, 0x7d, 0x89, 0x6d, 0x28, 0x89, 0xa8, 0x9e, 0x1d, 0x39, 0xdf, 0xfa, 0xa3, 0x0b, 0x57,
0x77, 0xe2, 0x78, 0x30, 0x9e, 0xca, 0x9b, 0x7f, 0x7f, 0xfc, 0x79, 0x33, 0x13, 0x0d, 0xf7, 0x45,
0xa2, 0xf1, 0xc2, 0xe9, 0x92, 0xe3, 0xf9, 0x4a, 0x9e, 0xe7, 0xbd, 0xdf, 0x3b, 0x97, 0x3e, 0xc5,
0x4d, 0x58, 0x34, 0x36, 0xd4, 0x9b, 0xc4, 0x0c, 0xa7, 0xc3, 0xea, 0x5e, 0x32, 0xac, 0xe5, 0x39,
0x61, 0xfd, 0x47, 0x09, 0xae, 0x1e, 0x0c, 0xe3, 0x88, 0xf1, 0xc9, 0x5b, 0xc4, 0x5b, 0x05, 0xa3,
0xba, 0x02, 0xa5, 0xc0, 0xd7, 0xef, 0xcf, 0x52, 0xe0, 0x7b, 0xa7, 0xd0, 0x50, 0xea, 0x68, 0x5a,
0x52, 0xcf, 0x7d, 0xbd, 0x14, 0x4a, 0x08, 0x85, 0xb2, 0x1d, 0xe6, 0x4e, 0x38, 0xcc, 0xfb, 0xa5,
0x1d, 0x8d, 0x0f, 0x00, 0x05, 0x9a, 0x46, 0xd7, 0x5c, 0xb7, 0x4d, 0x5b, 0xb8, 0x69, 0x99, 0xc8,
0xd9, 0x7a, 0x7b, 0x9a, 0x3f, 0x5e, 0x0b, 0xa6, 0x66, 0x92, 0x8b, 0x57, 0xdf, 0xbf, 0x38, 0xb0,
0x22, 0xfa, 0x4d, 0xd6, 0xe2, 0x3f, 0xbe, 0xe6, 0xce, 0x26, 0x5e, 0x3e, 0x95, 0x42, 0xa9, 0xa9,
0xdd, 0x7c, 0xe1, 0xfd, 0xfd, 0xd4, 0x81, 0x6b, 0xe6, 0x99, 0x22, 0xda, 0x7a, 0xde, 0x93, 0xec,
0xd4, 0xe2, 0x75, 0x4b, 0x54, 0x85, 0x14, 0x3b, 0xff, 0x51, 0x66, 0xa3, 0x2e, 0xce, 0xee, 0x67,
0x0e, 0x7c, 0xd2, 0x5c, 0xb2, 0x2c, 0x8a, 0x1f, 0xc1, 0xb3, 0xe0, 0x23, 0xb9, 0x8c, 0xfc, 0xcd,
0x81, 0xb5, 0x94, 0x56, 0x7a, 0x23, 0x49, 0x2e, 0x4e, 0x0b, 0xbd, 0x0d, 0xd0, 0x8b, 0xc2, 0x90,
0xf6, 0xb8, 0xb9, 0xe7, 0x9f, 0x55, 0x73, 0x33, 0xa8, 0xf7, 0x2d, 0x6b, 0x3f, 0xd7, 0x61, 0x21,
0x1a, 0xf1, 0x78, 0xc4, 0x75, 0x4a, 0xea, 0xd1, 0x85, 0xc3, 0xb0, 0xf5, 0xe3, 0x1a, 0x54, 0xcd,
0x93, 0x0c, 0x7d, 0x13, 0x6a, 0xfb, 0x94, 0xeb, 0x1f, 0xab, 0x3e, 0x77, 0xce, 0x6b, 0x57, 0x25,
0xd0, 0xe7, 0x0b, 0xbd, 0x89, 0xd1, 0x60, 0xce, 0xfb, 0x0f, 0x6d, 0x5a, 0xeb, 0x73, 0x11, 0xa9,
0xa5, 0xd7, 0x0a, 0x20, 0xb5, 0xb5, 0xef, 0x9c, 0xf5, 0xf8, 0x40, 0x37, 0x2c, 0x45, 0xf3, 0x61,
0xa9, 0xdd, 0x76, 0x51, 0xb8, 0x36, 0x3e, 0x9a, 0xff, 0x78, 0x40, 0xaf, 0xe7, 0xe8, 0x9a, 0x06,
0xa5, 0x86, 0xdf, 0x28, 0x06, 0xd6, 0x66, 0x83, 0xfc, 0x37, 0x28, 0xda, 0xb0, 0xb4, 0xe4, 0x01,
0x52, 0x73, 0x9b, 0xe7, 0x03, 0xb5, 0xa9, 0xbb, 0xd6, 0x1b, 0x03, 0xbd, 0x62, 0x2d, 0x4b, 0x67,
0x53, 0xa5, 0xaf, 0xce, 0x91, 0x6a, 0x4d, 0xdf, 0x98, 0xbc, 0xf1, 0xa3, 0x4f, 0xdb, 0x6f, 0x5b,
0x4b, 0x90, 0xea, 0x5b, 0x9f, 0x0f, 0xd0, 0x2a, 0x7b, 0x79, 0x57, 0x6a, 0x64, 0xa7, 0xe9, 0xac,
0x38, 0x55, 0xff, 0x85, 0xf3, 0x60, 0xda, 0xc8, 0x71, 0xee, 0x05, 0x0c, 0xd9, 0xcb, 0x73, 0xe4,
0xa9, 0x99, 0x8d, 0x73, 0x71, 0x99, 0x9d, 0x9c, 0xb6, 0x38, 0x61, 0x27, 0xaf, 0x6d, 0xe6, 0xd9,
0xc9, 0xc7, 0x69, 0x3b, 0x8f, 0xa7, 0x3b, 0x21, 0xfa, 0xcc, 0x94, 0xa3, 0x33, 0x51, 0xaa, 0xbd,
0x75, 0x16, 0x44, 0x2b, 0xfe, 0xb2, 0xfa, 0x29, 0x1f, 0x4d, 0xfc, 0x12, 0xca, 0xa3, 0x38, 0x55,
0xd2, 0x9c, 0x15, 0xa8, 0xa5, 0x5b, 0xdf, 0x77, 0xa1, 0x6e, 0x35, 0x06, 0xf4, 0x81, 0x5d, 0x9c,
0x36, 0x72, 0xca, 0x8e, 0xdd, 0xe3, 0x72, 0xb3, 0x7a, 0x0e, 0x50, 0x53, 0x3d, 0x3d, 0xa3, 0x1f,
0xa1, 0xbc, 0xb3, 0x38, 0x83, 0x4a, 0x8d, 0xde, 0x28, 0x88, 0xd6, 0x96, 0x9f, 0xe4, 0xb4, 0x9a,
0x89, 0xf2, 0x3b, 0x23, 0xcd, 0x2d, 0xbf, 0x79, 0x28, 0x65, 0xe1, 0x4d, 0xe7, 0x12, 0x81, 0x78,
0xb2, 0x20, 0xff, 0xa3, 0xbb, 0xf5, 0xdf, 0x00, 0x00, 0x00, 0xff, 0xff, 0xc8, 0x16, 0x0b, 0x32,
0xb6, 0x1b, 0x00, 0x00,
}

View File

@ -95,6 +95,7 @@ message Schema {
LIST = 2;
SET = 3;
MAP = 4;
GROUP = 5;
}
string type_name = 1;

View File

@ -1,8 +1,6 @@
package objchange
import (
"fmt"
"github.com/hashicorp/terraform/configs/configschema"
"github.com/zclconf/go-cty/cty"
)
@ -14,55 +12,7 @@ import (
// This simulates what would result from decoding an empty configuration block
// with the given schema, except that it does not produce errors
func AllAttributesNull(schema *configschema.Block) cty.Value {
vals := make(map[string]cty.Value)
ty := schema.ImpliedType()
for name := range schema.Attributes {
aty := ty.AttributeType(name)
vals[name] = cty.NullVal(aty)
}
for name, blockS := range schema.BlockTypes {
aty := ty.AttributeType(name)
switch blockS.Nesting {
case configschema.NestingSingle:
// NestingSingle behaves like an object attribute, which decodes
// as null when it's not present in configuration.
vals[name] = cty.NullVal(aty)
default:
// All other nesting types decode as "empty" when not present, but
// empty values take different forms depending on the type.
switch {
case aty.IsListType():
vals[name] = cty.ListValEmpty(aty.ElementType())
case aty.IsSetType():
vals[name] = cty.SetValEmpty(aty.ElementType())
case aty.IsMapType():
vals[name] = cty.MapValEmpty(aty.ElementType())
case aty.Equals(cty.DynamicPseudoType):
// We use DynamicPseudoType in situations where there's a
// nested attribute of DynamicPseudoType, since the schema
// system cannot predict the final type until it knows exactly
// how many elements there will be. However, since we're
// trying to behave as if there are _no_ elements, we know
// we're producing either an empty tuple or empty object
// and just need to distinguish these two cases.
switch blockS.Nesting {
case configschema.NestingList:
vals[name] = cty.EmptyTupleVal
case configschema.NestingMap:
vals[name] = cty.EmptyObjectVal
}
}
}
// By the time we get down here we should always have set a value.
// If not, that suggests a missing case in the above switches.
if _, ok := vals[name]; !ok {
panic(fmt.Sprintf("failed to create empty value for nested block %q", name))
}
}
return cty.ObjectVal(vals)
// "All attributes null" happens to be the definition of EmptyValue for
// a Block, so we can just delegate to that.
return schema.EmptyValue()
}

View File

@ -67,7 +67,7 @@ func assertObjectCompatible(schema *configschema.Block, planned, actual cty.Valu
// expression is itself unknown and thus it cannot predict how many
// child blocks will get created.
switch blockS.Nesting {
case configschema.NestingSingle:
case configschema.NestingSingle, configschema.NestingGroup:
if allLeafValuesUnknown(plannedV) && !plannedV.IsNull() {
return errs
}
@ -84,7 +84,7 @@ func assertObjectCompatible(schema *configschema.Block, planned, actual cty.Valu
path := append(path, cty.GetAttrStep{Name: name})
switch blockS.Nesting {
case configschema.NestingSingle:
case configschema.NestingSingle, configschema.NestingGroup:
moreErrs := assertObjectCompatible(&blockS.Block, plannedV, actualV, path)
errs = append(errs, moreErrs...)
case configschema.NestingList:

View File

@ -45,9 +45,13 @@ func NormalizeObjectFromLegacySDK(val cty.Value, schema *configschema.Block) cty
}
switch blockS.Nesting {
case configschema.NestingSingle:
case configschema.NestingSingle, configschema.NestingGroup:
if lv.IsKnown() {
vals[name] = NormalizeObjectFromLegacySDK(lv, &blockS.Block)
if lv.IsNull() && blockS.Nesting == configschema.NestingGroup {
vals[name] = blockS.EmptyValue()
} else {
vals[name] = NormalizeObjectFromLegacySDK(lv, &blockS.Block)
}
} else {
vals[name] = unknownBlockStub(&blockS.Block)
}
@ -105,7 +109,7 @@ func unknownBlockStub(schema *configschema.Block) cty.Value {
}
for name, blockS := range schema.BlockTypes {
switch blockS.Nesting {
case configschema.NestingSingle:
case configschema.NestingSingle, configschema.NestingGroup:
vals[name] = unknownBlockStub(&blockS.Block)
case configschema.NestingList:
// In principle we may be expected to produce a tuple value here,

View File

@ -121,7 +121,7 @@ func proposedNewObject(schema *configschema.Block, prior, config cty.Value) cty.
var newV cty.Value
switch blockType.Nesting {
case configschema.NestingSingle:
case configschema.NestingSingle, configschema.NestingGroup:
newV = ProposedNewObject(&blockType.Block, priorV, configV)
case configschema.NestingList:
@ -335,7 +335,7 @@ func setElementCompareValue(schema *configschema.Block, v cty.Value, isConfig bo
for name, blockType := range schema.BlockTypes {
switch blockType.Nesting {
case configschema.NestingSingle:
case configschema.NestingSingle, configschema.NestingGroup:
attrs[name] = setElementCompareValue(&blockType.Block, v.GetAttr(name), isConfig)
case configschema.NestingList, configschema.NestingSet:

View File

@ -83,7 +83,7 @@ func assertPlanValid(schema *configschema.Block, priorState, config, plannedStat
}
switch blockS.Nesting {
case configschema.NestingSingle:
case configschema.NestingSingle, configschema.NestingGroup:
moreErrs := assertPlanValid(&blockS.Block, priorV, configV, plannedV, path)
errs = append(errs, moreErrs...)
case configschema.NestingList:

View File

@ -45,10 +45,25 @@ func ConfigSchemaToProto(b *configschema.Block) *proto.Schema_Block {
}
func protoSchemaNestedBlock(name string, b *configschema.NestedBlock) *proto.Schema_NestedBlock {
var nesting proto.Schema_NestedBlock_NestingMode
switch b.Nesting {
case configschema.NestingSingle:
nesting = proto.Schema_NestedBlock_SINGLE
case configschema.NestingGroup:
nesting = proto.Schema_NestedBlock_GROUP
case configschema.NestingList:
nesting = proto.Schema_NestedBlock_LIST
case configschema.NestingSet:
nesting = proto.Schema_NestedBlock_SET
case configschema.NestingMap:
nesting = proto.Schema_NestedBlock_MAP
default:
nesting = proto.Schema_NestedBlock_INVALID
}
return &proto.Schema_NestedBlock{
TypeName: name,
Block: ConfigSchemaToProto(&b.Block),
Nesting: proto.Schema_NestedBlock_NestingMode(b.Nesting),
Nesting: nesting,
MinItems: int64(b.MinItems),
MaxItems: int64(b.MaxItems),
}
@ -94,8 +109,25 @@ func ProtoToConfigSchema(b *proto.Schema_Block) *configschema.Block {
}
func schemaNestedBlock(b *proto.Schema_NestedBlock) *configschema.NestedBlock {
var nesting configschema.NestingMode
switch b.Nesting {
case proto.Schema_NestedBlock_SINGLE:
nesting = configschema.NestingSingle
case proto.Schema_NestedBlock_GROUP:
nesting = configschema.NestingGroup
case proto.Schema_NestedBlock_LIST:
nesting = configschema.NestingList
case proto.Schema_NestedBlock_MAP:
nesting = configschema.NestingMap
case proto.Schema_NestedBlock_SET:
nesting = configschema.NestingSet
default:
// In all other cases we'll leave it as the zero value (invalid) and
// let the caller validate it and deal with this.
}
nb := &configschema.NestedBlock{
Nesting: configschema.NestingMode(b.Nesting),
Nesting: nesting,
MinItems: int(b.MinItems),
MaxItems: int(b.MaxItems),
}

View File

@ -1759,6 +1759,80 @@ func TestContext2Plan_computed(t *testing.T) {
}
}
func TestContext2Plan_blockNestingGroup(t *testing.T) {
m := testModule(t, "plan-block-nesting-group")
p := testProvider("test")
p.GetSchemaReturn = &ProviderSchema{
ResourceTypes: map[string]*configschema.Block{
"test": {
BlockTypes: map[string]*configschema.NestedBlock{
"blah": {
Nesting: configschema.NestingGroup,
Block: configschema.Block{
Attributes: map[string]*configschema.Attribute{
"baz": {Type: cty.String, Required: true},
},
},
},
},
},
},
}
p.PlanResourceChangeFn = func(req providers.PlanResourceChangeRequest) providers.PlanResourceChangeResponse {
return providers.PlanResourceChangeResponse{
PlannedState: req.ProposedNewState,
}
}
ctx := testContext2(t, &ContextOpts{
Config: m,
ProviderResolver: providers.ResolverFixed(
map[string]providers.Factory{
"test": testProviderFuncFixed(p),
},
),
})
plan, diags := ctx.Plan()
if diags.HasErrors() {
t.Fatalf("unexpected errors: %s", diags.Err())
}
if got, want := 1, len(plan.Changes.Resources); got != want {
t.Fatalf("wrong number of planned resource changes %d; want %d\n%s", got, want, spew.Sdump(plan.Changes.Resources))
}
if !p.PlanResourceChangeCalled {
t.Fatalf("PlanResourceChange was not called at all")
}
got := p.PlanResourceChangeRequest
want := providers.PlanResourceChangeRequest{
TypeName: "test",
// Because block type "blah" is defined as NestingGroup, we get a non-null
// value for it with null nested attributes, rather than the "blah" object
// itself being null, when there's no "blah" block in the config at all.
//
// This represents the situation where the remote service _always_ creates
// a single "blah", regardless of whether the block is present, but when
// the block _is_ present the user can override some aspects of it. The
// absense of the block means "use the defaults", in that case.
Config: cty.ObjectVal(map[string]cty.Value{
"blah": cty.ObjectVal(map[string]cty.Value{
"baz": cty.NullVal(cty.String),
}),
}),
ProposedNewState: cty.ObjectVal(map[string]cty.Value{
"blah": cty.ObjectVal(map[string]cty.Value{
"baz": cty.NullVal(cty.String),
}),
}),
}
if !cmp.Equal(got, want, valueTrans) {
t.Errorf("wrong PlanResourceChange request\n%s", cmp.Diff(got, want, valueTrans))
}
}
func TestContext2Plan_computedDataResource(t *testing.T) {
m := testModule(t, "plan-computed-data-resource")
p := testProvider("aws")

View File

@ -281,7 +281,7 @@ func newResourceConfigShimmedComputedKeys(obj cty.Value, schema *configschema.Bl
}
switch blockS.Nesting {
case configschema.NestingSingle:
case configschema.NestingSingle, configschema.NestingGroup:
keys := newResourceConfigShimmedComputedKeys(blockVal, &blockS.Block, fmt.Sprintf("%s%s.", prefix, typeName))
ret = append(ret, keys...)
case configschema.NestingList, configschema.NestingSet:

View File

@ -0,0 +1,2 @@
resource "test" "foo" {
}