<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_v1.html">Game Services API</a> . <a href="gameservices_v1.projects.html">projects</a> . <a href="gameservices_v1.projects.locations.html">locations</a> . <a href="gameservices_v1.projects.locations.gameServerDeployments.html">gameServerDeployments</a> . <a href="gameservices_v1.projects.locations.gameServerDeployments.configs.html">configs</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#close">close()</a></code></p>
<p class="firstline">Close httplib2 connections.</p>
<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 server deployment. Game server configs are immutable, and are not applied until referenced in the game server deployment rollout resource.</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 server config is referenced in a game server deployment rollout.</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, filter=None, orderBy=None, pageSize=None, pageToken=None, x__xgafv=None)</a></code></p>
<p class="firstline">Lists game server configs in a given project, location, and game server deployment.</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="close">close()</code>
  <pre>Close httplib2 connections.</pre>
</div>

<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, in the following 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;createTime&quot;: &quot;A String&quot;, # Output only. The creation time.
  &quot;description&quot;: &quot;A String&quot;, # The description of the game server config.
  &quot;fleetConfigs&quot;: [ # FleetConfig contains a list of Agones fleet specs. Only one FleetConfig is allowed.
    { # Fleet configs for Agones.
      &quot;fleetSpec&quot;: &quot;A String&quot;, # Agones fleet spec. Example spec: `https://agones.dev/site/docs/reference/fleet/`.
      &quot;name&quot;: &quot;A String&quot;, # The name of the FleetConfig.
    },
  ],
  &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;name&quot;: &quot;A String&quot;, # The resource name of the game server config, in the following 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;fleetAutoscalerSpec&quot;: &quot;A String&quot;, # Required. Agones fleet autoscaler spec. Example spec: https://agones.dev/site/docs/reference/fleetautoscaler/
      &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;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;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;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;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;updateTime&quot;: &quot;A String&quot;, # Output only. The last-modified time.
}

  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;error&quot;: { # The `Status` type defines a logical error model that is suitable for 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). # The error result of the operation in case of failure or cancellation.
    &quot;code&quot;: 42, # The status code, which should be an enum value of google.rpc.Code.
    &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;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;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.
  },
  &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;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.
  },
}</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, in the following 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;error&quot;: { # The `Status` type defines a logical error model that is suitable for 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). # The error result of the operation in case of failure or cancellation.
    &quot;code&quot;: 42, # The status code, which should be an enum value of google.rpc.Code.
    &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;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;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.
  },
  &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;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.
  },
}</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, in the following 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;createTime&quot;: &quot;A String&quot;, # Output only. The creation time.
  &quot;description&quot;: &quot;A String&quot;, # The description of the game server config.
  &quot;fleetConfigs&quot;: [ # FleetConfig contains a list of Agones fleet specs. Only one FleetConfig is allowed.
    { # Fleet configs for Agones.
      &quot;fleetSpec&quot;: &quot;A String&quot;, # Agones fleet spec. Example spec: `https://agones.dev/site/docs/reference/fleet/`.
      &quot;name&quot;: &quot;A String&quot;, # The name of the FleetConfig.
    },
  ],
  &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;name&quot;: &quot;A String&quot;, # The resource name of the game server config, in the following 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;fleetAutoscalerSpec&quot;: &quot;A String&quot;, # Required. Agones fleet autoscaler spec. Example spec: https://agones.dev/site/docs/reference/fleetautoscaler/
      &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;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;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;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;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;updateTime&quot;: &quot;A String&quot;, # Output only. The last-modified time.
}</pre>
</div>

<div class="method">
    <code class="details" id="list">list(parent, filter=None, orderBy=None, pageSize=None, pageToken=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, in the following form: `projects/{project}/locations/{location}/gameServerDeployments/{deployment}/configs/*`. (required)
  filter: string, Optional. The filter to apply to list results.
  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.
  pageToken: string, Optional. The next_page_token value returned from a previous list request, if any.
  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;createTime&quot;: &quot;A String&quot;, # Output only. The creation time.
      &quot;description&quot;: &quot;A String&quot;, # The description of the game server config.
      &quot;fleetConfigs&quot;: [ # FleetConfig contains a list of Agones fleet specs. Only one FleetConfig is allowed.
        { # Fleet configs for Agones.
          &quot;fleetSpec&quot;: &quot;A String&quot;, # Agones fleet spec. Example spec: `https://agones.dev/site/docs/reference/fleet/`.
          &quot;name&quot;: &quot;A String&quot;, # The name of the FleetConfig.
        },
      ],
      &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;name&quot;: &quot;A String&quot;, # The resource name of the game server config, in the following 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;fleetAutoscalerSpec&quot;: &quot;A String&quot;, # Required. Agones fleet autoscaler spec. Example spec: https://agones.dev/site/docs/reference/fleetautoscaler/
          &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;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;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;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;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;updateTime&quot;: &quot;A String&quot;, # Output only. The last-modified time.
    },
  ],
  &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>