Adjust parameter naming (#2161)

* Adjust parameter naming for some worker resource fields

* Add eventing listener to event when authentication is successful from a downstream worker
This commit is contained in:
Jeff Mitchell authored and GitHub committed 2022-06-09 16:27:17 -04:00
1 parent 7c4f495c25
commit 5b978d7fa7
13 files changed
+356 -312

No files matched your search

+21 -21
View File
@@ -12,23 +12,23 @@ import (
)
type Worker struct {
Id string `json:"id,omitempty"`
ScopeId string `json:"scope_id,omitempty"`
Scope *scopes.ScopeInfo `json:"scope,omitempty"`
Name string `json:"name,omitempty"`
Description string `json:"description,omitempty"`
CreatedTime time.Time `json:"created_time,omitempty"`
UpdatedTime time.Time `json:"updated_time,omitempty"`
Version uint32 `json:"version,omitempty"`
Address string `json:"address,omitempty"`
CanonicalAddress string `json:"canonical_address,omitempty"`
Tags map[string][]string `json:"tags,omitempty"`
CanonicalTags map[string][]string `json:"canonical_tags,omitempty"`
LastStatusTime time.Time `json:"last_status_time,omitempty"`
WorkerConfig *WorkerConfig `json:"worker_config,omitempty"`
WorkerAuthToken string `json:"worker_auth_token,omitempty"`
ActiveConnectionCount uint32 `json:"active_connection_count,omitempty"`
AuthorizedActions []string `json:"authorized_actions,omitempty"`
Id string `json:"id,omitempty"`
ScopeId string `json:"scope_id,omitempty"`
Scope *scopes.ScopeInfo `json:"scope,omitempty"`
Name string `json:"name,omitempty"`
Description string `json:"description,omitempty"`
CreatedTime time.Time `json:"created_time,omitempty"`
UpdatedTime time.Time `json:"updated_time,omitempty"`
Version uint32 `json:"version,omitempty"`
Address string `json:"address,omitempty"`
CanonicalAddress string `json:"canonical_address,omitempty"`
Tags map[string][]string `json:"tags,omitempty"`
CanonicalTags map[string][]string `json:"canonical_tags,omitempty"`
LastStatusTime time.Time `json:"last_status_time,omitempty"`
WorkerProvidedConfiguration *WorkerProvidedConfiguration `json:"worker_provided_configuration,omitempty"`
WorkerGeneratedAuthToken string `json:"worker_generated_auth_token,omitempty"`
ActiveConnectionCount uint32 `json:"active_connection_count,omitempty"`
AuthorizedActions []string `json:"authorized_actions,omitempty"`
response *api.Response
}
@@ -93,7 +93,7 @@ func (c *Client) ApiClient() *api.Client {
return c.client
}
func (c *Client) CreateWorkerLed(ctx context.Context, workerAuthToken string, scopeId string, opt ...Option) (*WorkerCreateResult, error) {
func (c *Client) CreateWorkerLed(ctx context.Context, workerGeneratedAuthToken string, scopeId string, opt ...Option) (*WorkerCreateResult, error) {
if scopeId == "" {
return nil, fmt.Errorf("empty scopeId value passed into CreateWorkerLed request")
}
@@ -103,10 +103,10 @@ func (c *Client) CreateWorkerLed(ctx context.Context, workerAuthToken string, sc
if c.client == nil {
return nil, fmt.Errorf("nil client")
}
if workerAuthToken == "" {
return nil, fmt.Errorf("empty workerAuthToken value passed into CreateWorkerLed request")
if workerGeneratedAuthToken == "" {
return nil, fmt.Errorf("empty workerGeneratedAuthToken value passed into CreateWorkerLed request")
} else {
opts.postMap["worker_auth_token"] = workerAuthToken
opts.postMap["worker_generated_auth_token"] = workerGeneratedAuthToken
}
opts.postMap["scope_id"] = scopeId
@@ -1,7 +1,7 @@
// Code generated by "make api"; DO NOT EDIT.
package workers
type WorkerConfig struct {
type WorkerProvidedConfiguration struct {
Address string `json:"address,omitempty"`
Name string `json:"name,omitempty"`
Tags map[string][]string `json:"tags,omitempty"`
+2 -2
View File
@@ -79,7 +79,7 @@ const (
TagsField = "tags"
CanonicalTagsField = "canonical_tags"
ConfigurationField = "configuration"
WorkerAuthTokenField = "worker_auth_token"
WorkerConfigField = "worker_config"
WorkerGeneratedAuthTokenField = "worker_generated_auth_token"
WorkerProvidedConfigurationField = "worker_provided_configuration"
ActiveConnectionCountField = "active_session_count"
)
+4 -4
View File
@@ -761,9 +761,9 @@ var inputStructs = []*structInfo{
},
extraRequiredParams: []requiredParam{
{
Name: "workerAuthToken",
Name: "workerGeneratedAuthToken",
Typ: "string",
PostType: "worker_auth_token",
PostType: "worker_generated_auth_token",
},
},
pluralResourceName: "workers",
@@ -771,7 +771,7 @@ var inputStructs = []*structInfo{
recursiveListing: true,
},
{
inProto: &workers.WorkerConfig{},
outFile: "workers/worker_config.gen.go",
inProto: &workers.WorkerProvidedConfiguration{},
outFile: "workers/worker_provided_configuration.gen.go",
},
}
@@ -25,7 +25,7 @@ import (
_ "github.com/hashicorp/boundary/internal/daemon/controller/handlers/targets/tcp"
)
const shutdownReloadWorkerConfig = `
const shutdownReloadWorkerProvidedConfiguration = `
disable_mlock = true
worker {
@@ -58,7 +58,7 @@ func TestServer_ShutdownWorker(t *testing.T) {
// Start the worker
workerCmd := testServerCommand(t, testServerCommandOpts{})
workerCmd.presetConfig = atomic.NewString(fmt.Sprintf(shutdownReloadWorkerConfig, testController.ClusterAddrs()[0], key))
workerCmd.presetConfig = atomic.NewString(fmt.Sprintf(shutdownReloadWorkerProvidedConfiguration, testController.ClusterAddrs()[0], key))
workerCodeChan := make(chan int)
go func() {
+6 -6
View File
@@ -405,13 +405,13 @@ func TestDevCombined(t *testing.T) {
func TestDevWorkerCredentialStorageDir(t *testing.T) {
t.Parallel()
tests := []struct {
name string
devWorkerConfig string
storagePath string
name string
devWorkerProvidedConfiguration string
storagePath string
}{
{
name: "Relative Storage Directory",
devWorkerConfig: `
devWorkerProvidedConfiguration: `
listener "tcp" {
purpose = "proxy"
}
@@ -430,7 +430,7 @@ func TestDevWorkerCredentialStorageDir(t *testing.T) {
},
{
name: "Nonexistent Storage Directory",
devWorkerConfig: `
devWorkerProvidedConfiguration: `
listener "tcp" {
purpose = "proxy"
}
@@ -450,7 +450,7 @@ func TestDevWorkerCredentialStorageDir(t *testing.T) {
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
parsed, err := Parse(devConfig + tt.devWorkerConfig)
parsed, err := Parse(devConfig + tt.devWorkerProvidedConfiguration)
require.NoError(t, err)
require.Equal(t, tt.storagePath, parsed.Worker.AuthStoragePath)
})
@@ -200,7 +200,7 @@ func (s Service) CreateWorkerLed(ctx context.Context, req *pbs.CreateWorkerLedRe
if authResults.Error != nil {
return nil, authResults.Error
}
reqBytes, err := base58.FastBase58Decoding(req.GetItem().WorkerAuthToken.GetValue())
reqBytes, err := base58.FastBase58Decoding(req.GetItem().WorkerGeneratedAuthToken.GetValue())
if err != nil {
return nil, fmt.Errorf("%s: error decoding node_credentials_token: %w", op, err)
}
@@ -483,18 +483,18 @@ func toProto(ctx context.Context, in *servers.Worker, opt ...handlers.Option) (*
if in.GetWorkerReportedAddress() != "" ||
in.GetWorkerReportedName() != "" ||
len(in.GetConfigTags()) > 0 {
out.WorkerConfig = &pb.WorkerConfig{}
out.WorkerProvidedConfiguration = &pb.WorkerProvidedConfiguration{}
}
if len(in.GetConfigTags()) > 0 {
var err error
out.GetWorkerConfig().Tags, err = tagsToMapProto(in.GetConfigTags())
out.GetWorkerProvidedConfiguration().Tags, err = tagsToMapProto(in.GetConfigTags())
if err != nil {
return nil, errors.Wrap(ctx, err, op, errors.WithMsg("error preparing config tags proto"))
}
}
if out.WorkerConfig != nil {
out.GetWorkerConfig().Address = in.GetWorkerReportedAddress()
out.GetWorkerConfig().Name = in.GetWorkerReportedName()
if out.WorkerProvidedConfiguration != nil {
out.GetWorkerProvidedConfiguration().Address = in.GetWorkerReportedAddress()
out.GetWorkerProvidedConfiguration().Name = in.GetWorkerReportedName()
}
}
@@ -551,7 +551,7 @@ func validateDeleteRequest(req *pbs.DeleteWorkerRequest) error {
func validateUpdateRequest(req *pbs.UpdateWorkerRequest) error {
return handlers.ValidateUpdateRequest(req, req.GetItem(), func() map[string]string {
badFields := map[string]string{}
if req.GetItem().GetWorkerConfig() != nil {
if req.GetItem().GetWorkerProvidedConfiguration() != nil {
badFields[globals.ConfigurationField] = "This is a read only field."
}
if req.GetItem().GetCanonicalAddress() != "" {
@@ -580,8 +580,8 @@ func validateCreateRequest(req *pbs.CreateWorkerLedRequest) error {
}
// FIXME: in the future, we won't require this token since we'll support
// the server led flow where a token is returned when a worker is created.
if req.GetItem().WorkerAuthToken == nil {
badFields[globals.WorkerAuthTokenField] = cannotBeEmptyMsg
if req.GetItem().WorkerGeneratedAuthToken == nil {
badFields[globals.WorkerGeneratedAuthTokenField] = cannotBeEmptyMsg
}
if req.GetItem().CanonicalAddress != "" {
badFields[globals.CanonicalAddressField] = readOnlyFieldMsg
@@ -595,8 +595,8 @@ func validateCreateRequest(req *pbs.CreateWorkerLedRequest) error {
if req.GetItem().LastStatusTime != nil {
badFields[globals.LastStatusTimeField] = readOnlyFieldMsg
}
if req.GetItem().WorkerConfig != nil {
badFields[globals.WorkerConfigField] = readOnlyFieldMsg
if req.GetItem().WorkerProvidedConfiguration != nil {
badFields[globals.WorkerProvidedConfigurationField] = readOnlyFieldMsg
}
if req.GetItem().AuthorizedActions != nil {
badFields[globals.AuthorizedActionsField] = readOnlyFieldMsg
@@ -67,7 +67,7 @@ func TestGet(t *testing.T) {
servers.WithName("test worker names"),
servers.WithDescription("test worker description"),
servers.WithAddress("test worker address"),
servers.WithWorkerTags(&servers.Tag{"key", "val"}))
servers.WithWorkerTags(&servers.Tag{Key: "key", Value: "val"}))
// Add config tags to the created worker
worker, err = repo.UpsertWorkerStatus(context.Background(),
servers.NewWorkerForStatus(worker.GetScopeId(),
@@ -101,7 +101,7 @@ func TestGet(t *testing.T) {
Tags: map[string]*structpb.ListValue{
"key": structListValue(t, "val"),
},
WorkerConfig: &pb.WorkerConfig{
WorkerProvidedConfiguration: &pb.WorkerProvidedConfiguration{
Address: worker.GetWorkerReportedAddress(),
Name: worker.GetWorkerReportedName(),
Tags: map[string]*structpb.ListValue{
@@ -124,7 +124,7 @@ func TestGet(t *testing.T) {
res: &pbs.GetWorkerResponse{Item: wantWorker},
},
{
name: "Get a non existant Worker",
name: "Get a non-existent Worker",
req: &pbs.GetWorkerRequest{Id: servers.WorkerPrefix + "_DoesntExis"},
res: nil,
err: handlers.ApiErrorWithCode(codes.NotFound),
@@ -136,7 +136,7 @@ func TestGet(t *testing.T) {
err: handlers.ApiErrorWithCode(codes.InvalidArgument),
},
{
name: "space in id",
name: "Space in id",
req: &pbs.GetWorkerRequest{Id: servers.WorkerPrefix + "_1 23456789"},
res: nil,
err: handlers.ApiErrorWithCode(codes.InvalidArgument),
@@ -186,7 +186,7 @@ func TestList(t *testing.T) {
AuthorizedActions: testAuthorizedActions,
CanonicalAddress: w.CanonicalAddress(),
LastStatusTime: w.GetLastStatusTime().GetTimestamp(),
WorkerConfig: &pb.WorkerConfig{
WorkerProvidedConfiguration: &pb.WorkerProvidedConfiguration{
Address: w.GetWorkerReportedAddress(),
Name: w.GetWorkerReportedName(),
},
@@ -370,7 +370,7 @@ func TestUpdate(t *testing.T) {
workerService, err := NewService(ctx, repoFn, iamRepoFn)
require.NoError(t, err)
expectedScope := &scopes.ScopeInfo{Id: scope.Global.String(), Type: scope.Global.String(), Name: scope.Global.String(), Description: "Global Scope"}
expectedConfig := &pb.WorkerConfig{
expectedConfig := &pb.WorkerProvidedConfiguration{
Address: wkr.GetWorkerReportedAddress(),
Name: wkr.GetWorkerReportedName(),
}
@@ -395,17 +395,17 @@ func TestUpdate(t *testing.T) {
},
res: &pbs.UpdateWorkerResponse{
Item: &pb.Worker{
Id: wkr.GetPublicId(),
ScopeId: wkr.GetScopeId(),
Scope: expectedScope,
Name: wrapperspb.String("name"),
Description: wrapperspb.String("desc"),
Address: wrapperspb.String("address"),
CanonicalAddress: "address",
CreatedTime: wkr.GetCreateTime().GetTimestamp(),
LastStatusTime: wkr.GetLastStatusTime().GetTimestamp(),
WorkerConfig: expectedConfig,
AuthorizedActions: testAuthorizedActions,
Id: wkr.GetPublicId(),
ScopeId: wkr.GetScopeId(),
Scope: expectedScope,
Name: wrapperspb.String("name"),
Description: wrapperspb.String("desc"),
Address: wrapperspb.String("address"),
CanonicalAddress: "address",
CreatedTime: wkr.GetCreateTime().GetTimestamp(),
LastStatusTime: wkr.GetLastStatusTime().GetTimestamp(),
WorkerProvidedConfiguration: expectedConfig,
AuthorizedActions: testAuthorizedActions,
},
},
},
@@ -422,17 +422,17 @@ func TestUpdate(t *testing.T) {
},
res: &pbs.UpdateWorkerResponse{
Item: &pb.Worker{
Id: wkr.GetPublicId(),
ScopeId: wkr.GetScopeId(),
Scope: expectedScope,
Name: wrapperspb.String("name"),
Description: wrapperspb.String("desc"),
Address: wrapperspb.String("default"),
CanonicalAddress: "default",
CreatedTime: wkr.GetCreateTime().GetTimestamp(),
LastStatusTime: wkr.GetLastStatusTime().GetTimestamp(),
WorkerConfig: expectedConfig,
AuthorizedActions: testAuthorizedActions,
Id: wkr.GetPublicId(),
ScopeId: wkr.GetScopeId(),
Scope: expectedScope,
Name: wrapperspb.String("name"),
Description: wrapperspb.String("desc"),
Address: wrapperspb.String("default"),
CanonicalAddress: "default",
CreatedTime: wkr.GetCreateTime().GetTimestamp(),
LastStatusTime: wkr.GetLastStatusTime().GetTimestamp(),
WorkerProvidedConfiguration: expectedConfig,
AuthorizedActions: testAuthorizedActions,
},
},
},
@@ -488,16 +488,16 @@ func TestUpdate(t *testing.T) {
},
res: &pbs.UpdateWorkerResponse{
Item: &pb.Worker{
Id: wkr.GetPublicId(),
ScopeId: wkr.GetScopeId(),
Scope: expectedScope,
Description: wrapperspb.String("default"),
Address: wrapperspb.String("default"),
CanonicalAddress: "default",
CreatedTime: wkr.GetCreateTime().GetTimestamp(),
LastStatusTime: wkr.GetLastStatusTime().GetTimestamp(),
WorkerConfig: expectedConfig,
AuthorizedActions: testAuthorizedActions,
Id: wkr.GetPublicId(),
ScopeId: wkr.GetScopeId(),
Scope: expectedScope,
Description: wrapperspb.String("default"),
Address: wrapperspb.String("default"),
CanonicalAddress: "default",
CreatedTime: wkr.GetCreateTime().GetTimestamp(),
LastStatusTime: wkr.GetLastStatusTime().GetTimestamp(),
WorkerProvidedConfiguration: expectedConfig,
AuthorizedActions: testAuthorizedActions,
},
},
},
@@ -513,16 +513,16 @@ func TestUpdate(t *testing.T) {
},
res: &pbs.UpdateWorkerResponse{
Item: &pb.Worker{
Id: wkr.GetPublicId(),
ScopeId: wkr.GetScopeId(),
Scope: expectedScope,
Name: wrapperspb.String("default"),
Address: wrapperspb.String("default"),
CanonicalAddress: "default",
CreatedTime: wkr.GetCreateTime().GetTimestamp(),
LastStatusTime: wkr.GetLastStatusTime().GetTimestamp(),
WorkerConfig: expectedConfig,
AuthorizedActions: testAuthorizedActions,
Id: wkr.GetPublicId(),
ScopeId: wkr.GetScopeId(),
Scope: expectedScope,
Name: wrapperspb.String("default"),
Address: wrapperspb.String("default"),
CanonicalAddress: "default",
CreatedTime: wkr.GetCreateTime().GetTimestamp(),
LastStatusTime: wkr.GetLastStatusTime().GetTimestamp(),
WorkerProvidedConfiguration: expectedConfig,
AuthorizedActions: testAuthorizedActions,
},
},
},
@@ -539,17 +539,17 @@ func TestUpdate(t *testing.T) {
},
res: &pbs.UpdateWorkerResponse{
Item: &pb.Worker{
Id: wkr.GetPublicId(),
ScopeId: wkr.GetScopeId(),
Scope: expectedScope,
Name: wrapperspb.String("updated"),
Description: wrapperspb.String("default"),
Address: wrapperspb.String("default"),
CanonicalAddress: "default",
CreatedTime: wkr.GetCreateTime().GetTimestamp(),
LastStatusTime: wkr.GetLastStatusTime().GetTimestamp(),
WorkerConfig: expectedConfig,
AuthorizedActions: testAuthorizedActions,
Id: wkr.GetPublicId(),
ScopeId: wkr.GetScopeId(),
Scope: expectedScope,
Name: wrapperspb.String("updated"),
Description: wrapperspb.String("default"),
Address: wrapperspb.String("default"),
CanonicalAddress: "default",
CreatedTime: wkr.GetCreateTime().GetTimestamp(),
LastStatusTime: wkr.GetLastStatusTime().GetTimestamp(),
WorkerProvidedConfiguration: expectedConfig,
AuthorizedActions: testAuthorizedActions,
},
},
},
@@ -566,17 +566,17 @@ func TestUpdate(t *testing.T) {
},
res: &pbs.UpdateWorkerResponse{
Item: &pb.Worker{
Id: wkr.GetPublicId(),
ScopeId: wkr.GetScopeId(),
Scope: expectedScope,
Name: wrapperspb.String("default"),
Description: wrapperspb.String("notignored"),
Address: wrapperspb.String("default"),
CanonicalAddress: "default",
CreatedTime: wkr.GetCreateTime().GetTimestamp(),
LastStatusTime: wkr.GetLastStatusTime().GetTimestamp(),
WorkerConfig: expectedConfig,
AuthorizedActions: testAuthorizedActions,
Id: wkr.GetPublicId(),
ScopeId: wkr.GetScopeId(),
Scope: expectedScope,
Name: wrapperspb.String("default"),
Description: wrapperspb.String("notignored"),
Address: wrapperspb.String("default"),
CanonicalAddress: "default",
CreatedTime: wkr.GetCreateTime().GetTimestamp(),
LastStatusTime: wkr.GetLastStatusTime().GetTimestamp(),
WorkerProvidedConfiguration: expectedConfig,
AuthorizedActions: testAuthorizedActions,
},
},
},
@@ -598,10 +598,10 @@ func TestUpdate(t *testing.T) {
req: &pbs.UpdateWorkerRequest{
Id: wkr.GetPublicId(),
UpdateMask: &field_mask.FieldMask{
Paths: []string{"worker_config.name"},
Paths: []string{"worker_provided_configuration.name"},
},
Item: &pb.Worker{
WorkerConfig: &pb.WorkerConfig{
WorkerProvidedConfiguration: &pb.WorkerProvidedConfiguration{
Name: "name",
},
},
@@ -614,10 +614,10 @@ func TestUpdate(t *testing.T) {
req: &pbs.UpdateWorkerRequest{
Id: wkr.GetPublicId(),
UpdateMask: &field_mask.FieldMask{
Paths: []string{"worker_config.address"},
Paths: []string{"worker_provided_configuration.address"},
},
Item: &pb.Worker{
WorkerConfig: &pb.WorkerConfig{
WorkerProvidedConfiguration: &pb.WorkerProvidedConfiguration{
Address: "address",
},
},
@@ -840,8 +840,8 @@ func TestCreateWorkerLed(t *testing.T) {
scopeId: scope.Global.String(),
req: &pbs.CreateWorkerLedRequest{
Item: &workers.Worker{
ScopeId: "invalid-scope",
WorkerAuthToken: &wrapperspb.StringValue{Value: fetchReqFn()},
ScopeId: "invalid-scope",
WorkerGeneratedAuthToken: &wrapperspb.StringValue{Value: fetchReqFn()},
},
},
wantErr: true,
@@ -859,7 +859,7 @@ func TestCreateWorkerLed(t *testing.T) {
},
wantErr: true,
wantErrIs: handlers.ApiErrorWithCode(codes.InvalidArgument),
wantErrContains: globals.WorkerAuthTokenField,
wantErrContains: globals.WorkerGeneratedAuthTokenField,
},
{
name: "invalid-id",
@@ -867,9 +867,9 @@ func TestCreateWorkerLed(t *testing.T) {
scopeId: scope.Global.String(),
req: &pbs.CreateWorkerLedRequest{
Item: &workers.Worker{
ScopeId: scope.Global.String(),
WorkerAuthToken: &wrapperspb.StringValue{Value: fetchReqFn()},
Id: "invalid-id",
ScopeId: scope.Global.String(),
WorkerGeneratedAuthToken: &wrapperspb.StringValue{Value: fetchReqFn()},
Id: "invalid-id",
},
},
wantErr: true,
@@ -882,9 +882,9 @@ func TestCreateWorkerLed(t *testing.T) {
scopeId: scope.Global.String(),
req: &pbs.CreateWorkerLedRequest{
Item: &workers.Worker{
ScopeId: scope.Global.String(),
WorkerAuthToken: &wrapperspb.StringValue{Value: fetchReqFn()},
CanonicalAddress: "invalid-canonical-address",
ScopeId: scope.Global.String(),
WorkerGeneratedAuthToken: &wrapperspb.StringValue{Value: fetchReqFn()},
CanonicalAddress: "invalid-canonical-address",
},
},
wantErr: true,
@@ -897,8 +897,8 @@ func TestCreateWorkerLed(t *testing.T) {
scopeId: scope.Global.String(),
req: &pbs.CreateWorkerLedRequest{
Item: &workers.Worker{
ScopeId: scope.Global.String(),
WorkerAuthToken: &wrapperspb.StringValue{Value: fetchReqFn()},
ScopeId: scope.Global.String(),
WorkerGeneratedAuthToken: &wrapperspb.StringValue{Value: fetchReqFn()},
Tags: map[string]*structpb.ListValue{
"invalid": {Values: []*structpb.Value{
structpb.NewStringValue("invalid-tags"),
@@ -916,8 +916,8 @@ func TestCreateWorkerLed(t *testing.T) {
scopeId: scope.Global.String(),
req: &pbs.CreateWorkerLedRequest{
Item: &workers.Worker{
ScopeId: scope.Global.String(),
WorkerAuthToken: &wrapperspb.StringValue{Value: fetchReqFn()},
ScopeId: scope.Global.String(),
WorkerGeneratedAuthToken: &wrapperspb.StringValue{Value: fetchReqFn()},
CanonicalTags: map[string]*structpb.ListValue{
"invalid": {Values: []*structpb.Value{
structpb.NewStringValue("invalid-canonical-tags"),
@@ -935,9 +935,9 @@ func TestCreateWorkerLed(t *testing.T) {
scopeId: scope.Global.String(),
req: &pbs.CreateWorkerLedRequest{
Item: &workers.Worker{
ScopeId: scope.Global.String(),
WorkerAuthToken: &wrapperspb.StringValue{Value: fetchReqFn()},
LastStatusTime: timestamppb.Now(),
ScopeId: scope.Global.String(),
WorkerGeneratedAuthToken: &wrapperspb.StringValue{Value: fetchReqFn()},
LastStatusTime: timestamppb.Now(),
},
},
wantErr: true,
@@ -950,14 +950,14 @@ func TestCreateWorkerLed(t *testing.T) {
scopeId: scope.Global.String(),
req: &pbs.CreateWorkerLedRequest{
Item: &workers.Worker{
ScopeId: scope.Global.String(),
WorkerAuthToken: &wrapperspb.StringValue{Value: fetchReqFn()},
WorkerConfig: &pb.WorkerConfig{},
ScopeId: scope.Global.String(),
WorkerGeneratedAuthToken: &wrapperspb.StringValue{Value: fetchReqFn()},
WorkerProvidedConfiguration: &pb.WorkerProvidedConfiguration{},
},
},
wantErr: true,
wantErrIs: handlers.ApiErrorWithCode(codes.InvalidArgument),
wantErrContains: globals.WorkerConfigField,
wantErrContains: globals.WorkerProvidedConfigurationField,
},
{
name: "invalid-authorized-actions",
@@ -965,9 +965,9 @@ func TestCreateWorkerLed(t *testing.T) {
scopeId: scope.Global.String(),
req: &pbs.CreateWorkerLedRequest{
Item: &workers.Worker{
ScopeId: scope.Global.String(),
WorkerAuthToken: &wrapperspb.StringValue{Value: fetchReqFn()},
AuthorizedActions: []string{"invalid-authorized-actions"},
ScopeId: scope.Global.String(),
WorkerGeneratedAuthToken: &wrapperspb.StringValue{Value: fetchReqFn()},
AuthorizedActions: []string{"invalid-authorized-actions"},
},
},
wantErr: true,
@@ -980,9 +980,9 @@ func TestCreateWorkerLed(t *testing.T) {
scopeId: scope.Global.String(),
req: &pbs.CreateWorkerLedRequest{
Item: &workers.Worker{
ScopeId: scope.Global.String(),
WorkerAuthToken: &wrapperspb.StringValue{Value: fetchReqFn()},
CreatedTime: timestamppb.Now(),
ScopeId: scope.Global.String(),
WorkerGeneratedAuthToken: &wrapperspb.StringValue{Value: fetchReqFn()},
CreatedTime: timestamppb.Now(),
},
},
wantErr: true,
@@ -995,9 +995,9 @@ func TestCreateWorkerLed(t *testing.T) {
scopeId: scope.Global.String(),
req: &pbs.CreateWorkerLedRequest{
Item: &workers.Worker{
ScopeId: scope.Global.String(),
WorkerAuthToken: &wrapperspb.StringValue{Value: fetchReqFn()},
UpdatedTime: timestamppb.Now(),
ScopeId: scope.Global.String(),
WorkerGeneratedAuthToken: &wrapperspb.StringValue{Value: fetchReqFn()},
UpdatedTime: timestamppb.Now(),
},
},
wantErr: true,
@@ -1010,9 +1010,9 @@ func TestCreateWorkerLed(t *testing.T) {
scopeId: scope.Global.String(),
req: &pbs.CreateWorkerLedRequest{
Item: &workers.Worker{
ScopeId: scope.Global.String(),
WorkerAuthToken: &wrapperspb.StringValue{Value: fetchReqFn()},
Version: 1,
ScopeId: scope.Global.String(),
WorkerGeneratedAuthToken: &wrapperspb.StringValue{Value: fetchReqFn()},
Version: 1,
},
},
wantErr: true,
@@ -1025,8 +1025,8 @@ func TestCreateWorkerLed(t *testing.T) {
scopeId: "splat-auth-scope",
req: &pbs.CreateWorkerLedRequest{
Item: &workers.Worker{
ScopeId: scope.Global.String(),
WorkerAuthToken: &wrapperspb.StringValue{Value: fetchReqFn()},
ScopeId: scope.Global.String(),
WorkerGeneratedAuthToken: &wrapperspb.StringValue{Value: fetchReqFn()},
},
},
wantErr: true,
@@ -1038,8 +1038,8 @@ func TestCreateWorkerLed(t *testing.T) {
scopeId: scope.Global.String(),
req: &pbs.CreateWorkerLedRequest{
Item: &workers.Worker{
ScopeId: scope.Global.String(),
WorkerAuthToken: &wrapperspb.StringValue{Value: "invalid;semicolon"},
ScopeId: scope.Global.String(),
WorkerGeneratedAuthToken: &wrapperspb.StringValue{Value: "invalid;semicolon"},
},
},
wantErr: true,
@@ -1051,8 +1051,8 @@ func TestCreateWorkerLed(t *testing.T) {
scopeId: scope.Global.String(),
req: &pbs.CreateWorkerLedRequest{
Item: &workers.Worker{
ScopeId: scope.Global.String(),
WorkerAuthToken: &wrapperspb.StringValue{Value: "notNodeCreds"},
ScopeId: scope.Global.String(),
WorkerGeneratedAuthToken: &wrapperspb.StringValue{Value: "notNodeCreds"},
},
},
wantErr: true,
@@ -1071,10 +1071,10 @@ func TestCreateWorkerLed(t *testing.T) {
scopeId: scope.Global.String(),
req: &pbs.CreateWorkerLedRequest{
Item: &workers.Worker{
ScopeId: scope.Global.String(),
Name: &wrapperspb.StringValue{Value: "success"},
Description: &wrapperspb.StringValue{Value: "success-description"},
WorkerAuthToken: &wrapperspb.StringValue{Value: fetchReqFn()},
ScopeId: scope.Global.String(),
Name: &wrapperspb.StringValue{Value: "success"},
Description: &wrapperspb.StringValue{Value: "success-description"},
WorkerGeneratedAuthToken: &wrapperspb.StringValue{Value: fetchReqFn()},
},
},
wantErr: true,
@@ -1104,10 +1104,10 @@ func TestCreateWorkerLed(t *testing.T) {
scopeId: scope.Global.String(),
req: &pbs.CreateWorkerLedRequest{
Item: &workers.Worker{
ScopeId: scope.Global.String(),
Name: &wrapperspb.StringValue{Value: "success"},
Description: &wrapperspb.StringValue{Value: "success-description"},
WorkerAuthToken: &wrapperspb.StringValue{Value: fetchReqFn()},
ScopeId: scope.Global.String(),
Name: &wrapperspb.StringValue{Value: "success"},
Description: &wrapperspb.StringValue{Value: "success-description"},
WorkerGeneratedAuthToken: &wrapperspb.StringValue{Value: fetchReqFn()},
},
},
wantErr: true,
@@ -1119,10 +1119,10 @@ func TestCreateWorkerLed(t *testing.T) {
scopeId: scope.Global.String(),
req: &pbs.CreateWorkerLedRequest{
Item: &workers.Worker{
ScopeId: scope.Global.String(),
Name: &wrapperspb.StringValue{Value: "success"},
Description: &wrapperspb.StringValue{Value: "success-description"},
WorkerAuthToken: &wrapperspb.StringValue{Value: fetchReqFn()},
ScopeId: scope.Global.String(),
Name: &wrapperspb.StringValue{Value: "success"},
Description: &wrapperspb.StringValue{Value: "success-description"},
WorkerGeneratedAuthToken: &wrapperspb.StringValue{Value: fetchReqFn()},
},
},
res: &pbs.CreateWorkerLedResponse{
@@ -86,7 +86,7 @@ func (m *interceptingListener) Accept() (net.Conn, error) {
}
return nil, newTempError(fmt.Errorf("error deriving key id from newly-authenticated node: %w", err))
}
event.WriteSysEvent(ctx, op, "worker successfully authed", "key_id", keyId)
event.WriteSysEvent(ctx, op, "worker successfully authenticated", "key_id", keyId)
return conn, nil
case strings.HasPrefix(tlsConn.ConnectionState().NegotiatedProtocol, "v1workerauth"):
+39 -1
View File
@@ -159,7 +159,12 @@ func (w *Worker) configureForWorker(ln *base.ServerListener, logger *log.Logger)
return func() {
go w.workerAuthSplitListener.Start()
go httpServer.Serve(w.workerAuthSplitListener.OtherListener())
go ln.GrpcServer.Serve(w.workerAuthSplitListener.NodeEnrollmentListener())
go ln.GrpcServer.Serve(
&eventingListener{
ctx: cancelCtx,
baseLn: w.workerAuthSplitListener.NodeEnrollmentListener(),
},
)
}, nil
}
@@ -270,3 +275,36 @@ func listenerCloseErrorCheck(lnType string, err error) error {
return err
}
type eventingListener struct {
ctx context.Context
baseLn net.Listener
}
func (e *eventingListener) Accept() (net.Conn, error) {
const op = "worker.(eventingListener).Accept"
conn, err := e.baseLn.Accept()
if err != nil || conn == nil {
return conn, err
}
// This is all best-effort; anything going wrong here shouldn't disrupt the
// connection, so on error simply stop trying to get to an event
tlsConn, ok := conn.(*tls.Conn)
if ok && len(tlsConn.ConnectionState().PeerCertificates) > 0 {
keyId, err := nodee.KeyIdFromPkix(tlsConn.ConnectionState().PeerCertificates[0].SubjectKeyId)
if err == nil {
event.WriteSysEvent(e.ctx, op, "worker successfully authenticated", "key_id", keyId)
}
}
return conn, err
}
func (e *eventingListener) Close() error {
return e.baseLn.Close()
}
func (e *eventingListener) Addr() net.Addr {
return e.baseLn.Addr()
}
+6 -6
View File
@@ -5577,14 +5577,14 @@
"description": "Output only. The time this worker daemon last reported its status.",
"readOnly": true
},
"worker_config": {
"$ref": "#/definitions/controller.api.resources.workers.v1.WorkerConfig",
"worker_provided_configuration": {
"$ref": "#/definitions/controller.api.resources.workers.v1.WorkerProvidedConfiguration",
"description": "Output only. The set of information the worker daemon has reported about\nitself.",
"readOnly": true
},
"worker_auth_token": {
"worker_generated_auth_token": {
"type": "string",
"title": "worker_auth_token is input only. Supports the worker led node\nenrollment flow where this credentials token is produced by a worker. This\ntoken is a base58 encoded types.FetchNodeCredentialsRequest from\nhttps://github.com/hashicorp/nodeenrollment"
"title": "worker_generated_auth_token is input only. Supports the worker led node\nenrollment flow where this credentials token is produced by a worker. This\ntoken is a base58 encoded types.FetchNodeCredentialsRequest from\nhttps://github.com/hashicorp/nodeenrollment"
},
"active_connection_count": {
"type": "integer",
@@ -5603,7 +5603,7 @@
},
"title": "Worker contains all fields related to a Worker resource"
},
"controller.api.resources.workers.v1.WorkerConfig": {
"controller.api.resources.workers.v1.WorkerProvidedConfiguration": {
"type": "object",
"properties": {
"address": {
@@ -5628,7 +5628,7 @@
"readOnly": true
}
},
"description": "WorkerConfig contains configuration values reported by the worker daemon."
"description": "WorkerProvidedConfiguration contains configuration values reported by the worker daemon."
},
"controller.api.services.v1.AddGroupMembersResponse": {
"type": "object",
@@ -10,8 +10,8 @@ import "google/protobuf/wrappers.proto";
option go_package = "github.com/hashicorp/boundary/sdk/pbs/controller/api/resources/workers;workers";
// WorkerConfig contains configuration values reported by the worker daemon.
message WorkerConfig {
// WorkerProvidedConfiguration contains configuration values reported by the worker daemon.
message WorkerProvidedConfiguration {
// Output only. The address the worker daemon reports itself as reachable at.
string address = 10;
@@ -88,13 +88,13 @@ message Worker {
// Output only. The set of information the worker daemon has reported about
// itself.
WorkerConfig worker_config = 140 [json_name = "worker_config"];
WorkerProvidedConfiguration worker_provided_configuration = 140 [json_name = "worker_provided_configuration"];
// worker_auth_token is input only. Supports the worker led node
// worker_generated_auth_token is input only. Supports the worker led node
// enrollment flow where this credentials token is produced by a worker. This
// token is a base58 encoded types.FetchNodeCredentialsRequest from
// https://github.com/hashicorp/nodeenrollment
google.protobuf.StringValue worker_auth_token = 150 [json_name = "worker_auth_token"]; // @gotags: `class:"public"`
google.protobuf.StringValue worker_generated_auth_token = 150 [json_name = "worker_generated_auth_token"]; // @gotags: `class:"public"`
// Output only. The number of connections that this worker is currently handling.
uint32 active_connection_count = 160 [json_name = "active_connection_count"]; // @gotags: `class:"public"`
@@ -25,8 +25,8 @@ const (
_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
)
// WorkerConfig contains configuration values reported by the worker daemon.
type WorkerConfig struct {
// WorkerProvidedConfiguration contains configuration values reported by the worker daemon.
type WorkerProvidedConfiguration struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
@@ -39,8 +39,8 @@ type WorkerConfig struct {
Tags map[string]*structpb.ListValue `protobuf:"bytes,40,rep,name=tags,proto3" json:"tags,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
}
func (x *WorkerConfig) Reset() {
*x = WorkerConfig{}
func (x *WorkerProvidedConfiguration) Reset() {
*x = WorkerProvidedConfiguration{}
if protoimpl.UnsafeEnabled {
mi := &file_controller_api_resources_workers_v1_worker_proto_msgTypes[0]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@@ -48,13 +48,13 @@ func (x *WorkerConfig) Reset() {
}
}
func (x *WorkerConfig) String() string {
func (x *WorkerProvidedConfiguration) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*WorkerConfig) ProtoMessage() {}
func (*WorkerProvidedConfiguration) ProtoMessage() {}
func (x *WorkerConfig) ProtoReflect() protoreflect.Message {
func (x *WorkerProvidedConfiguration) ProtoReflect() protoreflect.Message {
mi := &file_controller_api_resources_workers_v1_worker_proto_msgTypes[0]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@@ -66,26 +66,26 @@ func (x *WorkerConfig) ProtoReflect() protoreflect.Message {
return mi.MessageOf(x)
}
// Deprecated: Use WorkerConfig.ProtoReflect.Descriptor instead.
func (*WorkerConfig) Descriptor() ([]byte, []int) {
// Deprecated: Use WorkerProvidedConfiguration.ProtoReflect.Descriptor instead.
func (*WorkerProvidedConfiguration) Descriptor() ([]byte, []int) {
return file_controller_api_resources_workers_v1_worker_proto_rawDescGZIP(), []int{0}
}
func (x *WorkerConfig) GetAddress() string {
func (x *WorkerProvidedConfiguration) GetAddress() string {
if x != nil {
return x.Address
}
return ""
}
func (x *WorkerConfig) GetName() string {
func (x *WorkerProvidedConfiguration) GetName() string {
if x != nil {
return x.Name
}
return ""
}
func (x *WorkerConfig) GetTags() map[string]*structpb.ListValue {
func (x *WorkerProvidedConfiguration) GetTags() map[string]*structpb.ListValue {
if x != nil {
return x.Tags
}
@@ -131,12 +131,12 @@ type Worker struct {
LastStatusTime *timestamppb.Timestamp `protobuf:"bytes,130,opt,name=last_status_time,proto3" json:"last_status_time,omitempty" class:"public"` // @gotags: `class:"public"`
// Output only. The set of information the worker daemon has reported about
// itself.
WorkerConfig *WorkerConfig `protobuf:"bytes,140,opt,name=worker_config,proto3" json:"worker_config,omitempty"`
// worker_auth_token is input only. Supports the worker led node
WorkerProvidedConfiguration *WorkerProvidedConfiguration `protobuf:"bytes,140,opt,name=worker_provided_configuration,proto3" json:"worker_provided_configuration,omitempty"`
// worker_generated_auth_token is input only. Supports the worker led node
// enrollment flow where this credentials token is produced by a worker. This
// token is a base58 encoded types.FetchNodeCredentialsRequest from
// https://github.com/hashicorp/nodeenrollment
WorkerAuthToken *wrapperspb.StringValue `protobuf:"bytes,150,opt,name=worker_auth_token,proto3" json:"worker_auth_token,omitempty" class:"public"` // @gotags: `class:"public"`
WorkerGeneratedAuthToken *wrapperspb.StringValue `protobuf:"bytes,150,opt,name=worker_generated_auth_token,proto3" json:"worker_generated_auth_token,omitempty" class:"public"` // @gotags: `class:"public"`
// Output only. The number of connections that this worker is currently handling.
ActiveConnectionCount uint32 `protobuf:"varint,160,opt,name=active_connection_count,proto3" json:"active_connection_count,omitempty" class:"public"` // @gotags: `class:"public"`
// Output only. The available actions on this resource for the requester.
@@ -266,16 +266,16 @@ func (x *Worker) GetLastStatusTime() *timestamppb.Timestamp {
return nil
}
func (x *Worker) GetWorkerConfig() *WorkerConfig {
func (x *Worker) GetWorkerProvidedConfiguration() *WorkerProvidedConfiguration {
if x != nil {
return x.WorkerConfig
return x.WorkerProvidedConfiguration
}
return nil
}
func (x *Worker) GetWorkerAuthToken() *wrapperspb.StringValue {
func (x *Worker) GetWorkerGeneratedAuthToken() *wrapperspb.StringValue {
if x != nil {
return x.WorkerAuthToken
return x.WorkerGeneratedAuthToken
}
return nil
}
@@ -314,107 +314,113 @@ var file_controller_api_resources_workers_v1_worker_proto_rawDesc = []byte{
0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f,
0x74, 0x6f, 0x1a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f,
0x62, 0x75, 0x66, 0x2f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x73, 0x2e, 0x70, 0x72, 0x6f,
0x74, 0x6f, 0x22, 0xe2, 0x01, 0x0a, 0x0c, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x43, 0x6f, 0x6e,
0x66, 0x69, 0x67, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x0a,
0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x12, 0x0a,
0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x14, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d,
0x65, 0x12, 0x4f, 0x0a, 0x04, 0x74, 0x61, 0x67, 0x73, 0x18, 0x28, 0x20, 0x03, 0x28, 0x0b, 0x32,
0x3b, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x2e, 0x61, 0x70, 0x69,
0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x65,
0x72, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66,
0x69, 0x67, 0x2e, 0x54, 0x61, 0x67, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x04, 0x74, 0x61,
0x67, 0x73, 0x1a, 0x53, 0x0a, 0x09, 0x54, 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, 0x30, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 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, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61,
0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x83, 0x0a, 0x0a, 0x06, 0x57, 0x6f, 0x72, 0x6b,
0x65, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02,
0x69, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x14,
0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x5f, 0x69, 0x64, 0x12, 0x43,
0x0a, 0x05, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e,
0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x72,
0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x2e,
0x76, 0x31, 0x2e, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x05, 0x73, 0x63,
0x6f, 0x70, 0x65, 0x12, 0x46, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x28, 0x20, 0x01, 0x28,
0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42,
0x14, 0xa0, 0xda, 0x29, 0x01, 0xc2, 0xdd, 0x29, 0x0c, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12,
0x04, 0x6e, 0x61, 0x6d, 0x65, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x62, 0x0a, 0x0b, 0x64,
0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x32, 0x20, 0x01, 0x28, 0x0b,
0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62,
0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x22,
0xa0, 0xda, 0x29, 0x01, 0xc2, 0xdd, 0x29, 0x1a, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69,
0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69,
0x6f, 0x6e, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12,
0x3e, 0x0a, 0x0c, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18,
0x3c, 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, 0x0c, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x12,
0x3e, 0x0a, 0x0c, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18,
0x46, 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, 0x0c, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x12,
0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x50, 0x20, 0x01, 0x28, 0x0d,
0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x52, 0x0a, 0x07, 0x61, 0x64, 0x64,
0x72, 0x65, 0x73, 0x73, 0x18, 0x5a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f,
0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72,
0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x1a, 0xa0, 0xda, 0x29, 0x01, 0xc2, 0xdd,
0x29, 0x12, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x07, 0x61, 0x64, 0x64,
0x72, 0x65, 0x73, 0x73, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x2c, 0x0a,
0x11, 0x63, 0x61, 0x6e, 0x6f, 0x6e, 0x69, 0x63, 0x61, 0x6c, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65,
0x73, 0x73, 0x18, 0x64, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x63, 0x61, 0x6e, 0x6f, 0x6e, 0x69,
0x63, 0x61, 0x6c, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x49, 0x0a, 0x04, 0x74,
0x61, 0x67, 0x73, 0x18, 0x6e, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x63, 0x6f, 0x6e, 0x74,
0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75,
0x72, 0x63, 0x65, 0x73, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x73, 0x2e, 0x76, 0x31, 0x2e,
0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x2e, 0x54, 0x61, 0x67, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79,
0x52, 0x04, 0x74, 0x61, 0x67, 0x73, 0x12, 0x66, 0x0a, 0x0e, 0x63, 0x61, 0x6e, 0x6f, 0x6e, 0x69,
0x63, 0x61, 0x6c, 0x5f, 0x74, 0x61, 0x67, 0x73, 0x18, 0x78, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3e,
0x74, 0x6f, 0x22, 0x80, 0x02, 0x0a, 0x1b, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x50, 0x72, 0x6f,
0x76, 0x69, 0x64, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69,
0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x0a, 0x20,
0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x12, 0x0a, 0x04,
0x6e, 0x61, 0x6d, 0x65, 0x18, 0x14, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65,
0x12, 0x5e, 0x0a, 0x04, 0x74, 0x61, 0x67, 0x73, 0x18, 0x28, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x4a,
0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x2e, 0x61, 0x70, 0x69, 0x2e,
0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x72,
0x73, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x2e, 0x43, 0x61, 0x6e, 0x6f,
0x6e, 0x69, 0x63, 0x61, 0x6c, 0x54, 0x61, 0x67, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0e,
0x63, 0x61, 0x6e, 0x6f, 0x6e, 0x69, 0x63, 0x61, 0x6c, 0x5f, 0x74, 0x61, 0x67, 0x73, 0x12, 0x47,
0x0a, 0x10, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x5f, 0x74, 0x69,
0x6d, 0x65, 0x18, 0x82, 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, 0x10, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x74,
0x75, 0x73, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x58, 0x0a, 0x0d, 0x77, 0x6f, 0x72, 0x6b, 0x65,
0x72, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x8c, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32,
0x31, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x2e, 0x61, 0x70, 0x69,
0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x65,
0x72, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66,
0x69, 0x67, 0x52, 0x0d, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69,
0x67, 0x12, 0x4b, 0x0a, 0x11, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x5f, 0x61, 0x75, 0x74, 0x68,
0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x96, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e,
0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e,
0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x11, 0x77, 0x6f, 0x72,
0x6b, 0x65, 0x72, 0x5f, 0x61, 0x75, 0x74, 0x68, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x39,
0x0a, 0x17, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74,
0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0xa0, 0x01, 0x20, 0x01, 0x28, 0x0d,
0x52, 0x17, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74,
0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x2f, 0x0a, 0x12, 0x61, 0x75, 0x74,
0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x64, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18,
0xac, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x12, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a,
0x65, 0x64, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x53, 0x0a, 0x09, 0x54, 0x61,
0x73, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x50, 0x72, 0x6f, 0x76, 0x69,
0x64, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e,
0x2e, 0x54, 0x61, 0x67, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x04, 0x74, 0x61, 0x67, 0x73,
0x1a, 0x53, 0x0a, 0x09, 0x54, 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,
0x30, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 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, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75,
0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xc7, 0x0a, 0x0a, 0x06, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72,
0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64,
0x12, 0x1a, 0x0a, 0x08, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x14, 0x20, 0x01,
0x28, 0x09, 0x52, 0x08, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x5f, 0x69, 0x64, 0x12, 0x43, 0x0a, 0x05,
0x73, 0x63, 0x6f, 0x70, 0x65, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x63, 0x6f,
0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x72, 0x65, 0x73,
0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x2e, 0x76, 0x31,
0x2e, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x05, 0x73, 0x63, 0x6f, 0x70,
0x65, 0x12, 0x46, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x28, 0x20, 0x01, 0x28, 0x0b, 0x32,
0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75,
0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x14, 0xa0,
0xda, 0x29, 0x01, 0xc2, 0xdd, 0x29, 0x0c, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x04, 0x6e,
0x61, 0x6d, 0x65, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x62, 0x0a, 0x0b, 0x64, 0x65, 0x73,
0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x32, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c,
0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66,
0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x22, 0xa0, 0xda,
0x29, 0x01, 0xc2, 0xdd, 0x29, 0x1a, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74,
0x69, 0x6f, 0x6e, 0x12, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e,
0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3e, 0x0a,
0x0c, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x3c, 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,
0x0c, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x3e, 0x0a,
0x0c, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x46, 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,
0x0c, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x18, 0x0a,
0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x50, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07,
0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x52, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65,
0x73, 0x73, 0x18, 0x5a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e,
0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x1a, 0xa0, 0xda, 0x29, 0x01, 0xc2, 0xdd, 0x29, 0x12,
0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65,
0x73, 0x73, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x2c, 0x0a, 0x11, 0x63,
0x61, 0x6e, 0x6f, 0x6e, 0x69, 0x63, 0x61, 0x6c, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73,
0x18, 0x64, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x63, 0x61, 0x6e, 0x6f, 0x6e, 0x69, 0x63, 0x61,
0x6c, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x49, 0x0a, 0x04, 0x74, 0x61, 0x67,
0x73, 0x18, 0x6e, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f,
0x6c, 0x6c, 0x65, 0x72, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63,
0x65, 0x73, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x6f,
0x72, 0x6b, 0x65, 0x72, 0x2e, 0x54, 0x61, 0x67, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x04,
0x74, 0x61, 0x67, 0x73, 0x12, 0x66, 0x0a, 0x0e, 0x63, 0x61, 0x6e, 0x6f, 0x6e, 0x69, 0x63, 0x61,
0x6c, 0x5f, 0x74, 0x61, 0x67, 0x73, 0x18, 0x78, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x63,
0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x72, 0x65,
0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x73, 0x2e,
0x76, 0x31, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x2e, 0x43, 0x61, 0x6e, 0x6f, 0x6e, 0x69,
0x63, 0x61, 0x6c, 0x54, 0x61, 0x67, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0e, 0x63, 0x61,
0x6e, 0x6f, 0x6e, 0x69, 0x63, 0x61, 0x6c, 0x5f, 0x74, 0x61, 0x67, 0x73, 0x12, 0x47, 0x0a, 0x10,
0x6c, 0x61, 0x73, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x5f, 0x74, 0x69, 0x6d, 0x65,
0x18, 0x82, 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, 0x10, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73,
0x5f, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x87, 0x01, 0x0a, 0x1d, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x72,
0x5f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67,
0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x8c, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x40,
0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x2e, 0x61, 0x70, 0x69, 0x2e,
0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x72,
0x73, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x50, 0x72, 0x6f, 0x76, 0x69,
0x64, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e,
0x52, 0x1d, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x5f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65,
0x64, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12,
0x5f, 0x0a, 0x1b, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61,
0x74, 0x65, 0x64, 0x5f, 0x61, 0x75, 0x74, 0x68, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x96,
0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70,
0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61,
0x6c, 0x75, 0x65, 0x52, 0x1b, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x5f, 0x67, 0x65, 0x6e, 0x65,
0x72, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x75, 0x74, 0x68, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e,
0x12, 0x39, 0x0a, 0x17, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x6e, 0x65,
0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0xa0, 0x01, 0x20, 0x01,
0x28, 0x0d, 0x52, 0x17, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x6e, 0x65,
0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x2f, 0x0a, 0x12, 0x61,
0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x64, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e,
0x73, 0x18, 0xac, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x12, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72,
0x69, 0x7a, 0x65, 0x64, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x53, 0x0a, 0x09,
0x54, 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, 0x30, 0x0a, 0x05, 0x76,
0x61, 0x6c, 0x75, 0x65, 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, 0x4c, 0x69, 0x73,
0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38,
0x01, 0x1a, 0x5c, 0x0a, 0x12, 0x43, 0x61, 0x6e, 0x6f, 0x6e, 0x69, 0x63, 0x61, 0x6c, 0x54, 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, 0x30, 0x0a, 0x05, 0x76, 0x61, 0x6c,
0x75, 0x65, 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, 0x4c, 0x69, 0x73, 0x74, 0x56,
0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a,
0x5c, 0x0a, 0x12, 0x43, 0x61, 0x6e, 0x6f, 0x6e, 0x69, 0x63, 0x61, 0x6c, 0x54, 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, 0x30, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65,
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, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x61, 0x6c,
0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x42, 0x50, 0x5a,
0x4e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x68, 0x61, 0x73, 0x68,
0x69, 0x63, 0x6f, 0x72, 0x70, 0x2f, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x61, 0x72, 0x79, 0x2f, 0x73,
0x64, 0x6b, 0x2f, 0x70, 0x62, 0x73, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65,
0x72, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f,
0x77, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x73, 0x3b, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x73, 0x62,
0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x42,
0x50, 0x5a, 0x4e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x68, 0x61,
0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2f, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x61, 0x72, 0x79,
0x2f, 0x73, 0x64, 0x6b, 0x2f, 0x70, 0x62, 0x73, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c,
0x6c, 0x65, 0x72, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65,
0x73, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x73, 0x3b, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x72,
0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
}
var (
@@ -431,18 +437,18 @@ func file_controller_api_resources_workers_v1_worker_proto_rawDescGZIP() []byte
var file_controller_api_resources_workers_v1_worker_proto_msgTypes = make([]protoimpl.MessageInfo, 5)
var file_controller_api_resources_workers_v1_worker_proto_goTypes = []interface{}{
(*WorkerConfig)(nil), // 0: controller.api.resources.workers.v1.WorkerConfig
(*Worker)(nil), // 1: controller.api.resources.workers.v1.Worker
nil, // 2: controller.api.resources.workers.v1.WorkerConfig.TagsEntry
nil, // 3: controller.api.resources.workers.v1.Worker.TagsEntry
nil, // 4: controller.api.resources.workers.v1.Worker.CanonicalTagsEntry
(*scopes.ScopeInfo)(nil), // 5: controller.api.resources.scopes.v1.ScopeInfo
(*wrapperspb.StringValue)(nil), // 6: google.protobuf.StringValue
(*timestamppb.Timestamp)(nil), // 7: google.protobuf.Timestamp
(*structpb.ListValue)(nil), // 8: google.protobuf.ListValue
(*WorkerProvidedConfiguration)(nil), // 0: controller.api.resources.workers.v1.WorkerProvidedConfiguration
(*Worker)(nil), // 1: controller.api.resources.workers.v1.Worker
nil, // 2: controller.api.resources.workers.v1.WorkerProvidedConfiguration.TagsEntry
nil, // 3: controller.api.resources.workers.v1.Worker.TagsEntry
nil, // 4: controller.api.resources.workers.v1.Worker.CanonicalTagsEntry
(*scopes.ScopeInfo)(nil), // 5: controller.api.resources.scopes.v1.ScopeInfo
(*wrapperspb.StringValue)(nil), // 6: google.protobuf.StringValue
(*timestamppb.Timestamp)(nil), // 7: google.protobuf.Timestamp
(*structpb.ListValue)(nil), // 8: google.protobuf.ListValue
}
var file_controller_api_resources_workers_v1_worker_proto_depIdxs = []int32{
2, // 0: controller.api.resources.workers.v1.WorkerConfig.tags:type_name -> controller.api.resources.workers.v1.WorkerConfig.TagsEntry
2, // 0: controller.api.resources.workers.v1.WorkerProvidedConfiguration.tags:type_name -> controller.api.resources.workers.v1.WorkerProvidedConfiguration.TagsEntry
5, // 1: controller.api.resources.workers.v1.Worker.scope:type_name -> controller.api.resources.scopes.v1.ScopeInfo
6, // 2: controller.api.resources.workers.v1.Worker.name:type_name -> google.protobuf.StringValue
6, // 3: controller.api.resources.workers.v1.Worker.description:type_name -> google.protobuf.StringValue
@@ -452,9 +458,9 @@ var file_controller_api_resources_workers_v1_worker_proto_depIdxs = []int32{
3, // 7: controller.api.resources.workers.v1.Worker.tags:type_name -> controller.api.resources.workers.v1.Worker.TagsEntry
4, // 8: controller.api.resources.workers.v1.Worker.canonical_tags:type_name -> controller.api.resources.workers.v1.Worker.CanonicalTagsEntry
7, // 9: controller.api.resources.workers.v1.Worker.last_status_time:type_name -> google.protobuf.Timestamp
0, // 10: controller.api.resources.workers.v1.Worker.worker_config:type_name -> controller.api.resources.workers.v1.WorkerConfig
6, // 11: controller.api.resources.workers.v1.Worker.worker_auth_token:type_name -> google.protobuf.StringValue
8, // 12: controller.api.resources.workers.v1.WorkerConfig.TagsEntry.value:type_name -> google.protobuf.ListValue
0, // 10: controller.api.resources.workers.v1.Worker.worker_provided_configuration:type_name -> controller.api.resources.workers.v1.WorkerProvidedConfiguration
6, // 11: controller.api.resources.workers.v1.Worker.worker_generated_auth_token:type_name -> google.protobuf.StringValue
8, // 12: controller.api.resources.workers.v1.WorkerProvidedConfiguration.TagsEntry.value:type_name -> google.protobuf.ListValue
8, // 13: controller.api.resources.workers.v1.Worker.TagsEntry.value:type_name -> google.protobuf.ListValue
8, // 14: controller.api.resources.workers.v1.Worker.CanonicalTagsEntry.value:type_name -> google.protobuf.ListValue
15, // [15:15] is the sub-list for method output_type
@@ -471,7 +477,7 @@ func file_controller_api_resources_workers_v1_worker_proto_init() {
}
if !protoimpl.UnsafeEnabled {
file_controller_api_resources_workers_v1_worker_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*WorkerConfig); i {
switch v := v.(*WorkerProvidedConfiguration); i {
case 0:
return &v.state
case 1: