// Copyright 2022 Google LLC All Rights Reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. syntax = "proto3"; package allocation; option go_package = "./allocation"; import "google/api/annotations.proto"; import "protoc-gen-openapiv2/options/annotations.proto"; option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_swagger) = { info: { title: "proto/allocation/allocation.proto"; version: "version not set"; }; schemes: HTTPS; consumes: "application/json"; produces: "application/json"; }; service AllocationService { rpc Allocate(AllocationRequest) returns (AllocationResponse) { option (google.api.http) = { post: "/gameserverallocation" body: "*" }; } } message AllocationRequest { // The k8s namespace that is hosting the targeted fleet of gameservers to be allocated string namespace = 1; // If specified, multi-cluster policies are applied. Otherwise, allocation will happen locally. MultiClusterSetting multiClusterSetting = 2; // Deprecated: Please use gameServerSelectors instead. This field is ignored if the // gameServerSelectors field is set // The required allocation. Defaults to all GameServers. GameServerSelector requiredGameServerSelector = 3 [deprecated = true]; // Deprecated: Please use gameServerSelectors instead. This field is ignored if the // gameServerSelectors field is set // The ordered list of preferred allocations out of the `required` set. // If the first selector is not matched, the selection attempts the second selector, and so on. repeated GameServerSelector preferredGameServerSelectors = 4 [deprecated = true]; // Scheduling strategy. Defaults to "Packed". SchedulingStrategy scheduling = 5; enum SchedulingStrategy { Packed = 0; Distributed = 1; } // Deprecated: Please use metadata instead. This field is ignored if the // metadata field is set MetaPatch metaPatch = 6; // Metadata is optional custom metadata that is added to the game server at // allocation. You can use this to tell the server necessary session data MetaPatch metadata = 7; // Ordered list of GameServer label selectors. // If the first selector is not matched, the selection attempts the second selector, and so on. // This is useful for things like smoke testing of new game servers. // Note: This field can only be set if neither Required or Preferred is set. repeated GameServerSelector gameServerSelectors = 8; } message AllocationResponse { string gameServerName = 2; repeated GameServerStatusPort ports = 3; string address = 4; string nodeName = 5; string source = 6; // The gameserver port info that is allocated. message GameServerStatusPort { string name = 1; int32 port = 2; } } // Specifies settings for multi-cluster allocation. message MultiClusterSetting { // If set to true, multi-cluster allocation is enabled. bool enabled = 1 [(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = {format: "boolean"}]; // Selects multi-cluster allocation policies to apply. If not specified, all multi-cluster allocation policies are to be applied. LabelSelector policySelector = 2; } // MetaPatch is the metadata used to patch the GameServer metadata on allocation message MetaPatch { map labels = 1; map annotations = 2; } // LabelSelector used for finding a GameServer with matching labels. message LabelSelector { // Labels to match. map matchLabels = 1; } // GameServerSelector used for finding a GameServer with matching filters. message GameServerSelector { // Labels to match. map matchLabels = 1; enum GameServerState { READY = 0; ALLOCATED = 1; }; GameServerState gameServerState = 2; PlayerSelector players = 3; } // PlayerSelector is filter for player capacity values. // minAvailable should always be less or equal to maxAvailable. message PlayerSelector { uint64 minAvailable = 1; uint64 maxAvailable = 2; }