API 相当于 Gcloud 计算实例组托管列表

API equivalent of Gcloud compute instance-groups managed list

我有一个来自命令行的脚本 运行:

gcloud  compute instance-groups managed list

输出

[
  {
    "autoscaled": "no",
    "baseInstanceName": "name",
    "creationTimestamp": "2017-04-14T14:24:19.048-07:00",
    "currentActions": {
      "abandoning": 0,
      "creating": 0,
      "creatingWithoutRetries": 0,
      "deleting": 0,
      "none": 1,
      "recreating": 0,
      "refreshing": 0,
      "restarting": 0
    },
    "fingerprint": "xxxxxx-QwfQ=",
    "id": "123234234234",
    "instanceGroup": "group",
    "instanceTemplate": "this-template",
    "kind": "compute#instanceGroupManager",
    "name": "this-dev-grp",
    "namedPorts": [
      {
        "name": "http",
        "port": 443
      }
    ],
    "selfLink": "https://www.googleapis.com/compute/v1/projects/projectname/zones/us-west1-b/instanceGroupManagers/this-dev-grp",
    "size": "1",
    "targetSize": 1,
    "zone": "us-west1-b"
  }
]

我有以下 Python 试图做同样的事情:

#!/usr/bin/env python

from googleapiclient import discovery

...

def get_compute_service():
    credentials = authenticate_user()
    service = discovery.build('compute', 'v1', credentials=credentials)
    return service

def get_managed_instance_groups_aggregated_list_response(project='project'):
    service = get_compute_service()
    instance_groups_manager = service.instanceGroupManagers()
    aggregated_list_request = instance_groups_manager.aggregatedList(project=project)
    response = aggregated_list_request.execute()
    return response['items']

groups = get_managed_instance_groups_aggregated_list_response()

this_manager_dataset = groups['zones/us-central1-b']['instanceGroupManagers']  

for item in this_manager_dataset: 
    print(item)

现在我得到了

{
    u'kind': u'compute#instanceGroupManager', u'name': u'thename',
    u'zone': u'https://www.googleapis.com/compute/v1/projects/projectname/zones/us-central1-b',
    u'targetSize': 3,
    u'instanceGroup': u'https://www.googleapis.com/compute/v1/projects/projectname/zones/us-central1-b/instanceGroups/thename',
    u'currentActions': {
        u'none': 3,
        u'recreating': 0,
        ...
    },
    u'instanceTemplate': u'https://www.googleapis.com/compute/v1/projects/projectname/global/instanceTemplates/thename',
    u'fingerprint': u'asdhfasdf87234=',
    u'baseInstanceName': u'thename',
    u'creationTimestamp': u'2017-03-03T11:53:03.633-07:00',
    u'id': u'1213823482834',
    u'selfLink': u'https://www.googleapis.com/compute/v1/projects/projectname/zones/us-central1-b/instanceGroupManagers/thename'
}

这看起来一样,但现在我缺少 2 个要求('autoscaled' 和 'size')

目前我正在使用这个文档https://cloud.google.com/compute/docs/reference/beta/instanceGroupManagers

我是否缺少 gcloud compute instance-groups managed list 的等效 api 客户端命令?

gcloud compute instance-groups managed listgcloud compute instance-groups managed describe 聚合来自多个 Google Compute Engine 资源的信息以构建结果。

汇总响应

  • 来自 instance_groups_manager.aggregatedList() 的响应仅包含来自您项目中所有区域的 InstanceGroupManager 资源的数据。它不会有实例组大小或自动缩放器信息。不过它确实有目标大小。

  • size属性 是 InstanceGroup 资源的一部分。如果实例组被托管,InstanceGroup 资源中将有一个名为 instanceGroupManagerUri 的字段指向链接的 InstanceGroupManager 资源的 URI。

  • Autoscaler 是一个单独的资源,只有在启用自动缩放时才会创建。当存在 Autoscaler 资源时,资源中的 target 字段将指向链接的 InstanceGroupManager 资源的 URI。

因此您必须至少进行 3 次单独的 API 调用才能获取所有这些信息并手动汇总它们,这正是 gcloud compute instance-groups managed listgcloud compute instance-groups managed describe 所做的。

使用 google-api-python-client

的相关 API 调用

gcloud

中记录 http 请求和响应 当您使用 --log-http 标志调用任何 gcloud 命令时,

gcloud 支持记录所有发送的 HTTP 请求和响应。将来,如果您想知道 gcloud 为给定的 gcloud 命令调用了哪些 Google 云 API,只需将此标志附加到您的命令即可就能看到这些信息。

请注意(尤其是在共享此信息时)该命令会记录整个请求 headers,其中包含您经过身份验证的 Bearer 令牌。

--log-http

Log all HTTP server requests and responses to stderr. Overrides the default core/log_http property value for this command invocation.

示例:

gcloud compute instance-groups managed list --format=json --log-http