rymder 0.8.0

Unofficial agones client SDK
Documentation
// Copyright 2020 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;

import "google/api/annotations.proto";

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;

  // 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;

    // 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<string, string> labels = 1;
    map<string, string> annotations = 2;
}

// LabelSelector used for finding a GameServer with matching labels.
message LabelSelector {
  // Labels to match.
  map<string, string> matchLabels = 1;
}

// GameServerSelector used for finding a GameServer with matching filters.
message GameServerSelector {
  // Labels to match.
  map<string, string> 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;
}