mirror of
https://github.com/coder/coder.git
synced 2026-09-24 15:04:27 +08:00
feat: use proto streams to increase maximum module files payload (#18268)
This PR implements protobuf streaming to handle large module files by: 1. **Streaming large payloads**: When module files exceed the 4MB limit, they're streamed in chunks using a new UploadFile RPC method 2. **Database storage**: Streamed files are stored in the database and referenced by hash for deduplication 3. **Backward compatibility**: Small module files continue using the existing direct payload method
This commit is contained in:
Generated
+139
@@ -0,0 +1,139 @@
|
||||
package proto
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"crypto/sha256"
|
||||
"sync"
|
||||
|
||||
"golang.org/x/xerrors"
|
||||
)
|
||||
|
||||
const (
|
||||
ChunkSize = 2 << 20 // 2 MiB
|
||||
)
|
||||
|
||||
type DataBuilder struct {
|
||||
Type DataUploadType
|
||||
Hash []byte
|
||||
Size int64
|
||||
ChunkCount int32
|
||||
|
||||
// chunkIndex is the index of the next chunk to be added.
|
||||
chunkIndex int32
|
||||
mu sync.Mutex
|
||||
data []byte
|
||||
}
|
||||
|
||||
func NewDataBuilder(req *DataUpload) (*DataBuilder, error) {
|
||||
if len(req.DataHash) != 32 {
|
||||
return nil, xerrors.Errorf("data hash must be 32 bytes, got %d bytes", len(req.DataHash))
|
||||
}
|
||||
|
||||
return &DataBuilder{
|
||||
Type: req.UploadType,
|
||||
Hash: req.DataHash,
|
||||
Size: req.FileSize,
|
||||
ChunkCount: req.Chunks,
|
||||
|
||||
// Initial conditions
|
||||
chunkIndex: 0,
|
||||
data: make([]byte, 0, req.FileSize),
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (b *DataBuilder) Add(chunk *ChunkPiece) (bool, error) {
|
||||
b.mu.Lock()
|
||||
defer b.mu.Unlock()
|
||||
|
||||
if !bytes.Equal(b.Hash, chunk.FullDataHash) {
|
||||
return b.done(), xerrors.Errorf("data hash does not match, this chunk is for a different data upload")
|
||||
}
|
||||
|
||||
if b.done() {
|
||||
return b.done(), xerrors.Errorf("data upload is already complete, cannot add more chunks")
|
||||
}
|
||||
|
||||
if chunk.PieceIndex != b.chunkIndex {
|
||||
return b.done(), xerrors.Errorf("chunks ordering, expected chunk index %d, got %d", b.chunkIndex, chunk.PieceIndex)
|
||||
}
|
||||
|
||||
expectedSize := len(b.data) + len(chunk.Data)
|
||||
if expectedSize > int(b.Size) {
|
||||
return b.done(), xerrors.Errorf("data exceeds expected size, data is now %d bytes, %d bytes over the limit of %d",
|
||||
expectedSize, b.Size-int64(expectedSize), b.Size)
|
||||
}
|
||||
|
||||
b.data = append(b.data, chunk.Data...)
|
||||
b.chunkIndex++
|
||||
|
||||
return b.done(), nil
|
||||
}
|
||||
|
||||
// IsDone is always safe to call
|
||||
func (b *DataBuilder) IsDone() bool {
|
||||
b.mu.Lock()
|
||||
defer b.mu.Unlock()
|
||||
return b.done()
|
||||
}
|
||||
|
||||
func (b *DataBuilder) Complete() ([]byte, error) {
|
||||
b.mu.Lock()
|
||||
defer b.mu.Unlock()
|
||||
|
||||
if !b.done() {
|
||||
return nil, xerrors.Errorf("data upload is not complete, expected %d chunks, got %d", b.ChunkCount, b.chunkIndex)
|
||||
}
|
||||
|
||||
if len(b.data) != int(b.Size) {
|
||||
return nil, xerrors.Errorf("data size mismatch, expected %d bytes, got %d bytes", b.Size, len(b.data))
|
||||
}
|
||||
|
||||
hash := sha256.Sum256(b.data)
|
||||
if !bytes.Equal(hash[:], b.Hash) {
|
||||
return nil, xerrors.Errorf("data hash mismatch, expected %x, got %x", b.Hash, hash[:])
|
||||
}
|
||||
|
||||
// A safe method would be to return a copy of the data, but that would have to
|
||||
// allocate double the memory. Just return the original slice, and let the caller
|
||||
// handle the memory management.
|
||||
return b.data, nil
|
||||
}
|
||||
|
||||
func (b *DataBuilder) done() bool {
|
||||
return b.chunkIndex >= b.ChunkCount
|
||||
}
|
||||
|
||||
func BytesToDataUpload(dataType DataUploadType, data []byte) (*DataUpload, []*ChunkPiece) {
|
||||
fullHash := sha256.Sum256(data)
|
||||
//nolint:gosec // not going over int32
|
||||
size := int32(len(data))
|
||||
// basically ceiling division to get the number of chunks required to
|
||||
// hold the data, each chunk is ChunkSize bytes.
|
||||
chunkCount := (size + ChunkSize - 1) / ChunkSize
|
||||
|
||||
req := &DataUpload{
|
||||
DataHash: fullHash[:],
|
||||
FileSize: int64(size),
|
||||
Chunks: chunkCount,
|
||||
UploadType: dataType,
|
||||
}
|
||||
|
||||
chunks := make([]*ChunkPiece, 0, chunkCount)
|
||||
for i := int32(0); i < chunkCount; i++ {
|
||||
start := int64(i) * ChunkSize
|
||||
end := start + ChunkSize
|
||||
if end > int64(size) {
|
||||
end = int64(size)
|
||||
}
|
||||
chunkData := data[start:end]
|
||||
|
||||
chunk := &ChunkPiece{
|
||||
PieceIndex: i,
|
||||
Data: chunkData,
|
||||
FullDataHash: fullHash[:],
|
||||
}
|
||||
chunks = append(chunks, chunk)
|
||||
}
|
||||
|
||||
return req, chunks
|
||||
}
|
||||
Generated
+98
@@ -0,0 +1,98 @@
|
||||
package proto_test
|
||||
|
||||
import (
|
||||
crand "crypto/rand"
|
||||
"math/rand"
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/require"
|
||||
|
||||
"github.com/coder/coder/v2/provisionersdk/proto"
|
||||
)
|
||||
|
||||
// Fuzz must be run manually with the `-fuzz` flag to generate random test cases.
|
||||
// By default, it only runs the added seed corpus cases.
|
||||
// go test -fuzz=FuzzBytesToDataUpload
|
||||
func FuzzBytesToDataUpload(f *testing.F) {
|
||||
// Cases to always run in standard `go test` runs.
|
||||
always := [][]byte{
|
||||
{},
|
||||
[]byte("1"),
|
||||
[]byte("small"),
|
||||
}
|
||||
for _, data := range always {
|
||||
f.Add(data)
|
||||
}
|
||||
|
||||
f.Fuzz(func(t *testing.T, data []byte) {
|
||||
first, chunks := proto.BytesToDataUpload(proto.DataUploadType_UPLOAD_TYPE_MODULE_FILES, data)
|
||||
|
||||
builder, err := proto.NewDataBuilder(first)
|
||||
require.NoError(t, err)
|
||||
|
||||
var done bool
|
||||
for _, chunk := range chunks {
|
||||
require.False(t, done)
|
||||
done, err = builder.Add(chunk)
|
||||
require.NoError(t, err)
|
||||
}
|
||||
|
||||
if len(chunks) > 0 {
|
||||
require.True(t, done)
|
||||
}
|
||||
|
||||
finalData, err := builder.Complete()
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, data, finalData)
|
||||
})
|
||||
}
|
||||
|
||||
// TestBytesToDataUpload tests the BytesToDataUpload function and the DataBuilder
|
||||
// with large random data uploads.
|
||||
func TestBytesToDataUpload(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
for i := 0; i < 20; i++ {
|
||||
// Generate random data
|
||||
//nolint:gosec // Just a unit test
|
||||
chunkCount := 1 + rand.Intn(3)
|
||||
//nolint:gosec // Just a unit test
|
||||
size := (chunkCount * proto.ChunkSize) + (rand.Int() % proto.ChunkSize)
|
||||
data := make([]byte, size)
|
||||
_, err := crand.Read(data)
|
||||
require.NoError(t, err)
|
||||
|
||||
first, chunks := proto.BytesToDataUpload(proto.DataUploadType_UPLOAD_TYPE_MODULE_FILES, data)
|
||||
builder, err := proto.NewDataBuilder(first)
|
||||
require.NoError(t, err)
|
||||
|
||||
// Try to add some bad chunks
|
||||
_, err = builder.Add(&proto.ChunkPiece{Data: []byte{}, FullDataHash: make([]byte, 32)})
|
||||
require.ErrorContains(t, err, "data hash does not match")
|
||||
|
||||
// Verify 'Complete' fails before adding any chunks
|
||||
_, err = builder.Complete()
|
||||
require.ErrorContains(t, err, "data upload is not complete")
|
||||
|
||||
// Add the chunks
|
||||
var done bool
|
||||
for _, chunk := range chunks {
|
||||
require.False(t, done, "data upload should not be complete before adding all chunks")
|
||||
|
||||
done, err = builder.Add(chunk)
|
||||
require.NoError(t, err, "chunk %d should be added successfully", chunk.PieceIndex)
|
||||
}
|
||||
require.True(t, done, "data upload should be complete after adding all chunks")
|
||||
|
||||
// Try to add another chunk after completion
|
||||
done, err = builder.Add(chunks[0])
|
||||
require.ErrorContains(t, err, "data upload is already complete")
|
||||
require.True(t, done, "still complete")
|
||||
|
||||
// Verify the final data matches the original
|
||||
got, err := builder.Complete()
|
||||
require.NoError(t, err)
|
||||
|
||||
require.Equal(t, data, got, "final data should match the original data")
|
||||
}
|
||||
}
|
||||
Generated
+563
-258
@@ -397,6 +397,55 @@ func (TimingState) EnumDescriptor() ([]byte, []int) {
|
||||
return file_provisionersdk_proto_provisioner_proto_rawDescGZIP(), []int{6}
|
||||
}
|
||||
|
||||
type DataUploadType int32
|
||||
|
||||
const (
|
||||
DataUploadType_UPLOAD_TYPE_UNKNOWN DataUploadType = 0
|
||||
// UPLOAD_TYPE_MODULE_FILES is used to stream over terraform module files.
|
||||
// These files are located in `.terraform/modules` and are used for dynamic
|
||||
// parameters.
|
||||
DataUploadType_UPLOAD_TYPE_MODULE_FILES DataUploadType = 1
|
||||
)
|
||||
|
||||
// Enum value maps for DataUploadType.
|
||||
var (
|
||||
DataUploadType_name = map[int32]string{
|
||||
0: "UPLOAD_TYPE_UNKNOWN",
|
||||
1: "UPLOAD_TYPE_MODULE_FILES",
|
||||
}
|
||||
DataUploadType_value = map[string]int32{
|
||||
"UPLOAD_TYPE_UNKNOWN": 0,
|
||||
"UPLOAD_TYPE_MODULE_FILES": 1,
|
||||
}
|
||||
)
|
||||
|
||||
func (x DataUploadType) Enum() *DataUploadType {
|
||||
p := new(DataUploadType)
|
||||
*p = x
|
||||
return p
|
||||
}
|
||||
|
||||
func (x DataUploadType) String() string {
|
||||
return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
|
||||
}
|
||||
|
||||
func (DataUploadType) Descriptor() protoreflect.EnumDescriptor {
|
||||
return file_provisionersdk_proto_provisioner_proto_enumTypes[7].Descriptor()
|
||||
}
|
||||
|
||||
func (DataUploadType) Type() protoreflect.EnumType {
|
||||
return &file_provisionersdk_proto_provisioner_proto_enumTypes[7]
|
||||
}
|
||||
|
||||
func (x DataUploadType) Number() protoreflect.EnumNumber {
|
||||
return protoreflect.EnumNumber(x)
|
||||
}
|
||||
|
||||
// Deprecated: Use DataUploadType.Descriptor instead.
|
||||
func (DataUploadType) EnumDescriptor() ([]byte, []int) {
|
||||
return file_provisionersdk_proto_provisioner_proto_rawDescGZIP(), []int{7}
|
||||
}
|
||||
|
||||
// Empty indicates a successful request/response.
|
||||
type Empty struct {
|
||||
state protoimpl.MessageState
|
||||
@@ -2996,6 +3045,12 @@ type PlanRequest struct {
|
||||
VariableValues []*VariableValue `protobuf:"bytes,3,rep,name=variable_values,json=variableValues,proto3" json:"variable_values,omitempty"`
|
||||
ExternalAuthProviders []*ExternalAuthProvider `protobuf:"bytes,4,rep,name=external_auth_providers,json=externalAuthProviders,proto3" json:"external_auth_providers,omitempty"`
|
||||
PreviousParameterValues []*RichParameterValue `protobuf:"bytes,5,rep,name=previous_parameter_values,json=previousParameterValues,proto3" json:"previous_parameter_values,omitempty"`
|
||||
// If true, the provisioner can safely assume the caller does not need the
|
||||
// module files downloaded by the `terraform init` command.
|
||||
// Ideally this boolean would be flipped in its truthy value, however for
|
||||
// backwards compatibility reasons, the zero value should be the previous
|
||||
// behavior of downloading the module files.
|
||||
OmitModuleFiles bool `protobuf:"varint,6,opt,name=omit_module_files,json=omitModuleFiles,proto3" json:"omit_module_files,omitempty"`
|
||||
}
|
||||
|
||||
func (x *PlanRequest) Reset() {
|
||||
@@ -3065,6 +3120,13 @@ func (x *PlanRequest) GetPreviousParameterValues() []*RichParameterValue {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (x *PlanRequest) GetOmitModuleFiles() bool {
|
||||
if x != nil {
|
||||
return x.OmitModuleFiles
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
// PlanComplete indicates a request to plan completed.
|
||||
type PlanComplete struct {
|
||||
state protoimpl.MessageState
|
||||
@@ -3081,6 +3143,7 @@ type PlanComplete struct {
|
||||
Plan []byte `protobuf:"bytes,9,opt,name=plan,proto3" json:"plan,omitempty"`
|
||||
ResourceReplacements []*ResourceReplacement `protobuf:"bytes,10,rep,name=resource_replacements,json=resourceReplacements,proto3" json:"resource_replacements,omitempty"`
|
||||
ModuleFiles []byte `protobuf:"bytes,11,opt,name=module_files,json=moduleFiles,proto3" json:"module_files,omitempty"`
|
||||
ModuleFilesHash []byte `protobuf:"bytes,12,opt,name=module_files_hash,json=moduleFilesHash,proto3" json:"module_files_hash,omitempty"`
|
||||
}
|
||||
|
||||
func (x *PlanComplete) Reset() {
|
||||
@@ -3185,6 +3248,13 @@ func (x *PlanComplete) GetModuleFiles() []byte {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (x *PlanComplete) GetModuleFilesHash() []byte {
|
||||
if x != nil {
|
||||
return x.ModuleFilesHash
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// ApplyRequest asks the provisioner to apply the changes. Apply MUST be preceded by a successful plan request/response
|
||||
// in the same Session. The plan data is not transmitted over the wire and is cached by the provisioner in the Session.
|
||||
type ApplyRequest struct {
|
||||
@@ -3590,6 +3660,8 @@ type Response struct {
|
||||
// *Response_Parse
|
||||
// *Response_Plan
|
||||
// *Response_Apply
|
||||
// *Response_DataUpload
|
||||
// *Response_ChunkPiece
|
||||
Type isResponse_Type `protobuf_oneof:"type"`
|
||||
}
|
||||
|
||||
@@ -3660,6 +3732,20 @@ func (x *Response) GetApply() *ApplyComplete {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (x *Response) GetDataUpload() *DataUpload {
|
||||
if x, ok := x.GetType().(*Response_DataUpload); ok {
|
||||
return x.DataUpload
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (x *Response) GetChunkPiece() *ChunkPiece {
|
||||
if x, ok := x.GetType().(*Response_ChunkPiece); ok {
|
||||
return x.ChunkPiece
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
type isResponse_Type interface {
|
||||
isResponse_Type()
|
||||
}
|
||||
@@ -3680,6 +3766,14 @@ type Response_Apply struct {
|
||||
Apply *ApplyComplete `protobuf:"bytes,4,opt,name=apply,proto3,oneof"`
|
||||
}
|
||||
|
||||
type Response_DataUpload struct {
|
||||
DataUpload *DataUpload `protobuf:"bytes,5,opt,name=data_upload,json=dataUpload,proto3,oneof"`
|
||||
}
|
||||
|
||||
type Response_ChunkPiece struct {
|
||||
ChunkPiece *ChunkPiece `protobuf:"bytes,6,opt,name=chunk_piece,json=chunkPiece,proto3,oneof"`
|
||||
}
|
||||
|
||||
func (*Response_Log) isResponse_Type() {}
|
||||
|
||||
func (*Response_Parse) isResponse_Type() {}
|
||||
@@ -3688,6 +3782,151 @@ func (*Response_Plan) isResponse_Type() {}
|
||||
|
||||
func (*Response_Apply) isResponse_Type() {}
|
||||
|
||||
func (*Response_DataUpload) isResponse_Type() {}
|
||||
|
||||
func (*Response_ChunkPiece) isResponse_Type() {}
|
||||
|
||||
type DataUpload struct {
|
||||
state protoimpl.MessageState
|
||||
sizeCache protoimpl.SizeCache
|
||||
unknownFields protoimpl.UnknownFields
|
||||
|
||||
UploadType DataUploadType `protobuf:"varint,1,opt,name=upload_type,json=uploadType,proto3,enum=provisioner.DataUploadType" json:"upload_type,omitempty"`
|
||||
// data_hash is the sha256 of the payload to be uploaded.
|
||||
// This is also used to uniquely identify the upload.
|
||||
DataHash []byte `protobuf:"bytes,2,opt,name=data_hash,json=dataHash,proto3" json:"data_hash,omitempty"`
|
||||
// file_size is the total size of the data being uploaded.
|
||||
FileSize int64 `protobuf:"varint,3,opt,name=file_size,json=fileSize,proto3" json:"file_size,omitempty"`
|
||||
// Number of chunks to be uploaded.
|
||||
Chunks int32 `protobuf:"varint,4,opt,name=chunks,proto3" json:"chunks,omitempty"`
|
||||
}
|
||||
|
||||
func (x *DataUpload) Reset() {
|
||||
*x = DataUpload{}
|
||||
if protoimpl.UnsafeEnabled {
|
||||
mi := &file_provisionersdk_proto_provisioner_proto_msgTypes[41]
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
ms.StoreMessageInfo(mi)
|
||||
}
|
||||
}
|
||||
|
||||
func (x *DataUpload) String() string {
|
||||
return protoimpl.X.MessageStringOf(x)
|
||||
}
|
||||
|
||||
func (*DataUpload) ProtoMessage() {}
|
||||
|
||||
func (x *DataUpload) ProtoReflect() protoreflect.Message {
|
||||
mi := &file_provisionersdk_proto_provisioner_proto_msgTypes[41]
|
||||
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 DataUpload.ProtoReflect.Descriptor instead.
|
||||
func (*DataUpload) Descriptor() ([]byte, []int) {
|
||||
return file_provisionersdk_proto_provisioner_proto_rawDescGZIP(), []int{41}
|
||||
}
|
||||
|
||||
func (x *DataUpload) GetUploadType() DataUploadType {
|
||||
if x != nil {
|
||||
return x.UploadType
|
||||
}
|
||||
return DataUploadType_UPLOAD_TYPE_UNKNOWN
|
||||
}
|
||||
|
||||
func (x *DataUpload) GetDataHash() []byte {
|
||||
if x != nil {
|
||||
return x.DataHash
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (x *DataUpload) GetFileSize() int64 {
|
||||
if x != nil {
|
||||
return x.FileSize
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
func (x *DataUpload) GetChunks() int32 {
|
||||
if x != nil {
|
||||
return x.Chunks
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
// ChunkPiece is used to stream over large files (over the 4mb limit).
|
||||
type ChunkPiece struct {
|
||||
state protoimpl.MessageState
|
||||
sizeCache protoimpl.SizeCache
|
||||
unknownFields protoimpl.UnknownFields
|
||||
|
||||
Data []byte `protobuf:"bytes,1,opt,name=data,proto3" json:"data,omitempty"`
|
||||
// full_data_hash should match the hash from the original
|
||||
// DataUpload message
|
||||
FullDataHash []byte `protobuf:"bytes,2,opt,name=full_data_hash,json=fullDataHash,proto3" json:"full_data_hash,omitempty"`
|
||||
PieceIndex int32 `protobuf:"varint,3,opt,name=piece_index,json=pieceIndex,proto3" json:"piece_index,omitempty"`
|
||||
}
|
||||
|
||||
func (x *ChunkPiece) Reset() {
|
||||
*x = ChunkPiece{}
|
||||
if protoimpl.UnsafeEnabled {
|
||||
mi := &file_provisionersdk_proto_provisioner_proto_msgTypes[42]
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
ms.StoreMessageInfo(mi)
|
||||
}
|
||||
}
|
||||
|
||||
func (x *ChunkPiece) String() string {
|
||||
return protoimpl.X.MessageStringOf(x)
|
||||
}
|
||||
|
||||
func (*ChunkPiece) ProtoMessage() {}
|
||||
|
||||
func (x *ChunkPiece) ProtoReflect() protoreflect.Message {
|
||||
mi := &file_provisionersdk_proto_provisioner_proto_msgTypes[42]
|
||||
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 ChunkPiece.ProtoReflect.Descriptor instead.
|
||||
func (*ChunkPiece) Descriptor() ([]byte, []int) {
|
||||
return file_provisionersdk_proto_provisioner_proto_rawDescGZIP(), []int{42}
|
||||
}
|
||||
|
||||
func (x *ChunkPiece) GetData() []byte {
|
||||
if x != nil {
|
||||
return x.Data
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (x *ChunkPiece) GetFullDataHash() []byte {
|
||||
if x != nil {
|
||||
return x.FullDataHash
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (x *ChunkPiece) GetPieceIndex() int32 {
|
||||
if x != nil {
|
||||
return x.PieceIndex
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
type Agent_Metadata struct {
|
||||
state protoimpl.MessageState
|
||||
sizeCache protoimpl.SizeCache
|
||||
@@ -3704,7 +3943,7 @@ type Agent_Metadata struct {
|
||||
func (x *Agent_Metadata) Reset() {
|
||||
*x = Agent_Metadata{}
|
||||
if protoimpl.UnsafeEnabled {
|
||||
mi := &file_provisionersdk_proto_provisioner_proto_msgTypes[41]
|
||||
mi := &file_provisionersdk_proto_provisioner_proto_msgTypes[43]
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
ms.StoreMessageInfo(mi)
|
||||
}
|
||||
@@ -3717,7 +3956,7 @@ func (x *Agent_Metadata) String() string {
|
||||
func (*Agent_Metadata) ProtoMessage() {}
|
||||
|
||||
func (x *Agent_Metadata) ProtoReflect() protoreflect.Message {
|
||||
mi := &file_provisionersdk_proto_provisioner_proto_msgTypes[41]
|
||||
mi := &file_provisionersdk_proto_provisioner_proto_msgTypes[43]
|
||||
if protoimpl.UnsafeEnabled && x != nil {
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
if ms.LoadMessageInfo() == nil {
|
||||
@@ -3789,7 +4028,7 @@ type Resource_Metadata struct {
|
||||
func (x *Resource_Metadata) Reset() {
|
||||
*x = Resource_Metadata{}
|
||||
if protoimpl.UnsafeEnabled {
|
||||
mi := &file_provisionersdk_proto_provisioner_proto_msgTypes[43]
|
||||
mi := &file_provisionersdk_proto_provisioner_proto_msgTypes[45]
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
ms.StoreMessageInfo(mi)
|
||||
}
|
||||
@@ -3802,7 +4041,7 @@ func (x *Resource_Metadata) String() string {
|
||||
func (*Resource_Metadata) ProtoMessage() {}
|
||||
|
||||
func (x *Resource_Metadata) ProtoReflect() protoreflect.Message {
|
||||
mi := &file_provisionersdk_proto_provisioner_proto_msgTypes[43]
|
||||
mi := &file_provisionersdk_proto_provisioner_proto_msgTypes[45]
|
||||
if protoimpl.UnsafeEnabled && x != nil {
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
if ms.LoadMessageInfo() == nil {
|
||||
@@ -4280,7 +4519,7 @@ var file_provisionersdk_proto_provisioner_proto_rawDesc = []byte{
|
||||
0x61, 0x67, 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, 0x14, 0x0a, 0x05, 0x76, 0x61,
|
||||
0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65,
|
||||
0x3a, 0x02, 0x38, 0x01, 0x22, 0x92, 0x03, 0x0a, 0x0b, 0x50, 0x6c, 0x61, 0x6e, 0x52, 0x65, 0x71,
|
||||
0x3a, 0x02, 0x38, 0x01, 0x22, 0xbe, 0x03, 0x0a, 0x0b, 0x50, 0x6c, 0x61, 0x6e, 0x52, 0x65, 0x71,
|
||||
0x75, 0x65, 0x73, 0x74, 0x12, 0x31, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61,
|
||||
0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69,
|
||||
0x6f, 0x6e, 0x65, 0x72, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d,
|
||||
@@ -4305,153 +4544,187 @@ var file_provisionersdk_proto_provisioner_proto_rawDesc = []byte{
|
||||
0x1f, 0x2e, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x65, 0x72, 0x2e, 0x52, 0x69,
|
||||
0x63, 0x68, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x56, 0x61, 0x6c, 0x75, 0x65,
|
||||
0x52, 0x17, 0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65,
|
||||
0x74, 0x65, 0x72, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x22, 0x93, 0x04, 0x0a, 0x0c, 0x50, 0x6c,
|
||||
0x61, 0x6e, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x72,
|
||||
0x72, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72,
|
||||
0x12, 0x33, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x02, 0x20,
|
||||
0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x65,
|
||||
0x72, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x09, 0x72, 0x65, 0x73, 0x6f,
|
||||
0x75, 0x72, 0x63, 0x65, 0x73, 0x12, 0x3a, 0x0a, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74,
|
||||
0x65, 0x72, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x70, 0x72, 0x6f, 0x76,
|
||||
0x69, 0x73, 0x69, 0x6f, 0x6e, 0x65, 0x72, 0x2e, 0x52, 0x69, 0x63, 0x68, 0x50, 0x61, 0x72, 0x61,
|
||||
0x6d, 0x65, 0x74, 0x65, 0x72, 0x52, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72,
|
||||
0x73, 0x12, 0x61, 0x0a, 0x17, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x61, 0x75,
|
||||
0x74, 0x68, 0x5f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x18, 0x04, 0x20, 0x03,
|
||||
0x28, 0x0b, 0x32, 0x29, 0x2e, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x65, 0x72,
|
||||
0x2e, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x41, 0x75, 0x74, 0x68, 0x50, 0x72, 0x6f,
|
||||
0x76, 0x69, 0x64, 0x65, 0x72, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x15, 0x65,
|
||||
0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x41, 0x75, 0x74, 0x68, 0x50, 0x72, 0x6f, 0x76, 0x69,
|
||||
0x64, 0x65, 0x72, 0x73, 0x12, 0x2d, 0x0a, 0x07, 0x74, 0x69, 0x6d, 0x69, 0x6e, 0x67, 0x73, 0x18,
|
||||
0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f,
|
||||
0x6e, 0x65, 0x72, 0x2e, 0x54, 0x69, 0x6d, 0x69, 0x6e, 0x67, 0x52, 0x07, 0x74, 0x69, 0x6d, 0x69,
|
||||
0x6e, 0x67, 0x73, 0x12, 0x2d, 0x0a, 0x07, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x18, 0x07,
|
||||
0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e,
|
||||
0x65, 0x72, 0x2e, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x52, 0x07, 0x6d, 0x6f, 0x64, 0x75, 0x6c,
|
||||
0x65, 0x73, 0x12, 0x2d, 0x0a, 0x07, 0x70, 0x72, 0x65, 0x73, 0x65, 0x74, 0x73, 0x18, 0x08, 0x20,
|
||||
0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x65,
|
||||
0x72, 0x2e, 0x50, 0x72, 0x65, 0x73, 0x65, 0x74, 0x52, 0x07, 0x70, 0x72, 0x65, 0x73, 0x65, 0x74,
|
||||
0x73, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x6c, 0x61, 0x6e, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0c, 0x52,
|
||||
0x04, 0x70, 0x6c, 0x61, 0x6e, 0x12, 0x55, 0x0a, 0x15, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63,
|
||||
0x65, 0x5f, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x0a,
|
||||
0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e,
|
||||
0x65, 0x72, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x70, 0x6c, 0x61,
|
||||
0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x14, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65,
|
||||
0x52, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x21, 0x0a, 0x0c,
|
||||
0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x0b, 0x20, 0x01,
|
||||
0x28, 0x0c, 0x52, 0x0b, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x22,
|
||||
0x41, 0x0a, 0x0c, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12,
|
||||
0x31, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28,
|
||||
0x0b, 0x32, 0x15, 0x2e, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x65, 0x72, 0x2e,
|
||||
0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61,
|
||||
0x74, 0x61, 0x22, 0xbe, 0x02, 0x0a, 0x0d, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x43, 0x6f, 0x6d, 0x70,
|
||||
0x6c, 0x65, 0x74, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20,
|
||||
0x01, 0x28, 0x0c, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x72,
|
||||
0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72,
|
||||
0x12, 0x33, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x03, 0x20,
|
||||
0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x65,
|
||||
0x72, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x09, 0x72, 0x65, 0x73, 0x6f,
|
||||
0x75, 0x72, 0x63, 0x65, 0x73, 0x12, 0x3a, 0x0a, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74,
|
||||
0x65, 0x72, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x70, 0x72, 0x6f, 0x76,
|
||||
0x69, 0x73, 0x69, 0x6f, 0x6e, 0x65, 0x72, 0x2e, 0x52, 0x69, 0x63, 0x68, 0x50, 0x61, 0x72, 0x61,
|
||||
0x6d, 0x65, 0x74, 0x65, 0x72, 0x52, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72,
|
||||
0x73, 0x12, 0x61, 0x0a, 0x17, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x61, 0x75,
|
||||
0x74, 0x68, 0x5f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x18, 0x05, 0x20, 0x03,
|
||||
0x28, 0x0b, 0x32, 0x29, 0x2e, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x65, 0x72,
|
||||
0x2e, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x41, 0x75, 0x74, 0x68, 0x50, 0x72, 0x6f,
|
||||
0x76, 0x69, 0x64, 0x65, 0x72, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x15, 0x65,
|
||||
0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x41, 0x75, 0x74, 0x68, 0x50, 0x72, 0x6f, 0x76, 0x69,
|
||||
0x64, 0x65, 0x72, 0x73, 0x12, 0x2d, 0x0a, 0x07, 0x74, 0x69, 0x6d, 0x69, 0x6e, 0x67, 0x73, 0x18,
|
||||
0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f,
|
||||
0x6e, 0x65, 0x72, 0x2e, 0x54, 0x69, 0x6d, 0x69, 0x6e, 0x67, 0x52, 0x07, 0x74, 0x69, 0x6d, 0x69,
|
||||
0x6e, 0x67, 0x73, 0x22, 0xfa, 0x01, 0x0a, 0x06, 0x54, 0x69, 0x6d, 0x69, 0x6e, 0x67, 0x12, 0x30,
|
||||
0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e,
|
||||
0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e,
|
||||
0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74,
|
||||
0x12, 0x2c, 0x0a, 0x03, 0x65, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e,
|
||||
0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e,
|
||||
0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x03, 0x65, 0x6e, 0x64, 0x12, 0x16,
|
||||
0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06,
|
||||
0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65,
|
||||
0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x1a,
|
||||
0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09,
|
||||
0x52, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74,
|
||||
0x61, 0x67, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x74, 0x61, 0x67, 0x65,
|
||||
0x12, 0x2e, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32,
|
||||
0x18, 0x2e, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x65, 0x72, 0x2e, 0x54, 0x69,
|
||||
0x6d, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65,
|
||||
0x22, 0x0f, 0x0a, 0x0d, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
|
||||
0x74, 0x22, 0x8c, 0x02, 0x0a, 0x07, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2d, 0x0a,
|
||||
0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e,
|
||||
0x70, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x6e, 0x66,
|
||||
0x69, 0x67, 0x48, 0x00, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x31, 0x0a, 0x05,
|
||||
0x70, 0x61, 0x72, 0x73, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x72,
|
||||
0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x65, 0x72, 0x2e, 0x50, 0x61, 0x72, 0x73, 0x65, 0x52,
|
||||
0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x05, 0x70, 0x61, 0x72, 0x73, 0x65, 0x12,
|
||||
0x2e, 0x0a, 0x04, 0x70, 0x6c, 0x61, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e,
|
||||
0x74, 0x65, 0x72, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x2a, 0x0a, 0x11, 0x6f, 0x6d, 0x69,
|
||||
0x74, 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x06,
|
||||
0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x6f, 0x6d, 0x69, 0x74, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65,
|
||||
0x46, 0x69, 0x6c, 0x65, 0x73, 0x22, 0xbf, 0x04, 0x0a, 0x0c, 0x50, 0x6c, 0x61, 0x6e, 0x43, 0x6f,
|
||||
0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18,
|
||||
0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x33, 0x0a, 0x09,
|
||||
0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32,
|
||||
0x15, 0x2e, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x65, 0x72, 0x2e, 0x52, 0x65,
|
||||
0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65,
|
||||
0x73, 0x12, 0x3a, 0x0a, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x18,
|
||||
0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f,
|
||||
0x6e, 0x65, 0x72, 0x2e, 0x52, 0x69, 0x63, 0x68, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65,
|
||||
0x72, 0x52, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x12, 0x61, 0x0a,
|
||||
0x17, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x61, 0x75, 0x74, 0x68, 0x5f, 0x70,
|
||||
0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29,
|
||||
0x2e, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x65, 0x72, 0x2e, 0x45, 0x78, 0x74,
|
||||
0x65, 0x72, 0x6e, 0x61, 0x6c, 0x41, 0x75, 0x74, 0x68, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65,
|
||||
0x72, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x15, 0x65, 0x78, 0x74, 0x65, 0x72,
|
||||
0x6e, 0x61, 0x6c, 0x41, 0x75, 0x74, 0x68, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73,
|
||||
0x12, 0x2d, 0x0a, 0x07, 0x74, 0x69, 0x6d, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28,
|
||||
0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x65, 0x72, 0x2e,
|
||||
0x54, 0x69, 0x6d, 0x69, 0x6e, 0x67, 0x52, 0x07, 0x74, 0x69, 0x6d, 0x69, 0x6e, 0x67, 0x73, 0x12,
|
||||
0x2d, 0x0a, 0x07, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b,
|
||||
0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x65, 0x72, 0x2e, 0x4d,
|
||||
0x6f, 0x64, 0x75, 0x6c, 0x65, 0x52, 0x07, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x12, 0x2d,
|
||||
0x0a, 0x07, 0x70, 0x72, 0x65, 0x73, 0x65, 0x74, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32,
|
||||
0x13, 0x2e, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x65, 0x72, 0x2e, 0x50, 0x72,
|
||||
0x65, 0x73, 0x65, 0x74, 0x52, 0x07, 0x70, 0x72, 0x65, 0x73, 0x65, 0x74, 0x73, 0x12, 0x12, 0x0a,
|
||||
0x04, 0x70, 0x6c, 0x61, 0x6e, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x70, 0x6c, 0x61,
|
||||
0x6e, 0x12, 0x55, 0x0a, 0x15, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x72, 0x65,
|
||||
0x70, 0x6c, 0x61, 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b,
|
||||
0x32, 0x20, 0x2e, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x65, 0x72, 0x2e, 0x52,
|
||||
0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x6d, 0x65,
|
||||
0x6e, 0x74, 0x52, 0x14, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x70, 0x6c,
|
||||
0x61, 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x6d, 0x6f, 0x64, 0x75,
|
||||
0x6c, 0x65, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0b,
|
||||
0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x2a, 0x0a, 0x11, 0x6d,
|
||||
0x6f, 0x64, 0x75, 0x6c, 0x65, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x5f, 0x68, 0x61, 0x73, 0x68,
|
||||
0x18, 0x0c, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x46, 0x69,
|
||||
0x6c, 0x65, 0x73, 0x48, 0x61, 0x73, 0x68, 0x22, 0x41, 0x0a, 0x0c, 0x41, 0x70, 0x70, 0x6c, 0x79,
|
||||
0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x31, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64,
|
||||
0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x70, 0x72, 0x6f, 0x76,
|
||||
0x69, 0x73, 0x69, 0x6f, 0x6e, 0x65, 0x72, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61,
|
||||
0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0xbe, 0x02, 0x0a, 0x0d, 0x41,
|
||||
0x70, 0x70, 0x6c, 0x79, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x14, 0x0a, 0x05,
|
||||
0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x73, 0x74, 0x61,
|
||||
0x74, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28,
|
||||
0x09, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x33, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x6f,
|
||||
0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x70, 0x72,
|
||||
0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x65, 0x72, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72,
|
||||
0x63, 0x65, 0x52, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x12, 0x3a, 0x0a,
|
||||
0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28,
|
||||
0x0b, 0x32, 0x1a, 0x2e, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x65, 0x72, 0x2e,
|
||||
0x52, 0x69, 0x63, 0x68, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x52, 0x0a, 0x70,
|
||||
0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x12, 0x61, 0x0a, 0x17, 0x65, 0x78, 0x74,
|
||||
0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x61, 0x75, 0x74, 0x68, 0x5f, 0x70, 0x72, 0x6f, 0x76, 0x69,
|
||||
0x64, 0x65, 0x72, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x70, 0x72, 0x6f,
|
||||
0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x65, 0x72, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61,
|
||||
0x6c, 0x41, 0x75, 0x74, 0x68, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x52, 0x65, 0x73,
|
||||
0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x15, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x41,
|
||||
0x75, 0x74, 0x68, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x12, 0x2d, 0x0a, 0x07,
|
||||
0x74, 0x69, 0x6d, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e,
|
||||
0x70, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x65, 0x72, 0x2e, 0x54, 0x69, 0x6d, 0x69,
|
||||
0x6e, 0x67, 0x52, 0x07, 0x74, 0x69, 0x6d, 0x69, 0x6e, 0x67, 0x73, 0x22, 0xfa, 0x01, 0x0a, 0x06,
|
||||
0x54, 0x69, 0x6d, 0x69, 0x6e, 0x67, 0x12, 0x30, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18,
|
||||
0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70,
|
||||
0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d,
|
||||
0x70, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x2c, 0x0a, 0x03, 0x65, 0x6e, 0x64, 0x18,
|
||||
0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70,
|
||||
0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d,
|
||||
0x70, 0x52, 0x03, 0x65, 0x6e, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e,
|
||||
0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x16,
|
||||
0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06,
|
||||
0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72,
|
||||
0x63, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72,
|
||||
0x63, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x67, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28,
|
||||
0x09, 0x52, 0x05, 0x73, 0x74, 0x61, 0x67, 0x65, 0x12, 0x2e, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74,
|
||||
0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x18, 0x2e, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x73,
|
||||
0x69, 0x6f, 0x6e, 0x65, 0x72, 0x2e, 0x54, 0x69, 0x6d, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x61, 0x74,
|
||||
0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x22, 0x0f, 0x0a, 0x0d, 0x43, 0x61, 0x6e, 0x63,
|
||||
0x65, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x8c, 0x02, 0x0a, 0x07, 0x52, 0x65,
|
||||
0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2d, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18,
|
||||
0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f,
|
||||
0x6e, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x48, 0x00, 0x52, 0x06, 0x63, 0x6f,
|
||||
0x6e, 0x66, 0x69, 0x67, 0x12, 0x31, 0x0a, 0x05, 0x70, 0x61, 0x72, 0x73, 0x65, 0x18, 0x02, 0x20,
|
||||
0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x65,
|
||||
0x72, 0x2e, 0x50, 0x61, 0x72, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00,
|
||||
0x52, 0x05, 0x70, 0x61, 0x72, 0x73, 0x65, 0x12, 0x2e, 0x0a, 0x04, 0x70, 0x6c, 0x61, 0x6e, 0x18,
|
||||
0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f,
|
||||
0x6e, 0x65, 0x72, 0x2e, 0x50, 0x6c, 0x61, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48,
|
||||
0x00, 0x52, 0x04, 0x70, 0x6c, 0x61, 0x6e, 0x12, 0x31, 0x0a, 0x05, 0x61, 0x70, 0x70, 0x6c, 0x79,
|
||||
0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69,
|
||||
0x6f, 0x6e, 0x65, 0x72, 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
|
||||
0x74, 0x48, 0x00, 0x52, 0x05, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x12, 0x34, 0x0a, 0x06, 0x63, 0x61,
|
||||
0x6e, 0x63, 0x65, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x70, 0x72, 0x6f,
|
||||
0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x65, 0x72, 0x2e, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x52,
|
||||
0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x06, 0x63, 0x61, 0x6e, 0x63, 0x65, 0x6c,
|
||||
0x42, 0x06, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0xc9, 0x02, 0x0a, 0x08, 0x52, 0x65, 0x73,
|
||||
0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x24, 0x0a, 0x03, 0x6c, 0x6f, 0x67, 0x18, 0x01, 0x20, 0x01,
|
||||
0x28, 0x0b, 0x32, 0x10, 0x2e, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x65, 0x72,
|
||||
0x2e, 0x4c, 0x6f, 0x67, 0x48, 0x00, 0x52, 0x03, 0x6c, 0x6f, 0x67, 0x12, 0x32, 0x0a, 0x05, 0x70,
|
||||
0x61, 0x72, 0x73, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x70, 0x72, 0x6f,
|
||||
0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x65, 0x72, 0x2e, 0x50, 0x61, 0x72, 0x73, 0x65, 0x43, 0x6f,
|
||||
0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x48, 0x00, 0x52, 0x05, 0x70, 0x61, 0x72, 0x73, 0x65, 0x12,
|
||||
0x2f, 0x0a, 0x04, 0x70, 0x6c, 0x61, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e,
|
||||
0x70, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x65, 0x72, 0x2e, 0x50, 0x6c, 0x61, 0x6e,
|
||||
0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x04, 0x70, 0x6c, 0x61, 0x6e, 0x12,
|
||||
0x31, 0x0a, 0x05, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19,
|
||||
0x2e, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x65, 0x72, 0x2e, 0x41, 0x70, 0x70,
|
||||
0x6c, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x05, 0x61, 0x70, 0x70,
|
||||
0x6c, 0x79, 0x12, 0x34, 0x0a, 0x06, 0x63, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x18, 0x05, 0x20, 0x01,
|
||||
0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x65, 0x72,
|
||||
0x2e, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00,
|
||||
0x52, 0x06, 0x63, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x42, 0x06, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65,
|
||||
0x22, 0xd1, 0x01, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x24, 0x0a,
|
||||
0x03, 0x6c, 0x6f, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x70, 0x72, 0x6f,
|
||||
0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x65, 0x72, 0x2e, 0x4c, 0x6f, 0x67, 0x48, 0x00, 0x52, 0x03,
|
||||
0x6c, 0x6f, 0x67, 0x12, 0x32, 0x0a, 0x05, 0x70, 0x61, 0x72, 0x73, 0x65, 0x18, 0x02, 0x20, 0x01,
|
||||
0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x65, 0x72,
|
||||
0x2e, 0x50, 0x61, 0x72, 0x73, 0x65, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x48, 0x00,
|
||||
0x52, 0x05, 0x70, 0x61, 0x72, 0x73, 0x65, 0x12, 0x2f, 0x0a, 0x04, 0x70, 0x6c, 0x61, 0x6e, 0x18,
|
||||
0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f,
|
||||
0x6e, 0x65, 0x72, 0x2e, 0x50, 0x6c, 0x61, 0x6e, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65,
|
||||
0x48, 0x00, 0x52, 0x04, 0x70, 0x6c, 0x61, 0x6e, 0x12, 0x32, 0x0a, 0x05, 0x61, 0x70, 0x70, 0x6c,
|
||||
0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x73,
|
||||
0x69, 0x6f, 0x6e, 0x65, 0x72, 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x43, 0x6f, 0x6d, 0x70, 0x6c,
|
||||
0x65, 0x74, 0x65, 0x48, 0x00, 0x52, 0x05, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x42, 0x06, 0x0a, 0x04,
|
||||
0x74, 0x79, 0x70, 0x65, 0x2a, 0xa8, 0x01, 0x0a, 0x11, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74,
|
||||
0x65, 0x72, 0x46, 0x6f, 0x72, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x44, 0x45,
|
||||
0x46, 0x41, 0x55, 0x4c, 0x54, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x46, 0x4f, 0x52, 0x4d, 0x5f,
|
||||
0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, 0x52, 0x41, 0x44, 0x49, 0x4f,
|
||||
0x10, 0x02, 0x12, 0x0c, 0x0a, 0x08, 0x44, 0x52, 0x4f, 0x50, 0x44, 0x4f, 0x57, 0x4e, 0x10, 0x03,
|
||||
0x12, 0x09, 0x0a, 0x05, 0x49, 0x4e, 0x50, 0x55, 0x54, 0x10, 0x04, 0x12, 0x0c, 0x0a, 0x08, 0x54,
|
||||
0x45, 0x58, 0x54, 0x41, 0x52, 0x45, 0x41, 0x10, 0x05, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x4c, 0x49,
|
||||
0x44, 0x45, 0x52, 0x10, 0x06, 0x12, 0x0c, 0x0a, 0x08, 0x43, 0x48, 0x45, 0x43, 0x4b, 0x42, 0x4f,
|
||||
0x58, 0x10, 0x07, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x57, 0x49, 0x54, 0x43, 0x48, 0x10, 0x08, 0x12,
|
||||
0x0d, 0x0a, 0x09, 0x54, 0x41, 0x47, 0x53, 0x45, 0x4c, 0x45, 0x43, 0x54, 0x10, 0x09, 0x12, 0x0f,
|
||||
0x0a, 0x0b, 0x4d, 0x55, 0x4c, 0x54, 0x49, 0x53, 0x45, 0x4c, 0x45, 0x43, 0x54, 0x10, 0x0a, 0x2a,
|
||||
0x3f, 0x0a, 0x08, 0x4c, 0x6f, 0x67, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x09, 0x0a, 0x05, 0x54,
|
||||
0x52, 0x41, 0x43, 0x45, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x44, 0x45, 0x42, 0x55, 0x47, 0x10,
|
||||
0x01, 0x12, 0x08, 0x0a, 0x04, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0x02, 0x12, 0x08, 0x0a, 0x04, 0x57,
|
||||
0x41, 0x52, 0x4e, 0x10, 0x03, 0x12, 0x09, 0x0a, 0x05, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x04,
|
||||
0x2a, 0x3b, 0x0a, 0x0f, 0x41, 0x70, 0x70, 0x53, 0x68, 0x61, 0x72, 0x69, 0x6e, 0x67, 0x4c, 0x65,
|
||||
0x76, 0x65, 0x6c, 0x12, 0x09, 0x0a, 0x05, 0x4f, 0x57, 0x4e, 0x45, 0x52, 0x10, 0x00, 0x12, 0x11,
|
||||
0x0a, 0x0d, 0x41, 0x55, 0x54, 0x48, 0x45, 0x4e, 0x54, 0x49, 0x43, 0x41, 0x54, 0x45, 0x44, 0x10,
|
||||
0x01, 0x12, 0x0a, 0x0a, 0x06, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, 0x10, 0x02, 0x2a, 0x35, 0x0a,
|
||||
0x09, 0x41, 0x70, 0x70, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x6e, 0x12, 0x0e, 0x0a, 0x06, 0x57, 0x49,
|
||||
0x4e, 0x44, 0x4f, 0x57, 0x10, 0x00, 0x1a, 0x02, 0x08, 0x01, 0x12, 0x0f, 0x0a, 0x0b, 0x53, 0x4c,
|
||||
0x49, 0x4d, 0x5f, 0x57, 0x49, 0x4e, 0x44, 0x4f, 0x57, 0x10, 0x01, 0x12, 0x07, 0x0a, 0x03, 0x54,
|
||||
0x41, 0x42, 0x10, 0x02, 0x2a, 0x37, 0x0a, 0x13, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63,
|
||||
0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x09, 0x0a, 0x05, 0x53,
|
||||
0x54, 0x41, 0x52, 0x54, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x53, 0x54, 0x4f, 0x50, 0x10, 0x01,
|
||||
0x12, 0x0b, 0x0a, 0x07, 0x44, 0x45, 0x53, 0x54, 0x52, 0x4f, 0x59, 0x10, 0x02, 0x2a, 0x3e, 0x0a,
|
||||
0x1b, 0x50, 0x72, 0x65, 0x62, 0x75, 0x69, 0x6c, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61,
|
||||
0x63, 0x65, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x53, 0x74, 0x61, 0x67, 0x65, 0x12, 0x08, 0x0a, 0x04,
|
||||
0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45,
|
||||
0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, 0x43, 0x4c, 0x41, 0x49, 0x4d, 0x10, 0x02, 0x2a, 0x35, 0x0a,
|
||||
0x0b, 0x54, 0x69, 0x6d, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0b, 0x0a, 0x07,
|
||||
0x53, 0x54, 0x41, 0x52, 0x54, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x43, 0x4f, 0x4d,
|
||||
0x50, 0x4c, 0x45, 0x54, 0x45, 0x44, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x46, 0x41, 0x49, 0x4c,
|
||||
0x45, 0x44, 0x10, 0x02, 0x32, 0x49, 0x0a, 0x0b, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f,
|
||||
0x6e, 0x65, 0x72, 0x12, 0x3a, 0x0a, 0x07, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x14,
|
||||
0x2e, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x65, 0x72, 0x2e, 0x52, 0x65, 0x71,
|
||||
0x75, 0x65, 0x73, 0x74, 0x1a, 0x15, 0x2e, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e,
|
||||
0x65, 0x72, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x28, 0x01, 0x30, 0x01, 0x42,
|
||||
0x30, 0x5a, 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f,
|
||||
0x64, 0x65, 0x72, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x2f, 0x76, 0x32, 0x2f, 0x70, 0x72, 0x6f,
|
||||
0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x65, 0x72, 0x73, 0x64, 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x74,
|
||||
0x6f, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
|
||||
0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x48, 0x00, 0x52, 0x04, 0x70, 0x6c, 0x61, 0x6e,
|
||||
0x12, 0x32, 0x0a, 0x05, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32,
|
||||
0x1a, 0x2e, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x65, 0x72, 0x2e, 0x41, 0x70,
|
||||
0x70, 0x6c, 0x79, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x48, 0x00, 0x52, 0x05, 0x61,
|
||||
0x70, 0x70, 0x6c, 0x79, 0x12, 0x3a, 0x0a, 0x0b, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x75, 0x70, 0x6c,
|
||||
0x6f, 0x61, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x72, 0x6f, 0x76,
|
||||
0x69, 0x73, 0x69, 0x6f, 0x6e, 0x65, 0x72, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x55, 0x70, 0x6c, 0x6f,
|
||||
0x61, 0x64, 0x48, 0x00, 0x52, 0x0a, 0x64, 0x61, 0x74, 0x61, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64,
|
||||
0x12, 0x3a, 0x0a, 0x0b, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x5f, 0x70, 0x69, 0x65, 0x63, 0x65, 0x18,
|
||||
0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f,
|
||||
0x6e, 0x65, 0x72, 0x2e, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x50, 0x69, 0x65, 0x63, 0x65, 0x48, 0x00,
|
||||
0x52, 0x0a, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x50, 0x69, 0x65, 0x63, 0x65, 0x42, 0x06, 0x0a, 0x04,
|
||||
0x74, 0x79, 0x70, 0x65, 0x22, 0x9c, 0x01, 0x0a, 0x0a, 0x44, 0x61, 0x74, 0x61, 0x55, 0x70, 0x6c,
|
||||
0x6f, 0x61, 0x64, 0x12, 0x3c, 0x0a, 0x0b, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x74, 0x79,
|
||||
0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x70, 0x72, 0x6f, 0x76, 0x69,
|
||||
0x73, 0x69, 0x6f, 0x6e, 0x65, 0x72, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x55, 0x70, 0x6c, 0x6f, 0x61,
|
||||
0x64, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0a, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x54, 0x79, 0x70,
|
||||
0x65, 0x12, 0x1b, 0x0a, 0x09, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x02,
|
||||
0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x64, 0x61, 0x74, 0x61, 0x48, 0x61, 0x73, 0x68, 0x12, 0x1b,
|
||||
0x0a, 0x09, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28,
|
||||
0x03, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x63,
|
||||
0x68, 0x75, 0x6e, 0x6b, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x63, 0x68, 0x75,
|
||||
0x6e, 0x6b, 0x73, 0x22, 0x67, 0x0a, 0x0a, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x50, 0x69, 0x65, 0x63,
|
||||
0x65, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52,
|
||||
0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x24, 0x0a, 0x0e, 0x66, 0x75, 0x6c, 0x6c, 0x5f, 0x64, 0x61,
|
||||
0x74, 0x61, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0c, 0x66,
|
||||
0x75, 0x6c, 0x6c, 0x44, 0x61, 0x74, 0x61, 0x48, 0x61, 0x73, 0x68, 0x12, 0x1f, 0x0a, 0x0b, 0x70,
|
||||
0x69, 0x65, 0x63, 0x65, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05,
|
||||
0x52, 0x0a, 0x70, 0x69, 0x65, 0x63, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x2a, 0xa8, 0x01, 0x0a,
|
||||
0x11, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x46, 0x6f, 0x72, 0x6d, 0x54, 0x79,
|
||||
0x70, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x44, 0x45, 0x46, 0x41, 0x55, 0x4c, 0x54, 0x10, 0x00, 0x12,
|
||||
0x0e, 0x0a, 0x0a, 0x46, 0x4f, 0x52, 0x4d, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x01, 0x12,
|
||||
0x09, 0x0a, 0x05, 0x52, 0x41, 0x44, 0x49, 0x4f, 0x10, 0x02, 0x12, 0x0c, 0x0a, 0x08, 0x44, 0x52,
|
||||
0x4f, 0x50, 0x44, 0x4f, 0x57, 0x4e, 0x10, 0x03, 0x12, 0x09, 0x0a, 0x05, 0x49, 0x4e, 0x50, 0x55,
|
||||
0x54, 0x10, 0x04, 0x12, 0x0c, 0x0a, 0x08, 0x54, 0x45, 0x58, 0x54, 0x41, 0x52, 0x45, 0x41, 0x10,
|
||||
0x05, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x4c, 0x49, 0x44, 0x45, 0x52, 0x10, 0x06, 0x12, 0x0c, 0x0a,
|
||||
0x08, 0x43, 0x48, 0x45, 0x43, 0x4b, 0x42, 0x4f, 0x58, 0x10, 0x07, 0x12, 0x0a, 0x0a, 0x06, 0x53,
|
||||
0x57, 0x49, 0x54, 0x43, 0x48, 0x10, 0x08, 0x12, 0x0d, 0x0a, 0x09, 0x54, 0x41, 0x47, 0x53, 0x45,
|
||||
0x4c, 0x45, 0x43, 0x54, 0x10, 0x09, 0x12, 0x0f, 0x0a, 0x0b, 0x4d, 0x55, 0x4c, 0x54, 0x49, 0x53,
|
||||
0x45, 0x4c, 0x45, 0x43, 0x54, 0x10, 0x0a, 0x2a, 0x3f, 0x0a, 0x08, 0x4c, 0x6f, 0x67, 0x4c, 0x65,
|
||||
0x76, 0x65, 0x6c, 0x12, 0x09, 0x0a, 0x05, 0x54, 0x52, 0x41, 0x43, 0x45, 0x10, 0x00, 0x12, 0x09,
|
||||
0x0a, 0x05, 0x44, 0x45, 0x42, 0x55, 0x47, 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04, 0x49, 0x4e, 0x46,
|
||||
0x4f, 0x10, 0x02, 0x12, 0x08, 0x0a, 0x04, 0x57, 0x41, 0x52, 0x4e, 0x10, 0x03, 0x12, 0x09, 0x0a,
|
||||
0x05, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x04, 0x2a, 0x3b, 0x0a, 0x0f, 0x41, 0x70, 0x70, 0x53,
|
||||
0x68, 0x61, 0x72, 0x69, 0x6e, 0x67, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x09, 0x0a, 0x05, 0x4f,
|
||||
0x57, 0x4e, 0x45, 0x52, 0x10, 0x00, 0x12, 0x11, 0x0a, 0x0d, 0x41, 0x55, 0x54, 0x48, 0x45, 0x4e,
|
||||
0x54, 0x49, 0x43, 0x41, 0x54, 0x45, 0x44, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x50, 0x55, 0x42,
|
||||
0x4c, 0x49, 0x43, 0x10, 0x02, 0x2a, 0x35, 0x0a, 0x09, 0x41, 0x70, 0x70, 0x4f, 0x70, 0x65, 0x6e,
|
||||
0x49, 0x6e, 0x12, 0x0e, 0x0a, 0x06, 0x57, 0x49, 0x4e, 0x44, 0x4f, 0x57, 0x10, 0x00, 0x1a, 0x02,
|
||||
0x08, 0x01, 0x12, 0x0f, 0x0a, 0x0b, 0x53, 0x4c, 0x49, 0x4d, 0x5f, 0x57, 0x49, 0x4e, 0x44, 0x4f,
|
||||
0x57, 0x10, 0x01, 0x12, 0x07, 0x0a, 0x03, 0x54, 0x41, 0x42, 0x10, 0x02, 0x2a, 0x37, 0x0a, 0x13,
|
||||
0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74,
|
||||
0x69, 0x6f, 0x6e, 0x12, 0x09, 0x0a, 0x05, 0x53, 0x54, 0x41, 0x52, 0x54, 0x10, 0x00, 0x12, 0x08,
|
||||
0x0a, 0x04, 0x53, 0x54, 0x4f, 0x50, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x44, 0x45, 0x53, 0x54,
|
||||
0x52, 0x4f, 0x59, 0x10, 0x02, 0x2a, 0x3e, 0x0a, 0x1b, 0x50, 0x72, 0x65, 0x62, 0x75, 0x69, 0x6c,
|
||||
0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x53,
|
||||
0x74, 0x61, 0x67, 0x65, 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x0a,
|
||||
0x0a, 0x06, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, 0x43, 0x4c,
|
||||
0x41, 0x49, 0x4d, 0x10, 0x02, 0x2a, 0x35, 0x0a, 0x0b, 0x54, 0x69, 0x6d, 0x69, 0x6e, 0x67, 0x53,
|
||||
0x74, 0x61, 0x74, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x53, 0x54, 0x41, 0x52, 0x54, 0x45, 0x44, 0x10,
|
||||
0x00, 0x12, 0x0d, 0x0a, 0x09, 0x43, 0x4f, 0x4d, 0x50, 0x4c, 0x45, 0x54, 0x45, 0x44, 0x10, 0x01,
|
||||
0x12, 0x0a, 0x0a, 0x06, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x02, 0x2a, 0x47, 0x0a, 0x0e,
|
||||
0x44, 0x61, 0x74, 0x61, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x54, 0x79, 0x70, 0x65, 0x12, 0x17,
|
||||
0x0a, 0x13, 0x55, 0x50, 0x4c, 0x4f, 0x41, 0x44, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e,
|
||||
0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x1c, 0x0a, 0x18, 0x55, 0x50, 0x4c, 0x4f, 0x41,
|
||||
0x44, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4d, 0x4f, 0x44, 0x55, 0x4c, 0x45, 0x5f, 0x46, 0x49,
|
||||
0x4c, 0x45, 0x53, 0x10, 0x01, 0x32, 0x49, 0x0a, 0x0b, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69,
|
||||
0x6f, 0x6e, 0x65, 0x72, 0x12, 0x3a, 0x0a, 0x07, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12,
|
||||
0x14, 0x2e, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x65, 0x72, 0x2e, 0x52, 0x65,
|
||||
0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x15, 0x2e, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f,
|
||||
0x6e, 0x65, 0x72, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x28, 0x01, 0x30, 0x01,
|
||||
0x42, 0x30, 0x5a, 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63,
|
||||
0x6f, 0x64, 0x65, 0x72, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x2f, 0x76, 0x32, 0x2f, 0x70, 0x72,
|
||||
0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x65, 0x72, 0x73, 0x64, 0x6b, 0x2f, 0x70, 0x72, 0x6f,
|
||||
0x74, 0x6f, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
|
||||
}
|
||||
|
||||
var (
|
||||
@@ -4466,8 +4739,8 @@ func file_provisionersdk_proto_provisioner_proto_rawDescGZIP() []byte {
|
||||
return file_provisionersdk_proto_provisioner_proto_rawDescData
|
||||
}
|
||||
|
||||
var file_provisionersdk_proto_provisioner_proto_enumTypes = make([]protoimpl.EnumInfo, 7)
|
||||
var file_provisionersdk_proto_provisioner_proto_msgTypes = make([]protoimpl.MessageInfo, 45)
|
||||
var file_provisionersdk_proto_provisioner_proto_enumTypes = make([]protoimpl.EnumInfo, 8)
|
||||
var file_provisionersdk_proto_provisioner_proto_msgTypes = make([]protoimpl.MessageInfo, 47)
|
||||
var file_provisionersdk_proto_provisioner_proto_goTypes = []interface{}{
|
||||
(ParameterFormType)(0), // 0: provisioner.ParameterFormType
|
||||
(LogLevel)(0), // 1: provisioner.LogLevel
|
||||
@@ -4476,117 +4749,123 @@ var file_provisionersdk_proto_provisioner_proto_goTypes = []interface{}{
|
||||
(WorkspaceTransition)(0), // 4: provisioner.WorkspaceTransition
|
||||
(PrebuiltWorkspaceBuildStage)(0), // 5: provisioner.PrebuiltWorkspaceBuildStage
|
||||
(TimingState)(0), // 6: provisioner.TimingState
|
||||
(*Empty)(nil), // 7: provisioner.Empty
|
||||
(*TemplateVariable)(nil), // 8: provisioner.TemplateVariable
|
||||
(*RichParameterOption)(nil), // 9: provisioner.RichParameterOption
|
||||
(*RichParameter)(nil), // 10: provisioner.RichParameter
|
||||
(*RichParameterValue)(nil), // 11: provisioner.RichParameterValue
|
||||
(*ExpirationPolicy)(nil), // 12: provisioner.ExpirationPolicy
|
||||
(*Prebuild)(nil), // 13: provisioner.Prebuild
|
||||
(*Preset)(nil), // 14: provisioner.Preset
|
||||
(*PresetParameter)(nil), // 15: provisioner.PresetParameter
|
||||
(*ResourceReplacement)(nil), // 16: provisioner.ResourceReplacement
|
||||
(*VariableValue)(nil), // 17: provisioner.VariableValue
|
||||
(*Log)(nil), // 18: provisioner.Log
|
||||
(*InstanceIdentityAuth)(nil), // 19: provisioner.InstanceIdentityAuth
|
||||
(*ExternalAuthProviderResource)(nil), // 20: provisioner.ExternalAuthProviderResource
|
||||
(*ExternalAuthProvider)(nil), // 21: provisioner.ExternalAuthProvider
|
||||
(*Agent)(nil), // 22: provisioner.Agent
|
||||
(*ResourcesMonitoring)(nil), // 23: provisioner.ResourcesMonitoring
|
||||
(*MemoryResourceMonitor)(nil), // 24: provisioner.MemoryResourceMonitor
|
||||
(*VolumeResourceMonitor)(nil), // 25: provisioner.VolumeResourceMonitor
|
||||
(*DisplayApps)(nil), // 26: provisioner.DisplayApps
|
||||
(*Env)(nil), // 27: provisioner.Env
|
||||
(*Script)(nil), // 28: provisioner.Script
|
||||
(*Devcontainer)(nil), // 29: provisioner.Devcontainer
|
||||
(*App)(nil), // 30: provisioner.App
|
||||
(*Healthcheck)(nil), // 31: provisioner.Healthcheck
|
||||
(*Resource)(nil), // 32: provisioner.Resource
|
||||
(*Module)(nil), // 33: provisioner.Module
|
||||
(*Role)(nil), // 34: provisioner.Role
|
||||
(*RunningAgentAuthToken)(nil), // 35: provisioner.RunningAgentAuthToken
|
||||
(*Metadata)(nil), // 36: provisioner.Metadata
|
||||
(*Config)(nil), // 37: provisioner.Config
|
||||
(*ParseRequest)(nil), // 38: provisioner.ParseRequest
|
||||
(*ParseComplete)(nil), // 39: provisioner.ParseComplete
|
||||
(*PlanRequest)(nil), // 40: provisioner.PlanRequest
|
||||
(*PlanComplete)(nil), // 41: provisioner.PlanComplete
|
||||
(*ApplyRequest)(nil), // 42: provisioner.ApplyRequest
|
||||
(*ApplyComplete)(nil), // 43: provisioner.ApplyComplete
|
||||
(*Timing)(nil), // 44: provisioner.Timing
|
||||
(*CancelRequest)(nil), // 45: provisioner.CancelRequest
|
||||
(*Request)(nil), // 46: provisioner.Request
|
||||
(*Response)(nil), // 47: provisioner.Response
|
||||
(*Agent_Metadata)(nil), // 48: provisioner.Agent.Metadata
|
||||
nil, // 49: provisioner.Agent.EnvEntry
|
||||
(*Resource_Metadata)(nil), // 50: provisioner.Resource.Metadata
|
||||
nil, // 51: provisioner.ParseComplete.WorkspaceTagsEntry
|
||||
(*timestamppb.Timestamp)(nil), // 52: google.protobuf.Timestamp
|
||||
(DataUploadType)(0), // 7: provisioner.DataUploadType
|
||||
(*Empty)(nil), // 8: provisioner.Empty
|
||||
(*TemplateVariable)(nil), // 9: provisioner.TemplateVariable
|
||||
(*RichParameterOption)(nil), // 10: provisioner.RichParameterOption
|
||||
(*RichParameter)(nil), // 11: provisioner.RichParameter
|
||||
(*RichParameterValue)(nil), // 12: provisioner.RichParameterValue
|
||||
(*ExpirationPolicy)(nil), // 13: provisioner.ExpirationPolicy
|
||||
(*Prebuild)(nil), // 14: provisioner.Prebuild
|
||||
(*Preset)(nil), // 15: provisioner.Preset
|
||||
(*PresetParameter)(nil), // 16: provisioner.PresetParameter
|
||||
(*ResourceReplacement)(nil), // 17: provisioner.ResourceReplacement
|
||||
(*VariableValue)(nil), // 18: provisioner.VariableValue
|
||||
(*Log)(nil), // 19: provisioner.Log
|
||||
(*InstanceIdentityAuth)(nil), // 20: provisioner.InstanceIdentityAuth
|
||||
(*ExternalAuthProviderResource)(nil), // 21: provisioner.ExternalAuthProviderResource
|
||||
(*ExternalAuthProvider)(nil), // 22: provisioner.ExternalAuthProvider
|
||||
(*Agent)(nil), // 23: provisioner.Agent
|
||||
(*ResourcesMonitoring)(nil), // 24: provisioner.ResourcesMonitoring
|
||||
(*MemoryResourceMonitor)(nil), // 25: provisioner.MemoryResourceMonitor
|
||||
(*VolumeResourceMonitor)(nil), // 26: provisioner.VolumeResourceMonitor
|
||||
(*DisplayApps)(nil), // 27: provisioner.DisplayApps
|
||||
(*Env)(nil), // 28: provisioner.Env
|
||||
(*Script)(nil), // 29: provisioner.Script
|
||||
(*Devcontainer)(nil), // 30: provisioner.Devcontainer
|
||||
(*App)(nil), // 31: provisioner.App
|
||||
(*Healthcheck)(nil), // 32: provisioner.Healthcheck
|
||||
(*Resource)(nil), // 33: provisioner.Resource
|
||||
(*Module)(nil), // 34: provisioner.Module
|
||||
(*Role)(nil), // 35: provisioner.Role
|
||||
(*RunningAgentAuthToken)(nil), // 36: provisioner.RunningAgentAuthToken
|
||||
(*Metadata)(nil), // 37: provisioner.Metadata
|
||||
(*Config)(nil), // 38: provisioner.Config
|
||||
(*ParseRequest)(nil), // 39: provisioner.ParseRequest
|
||||
(*ParseComplete)(nil), // 40: provisioner.ParseComplete
|
||||
(*PlanRequest)(nil), // 41: provisioner.PlanRequest
|
||||
(*PlanComplete)(nil), // 42: provisioner.PlanComplete
|
||||
(*ApplyRequest)(nil), // 43: provisioner.ApplyRequest
|
||||
(*ApplyComplete)(nil), // 44: provisioner.ApplyComplete
|
||||
(*Timing)(nil), // 45: provisioner.Timing
|
||||
(*CancelRequest)(nil), // 46: provisioner.CancelRequest
|
||||
(*Request)(nil), // 47: provisioner.Request
|
||||
(*Response)(nil), // 48: provisioner.Response
|
||||
(*DataUpload)(nil), // 49: provisioner.DataUpload
|
||||
(*ChunkPiece)(nil), // 50: provisioner.ChunkPiece
|
||||
(*Agent_Metadata)(nil), // 51: provisioner.Agent.Metadata
|
||||
nil, // 52: provisioner.Agent.EnvEntry
|
||||
(*Resource_Metadata)(nil), // 53: provisioner.Resource.Metadata
|
||||
nil, // 54: provisioner.ParseComplete.WorkspaceTagsEntry
|
||||
(*timestamppb.Timestamp)(nil), // 55: google.protobuf.Timestamp
|
||||
}
|
||||
var file_provisionersdk_proto_provisioner_proto_depIdxs = []int32{
|
||||
9, // 0: provisioner.RichParameter.options:type_name -> provisioner.RichParameterOption
|
||||
10, // 0: provisioner.RichParameter.options:type_name -> provisioner.RichParameterOption
|
||||
0, // 1: provisioner.RichParameter.form_type:type_name -> provisioner.ParameterFormType
|
||||
12, // 2: provisioner.Prebuild.expiration_policy:type_name -> provisioner.ExpirationPolicy
|
||||
15, // 3: provisioner.Preset.parameters:type_name -> provisioner.PresetParameter
|
||||
13, // 4: provisioner.Preset.prebuild:type_name -> provisioner.Prebuild
|
||||
13, // 2: provisioner.Prebuild.expiration_policy:type_name -> provisioner.ExpirationPolicy
|
||||
16, // 3: provisioner.Preset.parameters:type_name -> provisioner.PresetParameter
|
||||
14, // 4: provisioner.Preset.prebuild:type_name -> provisioner.Prebuild
|
||||
1, // 5: provisioner.Log.level:type_name -> provisioner.LogLevel
|
||||
49, // 6: provisioner.Agent.env:type_name -> provisioner.Agent.EnvEntry
|
||||
30, // 7: provisioner.Agent.apps:type_name -> provisioner.App
|
||||
48, // 8: provisioner.Agent.metadata:type_name -> provisioner.Agent.Metadata
|
||||
26, // 9: provisioner.Agent.display_apps:type_name -> provisioner.DisplayApps
|
||||
28, // 10: provisioner.Agent.scripts:type_name -> provisioner.Script
|
||||
27, // 11: provisioner.Agent.extra_envs:type_name -> provisioner.Env
|
||||
23, // 12: provisioner.Agent.resources_monitoring:type_name -> provisioner.ResourcesMonitoring
|
||||
29, // 13: provisioner.Agent.devcontainers:type_name -> provisioner.Devcontainer
|
||||
24, // 14: provisioner.ResourcesMonitoring.memory:type_name -> provisioner.MemoryResourceMonitor
|
||||
25, // 15: provisioner.ResourcesMonitoring.volumes:type_name -> provisioner.VolumeResourceMonitor
|
||||
31, // 16: provisioner.App.healthcheck:type_name -> provisioner.Healthcheck
|
||||
52, // 6: provisioner.Agent.env:type_name -> provisioner.Agent.EnvEntry
|
||||
31, // 7: provisioner.Agent.apps:type_name -> provisioner.App
|
||||
51, // 8: provisioner.Agent.metadata:type_name -> provisioner.Agent.Metadata
|
||||
27, // 9: provisioner.Agent.display_apps:type_name -> provisioner.DisplayApps
|
||||
29, // 10: provisioner.Agent.scripts:type_name -> provisioner.Script
|
||||
28, // 11: provisioner.Agent.extra_envs:type_name -> provisioner.Env
|
||||
24, // 12: provisioner.Agent.resources_monitoring:type_name -> provisioner.ResourcesMonitoring
|
||||
30, // 13: provisioner.Agent.devcontainers:type_name -> provisioner.Devcontainer
|
||||
25, // 14: provisioner.ResourcesMonitoring.memory:type_name -> provisioner.MemoryResourceMonitor
|
||||
26, // 15: provisioner.ResourcesMonitoring.volumes:type_name -> provisioner.VolumeResourceMonitor
|
||||
32, // 16: provisioner.App.healthcheck:type_name -> provisioner.Healthcheck
|
||||
2, // 17: provisioner.App.sharing_level:type_name -> provisioner.AppSharingLevel
|
||||
3, // 18: provisioner.App.open_in:type_name -> provisioner.AppOpenIn
|
||||
22, // 19: provisioner.Resource.agents:type_name -> provisioner.Agent
|
||||
50, // 20: provisioner.Resource.metadata:type_name -> provisioner.Resource.Metadata
|
||||
23, // 19: provisioner.Resource.agents:type_name -> provisioner.Agent
|
||||
53, // 20: provisioner.Resource.metadata:type_name -> provisioner.Resource.Metadata
|
||||
4, // 21: provisioner.Metadata.workspace_transition:type_name -> provisioner.WorkspaceTransition
|
||||
34, // 22: provisioner.Metadata.workspace_owner_rbac_roles:type_name -> provisioner.Role
|
||||
35, // 22: provisioner.Metadata.workspace_owner_rbac_roles:type_name -> provisioner.Role
|
||||
5, // 23: provisioner.Metadata.prebuilt_workspace_build_stage:type_name -> provisioner.PrebuiltWorkspaceBuildStage
|
||||
35, // 24: provisioner.Metadata.running_agent_auth_tokens:type_name -> provisioner.RunningAgentAuthToken
|
||||
8, // 25: provisioner.ParseComplete.template_variables:type_name -> provisioner.TemplateVariable
|
||||
51, // 26: provisioner.ParseComplete.workspace_tags:type_name -> provisioner.ParseComplete.WorkspaceTagsEntry
|
||||
36, // 27: provisioner.PlanRequest.metadata:type_name -> provisioner.Metadata
|
||||
11, // 28: provisioner.PlanRequest.rich_parameter_values:type_name -> provisioner.RichParameterValue
|
||||
17, // 29: provisioner.PlanRequest.variable_values:type_name -> provisioner.VariableValue
|
||||
21, // 30: provisioner.PlanRequest.external_auth_providers:type_name -> provisioner.ExternalAuthProvider
|
||||
11, // 31: provisioner.PlanRequest.previous_parameter_values:type_name -> provisioner.RichParameterValue
|
||||
32, // 32: provisioner.PlanComplete.resources:type_name -> provisioner.Resource
|
||||
10, // 33: provisioner.PlanComplete.parameters:type_name -> provisioner.RichParameter
|
||||
20, // 34: provisioner.PlanComplete.external_auth_providers:type_name -> provisioner.ExternalAuthProviderResource
|
||||
44, // 35: provisioner.PlanComplete.timings:type_name -> provisioner.Timing
|
||||
33, // 36: provisioner.PlanComplete.modules:type_name -> provisioner.Module
|
||||
14, // 37: provisioner.PlanComplete.presets:type_name -> provisioner.Preset
|
||||
16, // 38: provisioner.PlanComplete.resource_replacements:type_name -> provisioner.ResourceReplacement
|
||||
36, // 39: provisioner.ApplyRequest.metadata:type_name -> provisioner.Metadata
|
||||
32, // 40: provisioner.ApplyComplete.resources:type_name -> provisioner.Resource
|
||||
10, // 41: provisioner.ApplyComplete.parameters:type_name -> provisioner.RichParameter
|
||||
20, // 42: provisioner.ApplyComplete.external_auth_providers:type_name -> provisioner.ExternalAuthProviderResource
|
||||
44, // 43: provisioner.ApplyComplete.timings:type_name -> provisioner.Timing
|
||||
52, // 44: provisioner.Timing.start:type_name -> google.protobuf.Timestamp
|
||||
52, // 45: provisioner.Timing.end:type_name -> google.protobuf.Timestamp
|
||||
36, // 24: provisioner.Metadata.running_agent_auth_tokens:type_name -> provisioner.RunningAgentAuthToken
|
||||
9, // 25: provisioner.ParseComplete.template_variables:type_name -> provisioner.TemplateVariable
|
||||
54, // 26: provisioner.ParseComplete.workspace_tags:type_name -> provisioner.ParseComplete.WorkspaceTagsEntry
|
||||
37, // 27: provisioner.PlanRequest.metadata:type_name -> provisioner.Metadata
|
||||
12, // 28: provisioner.PlanRequest.rich_parameter_values:type_name -> provisioner.RichParameterValue
|
||||
18, // 29: provisioner.PlanRequest.variable_values:type_name -> provisioner.VariableValue
|
||||
22, // 30: provisioner.PlanRequest.external_auth_providers:type_name -> provisioner.ExternalAuthProvider
|
||||
12, // 31: provisioner.PlanRequest.previous_parameter_values:type_name -> provisioner.RichParameterValue
|
||||
33, // 32: provisioner.PlanComplete.resources:type_name -> provisioner.Resource
|
||||
11, // 33: provisioner.PlanComplete.parameters:type_name -> provisioner.RichParameter
|
||||
21, // 34: provisioner.PlanComplete.external_auth_providers:type_name -> provisioner.ExternalAuthProviderResource
|
||||
45, // 35: provisioner.PlanComplete.timings:type_name -> provisioner.Timing
|
||||
34, // 36: provisioner.PlanComplete.modules:type_name -> provisioner.Module
|
||||
15, // 37: provisioner.PlanComplete.presets:type_name -> provisioner.Preset
|
||||
17, // 38: provisioner.PlanComplete.resource_replacements:type_name -> provisioner.ResourceReplacement
|
||||
37, // 39: provisioner.ApplyRequest.metadata:type_name -> provisioner.Metadata
|
||||
33, // 40: provisioner.ApplyComplete.resources:type_name -> provisioner.Resource
|
||||
11, // 41: provisioner.ApplyComplete.parameters:type_name -> provisioner.RichParameter
|
||||
21, // 42: provisioner.ApplyComplete.external_auth_providers:type_name -> provisioner.ExternalAuthProviderResource
|
||||
45, // 43: provisioner.ApplyComplete.timings:type_name -> provisioner.Timing
|
||||
55, // 44: provisioner.Timing.start:type_name -> google.protobuf.Timestamp
|
||||
55, // 45: provisioner.Timing.end:type_name -> google.protobuf.Timestamp
|
||||
6, // 46: provisioner.Timing.state:type_name -> provisioner.TimingState
|
||||
37, // 47: provisioner.Request.config:type_name -> provisioner.Config
|
||||
38, // 48: provisioner.Request.parse:type_name -> provisioner.ParseRequest
|
||||
40, // 49: provisioner.Request.plan:type_name -> provisioner.PlanRequest
|
||||
42, // 50: provisioner.Request.apply:type_name -> provisioner.ApplyRequest
|
||||
45, // 51: provisioner.Request.cancel:type_name -> provisioner.CancelRequest
|
||||
18, // 52: provisioner.Response.log:type_name -> provisioner.Log
|
||||
39, // 53: provisioner.Response.parse:type_name -> provisioner.ParseComplete
|
||||
41, // 54: provisioner.Response.plan:type_name -> provisioner.PlanComplete
|
||||
43, // 55: provisioner.Response.apply:type_name -> provisioner.ApplyComplete
|
||||
46, // 56: provisioner.Provisioner.Session:input_type -> provisioner.Request
|
||||
47, // 57: provisioner.Provisioner.Session:output_type -> provisioner.Response
|
||||
57, // [57:58] is the sub-list for method output_type
|
||||
56, // [56:57] is the sub-list for method input_type
|
||||
56, // [56:56] is the sub-list for extension type_name
|
||||
56, // [56:56] is the sub-list for extension extendee
|
||||
0, // [0:56] is the sub-list for field type_name
|
||||
38, // 47: provisioner.Request.config:type_name -> provisioner.Config
|
||||
39, // 48: provisioner.Request.parse:type_name -> provisioner.ParseRequest
|
||||
41, // 49: provisioner.Request.plan:type_name -> provisioner.PlanRequest
|
||||
43, // 50: provisioner.Request.apply:type_name -> provisioner.ApplyRequest
|
||||
46, // 51: provisioner.Request.cancel:type_name -> provisioner.CancelRequest
|
||||
19, // 52: provisioner.Response.log:type_name -> provisioner.Log
|
||||
40, // 53: provisioner.Response.parse:type_name -> provisioner.ParseComplete
|
||||
42, // 54: provisioner.Response.plan:type_name -> provisioner.PlanComplete
|
||||
44, // 55: provisioner.Response.apply:type_name -> provisioner.ApplyComplete
|
||||
49, // 56: provisioner.Response.data_upload:type_name -> provisioner.DataUpload
|
||||
50, // 57: provisioner.Response.chunk_piece:type_name -> provisioner.ChunkPiece
|
||||
7, // 58: provisioner.DataUpload.upload_type:type_name -> provisioner.DataUploadType
|
||||
47, // 59: provisioner.Provisioner.Session:input_type -> provisioner.Request
|
||||
48, // 60: provisioner.Provisioner.Session:output_type -> provisioner.Response
|
||||
60, // [60:61] is the sub-list for method output_type
|
||||
59, // [59:60] is the sub-list for method input_type
|
||||
59, // [59:59] is the sub-list for extension type_name
|
||||
59, // [59:59] is the sub-list for extension extendee
|
||||
0, // [0:59] is the sub-list for field type_name
|
||||
}
|
||||
|
||||
func init() { file_provisionersdk_proto_provisioner_proto_init() }
|
||||
@@ -5088,7 +5367,19 @@ func file_provisionersdk_proto_provisioner_proto_init() {
|
||||
}
|
||||
}
|
||||
file_provisionersdk_proto_provisioner_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} {
|
||||
switch v := v.(*Agent_Metadata); i {
|
||||
switch v := v.(*DataUpload); i {
|
||||
case 0:
|
||||
return &v.state
|
||||
case 1:
|
||||
return &v.sizeCache
|
||||
case 2:
|
||||
return &v.unknownFields
|
||||
default:
|
||||
return nil
|
||||
}
|
||||
}
|
||||
file_provisionersdk_proto_provisioner_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} {
|
||||
switch v := v.(*ChunkPiece); i {
|
||||
case 0:
|
||||
return &v.state
|
||||
case 1:
|
||||
@@ -5100,6 +5391,18 @@ func file_provisionersdk_proto_provisioner_proto_init() {
|
||||
}
|
||||
}
|
||||
file_provisionersdk_proto_provisioner_proto_msgTypes[43].Exporter = func(v interface{}, i int) interface{} {
|
||||
switch v := v.(*Agent_Metadata); i {
|
||||
case 0:
|
||||
return &v.state
|
||||
case 1:
|
||||
return &v.sizeCache
|
||||
case 2:
|
||||
return &v.unknownFields
|
||||
default:
|
||||
return nil
|
||||
}
|
||||
}
|
||||
file_provisionersdk_proto_provisioner_proto_msgTypes[45].Exporter = func(v interface{}, i int) interface{} {
|
||||
switch v := v.(*Resource_Metadata); i {
|
||||
case 0:
|
||||
return &v.state
|
||||
@@ -5129,14 +5432,16 @@ func file_provisionersdk_proto_provisioner_proto_init() {
|
||||
(*Response_Parse)(nil),
|
||||
(*Response_Plan)(nil),
|
||||
(*Response_Apply)(nil),
|
||||
(*Response_DataUpload)(nil),
|
||||
(*Response_ChunkPiece)(nil),
|
||||
}
|
||||
type x struct{}
|
||||
out := protoimpl.TypeBuilder{
|
||||
File: protoimpl.DescBuilder{
|
||||
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
|
||||
RawDescriptor: file_provisionersdk_proto_provisioner_proto_rawDesc,
|
||||
NumEnums: 7,
|
||||
NumMessages: 45,
|
||||
NumEnums: 8,
|
||||
NumMessages: 47,
|
||||
NumExtensions: 0,
|
||||
NumServices: 1,
|
||||
},
|
||||
|
||||
@@ -366,6 +366,13 @@ message PlanRequest {
|
||||
repeated VariableValue variable_values = 3;
|
||||
repeated ExternalAuthProvider external_auth_providers = 4;
|
||||
repeated RichParameterValue previous_parameter_values = 5;
|
||||
|
||||
// If true, the provisioner can safely assume the caller does not need the
|
||||
// module files downloaded by the `terraform init` command.
|
||||
// Ideally this boolean would be flipped in its truthy value, however for
|
||||
// backwards compatibility reasons, the zero value should be the previous
|
||||
// behavior of downloading the module files.
|
||||
bool omit_module_files = 6;
|
||||
}
|
||||
|
||||
// PlanComplete indicates a request to plan completed.
|
||||
@@ -380,6 +387,7 @@ message PlanComplete {
|
||||
bytes plan = 9;
|
||||
repeated ResourceReplacement resource_replacements = 10;
|
||||
bytes module_files = 11;
|
||||
bytes module_files_hash = 12;
|
||||
}
|
||||
|
||||
// ApplyRequest asks the provisioner to apply the changes. Apply MUST be preceded by a successful plan request/response
|
||||
@@ -433,9 +441,39 @@ message Response {
|
||||
ParseComplete parse = 2;
|
||||
PlanComplete plan = 3;
|
||||
ApplyComplete apply = 4;
|
||||
DataUpload data_upload = 5;
|
||||
ChunkPiece chunk_piece = 6;
|
||||
}
|
||||
}
|
||||
|
||||
enum DataUploadType {
|
||||
UPLOAD_TYPE_UNKNOWN = 0;
|
||||
// UPLOAD_TYPE_MODULE_FILES is used to stream over terraform module files.
|
||||
// These files are located in `.terraform/modules` and are used for dynamic
|
||||
// parameters.
|
||||
UPLOAD_TYPE_MODULE_FILES = 1;
|
||||
}
|
||||
|
||||
message DataUpload {
|
||||
DataUploadType upload_type = 1;
|
||||
// data_hash is the sha256 of the payload to be uploaded.
|
||||
// This is also used to uniquely identify the upload.
|
||||
bytes data_hash = 2;
|
||||
// file_size is the total size of the data being uploaded.
|
||||
int64 file_size = 3;
|
||||
// Number of chunks to be uploaded.
|
||||
int32 chunks = 4;
|
||||
}
|
||||
|
||||
// ChunkPiece is used to stream over large files (over the 4mb limit).
|
||||
message ChunkPiece {
|
||||
bytes data = 1;
|
||||
// full_data_hash should match the hash from the original
|
||||
// DataUpload message
|
||||
bytes full_data_hash = 2;
|
||||
int32 piece_index = 3;
|
||||
}
|
||||
|
||||
service Provisioner {
|
||||
// Session represents provisioning a single template import or workspace. The daemon always sends Config followed
|
||||
// by one of the requests (ParseRequest, PlanRequest, ApplyRequest). The provisioner should respond with a stream
|
||||
|
||||
@@ -17,6 +17,9 @@ import (
|
||||
"golang.org/x/xerrors"
|
||||
|
||||
"cdr.dev/slog"
|
||||
"github.com/coder/coder/v2/codersdk/drpcsdk"
|
||||
|
||||
protobuf "google.golang.org/protobuf/proto"
|
||||
|
||||
"github.com/coder/coder/v2/provisionersdk/proto"
|
||||
)
|
||||
@@ -161,6 +164,33 @@ func (s *Session) handleRequests() error {
|
||||
return err
|
||||
}
|
||||
resp.Type = &proto.Response_Plan{Plan: complete}
|
||||
|
||||
if protobuf.Size(resp) > drpcsdk.MaxMessageSize {
|
||||
// It is likely the modules that is pushing the message size over the limit.
|
||||
// Send the modules over a stream of messages instead.
|
||||
s.Logger.Info(s.Context(), "plan response too large, sending modules as stream",
|
||||
slog.F("size_bytes", len(complete.ModuleFiles)),
|
||||
)
|
||||
dataUp, chunks := proto.BytesToDataUpload(proto.DataUploadType_UPLOAD_TYPE_MODULE_FILES, complete.ModuleFiles)
|
||||
|
||||
complete.ModuleFiles = nil // sent over the stream
|
||||
complete.ModuleFilesHash = dataUp.DataHash
|
||||
resp.Type = &proto.Response_Plan{Plan: complete}
|
||||
|
||||
err := s.stream.Send(&proto.Response{Type: &proto.Response_DataUpload{DataUpload: dataUp}})
|
||||
if err != nil {
|
||||
complete.Error = fmt.Sprintf("send data upload: %s", err.Error())
|
||||
} else {
|
||||
for i, chunk := range chunks {
|
||||
err := s.stream.Send(&proto.Response{Type: &proto.Response_ChunkPiece{ChunkPiece: chunk}})
|
||||
if err != nil {
|
||||
complete.Error = fmt.Sprintf("send data piece upload %d/%d: %s", i, dataUp.Chunks, err.Error())
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if complete.Error == "" {
|
||||
planned = true
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user