<html><body>
<style>

body, h1, h2, h3, div, span, p, pre, a {
  margin: 0;
  padding: 0;
  border: 0;
  font-weight: inherit;
  font-style: inherit;
  font-size: 100%;
  font-family: inherit;
  vertical-align: baseline;
}

body {
  font-size: 13px;
  padding: 1em;
}

h1 {
  font-size: 26px;
  margin-bottom: 1em;
}

h2 {
  font-size: 24px;
  margin-bottom: 1em;
}

h3 {
  font-size: 20px;
  margin-bottom: 1em;
  margin-top: 1em;
}

pre, code {
  line-height: 1.5;
  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
}

pre {
  margin-top: 0.5em;
}

h1, h2, h3, p {
  font-family: Arial, sans serif;
}

h1, h2, h3 {
  border-bottom: solid #CCC 1px;
}

.toc_element {
  margin-top: 0.5em;
}

.firstline {
  margin-left: 2 em;
}

.method  {
  margin-top: 1em;
  border: solid 1px #CCC;
  padding: 1em;
  background: #EEE;
}

.details {
  font-weight: bold;
  font-size: 14px;
}

</style>

<h1><a href="gameservices_v1beta.html">Game Services API</a> . <a href="gameservices_v1beta.projects.html">projects</a> . <a href="gameservices_v1beta.projects.locations.html">locations</a> . <a href="gameservices_v1beta.projects.locations.gameServerDeployments.html">gameServerDeployments</a> . <a href="gameservices_v1beta.projects.locations.gameServerDeployments.configs.html">configs</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#create">create(parent, body=None, configId=None, x__xgafv=None)</a></code></p>
<p class="firstline">Creates a new game server config in a given project, location, and game</p>
<p class="toc_element">
  <code><a href="#delete">delete(name, x__xgafv=None)</a></code></p>
<p class="firstline">Deletes a single game server config. The deletion will fail if the game</p>
<p class="toc_element">
  <code><a href="#get">get(name, x__xgafv=None)</a></code></p>
<p class="firstline">Gets details of a single game server config.</p>
<p class="toc_element">
  <code><a href="#list">list(parent, pageToken=None, orderBy=None, pageSize=None, filter=None, x__xgafv=None)</a></code></p>
<p class="firstline">Lists game server configs in a given project, location, and game server</p>
<p class="toc_element">
  <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
<p class="firstline">Retrieves the next page of results.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="create">create(parent, body=None, configId=None, x__xgafv=None)</code>
  <pre>Creates a new game server config in a given project, location, and game
server deployment. Game server configs are immutable, and are not applied
until referenced in the game server deployment rollout resource.

Args:
  parent: string, Required. The parent resource name. Uses the form:

`projects/{project}/locations/{location}/gameServerDeployments/{deployment}/`. (required)
  body: object, The request body.
    The object takes the form of:

