go.chromium.org/luci@v0.0.0-20240309015107-7cdc2e660f33/swarming/proto/config/bots.pb.go (about)

     1  // Copyright 2016 The LUCI Authors. All rights reserved.
     2  // Use of this source code is governed under the Apache License, Version 2.0
     3  // that can be found in the LICENSE file.
     4  
     5  // Code generated by protoc-gen-go. DO NOT EDIT.
     6  // versions:
     7  // 	protoc-gen-go v1.31.0
     8  // 	protoc        v3.21.7
     9  // source: go.chromium.org/luci/swarming/proto/config/bots.proto
    10  
    11  package configpb
    12  
    13  import (
    14  	_ "go.chromium.org/luci/common/proto"
    15  	protoreflect "google.golang.org/protobuf/reflect/protoreflect"
    16  	protoimpl "google.golang.org/protobuf/runtime/protoimpl"
    17  	reflect "reflect"
    18  	sync "sync"
    19  )
    20  
    21  const (
    22  	// Verify that this generated code is sufficiently up-to-date.
    23  	_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
    24  	// Verify that runtime/protoimpl is sufficiently up-to-date.
    25  	_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
    26  )
    27  
    28  // Schema for bots.cfg service config file in luci-config.
    29  //
    30  // It defines a function bot_id => (required credentials, trusted_dimensions,
    31  // config), where
    32  //   - "bot_id" is identifier of a bot as sent by the bot itself (usually
    33  //     machine hostname, short one, not FQDN)
    34  //   - "required credentials" describes how server should authenticate calls
    35  //     from the bot.
    36  //   - "trusted_dimensions" is a set of dimension set by the server itself.
    37  //     Such dimensions can't be spoofed by the bot.
    38  //   - "config" is any additional bot configuration.
    39  //
    40  // Connections from bots that do not appear in this config are rejected.
    41  //
    42  // The default config (used if bots.cfg is missing) represents IP-whitelist only
    43  // authentication, as was used before bots.cfg was implemented:
    44  //
    45  //	bot_group {
    46  //	  auth {
    47  //	    ip_whitelist: "<swarming-app-id>-bots"
    48  //	  }
    49  //	}
    50  type BotsCfg struct {
    51  	state         protoimpl.MessageState
    52  	sizeCache     protoimpl.SizeCache
    53  	unknownFields protoimpl.UnknownFields
    54  
    55  	// List of dimension names that are provided by the server.
    56  	//
    57  	// If bot attempts to set such dimension, it'll be ignored. Trusted dimensions
    58  	// are defined through bot_group configs below. Swarming users can trust such
    59  	// dimensions, since they are set by the server based on validated credentials
    60  	// (unlike other dimensions that can be arbitrary defined by the bot itself).
    61  	TrustedDimensions []string `protobuf:"bytes,1,rep,name=trusted_dimensions,json=trustedDimensions,proto3" json:"trusted_dimensions,omitempty"`
    62  	// A list of groups of bots. Each group defines a bunch of bots that all
    63  	// have same dimensions and authenticate in the same way.
    64  	//
    65  	// The order of entries here is irrelevant. The server uses the following
    66  	// search algorithm when trying to pick a group for a bot with some bot_id:
    67  	//  1. First it tries to find a direct match: a group that lists the bot in
    68  	//     bot_id field.
    69  	//  2. Next it tries to find a group with matching bot_id_prefix. The config
    70  	//     validation process makes sure prefixes do not "intersect", so there
    71  	//     will be at most one matching group.
    72  	//  3. Finally, if there's a group with no defined bot_id or bot_id_prefix
    73  	//     fields (the "default" group), the bot is categorized to that group.
    74  	//     If there's no such group, the connection from the bot is rejected.
    75  	//     Config validation process ensures there can be only one such group.
    76  	BotGroup []*BotGroup `protobuf:"bytes,2,rep,name=bot_group,json=botGroup,proto3" json:"bot_group,omitempty"`
    77  }
    78  
    79  func (x *BotsCfg) Reset() {
    80  	*x = BotsCfg{}
    81  	if protoimpl.UnsafeEnabled {
    82  		mi := &file_go_chromium_org_luci_swarming_proto_config_bots_proto_msgTypes[0]
    83  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
    84  		ms.StoreMessageInfo(mi)
    85  	}
    86  }
    87  
    88  func (x *BotsCfg) String() string {
    89  	return protoimpl.X.MessageStringOf(x)
    90  }
    91  
    92  func (*BotsCfg) ProtoMessage() {}
    93  
    94  func (x *BotsCfg) ProtoReflect() protoreflect.Message {
    95  	mi := &file_go_chromium_org_luci_swarming_proto_config_bots_proto_msgTypes[0]
    96  	if protoimpl.UnsafeEnabled && x != nil {
    97  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
    98  		if ms.LoadMessageInfo() == nil {
    99  			ms.StoreMessageInfo(mi)
   100  		}
   101  		return ms
   102  	}
   103  	return mi.MessageOf(x)
   104  }
   105  
   106  // Deprecated: Use BotsCfg.ProtoReflect.Descriptor instead.
   107  func (*BotsCfg) Descriptor() ([]byte, []int) {
   108  	return file_go_chromium_org_luci_swarming_proto_config_bots_proto_rawDescGZIP(), []int{0}
   109  }
   110  
   111  func (x *BotsCfg) GetTrustedDimensions() []string {
   112  	if x != nil {
   113  		return x.TrustedDimensions
   114  	}
   115  	return nil
   116  }
   117  
   118  func (x *BotsCfg) GetBotGroup() []*BotGroup {
   119  	if x != nil {
   120  		return x.BotGroup
   121  	}
   122  	return nil
   123  }
   124  
   125  // A group of bots that share authentication method, dimensions and owners.
   126  //
   127  // Union of bot_id and bot_id_prefix define a set of bots that belong to this
   128  // group. The rest of the fields define properties of this group.
   129  //
   130  // If bot_id and bot_id_prefix are both missing, the group defines all bots that
   131  // didn't fit into other groups. There can be only one such "default" group.
   132  //
   133  // NOTE: Swarming allows 'derivative' bots where multiple bots run on the same
   134  // host machine in some sort of container (such as Docker containers) and SHARE
   135  // A SINGLE CREDENTIAL. These bots have hostnames such as 'hostmachine--001',
   136  // where the "--001" suffix indicates which of the contained bots on
   137  // 'hostmachine' it is. When Swarming checks the bot affiliation for this
   138  // contained machine, it checks ONLY the 'hostmachine' portion. This means that
   139  // if your contained bot is 'vm10-vlan2--001', it would match:
   140  //
   141  //	`bot_id: "vm10-vlan2`
   142  //	`bot_id: "vm{0...100}-vlan2`
   143  //	`bot_id_prefix: "vm10-vlan`
   144  //
   145  // but would NOT match:
   146  //
   147  //	`bot_id: "vm10-vlan2--001`
   148  //	`bot_id_prefix: "vm10-vlan2-`
   149  //	`bot_id_prefix: "vm10-vlan2--`
   150  //
   151  // TODO(vadimsh): Introduce explicit field "use_as_default" instead.
   152  type BotGroup struct {
   153  	state         protoimpl.MessageState
   154  	sizeCache     protoimpl.SizeCache
   155  	unknownFields protoimpl.UnknownFields
   156  
   157  	// Explicit enumeration of bot IDs belonging to this group.
   158  	//
   159  	// It supports subset of bash brace expansion syntax, in particular ranges
   160  	// and lists. For example:
   161  	//   - vm{1..3}-m1 will expand into vm1-m1, vm2-m1 and vm3-m1.
   162  	//   - vm{100,150,200}-m1 will expand into vm100-m1, vm150-m1 and vm200-m1.
   163  	//
   164  	// There can be only one "{...}" section in the string.
   165  	BotId []string `protobuf:"bytes,1,rep,name=bot_id,json=botId,proto3" json:"bot_id,omitempty"`
   166  	// A prefix to match against bot ID string.
   167  	BotIdPrefix []string `protobuf:"bytes,2,rep,name=bot_id_prefix,json=botIdPrefix,proto3" json:"bot_id_prefix,omitempty"`
   168  	// Defines authentication methods for bots from this group.
   169  	//
   170  	// Evaluated sequentially until first match.
   171  	Auth []*BotAuth `protobuf:"bytes,20,rep,name=auth,proto3" json:"auth,omitempty"`
   172  	// Emails of owners of these bots. Optional.
   173  	Owners []string `protobuf:"bytes,21,rep,name=owners,proto3" json:"owners,omitempty"`
   174  	// List of dimensions to assign to these bots.
   175  	//
   176  	// Each dimension is a "<key>:<value>" pair.
   177  	Dimensions []string `protobuf:"bytes,22,rep,name=dimensions,proto3" json:"dimensions,omitempty"`
   178  	// Path to an additional config script to inject into the swarming bot upon
   179  	// handshake.
   180  	//
   181  	// The path is relative to 'scripts/' directory in the service config repo.
   182  	BotConfigScript string `protobuf:"bytes,23,opt,name=bot_config_script,json=botConfigScript,proto3" json:"bot_config_script,omitempty"`
   183  	// The revision of the config script to inject into the swarming bot upon
   184  	// handshake.
   185  	//
   186  	// The field is filled when the bots.cfg gets loaded.
   187  	BotConfigScriptRev string `protobuf:"bytes,26,opt,name=bot_config_script_rev,json=botConfigScriptRev,proto3" json:"bot_config_script_rev,omitempty"`
   188  	// The actual body of the config script to inject into the swarming bot upon
   189  	// handshake (in whatever encoding it happened to be in the config repo).
   190  	//
   191  	// For internal use (unless you fancy writing python scripts as single line
   192  	// escaped text proto string). If present, overrides 'bot_config_script'.
   193  	BotConfigScriptContent []byte `protobuf:"bytes,25,opt,name=bot_config_script_content,json=botConfigScriptContent,proto3" json:"bot_config_script_content,omitempty"`
   194  	// A service account to use on bots when authenticating calls to various
   195  	// system-level services (like Isolate and CIPD), required for correct
   196  	// operation of the bot.
   197  	//
   198  	// Tasks will be able to access this account too, but it is not recommended
   199  	// and should be used extremely rare.
   200  	//
   201  	// If set to a service account email (*@*.iam.gserviceaccount.com), bots will
   202  	// use this account, generating access token through Swarming server. For this
   203  	// to work, the server account (<app-id>@appspot.gserviceaccount.com) must
   204  	// have "serviceAccountActor" IAM role set on the account.
   205  	//
   206  	// If set to a special string "bot", bots will use exact same token they use
   207  	// when authenticating calls to Swarming server itself. This works only if
   208  	// bots use OAuth for authentication (see 'require_service_account' in
   209  	// BotAuth). This mode exists for cases when proliferation of various service
   210  	// accounts is undesirable. Note that in this mode Swarming processes won't be
   211  	// able to request a system account token with some new scopes: they get exact
   212  	// same token as returned by get_authentication_headers bot_config.py hook.
   213  	//
   214  	// If not set, bots will not use authentication at all.
   215  	SystemServiceAccount string `protobuf:"bytes,24,opt,name=system_service_account,json=systemServiceAccount,proto3" json:"system_service_account,omitempty"`
   216  	// The cloud project id where the bot saves its logs.
   217  	// For GCE bots, it is the same cloud project where the bots reside.
   218  	// For non-GCE bots, it is the cloud project where the logs are being sent to.
   219  	LogsCloudProject string                 `protobuf:"bytes,27,opt,name=logs_cloud_project,json=logsCloudProject,proto3" json:"logs_cloud_project,omitempty"`
   220  	RbeMigration     *BotGroup_RBEMigration `protobuf:"bytes,28,opt,name=rbe_migration,json=rbeMigration,proto3" json:"rbe_migration,omitempty"`
   221  }
   222  
   223  func (x *BotGroup) Reset() {
   224  	*x = BotGroup{}
   225  	if protoimpl.UnsafeEnabled {
   226  		mi := &file_go_chromium_org_luci_swarming_proto_config_bots_proto_msgTypes[1]
   227  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   228  		ms.StoreMessageInfo(mi)
   229  	}
   230  }
   231  
   232  func (x *BotGroup) String() string {
   233  	return protoimpl.X.MessageStringOf(x)
   234  }
   235  
   236  func (*BotGroup) ProtoMessage() {}
   237  
   238  func (x *BotGroup) ProtoReflect() protoreflect.Message {
   239  	mi := &file_go_chromium_org_luci_swarming_proto_config_bots_proto_msgTypes[1]
   240  	if protoimpl.UnsafeEnabled && x != nil {
   241  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   242  		if ms.LoadMessageInfo() == nil {
   243  			ms.StoreMessageInfo(mi)
   244  		}
   245  		return ms
   246  	}
   247  	return mi.MessageOf(x)
   248  }
   249  
   250  // Deprecated: Use BotGroup.ProtoReflect.Descriptor instead.
   251  func (*BotGroup) Descriptor() ([]byte, []int) {
   252  	return file_go_chromium_org_luci_swarming_proto_config_bots_proto_rawDescGZIP(), []int{1}
   253  }
   254  
   255  func (x *BotGroup) GetBotId() []string {
   256  	if x != nil {
   257  		return x.BotId
   258  	}
   259  	return nil
   260  }
   261  
   262  func (x *BotGroup) GetBotIdPrefix() []string {
   263  	if x != nil {
   264  		return x.BotIdPrefix
   265  	}
   266  	return nil
   267  }
   268  
   269  func (x *BotGroup) GetAuth() []*BotAuth {
   270  	if x != nil {
   271  		return x.Auth
   272  	}
   273  	return nil
   274  }
   275  
   276  func (x *BotGroup) GetOwners() []string {
   277  	if x != nil {
   278  		return x.Owners
   279  	}
   280  	return nil
   281  }
   282  
   283  func (x *BotGroup) GetDimensions() []string {
   284  	if x != nil {
   285  		return x.Dimensions
   286  	}
   287  	return nil
   288  }
   289  
   290  func (x *BotGroup) GetBotConfigScript() string {
   291  	if x != nil {
   292  		return x.BotConfigScript
   293  	}
   294  	return ""
   295  }
   296  
   297  func (x *BotGroup) GetBotConfigScriptRev() string {
   298  	if x != nil {
   299  		return x.BotConfigScriptRev
   300  	}
   301  	return ""
   302  }
   303  
   304  func (x *BotGroup) GetBotConfigScriptContent() []byte {
   305  	if x != nil {
   306  		return x.BotConfigScriptContent
   307  	}
   308  	return nil
   309  }
   310  
   311  func (x *BotGroup) GetSystemServiceAccount() string {
   312  	if x != nil {
   313  		return x.SystemServiceAccount
   314  	}
   315  	return ""
   316  }
   317  
   318  func (x *BotGroup) GetLogsCloudProject() string {
   319  	if x != nil {
   320  		return x.LogsCloudProject
   321  	}
   322  	return ""
   323  }
   324  
   325  func (x *BotGroup) GetRbeMigration() *BotGroup_RBEMigration {
   326  	if x != nil {
   327  		return x.RbeMigration
   328  	}
   329  	return nil
   330  }
   331  
   332  // Defines what kind of authentication to perform when handling requests from
   333  // bots belonging to some bot group.
   334  //
   335  // The following combinations are valid:
   336  //   - Either one of require_* alone.
   337  //   - IP whitelist alone.
   338  //   - IP + require_luci_machine_token: requires both to pass.
   339  //   - IP + require_service_account: requires both to pass.
   340  //   - IP + require_gce_vm_token: requires both to pass.
   341  //
   342  // Next ID: 6.
   343  type BotAuth struct {
   344  	state         protoimpl.MessageState
   345  	sizeCache     protoimpl.SizeCache
   346  	unknownFields protoimpl.UnknownFields
   347  
   348  	// If true, log an error (but proceed) if this method didn't succeed.
   349  	//
   350  	// This field is totally optional and makes sense only when there are more
   351  	// than one auth method. Affects only logging levels.
   352  	//
   353  	// Doesn't apply to methods that were skipped because some method before them
   354  	// succeeded. Thus methods that have 'log_if_failed' should be in front of
   355  	// BotGroup.auth list.
   356  	//
   357  	// This is useful when migrating from one auth method to another to verify
   358  	// the new method is used in 100% of cases, while still keeping a fallback
   359  	// to an old method.
   360  	LogIfFailed bool `protobuf:"varint,5,opt,name=log_if_failed,json=logIfFailed,proto3" json:"log_if_failed,omitempty"`
   361  	// If true, the bot should provide valid X-Luci-Machine-Token header.
   362  	//
   363  	// The machine FQDN embedded in the token should have hostname equal to the
   364  	// bot_id.
   365  	RequireLuciMachineToken bool `protobuf:"varint,1,opt,name=require_luci_machine_token,json=requireLuciMachineToken,proto3" json:"require_luci_machine_token,omitempty"`
   366  	// If set, the bot should use OAuth access token belonging to any of these
   367  	// service accounts.
   368  	//
   369  	// The token should have "https://www.googleapis.com/auth/userinfo.email"
   370  	// scope.
   371  	RequireServiceAccount []string `protobuf:"bytes,2,rep,name=require_service_account,json=requireServiceAccount,proto3" json:"require_service_account,omitempty"`
   372  	// If set, the bot should provide valid X-Luci-Gce-Vm-Token header.
   373  	//
   374  	// This header should contain JWT with signed VM metadata with the following
   375  	// expectations:
   376  	//   - Audience matches https://[*-dot-]<app>.appspot.com
   377  	//   - google.compute_engine.project_id field matches the value of 'project'.
   378  	//   - instance_name matches bot_id reported by the bot (case insensitive).
   379  	RequireGceVmToken *BotAuth_GCE `protobuf:"bytes,4,opt,name=require_gce_vm_token,json=requireGceVmToken,proto3" json:"require_gce_vm_token,omitempty"`
   380  	// If set, defines an IP whitelist name (in auth_service database) with a set
   381  	// of IPs allowed to be used by the bots in this group.
   382  	//
   383  	// Works in conjunction with other checks, e.g. if require_luci_machine_token
   384  	// is true, both valid X-Luci-Machine-Token and a whitelisted IP are needed to
   385  	// successfully authenticate.
   386  	//
   387  	// Can also be used on its own (when all other fields are empty). In that case
   388  	// the IP whitelist is the primary authentication mechanism. Note that in this
   389  	// case all bots that share the IP whitelist are effectively in a single trust
   390  	// domain (any bot can pretend to be some other bot).
   391  	IpWhitelist string `protobuf:"bytes,3,opt,name=ip_whitelist,json=ipWhitelist,proto3" json:"ip_whitelist,omitempty"`
   392  }
   393  
   394  func (x *BotAuth) Reset() {
   395  	*x = BotAuth{}
   396  	if protoimpl.UnsafeEnabled {
   397  		mi := &file_go_chromium_org_luci_swarming_proto_config_bots_proto_msgTypes[2]
   398  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   399  		ms.StoreMessageInfo(mi)
   400  	}
   401  }
   402  
   403  func (x *BotAuth) String() string {
   404  	return protoimpl.X.MessageStringOf(x)
   405  }
   406  
   407  func (*BotAuth) ProtoMessage() {}
   408  
   409  func (x *BotAuth) ProtoReflect() protoreflect.Message {
   410  	mi := &file_go_chromium_org_luci_swarming_proto_config_bots_proto_msgTypes[2]
   411  	if protoimpl.UnsafeEnabled && x != nil {
   412  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   413  		if ms.LoadMessageInfo() == nil {
   414  			ms.StoreMessageInfo(mi)
   415  		}
   416  		return ms
   417  	}
   418  	return mi.MessageOf(x)
   419  }
   420  
   421  // Deprecated: Use BotAuth.ProtoReflect.Descriptor instead.
   422  func (*BotAuth) Descriptor() ([]byte, []int) {
   423  	return file_go_chromium_org_luci_swarming_proto_config_bots_proto_rawDescGZIP(), []int{2}
   424  }
   425  
   426  func (x *BotAuth) GetLogIfFailed() bool {
   427  	if x != nil {
   428  		return x.LogIfFailed
   429  	}
   430  	return false
   431  }
   432  
   433  func (x *BotAuth) GetRequireLuciMachineToken() bool {
   434  	if x != nil {
   435  		return x.RequireLuciMachineToken
   436  	}
   437  	return false
   438  }
   439  
   440  func (x *BotAuth) GetRequireServiceAccount() []string {
   441  	if x != nil {
   442  		return x.RequireServiceAccount
   443  	}
   444  	return nil
   445  }
   446  
   447  func (x *BotAuth) GetRequireGceVmToken() *BotAuth_GCE {
   448  	if x != nil {
   449  		return x.RequireGceVmToken
   450  	}
   451  	return nil
   452  }
   453  
   454  func (x *BotAuth) GetIpWhitelist() string {
   455  	if x != nil {
   456  		return x.IpWhitelist
   457  	}
   458  	return ""
   459  }
   460  
   461  // Settings controlling migration to the RBE Scheduler.
   462  //
   463  // They are used only if all pools the bot belongs to are associated with an
   464  // RBE instance, and it is the same instance for all pools.
   465  //
   466  // TODO(vadimsh): Remove when no longer used. Replace by BotModeAllocation in
   467  // Pool.RBEMigration.
   468  type BotGroup_RBEMigration struct {
   469  	state         protoimpl.MessageState
   470  	sizeCache     protoimpl.SizeCache
   471  	unknownFields protoimpl.UnknownFields
   472  
   473  	// Approximate percent of bots in this bot group to switch to the RBE mode.
   474  	//
   475  	// A bot is in the RBE mode if `hash(bot_id) % 100 <= rbe_mode_percent`.
   476  	RbeModePercent int32 `protobuf:"varint,1,opt,name=rbe_mode_percent,json=rbeModePercent,proto3" json:"rbe_mode_percent,omitempty"`
   477  	// Bots to put into the RBE mode regardless of `rbe_mode_percent`.
   478  	//
   479  	// Useful to force the RBE mode on a particular bot.
   480  	EnableRbeOn []string `protobuf:"bytes,2,rep,name=enable_rbe_on,json=enableRbeOn,proto3" json:"enable_rbe_on,omitempty"`
   481  	// Bots to exclude from the RBE mode regardless of `rbe_mode_percent`.
   482  	//
   483  	// Useful to exclude problematic bots from the RBE mode.
   484  	DisableRbeOn []string `protobuf:"bytes,3,rep,name=disable_rbe_on,json=disableRbeOn,proto3" json:"disable_rbe_on,omitempty"`
   485  	// If true consume tasks from both Swarming and RBE schedulers at the same
   486  	// time (in an interleaved kind of way).
   487  	//
   488  	// Useful when migrating small bot pools. In this mode task ordering and
   489  	// priority may not be respected (if tasks end up in different schedulers)
   490  	// and there may be higher scheduling delays.
   491  	HybridMode bool `protobuf:"varint,4,opt,name=hybrid_mode,json=hybridMode,proto3" json:"hybrid_mode,omitempty"`
   492  }
   493  
   494  func (x *BotGroup_RBEMigration) Reset() {
   495  	*x = BotGroup_RBEMigration{}
   496  	if protoimpl.UnsafeEnabled {
   497  		mi := &file_go_chromium_org_luci_swarming_proto_config_bots_proto_msgTypes[3]
   498  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   499  		ms.StoreMessageInfo(mi)
   500  	}
   501  }
   502  
   503  func (x *BotGroup_RBEMigration) String() string {
   504  	return protoimpl.X.MessageStringOf(x)
   505  }
   506  
   507  func (*BotGroup_RBEMigration) ProtoMessage() {}
   508  
   509  func (x *BotGroup_RBEMigration) ProtoReflect() protoreflect.Message {
   510  	mi := &file_go_chromium_org_luci_swarming_proto_config_bots_proto_msgTypes[3]
   511  	if protoimpl.UnsafeEnabled && x != nil {
   512  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   513  		if ms.LoadMessageInfo() == nil {
   514  			ms.StoreMessageInfo(mi)
   515  		}
   516  		return ms
   517  	}
   518  	return mi.MessageOf(x)
   519  }
   520  
   521  // Deprecated: Use BotGroup_RBEMigration.ProtoReflect.Descriptor instead.
   522  func (*BotGroup_RBEMigration) Descriptor() ([]byte, []int) {
   523  	return file_go_chromium_org_luci_swarming_proto_config_bots_proto_rawDescGZIP(), []int{1, 0}
   524  }
   525  
   526  func (x *BotGroup_RBEMigration) GetRbeModePercent() int32 {
   527  	if x != nil {
   528  		return x.RbeModePercent
   529  	}
   530  	return 0
   531  }
   532  
   533  func (x *BotGroup_RBEMigration) GetEnableRbeOn() []string {
   534  	if x != nil {
   535  		return x.EnableRbeOn
   536  	}
   537  	return nil
   538  }
   539  
   540  func (x *BotGroup_RBEMigration) GetDisableRbeOn() []string {
   541  	if x != nil {
   542  		return x.DisableRbeOn
   543  	}
   544  	return nil
   545  }
   546  
   547  func (x *BotGroup_RBEMigration) GetHybridMode() bool {
   548  	if x != nil {
   549  		return x.HybridMode
   550  	}
   551  	return false
   552  }
   553  
   554  // See require_gce_vm_token below.
   555  type BotAuth_GCE struct {
   556  	state         protoimpl.MessageState
   557  	sizeCache     protoimpl.SizeCache
   558  	unknownFields protoimpl.UnknownFields
   559  
   560  	Project string `protobuf:"bytes,1,opt,name=project,proto3" json:"project,omitempty"`
   561  }
   562  
   563  func (x *BotAuth_GCE) Reset() {
   564  	*x = BotAuth_GCE{}
   565  	if protoimpl.UnsafeEnabled {
   566  		mi := &file_go_chromium_org_luci_swarming_proto_config_bots_proto_msgTypes[4]
   567  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   568  		ms.StoreMessageInfo(mi)
   569  	}
   570  }
   571  
   572  func (x *BotAuth_GCE) String() string {
   573  	return protoimpl.X.MessageStringOf(x)
   574  }
   575  
   576  func (*BotAuth_GCE) ProtoMessage() {}
   577  
   578  func (x *BotAuth_GCE) ProtoReflect() protoreflect.Message {
   579  	mi := &file_go_chromium_org_luci_swarming_proto_config_bots_proto_msgTypes[4]
   580  	if protoimpl.UnsafeEnabled && x != nil {
   581  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   582  		if ms.LoadMessageInfo() == nil {
   583  			ms.StoreMessageInfo(mi)
   584  		}
   585  		return ms
   586  	}
   587  	return mi.MessageOf(x)
   588  }
   589  
   590  // Deprecated: Use BotAuth_GCE.ProtoReflect.Descriptor instead.
   591  func (*BotAuth_GCE) Descriptor() ([]byte, []int) {
   592  	return file_go_chromium_org_luci_swarming_proto_config_bots_proto_rawDescGZIP(), []int{2, 0}
   593  }
   594  
   595  func (x *BotAuth_GCE) GetProject() string {
   596  	if x != nil {
   597  		return x.Project
   598  	}
   599  	return ""
   600  }
   601  
   602  var File_go_chromium_org_luci_swarming_proto_config_bots_proto protoreflect.FileDescriptor
   603  
   604  var file_go_chromium_org_luci_swarming_proto_config_bots_proto_rawDesc = []byte{
   605  	0x0a, 0x35, 0x67, 0x6f, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x2e, 0x6f, 0x72,
   606  	0x67, 0x2f, 0x6c, 0x75, 0x63, 0x69, 0x2f, 0x73, 0x77, 0x61, 0x72, 0x6d, 0x69, 0x6e, 0x67, 0x2f,
   607  	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x6f, 0x74,
   608  	0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0f, 0x73, 0x77, 0x61, 0x72, 0x6d, 0x69, 0x6e,
   609  	0x67, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x1a, 0x2f, 0x67, 0x6f, 0x2e, 0x63, 0x68, 0x72,
   610  	0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x6c, 0x75, 0x63, 0x69, 0x2f, 0x63,
   611  	0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x6f, 0x70, 0x74, 0x69,
   612  	0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x70, 0x0a, 0x07, 0x42, 0x6f, 0x74,
   613  	0x73, 0x43, 0x66, 0x67, 0x12, 0x2d, 0x0a, 0x12, 0x74, 0x72, 0x75, 0x73, 0x74, 0x65, 0x64, 0x5f,
   614  	0x64, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09,
   615  	0x52, 0x11, 0x74, 0x72, 0x75, 0x73, 0x74, 0x65, 0x64, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69,
   616  	0x6f, 0x6e, 0x73, 0x12, 0x36, 0x0a, 0x09, 0x62, 0x6f, 0x74, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70,
   617  	0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x73, 0x77, 0x61, 0x72, 0x6d, 0x69, 0x6e,
   618  	0x67, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x42, 0x6f, 0x74, 0x47, 0x72, 0x6f, 0x75,
   619  	0x70, 0x52, 0x08, 0x62, 0x6f, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x22, 0xa2, 0x05, 0x0a, 0x08,
   620  	0x42, 0x6f, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x6f, 0x74, 0x5f,
   621  	0x69, 0x64, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x62, 0x6f, 0x74, 0x49, 0x64, 0x12,
   622  	0x22, 0x0a, 0x0d, 0x62, 0x6f, 0x74, 0x5f, 0x69, 0x64, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78,
   623  	0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x62, 0x6f, 0x74, 0x49, 0x64, 0x50, 0x72, 0x65,
   624  	0x66, 0x69, 0x78, 0x12, 0x2c, 0x0a, 0x04, 0x61, 0x75, 0x74, 0x68, 0x18, 0x14, 0x20, 0x03, 0x28,
   625  	0x0b, 0x32, 0x18, 0x2e, 0x73, 0x77, 0x61, 0x72, 0x6d, 0x69, 0x6e, 0x67, 0x2e, 0x63, 0x6f, 0x6e,
   626  	0x66, 0x69, 0x67, 0x2e, 0x42, 0x6f, 0x74, 0x41, 0x75, 0x74, 0x68, 0x52, 0x04, 0x61, 0x75, 0x74,
   627  	0x68, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x73, 0x18, 0x15, 0x20, 0x03, 0x28,
   628  	0x09, 0x52, 0x06, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x64, 0x69, 0x6d,
   629  	0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x16, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x64,
   630  	0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x2a, 0x0a, 0x11, 0x62, 0x6f, 0x74,
   631  	0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x18, 0x17,
   632  	0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x62, 0x6f, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x53,
   633  	0x63, 0x72, 0x69, 0x70, 0x74, 0x12, 0x31, 0x0a, 0x15, 0x62, 0x6f, 0x74, 0x5f, 0x63, 0x6f, 0x6e,
   634  	0x66, 0x69, 0x67, 0x5f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x5f, 0x72, 0x65, 0x76, 0x18, 0x1a,
   635  	0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x62, 0x6f, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x53,
   636  	0x63, 0x72, 0x69, 0x70, 0x74, 0x52, 0x65, 0x76, 0x12, 0x39, 0x0a, 0x19, 0x62, 0x6f, 0x74, 0x5f,
   637  	0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x5f, 0x63, 0x6f,
   638  	0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x19, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x16, 0x62, 0x6f, 0x74,
   639  	0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x43, 0x6f, 0x6e, 0x74,
   640  	0x65, 0x6e, 0x74, 0x12, 0x34, 0x0a, 0x16, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x5f, 0x73, 0x65,
   641  	0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x18, 0x20,
   642  	0x01, 0x28, 0x09, 0x52, 0x14, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x53, 0x65, 0x72, 0x76, 0x69,
   643  	0x63, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x2c, 0x0a, 0x12, 0x6c, 0x6f, 0x67,
   644  	0x73, 0x5f, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18,
   645  	0x1b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x6c, 0x6f, 0x67, 0x73, 0x43, 0x6c, 0x6f, 0x75, 0x64,
   646  	0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x4b, 0x0a, 0x0d, 0x72, 0x62, 0x65, 0x5f, 0x6d,
   647  	0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x1c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26,
   648  	0x2e, 0x73, 0x77, 0x61, 0x72, 0x6d, 0x69, 0x6e, 0x67, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67,
   649  	0x2e, 0x42, 0x6f, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x52, 0x42, 0x45, 0x4d, 0x69, 0x67,
   650  	0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0c, 0x72, 0x62, 0x65, 0x4d, 0x69, 0x67, 0x72, 0x61,
   651  	0x74, 0x69, 0x6f, 0x6e, 0x1a, 0xa3, 0x01, 0x0a, 0x0c, 0x52, 0x42, 0x45, 0x4d, 0x69, 0x67, 0x72,
   652  	0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x28, 0x0a, 0x10, 0x72, 0x62, 0x65, 0x5f, 0x6d, 0x6f, 0x64,
   653  	0x65, 0x5f, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52,
   654  	0x0e, 0x72, 0x62, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x12,
   655  	0x22, 0x0a, 0x0d, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x72, 0x62, 0x65, 0x5f, 0x6f, 0x6e,
   656  	0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x62,
   657  	0x65, 0x4f, 0x6e, 0x12, 0x24, 0x0a, 0x0e, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x72,
   658  	0x62, 0x65, 0x5f, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x64, 0x69, 0x73,
   659  	0x61, 0x62, 0x6c, 0x65, 0x52, 0x62, 0x65, 0x4f, 0x6e, 0x12, 0x1f, 0x0a, 0x0b, 0x68, 0x79, 0x62,
   660  	0x72, 0x69, 0x64, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a,
   661  	0x68, 0x79, 0x62, 0x72, 0x69, 0x64, 0x4d, 0x6f, 0x64, 0x65, 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04,
   662  	0x22, 0xb5, 0x02, 0x0a, 0x07, 0x42, 0x6f, 0x74, 0x41, 0x75, 0x74, 0x68, 0x12, 0x22, 0x0a, 0x0d,
   663  	0x6c, 0x6f, 0x67, 0x5f, 0x69, 0x66, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x18, 0x05, 0x20,
   664  	0x01, 0x28, 0x08, 0x52, 0x0b, 0x6c, 0x6f, 0x67, 0x49, 0x66, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64,
   665  	0x12, 0x3b, 0x0a, 0x1a, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x5f, 0x6c, 0x75, 0x63, 0x69,
   666  	0x5f, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01,
   667  	0x20, 0x01, 0x28, 0x08, 0x52, 0x17, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x4c, 0x75, 0x63,
   668  	0x69, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x36, 0x0a,
   669  	0x17, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65,
   670  	0x5f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x15,
   671  	0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x41, 0x63,
   672  	0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x4d, 0x0a, 0x14, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65,
   673  	0x5f, 0x67, 0x63, 0x65, 0x5f, 0x76, 0x6d, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x04, 0x20,
   674  	0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x73, 0x77, 0x61, 0x72, 0x6d, 0x69, 0x6e, 0x67, 0x2e, 0x63,
   675  	0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x42, 0x6f, 0x74, 0x41, 0x75, 0x74, 0x68, 0x2e, 0x47, 0x43,
   676  	0x45, 0x52, 0x11, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x47, 0x63, 0x65, 0x56, 0x6d, 0x54,
   677  	0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x21, 0x0a, 0x0c, 0x69, 0x70, 0x5f, 0x77, 0x68, 0x69, 0x74, 0x65,
   678  	0x6c, 0x69, 0x73, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x69, 0x70, 0x57, 0x68,
   679  	0x69, 0x74, 0x65, 0x6c, 0x69, 0x73, 0x74, 0x1a, 0x1f, 0x0a, 0x03, 0x47, 0x43, 0x45, 0x12, 0x18,
   680  	0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
   681  	0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x42, 0x75, 0xa2, 0xfe, 0x23, 0x3c, 0x0a, 0x3a,
   682  	0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x6c,
   683  	0x75, 0x63, 0x69, 0x2e, 0x61, 0x70, 0x70, 0x2f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x73, 0x2f,
   684  	0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2f, 0x73, 0x77, 0x61, 0x72, 0x6d, 0x69, 0x6e,
   685  	0x67, 0x3a, 0x62, 0x6f, 0x74, 0x73, 0x2e, 0x63, 0x66, 0x67, 0x5a, 0x33, 0x67, 0x6f, 0x2e, 0x63,
   686  	0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x6c, 0x75, 0x63, 0x69,
   687  	0x2f, 0x73, 0x77, 0x61, 0x72, 0x6d, 0x69, 0x6e, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f,
   688  	0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x3b, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x70, 0x62, 0x62,
   689  	0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
   690  }
   691  
   692  var (
   693  	file_go_chromium_org_luci_swarming_proto_config_bots_proto_rawDescOnce sync.Once
   694  	file_go_chromium_org_luci_swarming_proto_config_bots_proto_rawDescData = file_go_chromium_org_luci_swarming_proto_config_bots_proto_rawDesc
   695  )
   696  
   697  func file_go_chromium_org_luci_swarming_proto_config_bots_proto_rawDescGZIP() []byte {
   698  	file_go_chromium_org_luci_swarming_proto_config_bots_proto_rawDescOnce.Do(func() {
   699  		file_go_chromium_org_luci_swarming_proto_config_bots_proto_rawDescData = protoimpl.X.CompressGZIP(file_go_chromium_org_luci_swarming_proto_config_bots_proto_rawDescData)
   700  	})
   701  	return file_go_chromium_org_luci_swarming_proto_config_bots_proto_rawDescData
   702  }
   703  
   704  var file_go_chromium_org_luci_swarming_proto_config_bots_proto_msgTypes = make([]protoimpl.MessageInfo, 5)
   705  var file_go_chromium_org_luci_swarming_proto_config_bots_proto_goTypes = []interface{}{
   706  	(*BotsCfg)(nil),               // 0: swarming.config.BotsCfg
   707  	(*BotGroup)(nil),              // 1: swarming.config.BotGroup
   708  	(*BotAuth)(nil),               // 2: swarming.config.BotAuth
   709  	(*BotGroup_RBEMigration)(nil), // 3: swarming.config.BotGroup.RBEMigration
   710  	(*BotAuth_GCE)(nil),           // 4: swarming.config.BotAuth.GCE
   711  }
   712  var file_go_chromium_org_luci_swarming_proto_config_bots_proto_depIdxs = []int32{
   713  	1, // 0: swarming.config.BotsCfg.bot_group:type_name -> swarming.config.BotGroup
   714  	2, // 1: swarming.config.BotGroup.auth:type_name -> swarming.config.BotAuth
   715  	3, // 2: swarming.config.BotGroup.rbe_migration:type_name -> swarming.config.BotGroup.RBEMigration
   716  	4, // 3: swarming.config.BotAuth.require_gce_vm_token:type_name -> swarming.config.BotAuth.GCE
   717  	4, // [4:4] is the sub-list for method output_type
   718  	4, // [4:4] is the sub-list for method input_type
   719  	4, // [4:4] is the sub-list for extension type_name
   720  	4, // [4:4] is the sub-list for extension extendee
   721  	0, // [0:4] is the sub-list for field type_name
   722  }
   723  
   724  func init() { file_go_chromium_org_luci_swarming_proto_config_bots_proto_init() }
   725  func file_go_chromium_org_luci_swarming_proto_config_bots_proto_init() {
   726  	if File_go_chromium_org_luci_swarming_proto_config_bots_proto != nil {
   727  		return
   728  	}
   729  	if !protoimpl.UnsafeEnabled {
   730  		file_go_chromium_org_luci_swarming_proto_config_bots_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
   731  			switch v := v.(*BotsCfg); i {
   732  			case 0:
   733  				return &v.state
   734  			case 1:
   735  				return &v.sizeCache
   736  			case 2:
   737  				return &v.unknownFields
   738  			default:
   739  				return nil
   740  			}
   741  		}
   742  		file_go_chromium_org_luci_swarming_proto_config_bots_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
   743  			switch v := v.(*BotGroup); i {
   744  			case 0:
   745  				return &v.state
   746  			case 1:
   747  				return &v.sizeCache
   748  			case 2:
   749  				return &v.unknownFields
   750  			default:
   751  				return nil
   752  			}
   753  		}
   754  		file_go_chromium_org_luci_swarming_proto_config_bots_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
   755  			switch v := v.(*BotAuth); i {
   756  			case 0:
   757  				return &v.state
   758  			case 1:
   759  				return &v.sizeCache
   760  			case 2:
   761  				return &v.unknownFields
   762  			default:
   763  				return nil
   764  			}
   765  		}
   766  		file_go_chromium_org_luci_swarming_proto_config_bots_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
   767  			switch v := v.(*BotGroup_RBEMigration); i {
   768  			case 0:
   769  				return &v.state
   770  			case 1:
   771  				return &v.sizeCache
   772  			case 2:
   773  				return &v.unknownFields
   774  			default:
   775  				return nil
   776  			}
   777  		}
   778  		file_go_chromium_org_luci_swarming_proto_config_bots_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
   779  			switch v := v.(*BotAuth_GCE); i {
   780  			case 0:
   781  				return &v.state
   782  			case 1:
   783  				return &v.sizeCache
   784  			case 2:
   785  				return &v.unknownFields
   786  			default:
   787  				return nil
   788  			}
   789  		}
   790  	}
   791  	type x struct{}
   792  	out := protoimpl.TypeBuilder{
   793  		File: protoimpl.DescBuilder{
   794  			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
   795  			RawDescriptor: file_go_chromium_org_luci_swarming_proto_config_bots_proto_rawDesc,
   796  			NumEnums:      0,
   797  			NumMessages:   5,
   798  			NumExtensions: 0,
   799  			NumServices:   0,
   800  		},
   801  		GoTypes:           file_go_chromium_org_luci_swarming_proto_config_bots_proto_goTypes,
   802  		DependencyIndexes: file_go_chromium_org_luci_swarming_proto_config_bots_proto_depIdxs,
   803  		MessageInfos:      file_go_chromium_org_luci_swarming_proto_config_bots_proto_msgTypes,
   804  	}.Build()
   805  	File_go_chromium_org_luci_swarming_proto_config_bots_proto = out.File
   806  	file_go_chromium_org_luci_swarming_proto_config_bots_proto_rawDesc = nil
   807  	file_go_chromium_org_luci_swarming_proto_config_bots_proto_goTypes = nil
   808  	file_go_chromium_org_luci_swarming_proto_config_bots_proto_depIdxs = nil
   809  }