rpcapi: Stacks.FindStackConfigurationComponents

This function returns a summary of the components and embedded stacks
declared inside a given stack configuration. This reports only on static
information that doesn't require any dynamic evaluation or provider plugin
execution, so it should be sufficient to build a skeleton of the UI
representing the content of a configuration that can then be populated
with dynamic information in later steps, to make the UI feel responsive.
pull/34738/head
Martin Atkins 3 years ago
parent 7fe6686cd7
commit 9bd6489dda

@ -78,3 +78,52 @@ func (s *stacksServer) CloseStackConfiguration(ctx context.Context, req *terrafo
}
return &terraform1.CloseStackConfiguration_Response{}, nil
}
func (s *stacksServer) FindStackConfigurationComponents(ctx context.Context, req *terraform1.FindStackConfigurationComponents_Request) (*terraform1.FindStackConfigurationComponents_Response, error) {
cfgHnd := handle[*stackconfig.Config](req.StackConfigHandle)
cfg := s.handles.StackConfig(cfgHnd)
if cfg == nil {
return nil, status.Error(codes.InvalidArgument, "the given stack configuration handle is invalid")
}
return &terraform1.FindStackConfigurationComponents_Response{
Config: stackConfigMetaforProto(cfg.Root),
}, nil
}
func stackConfigMetaforProto(cfgNode *stackconfig.ConfigNode) *terraform1.FindStackConfigurationComponents_StackConfig {
ret := &terraform1.FindStackConfigurationComponents_StackConfig{
Components: make(map[string]*terraform1.FindStackConfigurationComponents_Component),
EmbeddedStacks: make(map[string]*terraform1.FindStackConfigurationComponents_EmbeddedStack),
}
for name, cc := range cfgNode.Stack.Components {
cProto := &terraform1.FindStackConfigurationComponents_Component{
SourceAddr: cc.FinalSourceAddr.String(),
}
switch {
case cc.ForEach != nil:
cProto.Instances = terraform1.FindStackConfigurationComponents_FOR_EACH
default:
cProto.Instances = terraform1.FindStackConfigurationComponents_SINGLE
}
ret.Components[name] = cProto
}
for name, sn := range cfgNode.Children {
sc := cfgNode.Stack.EmbeddedStacks[name]
sProto := &terraform1.FindStackConfigurationComponents_EmbeddedStack{
SourceAddr: sn.Stack.SourceAddr.String(),
Config: stackConfigMetaforProto(sn),
}
switch {
case sc.ForEach != nil:
sProto.Instances = terraform1.FindStackConfigurationComponents_FOR_EACH
default:
sProto.Instances = terraform1.FindStackConfigurationComponents_SINGLE
}
ret.EmbeddedStacks[name] = sProto
}
return ret
}

@ -4,11 +4,14 @@ import (
"context"
"testing"
"github.com/google/go-cmp/cmp"
"github.com/hashicorp/go-slug/sourcebundle"
"github.com/hashicorp/terraform/internal/rpcapi/terraform1"
"github.com/hashicorp/terraform/internal/stacks/stackconfig"
"google.golang.org/grpc/codes"
"google.golang.org/grpc/status"
"google.golang.org/protobuf/testing/protocmp"
"github.com/hashicorp/terraform/internal/rpcapi/terraform1"
"github.com/hashicorp/terraform/internal/stacks/stackconfig"
)
func TestStacksOpenCloseStackConfiguration(t *testing.T) {
@ -92,3 +95,119 @@ func TestStacksOpenCloseStackConfiguration(t *testing.T) {
}
}
}
func TestStacksFindStackConfigurationComponents(t *testing.T) {
ctx := context.Background()
handles := newHandleTable()
stacksServer := newStacksServer(handles)
// In normal use a client would have previously opened a source bundle
// using Dependencies.OpenSourceBundle, so we'll simulate the effect
// of that here.
var sourcesHnd handle[*sourcebundle.Bundle]
{
sources, err := sourcebundle.OpenDir("testdata/sourcebundle")
if err != nil {
t.Fatal(err)
}
sourcesHnd = handles.NewSourceBundle(sources)
}
t.Run("empty config", func(t *testing.T) {
openResp, err := stacksServer.OpenStackConfiguration(ctx, &terraform1.OpenStackConfiguration_Request{
SourceBundleHandle: sourcesHnd.ForProtobuf(),
SourceAddress: &terraform1.SourceAddress{
Source: "git::https://example.com/foo.git",
},
})
if err != nil {
t.Fatal(err)
}
if len(openResp.Diagnostics) != 0 {
t.Error("empty configuration generated diagnostics; expected none")
if openResp.StackConfigHandle == 0 {
return // Our later operations will fail if given the nil handle
}
}
cmpntResp, err := stacksServer.FindStackConfigurationComponents(ctx, &terraform1.FindStackConfigurationComponents_Request{
StackConfigHandle: openResp.StackConfigHandle,
})
if err != nil {
t.Fatal(err)
}
got := cmpntResp.Config
want := &terraform1.FindStackConfigurationComponents_StackConfig{
// Intentionally empty, because the configuration we've loaded
// is itself empty.
}
if diff := cmp.Diff(want, got, protocmp.Transform()); diff != "" {
t.Errorf("wrong result\n%s", diff)
}
})
t.Run("non-empty config", func(t *testing.T) {
openResp, err := stacksServer.OpenStackConfiguration(ctx, &terraform1.OpenStackConfiguration_Request{
SourceBundleHandle: sourcesHnd.ForProtobuf(),
SourceAddress: &terraform1.SourceAddress{
Source: "git::https://example.com/foo.git//non-empty-stack",
},
})
if err != nil {
t.Fatal(err)
}
if len(openResp.Diagnostics) != 0 {
t.Error("empty configuration generated diagnostics; expected none")
if openResp.StackConfigHandle == 0 {
return // Our later operations will fail if given the nil handle
}
}
cmpntResp, err := stacksServer.FindStackConfigurationComponents(ctx, &terraform1.FindStackConfigurationComponents_Request{
StackConfigHandle: openResp.StackConfigHandle,
})
if err != nil {
t.Fatal(err)
}
got := cmpntResp.Config
want := &terraform1.FindStackConfigurationComponents_StackConfig{
Components: map[string]*terraform1.FindStackConfigurationComponents_Component{
"single": {
SourceAddr: "git::https://example.com/foo.git//non-empty-stack/empty-module",
},
"for_each": {
SourceAddr: "git::https://example.com/foo.git//non-empty-stack/empty-module",
Instances: terraform1.FindStackConfigurationComponents_FOR_EACH,
},
},
EmbeddedStacks: map[string]*terraform1.FindStackConfigurationComponents_EmbeddedStack{
"single": {
SourceAddr: "git::https://example.com/foo.git//non-empty-stack/child",
Config: &terraform1.FindStackConfigurationComponents_StackConfig{
Components: map[string]*terraform1.FindStackConfigurationComponents_Component{
"foo": {
SourceAddr: "git::https://example.com/foo.git//non-empty-stack/empty-module",
},
},
},
},
"for_each": {
SourceAddr: "git::https://example.com/foo.git//non-empty-stack/child",
Instances: terraform1.FindStackConfigurationComponents_FOR_EACH,
Config: &terraform1.FindStackConfigurationComponents_StackConfig{
Components: map[string]*terraform1.FindStackConfigurationComponents_Component{
"foo": {
SourceAddr: "git::https://example.com/foo.git//non-empty-stack/empty-module",
},
},
},
},
},
}
if diff := cmp.Diff(want, got, protocmp.Transform()); diff != "" {
t.Errorf("wrong result\n%s", diff)
}
})
}