{ # A game server config resource.
  &quot;fleetConfigs&quot;: [ # FleetConfig contains a list of Agones fleet specs. Only one FleetConfig
      # is allowed.
    { # Fleet configs for Agones.
      &quot;name&quot;: &quot;A String&quot;, # The name of the FleetConfig.
      &quot;fleetSpec&quot;: &quot;A String&quot;, # Agones fleet spec. Example spec:
          # `https://agones.dev/site/docs/reference/fleet/`.
    },
  ],
  &quot;updateTime&quot;: &quot;A String&quot;, # Output only. The last-modified time.
  &quot;name&quot;: &quot;A String&quot;, # The resource name of the game server config. Uses the form:
      # 
      # `projects/{project}/locations/{location}/gameServerDeployments/{deployment}/configs/{config}`.
      # For example,
      # 
      # `projects/my-project/locations/global/gameServerDeployments/my-game/configs/my-config`.
  &quot;scalingConfigs&quot;: [ # The autoscaling settings.
    { # Autoscaling config for an Agones fleet.
      &quot;name&quot;: &quot;A String&quot;, # Required. The name of the Scaling Config
      &quot;schedules&quot;: [ # The schedules to which this Scaling Config applies.
        { # The schedule of a recurring or one time event. The event&#x27;s time span is
            # specified by start_time and end_time. If the scheduled event&#x27;s timespan is
            # larger than the cron_spec + cron_job_duration, the event will be recurring.
            # If only cron_spec + cron_job_duration are specified, the event is effective
            # starting at the local time specified by cron_spec, and is recurring.
            #
            #   start_time|-------[cron job]-------[cron job]-------[cron job]---|end_time
            #   cron job: cron spec start time + duration
          &quot;endTime&quot;: &quot;A String&quot;, # The end time of the event.
          &quot;startTime&quot;: &quot;A String&quot;, # The start time of the event.
          &quot;cronSpec&quot;: &quot;A String&quot;, # The cron definition of the scheduled event. See
              # https://en.wikipedia.org/wiki/Cron. Cron spec specifies the local time as
              # defined by the realm.
          &quot;cronJobDuration&quot;: &quot;A String&quot;, # The duration for the cron job event. The duration of the event is effective
              # after the cron job&#x27;s start time.
        },
      ],
      &quot;fleetAutoscalerSpec&quot;: &quot;A String&quot;, # Required. Agones fleet autoscaler spec. Example spec:
          # https://agones.dev/site/docs/reference/fleetautoscaler/
      &quot;selectors&quot;: [ # Labels used to identify the game server clusters to which this Agones
          # scaling config applies. A game server cluster is subject to this Agones
          # scaling config if its labels match any of the selector entries.
        { # The label selector, used to group labels on the resources.
          &quot;labels&quot;: { # Resource labels for this selector.
            &quot;a_key&quot;: &quot;A String&quot;,
          },
        },
      ],
    },
  ],
  &quot;description&quot;: &quot;A String&quot;, # The description of the game server config.
  &quot;createTime&quot;: &quot;A String&quot;, # Output only. The creation time.
  &quot;labels&quot;: { # The labels associated with this game server config. Each label is a
      # key-value pair.
    &quot;a_key&quot;: &quot;A String&quot;,
  },
}

  configId: string, Required. The ID of the game server config resource to be created.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # This resource represents a long-running operation that is the result of a
      # network API call.
    &quot;done&quot;: True or False, # If the value is `false`, it means the operation is still in progress.
        # If `true`, the operation is completed, and either `error` or `response` is
        # available.
    &quot;response&quot;: { # The normal response of the operation in case of success.  If the original
        # method returns no data on success, such as `Delete`, the response is
        # `google.protobuf.Empty`.  If the original method is standard
        # `Get`/`Create`/`Update`, the response should be the resource.  For other
        # methods, the response should have the type `XxxResponse`, where `Xxx`
        # is the original method name.  For example, if the original method name
        # is `TakeSnapshot()`, the inferred response type is
        # `TakeSnapshotResponse`.
      &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
    },
    &quot;name&quot;: &quot;A String&quot;, # The server-assigned name, which is only unique within the same service that
        # originally returns it. If you use the default HTTP mapping, the
        # `name` should be a resource name ending with `operations/{unique_id}`.
    &quot;error&quot;: { # The `Status` type defines a logical error model that is suitable for # The error result of the operation in case of failure or cancellation.
        # different programming environments, including REST APIs and RPC APIs. It is
        # used by [gRPC](https://github.com/grpc). Each `Status` message contains
        # three pieces of data: error code, error message, and error details.
        #
        # You can find out more about this error model and how to work with it in the
        # [API Design Guide](https://cloud.google.com/apis/design/errors).
      &quot;code&quot;: 42, # The status code, which should be an enum value of google.rpc.Code.
      &quot;message&quot;: &quot;A String&quot;, # A developer-facing error message, which should be in English. Any
          # user-facing error message should be localized and sent in the
          # google.rpc.Status.details field, or localized by the client.
      &quot;details&quot;: [ # A list of messages that carry the error details.  There is a common set of
          # message types for APIs to use.
        {
          &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
        },
      ],
    },
    &quot;metadata&quot;: { # Service-specific metadata associated with the operation.  It typically
        # contains progress information and common metadata such as create time.
        # Some services might not provide such metadata.  Any method that returns a
        # long-running operation should document the metadata type, if any.
      &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
    },
  }</pre>
