- HTTP request
- Path parameters
- Request body
- Response body
- Authorization scopes
- IAM Permissions
- Try it!
Returns all the details of a specific HaController.
HTTP request
GET https://compute.googleapis.com/compute/v1/projects/{project}/regions/{region}/haControllers/{haController} The URLs use gRPC Transcoding syntax.
Path parameters
| Parameters | |
|---|---|
project |
Project ID for this request. |
region |
Name of the region for this request. |
haController |
Name of the HaController resource to return. |
Request body
The request body must be empty.
Response body
HaController handles failover for a VM Instance.
If successful, the response body contains data with the following structure:
| JSON representation |
|---|
{ "kind": string, "id": string, "creationTimestamp": string, "name": string, "description": string, "selfLink": string, "selfLinkWithId": string, "region": string, "zoneConfigurations": { string: { "reservationAffinity": { "consumeReservationType": enum, "key": string, "values": [ string ] }, "nodeAffinities": [ { "key": string, "operator": enum, "values": [ string ] } ] }, ... }, "instanceName": string, "status": { "primaryZone": string, "primaryInstance": string, "ongoingFailover": boolean, "readyForFailover": boolean, "failoverProgress": { "failoverTrigger": enum, "failoverTriggerTimestamp": string, "failoverCompleteTimestamp": string, "lastFailoverAttempt": { "errors": { "errors": [ { "code": string, "location": string, "message": string, "errorDetails": [ { // The following is a list of mutually exclusive fields. At most one of the // fields will be set in a response: "errorInfo": { "reason": string, "domain": string, "metadatas": { string: string, ... } }, "quotaInfo": { "metricName": string, "limitName": string, "dimensions": { string: string, ... }, "limit": number, "futureLimit": number, "rolloutStatus": enum }, "help": { "links": [ { "description": string, "url": string } ] }, "localizedMessage": { "locale": string, "message": string } // End of mutually exclusive fields. } ] } ] }, "timestamp": string }, "failoverDuration": string }, "lastFailoverInfo": { "failoverTrigger": enum, "failoverTriggerTimestamp": string, "failoverCompleteTimestamp": string, "lastFailoverAttempt": { "errors": { "errors": [ { "code": string, "location": string, "message": string, "errorDetails": [ { // The following is a list of mutually exclusive fields. At most one of the // fields will be set in a response: "errorInfo": { "reason": string, "domain": string, "metadatas": { string: string, ... } }, "quotaInfo": { "metricName": string, "limitName": string, "dimensions": { string: string, ... }, "limit": number, "futureLimit": number, "rolloutStatus": enum }, "help": { "links": [ { "description": string, "url": string } ] }, "localizedMessage": { "locale": string, "message": string } // End of mutually exclusive fields. } ] } ] }, "timestamp": string }, "failoverDuration": string }, "zoneStatus": { string: { "isPrimary": boolean, "isZoneReady": boolean, "lastError": { "errors": { "errors": [ { "code": string, "location": string, "message": string, "errorDetails": [ { "errorInfo": { "reason": string, "domain": string, "metadatas": { string: string, ... } }, "quotaInfo": { "metricName": string, "limitName": string, "dimensions": { string: string, ... }, "limit": number, "futureLimit": number, "rolloutStatus": enum }, "help": { "links": [ { "description": string, "url": string } ] }, "localizedMessage": { "locale": string, "message": string } } ] } ] }, "timestamp": string } }, ... } }, "failoverInitiation": enum, "networkingAutoConfiguration": { "internal": { "stackType": enum, "ipAddress": string, "ipv6Address": string } }, "backendServices": [ string ], "state": enum } |
| Fields | |
|---|---|
kind |
Output only. Type of the resource. Always |
id |
Output only. The unique identifier for the resource. This identifier is defined by the server. |
creationTimestamp |
Output only. Creation timestamp in RFC3339 text format. |
name |
Name of the resource. Provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression |
description |
An optional description of this resource. Provide this property when you create the resource. |
selfLink |
Output only. Server-defined URL for the resource. |
selfLinkWithId |
Output only. Server-defined URL for this resource with the resource id. |
region |
Output only. URL of the region where the resource resides. You must specify this field as part of the HTTP request URL. It is not settable as a field in the request body. |
zoneConfigurations[] |
Map of zone configurations Key: name of the zone Value: ZoneConfiguration Available from 2026-10-01-preview.. |
zoneConfigurations[].reservationAffinity |
Specifies the reservations that the instance can consume from. |
zoneConfigurations[].reservationAffinity.consumeReservationType |
Specifies the type of reservation from which this instance can consume resources: |
zoneConfigurations[].reservationAffinity.key |
Corresponds to the label key of a reservation resource. To target a |
zoneConfigurations[].reservationAffinity.values[] |
Corresponds to the label values of a reservation resource. This can be either a name to a reservation in the same project or "projects/different-project/reservations/some-reservation-name" to target a shared reservation in the same zone but in a different project. |
zoneConfigurations[].nodeAffinities[] |
A set of node affinity configurations. Refer to Configuring node affinity for more information. Overrides reservationAffinity. |
zoneConfigurations[].nodeAffinities[].key |
Corresponds to the label key of Node resource. |
zoneConfigurations[].nodeAffinities[].operator |
Defines the operation of node selection. Valid operators are |
zoneConfigurations[].nodeAffinities[].values[] |
Corresponds to the label values of Node resource. |
instanceName |
Name of the instance that HaController is in charge of. If not specified the HaController's resource name will be used instead. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression |
status |
Output only. Status information for the HaController resource. Available from 2026-10-01-preview.. |
status.primaryZone |
Output only. The name of the zone that is intended to be primary at this moment. Primary zone will be changed at the very beginning of a failover operation. The zone may not be operational in the middle of a failover operation. |
status.primaryInstance |
Output only. The URL to the instance that is intended to be primary at this moment. Primary instance will be changed at the very beginning of a failover operation. |
status.ongoingFailover |
Output only. Indicates if the failover is currently in-progress. |
status.readyForFailover |
Output only. Indicates if the resource is ready for initiating a failover to the secondary zone. |
status.failoverProgress |
Output only. Contains the details of the ongoing failover. This message is not displayed if failover is NOT in progress. |
status.failoverProgress.failoverTrigger |
Output only. Indicates if failover has been triggered automatically or manually. |
status.failoverProgress.failoverTriggerTimestamp |
Output only. Timestamp of the last failover trigger. Uses RFC 3339, where generated output will always be Z-normalized and use 0, 3, 6 or 9 fractional digits. Offsets other than "Z" are also accepted. Examples: |
status.failoverProgress.failoverCompleteTimestamp |
Output only. Timestamp of the failover completion. Filled only if the failover is completed, in lastFailoverInfo. Uses RFC 3339, where generated output will always be Z-normalized and use 0, 3, 6 or 9 fractional digits. Offsets other than "Z" are also accepted. Examples: |
status.failoverProgress.lastFailoverAttempt |
Output only. Contains details of the last failed failover. This field is filled only if the current failover is failing |
status.failoverProgress.lastFailoverAttempt.errors |
Output only. Encountered errors during the last attempt to process failover. |
status.failoverProgress.lastFailoverAttempt.errors.errors[] |
Output only. The array of errors encountered while processing this operation. |
status.failoverProgress.lastFailoverAttempt.errors.errors[].code |
Output only. The error type identifier for this error. |
status.failoverProgress.lastFailoverAttempt.errors.errors[].location |
Output only. Indicates the field in the request that caused the error. This property is optional. |
status.failoverProgress.lastFailoverAttempt.errors.errors[].message |
Output only. An optional, human-readable error message. |
status.failoverProgress.lastFailoverAttempt.errors.errors[].errorDetails[] |
Output only. An optional list of messages that contain the error details. There is a set of defined message types to use for providing details.The syntax depends on the error code. For example, QuotaExceededInfo will have details when the error code is QUOTA_EXCEEDED. |
status.failoverProgress.lastFailoverAttempt.errors.errors[].errorDetails[].errorInfo |
Error information containing structured domain, reason, and metadata. |
status.failoverProgress.lastFailoverAttempt.errors.errors[].errorDetails[].errorInfo.reason |
The reason of the error. This is a constant value that identifies the proximate cause of the error. Error reasons are unique within a particular domain of errors. This should be at most 63 characters and match a regular expression of |
status.failoverProgress.lastFailoverAttempt.errors.errors[].errorDetails[].errorInfo.domain |
The logical grouping to which the "reason" belongs. The error domain is typically the registered service name of the tool or product that generates the error. Example: "pubsub.googleapis.com". If the error is generated by some common infrastructure, the error domain must be a globally unique value that identifies the infrastructure. For Google API infrastructure, the error domain is "googleapis.com". |
status.failoverProgress.lastFailoverAttempt.errors.errors[].errorDetails[].errorInfo.metadatas |
Additional structured details about this error. Keys must match a regular expression of |
status.failoverProgress.lastFailoverAttempt.errors.errors[].errorDetails[].quotaInfo |
Details about quota limits and metrics when a quota is exceeded. |
status.failoverProgress.lastFailoverAttempt.errors.errors[].errorDetails[].quotaInfo.metricName |
The Compute Engine quota metric name. |
status.failoverProgress.lastFailoverAttempt.errors.errors[].errorDetails[].quotaInfo.limitName |
The name of the quota limit. |
status.failoverProgress.lastFailoverAttempt.errors.errors[].errorDetails[].quotaInfo.dimensions |
The map holding related quota dimensions. |
status.failoverProgress.lastFailoverAttempt.errors.errors[].errorDetails[].quotaInfo.limit |
Current effective quota limit. The limit's unit depends on the quota type or metric. |
status.failoverProgress.lastFailoverAttempt.errors.errors[].errorDetails[].quotaInfo.futureLimit |
Future quota limit being rolled out. The limit's unit depends on the quota type or metric. |
status.failoverProgress.lastFailoverAttempt.errors.errors[].errorDetails[].quotaInfo.rolloutStatus |
Rollout status of the future quota limit. |
status.failoverProgress.lastFailoverAttempt.errors.errors[].errorDetails[].help |
Links and information to help the user resolve the error. |
status.failoverProgress.lastFailoverAttempt.errors.errors[].errorDetails[].help.links[] |
URL(s) pointing to additional information on handling the current error. |
status.failoverProgress.lastFailoverAttempt.errors.errors[].errorDetails[].help.links[].description |
Describes what the link offers. |
status.failoverProgress.lastFailoverAttempt.errors.errors[].errorDetails[].help.links[].url |
The URL of the link. |
status.failoverProgress.lastFailoverAttempt.errors.errors[].errorDetails[].localizedMessage |
A localized human-readable error message intended for end users. |
status.failoverProgress.lastFailoverAttempt.errors.errors[].errorDetails[].localizedMessage.locale |
The locale used following the specification defined at https://www.rfc-editor.org/rfc/bcp/bcp47.txt. Examples are: "en-US", "fr-CH", "es-MX" |
status.failoverProgress.lastFailoverAttempt.errors.errors[].errorDetails[].localizedMessage.message |
The localized error message in the above locale. |
status.failoverProgress.lastFailoverAttempt.timestamp |
Output only. Show timestamp only if there is an error. RFC3339 text format. Uses RFC 3339, where generated output will always be Z-normalized and use 0, 3, 6 or 9 fractional digits. Offsets other than "Z" are also accepted. Examples: |
status.failoverProgress.failoverDuration |
Output only. The duration of the last failover. A duration in seconds with up to nine fractional digits, ending with ' |
status.lastFailoverInfo |
Output only. Contains the details of the last successful failover. |
status.lastFailoverInfo.failoverTrigger |
Output only. Indicates if failover has been triggered automatically or manually. |
status.lastFailoverInfo.failoverTriggerTimestamp |
Output only. Timestamp of the last failover trigger. Uses RFC 3339, where generated output will always be Z-normalized and use 0, 3, 6 or 9 fractional digits. Offsets other than "Z" are also accepted. Examples: |
status.lastFailoverInfo.failoverCompleteTimestamp |
Output only. Timestamp of the failover completion. Filled only if the failover is completed, in lastFailoverInfo. Uses RFC 3339, where generated output will always be Z-normalized and use 0, 3, 6 or 9 fractional digits. Offsets other than "Z" are also accepted. Examples: |
status.lastFailoverInfo.lastFailoverAttempt |
Output only. Contains details of the last failed failover. This field is filled only if the current failover is failing |
status.lastFailoverInfo.lastFailoverAttempt.errors |
Output only. Encountered errors during the last attempt to process failover. |
status.lastFailoverInfo.lastFailoverAttempt.errors.errors[] |
Output only. The array of errors encountered while processing this operation. |
status.lastFailoverInfo.lastFailoverAttempt.errors.errors[].code |
Output only. The error type identifier for this error. |
status.lastFailoverInfo.lastFailoverAttempt.errors.errors[].location |
Output only. Indicates the field in the request that caused the error. This property is optional. |
status.lastFailoverInfo.lastFailoverAttempt.errors.errors[].message |
Output only. An optional, human-readable error message. |
status.lastFailoverInfo.lastFailoverAttempt.errors.errors[].errorDetails[] |
Output only. An optional list of messages that contain the error details. There is a set of defined message types to use for providing details.The syntax depends on the error code. For example, QuotaExceededInfo will have details when the error code is QUOTA_EXCEEDED. |
status.lastFailoverInfo.lastFailoverAttempt.errors.errors[].errorDetails[].errorInfo |
Error information containing structured domain, reason, and metadata. |
status.lastFailoverInfo.lastFailoverAttempt.errors.errors[].errorDetails[].errorInfo.reason |
The reason of the error. This is a constant value that identifies the proximate cause of the error. Error reasons are unique within a particular domain of errors. This should be at most 63 characters and match a regular expression of |
status.lastFailoverInfo.lastFailoverAttempt.errors.errors[].errorDetails[].errorInfo.domain |
The logical grouping to which the "reason" belongs. The error domain is typically the registered service name of the tool or product that generates the error. Example: "pubsub.googleapis.com". If the error is generated by some common infrastructure, the error domain must be a globally unique value that identifies the infrastructure. For Google API infrastructure, the error domain is "googleapis.com". |
status.lastFailoverInfo.lastFailoverAttempt.errors.errors[].errorDetails[].errorInfo.metadatas |
Additional structured details about this error. Keys must match a regular expression of |
status.lastFailoverInfo.lastFailoverAttempt.errors.errors[].errorDetails[].quotaInfo |
Details about quota limits and metrics when a quota is exceeded. |
status.lastFailoverInfo.lastFailoverAttempt.errors.errors[].errorDetails[].quotaInfo.metricName |
The Compute Engine quota metric name. |
status.lastFailoverInfo.lastFailoverAttempt.errors.errors[].errorDetails[].quotaInfo.limitName |
The name of the quota limit. |
status.lastFailoverInfo.lastFailoverAttempt.errors.errors[].errorDetails[].quotaInfo.dimensions |
The map holding related quota dimensions. |
status.lastFailoverInfo.lastFailoverAttempt.errors.errors[].errorDetails[].quotaInfo.limit |
Current effective quota limit. The limit's unit depends on the quota type or metric. |
status.lastFailoverInfo.lastFailoverAttempt.errors.errors[].errorDetails[].quotaInfo.futureLimit |
Future quota limit being rolled out. The limit's unit depends on the quota type or metric. |
status.lastFailoverInfo.lastFailoverAttempt.errors.errors[].errorDetails[].quotaInfo.rolloutStatus |
Rollout status of the future quota limit. |
status.lastFailoverInfo.lastFailoverAttempt.errors.errors[].errorDetails[].help |
Links and information to help the user resolve the error. |
status.lastFailoverInfo.lastFailoverAttempt.errors.errors[].errorDetails[].help.links[] |
URL(s) pointing to additional information on handling the current error. |
status.lastFailoverInfo.lastFailoverAttempt.errors.errors[].errorDetails[].help.links[].description |
Describes what the link offers. |
status.lastFailoverInfo.lastFailoverAttempt.errors.errors[].errorDetails[].help.links[].url |
The URL of the link. |
status.lastFailoverInfo.lastFailoverAttempt.errors.errors[].errorDetails[].localizedMessage |
A localized human-readable error message intended for end users. |
status.lastFailoverInfo.lastFailoverAttempt.errors.errors[].errorDetails[].localizedMessage.locale |
The locale used following the specification defined at https://www.rfc-editor.org/rfc/bcp/bcp47.txt. Examples are: "en-US", "fr-CH", "es-MX" |
status.lastFailoverInfo.lastFailoverAttempt.errors.errors[].errorDetails[].localizedMessage.message |
The localized error message in the above locale. |
status.lastFailoverInfo.lastFailoverAttempt.timestamp |
Output only. Show timestamp only if there is an error. RFC3339 text format. Uses RFC 3339, where generated output will always be Z-normalized and use 0, 3, 6 or 9 fractional digits. Offsets other than "Z" are also accepted. Examples: |
status.lastFailoverInfo.failoverDuration |
Output only. The duration of the last failover. A duration in seconds with up to nine fractional digits, ending with ' |
status.zoneStatus[] |
Output only. Map of zone statuses. Key: name of the zone Value: ZoneStatus |
status.zoneStatus[].isPrimary |
Output only. Indicates if the zone is primary at this moment. |
status.zoneStatus[].isZoneReady |
Output only. Indicates if the zone is ready for initiating a failover. |
status.zoneStatus[].lastError |
Output only. This field is filled only if the current operation is failing. |
status.zoneStatus[].lastError.errors |
Output only. Encountered errors. |
status.zoneStatus[].lastError.errors.errors[] |
Output only. The array of errors encountered while processing this operation. |
status.zoneStatus[].lastError.errors.errors[].code |
Output only. The error type identifier for this error. |
status.zoneStatus[].lastError.errors.errors[].location |
Output only. Indicates the field in the request that caused the error. This property is optional. |
status.zoneStatus[].lastError.errors.errors[].message |
Output only. An optional, human-readable error message. |
status.zoneStatus[].lastError.errors.errors[].errorDetails[] |
Output only. An optional list of messages that contain the error details. There is a set of defined message types to use for providing details.The syntax depends on the error code. For example, QuotaExceededInfo will have details when the error code is QUOTA_EXCEEDED. |
status.zoneStatus[].lastError.errors.errors[].errorDetails[].errorInfo |
Error information containing structured domain, reason, and metadata. |
status.zoneStatus[].lastError.errors.errors[].errorDetails[].errorInfo.reason |
The reason of the error. This is a constant value that identifies the proximate cause of the error. Error reasons are unique within a particular domain of errors. This should be at most 63 characters and match a regular expression of |
status.zoneStatus[].lastError.errors.errors[].errorDetails[].errorInfo.domain |
The logical grouping to which the "reason" belongs. The error domain is typically the registered service name of the tool or product that generates the error. Example: "pubsub.googleapis.com". If the error is generated by some common infrastructure, the error domain must be a globally unique value that identifies the infrastructure. For Google API infrastructure, the error domain is "googleapis.com". |
status.zoneStatus[].lastError.errors.errors[].errorDetails[].errorInfo.metadatas |
Additional structured details about this error. Keys must match a regular expression of |
status.zoneStatus[].lastError.errors.errors[].errorDetails[].quotaInfo |
Details about quota limits and metrics when a quota is exceeded. |
status.zoneStatus[].lastError.errors.errors[].errorDetails[].quotaInfo.metricName |
The Compute Engine quota metric name. |
status.zoneStatus[].lastError.errors.errors[].errorDetails[].quotaInfo.limitName |
The name of the quota limit. |
status.zoneStatus[].lastError.errors.errors[].errorDetails[].quotaInfo.dimensions |
The map holding related quota dimensions. |
status.zoneStatus[].lastError.errors.errors[].errorDetails[].quotaInfo.limit |
Current effective quota limit. The limit's unit depends on the quota type or metric. |
status.zoneStatus[].lastError.errors.errors[].errorDetails[].quotaInfo.futureLimit |
Future quota limit being rolled out. The limit's unit depends on the quota type or metric. |
status.zoneStatus[].lastError.errors.errors[].errorDetails[].quotaInfo.rolloutStatus |
Rollout status of the future quota limit. |
status.zoneStatus[].lastError.errors.errors[].errorDetails[].help |
Links and information to help the user resolve the error. |
status.zoneStatus[].lastError.errors.errors[].errorDetails[].help.links[] |
URL(s) pointing to additional information on handling the current error. |
status.zoneStatus[].lastError.errors.errors[].errorDetails[].help.links[].description |
Describes what the link offers. |
status.zoneStatus[].lastError.errors.errors[].errorDetails[].help.links[].url |
The URL of the link. |
status.zoneStatus[].lastError.errors.errors[].errorDetails[].localizedMessage |
A localized human-readable error message intended for end users. |
status.zoneStatus[].lastError.errors.errors[].errorDetails[].localizedMessage.locale |
The locale used following the specification defined at https://www.rfc-editor.org/rfc/bcp/bcp47.txt. Examples are: "en-US", "fr-CH", "es-MX" |
status.zoneStatus[].lastError.errors.errors[].errorDetails[].localizedMessage.message |
The localized error message in the above locale. |
status.zoneStatus[].lastError.timestamp |
Output only. Show timestamp only if there is an error. RFC3339 text format. Uses RFC 3339, where generated output will always be Z-normalized and use 0, 3, 6 or 9 fractional digits. Offsets other than "Z" are also accepted. Examples: |
failoverInitiation |
Indicates how failover should be initiated. Available from 2026-10-01-preview.. |
networkingAutoConfiguration |
Basic networking configuration. Required backend services and forwarding rules will be automatically created with default parameters. Available from 2026-10-01-preview.. |
networkingAutoConfiguration.internal |
Internal networking configuration |
networkingAutoConfiguration.internal.stackType |
Determine which IP addresses to automatically create. Field and option naming consistent with NetworkInterface configuration on Instances. |
networkingAutoConfiguration.internal.ipAddress |
Optional. IP addresses will be automatically allocated according to StackType if not provided. |
networkingAutoConfiguration.internal.ipv6Address |
|
backendServices[] |
Advanced configuration option. If specified, these Backend Services need to be pre-created. Currently, only one backend service can be specified, and it must be L4 Internal Load Balancer (ILB). Available from 2026-10-01-preview.. |
state |
Output only. The current state of the HA Controller. Available from 2026-10-01-preview.. |
Authorization scopes
Requires one of the following OAuth scopes:
https://www.googleapis.com/auth/compute.readonlyhttps://www.googleapis.com/auth/computehttps://www.googleapis.com/auth/cloud-platform
For more information, see the Authentication Overview.
IAM Permissions
In addition to any permissions specified on the fields above, authorization requires one or more of the following IAM permissions:
compute.haControllers.get
To find predefined roles that contain those permissions, see Compute Engine IAM Roles.