API等效于gcloud计算实例组托管列表

时间:2017-07-14 18:35:49

标签: python google-cloud-platform google-api-client google-api-python-client

我有一个脚本,从命令行运行以下命令:

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个要求('自动缩放'''尺寸')

到目前为止,我正在使用此文档https://cloud.google.com/compute/docs/reference/beta/instanceGroupManagers

我错过了gcloud compute instance-groups managed list的等效api客户端命令吗?谢谢

1 个答案:

答案 0 :(得分:1)

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请求和响应

gcloud支持记录使用--log-http标志调用任何gcloud命令时发送的所有HTTP请求和响应。将来,如果您想知道gcloud针对给定gcloud命令调用了哪些Google Cloud API,只需将此标志附加到您的命令,您就可以看到此信息。< / p>

请注意(特别是在共享此信息时)该命令会以明文形式记录包含经过身份验证的Bearer令牌的整个请求标头。

  

<强> --log-http

     

将所有HTTP服务器请求和响应记录到stderr。覆盖了   此命令调用的默认core/log_http属性值。

实施例

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