</div>

<div class="method">
    <code class="details" id="delete">delete(name, x__xgafv=None)</code>
  <pre>Deletes a single game server config. The deletion will fail if the game
server config is referenced in a game server deployment rollout.

Args:
  name: string, Required. The name of the game server config to delete. Uses the form:

`projects/{project}/locations/{location}/gameServerDeployments/{deployment}/configs/{config}`. (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # This resource represents a long-running operation that is the result of a
      # network API call.
    &quot;done&quot;: True or False, # If the value is `false`, it means the operation is still in progress.
        # If `true`, the operation is completed, and either `error` or `response` is
        # available.
    &quot;response&quot;: { # The normal response of the operation in case of success.  If the original
        # method returns no data on success, such as `Delete`, the response is
        # `google.protobuf.Empty`.  If the original method is standard
        # `Get`/`Create`/`Update`, the response should be the resource.  For other
        # methods, the response should have the type `XxxResponse`, where `Xxx`
        # is the original method name.  For example, if the original method name
        # is `TakeSnapshot()`, the inferred response type is
        # `TakeSnapshotResponse`.
      &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
    },
    &quot;name&quot;: &quot;A String&quot;, # The server-assigned name, which is only unique within the same service that
        # originally returns it. If you use the default HTTP mapping, the
        # `name` should be a resource name ending with `operations/{unique_id}`.
    &quot;error&quot;: { # The `Status` type defines a logical error model that is suitable for # The error result of the operation in case of failure or cancellation.
        # different programming environments, including REST APIs and RPC APIs. It is
        # used by [gRPC](https://github.com/grpc). Each `Status` message contains
        # three pieces of data: error code, error message, and error details.
        #
        # You can find out more about this error model and how to work with it in the
        # [API Design Guide](https://cloud.google.com/apis/design/errors).
      &quot;code&quot;: 42, # The status code, which should be an enum value of google.rpc.Code.
      &quot;message&quot;: &quot;A String&quot;, # A developer-facing error message, which should be in English. Any
          # user-facing error message should be localized and sent in the
          # google.rpc.Status.details field, or localized by the client.
      &quot;details&quot;: [ # A list of messages that carry the error details.  There is a common set of
          # message types for APIs to use.
        {
          &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
        },
      ],
    },
    &quot;metadata&quot;: { # Service-specific metadata associated with the operation.  It typically
        # contains progress information and common metadata such as create time.
        # Some services might not provide such metadata.  Any method that returns a
        # long-running operation should document the metadata type, if any.
      &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
    },
  }</pre>
</div>

<div class="method">
    <code class="details" id="get">get(name, x__xgafv=None)</code>
  <pre>Gets details of a single game server config.

Args:
  name: string, Required. The name of the game server config to retrieve. Uses the form:

