From f78d3862c6964ece7192ad8f7c9e3656ce631735 Mon Sep 17 00:00:00 2001 From: Paddy Carver Date: Thu, 22 Aug 2019 18:05:07 -0700 Subject: [PATCH] First implementation of module attribution. A pass at implementing module attribution ("provider_meta blocks in the terraform block", whatever, it's for module attribution). The general idea is that we're adding a new ProviderMeta struct to our configs package, which is then added to Files, Modules, and parsed as part of the terraform block. The configs.Config type then makes that available to the terraform.ProviderTransformer type, which is already scoped by module. It picks out the ProviderMeta for the provider we need in its Transform method, and checks to see if the node it's working on implements the terraform.GraphNodeAttachProviderMetaConfigs interface, which is a new interface we're adding. It has only one method: AttachProviderMetaConfigs, which is passed a *configs.ProviderMeta. We implement this on the terraform.NodeAbstractResource type, storing the passed *configs.ProviderMeta in a new property on that struct. That struct is eventually made available to the terraform.NodeApplyableResourceInstance type, and its method evalTreeManagedResources, which creates an EvalApply type. The EvalApply type gets a ProviderMeta type, which is set to the *configs.ProviderMeta obtained from the terraform.NodeAbstractResource available to it. This means that EvalApply now has the raw config values the user entered for the provider_meta block, but we also need a schema; providers can define their own schema for the provider_meta block, and we need that schema to know how to translate what is in the config into a cty.Value, which is what we eventually want here. Fortunately, EvalApply already has access to the provider's schema; we can augment the GetSchema RPC call to pass back the ProviderMeta schema (added to helper/schema.Provider) in addition to resource, data source, and provider schemas. This makes it available, eventually, to EvalApply. Now that EvalApply has both the config values and the schema, we can parse them into a cty.Value. Finally, we augment the ApplyResourceChange RPC call with a ProviderMeta field, which can be populated by EvalApply with the parsed cty.Value, which successfully makes the config values available to the provider. This still needs tests written for it to ensure it works, but no current tests are broken on it and it compiles, which is reassuring. --- command/testdata/plan/terraform.tfstate | 0 configs/module.go | 14 + configs/parser_config.go | 10 + configs/provider_meta.go | 22 + docs/plugin-protocol/tfplugin5.2.proto | 355 +++++++++++++++ go.sum | 44 +- helper/plugin/grpc_provider.go | 8 + helper/schema/provider.go | 10 +- internal/tfplugin5/tfplugin5.pb.go | 413 +++++++++--------- internal/tfplugin5/tfplugin5.proto | 2 +- plans/internal/planproto/planfile.pb.go | 270 ++++-------- plugin/grpc_provider.go | 22 + providers/provider.go | 9 + terraform/eval_apply.go | 25 +- terraform/node_resource_abstract.go | 31 +- terraform/node_resource_apply_instance.go | 1 + terraform/schemas.go | 1 + .../transform_attach_config_provider_meta.go | 14 + terraform/transform_provider.go | 20 + vendor/modules.txt | 8 +- 20 files changed, 830 insertions(+), 449 deletions(-) create mode 100644 command/testdata/plan/terraform.tfstate create mode 100644 configs/provider_meta.go create mode 100644 docs/plugin-protocol/tfplugin5.2.proto create mode 100644 terraform/transform_attach_config_provider_meta.go diff --git a/command/testdata/plan/terraform.tfstate b/command/testdata/plan/terraform.tfstate new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/configs/module.go b/configs/module.go index 250f9d3451c4..6f15a34d03fa 100644 --- a/configs/module.go +++ b/configs/module.go @@ -28,6 +28,7 @@ type Module struct { Backend *Backend ProviderConfigs map[string]*Provider ProviderRequirements map[string][]VersionConstraint + ProviderMetas map[string]*ProviderMeta Variables map[string]*Variable Locals map[string]*Local @@ -56,6 +57,7 @@ type File struct { Backends []*Backend ProviderConfigs []*Provider ProviderRequirements []*ProviderRequirement + ProviderMetas []*ProviderMeta Variables []*Variable Locals []*Local @@ -164,6 +166,18 @@ func (m *Module) appendFile(file *File) hcl.Diagnostics { m.ProviderRequirements[reqd.Name] = append(m.ProviderRequirements[reqd.Name], reqd.Requirement) } + for _, pm := range file.ProviderMetas { + if existing, exists := m.ProviderMetas[pm.Provider]; exists { + diags = append(diags, &hcl.Diagnostic{ + Severity: hcl.DiagError, + Summary: "Duplicate provider_meta block", + Detail: fmt.Sprintf("A provider_meta block for provider %q was already declared at %s. Providers may only have one provider_meta block per module.", existing.Provider, existing.DeclRange), + Subject: &pm.DeclRange, + }) + } + m.ProviderMetas[pm.Provider] = pm + } + for _, v := range file.Variables { if existing, exists := m.Variables[v.Name]; exists { diags = append(diags, &hcl.Diagnostic{ diff --git a/configs/parser_config.go b/configs/parser_config.go index 7f2ff271420d..13454f96c770 100644 --- a/configs/parser_config.go +++ b/configs/parser_config.go @@ -69,6 +69,12 @@ func (p *Parser) loadConfigFile(path string, override bool) (*File, hcl.Diagnost reqs, reqsDiags := decodeRequiredProvidersBlock(innerBlock) diags = append(diags, reqsDiags...) file.ProviderRequirements = append(file.ProviderRequirements, reqs...) + case "provider_meta": + providerCfg, cfgDiags := decodeProviderMetaBlock(innerBlock) + diags = append(diags, cfgDiags...) + if providerCfg != nil { + file.ProviderMetas = append(file.ProviderMetas, providerCfg) + } default: // Should never happen because the above cases should be exhaustive @@ -225,6 +231,10 @@ var terraformBlockSchema = &hcl.BodySchema{ { Type: "required_providers", }, + { + Type: "provider_meta", + LabelNames: []string{"provider"}, + }, }, } diff --git a/configs/provider_meta.go b/configs/provider_meta.go new file mode 100644 index 000000000000..e39c5630feb3 --- /dev/null +++ b/configs/provider_meta.go @@ -0,0 +1,22 @@ +package configs + +import "github.com/hashicorp/hcl2/hcl" + +// ProviderMeta represents a "provider_meta" block inside a "terraform" block +// in a module or file. +type ProviderMeta struct { + Provider string + Config hcl.Body + + ProviderRange hcl.Range + DeclRange hcl.Range +} + +func decodeProviderMetaBlock(block *hcl.Block) (*ProviderMeta, hcl.Diagnostics) { + return &ProviderMeta{ + Provider: block.Labels[0], + ProviderRange: block.LabelRanges[0], + Config: block.Body, + DeclRange: block.DefRange, + }, nil +} diff --git a/docs/plugin-protocol/tfplugin5.2.proto b/docs/plugin-protocol/tfplugin5.2.proto new file mode 100644 index 000000000000..f13603d8b1ef --- /dev/null +++ b/docs/plugin-protocol/tfplugin5.2.proto @@ -0,0 +1,355 @@ +// Terraform Plugin RPC protocol version 5.2 +// +// This file defines version 5.2 of the RPC protocol. To implement a plugin +// against this protocol, copy this definition into your own codebase and +// use protoc to generate stubs for your target language. +// +// This file will not be updated. Any minor versions of protocol 5 to follow +// should copy this file and modify the copy while maintaing backwards +// compatibility. Breaking changes, if any are required, will come +// in a subsequent major version with its own separate proto definition. +// +// Note that only the proto files included in a release tag of Terraform are +// official protocol releases. Proto files taken from other commits may include +// incomplete changes or features that did not make it into a final release. +// In all reasonable cases, plugin developers should take the proto file from +// the tag of the most recent release of Terraform, and not from the master +// branch or any other development branch. +// +syntax = "proto3"; + +package tfplugin5; + +// DynamicValue is an opaque encoding of terraform data, with the field name +// indicating the encoding scheme used. +message DynamicValue { + bytes msgpack = 1; + bytes json = 2; +} + +message Diagnostic { + enum Severity { + INVALID = 0; + ERROR = 1; + WARNING = 2; + } + Severity severity = 1; + string summary = 2; + string detail = 3; + AttributePath attribute = 4; +} + +message AttributePath { + message Step { + oneof selector { + // Set "attribute_name" to represent looking up an attribute + // in the current object value. + string attribute_name = 1; + // Set "element_key_*" to represent looking up an element in + // an indexable collection type. + string element_key_string = 2; + int64 element_key_int = 3; + } + } + repeated Step steps = 1; +} + +message Stop { + message Request { + } + message Response { + string Error = 1; + } +} + +// RawState holds the stored state for a resource to be upgraded by the +// provider. It can be in one of two formats, the current json encoded format +// in bytes, or the legacy flatmap format as a map of strings. +message RawState { + bytes json = 1; + map flatmap = 2; +} + +// Schema is the configuration schema for a Resource, Provider, or Provisioner. +message Schema { + message Block { + int64 version = 1; + repeated Attribute attributes = 2; + repeated NestedBlock block_types = 3; + } + + message Attribute { + string name = 1; + bytes type = 2; + string description = 3; + bool required = 4; + bool optional = 5; + bool computed = 6; + bool sensitive = 7; + } + + message NestedBlock { + enum NestingMode { + INVALID = 0; + SINGLE = 1; + LIST = 2; + SET = 3; + MAP = 4; + GROUP = 5; + } + + string type_name = 1; + Block block = 2; + NestingMode nesting = 3; + int64 min_items = 4; + int64 max_items = 5; + } + + // The version of the schema. + // Schemas are versioned, so that providers can upgrade a saved resource + // state when the schema is changed. + int64 version = 1; + + // Block is the top level configuration block for this schema. + Block block = 2; +} + +service Provider { + //////// Information about what a provider supports/expects + rpc GetSchema(GetProviderSchema.Request) returns (GetProviderSchema.Response); + rpc PrepareProviderConfig(PrepareProviderConfig.Request) returns (PrepareProviderConfig.Response); + rpc ValidateResourceTypeConfig(ValidateResourceTypeConfig.Request) returns (ValidateResourceTypeConfig.Response); + rpc ValidateDataSourceConfig(ValidateDataSourceConfig.Request) returns (ValidateDataSourceConfig.Response); + rpc UpgradeResourceState(UpgradeResourceState.Request) returns (UpgradeResourceState.Response); + + //////// One-time initialization, called before other functions below + rpc Configure(Configure.Request) returns (Configure.Response); + + //////// Managed Resource Lifecycle + rpc ReadResource(ReadResource.Request) returns (ReadResource.Response); + rpc PlanResourceChange(PlanResourceChange.Request) returns (PlanResourceChange.Response); + rpc ApplyResourceChange(ApplyResourceChange.Request) returns (ApplyResourceChange.Response); + rpc ImportResourceState(ImportResourceState.Request) returns (ImportResourceState.Response); + + rpc ReadDataSource(ReadDataSource.Request) returns (ReadDataSource.Response); + + //////// Graceful Shutdown + rpc Stop(Stop.Request) returns (Stop.Response); +} + +message GetProviderSchema { + message Request { + } + message Response { + Schema provider = 1; + map resource_schemas = 2; + map data_source_schemas = 3; + repeated Diagnostic diagnostics = 4; + Schema provider_meta = 5; + } +} + +message PrepareProviderConfig { + message Request { + DynamicValue config = 1; + } + message Response { + DynamicValue prepared_config = 1; + repeated Diagnostic diagnostics = 2; + } +} + +message UpgradeResourceState { + message Request { + string type_name = 1; + + // version is the schema_version number recorded in the state file + int64 version = 2; + + // raw_state is the raw states as stored for the resource. Core does + // not have access to the schema of prior_version, so it's the + // provider's responsibility to interpret this value using the + // appropriate older schema. The raw_state will be the json encoded + // state, or a legacy flat-mapped format. + RawState raw_state = 3; + } + message Response { + // new_state is a msgpack-encoded data structure that, when interpreted with + // the _current_ schema for this resource type, is functionally equivalent to + // that which was given in prior_state_raw. + DynamicValue upgraded_state = 1; + + // diagnostics describes any errors encountered during migration that could not + // be safely resolved, and warnings about any possibly-risky assumptions made + // in the upgrade process. + repeated Diagnostic diagnostics = 2; + } +} + +message ValidateResourceTypeConfig { + message Request { + string type_name = 1; + DynamicValue config = 2; + } + message Response { + repeated Diagnostic diagnostics = 1; + } +} + +message ValidateDataSourceConfig { + message Request { + string type_name = 1; + DynamicValue config = 2; + } + message Response { + repeated Diagnostic diagnostics = 1; + } +} + +message Configure { + message Request { + string terraform_version = 1; + DynamicValue config = 2; + } + message Response { + repeated Diagnostic diagnostics = 1; + } +} + +message ReadResource { + message Request { + string type_name = 1; + DynamicValue current_state = 2; + bytes private = 3; + } + message Response { + DynamicValue new_state = 1; + repeated Diagnostic diagnostics = 2; + bytes private = 3; + } +} + +message PlanResourceChange { + message Request { + string type_name = 1; + DynamicValue prior_state = 2; + DynamicValue proposed_new_state = 3; + DynamicValue config = 4; + bytes prior_private = 5; + } + + message Response { + DynamicValue planned_state = 1; + repeated AttributePath requires_replace = 2; + bytes planned_private = 3; + repeated Diagnostic diagnostics = 4; + + + // This may be set only by the helper/schema "SDK" in the main Terraform + // repository, to request that Terraform Core >=0.12 permit additional + // inconsistencies that can result from the legacy SDK type system + // and its imprecise mapping to the >=0.12 type system. + // The change in behavior implied by this flag makes sense only for the + // specific details of the legacy SDK type system, and are not a general + // mechanism to avoid proper type handling in providers. + // + // ==== DO NOT USE THIS ==== + // ==== THIS MUST BE LEFT UNSET IN ALL OTHER SDKS ==== + // ==== DO NOT USE THIS ==== + bool legacy_type_system = 5; + } +} + +message ApplyResourceChange { + message Request { + string type_name = 1; + DynamicValue prior_state = 2; + DynamicValue planned_state = 3; + DynamicValue config = 4; + bytes planned_private = 5; + DynamicValue provider_meta = 6; + } + message Response { + DynamicValue new_state = 1; + bytes private = 2; + repeated Diagnostic diagnostics = 3; + + // This may be set only by the helper/schema "SDK" in the main Terraform + // repository, to request that Terraform Core >=0.12 permit additional + // inconsistencies that can result from the legacy SDK type system + // and its imprecise mapping to the >=0.12 type system. + // The change in behavior implied by this flag makes sense only for the + // specific details of the legacy SDK type system, and are not a general + // mechanism to avoid proper type handling in providers. + // + // ==== DO NOT USE THIS ==== + // ==== THIS MUST BE LEFT UNSET IN ALL OTHER SDKS ==== + // ==== DO NOT USE THIS ==== + bool legacy_type_system = 4; + } +} + +message ImportResourceState { + message Request { + string type_name = 1; + string id = 2; + } + + message ImportedResource { + string type_name = 1; + DynamicValue state = 2; + bytes private = 3; + } + + message Response { + repeated ImportedResource imported_resources = 1; + repeated Diagnostic diagnostics = 2; + } +} + +message ReadDataSource { + message Request { + string type_name = 1; + DynamicValue config = 2; + } + message Response { + DynamicValue state = 1; + repeated Diagnostic diagnostics = 2; + } +} + +service Provisioner { + rpc GetSchema(GetProvisionerSchema.Request) returns (GetProvisionerSchema.Response); + rpc ValidateProvisionerConfig(ValidateProvisionerConfig.Request) returns (ValidateProvisionerConfig.Response); + rpc ProvisionResource(ProvisionResource.Request) returns (stream ProvisionResource.Response); + rpc Stop(Stop.Request) returns (Stop.Response); +} + +message GetProvisionerSchema { + message Request { + } + message Response { + Schema provisioner = 1; + repeated Diagnostic diagnostics = 2; + } +} + +message ValidateProvisionerConfig { + message Request { + DynamicValue config = 1; + } + message Response { + repeated Diagnostic diagnostics = 1; + } +} + +message ProvisionResource { + message Request { + DynamicValue config = 1; + DynamicValue connection = 2; + } + message Response { + string output = 1; + repeated Diagnostic diagnostics = 2; + } +} diff --git a/go.sum b/go.sum index 1d357b1ab62d..03347c1849c7 100644 --- a/go.sum +++ b/go.sum @@ -1,4 +1,3 @@ -cloud.google.com/go v0.26.0 h1:e0WKqKTd5BnrG8aKH3J3h+QvEIQtSUcf2n5UZ5ZgLtQ= cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.31.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= @@ -24,7 +23,6 @@ github.com/Unknwon/com v0.0.0-20151008135407-28b053d5a292 h1:tuQ7w+my8a8mkwN7x2T github.com/Unknwon/com v0.0.0-20151008135407-28b053d5a292/go.mod h1:KYCjqMOeHpNuTOiFQU6WEcTG7poCJrUs0YgyHNtn1no= github.com/abdullin/seq v0.0.0-20160510034733-d5467c17e7af h1:DBNMBMuMiWYu0b+8KMJuWmfCkcxl09JwdlqwDZZ6U14= github.com/abdullin/seq v0.0.0-20160510034733-d5467c17e7af/go.mod h1:5Jv4cbFiHJMsVxt52+i0Ha45fjshj6wxYr1r19tB9bw= -github.com/agext/levenshtein v1.2.1 h1:QmvMAjj2aEICytGiWzmxoE0x2KZvE0fvmqMOfy2tjT8= github.com/agext/levenshtein v1.2.1/go.mod h1:JEDfjyjHDjOF/1e4FlBE/PkbqA9OfWu2ki2W0IB5558= github.com/agext/levenshtein v1.2.2 h1:0S/Yg6LYmFJ5stwQeRp6EeOcCbj7xiqQSdNelsXvaqE= github.com/agext/levenshtein v1.2.2/go.mod h1:JEDfjyjHDjOF/1e4FlBE/PkbqA9OfWu2ki2W0IB5558= @@ -46,7 +44,6 @@ github.com/antchfx/xquery v0.0.0-20180515051857-ad5b8c7a47b0/go.mod h1:LzD22aAzD github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= github.com/apparentlymart/go-cidr v1.0.0 h1:lGDvXx8Lv9QHjrAVP7jyzleG4F9+FkRhJcEsDFxeb8w= github.com/apparentlymart/go-cidr v1.0.0/go.mod h1:EBcsNrHc3zQeuaeCeCtQruQm+n9/YjEn/vI25Lg7Gwc= -github.com/apparentlymart/go-dump v0.0.0-20180507223929-23540a00eaa3 h1:ZSTrOEhiM5J5RFxEaFvMZVEAM1KvT1YzbEOwB2EAGjA= github.com/apparentlymart/go-dump v0.0.0-20180507223929-23540a00eaa3/go.mod h1:oL81AME2rN47vu18xqj1S1jPIPuN7afo62yKTNn3XMM= github.com/apparentlymart/go-dump v0.0.0-20190214190832-042adf3cf4a0 h1:MzVXffFUye+ZcSR6opIgz9Co7WcDx6ZcY+RjfFHoA0I= github.com/apparentlymart/go-dump v0.0.0-20190214190832-042adf3cf4a0/go.mod h1:oL81AME2rN47vu18xqj1S1jPIPuN7afo62yKTNn3XMM= @@ -60,7 +57,6 @@ github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj github.com/armon/go-radix v1.0.0 h1:F4z6KzEeeQIMeLFa97iZU6vupzoecKdU5TX24SNppXI= github.com/armon/go-radix v1.0.0/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= github.com/aws/aws-sdk-go v1.15.78/go.mod h1:E3/ieXAlvM0XWO57iftYVDLLvQ824smPP3ATZkfNZeM= -github.com/aws/aws-sdk-go v1.16.36 h1:POeH34ZME++pr7GBGh+ZO6Y5kOwSMQpqp5BGUgooJ6k= github.com/aws/aws-sdk-go v1.16.36/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= github.com/aws/aws-sdk-go v1.22.0 h1:e88V6+dSEyBibUy0ekOydtTfNWzqG3hrtCR8SF6UqqY= github.com/aws/aws-sdk-go v1.22.0/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= @@ -88,7 +84,7 @@ github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMn github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/coreos/bbolt v1.3.0 h1:HIgH5xUWXT914HCI671AxuTTqjj64UOFr7pHn48LUTI= github.com/coreos/bbolt v1.3.0/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= -github.com/coreos/etcd v3.3.10+incompatible h1:jFneRYjIvLMLhDLCzuTuU4rSJUjRplcJQ7pD7MnhC04= +github.com/coreos/etcd v3.3.10+incompatible h1:KjVWqrZ5U0wa3CxY2AxlH6/UcB+PK2td1DcsYhA+HRs= github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= github.com/coreos/go-semver v0.2.0 h1:3Jm3tLmsgAYcjC+4Up7hJrFBPr+n7rAqYeSw/SZazuY= github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= @@ -134,12 +130,10 @@ github.com/golang/groupcache v0.0.0-20180513044358-24b0969c4cb7 h1:u4bArs140e9+A github.com/golang/groupcache v0.0.0-20180513044358-24b0969c4cb7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/lint v0.0.0-20180702182130-06c8688daad7/go.mod h1:tluoj9z5200jBnyusfRPU2LqT6J+DAorxEvtC7LHB+E= github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/mock v1.2.0 h1:28o5sBqPkBsMGnC6b4MvE2TzSr5/AT4c/1fLqVGIwlk= github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/mock v1.3.1 h1:qGJ6qTW+x6xX/my+8YUVl4WNpX9B7+/l2tRsHGZ7f2s= github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= github.com/golang/protobuf v1.1.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.2.0 h1:P3YflyNX/ehuJFLhxviNdFxQPkGK5cDcApsge1SqnvM= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.1 h1:YF8+flBXS5eO826T4nzqPrxfhQThhXl0YzfuUPu4SBg= github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= @@ -147,7 +141,6 @@ github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db h1:woRePGFeVFfLKN/pO github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c h1:964Od4U6p2jUkFxvCydnIczKteheJEzHRToSGK3Bnlw= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/go-cmp v0.2.0 h1:+dTQ8DZQJz0Mb/HjFlkptS1FeQ4cWSnN941F8aEG4SQ= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.3.0 h1:crn/baboCvb5fXaQ0IJ1SGTsTVrWpDsCWC8EGETZijY= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= @@ -220,7 +213,6 @@ github.com/hashicorp/go-sockaddr v0.0.0-20180320115054-6d291a969b86 h1:7YOlAIO2Y github.com/hashicorp/go-sockaddr v0.0.0-20180320115054-6d291a969b86/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= github.com/hashicorp/go-tfe v0.3.16 h1:GS2yv580p0co4j3FBVaC6Zahd9mxdCGehhJ0qqzFMH0= github.com/hashicorp/go-tfe v0.3.16/go.mod h1:SuPHR+OcxvzBZNye7nGPfwZTEyd3rWPfLVbCgyZPezM= -github.com/hashicorp/go-uuid v1.0.0 h1:RS8zrF7PhGwyNPOtxSClXXj9HA8feRnJzgnI1RJCSnM= github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/hashicorp/go-uuid v1.0.1 h1:fv1ep09latC32wFoVwnqcnKJGnMSdBanPczbHAYm1BE= github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= @@ -261,7 +253,6 @@ github.com/json-iterator/go v1.1.5/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCV github.com/jtolds/gls v4.2.1+incompatible h1:fSuqC+Gmlu6l/ZYAoZzx2pyucC8Xza35fpRVWLVmUEE= github.com/jtolds/gls v4.2.1+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= -github.com/kardianos/osext v0.0.0-20170510131534-ae77be60afb1 h1:PJPDf8OUfOK1bb/NeTKd4f1QXZItOX389VN3B6qC8ro= github.com/kardianos/osext v0.0.0-20170510131534-ae77be60afb1/go.mod h1:1NbS8ALrpOvjt0rHPNLyCIeMtbizbir8U//inJ+zuB8= github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0 h1:iQTw/8FWTuc7uiaSepXwyf3o52HaUYcV+Tu66S3F5GA= github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0/go.mod h1:1NbS8ALrpOvjt0rHPNLyCIeMtbizbir8U//inJ+zuB8= @@ -277,7 +268,6 @@ github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/pty v1.1.3/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= -github.com/kylelemons/godebug v0.0.0-20170820004349-d65d576e9348 h1:MtvEpTB6LX3vkb4ax0b5D2DHbNAUsen0Gx5wZoq3lV4= github.com/kylelemons/godebug v0.0.0-20170820004349-d65d576e9348/go.mod h1:B69LEHPfb2qLo0BaaOLcbitczOKLWTsrBG9LczfCD4k= github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= @@ -291,12 +281,10 @@ github.com/masterzen/simplexml v0.0.0-20160608183007-4572e39b1ab9 h1:SmVbOZFWAly github.com/masterzen/simplexml v0.0.0-20160608183007-4572e39b1ab9/go.mod h1:kCEbxUJlNDEBNbdQMkPSp6yaKcRXVI6f4ddk8Riv4bc= github.com/masterzen/winrm v0.0.0-20190223112901-5e5c9a7fe54b h1:/1RFh2SLCJ+tEnT73+Fh5R2AO89sQqs8ba7o+hx1G0Y= github.com/masterzen/winrm v0.0.0-20190223112901-5e5c9a7fe54b/go.mod h1:wr1VqkwW0AB5JS0QLy5GpVMS9E3VtRoSYXUYyVk46KY= -github.com/mattn/go-colorable v0.0.9 h1:UVL0vNpWh04HeJXV0KLcaT7r06gOH2l4OW6ddYRUIY4= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= github.com/mattn/go-colorable v0.1.1 h1:G1f5SKeVxmagw/IyvzvtZE4Gybcc4Tr1tf7I8z0XgOg= github.com/mattn/go-colorable v0.1.1/go.mod h1:FuOcm+DKB9mbwrcAfNl7/TZVBZ6rcnceauSikq3lYCQ= github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= -github.com/mattn/go-isatty v0.0.4 h1:bnP0vzxcAdeI1zdubAl5PjU6zsERjGZb7raWodagDYs= github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.5 h1:tHXDdz1cpzGaovsTB+TVB8q90WEokoVmfMqoVcrLUgw= github.com/mattn/go-isatty v0.0.5/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= @@ -314,13 +302,11 @@ github.com/mitchellh/colorstring v0.0.0-20190213212951-d06e56a500db h1:62I3jR2Em github.com/mitchellh/colorstring v0.0.0-20190213212951-d06e56a500db/go.mod h1:l0dey0ia/Uv7NcFFVbCLtqEBQbrT4OCwCSKTEv6enCw= github.com/mitchellh/copystructure v1.0.0 h1:Laisrj+bAB6b/yJwB5Bt3ITZhGJdqmxquMKeZ+mmkFQ= github.com/mitchellh/copystructure v1.0.0/go.mod h1:SNtv71yrdKgLRyLFxmLdkAbkKEFWgYaq1OVrnRcwhnw= -github.com/mitchellh/go-homedir v1.0.0 h1:vKb8ShqSby24Yrqr/yDYkuFz8d0WUjys40rvnGC8aR0= github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/go-linereader v0.0.0-20190213213312-1b945b3263eb h1:GRiLv4rgyqjqzxbhJke65IYUf4NCOOvrPOJbV/sPxkM= github.com/mitchellh/go-linereader v0.0.0-20190213213312-1b945b3263eb/go.mod h1:OaY7UOoTkkrX3wRwjpYRKafIkkyeD0UtweSHAWWiqQM= -github.com/mitchellh/go-testing-interface v0.0.0-20171004221916-a61a99592b77 h1:7GoSOOW2jpsfkntVKaS2rAr1TJqfcxotyaUcuxoZSzg= github.com/mitchellh/go-testing-interface v0.0.0-20171004221916-a61a99592b77/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= github.com/mitchellh/go-testing-interface v1.0.0 h1:fzU/JVNcaqHQEcVFAKeR41fkiLdIPrefOvVG1VZ96U0= github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= @@ -362,24 +348,19 @@ github.com/pkg/errors v0.8.0 h1:WdK/asTD0HN+q6hsWO3/vpuAkAr+tw6aNJNDFFf0+qw= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/posener/complete v1.1.1 h1:ccV59UEOTzVDnDUEFdT95ZzHVZ+5+158q8+SJb2QV5w= github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= github.com/posener/complete v1.2.1 h1:LrvDIY//XNo65Lq84G/akBuMGlawHvGBABv8f/ZN6DI= github.com/posener/complete v1.2.1/go.mod h1:6gapUrK/U1TAN7ciCoNRIdVC5sbdBTUh1DKN0g6uH7E= -github.com/prometheus/client_golang v0.8.0 h1:1921Yw9Gc3iSc4VQh3PIoOqgPCZS7G/4xQNVUp8Mda8= github.com/prometheus/client_golang v0.8.0/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829 h1:D+CiwcpGTW6pL6bv6KI3KbyEyCKyS+1JWS2h8PNDnGA= github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829/go.mod h1:p2iRAGwDERtqlqzRXnrOVns+ignqQo//hLXqYxZYVNs= -github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910 h1:idejC8f05m9MGOsuEi1ATq9shN03HrxNkD/luQvxCv8= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f h1:BVwpUVJDADN2ufcGik7W992pyps0wZ888b/y9GXcLTU= github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= -github.com/prometheus/common v0.0.0-20180801064454-c7de2306084e h1:n/3MEhJQjQxrOUCzh1Y3Re6aJUUWRp2M9+Oc3eVn/54= github.com/prometheus/common v0.0.0-20180801064454-c7de2306084e/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= github.com/prometheus/common v0.2.0 h1:kUZDBDTdBVBYBj5Tmh2NZLlF60mfjA27rM34b+cVwNU= github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= -github.com/prometheus/procfs v0.0.0-20180725123919-05ee40e3a273 h1:agujYaXJSxSo18YNX3jzl+4G6Bstwt+kqv47GS12uL0= github.com/prometheus/procfs v0.0.0-20180725123919-05ee40e3a273/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1 h1:/K3IL0Z1quvmJ7X0A1AwNEK7CRkVK3YwfOU/QAL4WGg= @@ -427,9 +408,7 @@ github.com/sourcegraph/annotate v0.0.0-20160123013949-f4cad6c6324d/go.mod h1:Udh github.com/sourcegraph/syntaxhighlight v0.0.0-20170531221838-bd320f5d308e/go.mod h1:HuIsMU8RRBOtsCgI77wP899iHVBQpCmg4ErYMZB+2IA= github.com/spf13/afero v1.2.1 h1:qgMbHoJbPbw579P+1zVY+6n4nIFuIchaIjzZ/I/Yq8M= github.com/spf13/afero v1.2.1/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk= -github.com/spf13/pflag v1.0.2 h1:Fy0orTDgHdbnzHcsOgfCN4LtHf0ec3wwtiwJqwvf3Gc= github.com/spf13/pflag v1.0.2/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= -github.com/spf13/pflag v1.0.3 h1:zPAT6CGy6wXeQ7NtTnaTerfKOsV6V6F8agHXFiazDkg= github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= @@ -456,13 +435,11 @@ github.com/xiang90/probing v0.0.0-20160813154853-07dd2e8dfe18 h1:MPPkRncZLN9Kh4M github.com/xiang90/probing v0.0.0-20160813154853-07dd2e8dfe18/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= github.com/xlab/treeprint v0.0.0-20161029104018-1d6e34225557 h1:Jpn2j6wHkC9wJv5iMfJhKqrZJx3TahFx+7sbZ7zQdxs= github.com/xlab/treeprint v0.0.0-20161029104018-1d6e34225557/go.mod h1:ce1O1j6UtZfjr22oyGxGLbauSBp2YVXpARAosm7dHBg= -github.com/zclconf/go-cty v1.0.0 h1:EWtv3gKe2wPLIB9hQRQJa7k/059oIfAqcEkCNnaVckk= github.com/zclconf/go-cty v1.0.0/go.mod h1:xnAOWiHeOqg2nWS62VtQ7pbOu17FtxJNW8RLEih+O3s= github.com/zclconf/go-cty v1.0.1-0.20190708163926-19588f92a98f h1:sq2p8SN6ji66CFEQFIWLlD/gFmGtr5hBrOzv5nLlGfA= github.com/zclconf/go-cty v1.0.1-0.20190708163926-19588f92a98f/go.mod h1:xnAOWiHeOqg2nWS62VtQ7pbOu17FtxJNW8RLEih+O3s= github.com/zclconf/go-cty-yaml v1.0.1 h1:up11wlgAaDvlAGENcFDnZgkn0qUJurso7k6EpURKNF8= github.com/zclconf/go-cty-yaml v1.0.1/go.mod h1:IP3Ylp0wQpYm50IHK8OZWKMu6sPJIUgKa8XhiVHura0= -go.opencensus.io v0.18.0 h1:Mk5rgZcggtbvtAun5aJzAtjKKN/t0R3jJPlWILlv938= go.opencensus.io v0.18.0/go.mod h1:vKdFvxhtzZ9onBp9VKHK8z/sRpBMnKAsufL7wlDrCOA= go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= go.opencensus.io v0.20.2 h1:NAfh7zF0/3/HqtMvJNZ/RFrSlCE6ZTlHmKfhL/Dm1Jk= @@ -478,13 +455,9 @@ golang.org/x/build v0.0.0-20190111050920-041ab4dc3f9d/go.mod h1:OWs+y06UdEOHN4y+ golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181030102418-4d3f4d9ffa16/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181112202954-3d3f9f413869/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20190219172222-a4c6cb3142f2 h1:NwxKRvbkH5MsNkvOtPZi3/3kmI8CAzs3mtv+GLQMkNo= golang.org/x/crypto v0.0.0-20190219172222-a4c6cb3142f2/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20190222235706-ffb98f73852f h1:qWFY9ZxP3tfI37wYIs/MnIAqK0vlXp1xnYEa5HxFSSY= golang.org/x/crypto v0.0.0-20190222235706-ffb98f73852f/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2 h1:VklqNMn3ovrHsnt90PveolxSbWFaJdECFbxSq0Mqo2M= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190426145343-a29dc8fdc734 h1:p/H982KKEjUnLJkM3tt/LemDnOc1GiZL5FCVlORJ5zo= golang.org/x/crypto v0.0.0-20190426145343-a29dc8fdc734/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4 h1:HuIa8hRrWRSrqYzx1qI49NNxhdi2PrY7gxVSq1JjLDc= golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= @@ -503,7 +476,6 @@ golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73r golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190125091013-d26f9f9a57f3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190213061140-3a22650c66bd h1:HuTn7WObtcDo9uEEU7rEqL0jYthdXAmZ6PP+meazmaU= golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= @@ -511,17 +483,14 @@ golang.org/x/net v0.0.0-20190502183928-7f726cade0ab h1:9RfW3ktsOZxgo9YNbBAjq1FWz golang.org/x/net v0.0.0-20190502183928-7f726cade0ab/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20181017192945-9dcd33a902f4/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.0.0-20181203162652-d668ce993890 h1:uESlIz09WIHT2I+pasSXcpLYqYK8wHcdCetU3VuMBJE= golang.org/x/oauth2 v0.0.0-20181203162652-d668ce993890/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421 h1:Wo7BWFiOk0QRFMLYMqJGFMd9CgUAcGx7V+qEg/h5IBI= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/perf v0.0.0-20180704124530-6e6d33e29852/go.mod h1:JLpeXjPJfIyPr5TlbXLkXWLhP8nz10XfvxElABhCtcw= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4 h1:YUO/7uOKsKeq9UokNS62b8FYywz3ker1l1vDZRCRefw= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190423024810-112230192c58 h1:8gQV6CLnAEikrhgkHFbMAEhagSSnXWGV915qUMm9mrU= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -532,24 +501,18 @@ golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5h golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181122145206-62eef0e2fa9b/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181213200352-4d1cda033e06/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190129075346-302c3dd5f1cc h1:WiYx1rIFmx8c0mXAFtv5D/mHyKe1+jmuP7PViuwqwuQ= golang.org/x/sys v0.0.0-20190129075346-302c3dd5f1cc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190221075227-b4e8571b14e0 h1:bzeyCHgoAyjZjAhvTpks+qM7sdlh4cCSitmXeCEO3B4= golang.org/x/sys v0.0.0-20190221075227-b4e8571b14e0/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223 h1:DH4skfRX4EBpamg7iV4ZlCpblAHI6s6TDM39bFZumv8= golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190502175342-a43fa875dd82 h1:vsphBvatvfbhlb4PO1BYSr9dzugGxJ/SQHoNufZJq1w= golang.org/x/sys v0.0.0-20190502175342-a43fa875dd82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2 h1:z99zHgr7hKfrUcX/KsoJk5FJfjTceCKIp96+biqP4To= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20181108054448-85acf8d2951c h1:fqgJT0MGcGpPgpWU7VRdRjuArfcOvC4AoJmILihzhDg= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4 h1:SvFZT6jyqRaOeXpc5h/JSfZenJ2O330aBsf7JfSUXmQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -562,26 +525,21 @@ golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3 golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= google.golang.org/api v0.0.0-20180910000450-7ca32eb868bf/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0= google.golang.org/api v0.0.0-20181030000543-1d582fd0359e/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0= -google.golang.org/api v0.1.0 h1:K6z2u68e86TPdSdefXdzvXgR1zEMa+459vBSfWYAZkI= google.golang.org/api v0.1.0/go.mod h1:UGEZY7KEX120AnNLIHFMKIo4obdJhkp2tPbaPlQx13Y= google.golang.org/api v0.3.1 h1:oJra/lMfmtm13/rgY/8i3MzjFWYXvQIAKjQ3HqofMk8= google.golang.org/api v0.3.1/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.3.0 h1:FBSsiFRMz3LBeXIomRnVzrQwSDj4ibvcRexLG0LZGQk= google.golang.org/appengine v1.3.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.4.0 h1:/wp5JvzpHIxhs/dumFmF7BXTf3Z+dd4uXta4kVyO508= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20180831171423-11092d34479b h1:lohp5blsw53GBXtLyLNaTXPXS9pJ1tiTw61ZHUoE9Qw= google.golang.org/genproto v0.0.0-20180831171423-11092d34479b/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20181029155118-b69ba1387ce2/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20181202183823-bd91e49a0898/go.mod h1:7Ep/1NZk928CDR8SjdVbjWNpdIf6nzjE3BTgJDr2Atg= -google.golang.org/genproto v0.0.0-20190201180003-4b09977fb922 h1:mBVYJnbrXLA/ZCBTCe7PtEgAUP+1bg92qTaFoPHdz+8= google.golang.org/genproto v0.0.0-20190201180003-4b09977fb922/go.mod h1:L3J43x8/uS+qIUoksaLKe6OS3nUKxOKuIFz1sl2/jx4= google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19 h1:Lj2SnHtxkRGJDqnGaSjo+CCdIieEnwVazbOXILwQemk= google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/grpc v1.14.0 h1:ArxJuB1NWfPY6r9Gp9gqwplT0Ge7nqv9msgu03lHLmo= google.golang.org/grpc v1.14.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= google.golang.org/grpc v1.16.0/go.mod h1:0JHn/cJsOMiMfNA9+DeHDlAU7KAAB5GDlYFpa9MZMio= google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= diff --git a/helper/plugin/grpc_provider.go b/helper/plugin/grpc_provider.go index f32610c6c242..2ec2e3319538 100644 --- a/helper/plugin/grpc_provider.go +++ b/helper/plugin/grpc_provider.go @@ -55,6 +55,10 @@ func (s *GRPCProviderServer) GetSchema(_ context.Context, req *proto.GetProvider Block: convert.ConfigSchemaToProto(s.getProviderSchemaBlock()), } + resp.ProviderMeta = &proto.Schema{ + Block: convert.ConfigSchemaToProto(s.getProviderMetaSchemaBlock()), + } + for typ, res := range s.provider.ResourcesMap { resp.ResourceSchemas[typ] = &proto.Schema{ Version: int64(res.SchemaVersion), @@ -76,6 +80,10 @@ func (s *GRPCProviderServer) getProviderSchemaBlock() *configschema.Block { return schema.InternalMap(s.provider.Schema).CoreConfigSchema() } +func (s *GRPCProviderServer) getProviderMetaSchemaBlock() *configschema.Block { + return schema.InternalMap(s.provider.ProviderMetaSchema).CoreConfigSchema() +} + func (s *GRPCProviderServer) getResourceSchemaBlock(name string) *configschema.Block { res := s.provider.ResourcesMap[name] return res.CoreConfigSchema() diff --git a/helper/schema/provider.go b/helper/schema/provider.go index 9efc90e7b867..59dc750eec1d 100644 --- a/helper/schema/provider.go +++ b/helper/schema/provider.go @@ -7,7 +7,7 @@ import ( "sort" "sync" - "github.com/hashicorp/go-multierror" + multierror "github.com/hashicorp/go-multierror" "github.com/hashicorp/terraform/configs/configschema" "github.com/hashicorp/terraform/terraform" ) @@ -50,6 +50,14 @@ type Provider struct { // and must *not* implement Create, Update or Delete. DataSourcesMap map[string]*Resource + // ProviderMetaSchema is the schema for the configuration of the meta + // information for this provider. If this provider has no meta info, + // this can be omitted. This functionality is currently experimental + // and subject to change or break without warning; it should only be + // used by providers that are collaborating on its use with the + // Terraform team. + ProviderMetaSchema map[string]*Schema + // ConfigureFunc is a function for configuring the provider. If the // provider doesn't need to be configured, this can be omitted. // diff --git a/internal/tfplugin5/tfplugin5.pb.go b/internal/tfplugin5/tfplugin5.pb.go index b2bdf8888edb..85d56af50788 100644 --- a/internal/tfplugin5/tfplugin5.pb.go +++ b/internal/tfplugin5/tfplugin5.pb.go @@ -4,10 +4,12 @@ package tfplugin5 import ( + context "context" fmt "fmt" proto "github.com/golang/protobuf/proto" - context "golang.org/x/net/context" grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" math "math" ) @@ -20,7 +22,7 @@ var _ = math.Inf // is compatible with the proto package it is being compiled against. // A compilation error at this line likely means your copy of the // proto package needs to be updated. -const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package +const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package type Diagnostic_Severity int32 @@ -324,86 +326,15 @@ func (m *AttributePath_Step) GetElementKeyInt() int64 { return 0 } -// XXX_OneofFuncs is for the internal use of the proto package. -func (*AttributePath_Step) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { - return _AttributePath_Step_OneofMarshaler, _AttributePath_Step_OneofUnmarshaler, _AttributePath_Step_OneofSizer, []interface{}{ +// XXX_OneofWrappers is for the internal use of the proto package. +func (*AttributePath_Step) XXX_OneofWrappers() []interface{} { + return []interface{}{ (*AttributePath_Step_AttributeName)(nil), (*AttributePath_Step_ElementKeyString)(nil), (*AttributePath_Step_ElementKeyInt)(nil), } } -func _AttributePath_Step_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { - m := msg.(*AttributePath_Step) - // selector - switch x := m.Selector.(type) { - case *AttributePath_Step_AttributeName: - b.EncodeVarint(1<<3 | proto.WireBytes) - b.EncodeStringBytes(x.AttributeName) - case *AttributePath_Step_ElementKeyString: - b.EncodeVarint(2<<3 | proto.WireBytes) - b.EncodeStringBytes(x.ElementKeyString) - case *AttributePath_Step_ElementKeyInt: - b.EncodeVarint(3<<3 | proto.WireVarint) - b.EncodeVarint(uint64(x.ElementKeyInt)) - case nil: - default: - return fmt.Errorf("AttributePath_Step.Selector has unexpected type %T", x) - } - return nil -} - -func _AttributePath_Step_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { - m := msg.(*AttributePath_Step) - switch tag { - case 1: // selector.attribute_name - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - x, err := b.DecodeStringBytes() - m.Selector = &AttributePath_Step_AttributeName{x} - return true, err - case 2: // selector.element_key_string - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - x, err := b.DecodeStringBytes() - m.Selector = &AttributePath_Step_ElementKeyString{x} - return true, err - case 3: // selector.element_key_int - if wire != proto.WireVarint { - return true, proto.ErrInternalBadWireType - } - x, err := b.DecodeVarint() - m.Selector = &AttributePath_Step_ElementKeyInt{int64(x)} - return true, err - default: - return false, nil - } -} - -func _AttributePath_Step_OneofSizer(msg proto.Message) (n int) { - m := msg.(*AttributePath_Step) - // selector - switch x := m.Selector.(type) { - case *AttributePath_Step_AttributeName: - n += 1 // tag and wire - n += proto.SizeVarint(uint64(len(x.AttributeName))) - n += len(x.AttributeName) - case *AttributePath_Step_ElementKeyString: - n += 1 // tag and wire - n += proto.SizeVarint(uint64(len(x.ElementKeyString))) - n += len(x.ElementKeyString) - case *AttributePath_Step_ElementKeyInt: - n += 1 // tag and wire - n += proto.SizeVarint(uint64(x.ElementKeyInt)) - case nil: - default: - panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) - } - return n -} - type Stop struct { XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` @@ -887,6 +818,7 @@ type GetProviderSchema_Response struct { ResourceSchemas map[string]*Schema `protobuf:"bytes,2,rep,name=resource_schemas,json=resourceSchemas,proto3" json:"resource_schemas,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` DataSourceSchemas map[string]*Schema `protobuf:"bytes,3,rep,name=data_source_schemas,json=dataSourceSchemas,proto3" json:"data_source_schemas,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` Diagnostics []*Diagnostic `protobuf:"bytes,4,rep,name=diagnostics,proto3" json:"diagnostics,omitempty"` + ProviderMeta *Schema `protobuf:"bytes,5,opt,name=provider_meta,json=providerMeta,proto3" json:"provider_meta,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -945,6 +877,13 @@ func (m *GetProviderSchema_Response) GetDiagnostics() []*Diagnostic { return nil } +func (m *GetProviderSchema_Response) GetProviderMeta() *Schema { + if m != nil { + return m.ProviderMeta + } + return nil +} + type PrepareProviderConfig struct { XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` @@ -1920,6 +1859,7 @@ type ApplyResourceChange_Request struct { PlannedState *DynamicValue `protobuf:"bytes,3,opt,name=planned_state,json=plannedState,proto3" json:"planned_state,omitempty"` Config *DynamicValue `protobuf:"bytes,4,opt,name=config,proto3" json:"config,omitempty"` PlannedPrivate []byte `protobuf:"bytes,5,opt,name=planned_private,json=plannedPrivate,proto3" json:"planned_private,omitempty"` + ProviderMeta *DynamicValue `protobuf:"bytes,6,opt,name=provider_meta,json=providerMeta,proto3" json:"provider_meta,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -1985,6 +1925,13 @@ func (m *ApplyResourceChange_Request) GetPlannedPrivate() []byte { return nil } +func (m *ApplyResourceChange_Request) GetProviderMeta() *DynamicValue { + if m != nil { + return m.ProviderMeta + } + return nil +} + type ApplyResourceChange_Response struct { NewState *DynamicValue `protobuf:"bytes,1,opt,name=new_state,json=newState,proto3" json:"new_state,omitempty"` Private []byte `protobuf:"bytes,2,opt,name=private,proto3" json:"private,omitempty"` @@ -2773,125 +2720,127 @@ func init() { func init() { proto.RegisterFile("tfplugin5.proto", fileDescriptor_17ae6090ff270234) } var fileDescriptor_17ae6090ff270234 = []byte{ - // 1880 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x59, 0xcb, 0x6f, 0x23, 0x49, - 0x19, 0x9f, 0xf6, 0x23, 0xb1, 0x3f, 0xe7, 0xe1, 0xd4, 0xcc, 0x0e, 0xa6, 0x77, 0x17, 0x82, 0x79, - 0x24, 0xab, 0xdd, 0xf1, 0xac, 0x32, 0xb0, 0xbb, 0x84, 0xd1, 0x8a, 0x6c, 0x26, 0x64, 0x22, 0x66, - 0xb2, 0xa1, 0x3c, 0x0f, 0x24, 0xa4, 0xb5, 0x6a, 0xdc, 0x15, 0x4f, 0x33, 0x76, 0x77, 0x6f, 0x75, - 0x39, 0x89, 0x85, 0xc4, 0x05, 0xc1, 0x19, 0x09, 0xf1, 0x90, 0x78, 0x5c, 0x40, 0xe2, 0x1f, 0xe0, - 0x00, 0xdc, 0x38, 0xf1, 0x0f, 0x70, 0x03, 0x4e, 0x08, 0x6e, 0x9c, 0xe1, 0x82, 0x84, 0xea, 0xd5, - 0x5d, 0xb6, 0xdb, 0x4e, 0x4f, 0xb2, 0x23, 0xc4, 0xad, 0xab, 0xbe, 0x5f, 0x7d, 0xdf, 0x57, 0xdf, - 0xab, 0xbe, 0xcf, 0x86, 0x55, 0x7e, 0x1c, 0xf5, 0x87, 0x3d, 0x3f, 0xf8, 0x42, 0x2b, 0x62, 0x21, - 0x0f, 0x51, 0x35, 0xd9, 0x68, 0xde, 0x86, 0xa5, 0x3b, 0xa3, 0x80, 0x0c, 0xfc, 0xee, 0x23, 0xd2, - 0x1f, 0x52, 0xd4, 0x80, 0xc5, 0x41, 0xdc, 0x8b, 0x48, 0xf7, 0x59, 0xc3, 0x59, 0x77, 0x36, 0x97, - 0xb0, 0x59, 0x22, 0x04, 0xa5, 0x6f, 0xc6, 0x61, 0xd0, 0x28, 0xc8, 0x6d, 0xf9, 0xdd, 0xfc, 0x9b, - 0x03, 0x70, 0xc7, 0x27, 0xbd, 0x20, 0x8c, 0xb9, 0xdf, 0x45, 0xdb, 0x50, 0x89, 0xe9, 0x09, 0x65, - 0x3e, 0x1f, 0xc9, 0xd3, 0x2b, 0x5b, 0x9f, 0x68, 0xa5, 0xb2, 0x53, 0x60, 0xab, 0xad, 0x51, 0x38, - 0xc1, 0x0b, 0xc1, 0xf1, 0x70, 0x30, 0x20, 0x6c, 0x24, 0x25, 0x54, 0xb1, 0x59, 0xa2, 0xeb, 0xb0, - 0xe0, 0x51, 0x4e, 0xfc, 0x7e, 0xa3, 0x28, 0x09, 0x7a, 0x85, 0xde, 0x82, 0x2a, 0xe1, 0x9c, 0xf9, - 0x4f, 0x86, 0x9c, 0x36, 0x4a, 0xeb, 0xce, 0x66, 0x6d, 0xab, 0x61, 0x89, 0xdb, 0x31, 0xb4, 0x23, - 0xc2, 0x9f, 0xe2, 0x14, 0xda, 0xbc, 0x09, 0x15, 0x23, 0x1f, 0xd5, 0x60, 0xf1, 0xe0, 0xf0, 0xd1, - 0xce, 0xbd, 0x83, 0x3b, 0xf5, 0x2b, 0xa8, 0x0a, 0xe5, 0x3d, 0x8c, 0xdf, 0xc7, 0x75, 0x47, 0xec, - 0x3f, 0xde, 0xc1, 0x87, 0x07, 0x87, 0xfb, 0xf5, 0x42, 0xf3, 0x2f, 0x0e, 0x2c, 0x8f, 0x71, 0x43, - 0xb7, 0xa0, 0x1c, 0x73, 0x1a, 0xc5, 0x0d, 0x67, 0xbd, 0xb8, 0x59, 0xdb, 0x7a, 0x75, 0x96, 0xd8, - 0x56, 0x9b, 0xd3, 0x08, 0x2b, 0xac, 0xfb, 0x43, 0x07, 0x4a, 0x62, 0x8d, 0x36, 0x60, 0x25, 0xd1, - 0xa6, 0x13, 0x90, 0x01, 0x95, 0xc6, 0xaa, 0xde, 0xbd, 0x82, 0x97, 0x93, 0xfd, 0x43, 0x32, 0xa0, - 0xa8, 0x05, 0x88, 0xf6, 0xe9, 0x80, 0x06, 0xbc, 0xf3, 0x8c, 0x8e, 0x3a, 0x31, 0x67, 0x7e, 0xd0, - 0x53, 0xe6, 0xb9, 0x7b, 0x05, 0xd7, 0x35, 0xed, 0xab, 0x74, 0xd4, 0x96, 0x14, 0xb4, 0x09, 0xab, - 0x36, 0xde, 0x0f, 0xb8, 0x34, 0x59, 0x51, 0x70, 0x4e, 0xc1, 0x07, 0x01, 0x7f, 0x0f, 0x84, 0xa7, - 0xfa, 0xb4, 0xcb, 0x43, 0xd6, 0xbc, 0x25, 0xd4, 0x0a, 0x23, 0xb7, 0x0a, 0x8b, 0x98, 0x7e, 0x38, - 0xa4, 0x31, 0x77, 0xd7, 0xa1, 0x82, 0x69, 0x1c, 0x85, 0x41, 0x4c, 0xd1, 0x35, 0x28, 0xef, 0x31, - 0x16, 0x32, 0xa5, 0x24, 0x56, 0x8b, 0xe6, 0x8f, 0x1c, 0xa8, 0x60, 0x72, 0xda, 0xe6, 0x84, 0xd3, - 0x24, 0x34, 0x9c, 0x34, 0x34, 0xd0, 0x36, 0x2c, 0x1e, 0xf7, 0x09, 0x1f, 0x90, 0xa8, 0x51, 0x90, - 0x46, 0x5a, 0xb7, 0x8c, 0x64, 0x4e, 0xb6, 0xbe, 0xa2, 0x20, 0x7b, 0x01, 0x67, 0x23, 0x6c, 0x0e, - 0xb8, 0xdb, 0xb0, 0x64, 0x13, 0x50, 0x1d, 0x8a, 0xcf, 0xe8, 0x48, 0x2b, 0x20, 0x3e, 0x85, 0x52, - 0x27, 0x22, 0x5e, 0x75, 0xac, 0xa8, 0xc5, 0x76, 0xe1, 0x1d, 0xa7, 0xf9, 0x8f, 0x32, 0x2c, 0xb4, - 0xbb, 0x4f, 0xe9, 0x80, 0x88, 0x90, 0x3a, 0xa1, 0x2c, 0xf6, 0xb5, 0x66, 0x45, 0x6c, 0x96, 0xe8, - 0x06, 0x94, 0x9f, 0xf4, 0xc3, 0xee, 0x33, 0x79, 0xbc, 0xb6, 0xf5, 0x31, 0x4b, 0x35, 0x75, 0xb6, - 0xf5, 0x9e, 0x20, 0x63, 0x85, 0x72, 0x7f, 0xe1, 0x40, 0x59, 0x6e, 0xcc, 0x61, 0xf9, 0x25, 0x80, - 0xc4, 0x79, 0xb1, 0xbe, 0xf2, 0xcb, 0xd3, 0x7c, 0x93, 0xf0, 0xc0, 0x16, 0x1c, 0xbd, 0x0b, 0x35, - 0x29, 0xa9, 0xc3, 0x47, 0x11, 0x8d, 0x1b, 0xc5, 0xa9, 0xa8, 0xd2, 0xa7, 0x0f, 0x69, 0xcc, 0xa9, - 0xa7, 0x74, 0x03, 0x79, 0xe2, 0x81, 0x38, 0xe0, 0xfe, 0xd1, 0x81, 0x6a, 0xc2, 0x59, 0xb8, 0x23, - 0x8d, 0x2a, 0x2c, 0xbf, 0xc5, 0x9e, 0xe0, 0x6d, 0xb2, 0x57, 0x7c, 0xa3, 0x75, 0xa8, 0x79, 0x34, - 0xee, 0x32, 0x3f, 0xe2, 0xe2, 0x42, 0x2a, 0xbb, 0xec, 0x2d, 0xe4, 0x42, 0x85, 0xd1, 0x0f, 0x87, - 0x3e, 0xa3, 0x9e, 0xcc, 0xb0, 0x0a, 0x4e, 0xd6, 0x82, 0x16, 0x4a, 0x14, 0xe9, 0x37, 0xca, 0x8a, - 0x66, 0xd6, 0x82, 0xd6, 0x0d, 0x07, 0xd1, 0x90, 0x53, 0xaf, 0xb1, 0xa0, 0x68, 0x66, 0x8d, 0x5e, - 0x81, 0x6a, 0x4c, 0x83, 0xd8, 0xe7, 0xfe, 0x09, 0x6d, 0x2c, 0x4a, 0x62, 0xba, 0xe1, 0xfe, 0xba, - 0x00, 0x35, 0xeb, 0x96, 0xe8, 0x65, 0xa8, 0x0a, 0x5d, 0xad, 0x34, 0xc1, 0x15, 0xb1, 0x21, 0xf3, - 0xe3, 0xf9, 0xdc, 0x88, 0x76, 0x61, 0x31, 0xa0, 0x31, 0x17, 0x39, 0x54, 0x94, 0xd5, 0xe9, 0xb5, - 0xb9, 0x16, 0x96, 0xdf, 0x7e, 0xd0, 0xbb, 0x1f, 0x7a, 0x14, 0x9b, 0x93, 0x42, 0xa1, 0x81, 0x1f, - 0x74, 0x7c, 0x4e, 0x07, 0xb1, 0xb4, 0x49, 0x11, 0x57, 0x06, 0x7e, 0x70, 0x20, 0xd6, 0x92, 0x48, - 0xce, 0x34, 0xb1, 0xac, 0x89, 0xe4, 0x4c, 0x12, 0x9b, 0xf7, 0xd5, 0xcd, 0x34, 0xc7, 0xf1, 0xd2, - 0x03, 0xb0, 0xd0, 0x3e, 0x38, 0xdc, 0xbf, 0xb7, 0x57, 0x77, 0x50, 0x05, 0x4a, 0xf7, 0x0e, 0xda, - 0x0f, 0xea, 0x05, 0xb4, 0x08, 0xc5, 0xf6, 0xde, 0x83, 0x7a, 0x51, 0x7c, 0xdc, 0xdf, 0x39, 0xaa, - 0x97, 0x44, 0x89, 0xda, 0xc7, 0xef, 0x3f, 0x3c, 0xaa, 0x97, 0x9b, 0x3f, 0x29, 0xc1, 0xda, 0x3e, - 0xe5, 0x47, 0x2c, 0x3c, 0xf1, 0x3d, 0xca, 0x94, 0xfe, 0x76, 0x12, 0xff, 0xab, 0x68, 0x65, 0xf1, - 0x0d, 0xa8, 0x44, 0x1a, 0x29, 0xcd, 0x58, 0xdb, 0x5a, 0x9b, 0xba, 0x3c, 0x4e, 0x20, 0x88, 0x42, - 0x9d, 0xd1, 0x38, 0x1c, 0xb2, 0x2e, 0xed, 0xc4, 0x92, 0x68, 0x62, 0x7a, 0xdb, 0x3a, 0x36, 0x25, - 0xbe, 0x65, 0xe4, 0x89, 0x0f, 0x79, 0x5a, 0xed, 0xc7, 0x2a, 0xc1, 0x57, 0xd9, 0xf8, 0x2e, 0xea, - 0xc3, 0x55, 0x8f, 0x70, 0xd2, 0x99, 0x90, 0xa4, 0xe2, 0xff, 0x76, 0x3e, 0x49, 0x77, 0x08, 0x27, - 0xed, 0x69, 0x59, 0x6b, 0xde, 0xe4, 0x3e, 0x7a, 0x1b, 0x6a, 0x5e, 0xf2, 0x06, 0x09, 0xe7, 0x09, - 0x29, 0x2f, 0x65, 0xbe, 0x50, 0xd8, 0x46, 0xba, 0x0f, 0xe1, 0x5a, 0xd6, 0x7d, 0x32, 0xea, 0xd2, - 0x86, 0x5d, 0x97, 0x32, 0x6d, 0x9c, 0x96, 0x2a, 0xf7, 0x31, 0x5c, 0xcf, 0x56, 0xfe, 0x92, 0x8c, - 0x9b, 0x7f, 0x76, 0xe0, 0xa5, 0x23, 0x46, 0x23, 0xc2, 0xa8, 0xb1, 0xda, 0x6e, 0x18, 0x1c, 0xfb, - 0x3d, 0x77, 0x3b, 0x09, 0x0f, 0x74, 0x13, 0x16, 0xba, 0x72, 0x53, 0xc7, 0x83, 0x9d, 0x3d, 0x76, - 0x4b, 0x80, 0x35, 0xcc, 0xfd, 0xae, 0x63, 0xc5, 0xd3, 0x97, 0x61, 0x35, 0x52, 0x12, 0xbc, 0x4e, - 0x3e, 0x36, 0x2b, 0x06, 0xaf, 0x54, 0x99, 0xf4, 0x46, 0x21, 0xaf, 0x37, 0x9a, 0xdf, 0x2f, 0xc0, - 0xb5, 0x87, 0x51, 0x8f, 0x11, 0x8f, 0x26, 0x5e, 0x11, 0x8f, 0x89, 0xcb, 0xd2, 0xcb, 0xcd, 0x2d, - 0x1b, 0x56, 0x11, 0x2f, 0x8c, 0x17, 0xf1, 0x37, 0xa1, 0xca, 0xc8, 0x69, 0x27, 0x16, 0xec, 0x64, - 0x8d, 0xa8, 0x6d, 0x5d, 0xcd, 0x78, 0xb6, 0x70, 0x85, 0xe9, 0x2f, 0xf7, 0x3b, 0xb6, 0x51, 0xde, - 0x85, 0x95, 0xa1, 0x52, 0xcc, 0xd3, 0x3c, 0xce, 0xb1, 0xc9, 0xb2, 0x81, 0xab, 0x77, 0xf4, 0xc2, - 0x26, 0xf9, 0xbd, 0x03, 0xee, 0x23, 0xd2, 0xf7, 0x3d, 0xa1, 0x9c, 0xb6, 0x89, 0x78, 0x19, 0xb4, - 0xd7, 0x1f, 0xe7, 0x34, 0x4c, 0x1a, 0x12, 0x85, 0x7c, 0x21, 0xb1, 0x6b, 0x5d, 0x7e, 0x42, 0x79, - 0x27, 0xb7, 0xf2, 0xbf, 0x75, 0xa0, 0x61, 0x94, 0x4f, 0xf3, 0xe1, 0xff, 0x42, 0xf5, 0xdf, 0x39, - 0x50, 0x55, 0x8a, 0x0e, 0x19, 0x75, 0x7b, 0xa9, 0xae, 0xaf, 0xc3, 0x1a, 0xa7, 0x8c, 0x91, 0xe3, - 0x90, 0x0d, 0x3a, 0x76, 0xc7, 0x50, 0xc5, 0xf5, 0x84, 0xf0, 0x48, 0x47, 0xdd, 0xff, 0x46, 0xf7, - 0x5f, 0x15, 0x60, 0x09, 0x53, 0xe2, 0x99, 0x78, 0x71, 0xbf, 0x9d, 0xd3, 0xd4, 0xb7, 0x61, 0xb9, - 0x3b, 0x64, 0x4c, 0x74, 0x99, 0x2a, 0xc8, 0xcf, 0xd1, 0x7a, 0x49, 0xa3, 0x55, 0x8c, 0x37, 0x60, - 0x31, 0x62, 0xfe, 0x89, 0x49, 0xb0, 0x25, 0x6c, 0x96, 0xee, 0x0f, 0xec, 0x54, 0xfa, 0x3c, 0x54, - 0x03, 0x7a, 0x9a, 0x2f, 0x8b, 0x2a, 0x01, 0x3d, 0xbd, 0x5c, 0x02, 0xcd, 0xd6, 0xaa, 0xf9, 0x9b, - 0x12, 0xa0, 0xa3, 0x3e, 0x09, 0x8c, 0x99, 0x76, 0x9f, 0x92, 0xa0, 0x47, 0xdd, 0xff, 0x38, 0x39, - 0xad, 0xf5, 0x0e, 0xd4, 0x22, 0xe6, 0x87, 0x2c, 0x9f, 0xad, 0x40, 0x62, 0xd5, 0x65, 0xf6, 0x00, - 0x45, 0x2c, 0x8c, 0xc2, 0x98, 0x7a, 0x9d, 0xd4, 0x16, 0xc5, 0xf9, 0x0c, 0xea, 0xe6, 0xc8, 0xa1, - 0xb1, 0x49, 0x1a, 0x5d, 0xa5, 0x5c, 0xd1, 0x85, 0x3e, 0x0d, 0xcb, 0x4a, 0x63, 0x63, 0x91, 0xb2, - 0xb4, 0xc8, 0x92, 0xdc, 0x3c, 0xd2, 0xce, 0xfa, 0x79, 0xc1, 0x72, 0xd6, 0x6d, 0x58, 0x8e, 0xfa, - 0x24, 0x08, 0xf2, 0x96, 0xbd, 0x25, 0x8d, 0x56, 0x0a, 0xee, 0x8a, 0x5e, 0x43, 0x36, 0x95, 0x71, - 0x87, 0xd1, 0xa8, 0x4f, 0xba, 0x54, 0x7b, 0x6e, 0xf6, 0x38, 0xb7, 0x6a, 0x4e, 0x60, 0x75, 0x00, - 0x6d, 0xc0, 0xaa, 0x51, 0x61, 0xdc, 0x91, 0x2b, 0x7a, 0x5b, 0x2b, 0x7e, 0xe1, 0x26, 0x00, 0xbd, - 0x01, 0xa8, 0x4f, 0x7b, 0xa4, 0x3b, 0x92, 0x4d, 0x7a, 0x27, 0x1e, 0xc5, 0x9c, 0x0e, 0x74, 0xe7, - 0x5b, 0x57, 0x14, 0x51, 0x72, 0xdb, 0x72, 0xbf, 0xf9, 0xa7, 0x22, 0x5c, 0xdd, 0x89, 0xa2, 0xfe, - 0x68, 0x22, 0x6e, 0xfe, 0xfd, 0xe2, 0xe3, 0x66, 0xca, 0x1b, 0xc5, 0xe7, 0xf1, 0xc6, 0x73, 0x87, - 0x4b, 0x86, 0xe5, 0xcb, 0x59, 0x96, 0x77, 0xff, 0x70, 0xf9, 0xfc, 0xb6, 0xd2, 0xb4, 0x30, 0x96, - 0xa6, 0x93, 0x6e, 0x2d, 0x5e, 0xd2, 0xad, 0xa5, 0x19, 0x6e, 0xfd, 0x67, 0x01, 0xae, 0x1e, 0x0c, - 0xa2, 0x90, 0xf1, 0xf1, 0xd6, 0xe3, 0xad, 0x9c, 0x5e, 0x5d, 0x81, 0x82, 0xef, 0xe9, 0xa1, 0xb5, - 0xe0, 0x7b, 0xee, 0x19, 0xd4, 0x15, 0x3b, 0x9a, 0xd4, 0xe1, 0x73, 0x47, 0x9e, 0x5c, 0x01, 0xa1, - 0x50, 0x73, 0xaa, 0xed, 0x2f, 0x6d, 0x6f, 0x7c, 0x00, 0xc8, 0xd7, 0x6a, 0x74, 0x4c, 0x8f, 0x6e, - 0xde, 0x92, 0x9b, 0x96, 0x88, 0x8c, 0xab, 0xb7, 0x26, 0xf5, 0xc7, 0x6b, 0xfe, 0xc4, 0x4e, 0x7c, - 0xf1, 0xc6, 0xe6, 0xaf, 0x0e, 0xac, 0x88, 0x47, 0x2a, 0xed, 0x0b, 0x5e, 0x5c, 0x47, 0xc0, 0xc6, - 0xc6, 0xa5, 0x72, 0xae, 0xd0, 0xd4, 0x66, 0xbe, 0xf0, 0xfd, 0x7e, 0xea, 0xc0, 0x35, 0x33, 0xdb, - 0x88, 0x5e, 0x20, 0x6b, 0x8e, 0x3b, 0xb3, 0xf4, 0xba, 0x25, 0xaa, 0x42, 0x82, 0x9d, 0x3d, 0xc9, - 0xd9, 0xa8, 0x8b, 0x6b, 0xf7, 0x33, 0x07, 0x3e, 0x6e, 0x3a, 0x33, 0x4b, 0xc5, 0x8f, 0x60, 0x96, - 0xf8, 0x48, 0x3a, 0x98, 0xbf, 0x3b, 0xb0, 0x96, 0xa8, 0x95, 0xb4, 0x31, 0xf1, 0xc5, 0xd5, 0x42, - 0x6f, 0x03, 0x74, 0xc3, 0x20, 0xa0, 0x5d, 0x6e, 0x86, 0x83, 0x79, 0x35, 0x37, 0x85, 0xba, 0xdf, - 0xb0, 0xee, 0x73, 0x1d, 0x16, 0xc2, 0x21, 0x8f, 0x86, 0x5c, 0x87, 0xa4, 0x5e, 0x5d, 0xd8, 0x0d, - 0x5b, 0x3f, 0xae, 0x42, 0xc5, 0xcc, 0x71, 0xe8, 0xeb, 0x50, 0xdd, 0xa7, 0x5c, 0xff, 0xc2, 0xf5, - 0x99, 0x73, 0x46, 0x64, 0x15, 0x40, 0x9f, 0xcd, 0x35, 0x48, 0xa3, 0xfe, 0x8c, 0xa1, 0x11, 0x6d, - 0x5a, 0xe7, 0x33, 0x11, 0x89, 0xa4, 0xd7, 0x72, 0x20, 0xb5, 0xb4, 0x6f, 0xcd, 0x9b, 0x58, 0xd0, - 0x0d, 0x8b, 0xd1, 0x6c, 0x58, 0x22, 0xb7, 0x95, 0x17, 0xae, 0x85, 0x0f, 0x67, 0x4f, 0x1c, 0xe8, - 0xf5, 0x0c, 0x5e, 0x93, 0xa0, 0x44, 0xf0, 0x1b, 0xf9, 0xc0, 0x5a, 0xac, 0x9f, 0x3d, 0xb8, 0xa2, - 0x0d, 0x8b, 0x4b, 0x16, 0x20, 0x11, 0xb7, 0x79, 0x3e, 0x50, 0x8b, 0xba, 0x6b, 0x0d, 0x26, 0xe8, - 0x15, 0xeb, 0x58, 0xb2, 0x9b, 0x30, 0x7d, 0x75, 0x06, 0x55, 0x73, 0xfa, 0xda, 0xf8, 0x98, 0x80, - 0x3e, 0x69, 0x0f, 0xc4, 0x16, 0x21, 0xe1, 0xb7, 0x3e, 0x1b, 0xa0, 0x59, 0x76, 0xb3, 0x5a, 0x6a, - 0x64, 0x87, 0xe9, 0x34, 0x39, 0x61, 0xff, 0xb9, 0xf3, 0x60, 0x5a, 0xc8, 0x71, 0x66, 0x03, 0x86, - 0xec, 0xe3, 0x19, 0xf4, 0x44, 0xcc, 0xc6, 0xb9, 0xb8, 0x54, 0x4e, 0xc6, 0xb3, 0x38, 0x26, 0x27, - 0xeb, 0xd9, 0xcc, 0x92, 0x93, 0x8d, 0xd3, 0x72, 0x1e, 0x4f, 0xbe, 0x84, 0xe8, 0x53, 0x13, 0x86, - 0x4e, 0x49, 0x09, 0xf7, 0xe6, 0x3c, 0x88, 0x66, 0xfc, 0x45, 0xf5, 0xfb, 0x3f, 0x1a, 0xfb, 0xf9, - 0x94, 0x87, 0x51, 0xc2, 0xa4, 0x31, 0x4d, 0x50, 0x47, 0xb7, 0xbe, 0x57, 0x84, 0x9a, 0xf5, 0x30, - 0xa0, 0x0f, 0xec, 0xe2, 0xb4, 0x91, 0x51, 0x76, 0xec, 0x37, 0x2e, 0x33, 0xaa, 0x67, 0x00, 0xb5, - 0xaa, 0x67, 0x73, 0xde, 0x23, 0x94, 0x95, 0x8b, 0x53, 0xa8, 0x44, 0xe8, 0x8d, 0x9c, 0x68, 0x2d, - 0xf9, 0x49, 0xc6, 0x53, 0x33, 0x56, 0x7e, 0xa7, 0xa8, 0x99, 0xe5, 0x37, 0x0b, 0xa5, 0x24, 0xbc, - 0xe9, 0x5c, 0xc2, 0x11, 0x4f, 0x16, 0xe4, 0x1f, 0x7b, 0xb7, 0xfe, 0x1b, 0x00, 0x00, 0xff, 0xff, - 0x8a, 0x61, 0xfa, 0xcc, 0xeb, 0x1b, 0x00, 0x00, + // 1908 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x59, 0xcd, 0x6f, 0x23, 0x49, + 0x15, 0x9f, 0xf6, 0x47, 0x62, 0x3f, 0xe7, 0xc3, 0xa9, 0x99, 0x1d, 0x4c, 0xef, 0x2e, 0x04, 0xf3, + 0x91, 0xac, 0x76, 0xc7, 0xb3, 0xca, 0xc0, 0xec, 0x12, 0xa2, 0x15, 0xd9, 0x4c, 0xc8, 0x44, 0xcc, + 0x64, 0x43, 0x79, 0x3e, 0x90, 0x90, 0xd6, 0xaa, 0x71, 0x57, 0x3c, 0xcd, 0xd8, 0xdd, 0xbd, 0xd5, + 0xe5, 0x4c, 0x2c, 0x24, 0x2e, 0x08, 0xce, 0x08, 0x04, 0x1c, 0xf8, 0xb8, 0x80, 0xc4, 0x91, 0x0b, + 0x42, 0xc0, 0x8d, 0x13, 0x57, 0xee, 0xc0, 0x09, 0xc1, 0x8d, 0x3f, 0x01, 0x09, 0xd5, 0x57, 0x77, + 0xd9, 0x6e, 0x3b, 0x3d, 0xc9, 0xae, 0x10, 0xb7, 0xae, 0x7a, 0xbf, 0x7a, 0xef, 0xd5, 0xfb, 0xaa, + 0xf7, 0x6c, 0x58, 0xe5, 0x27, 0x51, 0x7f, 0xd8, 0xf3, 0x83, 0x2f, 0xb4, 0x22, 0x16, 0xf2, 0x10, + 0x55, 0x93, 0x8d, 0xe6, 0x0e, 0x2c, 0xdd, 0x19, 0x05, 0x64, 0xe0, 0x77, 0x1f, 0x91, 0xfe, 0x90, + 0xa2, 0x06, 0x2c, 0x0e, 0xe2, 0x5e, 0x44, 0xba, 0xcf, 0x1a, 0xce, 0xba, 0xb3, 0xb9, 0x84, 0xcd, + 0x12, 0x21, 0x28, 0x7d, 0x33, 0x0e, 0x83, 0x46, 0x41, 0x6e, 0xcb, 0xef, 0xe6, 0x3f, 0x1c, 0x80, + 0x3b, 0x3e, 0xe9, 0x05, 0x61, 0xcc, 0xfd, 0x2e, 0xda, 0x86, 0x4a, 0x4c, 0x4f, 0x29, 0xf3, 0xf9, + 0x48, 0x9e, 0x5e, 0xd9, 0xfa, 0x44, 0x2b, 0x95, 0x9d, 0x02, 0x5b, 0x6d, 0x8d, 0xc2, 0x09, 0x5e, + 0x08, 0x8e, 0x87, 0x83, 0x01, 0x61, 0x23, 0x29, 0xa1, 0x8a, 0xcd, 0x12, 0x5d, 0x87, 0x05, 0x8f, + 0x72, 0xe2, 0xf7, 0x1b, 0x45, 0x49, 0xd0, 0x2b, 0x74, 0x1b, 0xaa, 0x84, 0x73, 0xe6, 0x3f, 0x19, + 0x72, 0xda, 0x28, 0xad, 0x3b, 0x9b, 0xb5, 0xad, 0x86, 0x25, 0x6e, 0xd7, 0xd0, 0x8e, 0x09, 0x7f, + 0x8a, 0x53, 0x68, 0xf3, 0x26, 0x54, 0x8c, 0x7c, 0x54, 0x83, 0xc5, 0xc3, 0xa3, 0x47, 0xbb, 0xf7, + 0x0e, 0xef, 0xd4, 0xaf, 0xa0, 0x2a, 0x94, 0xf7, 0x31, 0x7e, 0x0f, 0xd7, 0x1d, 0xb1, 0xff, 0x78, + 0x17, 0x1f, 0x1d, 0x1e, 0x1d, 0xd4, 0x0b, 0xcd, 0xbf, 0x39, 0xb0, 0x3c, 0xc6, 0x0d, 0xdd, 0x82, + 0x72, 0xcc, 0x69, 0x14, 0x37, 0x9c, 0xf5, 0xe2, 0x66, 0x6d, 0xeb, 0xd5, 0x59, 0x62, 0x5b, 0x6d, + 0x4e, 0x23, 0xac, 0xb0, 0xee, 0x8f, 0x1c, 0x28, 0x89, 0x35, 0xda, 0x80, 0x95, 0x44, 0x9b, 0x4e, + 0x40, 0x06, 0x54, 0x1a, 0xab, 0x7a, 0xf7, 0x0a, 0x5e, 0x4e, 0xf6, 0x8f, 0xc8, 0x80, 0xa2, 0x16, + 0x20, 0xda, 0xa7, 0x03, 0x1a, 0xf0, 0xce, 0x33, 0x3a, 0xea, 0xc4, 0x9c, 0xf9, 0x41, 0x4f, 0x99, + 0xe7, 0xee, 0x15, 0x5c, 0xd7, 0xb4, 0xaf, 0xd2, 0x51, 0x5b, 0x52, 0xd0, 0x26, 0xac, 0xda, 0x78, + 0x3f, 0xe0, 0xd2, 0x64, 0x45, 0xc1, 0x39, 0x05, 0x1f, 0x06, 0xfc, 0x5d, 0x10, 0x9e, 0xea, 0xd3, + 0x2e, 0x0f, 0x59, 0xf3, 0x96, 0x50, 0x2b, 0x8c, 0xdc, 0x2a, 0x2c, 0x62, 0xfa, 0xc1, 0x90, 0xc6, + 0xdc, 0x5d, 0x87, 0x0a, 0xa6, 0x71, 0x14, 0x06, 0x31, 0x45, 0xd7, 0xa0, 0xbc, 0xcf, 0x58, 0xc8, + 0x94, 0x92, 0x58, 0x2d, 0x9a, 0x3f, 0x76, 0xa0, 0x82, 0xc9, 0xf3, 0x36, 0x27, 0x9c, 0x26, 0xa1, + 0xe1, 0xa4, 0xa1, 0x81, 0xb6, 0x61, 0xf1, 0xa4, 0x4f, 0xf8, 0x80, 0x44, 0x8d, 0x82, 0x34, 0xd2, + 0xba, 0x65, 0x24, 0x73, 0xb2, 0xf5, 0x15, 0x05, 0xd9, 0x0f, 0x38, 0x1b, 0x61, 0x73, 0xc0, 0xdd, + 0x86, 0x25, 0x9b, 0x80, 0xea, 0x50, 0x7c, 0x46, 0x47, 0x5a, 0x01, 0xf1, 0x29, 0x94, 0x3a, 0x15, + 0xf1, 0xaa, 0x63, 0x45, 0x2d, 0xb6, 0x0b, 0x6f, 0x3b, 0xcd, 0x7f, 0x95, 0x61, 0xa1, 0xdd, 0x7d, + 0x4a, 0x07, 0x44, 0x84, 0xd4, 0x29, 0x65, 0xb1, 0xaf, 0x35, 0x2b, 0x62, 0xb3, 0x44, 0x37, 0xa0, + 0xfc, 0xa4, 0x1f, 0x76, 0x9f, 0xc9, 0xe3, 0xb5, 0xad, 0x8f, 0x59, 0xaa, 0xa9, 0xb3, 0xad, 0x77, + 0x05, 0x19, 0x2b, 0x94, 0xfb, 0x0b, 0x07, 0xca, 0x72, 0x63, 0x0e, 0xcb, 0x2f, 0x01, 0x24, 0xce, + 0x8b, 0xf5, 0x95, 0x5f, 0x9e, 0xe6, 0x9b, 0x84, 0x07, 0xb6, 0xe0, 0xe8, 0x1d, 0xa8, 0x49, 0x49, + 0x1d, 0x3e, 0x8a, 0x68, 0xdc, 0x28, 0x4e, 0x45, 0x95, 0x3e, 0x7d, 0x44, 0x63, 0x4e, 0x3d, 0xa5, + 0x1b, 0xc8, 0x13, 0x0f, 0xc4, 0x01, 0xf7, 0xcf, 0x0e, 0x54, 0x13, 0xce, 0xc2, 0x1d, 0x69, 0x54, + 0x61, 0xf9, 0x2d, 0xf6, 0x04, 0x6f, 0x93, 0xbd, 0xe2, 0x1b, 0xad, 0x43, 0xcd, 0xa3, 0x71, 0x97, + 0xf9, 0x11, 0x17, 0x17, 0x52, 0xd9, 0x65, 0x6f, 0x21, 0x17, 0x2a, 0x8c, 0x7e, 0x30, 0xf4, 0x19, + 0xf5, 0x64, 0x86, 0x55, 0x70, 0xb2, 0x16, 0xb4, 0x50, 0xa2, 0x48, 0xbf, 0x51, 0x56, 0x34, 0xb3, + 0x16, 0xb4, 0x6e, 0x38, 0x88, 0x86, 0x9c, 0x7a, 0x8d, 0x05, 0x45, 0x33, 0x6b, 0xf4, 0x0a, 0x54, + 0x63, 0x1a, 0xc4, 0x3e, 0xf7, 0x4f, 0x69, 0x63, 0x51, 0x12, 0xd3, 0x0d, 0xf7, 0xd7, 0x05, 0xa8, + 0x59, 0xb7, 0x44, 0x2f, 0x43, 0x55, 0xe8, 0x6a, 0xa5, 0x09, 0xae, 0x88, 0x0d, 0x99, 0x1f, 0x2f, + 0xe6, 0x46, 0xb4, 0x07, 0x8b, 0x01, 0x8d, 0xb9, 0xc8, 0xa1, 0xa2, 0xac, 0x4e, 0xaf, 0xcd, 0xb5, + 0xb0, 0xfc, 0xf6, 0x83, 0xde, 0xfd, 0xd0, 0xa3, 0xd8, 0x9c, 0x14, 0x0a, 0x0d, 0xfc, 0xa0, 0xe3, + 0x73, 0x3a, 0x88, 0xa5, 0x4d, 0x8a, 0xb8, 0x32, 0xf0, 0x83, 0x43, 0xb1, 0x96, 0x44, 0x72, 0xa6, + 0x89, 0x65, 0x4d, 0x24, 0x67, 0x92, 0xd8, 0xbc, 0xaf, 0x6e, 0xa6, 0x39, 0x8e, 0x97, 0x1e, 0x80, + 0x85, 0xf6, 0xe1, 0xd1, 0xc1, 0xbd, 0xfd, 0xba, 0x83, 0x2a, 0x50, 0xba, 0x77, 0xd8, 0x7e, 0x50, + 0x2f, 0xa0, 0x45, 0x28, 0xb6, 0xf7, 0x1f, 0xd4, 0x8b, 0xe2, 0xe3, 0xfe, 0xee, 0x71, 0xbd, 0x24, + 0x4a, 0xd4, 0x01, 0x7e, 0xef, 0xe1, 0x71, 0xbd, 0xdc, 0xfc, 0x4b, 0x09, 0xd6, 0x0e, 0x28, 0x3f, + 0x66, 0xe1, 0xa9, 0xef, 0x51, 0xa6, 0xf4, 0xb7, 0x93, 0xf8, 0x37, 0x25, 0x2b, 0x8b, 0x6f, 0x40, + 0x25, 0xd2, 0x48, 0x69, 0xc6, 0xda, 0xd6, 0xda, 0xd4, 0xe5, 0x71, 0x02, 0x41, 0x14, 0xea, 0x8c, + 0xc6, 0xe1, 0x90, 0x75, 0x69, 0x27, 0x96, 0x44, 0x13, 0xd3, 0xdb, 0xd6, 0xb1, 0x29, 0xf1, 0x2d, + 0x23, 0x4f, 0x7c, 0xc8, 0xd3, 0x6a, 0x3f, 0x56, 0x09, 0xbe, 0xca, 0xc6, 0x77, 0x51, 0x1f, 0xae, + 0x7a, 0x84, 0x93, 0xce, 0x84, 0x24, 0x15, 0xff, 0x3b, 0xf9, 0x24, 0xdd, 0x21, 0x9c, 0xb4, 0xa7, + 0x65, 0xad, 0x79, 0x93, 0xfb, 0xe8, 0x2d, 0xa8, 0x79, 0xc9, 0x1b, 0x24, 0x9c, 0x27, 0xa4, 0xbc, + 0x94, 0xf9, 0x42, 0x61, 0x1b, 0x89, 0x6e, 0xc3, 0xb2, 0xb1, 0x4c, 0x67, 0x40, 0x39, 0x91, 0xae, + 0xcd, 0xb4, 0xe0, 0x92, 0xc1, 0xdd, 0xa7, 0x9c, 0xb8, 0x0f, 0xe1, 0x5a, 0x96, 0x1d, 0x32, 0xea, + 0xd9, 0x86, 0x5d, 0xcf, 0x32, 0x39, 0xa7, 0x25, 0xce, 0x7d, 0x0c, 0xd7, 0xb3, 0x2f, 0x7d, 0x49, + 0xc6, 0xcd, 0xbf, 0x3a, 0xf0, 0xd2, 0x31, 0xa3, 0x11, 0x61, 0xd4, 0x58, 0x7b, 0x2f, 0x0c, 0x4e, + 0xfc, 0x9e, 0xbb, 0x9d, 0x84, 0x15, 0xba, 0x09, 0x0b, 0x5d, 0xb9, 0xa9, 0xe3, 0xc8, 0xce, 0x3a, + 0xbb, 0x95, 0xc0, 0x1a, 0xe6, 0x7e, 0xd7, 0xb1, 0xe2, 0xf0, 0xcb, 0xb0, 0x1a, 0x29, 0x09, 0x5e, + 0x27, 0x1f, 0x9b, 0x15, 0x83, 0x57, 0xaa, 0x4c, 0x7a, 0xb1, 0x90, 0xd7, 0x8b, 0xcd, 0xef, 0x17, + 0xe0, 0xda, 0xc3, 0xa8, 0xc7, 0x88, 0x47, 0x13, 0xaf, 0x88, 0x47, 0xc8, 0x65, 0xe9, 0xe5, 0xe6, + 0x96, 0x1b, 0xab, 0xf8, 0x17, 0xc6, 0x8b, 0xff, 0x9b, 0x50, 0x65, 0xe4, 0x79, 0x27, 0x16, 0xec, + 0x64, 0x6d, 0xa9, 0x6d, 0x5d, 0xcd, 0x78, 0xee, 0x70, 0x85, 0xe9, 0x2f, 0xf7, 0x3b, 0xb6, 0x51, + 0xde, 0x81, 0x95, 0xa1, 0x52, 0xcc, 0xd3, 0x3c, 0xce, 0xb1, 0xc9, 0xb2, 0x81, 0xab, 0xf7, 0xf7, + 0xc2, 0x26, 0xf9, 0xa3, 0x03, 0xee, 0x23, 0xd2, 0xf7, 0x3d, 0xa1, 0x9c, 0xb6, 0x89, 0x78, 0x51, + 0xb4, 0xd7, 0x1f, 0xe7, 0x34, 0x4c, 0x1a, 0x12, 0x85, 0x7c, 0x21, 0xb1, 0x67, 0x5d, 0x7e, 0x42, + 0x79, 0x27, 0xb7, 0xf2, 0xbf, 0x77, 0xa0, 0x61, 0x94, 0x4f, 0xf3, 0xe1, 0xff, 0x42, 0xf5, 0x3f, + 0x38, 0x50, 0x55, 0x8a, 0x0e, 0x19, 0x75, 0x7b, 0xa9, 0xae, 0xaf, 0xc3, 0x1a, 0xa7, 0x8c, 0x91, + 0x93, 0x90, 0x0d, 0x3a, 0x76, 0xa7, 0x51, 0xc5, 0xf5, 0x84, 0xf0, 0x48, 0x47, 0xdd, 0xff, 0x46, + 0xf7, 0x5f, 0x15, 0x60, 0x09, 0x53, 0xe2, 0x99, 0x78, 0x71, 0xbf, 0x9d, 0xd3, 0xd4, 0x3b, 0xb0, + 0xdc, 0x1d, 0x32, 0x26, 0xba, 0x53, 0x15, 0xe4, 0xe7, 0x68, 0xbd, 0xa4, 0xd1, 0x2a, 0xc6, 0x1b, + 0xb0, 0x18, 0x31, 0xff, 0xd4, 0x24, 0xd8, 0x12, 0x36, 0x4b, 0xf7, 0x87, 0x76, 0x2a, 0x7d, 0x1e, + 0xaa, 0x01, 0x7d, 0x9e, 0x2f, 0x8b, 0x2a, 0x01, 0x7d, 0x7e, 0xb9, 0x04, 0x9a, 0xad, 0x55, 0xf3, + 0xb7, 0x25, 0x40, 0xc7, 0x7d, 0x12, 0x18, 0x33, 0xed, 0x3d, 0x25, 0x41, 0x8f, 0xba, 0xff, 0x71, + 0x72, 0x5a, 0xeb, 0x6d, 0xa8, 0x45, 0xcc, 0x0f, 0x59, 0x3e, 0x5b, 0x81, 0xc4, 0xaa, 0xcb, 0xec, + 0x03, 0x8a, 0x58, 0x18, 0x85, 0x31, 0xf5, 0x3a, 0xa9, 0x2d, 0x8a, 0xf3, 0x19, 0xd4, 0xcd, 0x91, + 0x23, 0x63, 0x93, 0x34, 0xba, 0x4a, 0xb9, 0xa2, 0x0b, 0x7d, 0x5a, 0xbc, 0x92, 0x42, 0x63, 0x63, + 0x91, 0xb2, 0xb4, 0xc8, 0x92, 0xdc, 0x3c, 0xd6, 0xce, 0xfa, 0x79, 0xc1, 0x72, 0xd6, 0x0e, 0x2c, + 0x47, 0x7d, 0x12, 0x04, 0x79, 0xcb, 0xde, 0x92, 0x46, 0x2b, 0x05, 0xf7, 0x44, 0x8f, 0x22, 0x9b, + 0xd1, 0xb8, 0xc3, 0x68, 0xd4, 0x27, 0x5d, 0xaa, 0x3d, 0x37, 0x7b, 0x0c, 0x5c, 0x35, 0x27, 0xb0, + 0x3a, 0x80, 0x36, 0x60, 0xd5, 0xa8, 0x30, 0xee, 0xc8, 0x15, 0xbd, 0xad, 0x15, 0xbf, 0x78, 0xf3, + 0xf0, 0x06, 0xa0, 0x3e, 0xed, 0x91, 0xee, 0x48, 0x36, 0xf7, 0x9d, 0x78, 0x14, 0x73, 0x3a, 0xd0, + 0x1d, 0x73, 0x5d, 0x51, 0x44, 0xc9, 0x6d, 0xcb, 0xfd, 0xe6, 0x0f, 0x4a, 0x70, 0x75, 0x37, 0x8a, + 0xfa, 0xa3, 0x89, 0xb8, 0xf9, 0x5d, 0xe1, 0x23, 0x8f, 0x9b, 0x29, 0x6f, 0x14, 0x5f, 0xc4, 0x1b, + 0x2f, 0x1c, 0x2e, 0x19, 0x96, 0x2f, 0x67, 0x5a, 0x7e, 0x67, 0xb2, 0xfb, 0x5a, 0x38, 0x4f, 0x2f, + 0xbb, 0x07, 0xfb, 0xd3, 0xe5, 0xab, 0x83, 0x95, 0xe4, 0x85, 0xb1, 0x24, 0x9f, 0x0c, 0x8a, 0xe2, + 0x25, 0x83, 0xa2, 0x34, 0x23, 0x28, 0xfe, 0x5d, 0x80, 0xab, 0x87, 0x83, 0x28, 0x64, 0x7c, 0xbc, + 0x71, 0xb9, 0x9d, 0x33, 0x26, 0x56, 0xa0, 0xe0, 0x7b, 0x7a, 0x54, 0x2e, 0xf8, 0x9e, 0x7b, 0x06, + 0x75, 0xc5, 0x8e, 0x26, 0x55, 0xfc, 0xdc, 0x41, 0x2b, 0x57, 0x38, 0x29, 0xd4, 0x9c, 0x5a, 0xfd, + 0x4b, 0xdb, 0x1b, 0xef, 0x03, 0xf2, 0xb5, 0x1a, 0x1d, 0x33, 0x19, 0x98, 0x97, 0xe8, 0xa6, 0x25, + 0x22, 0xe3, 0xea, 0xad, 0x49, 0xfd, 0xf1, 0x9a, 0x3f, 0xb1, 0x13, 0x5f, 0xbc, 0x2d, 0xfa, 0xbb, + 0x03, 0x2b, 0xe2, 0x89, 0x4b, 0xbb, 0x8a, 0x8f, 0xae, 0x9f, 0x60, 0x63, 0x43, 0x5a, 0x39, 0x57, + 0x68, 0x6a, 0x33, 0x5f, 0xf8, 0x7e, 0x3f, 0x75, 0xe0, 0x9a, 0x99, 0xa8, 0x44, 0x27, 0x91, 0x35, + 0x3d, 0x9e, 0x59, 0x7a, 0xdd, 0x12, 0x35, 0x25, 0xc1, 0xce, 0x9e, 0x1f, 0x6d, 0xd4, 0xc5, 0xb5, + 0xfb, 0x99, 0x03, 0x1f, 0x37, 0x7d, 0x9d, 0xa5, 0xe2, 0x87, 0x30, 0x89, 0x7c, 0x28, 0xfd, 0xcf, + 0x3f, 0x1d, 0x58, 0x4b, 0xd4, 0x4a, 0x9a, 0xa0, 0xf8, 0xe2, 0x6a, 0xa1, 0xb7, 0x00, 0xba, 0x61, + 0x10, 0xd0, 0x2e, 0x37, 0xa3, 0xc5, 0xbc, 0x8a, 0x9d, 0x42, 0xdd, 0x6f, 0x58, 0xf7, 0xb9, 0x0e, + 0x0b, 0xe1, 0x90, 0x47, 0x43, 0xae, 0x43, 0x52, 0xaf, 0x2e, 0xec, 0x86, 0xad, 0x9f, 0x54, 0xa1, + 0x62, 0xa6, 0x40, 0xf4, 0x75, 0xa8, 0x1e, 0x50, 0xae, 0x7f, 0x57, 0xfb, 0xcc, 0x39, 0x83, 0xb9, + 0x0a, 0xa0, 0xcf, 0xe6, 0x1a, 0xdf, 0x51, 0x7f, 0xc6, 0xc8, 0x89, 0x36, 0xad, 0xf3, 0x99, 0x88, + 0x44, 0xd2, 0x6b, 0x39, 0x90, 0x5a, 0xda, 0xb7, 0xe6, 0xcd, 0x3b, 0xe8, 0x86, 0xc5, 0x68, 0x36, + 0x2c, 0x91, 0xdb, 0xca, 0x0b, 0xd7, 0xc2, 0x87, 0xb3, 0xe7, 0x15, 0xf4, 0x7a, 0x06, 0xaf, 0x49, + 0x50, 0x22, 0xf8, 0x8d, 0x7c, 0x60, 0x2d, 0xd6, 0xcf, 0x1e, 0x7b, 0xd1, 0x86, 0xc5, 0x25, 0x0b, + 0x90, 0x88, 0xdb, 0x3c, 0x1f, 0xa8, 0x45, 0xdd, 0xb5, 0xc6, 0x1a, 0xf4, 0x8a, 0x75, 0x2c, 0xd9, + 0x4d, 0x98, 0xbe, 0x3a, 0x83, 0xaa, 0x39, 0x7d, 0x6d, 0x7c, 0xc8, 0x40, 0x9f, 0xb4, 0xc7, 0x69, + 0x8b, 0x90, 0xf0, 0x5b, 0x9f, 0x0d, 0xd0, 0x2c, 0xbb, 0x59, 0x0d, 0x39, 0xb2, 0xc3, 0x74, 0x9a, + 0x9c, 0xb0, 0xff, 0xdc, 0x79, 0x30, 0x2d, 0xe4, 0x24, 0xb3, 0x7d, 0x43, 0xf6, 0xf1, 0x0c, 0x7a, + 0x22, 0x66, 0xe3, 0x5c, 0x5c, 0x2a, 0x27, 0xe3, 0x59, 0x1c, 0x93, 0x93, 0xf5, 0x6c, 0x66, 0xc9, + 0xc9, 0xc6, 0x69, 0x39, 0x8f, 0x27, 0x5f, 0x42, 0xf4, 0xa9, 0x09, 0x43, 0xa7, 0xa4, 0x84, 0x7b, + 0x73, 0x1e, 0x44, 0x33, 0xfe, 0xa2, 0xfa, 0xd7, 0x01, 0x8d, 0xfd, 0x68, 0xcb, 0xc3, 0x28, 0x61, + 0xd2, 0x98, 0x26, 0xa8, 0xa3, 0x5b, 0xdf, 0x2b, 0x42, 0xcd, 0x7a, 0x18, 0xd0, 0xfb, 0x76, 0x71, + 0xda, 0xc8, 0x28, 0x3b, 0xf6, 0x1b, 0x97, 0x19, 0xd5, 0x33, 0x80, 0x5a, 0xd5, 0xb3, 0x39, 0xef, + 0x11, 0xca, 0xca, 0xc5, 0x29, 0x54, 0x22, 0xf4, 0x46, 0x4e, 0xb4, 0x96, 0xfc, 0x24, 0xe3, 0xa9, + 0x19, 0x2b, 0xbf, 0x53, 0xd4, 0xcc, 0xf2, 0x9b, 0x85, 0x52, 0x12, 0xde, 0x74, 0x2e, 0xe1, 0x88, + 0x27, 0x0b, 0xf2, 0xef, 0xc4, 0x5b, 0xff, 0x0d, 0x00, 0x00, 0xff, 0xff, 0xfa, 0x78, 0xd7, 0x8b, + 0x61, 0x1c, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -2906,21 +2855,21 @@ const _ = grpc.SupportPackageIsVersion4 // // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. type ProviderClient interface { - // ////// Information about what a provider supports/expects + //////// Information about what a provider supports/expects GetSchema(ctx context.Context, in *GetProviderSchema_Request, opts ...grpc.CallOption) (*GetProviderSchema_Response, error) PrepareProviderConfig(ctx context.Context, in *PrepareProviderConfig_Request, opts ...grpc.CallOption) (*PrepareProviderConfig_Response, error) ValidateResourceTypeConfig(ctx context.Context, in *ValidateResourceTypeConfig_Request, opts ...grpc.CallOption) (*ValidateResourceTypeConfig_Response, error) ValidateDataSourceConfig(ctx context.Context, in *ValidateDataSourceConfig_Request, opts ...grpc.CallOption) (*ValidateDataSourceConfig_Response, error) UpgradeResourceState(ctx context.Context, in *UpgradeResourceState_Request, opts ...grpc.CallOption) (*UpgradeResourceState_Response, error) - // ////// One-time initialization, called before other functions below + //////// One-time initialization, called before other functions below Configure(ctx context.Context, in *Configure_Request, opts ...grpc.CallOption) (*Configure_Response, error) - // ////// Managed Resource Lifecycle + //////// Managed Resource Lifecycle ReadResource(ctx context.Context, in *ReadResource_Request, opts ...grpc.CallOption) (*ReadResource_Response, error) PlanResourceChange(ctx context.Context, in *PlanResourceChange_Request, opts ...grpc.CallOption) (*PlanResourceChange_Response, error) ApplyResourceChange(ctx context.Context, in *ApplyResourceChange_Request, opts ...grpc.CallOption) (*ApplyResourceChange_Response, error) ImportResourceState(ctx context.Context, in *ImportResourceState_Request, opts ...grpc.CallOption) (*ImportResourceState_Response, error) ReadDataSource(ctx context.Context, in *ReadDataSource_Request, opts ...grpc.CallOption) (*ReadDataSource_Response, error) - // ////// Graceful Shutdown + //////// Graceful Shutdown Stop(ctx context.Context, in *Stop_Request, opts ...grpc.CallOption) (*Stop_Response, error) } @@ -3042,24 +2991,65 @@ func (c *providerClient) Stop(ctx context.Context, in *Stop_Request, opts ...grp // ProviderServer is the server API for Provider service. type ProviderServer interface { - // ////// Information about what a provider supports/expects + //////// Information about what a provider supports/expects GetSchema(context.Context, *GetProviderSchema_Request) (*GetProviderSchema_Response, error) PrepareProviderConfig(context.Context, *PrepareProviderConfig_Request) (*PrepareProviderConfig_Response, error) ValidateResourceTypeConfig(context.Context, *ValidateResourceTypeConfig_Request) (*ValidateResourceTypeConfig_Response, error) ValidateDataSourceConfig(context.Context, *ValidateDataSourceConfig_Request) (*ValidateDataSourceConfig_Response, error) UpgradeResourceState(context.Context, *UpgradeResourceState_Request) (*UpgradeResourceState_Response, error) - // ////// One-time initialization, called before other functions below + //////// One-time initialization, called before other functions below Configure(context.Context, *Configure_Request) (*Configure_Response, error) - // ////// Managed Resource Lifecycle + //////// Managed Resource Lifecycle ReadResource(context.Context, *ReadResource_Request) (*ReadResource_Response, error) PlanResourceChange(context.Context, *PlanResourceChange_Request) (*PlanResourceChange_Response, error) ApplyResourceChange(context.Context, *ApplyResourceChange_Request) (*ApplyResourceChange_Response, error) ImportResourceState(context.Context, *ImportResourceState_Request) (*ImportResourceState_Response, error) ReadDataSource(context.Context, *ReadDataSource_Request) (*ReadDataSource_Response, error) - // ////// Graceful Shutdown + //////// Graceful Shutdown Stop(context.Context, *Stop_Request) (*Stop_Response, error) } +// UnimplementedProviderServer can be embedded to have forward compatible implementations. +type UnimplementedProviderServer struct { +} + +func (*UnimplementedProviderServer) GetSchema(ctx context.Context, req *GetProviderSchema_Request) (*GetProviderSchema_Response, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetSchema not implemented") +} +func (*UnimplementedProviderServer) PrepareProviderConfig(ctx context.Context, req *PrepareProviderConfig_Request) (*PrepareProviderConfig_Response, error) { + return nil, status.Errorf(codes.Unimplemented, "method PrepareProviderConfig not implemented") +} +func (*UnimplementedProviderServer) ValidateResourceTypeConfig(ctx context.Context, req *ValidateResourceTypeConfig_Request) (*ValidateResourceTypeConfig_Response, error) { + return nil, status.Errorf(codes.Unimplemented, "method ValidateResourceTypeConfig not implemented") +} +func (*UnimplementedProviderServer) ValidateDataSourceConfig(ctx context.Context, req *ValidateDataSourceConfig_Request) (*ValidateDataSourceConfig_Response, error) { + return nil, status.Errorf(codes.Unimplemented, "method ValidateDataSourceConfig not implemented") +} +func (*UnimplementedProviderServer) UpgradeResourceState(ctx context.Context, req *UpgradeResourceState_Request) (*UpgradeResourceState_Response, error) { + return nil, status.Errorf(codes.Unimplemented, "method UpgradeResourceState not implemented") +} +func (*UnimplementedProviderServer) Configure(ctx context.Context, req *Configure_Request) (*Configure_Response, error) { + return nil, status.Errorf(codes.Unimplemented, "method Configure not implemented") +} +func (*UnimplementedProviderServer) ReadResource(ctx context.Context, req *ReadResource_Request) (*ReadResource_Response, error) { + return nil, status.Errorf(codes.Unimplemented, "method ReadResource not implemented") +} +func (*UnimplementedProviderServer) PlanResourceChange(ctx context.Context, req *PlanResourceChange_Request) (*PlanResourceChange_Response, error) { + return nil, status.Errorf(codes.Unimplemented, "method PlanResourceChange not implemented") +} +func (*UnimplementedProviderServer) ApplyResourceChange(ctx context.Context, req *ApplyResourceChange_Request) (*ApplyResourceChange_Response, error) { + return nil, status.Errorf(codes.Unimplemented, "method ApplyResourceChange not implemented") +} +func (*UnimplementedProviderServer) ImportResourceState(ctx context.Context, req *ImportResourceState_Request) (*ImportResourceState_Response, error) { + return nil, status.Errorf(codes.Unimplemented, "method ImportResourceState not implemented") +} +func (*UnimplementedProviderServer) ReadDataSource(ctx context.Context, req *ReadDataSource_Request) (*ReadDataSource_Response, error) { + return nil, status.Errorf(codes.Unimplemented, "method ReadDataSource not implemented") +} +func (*UnimplementedProviderServer) Stop(ctx context.Context, req *Stop_Request) (*Stop_Response, error) { + return nil, status.Errorf(codes.Unimplemented, "method Stop not implemented") +} + func RegisterProviderServer(s *grpc.Server, srv ProviderServer) { s.RegisterService(&_Provider_serviceDesc, srv) } @@ -3422,6 +3412,23 @@ type ProvisionerServer interface { Stop(context.Context, *Stop_Request) (*Stop_Response, error) } +// UnimplementedProvisionerServer can be embedded to have forward compatible implementations. +type UnimplementedProvisionerServer struct { +} + +func (*UnimplementedProvisionerServer) GetSchema(ctx context.Context, req *GetProvisionerSchema_Request) (*GetProvisionerSchema_Response, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetSchema not implemented") +} +func (*UnimplementedProvisionerServer) ValidateProvisionerConfig(ctx context.Context, req *ValidateProvisionerConfig_Request) (*ValidateProvisionerConfig_Response, error) { + return nil, status.Errorf(codes.Unimplemented, "method ValidateProvisionerConfig not implemented") +} +func (*UnimplementedProvisionerServer) ProvisionResource(req *ProvisionResource_Request, srv Provisioner_ProvisionResourceServer) error { + return status.Errorf(codes.Unimplemented, "method ProvisionResource not implemented") +} +func (*UnimplementedProvisionerServer) Stop(ctx context.Context, req *Stop_Request) (*Stop_Response, error) { + return nil, status.Errorf(codes.Unimplemented, "method Stop not implemented") +} + func RegisterProvisionerServer(s *grpc.Server, srv ProvisionerServer) { s.RegisterService(&_Provisioner_serviceDesc, srv) } diff --git a/internal/tfplugin5/tfplugin5.proto b/internal/tfplugin5/tfplugin5.proto index 0837e1d4aa43..2c3d0a477912 120000 --- a/internal/tfplugin5/tfplugin5.proto +++ b/internal/tfplugin5/tfplugin5.proto @@ -1 +1 @@ -../../docs/plugin-protocol/tfplugin5.1.proto \ No newline at end of file +../../docs/plugin-protocol/tfplugin5.2.proto \ No newline at end of file diff --git a/plans/internal/planproto/planfile.pb.go b/plans/internal/planproto/planfile.pb.go index 6feb09302e2f..950d08262705 100644 --- a/plans/internal/planproto/planfile.pb.go +++ b/plans/internal/planproto/planfile.pb.go @@ -1,11 +1,13 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // source: planfile.proto -package planproto // import "github.com/hashicorp/terraform/plans/internal/planproto" +package planproto -import proto "github.com/golang/protobuf/proto" -import fmt "fmt" -import math "math" +import ( + fmt "fmt" + proto "github.com/golang/protobuf/proto" + math "math" +) // Reference imports to suppress errors if they are not otherwise used. var _ = proto.Marshal @@ -16,7 +18,7 @@ var _ = math.Inf // is compatible with the proto package it is being compiled against. // A compilation error at this line likely means your copy of the // proto package needs to be updated. -const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package +const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package // Action describes the type of action planned for an object. // Not all action values are valid for all object types. @@ -41,6 +43,7 @@ var Action_name = map[int32]string{ 6: "DELETE_THEN_CREATE", 7: "CREATE_THEN_DELETE", } + var Action_value = map[string]int32{ "NOOP": 0, "CREATE": 1, @@ -54,8 +57,9 @@ var Action_value = map[string]int32{ func (x Action) String() string { return proto.EnumName(Action_name, int32(x)) } + func (Action) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_planfile_f1de017ed03cb7aa, []int{0} + return fileDescriptor_02431083a6706c5b, []int{0} } type ResourceInstanceChange_ResourceMode int32 @@ -69,6 +73,7 @@ var ResourceInstanceChange_ResourceMode_name = map[int32]string{ 0: "managed", 1: "data", } + var ResourceInstanceChange_ResourceMode_value = map[string]int32{ "managed": 0, "data": 1, @@ -77,8 +82,9 @@ var ResourceInstanceChange_ResourceMode_value = map[string]int32{ func (x ResourceInstanceChange_ResourceMode) String() string { return proto.EnumName(ResourceInstanceChange_ResourceMode_name, int32(x)) } + func (ResourceInstanceChange_ResourceMode) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_planfile_f1de017ed03cb7aa, []int{3, 0} + return fileDescriptor_02431083a6706c5b, []int{3, 0} } // Plan is the root message type for the tfplan file @@ -125,16 +131,17 @@ func (m *Plan) Reset() { *m = Plan{} } func (m *Plan) String() string { return proto.CompactTextString(m) } func (*Plan) ProtoMessage() {} func (*Plan) Descriptor() ([]byte, []int) { - return fileDescriptor_planfile_f1de017ed03cb7aa, []int{0} + return fileDescriptor_02431083a6706c5b, []int{0} } + func (m *Plan) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Plan.Unmarshal(m, b) } func (m *Plan) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_Plan.Marshal(b, m, deterministic) } -func (dst *Plan) XXX_Merge(src proto.Message) { - xxx_messageInfo_Plan.Merge(dst, src) +func (m *Plan) XXX_Merge(src proto.Message) { + xxx_messageInfo_Plan.Merge(m, src) } func (m *Plan) XXX_Size() int { return xxx_messageInfo_Plan.Size(m) @@ -215,16 +222,17 @@ func (m *Backend) Reset() { *m = Backend{} } func (m *Backend) String() string { return proto.CompactTextString(m) } func (*Backend) ProtoMessage() {} func (*Backend) Descriptor() ([]byte, []int) { - return fileDescriptor_planfile_f1de017ed03cb7aa, []int{1} + return fileDescriptor_02431083a6706c5b, []int{1} } + func (m *Backend) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Backend.Unmarshal(m, b) } func (m *Backend) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_Backend.Marshal(b, m, deterministic) } -func (dst *Backend) XXX_Merge(src proto.Message) { - xxx_messageInfo_Backend.Merge(dst, src) +func (m *Backend) XXX_Merge(src proto.Message) { + xxx_messageInfo_Backend.Merge(m, src) } func (m *Backend) XXX_Size() int { return xxx_messageInfo_Backend.Size(m) @@ -281,16 +289,17 @@ func (m *Change) Reset() { *m = Change{} } func (m *Change) String() string { return proto.CompactTextString(m) } func (*Change) ProtoMessage() {} func (*Change) Descriptor() ([]byte, []int) { - return fileDescriptor_planfile_f1de017ed03cb7aa, []int{2} + return fileDescriptor_02431083a6706c5b, []int{2} } + func (m *Change) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Change.Unmarshal(m, b) } func (m *Change) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_Change.Marshal(b, m, deterministic) } -func (dst *Change) XXX_Merge(src proto.Message) { - xxx_messageInfo_Change.Merge(dst, src) +func (m *Change) XXX_Merge(src proto.Message) { + xxx_messageInfo_Change.Merge(m, src) } func (m *Change) XXX_Size() int { return xxx_messageInfo_Change.Size(m) @@ -367,16 +376,17 @@ func (m *ResourceInstanceChange) Reset() { *m = ResourceInstanceChange{} func (m *ResourceInstanceChange) String() string { return proto.CompactTextString(m) } func (*ResourceInstanceChange) ProtoMessage() {} func (*ResourceInstanceChange) Descriptor() ([]byte, []int) { - return fileDescriptor_planfile_f1de017ed03cb7aa, []int{3} + return fileDescriptor_02431083a6706c5b, []int{3} } + func (m *ResourceInstanceChange) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ResourceInstanceChange.Unmarshal(m, b) } func (m *ResourceInstanceChange) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_ResourceInstanceChange.Marshal(b, m, deterministic) } -func (dst *ResourceInstanceChange) XXX_Merge(src proto.Message) { - xxx_messageInfo_ResourceInstanceChange.Merge(dst, src) +func (m *ResourceInstanceChange) XXX_Merge(src proto.Message) { + xxx_messageInfo_ResourceInstanceChange.Merge(m, src) } func (m *ResourceInstanceChange) XXX_Size() int { return xxx_messageInfo_ResourceInstanceChange.Size(m) @@ -387,27 +397,6 @@ func (m *ResourceInstanceChange) XXX_DiscardUnknown() { var xxx_messageInfo_ResourceInstanceChange proto.InternalMessageInfo -type isResourceInstanceChange_InstanceKey interface { - isResourceInstanceChange_InstanceKey() -} - -type ResourceInstanceChange_Str struct { - Str string `protobuf:"bytes,5,opt,name=str,proto3,oneof"` -} -type ResourceInstanceChange_Int struct { - Int int64 `protobuf:"varint,6,opt,name=int,proto3,oneof"` -} - -func (*ResourceInstanceChange_Str) isResourceInstanceChange_InstanceKey() {} -func (*ResourceInstanceChange_Int) isResourceInstanceChange_InstanceKey() {} - -func (m *ResourceInstanceChange) GetInstanceKey() isResourceInstanceChange_InstanceKey { - if m != nil { - return m.InstanceKey - } - return nil -} - func (m *ResourceInstanceChange) GetModulePath() string { if m != nil { return m.ModulePath @@ -436,6 +425,29 @@ func (m *ResourceInstanceChange) GetName() string { return "" } +type isResourceInstanceChange_InstanceKey interface { + isResourceInstanceChange_InstanceKey() +} + +type ResourceInstanceChange_Str struct { + Str string `protobuf:"bytes,5,opt,name=str,proto3,oneof"` +} + +type ResourceInstanceChange_Int struct { + Int int64 `protobuf:"varint,6,opt,name=int,proto3,oneof"` +} + +func (*ResourceInstanceChange_Str) isResourceInstanceChange_InstanceKey() {} + +func (*ResourceInstanceChange_Int) isResourceInstanceChange_InstanceKey() {} + +func (m *ResourceInstanceChange) GetInstanceKey() isResourceInstanceChange_InstanceKey { + if m != nil { + return m.InstanceKey + } + return nil +} + func (m *ResourceInstanceChange) GetStr() string { if x, ok := m.GetInstanceKey().(*ResourceInstanceChange_Str); ok { return x.Str @@ -485,71 +497,14 @@ func (m *ResourceInstanceChange) GetRequiredReplace() []*Path { return nil } -// XXX_OneofFuncs is for the internal use of the proto package. -func (*ResourceInstanceChange) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { - return _ResourceInstanceChange_OneofMarshaler, _ResourceInstanceChange_OneofUnmarshaler, _ResourceInstanceChange_OneofSizer, []interface{}{ +// XXX_OneofWrappers is for the internal use of the proto package. +func (*ResourceInstanceChange) XXX_OneofWrappers() []interface{} { + return []interface{}{ (*ResourceInstanceChange_Str)(nil), (*ResourceInstanceChange_Int)(nil), } } -func _ResourceInstanceChange_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { - m := msg.(*ResourceInstanceChange) - // instance_key - switch x := m.InstanceKey.(type) { - case *ResourceInstanceChange_Str: - b.EncodeVarint(5<<3 | proto.WireBytes) - b.EncodeStringBytes(x.Str) - case *ResourceInstanceChange_Int: - b.EncodeVarint(6<<3 | proto.WireVarint) - b.EncodeVarint(uint64(x.Int)) - case nil: - default: - return fmt.Errorf("ResourceInstanceChange.InstanceKey has unexpected type %T", x) - } - return nil -} - -func _ResourceInstanceChange_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { - m := msg.(*ResourceInstanceChange) - switch tag { - case 5: // instance_key.str - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - x, err := b.DecodeStringBytes() - m.InstanceKey = &ResourceInstanceChange_Str{x} - return true, err - case 6: // instance_key.int - if wire != proto.WireVarint { - return true, proto.ErrInternalBadWireType - } - x, err := b.DecodeVarint() - m.InstanceKey = &ResourceInstanceChange_Int{int64(x)} - return true, err - default: - return false, nil - } -} - -func _ResourceInstanceChange_OneofSizer(msg proto.Message) (n int) { - m := msg.(*ResourceInstanceChange) - // instance_key - switch x := m.InstanceKey.(type) { - case *ResourceInstanceChange_Str: - n += 1 // tag and wire - n += proto.SizeVarint(uint64(len(x.Str))) - n += len(x.Str) - case *ResourceInstanceChange_Int: - n += 1 // tag and wire - n += proto.SizeVarint(uint64(x.Int)) - case nil: - default: - panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) - } - return n -} - type OutputChange struct { // Name of the output as defined in the root module. Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` @@ -569,16 +524,17 @@ func (m *OutputChange) Reset() { *m = OutputChange{} } func (m *OutputChange) String() string { return proto.CompactTextString(m) } func (*OutputChange) ProtoMessage() {} func (*OutputChange) Descriptor() ([]byte, []int) { - return fileDescriptor_planfile_f1de017ed03cb7aa, []int{4} + return fileDescriptor_02431083a6706c5b, []int{4} } + func (m *OutputChange) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OutputChange.Unmarshal(m, b) } func (m *OutputChange) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_OutputChange.Marshal(b, m, deterministic) } -func (dst *OutputChange) XXX_Merge(src proto.Message) { - xxx_messageInfo_OutputChange.Merge(dst, src) +func (m *OutputChange) XXX_Merge(src proto.Message) { + xxx_messageInfo_OutputChange.Merge(m, src) } func (m *OutputChange) XXX_Size() int { return xxx_messageInfo_OutputChange.Size(m) @@ -633,16 +589,17 @@ 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_planfile_f1de017ed03cb7aa, []int{5} + return fileDescriptor_02431083a6706c5b, []int{5} } + func (m *DynamicValue) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DynamicValue.Unmarshal(m, b) } func (m *DynamicValue) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_DynamicValue.Marshal(b, m, deterministic) } -func (dst *DynamicValue) XXX_Merge(src proto.Message) { - xxx_messageInfo_DynamicValue.Merge(dst, src) +func (m *DynamicValue) XXX_Merge(src proto.Message) { + xxx_messageInfo_DynamicValue.Merge(m, src) } func (m *DynamicValue) XXX_Size() int { return xxx_messageInfo_DynamicValue.Size(m) @@ -679,16 +636,17 @@ func (m *Hash) Reset() { *m = Hash{} } func (m *Hash) String() string { return proto.CompactTextString(m) } func (*Hash) ProtoMessage() {} func (*Hash) Descriptor() ([]byte, []int) { - return fileDescriptor_planfile_f1de017ed03cb7aa, []int{6} + return fileDescriptor_02431083a6706c5b, []int{6} } + func (m *Hash) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Hash.Unmarshal(m, b) } func (m *Hash) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_Hash.Marshal(b, m, deterministic) } -func (dst *Hash) XXX_Merge(src proto.Message) { - xxx_messageInfo_Hash.Merge(dst, src) +func (m *Hash) XXX_Merge(src proto.Message) { + xxx_messageInfo_Hash.Merge(m, src) } func (m *Hash) XXX_Size() int { return xxx_messageInfo_Hash.Size(m) @@ -720,16 +678,17 @@ func (m *Path) Reset() { *m = Path{} } func (m *Path) String() string { return proto.CompactTextString(m) } func (*Path) ProtoMessage() {} func (*Path) Descriptor() ([]byte, []int) { - return fileDescriptor_planfile_f1de017ed03cb7aa, []int{7} + return fileDescriptor_02431083a6706c5b, []int{7} } + func (m *Path) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Path.Unmarshal(m, b) } func (m *Path) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_Path.Marshal(b, m, deterministic) } -func (dst *Path) XXX_Merge(src proto.Message) { - xxx_messageInfo_Path.Merge(dst, src) +func (m *Path) XXX_Merge(src proto.Message) { + xxx_messageInfo_Path.Merge(m, src) } func (m *Path) XXX_Size() int { return xxx_messageInfo_Path.Size(m) @@ -761,16 +720,17 @@ func (m *Path_Step) Reset() { *m = Path_Step{} } func (m *Path_Step) String() string { return proto.CompactTextString(m) } func (*Path_Step) ProtoMessage() {} func (*Path_Step) Descriptor() ([]byte, []int) { - return fileDescriptor_planfile_f1de017ed03cb7aa, []int{7, 0} + return fileDescriptor_02431083a6706c5b, []int{7, 0} } + func (m *Path_Step) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Path_Step.Unmarshal(m, b) } func (m *Path_Step) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_Path_Step.Marshal(b, m, deterministic) } -func (dst *Path_Step) XXX_Merge(src proto.Message) { - xxx_messageInfo_Path_Step.Merge(dst, src) +func (m *Path_Step) XXX_Merge(src proto.Message) { + xxx_messageInfo_Path_Step.Merge(m, src) } func (m *Path_Step) XXX_Size() int { return xxx_messageInfo_Path_Step.Size(m) @@ -788,12 +748,14 @@ type isPath_Step_Selector interface { type Path_Step_AttributeName struct { AttributeName string `protobuf:"bytes,1,opt,name=attribute_name,json=attributeName,proto3,oneof"` } + type Path_Step_ElementKey struct { ElementKey *DynamicValue `protobuf:"bytes,2,opt,name=element_key,json=elementKey,proto3,oneof"` } func (*Path_Step_AttributeName) isPath_Step_Selector() {} -func (*Path_Step_ElementKey) isPath_Step_Selector() {} + +func (*Path_Step_ElementKey) isPath_Step_Selector() {} func (m *Path_Step) GetSelector() isPath_Step_Selector { if m != nil { @@ -816,77 +778,17 @@ func (m *Path_Step) GetElementKey() *DynamicValue { return nil } -// XXX_OneofFuncs is for the internal use of the proto package. -func (*Path_Step) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { - return _Path_Step_OneofMarshaler, _Path_Step_OneofUnmarshaler, _Path_Step_OneofSizer, []interface{}{ +// XXX_OneofWrappers is for the internal use of the proto package. +func (*Path_Step) XXX_OneofWrappers() []interface{} { + return []interface{}{ (*Path_Step_AttributeName)(nil), (*Path_Step_ElementKey)(nil), } } -func _Path_Step_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { - m := msg.(*Path_Step) - // selector - switch x := m.Selector.(type) { - case *Path_Step_AttributeName: - b.EncodeVarint(1<<3 | proto.WireBytes) - b.EncodeStringBytes(x.AttributeName) - case *Path_Step_ElementKey: - b.EncodeVarint(2<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.ElementKey); err != nil { - return err - } - case nil: - default: - return fmt.Errorf("Path_Step.Selector has unexpected type %T", x) - } - return nil -} - -func _Path_Step_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { - m := msg.(*Path_Step) - switch tag { - case 1: // selector.attribute_name - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - x, err := b.DecodeStringBytes() - m.Selector = &Path_Step_AttributeName{x} - return true, err - case 2: // selector.element_key - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(DynamicValue) - err := b.DecodeMessage(msg) - m.Selector = &Path_Step_ElementKey{msg} - return true, err - default: - return false, nil - } -} - -func _Path_Step_OneofSizer(msg proto.Message) (n int) { - m := msg.(*Path_Step) - // selector - switch x := m.Selector.(type) { - case *Path_Step_AttributeName: - n += 1 // tag and wire - n += proto.SizeVarint(uint64(len(x.AttributeName))) - n += len(x.AttributeName) - case *Path_Step_ElementKey: - s := proto.Size(x.ElementKey) - n += 1 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case nil: - default: - panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) - } - return n -} - func init() { + proto.RegisterEnum("tfplan.Action", Action_name, Action_value) + proto.RegisterEnum("tfplan.ResourceInstanceChange_ResourceMode", ResourceInstanceChange_ResourceMode_name, ResourceInstanceChange_ResourceMode_value) proto.RegisterType((*Plan)(nil), "tfplan.Plan") proto.RegisterMapType((map[string]*Hash)(nil), "tfplan.Plan.ProviderHashesEntry") proto.RegisterMapType((map[string]*DynamicValue)(nil), "tfplan.Plan.VariablesEntry") @@ -898,13 +800,11 @@ func init() { proto.RegisterType((*Hash)(nil), "tfplan.Hash") proto.RegisterType((*Path)(nil), "tfplan.Path") proto.RegisterType((*Path_Step)(nil), "tfplan.Path.Step") - proto.RegisterEnum("tfplan.Action", Action_name, Action_value) - proto.RegisterEnum("tfplan.ResourceInstanceChange_ResourceMode", ResourceInstanceChange_ResourceMode_name, ResourceInstanceChange_ResourceMode_value) } -func init() { proto.RegisterFile("planfile.proto", fileDescriptor_planfile_f1de017ed03cb7aa) } +func init() { proto.RegisterFile("planfile.proto", fileDescriptor_02431083a6706c5b) } -var fileDescriptor_planfile_f1de017ed03cb7aa = []byte{ +var fileDescriptor_02431083a6706c5b = []byte{ // 893 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x55, 0xe1, 0x6e, 0xe3, 0x44, 0x10, 0xae, 0x63, 0xc7, 0x49, 0x26, 0xa9, 0x9b, 0x5b, 0x50, 0x65, 0x95, 0xd3, 0x11, 0x2c, 0xc1, diff --git a/plugin/grpc_provider.go b/plugin/grpc_provider.go index 5b190e2c187b..b3bf62c5e19e 100644 --- a/plugin/grpc_provider.go +++ b/plugin/grpc_provider.go @@ -106,6 +106,13 @@ func (p *GRPCProvider) getDatasourceSchema(name string) providers.Schema { return dataSchema } +// getProviderMetaSchema is a helper to extract the schema for the meta info +// defined for a provider, +func (p *GRPCProvider) getProviderMetaSchema() providers.Schema { + schema := p.getSchema() + return schema.ProviderMeta +} + func (p *GRPCProvider) GetSchema() (resp providers.GetSchemaResponse) { log.Printf("[TRACE] GRPCProvider: GetSchema") p.mu.Lock() @@ -138,6 +145,11 @@ func (p *GRPCProvider) GetSchema() (resp providers.GetSchemaResponse) { } resp.Provider = convert.ProtoToProviderSchema(protoResp.Provider) + if protoResp.ProviderMeta == nil { + log.Printf("[TRACE] No provider meta schema returned") + } else { + resp.ProviderMeta = convert.ProtoToProviderSchema(protoResp.ProviderMeta) + } for name, res := range protoResp.ResourceSchemas { resp.ResourceTypes[name] = convert.ProtoToProviderSchema(res) @@ -417,6 +429,7 @@ func (p *GRPCProvider) ApplyResourceChange(r providers.ApplyResourceChangeReques log.Printf("[TRACE] GRPCProvider: ApplyResourceChange") resSchema := p.getResourceSchema(r.TypeName) + metaSchema := p.getProviderMetaSchema() priorMP, err := msgpack.Marshal(r.PriorState, resSchema.Block.ImpliedType()) if err != nil { @@ -442,6 +455,15 @@ func (p *GRPCProvider) ApplyResourceChange(r providers.ApplyResourceChangeReques PlannedPrivate: r.PlannedPrivate, } + if metaSchema.Block != nil { + metaMP, err := msgpack.Marshal(r.ProviderMeta, metaSchema.Block.ImpliedType()) + if err != nil { + resp.Diagnostics = resp.Diagnostics.Append(err) + return resp + } + protoReq.ProviderMeta = &proto.DynamicValue{Msgpack: metaMP} + } + protoResp, err := p.client.ApplyResourceChange(p.ctx, protoReq) if err != nil { resp.Diagnostics = resp.Diagnostics.Append(err) diff --git a/providers/provider.go b/providers/provider.go index 7e0a74c58e96..d7a61d46e04c 100644 --- a/providers/provider.go +++ b/providers/provider.go @@ -73,6 +73,9 @@ type GetSchemaResponse struct { // Provider is the schema for the provider itself. Provider Schema + // ProviderMeta is the schema for the provider's meta info in a module + ProviderMeta Schema + // ResourceTypes map the resource type name to that type's schema. ResourceTypes map[string]Schema @@ -262,6 +265,12 @@ type ApplyResourceChangeRequest struct { // PlannedPrivate is the same value as returned by PlanResourceChange. PlannedPrivate []byte + + // ProviderMeta is the configuration for the provider_meta block for the + // module and provider this resource belongs to. Its use is defined by + // each provider, and it should not be used without coordination with + // HashiCorp. It is considered experimental and subject to change. + ProviderMeta cty.Value } type ApplyResourceChangeResponse struct { diff --git a/terraform/eval_apply.go b/terraform/eval_apply.go index 7178f00300e3..3c62a25e6b49 100644 --- a/terraform/eval_apply.go +++ b/terraform/eval_apply.go @@ -5,7 +5,7 @@ import ( "log" "strings" - "github.com/hashicorp/go-multierror" + multierror "github.com/hashicorp/go-multierror" "github.com/hashicorp/hcl2/hcl" "github.com/zclconf/go-cty/cty" @@ -29,6 +29,7 @@ type EvalApply struct { Change **plans.ResourceInstanceChange ProviderAddr addrs.AbsProviderConfig Provider *providers.Interface + ProviderMeta *configs.ProviderMeta ProviderSchema **ProviderSchema Output **states.ResourceInstanceObject CreateNew *bool @@ -70,6 +71,27 @@ func (n *EvalApply) Eval(ctx EvalContext) (interface{}, error) { } } + metaConfigVal := cty.NullVal(cty.DynamicPseudoType) + if n.ProviderMeta != nil { + // if the provider doesn't support this feature, throw an error + if (*n.ProviderSchema).ProviderMeta == nil { + diags = diags.Append(tfdiags.Sourceless( + tfdiags.Error, + "Provider doesn't support provider_meta", + fmt.Sprintf( + "Provider %s does not support meta information in the terraform block, but a provider_meta block was specified for it.", n.ProviderAddr.ProviderConfig.Type, + ), + )) + } + + var configDiags tfdiags.Diagnostics + metaConfigVal, _, configDiags = ctx.EvaluateBlock(n.ProviderMeta.Config, (*n.ProviderSchema).ProviderMeta, nil, EvalDataForNoInstanceKey) + diags = diags.Append(configDiags) + if configDiags.HasErrors() { + return nil, diags.Err() + } + } + log.Printf("[DEBUG] %s: applying the planned %s change", n.Addr.Absolute(ctx.Path()), change.Action) resp := provider.ApplyResourceChange(providers.ApplyResourceChangeRequest{ TypeName: n.Addr.Resource.Type, @@ -77,6 +99,7 @@ func (n *EvalApply) Eval(ctx EvalContext) (interface{}, error) { Config: configVal, PlannedState: change.After, PlannedPrivate: change.Private, + ProviderMeta: metaConfigVal, }) applyDiags := resp.Diagnostics if n.Config != nil { diff --git a/terraform/node_resource_abstract.go b/terraform/node_resource_abstract.go index d147b42e48a3..c36bfa87583a 100644 --- a/terraform/node_resource_abstract.go +++ b/terraform/node_resource_abstract.go @@ -51,6 +51,9 @@ type NodeAbstractResource struct { SchemaVersion uint64 // Schema version of "Schema", as decided by the provider Config *configs.Resource // Config is the resource in the config + // ProviderMeta is the provider_meta config for this resource + ProviderMeta *configs.ProviderMeta + ProvisionerSchemas map[string]*configschema.Block Targets []addrs.Targetable // Set from GraphNodeTargetable @@ -60,17 +63,18 @@ type NodeAbstractResource struct { } var ( - _ GraphNodeSubPath = (*NodeAbstractResource)(nil) - _ GraphNodeReferenceable = (*NodeAbstractResource)(nil) - _ GraphNodeReferencer = (*NodeAbstractResource)(nil) - _ GraphNodeProviderConsumer = (*NodeAbstractResource)(nil) - _ GraphNodeProvisionerConsumer = (*NodeAbstractResource)(nil) - _ GraphNodeResource = (*NodeAbstractResource)(nil) - _ GraphNodeAttachResourceConfig = (*NodeAbstractResource)(nil) - _ GraphNodeAttachResourceSchema = (*NodeAbstractResource)(nil) - _ GraphNodeAttachProvisionerSchema = (*NodeAbstractResource)(nil) - _ GraphNodeTargetable = (*NodeAbstractResource)(nil) - _ dag.GraphNodeDotter = (*NodeAbstractResource)(nil) + _ GraphNodeSubPath = (*NodeAbstractResource)(nil) + _ GraphNodeReferenceable = (*NodeAbstractResource)(nil) + _ GraphNodeReferencer = (*NodeAbstractResource)(nil) + _ GraphNodeProviderConsumer = (*NodeAbstractResource)(nil) + _ GraphNodeProvisionerConsumer = (*NodeAbstractResource)(nil) + _ GraphNodeResource = (*NodeAbstractResource)(nil) + _ GraphNodeAttachResourceConfig = (*NodeAbstractResource)(nil) + _ GraphNodeAttachResourceSchema = (*NodeAbstractResource)(nil) + _ GraphNodeAttachProvisionerSchema = (*NodeAbstractResource)(nil) + _ GraphNodeAttachProviderMetaConfigs = (*NodeAbstractResource)(nil) + _ GraphNodeTargetable = (*NodeAbstractResource)(nil) + _ dag.GraphNodeDotter = (*NodeAbstractResource)(nil) ) // NewNodeAbstractResource creates an abstract resource graph node for @@ -448,6 +452,11 @@ func (n *NodeAbstractResource) AttachResourceSchema(schema *configschema.Block, n.SchemaVersion = version } +// GraphNodeAttachProviderMetaConfigs impl +func (n *NodeAbstractResource) AttachProviderMetaConfigs(c *configs.ProviderMeta) { + n.ProviderMeta = c +} + // GraphNodeDotter impl. func (n *NodeAbstractResource) DotNode(name string, opts *dag.DotOpts) *dag.DotNode { return &dag.DotNode{ diff --git a/terraform/node_resource_apply_instance.go b/terraform/node_resource_apply_instance.go index d79532467f60..915847bc7496 100644 --- a/terraform/node_resource_apply_instance.go +++ b/terraform/node_resource_apply_instance.go @@ -346,6 +346,7 @@ func (n *NodeApplyableResourceInstance) evalTreeManagedResource(addr addrs.AbsRe Change: &diffApply, Provider: &provider, ProviderAddr: n.ResolvedProvider, + ProviderMeta: n.ProviderMeta, ProviderSchema: &providerSchema, Output: &state, Error: &err, diff --git a/terraform/schemas.go b/terraform/schemas.go index 62991c82d091..df9fd585e791 100644 --- a/terraform/schemas.go +++ b/terraform/schemas.go @@ -243,6 +243,7 @@ func loadProvisionerSchemas(schemas map[string]*configschema.Block, config *conf // resource types and data sources used by that configuration. type ProviderSchema struct { Provider *configschema.Block + ProviderMeta *configschema.Block ResourceTypes map[string]*configschema.Block DataSources map[string]*configschema.Block diff --git a/terraform/transform_attach_config_provider_meta.go b/terraform/transform_attach_config_provider_meta.go new file mode 100644 index 000000000000..6ad3a733c8cd --- /dev/null +++ b/terraform/transform_attach_config_provider_meta.go @@ -0,0 +1,14 @@ +package terraform + +import ( + "github.com/hashicorp/terraform/configs" +) + +// GraphNodeAttachProviderMetaConfigs is an interface that must be implemented +// by nodes that want provider meta configurations attached. +type GraphNodeAttachProviderMetaConfigs interface { + GraphNodeResource + + // Sets the configuration + AttachProviderMetaConfigs(*configs.ProviderMeta) +} diff --git a/terraform/transform_provider.go b/terraform/transform_provider.go index 6a4fb47c49c8..7014aec62db5 100644 --- a/terraform/transform_provider.go +++ b/terraform/transform_provider.go @@ -117,6 +117,26 @@ func (t *ProviderTransformer) Transform(g *Graph) error { // Direct references need the provider configured as well as initialized needConfigured[p.String()] = p + + // attach the provider_meta info + if gnapmc, ok := v.(GraphNodeAttachProviderMetaConfigs); ok { + log.Printf("[TRACE] ProviderTransformer: attaching provider meta config for %s to %s", p, dag.VertexName(v)) + if t.Config == nil { + log.Printf("[TRACE] ProviderTransformer: no config set on the transformer for %s", dag.VertexName(v)) + continue + } + if t.Config.Module == nil { + log.Printf("[TRACE] ProviderTransformer: no module in config for %s", dag.VertexName(v)) + continue + } + if t.Config.Module.ProviderMetas == nil { + log.Printf("[TRACE] ProviderTransformer: no provider metas defined for %s", dag.VertexName(v)) + continue + } + if meta, ok := t.Config.Module.ProviderMetas[p.String()]; ok { + gnapmc.AttachProviderMetaConfigs(meta) + } + } } } diff --git a/vendor/modules.txt b/vendor/modules.txt index b9c9f93006f7..fe6b7fbab667 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -332,7 +332,7 @@ github.com/hashicorp/hcl/hcl/scanner github.com/hashicorp/hcl/hcl/strconv github.com/hashicorp/hcl/json/scanner github.com/hashicorp/hcl/json/token -# github.com/hashicorp/hcl2 v0.0.0-20190809210004-72d32879a5c5 +# github.com/hashicorp/hcl2 v0.0.0-20190821123243-0c888d1241f6 github.com/hashicorp/hcl2/hcl github.com/hashicorp/hcl2/hcl/hclsyntax github.com/hashicorp/hcl2/hcldec @@ -353,7 +353,7 @@ github.com/hashicorp/hil/scanner github.com/hashicorp/logutils # github.com/hashicorp/serf v0.0.0-20160124182025-e4ec8cc423bb github.com/hashicorp/serf/coordinate -# github.com/hashicorp/terraform-config-inspect v0.0.0-20190327195015-8022a2663a70 +# github.com/hashicorp/terraform-config-inspect v0.0.0-20190821133035-82a99dc22ef4 github.com/hashicorp/terraform-config-inspect/tfconfig # github.com/hashicorp/vault v0.10.4 github.com/hashicorp/vault/helper/pgpkeys @@ -590,14 +590,14 @@ google.golang.org/genproto/googleapis/api/annotations # google.golang.org/grpc v1.19.1 google.golang.org/grpc google.golang.org/grpc/test/bufconn +google.golang.org/grpc/codes +google.golang.org/grpc/status google.golang.org/grpc/metadata google.golang.org/grpc/credentials google.golang.org/grpc/health google.golang.org/grpc/health/grpc_health_v1 -google.golang.org/grpc/codes google.golang.org/grpc/grpclog google.golang.org/grpc/keepalive -google.golang.org/grpc/status google.golang.org/grpc/balancer google.golang.org/grpc/balancer/roundrobin google.golang.org/grpc/connectivity