@ -27,6 +27,55 @@ const (
_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
)
type FindStackConfigurationComponents_Instances int32
const (
FindStackConfigurationComponents_SINGLE FindStackConfigurationComponents_Instances = 0
FindStackConfigurationComponents_COUNT FindStackConfigurationComponents_Instances = 1
FindStackConfigurationComponents_FOR_EACH FindStackConfigurationComponents_Instances = 2
)
// Enum value maps for FindStackConfigurationComponents_Instances.
var (
FindStackConfigurationComponents_Instances_name = map[int32]string{
0: "SINGLE",
1: "COUNT",
2: "FOR_EACH",
}
FindStackConfigurationComponents_Instances_value = map[string]int32{
"SINGLE": 0,
"COUNT": 1,
"FOR_EACH": 2,
}
)
func (x FindStackConfigurationComponents_Instances) Enum() *FindStackConfigurationComponents_Instances {
p := new(FindStackConfigurationComponents_Instances)
*p = x
return p
}
func (x FindStackConfigurationComponents_Instances) String() string {
return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}
func (FindStackConfigurationComponents_Instances) Descriptor() protoreflect.EnumDescriptor {
return file_terraform1_proto_enumTypes[0].Descriptor()
}
func (FindStackConfigurationComponents_Instances) Type() protoreflect.EnumType {
return &file_terraform1_proto_enumTypes[0]
}
func (x FindStackConfigurationComponents_Instances) Number() protoreflect.EnumNumber {
return protoreflect.EnumNumber(x)
}
// Deprecated: Use FindStackConfigurationComponents_Instances.Descriptor instead.
func (FindStackConfigurationComponents_Instances) EnumDescriptor() ([]byte, []int) {
return file_terraform1_proto_rawDescGZIP(), []int{7, 0}
}
type Diagnostic_Severity int32
const (
@ -60,11 +109,11 @@ func (x Diagnostic_Severity) String() string {
}
func (Diagnostic_Severity) Descriptor() protoreflect.EnumDescriptor {
return file_terraform1_proto_enumTypes[0].Descriptor()
return file_terraform1_proto_enumTypes[1].Descriptor()
}
func (Diagnostic_Severity) Type() protoreflect.EnumType {
return &file_terraform1_proto_enumTypes[0]
return &file_terraform1_proto_enumTypes[1]
}
func (x Diagnostic_Severity) Number() protoreflect.EnumNumber {
@ -428,6 +477,10 @@ func (*FindStackConfigurationProviders) Descriptor() ([]byte, []int) {
// A source address in the same form as it would appear in a Terraform
// configuration: a source string combined with an optional version constraint
// string, where the latter is valid only for registry module addresses.
//
// This is not used for "final" source addresses that have already been reduced
// to an exact version selection. For those we just directly encode the string
// representation of the final address, including a version number if necessary.
type SourceAddress struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
@ -1207,6 +1260,8 @@ type FindStackConfigurationComponents_Response struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Config *FindStackConfigurationComponents_StackConfig `protobuf:"bytes,1,opt,name=config,proto3" json:"config,omitempty"`
}
func (x *FindStackConfigurationComponents_Response) Reset() {
@ -1241,6 +1296,186 @@ func (*FindStackConfigurationComponents_Response) Descriptor() ([]byte, []int) {
return file_terraform1_proto_rawDescGZIP(), []int{7, 1}
}
func (x *FindStackConfigurationComponents_Response) GetConfig() *FindStackConfigurationComponents_StackConfig {
if x != nil {
return x.Config
}
return nil
}
type FindStackConfigurationComponents_StackConfig struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Components map[string]*FindStackConfigurationComponents_Component `protobuf:"bytes,1,rep,name=components,proto3" json:"components,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
EmbeddedStacks map[string]*FindStackConfigurationComponents_EmbeddedStack `protobuf:"bytes,2,rep,name=embedded_stacks,json=embeddedStacks,proto3" json:"embedded_stacks,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
}
func (x *FindStackConfigurationComponents_StackConfig) Reset() {
*x = FindStackConfigurationComponents_StackConfig{}
if protoimpl.UnsafeEnabled {
mi := &file_terraform1_proto_msgTypes[25]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *FindStackConfigurationComponents_StackConfig) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*FindStackConfigurationComponents_StackConfig) ProtoMessage() {}
func (x *FindStackConfigurationComponents_StackConfig) ProtoReflect() protoreflect.Message {
mi := &file_terraform1_proto_msgTypes[25]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use FindStackConfigurationComponents_StackConfig.ProtoReflect.Descriptor instead.
func (*FindStackConfigurationComponents_StackConfig) Descriptor() ([]byte, []int) {
return file_terraform1_proto_rawDescGZIP(), []int{7, 2}
}
func (x *FindStackConfigurationComponents_StackConfig) GetComponents() map[string]*FindStackConfigurationComponents_Component {
if x != nil {
return x.Components
}
return nil
}
func (x *FindStackConfigurationComponents_StackConfig) GetEmbeddedStacks() map[string]*FindStackConfigurationComponents_EmbeddedStack {
if x != nil {
return x.EmbeddedStacks
}
return nil
}
type FindStackConfigurationComponents_EmbeddedStack struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
SourceAddr string `protobuf:"bytes,1,opt,name=source_addr,json=sourceAddr,proto3" json:"source_addr,omitempty"`
Instances FindStackConfigurationComponents_Instances `protobuf:"varint,2,opt,name=instances,proto3,enum=terraform1.FindStackConfigurationComponents_Instances" json:"instances,omitempty"`
Config *FindStackConfigurationComponents_StackConfig `protobuf:"bytes,3,opt,name=config,proto3" json:"config,omitempty"`
}
func (x *FindStackConfigurationComponents_EmbeddedStack) Reset() {
*x = FindStackConfigurationComponents_EmbeddedStack{}
if protoimpl.UnsafeEnabled {
mi := &file_terraform1_proto_msgTypes[26]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *FindStackConfigurationComponents_EmbeddedStack) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*FindStackConfigurationComponents_EmbeddedStack) ProtoMessage() {}
func (x *FindStackConfigurationComponents_EmbeddedStack) ProtoReflect() protoreflect.Message {
mi := &file_terraform1_proto_msgTypes[26]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use FindStackConfigurationComponents_EmbeddedStack.ProtoReflect.Descriptor instead.
func (*FindStackConfigurationComponents_EmbeddedStack) Descriptor() ([]byte, []int) {
return file_terraform1_proto_rawDescGZIP(), []int{7, 3}
}
func (x *FindStackConfigurationComponents_EmbeddedStack) GetSourceAddr() string {
if x != nil {
return x.SourceAddr
}
return ""
}
func (x *FindStackConfigurationComponents_EmbeddedStack) GetInstances() FindStackConfigurationComponents_Instances {
if x != nil {
return x.Instances
}
return FindStackConfigurationComponents_SINGLE
}
func (x *FindStackConfigurationComponents_EmbeddedStack) GetConfig() *FindStackConfigurationComponents_StackConfig {
if x != nil {
return x.Config
}
return nil
}
type FindStackConfigurationComponents_Component struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
SourceAddr string `protobuf:"bytes,1,opt,name=source_addr,json=sourceAddr,proto3" json:"source_addr,omitempty"`
Instances FindStackConfigurationComponents_Instances `protobuf:"varint,2,opt,name=instances,proto3,enum=terraform1.FindStackConfigurationComponents_Instances" json:"instances,omitempty"`
}
func (x *FindStackConfigurationComponents_Component) Reset() {
*x = FindStackConfigurationComponents_Component{}
if protoimpl.UnsafeEnabled {
mi := &file_terraform1_proto_msgTypes[27]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *FindStackConfigurationComponents_Component) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*FindStackConfigurationComponents_Component) ProtoMessage() {}
func (x *FindStackConfigurationComponents_Component) ProtoReflect() protoreflect.Message {
mi := &file_terraform1_proto_msgTypes[27]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use FindStackConfigurationComponents_Component.ProtoReflect.Descriptor instead.
func (*FindStackConfigurationComponents_Component) Descriptor() ([]byte, []int) {
return file_terraform1_proto_rawDescGZIP(), []int{7, 4}
}
func (x *FindStackConfigurationComponents_Component) GetSourceAddr() string {
if x != nil {
return x.SourceAddr
}
return ""
}
func (x *FindStackConfigurationComponents_Component) GetInstances() FindStackConfigurationComponents_Instances {
if x != nil {
return x.Instances
}
return FindStackConfigurationComponents_SINGLE
}
type FindStackConfigurationProviders_Request struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
@ -1252,7 +1487,7 @@ type FindStackConfigurationProviders_Request struct {
func (x *FindStackConfigurationProviders_Request) Reset() {
*x = FindStackConfigurationProviders_Request{}
if protoimpl.UnsafeEnabled {
mi := &file_terraform1_proto_msgTypes[25]
mi := &file_terraform1_proto_msgTypes[30]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@ -1265,7 +1500,7 @@ func (x *FindStackConfigurationProviders_Request) String() string {
func (*FindStackConfigurationProviders_Request) ProtoMessage() {}
func (x *FindStackConfigurationProviders_Request) ProtoReflect() protoreflect.Message {
mi := &file_terraform1_proto_msgTypes[25]
mi := &file_terraform1_proto_msgTypes[30]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@ -1297,7 +1532,7 @@ type FindStackConfigurationProviders_Response struct {
func (x *FindStackConfigurationProviders_Response) Reset() {
*x = FindStackConfigurationProviders_Response{}
if protoimpl.UnsafeEnabled {
mi := &file_terraform1_proto_msgTypes[26]
mi := &file_terraform1_proto_msgTypes[31]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@ -1310,7 +1545,7 @@ func (x *FindStackConfigurationProviders_Response) String() string {
func (*FindStackConfigurationProviders_Response) ProtoMessage() {}
func (x *FindStackConfigurationProviders_Response) ProtoReflect() protoreflect.Message {
mi := &file_terraform1_proto_msgTypes[26]
mi := &file_terraform1_proto_msgTypes[31]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@ -1381,107 +1616,168 @@ var file_terraform1_proto_rawDesc = []byte{
0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x18, 0x01,
0x20, 0x01, 0x28, 0x03, 0x52, 0x11, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69,
0x67, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x1a, 0x0a, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x70, 0x6f,
0x6e, 0x73, 0x65, 0x22, 0x69, 0x0a, 0x20, 0x46, 0x69, 0x6e, 0x64, 0x53, 0x74, 0x61, 0x63, 0x6b,
0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6d,
0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x73, 0x1a, 0x39, 0x0a, 0x07, 0x52, 0x65, 0x71, 0x75, 0x65,
0x73, 0x74, 0x12, 0x2e, 0x0a, 0x13, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x5f, 0x63, 0x6f, 0x6e, 0x66,
0x69, 0x67, 0x5f, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52,
0x11, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x48, 0x61, 0x6e, 0x64,
0x6c, 0x65, 0x1a, 0x0a, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x68,
0x0a, 0x1f, 0x46, 0x69, 0x6e, 0x64, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69,
0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72,
0x73, 0x1a, 0x39, 0x0a, 0x07, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2e, 0x0a, 0x13,
0x73, 0x74, 0x61, 0x63, 0x6b, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x68, 0x61, 0x6e,
0x64, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x11, 0x73, 0x74, 0x61, 0x63, 0x6b,
0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x1a, 0x0a, 0x0a, 0x08,
0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x43, 0x0a, 0x0d, 0x53, 0x6f, 0x75, 0x72,
0x63, 0x65, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x6f, 0x75,
0x72, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63,
0x65, 0x12, 0x1a, 0x0a, 0x08, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20,
0x01, 0x28, 0x09, 0x52, 0x08, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x92, 0x02,
0x0a, 0x0a, 0x44, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x12, 0x3b, 0x0a, 0x08,
0x73, 0x65, 0x76, 0x65, 0x72, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1f,
0x2e, 0x74, 0x65, 0x72, 0x72, 0x61, 0x66, 0x6f, 0x72, 0x6d, 0x31, 0x2e, 0x44, 0x69, 0x61, 0x67,
0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x2e, 0x53, 0x65, 0x76, 0x65, 0x72, 0x69, 0x74, 0x79, 0x52,
0x08, 0x73, 0x65, 0x76, 0x65, 0x72, 0x69, 0x74, 0x79, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x6d,
0x6d, 0x61, 0x72, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x75, 0x6d, 0x6d,
0x61, 0x72, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x18, 0x03, 0x20,
0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x12, 0x31, 0x0a, 0x07, 0x73,
0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x74,
0x65, 0x72, 0x72, 0x61, 0x66, 0x6f, 0x72, 0x6d, 0x31, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65,
0x52, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x07, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x31,
0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32,
0x17, 0x2e, 0x74, 0x65, 0x72, 0x72, 0x61, 0x66, 0x6f, 0x72, 0x6d, 0x31, 0x2e, 0x53, 0x6f, 0x75,
0x72, 0x63, 0x65, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78,
0x74, 0x22, 0x2f, 0x0a, 0x08, 0x53, 0x65, 0x76, 0x65, 0x72, 0x69, 0x74, 0x79, 0x12, 0x0b, 0x0a,
0x07, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x45, 0x52,
0x52, 0x4f, 0x52, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x57, 0x41, 0x52, 0x4e, 0x49, 0x4e, 0x47,
0x10, 0x02, 0x22, 0x84, 0x01, 0x0a, 0x0b, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x61, 0x6e,
0x67, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x61, 0x64, 0x64,
0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x41,
0x64, 0x64, 0x72, 0x12, 0x2b, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x02, 0x20, 0x01,
0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x65, 0x72, 0x72, 0x61, 0x66, 0x6f, 0x72, 0x6d, 0x31, 0x2e,
0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x50, 0x6f, 0x73, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74,
0x12, 0x27, 0x0a, 0x03, 0x65, 0x6e, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e,
0x74, 0x65, 0x72, 0x72, 0x61, 0x66, 0x6f, 0x72, 0x6d, 0x31, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63,
0x65, 0x50, 0x6f, 0x73, 0x52, 0x03, 0x65, 0x6e, 0x64, 0x22, 0x4b, 0x0a, 0x09, 0x53, 0x6f, 0x75,
0x72, 0x63, 0x65, 0x50, 0x6f, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x62, 0x79, 0x74, 0x65, 0x18, 0x01,
0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x62, 0x79, 0x74, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6c, 0x69,
0x6e, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x6c, 0x69, 0x6e, 0x65, 0x12, 0x16,
0x0a, 0x06, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06,
0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x32, 0x53, 0x0a, 0x05, 0x53, 0x65, 0x74, 0x75, 0x70, 0x12,
0x4a, 0x0a, 0x09, 0x48, 0x61, 0x6e, 0x64, 0x73, 0x68, 0x61, 0x6b, 0x65, 0x12, 0x1d, 0x2e, 0x74,
0x65, 0x72, 0x72, 0x61, 0x66, 0x6f, 0x72, 0x6d, 0x31, 0x2e, 0x48, 0x61, 0x6e, 0x64, 0x73, 0x68,
0x61, 0x6b, 0x65, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x74, 0x65,
0x72, 0x72, 0x61, 0x66, 0x6f, 0x72, 0x6d, 0x31, 0x2e, 0x48, 0x61, 0x6e, 0x64, 0x73, 0x68, 0x61,
0x6b, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0xd3, 0x01, 0x0a, 0x0c,
0x44, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x12, 0x5f, 0x0a, 0x10,
0x6e, 0x73, 0x65, 0x22, 0xb4, 0x08, 0x0a, 0x20, 0x46, 0x69, 0x6e, 0x64, 0x53, 0x74, 0x61, 0x63,
0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f,
0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x73, 0x1a, 0x39, 0x0a, 0x07, 0x52, 0x65, 0x71, 0x75,
0x65, 0x73, 0x74, 0x12, 0x2e, 0x0a, 0x13, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x5f, 0x63, 0x6f, 0x6e,
0x66, 0x69, 0x67, 0x5f, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03,
0x52, 0x11, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x48, 0x61, 0x6e,
0x64, 0x6c, 0x65, 0x1a, 0x5c, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12,
0x50, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32,
0x38, 0x2e, 0x74, 0x65, 0x72, 0x72, 0x61, 0x66, 0x6f, 0x72, 0x6d, 0x31, 0x2e, 0x46, 0x69, 0x6e,
0x64, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74,
0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x53, 0x74,
0x61, 0x63, 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69,
0x67, 0x1a, 0xe4, 0x03, 0x0a, 0x0b, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69,
0x67, 0x12, 0x68, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x73, 0x18,
0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x48, 0x2e, 0x74, 0x65, 0x72, 0x72, 0x61, 0x66, 0x6f, 0x72,
0x6d, 0x31, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x43, 0x6f, 0x6e, 0x66,
0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65,
0x6e, 0x74, 0x73, 0x2e, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e,
0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52,
0x0a, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x75, 0x0a, 0x0f, 0x65,
0x6d, 0x62, 0x65, 0x64, 0x64, 0x65, 0x64, 0x5f, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x73, 0x18, 0x02,
0x20, 0x03, 0x28, 0x0b, 0x32, 0x4c, 0x2e, 0x74, 0x65, 0x72, 0x72, 0x61, 0x66, 0x6f, 0x72, 0x6d,
0x31, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69,
0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e,
0x74, 0x73, 0x2e, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x45,
0x6d, 0x62, 0x65, 0x64, 0x64, 0x65, 0x64, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x73, 0x45, 0x6e, 0x74,
0x72, 0x79, 0x52, 0x0e, 0x65, 0x6d, 0x62, 0x65, 0x64, 0x64, 0x65, 0x64, 0x53, 0x74, 0x61, 0x63,
0x6b, 0x73, 0x1a, 0x75, 0x0a, 0x0f, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x73,
0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01,
0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x4c, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65,
0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x74, 0x65, 0x72, 0x72, 0x61, 0x66, 0x6f,
0x72, 0x6d, 0x31, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x43, 0x6f, 0x6e,
0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e,
0x65, 0x6e, 0x74, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x52, 0x05,
0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x7d, 0x0a, 0x13, 0x45, 0x6d, 0x62,
0x65, 0x64, 0x64, 0x65, 0x64, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79,
0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b,
0x65, 0x79, 0x12, 0x50, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28,
0x0b, 0x32, 0x3a, 0x2e, 0x74, 0x65, 0x72, 0x72, 0x61, 0x66, 0x6f, 0x72, 0x6d, 0x31, 0x2e, 0x46,
0x69, 0x6e, 0x64, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72,
0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x73, 0x2e,
0x45, 0x6d, 0x62, 0x65, 0x64, 0x64, 0x65, 0x64, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x52, 0x05, 0x76,
0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0xd8, 0x01, 0x0a, 0x0d, 0x45, 0x6d, 0x62,
0x65, 0x64, 0x64, 0x65, 0x64, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x6f,
0x75, 0x72, 0x63, 0x65, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
0x0a, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x41, 0x64, 0x64, 0x72, 0x12, 0x54, 0x0a, 0x09, 0x69,
0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x36,
0x2e, 0x74, 0x65, 0x72, 0x72, 0x61, 0x66, 0x6f, 0x72, 0x6d, 0x31, 0x2e, 0x46, 0x69, 0x6e, 0x64,
0x53, 0x74, 0x61, 0x63, 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69,
0x6f, 0x6e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x49, 0x6e, 0x73,
0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x09, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65,
0x73, 0x12, 0x50, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28,
0x0b, 0x32, 0x38, 0x2e, 0x74, 0x65, 0x72, 0x72, 0x61, 0x66, 0x6f, 0x72, 0x6d, 0x31, 0x2e, 0x46,
0x69, 0x6e, 0x64, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72,
0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x73, 0x2e,
0x53, 0x74, 0x61, 0x63, 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, 0x63, 0x6f, 0x6e,
0x66, 0x69, 0x67, 0x1a, 0x82, 0x01, 0x0a, 0x09, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e,
0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x61, 0x64, 0x64, 0x72,
0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x41, 0x64,
0x64, 0x72, 0x12, 0x54, 0x0a, 0x09, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x18,
0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x36, 0x2e, 0x74, 0x65, 0x72, 0x72, 0x61, 0x66, 0x6f, 0x72,
0x6d, 0x31, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x43, 0x6f, 0x6e, 0x66,
0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65,
0x6e, 0x74, 0x73, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x09, 0x69,
0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x22, 0x30, 0x0a, 0x09, 0x49, 0x6e, 0x73, 0x74,
0x61, 0x6e, 0x63, 0x65, 0x73, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x49, 0x4e, 0x47, 0x4c, 0x45, 0x10,
0x00, 0x12, 0x09, 0x0a, 0x05, 0x43, 0x4f, 0x55, 0x4e, 0x54, 0x10, 0x01, 0x12, 0x0c, 0x0a, 0x08,
0x46, 0x4f, 0x52, 0x5f, 0x45, 0x41, 0x43, 0x48, 0x10, 0x02, 0x22, 0x68, 0x0a, 0x1f, 0x46, 0x69,
0x6e, 0x64, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61,
0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x1a, 0x39, 0x0a,
0x07, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2e, 0x0a, 0x13, 0x73, 0x74, 0x61, 0x63,
0x6b, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x18,
0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x11, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x43, 0x6f, 0x6e, 0x66,
0x69, 0x67, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x1a, 0x0a, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x70,
0x6f, 0x6e, 0x73, 0x65, 0x22, 0x43, 0x0a, 0x0d, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x41, 0x64,
0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18,
0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x1a, 0x0a,
0x08, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52,
0x08, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x92, 0x02, 0x0a, 0x0a, 0x44, 0x69,
0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x12, 0x3b, 0x0a, 0x08, 0x73, 0x65, 0x76, 0x65,
0x72, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1f, 0x2e, 0x74, 0x65, 0x72,
0x72, 0x61, 0x66, 0x6f, 0x72, 0x6d, 0x31, 0x2e, 0x44, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74,
0x69, 0x63, 0x2e, 0x53, 0x65, 0x76, 0x65, 0x72, 0x69, 0x74, 0x79, 0x52, 0x08, 0x73, 0x65, 0x76,
0x65, 0x72, 0x69, 0x74, 0x79, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79,
0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x12,
0x16, 0x0a, 0x06, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52,
0x06, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x12, 0x31, 0x0a, 0x07, 0x73, 0x75, 0x62, 0x6a, 0x65,
0x63, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x74, 0x65, 0x72, 0x72, 0x61,
0x66, 0x6f, 0x72, 0x6d, 0x31, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x61, 0x6e, 0x67,
0x65, 0x52, 0x07, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x31, 0x0a, 0x07, 0x63, 0x6f,
0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x74, 0x65,
0x72, 0x72, 0x61, 0x66, 0x6f, 0x72, 0x6d, 0x31, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52,
0x61, 0x6e, 0x67, 0x65, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x22, 0x2f, 0x0a,
0x08, 0x53, 0x65, 0x76, 0x65, 0x72, 0x69, 0x74, 0x79, 0x12, 0x0b, 0x0a, 0x07, 0x49, 0x4e, 0x56,
0x41, 0x4c, 0x49, 0x44, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10,
0x01, 0x12, 0x0b, 0x0a, 0x07, 0x57, 0x41, 0x52, 0x4e, 0x49, 0x4e, 0x47, 0x10, 0x02, 0x22, 0x84,
0x01, 0x0a, 0x0b, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x1f,
0x0a, 0x0b, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x18, 0x01, 0x20,
0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x41, 0x64, 0x64, 0x72, 0x12,
0x2b, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15,
0x2e, 0x74, 0x65, 0x72, 0x72, 0x61, 0x66, 0x6f, 0x72, 0x6d, 0x31, 0x2e, 0x53, 0x6f, 0x75, 0x72,
0x63, 0x65, 0x50, 0x6f, 0x73, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x27, 0x0a, 0x03,
0x65, 0x6e, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x65, 0x72, 0x72,
0x61, 0x66, 0x6f, 0x72, 0x6d, 0x31, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x50, 0x6f, 0x73,
0x52, 0x03, 0x65, 0x6e, 0x64, 0x22, 0x4b, 0x0a, 0x09, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x50,
0x6f, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x62, 0x79, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03,
0x52, 0x04, 0x62, 0x79, 0x74, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6c, 0x69, 0x6e, 0x65, 0x18, 0x02,
0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x6c, 0x69, 0x6e, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x6f,
0x6c, 0x75, 0x6d, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x63, 0x6f, 0x6c, 0x75,
0x6d, 0x6e, 0x32, 0x53, 0x0a, 0x05, 0x53, 0x65, 0x74, 0x75, 0x70, 0x12, 0x4a, 0x0a, 0x09, 0x48,
0x61, 0x6e, 0x64, 0x73, 0x68, 0x61, 0x6b, 0x65, 0x12, 0x1d, 0x2e, 0x74, 0x65, 0x72, 0x72, 0x61,
0x66, 0x6f, 0x72, 0x6d, 0x31, 0x2e, 0x48, 0x61, 0x6e, 0x64, 0x73, 0x68, 0x61, 0x6b, 0x65, 0x2e,
0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x74, 0x65, 0x72, 0x72, 0x61, 0x66,
0x6f, 0x72, 0x6d, 0x31, 0x2e, 0x48, 0x61, 0x6e, 0x64, 0x73, 0x68, 0x61, 0x6b, 0x65, 0x2e, 0x52,
0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0xd3, 0x01, 0x0a, 0x0c, 0x44, 0x65, 0x70, 0x65,
0x6e, 0x64, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x12, 0x5f, 0x0a, 0x10, 0x4f, 0x70, 0x65, 0x6e,
0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x12, 0x24, 0x2e, 0x74,
0x65, 0x72, 0x72, 0x61, 0x66, 0x6f, 0x72, 0x6d, 0x31, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x53, 0x6f,
0x75, 0x72, 0x63, 0x65, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65,
0x73, 0x74, 0x1a, 0x25, 0x2e, 0x74, 0x65, 0x72, 0x72, 0x61, 0x66, 0x6f, 0x72, 0x6d, 0x31, 0x2e,
0x4f, 0x70, 0x65, 0x6e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65,
0x12, 0x24, 0x2e, 0x74, 0x65, 0x72, 0x72, 0x61, 0x66, 0x6f, 0x72, 0x6d, 0x31, 0x2e, 0x4f, 0x70,
0x65, 0x6e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x2e, 0x52,
0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x74, 0x65, 0x72, 0x72, 0x61, 0x66, 0x6f,
0x72, 0x6d, 0x31, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x42, 0x75,
0x6e, 0x64, 0x6c, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x62, 0x0a,
0x11, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x42, 0x75, 0x6e, 0x64,
0x6c, 0x65, 0x12, 0x25, 0x2e, 0x74, 0x65, 0x72, 0x72, 0x61, 0x66, 0x6f, 0x72, 0x6d, 0x31, 0x2e,
0x43, 0x6c, 0x6f, 0x73, 0x65, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x42, 0x75, 0x6e, 0x64, 0x6c,
0x65, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x74, 0x65, 0x72, 0x72,
0x61, 0x66, 0x6f, 0x72, 0x6d, 0x31, 0x2e, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x53, 0x6f, 0x75, 0x72,
0x63, 0x65, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
0x65, 0x32, 0x92, 0x04, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x73, 0x12, 0x71, 0x0a, 0x16,
0x4f, 0x70, 0x65, 0x6e, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75,
0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2a, 0x2e, 0x74, 0x65, 0x72, 0x72, 0x61, 0x66, 0x6f,
0x72, 0x6d, 0x31, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x43, 0x6f, 0x6e,
0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65,
0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x74, 0x65, 0x72, 0x72, 0x61, 0x66, 0x6f, 0x72, 0x6d, 0x31, 0x2e,
0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x62, 0x0a, 0x11, 0x43, 0x6c, 0x6f,
0x73, 0x65, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x12, 0x25,
0x2e, 0x74, 0x65, 0x72, 0x72, 0x61, 0x66, 0x6f, 0x72, 0x6d, 0x31, 0x2e, 0x43, 0x6c, 0x6f, 0x73,
0x65, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x2e, 0x52, 0x65,
0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x74, 0x65, 0x72, 0x72, 0x61, 0x66, 0x6f, 0x72,
0x6d, 0x31, 0x2e, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x42, 0x75,
0x6e, 0x64, 0x6c, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0x92, 0x04,
0x0a, 0x06, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x73, 0x12, 0x71, 0x0a, 0x16, 0x4f, 0x70, 0x65, 0x6e,
0x53, 0x74, 0x61, 0x63, 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69,
0x6f, 0x6e, 0x12, 0x2a, 0x2e, 0x74, 0x65, 0x72, 0x72, 0x61, 0x66, 0x6f, 0x72, 0x6d, 0x31, 0x2e,
0x4f, 0x70, 0x65, 0x6e, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75,
0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12,
0x74, 0x0a, 0x17, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x43, 0x6f, 0x6e,
0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2b, 0x2e, 0x74, 0x65, 0x72,
0x72, 0x61, 0x66, 0x6f, 0x72, 0x6d, 0x31, 0x2e, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x53, 0x74, 0x61,
0x63, 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e,
0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x74, 0x65, 0x72, 0x72, 0x61, 0x66,
0x6f, 0x72, 0x6d, 0x31, 0x2e, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x43,
0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x52, 0x65, 0x73,
0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x8c, 0x01, 0x0a, 0x1f, 0x46, 0x69, 0x6e, 0x64, 0x53, 0x74,
0x61, 0x63, 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e,
0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x12, 0x33, 0x2e, 0x74, 0x65, 0x72, 0x72,
0x61, 0x66, 0x6f, 0x72, 0x6d, 0x31, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x53, 0x74, 0x61, 0x63, 0x6b,
0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f,
0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34,
0x2e, 0x74, 0x65, 0x72, 0x72, 0x61, 0x66, 0x6f, 0x72, 0x6d, 0x31, 0x2e, 0x46, 0x69, 0x6e, 0x64,
0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b,
0x2e, 0x74, 0x65, 0x72, 0x72, 0x61, 0x66, 0x6f, 0x72, 0x6d, 0x31, 0x2e, 0x4f, 0x70, 0x65, 0x6e,
0x53, 0x74, 0x61, 0x63, 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69,
0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x70,
0x6f, 0x6e, 0x73, 0x65, 0x12, 0x8f, 0x01, 0x0a, 0x20, 0x46, 0x69, 0x6e, 0x64, 0x53, 0x74, 0x61,
0x6f, 0x6e, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x74, 0x0a, 0x17, 0x43,
0x6c, 0x6f, 0x73, 0x65, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75,
0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2b, 0x2e, 0x74, 0x65, 0x72, 0x72, 0x61, 0x66, 0x6f,
0x72, 0x6d, 0x31, 0x2e, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x43, 0x6f,
0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x52, 0x65, 0x71, 0x75,
0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x74, 0x65, 0x72, 0x72, 0x61, 0x66, 0x6f, 0x72, 0x6d, 0x31,
0x2e, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69,
0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
0x65, 0x12, 0x8c, 0x01, 0x0a, 0x1f, 0x46, 0x69, 0x6e, 0x64, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x43,
0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x76,
0x69, 0x64, 0x65, 0x72, 0x73, 0x12, 0x33, 0x2e, 0x74, 0x65, 0x72, 0x72, 0x61, 0x66, 0x6f, 0x72,
0x6d, 0x31, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x43, 0x6f, 0x6e, 0x66,
0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65,
0x72, 0x73, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x74, 0x65, 0x72,
0x72, 0x61, 0x66, 0x6f, 0x72, 0x6d, 0x31, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x53, 0x74, 0x61, 0x63,
0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72,
0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
0x12, 0x8f, 0x01, 0x0a, 0x20, 0x46, 0x69, 0x6e, 0x64, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x43, 0x6f,
0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6d, 0x70, 0x6f,
0x6e, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x34, 0x2e, 0x74, 0x65, 0x72, 0x72, 0x61, 0x66, 0x6f, 0x72,
0x6d, 0x31, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x43, 0x6f, 0x6e, 0x66,
0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65,
0x6e, 0x74, 0x73, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x35, 0x2e, 0x74, 0x65,
0x72, 0x72, 0x61, 0x66, 0x6f, 0x72, 0x6d, 0x31, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x53, 0x74, 0x61,
0x63, 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43,
0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x34, 0x2e, 0x74, 0x65, 0x72, 0x72,
0x61, 0x66, 0x6f, 0x72, 0x6d, 0x31, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x53, 0x74, 0x61, 0x63, 0x6b,
0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6d,
0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
0x35, 0x2e, 0x74, 0x65, 0x72, 0x72, 0x61, 0x66, 0x6f, 0x72, 0x6d, 0x31, 0x2e, 0x46, 0x69, 0x6e,
0x64, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74,
0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x52, 0x65,
0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
0x73, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
}
var (
@ -1496,67 +1792,81 @@ func file_terraform1_proto_rawDescGZIP() []byte {
return file_terraform1_proto_rawDescData
}
var file_terraform1_proto_enumTypes = make([]protoimpl.EnumInfo, 1)
var file_terraform1_proto_msgTypes = make([]protoimpl.MessageInfo, 27)
var file_terraform1_proto_enumTypes = make([]protoimpl.EnumInfo, 2)
var file_terraform1_proto_msgTypes = make([]protoimpl.MessageInfo, 32)
var file_terraform1_proto_goTypes = []interface{}{
(Diagnostic_Severity)(0), // 0: terraform1.Diagnostic.Severity
(*Handshake)(nil), // 1: terraform1.Handshake
(*OpenSourceBundle)(nil), // 2: terraform1.OpenSourceBundle
(*CloseSourceBundle)(nil), // 3: terraform1.CloseSourceBundle
(*ClientCapabilities)(nil), // 4: terraform1.ClientCapabilities
(*ServerCapabilities)(nil), // 5: terraform1.ServerCapabilities
(*OpenStackConfiguration)(nil), // 6: terraform1.OpenStackConfiguration
(*CloseStackConfiguration)(nil), // 7: terraform1.CloseStackConfiguration
(*FindStackConfigurationComponents)(nil), // 8: terraform1.FindStackConfigurationComponents
(*FindStackConfigurationProviders)(nil), // 9: terraform1.FindStackConfigurationProviders
(*SourceAddress)(nil), // 10: terraform1.SourceAddress
(*Diagnostic)(nil), // 11: terraform1.Diagnostic
(*SourceRange)(nil), // 12: terraform1.SourceRange
(*SourcePos)(nil), // 13: terraform1.SourcePos
(*Handshake_Request)(nil), // 14: terraform1.Handshake.Request
(*Handshake_Response)(nil), // 15: terraform1.Handshake.Response
(*OpenSourceBundle_Request)(nil), // 16: terraform1.OpenSourceBundle.Request
(*OpenSourceBundle_Response)(nil), // 17: terraform1.OpenSourceBundle.Response
(*CloseSourceBundle_Request)(nil), // 18: terraform1.CloseSourceBundle.Request
(*CloseSourceBundle_Response)(nil), // 19: terraform1.CloseSourceBundle.Response
(*OpenStackConfiguration_Request)(nil), // 20: terraform1.OpenStackConfiguration.Request
(*OpenStackConfiguration_Response)(nil), // 21: terraform1.OpenStackConfiguration.Response
(*CloseStackConfiguration_Request)(nil), // 22: terraform1.CloseStackConfiguration.Request
(*CloseStackConfiguration_Response)(nil), // 23: terraform1.CloseStackConfiguration.Response
(*FindStackConfigurationComponents_Request)(nil), // 24: terraform1.FindStackConfigurationComponents.Request
(*FindStackConfigurationComponents_Response)(nil), // 25: terraform1.FindStackConfigurationComponents.Response
(*FindStackConfigurationProviders_Request)(nil), // 26: terraform1.FindStackConfigurationProviders.Request
(*FindStackConfigurationProviders_Response)(nil), // 27: terraform1.FindStackConfigurationProviders.Response
(FindStackConfigurationComponents_Instances)(0), // 0: terraform1.FindStackConfigurationComponents.Instances
(Diagnostic_Severity)(0), // 1: terraform1.Diagnostic.Severity
(*Handshake)(nil), // 2: terraform1.Handshake
(*OpenSourceBundle)(nil), // 3: terraform1.OpenSourceBundle
(*CloseSourceBundle)(nil), // 4: terraform1.CloseSourceBundle
(*ClientCapabilities)(nil), // 5: terraform1.ClientCapabilities
(*ServerCapabilities)(nil), // 6: terraform1.ServerCapabilities
(*OpenStackConfiguration)(nil), // 7: terraform1.OpenStackConfiguration
(*CloseStackConfiguration)(nil), // 8: terraform1.CloseStackConfiguration
(*FindStackConfigurationComponents)(nil), // 9: terraform1.FindStackConfigurationComponents
(*FindStackConfigurationProviders)(nil), // 10: terraform1.FindStackConfigurationProviders
(*SourceAddress)(nil), // 11: terraform1.SourceAddress
(*Diagnostic)(nil), // 12: terraform1.Diagnostic
(*SourceRange)(nil), // 13: terraform1.SourceRange
(*SourcePos)(nil), // 14: terraform1.SourcePos
(*Handshake_Request)(nil), // 15: terraform1.Handshake.Request
(*Handshake_Response)(nil), // 16: terraform1.Handshake.Response
(*OpenSourceBundle_Request)(nil), // 17: terraform1.OpenSourceBundle.Request
(*OpenSourceBundle_Response)(nil), // 18: terraform1.OpenSourceBundle.Response
(*CloseSourceBundle_Request)(nil), // 19: terraform1.CloseSourceBundle.Request
(*CloseSourceBundle_Response)(nil), // 20: terraform1.CloseSourceBundle.Response
(*OpenStackConfiguration_Request)(nil), // 21: terraform1.OpenStackConfiguration.Request
(*OpenStackConfiguration_Response)(nil), // 22: terraform1.OpenStackConfiguration.Response
(*CloseStackConfiguration_Request)(nil), // 23: terraform1.CloseStackConfiguration.Request
(*CloseStackConfiguration_Response)(nil), // 24: terraform1.CloseStackConfiguration.Response
(*FindStackConfigurationComponents_Request)(nil), // 25: terraform1.FindStackConfigurationComponents.Request
(*FindStackConfigurationComponents_Response)(nil), // 26: terraform1.FindStackConfigurationComponents.Response
(*FindStackConfigurationComponents_StackConfig)(nil), // 27: terraform1.FindStackConfigurationComponents.StackConfig
(*FindStackConfigurationComponents_EmbeddedStack)(nil), // 28: terraform1.FindStackConfigurationComponents.EmbeddedStack
(*FindStackConfigurationComponents_Component)(nil), // 29: terraform1.FindStackConfigurationComponents.Component
nil, // 30: terraform1.FindStackConfigurationComponents.StackConfig.ComponentsEntry
nil, // 31: terraform1.FindStackConfigurationComponents.StackConfig.EmbeddedStacksEntry
(*FindStackConfigurationProviders_Request)(nil), // 32: terraform1.FindStackConfigurationProviders.Request
(*FindStackConfigurationProviders_Response)(nil), // 33: terraform1.FindStackConfigurationProviders.Response
}
var file_terraform1_proto_depIdxs = []int32{
0, // 0: terraform1.Diagnostic.severity:type_name -> terraform1.Diagnostic.Severity
12, // 1: terraform1.Diagnostic.subject:type_name -> terraform1.SourceRange
12, // 2: terraform1.Diagnostic.context:type_name -> terraform1.SourceRange
13, // 3: terraform1.SourceRange.start:type_name -> terraform1.SourcePos
13, // 4: terraform1.SourceRange.end:type_name -> terraform1.SourcePos
4, // 5: terraform1.Handshake.Request.capabilities:type_name -> terraform1.ClientCapabilities
5, // 6: terraform1.Handshake.Response.capabilities:type_name -> terraform1.ServerCapabilities
10, // 7: terraform1.OpenStackConfiguration.Request.source_address:type_name -> terraform1.SourceAddress
11, // 8: terraform1.OpenStackConfiguration.Response.diagnostics:type_name -> terraform1.Diagnostic
14, // 9: terraform1.Setup.Handshake:input_type -> terraform1.Handshake.Request
16, // 10: terraform1.Dependencies.OpenSourceBundle:input_type -> terraform1.OpenSourceBundle.Request
18, // 11: terraform1.Dependencies.CloseSourceBundle:input_type -> terraform1.CloseSourceBundle.Request
20, // 12: terraform1.Stacks.OpenStackConfiguration:input_type -> terraform1.OpenStackConfiguration.Request
22, // 13: terraform1.Stacks.CloseStackConfiguration:input_type -> terraform1.CloseStackConfiguration.Request
26, // 14: terraform1.Stacks.FindStackConfigurationProviders:input_type -> terraform1.FindStackConfigurationProviders.Request
24, // 15: terraform1.Stacks.FindStackConfigurationComponents:input_type -> terraform1.FindStackConfigurationComponents.Request
15, // 16: terraform1.Setup.Handshake:output_type -> terraform1.Handshake.Response
17, // 17: terraform1.Dependencies.OpenSourceBundle:output_type -> terraform1.OpenSourceBundle.Response
19, // 18: terraform1.Dependencies.CloseSourceBundle:output_type -> terraform1.CloseSourceBundle.Response
21, // 19: terraform1.Stacks.OpenStackConfiguration:output_type -> terraform1.OpenStackConfiguration.Response
23, // 20: terraform1.Stacks.CloseStackConfiguration:output_type -> terraform1.CloseStackConfiguration.Response
27, // 21: terraform1.Stacks.FindStackConfigurationProviders:output_type -> terraform1.FindStackConfigurationProviders.Response
25, // 22: terraform1.Stacks.FindStackConfigurationComponents:output_type -> terraform1.FindStackConfigurationComponents.Response
16, // [16:23] is the sub-list for method output_type
9, // [9:16] is the sub-list for method input_type
9, // [9:9] is the sub-list for extension type_name
9, // [9:9] is the sub-list for extension extendee
0, // [0:9] is the sub-list for field type_name
1, // 0: terraform1.Diagnostic.severity:type_name -> terraform1.Diagnostic.Severity
13, // 1: terraform1.Diagnostic.subject:type_name -> terraform1.SourceRange
13, // 2: terraform1.Diagnostic.context:type_name -> terraform1.SourceRange
14, // 3: terraform1.SourceRange.start:type_name -> terraform1.SourcePos
14, // 4: terraform1.SourceRange.end:type_name -> terraform1.SourcePos
5, // 5: terraform1.Handshake.Request.capabilities:type_name -> terraform1.ClientCapabilities
6, // 6: terraform1.Handshake.Response.capabilities:type_name -> terraform1.ServerCapabilities
11, // 7: terraform1.OpenStackConfiguration.Request.source_address:type_name -> terraform1.SourceAddress
12, // 8: terraform1.OpenStackConfiguration.Response.diagnostics:type_name -> terraform1.Diagnostic
27, // 9: terraform1.FindStackConfigurationComponents.Response.config:type_name -> terraform1.FindStackConfigurationComponents.StackConfig
30, // 10: terraform1.FindStackConfigurationComponents.StackConfig.components:type_name -> terraform1.FindStackConfigurationComponents.StackConfig.ComponentsEntry
31, // 11: terraform1.FindStackConfigurationComponents.StackConfig.embedded_stacks:type_name -> terraform1.FindStackConfigurationComponents.StackConfig.EmbeddedStacksEntry
0, // 12: terraform1.FindStackConfigurationComponents.EmbeddedStack.instances:type_name -> terraform1.FindStackConfigurationComponents.Instances
27, // 13: terraform1.FindStackConfigurationComponents.EmbeddedStack.config:type_name -> terraform1.FindStackConfigurationComponents.StackConfig
0, // 14: terraform1.FindStackConfigurationComponents.Component.instances:type_name -> terraform1.FindStackConfigurationComponents.Instances
29, // 15: terraform1.FindStackConfigurationComponents.StackConfig.ComponentsEntry.value:type_name -> terraform1.FindStackConfigurationComponents.Component
28, // 16: terraform1.FindStackConfigurationComponents.StackConfig.EmbeddedStacksEntry.value:type_name -> terraform1.FindStackConfigurationComponents.EmbeddedStack
15, // 17: terraform1.Setup.Handshake:input_type -> terraform1.Handshake.Request
17, // 18: terraform1.Dependencies.OpenSourceBundle:input_type -> terraform1.OpenSourceBundle.Request
19, // 19: terraform1.Dependencies.CloseSourceBundle:input_type -> terraform1.CloseSourceBundle.Request
21, // 20: terraform1.Stacks.OpenStackConfiguration:input_type -> terraform1.OpenStackConfiguration.Request
23, // 21: terraform1.Stacks.CloseStackConfiguration:input_type -> terraform1.CloseStackConfiguration.Request
32, // 22: terraform1.Stacks.FindStackConfigurationProviders:input_type -> terraform1.FindStackConfigurationProviders.Request
25, // 23: terraform1.Stacks.FindStackConfigurationComponents:input_type -> terraform1.FindStackConfigurationComponents.Request
16, // 24: terraform1.Setup.Handshake:output_type -> terraform1.Handshake.Response
18, // 25: terraform1.Dependencies.OpenSourceBundle:output_type -> terraform1.OpenSourceBundle.Response
20, // 26: terraform1.Dependencies.CloseSourceBundle:output_type -> terraform1.CloseSourceBundle.Response
22, // 27: terraform1.Stacks.OpenStackConfiguration:output_type -> terraform1.OpenStackConfiguration.Response
24, // 28: terraform1.Stacks.CloseStackConfiguration:output_type -> terraform1.CloseStackConfiguration.Response
33, // 29: terraform1.Stacks.FindStackConfigurationProviders:output_type -> terraform1.FindStackConfigurationProviders.Response
26, // 30: terraform1.Stacks.FindStackConfigurationComponents:output_type -> terraform1.FindStackConfigurationComponents.Response
24, // [24:31] is the sub-list for method output_type
17, // [17:24] is the sub-list for method input_type
17, // [17:17] is the sub-list for extension type_name
17, // [17:17] is the sub-list for extension extendee
0, // [0:17] is the sub-list for field type_name
}
func init() { file_terraform1_proto_init() }
@ -1866,7 +2176,7 @@ func file_terraform1_proto_init() {
}
}
file_terraform1_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*FindStackConfigurationProviders_Request); i {
switch v := v.(*FindStackConfigurationComponents_StackConfig); i {
case 0:
return &v.state
case 1:
@ -1878,6 +2188,42 @@ func file_terraform1_proto_init() {
}
}
file_terraform1_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*FindStackConfigurationComponents_EmbeddedStack); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_terraform1_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*FindStackConfigurationComponents_Component); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_terraform1_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*FindStackConfigurationProviders_Request); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_terraform1_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*FindStackConfigurationProviders_Response); i {
case 0:
return &v.state
@ -1895,8 +2241,8 @@ func file_terraform1_proto_init() {
File: protoimpl.DescBuilder{
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: file_terraform1_proto_rawDesc,
NumEnums: 1,
NumMessages: 27,
NumEnums: 2,
NumMessages: 32,
NumExtensions: 0,
NumServices: 3,
},

@ -110,7 +110,26 @@ message FindStackConfigurationComponents {
int64 stack_config_handle = 1;
}
message Response {
// TODO
StackConfig config = 1;
}
enum Instances {
SINGLE = 0;
COUNT = 1;
FOR_EACH = 2;
}
message StackConfig {
map<string, Component> components = 1;
map<string, EmbeddedStack> embedded_stacks = 2;
}
message EmbeddedStack {
string source_addr = 1;
Instances instances = 2;
StackConfig config = 3;
}
message Component {
string source_addr = 1;
Instances instances = 2;
}
}
@ -126,6 +145,10 @@ message FindStackConfigurationProviders {
// A source address in the same form as it would appear in a Terraform
// configuration: a source string combined with an optional version constraint
// string, where the latter is valid only for registry module addresses.
//
// This is not used for "final" source addresses that have already been reduced
// to an exact version selection. For those we just directly encode the string
// representation of the final address, including a version number if necessary.
message SourceAddress {
string source = 1;
string versions = 2;

@ -0,0 +1,3 @@
# This is intentionally empty. Some of our tests use this to straightfowardly
# test the empty configuration case, so adding declarations here will break
# those tests.

@ -0,0 +1,3 @@
# This module is intentionally empty, since it's called from stack
# configurations where we're only testing the stack configuration stuff and
# not the main Terraform language stuff.

@ -0,0 +1,18 @@
component "single" {
source = "./empty-module"
}
component "for_each" {
source = "./empty-module"
for_each = {}
}
stack "single" {
source = "./child"
}
stack "for_each" {
source = "./child"
for_each = {}
}
Loading…
Cancel
Save