`projects/{project}/locations/{location}/gameServerDeployments/{deployment}/configs/{config}`. (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A game server config resource.
    &quot;fleetConfigs&quot;: [ # FleetConfig contains a list of Agones fleet specs. Only one FleetConfig
        # is allowed.
      { # Fleet configs for Agones.
        &quot;name&quot;: &quot;A String&quot;, # The name of the FleetConfig.
        &quot;fleetSpec&quot;: &quot;A String&quot;, # Agones fleet spec. Example spec:
            # `https://agones.dev/site/docs/reference/fleet/`.
      },
    ],
    &quot;updateTime&quot;: &quot;A String&quot;, # Output only. The last-modified time.
    &quot;name&quot;: &quot;A String&quot;, # The resource name of the game server config. Uses the form:
        #
        # `projects/{project}/locations/{location}/gameServerDeployments/{deployment}/configs/{config}`.
        # For example,
        #
        # `projects/my-project/locations/global/gameServerDeployments/my-game/configs/my-config`.
    &quot;scalingConfigs&quot;: [ # The autoscaling settings.
      { # Autoscaling config for an Agones fleet.
        &quot;name&quot;: &quot;A String&quot;, # Required. The name of the Scaling Config
        &quot;schedules&quot;: [ # The schedules to which this Scaling Config applies.
          { # The schedule of a recurring or one time event. The event&#x27;s time span is
              # specified by start_time and end_time. If the scheduled event&#x27;s timespan is
              # larger than the cron_spec + cron_job_duration, the event will be recurring.
              # If only cron_spec + cron_job_duration are specified, the event is effective
              # starting at the local time specified by cron_spec, and is recurring.
              #
              #   start_time|-------[cron job]-------[cron job]-------[cron job]---|end_time
              #   cron job: cron spec start time + duration
            &quot;endTime&quot;: &quot;A String&quot;, # The end time of the event.
            &quot;startTime&quot;: &quot;A String&quot;, # The start time of the event.
            &quot;cronSpec&quot;: &quot;A String&quot;, # The cron definition of the scheduled event. See
                # https://en.wikipedia.org/wiki/Cron. Cron spec specifies the local time as
                # defined by the realm.
            &quot;cronJobDuration&quot;: &quot;A String&quot;, # The duration for the cron job event. The duration of the event is effective
                # after the cron job&#x27;s start time.
          },
        ],
        &quot;fleetAutoscalerSpec&quot;: &quot;A String&quot;, # Required. Agones fleet autoscaler spec. Example spec:
            # https://agones.dev/site/docs/reference/fleetautoscaler/
        &quot;selectors&quot;: [ # Labels used to identify the game server clusters to which this Agones
            # scaling config applies. A game server cluster is subject to this Agones
            # scaling config if its labels match any of the selector entries.
          { # The label selector, used to group labels on the resources.
            &quot;labels&quot;: { # Resource labels for this selector.
              &quot;a_key&quot;: &quot;A String&quot;,
            },
          },
        ],
      },
    ],
    &quot;description&quot;: &quot;A String&quot;, # The description of the game server config.
    &quot;createTime&quot;: &quot;A String&quot;, # Output only. The creation time.
    &quot;labels&quot;: { # The labels associated with this game server config. Each label is a
        # key-value pair.
      &quot;a_key&quot;: &quot;A String&quot;,
    },
  }</pre>
</div>

<div class="method">
    <code class="details" id="list">list(parent, pageToken=None, orderBy=None, pageSize=None, filter=None, x__xgafv=None)</code>
  <pre>Lists game server configs in a given project, location, and game server
deployment.

Args:
  parent: string, Required. The parent resource name. Uses the form:

`projects/{project}/locations/{location}/gameServerDeployments/{deployment}/configs/*`. (required)
  pageToken: string, Optional. The next_page_token value returned from a previous list request, if any.
  orderBy: string, Optional. Specifies the ordering of results following syntax at
https://cloud.google.com/apis/design/design_patterns#sorting_order.
  pageSize: integer, Optional. The maximum number of items to return.  If unspecified, server
will pick an appropriate default. Server may return fewer items than
requested. A caller should only rely on response&#x27;s
next_page_token to
determine if there are more GameServerConfigs left to be queried.
  filter: string, Optional. The filter to apply to list results.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Response message for GameServerConfigsService.ListGameServerConfigs.
    &quot;gameServerConfigs&quot;: [ # The list of game server configs.
      { # A game server config resource.
        &quot;fleetConfigs&quot;: [ # FleetConfig contains a list of Agones fleet specs. Only one FleetConfig
            # is allowed.
          { # Fleet configs for Agones.
            &quot;name&quot;: &quot;A String&quot;, # The name of the FleetConfig.
            &quot;fleetSpec&quot;: &quot;A String&quot;, # Agones fleet spec. Example spec:
                # `https://agones.dev/site/docs/reference/fleet/`.
          },
        ],
        &quot;updateTime&quot;: &quot;A String&quot;, # Output only. The last-modified time.
        &quot;name&quot;: &quot;A String&quot;, # The resource name of the game server config. Uses the form:
            #
            # `projects/{project}/locations/{location}/gameServerDeployments/{deployment}/configs/{config}`.
            # For example,
            #
            # `projects/my-project/locations/global/gameServerDeployments/my-game/configs/my-config`.
        &quot;scalingConfigs&quot;: [ # The autoscaling settings.
          { # Autoscaling config for an Agones fleet.
            &quot;name&quot;: &quot;A String&quot;, # Required. The name of the Scaling Config
            &quot;schedules&quot;: [ # The schedules to which this Scaling Config applies.
              { # The schedule of a recurring or one time event. The event&#x27;s time span is
                  # specified by start_time and end_time. If the scheduled event&#x27;s timespan is
                  # larger than the cron_spec + cron_job_duration, the event will be recurring.
                  # If only cron_spec + cron_job_duration are specified, the event is effective
                  # starting at the local time specified by cron_spec, and is recurring.
                  #
                  #   start_time|-------[cron job]-------[cron job]-------[cron job]---|end_time
                  #   cron job: cron spec start time + duration
                &quot;endTime&quot;: &quot;A String&quot;, # The end time of the event.
                &quot;startTime&quot;: &quot;A String&quot;, # The start time of the event.
                &quot;cronSpec&quot;: &quot;A String&quot;, # The cron definition of the scheduled event. See
                    # https://en.wikipedia.org/wiki/Cron. Cron spec specifies the local time as
                    # defined by the realm.
                &quot;cronJobDuration&quot;: &quot;A String&quot;, # The duration for the cron job event. The duration of the event is effective
                    # after the cron job&#x27;s start time.
              },
            ],
            &quot;fleetAutoscalerSpec&quot;: &quot;A String&quot;, # Required. Agones fleet autoscaler spec. Example spec:
                # https://agones.dev/site/docs/reference/fleetautoscaler/
            &quot;selectors&quot;: [ # Labels used to identify the game server clusters to which this Agones
                # scaling config applies. A game server cluster is subject to this Agones
                # scaling config if its labels match any of the selector entries.
              { # The label selector, used to group labels on the resources.
                &quot;labels&quot;: { # Resource labels for this selector.
                  &quot;a_key&quot;: &quot;A String&quot;,
                },
              },
            ],
          },
        ],
        &quot;description&quot;: &quot;A String&quot;, # The description of the game server config.
        &quot;createTime&quot;: &quot;A String&quot;, # Output only. The creation time.
        &quot;labels&quot;: { # The labels associated with this game server config. Each label is a
            # key-value pair.
          &quot;a_key&quot;: &quot;A String&quot;,
        },
      },
    ],
    &quot;nextPageToken&quot;: &quot;A String&quot;, # Token to retrieve the next page of results, or empty if there are no more
        # results in the list.
    &quot;unreachable&quot;: [ # List of locations that could not be reached.
      &quot;A String&quot;,
    ],
  }</pre>
</div>

<div class="method">
    <code class="details" id="list_next">list_next(previous_request, previous_response)</code>
  <pre>Retrieves the next page of results.

Args:
  previous_request: The request for the previous page. (required)
  previous_response: The response from the request for the previous page. (required)

Returns:
  A request object that you can call &#x27;execute()&#x27; on to request the next
  page. Returns None if there are no more items in the collection.
    </pre>
</div>

</body></html>