Google cloud platform Google计算引擎API:获取另一个对象中引用的对象
我正在尝试获取给定容器引擎集群的实例组。我可以成功获取容器集群对象,它有一个名为Google cloud platform Google计算引擎API:获取另一个对象中引用的对象,google-cloud-platform,google-api-python-client,Google Cloud Platform,Google Api Python Client,我正在尝试获取给定容器引擎集群的实例组。我可以成功获取容器集群对象,它有一个名为instanceGroupUrls的属性,它是一个字符串列表,其中每个字符串都是实例组的完整URL: In [14]: gke_api = discovery.build('container', 'v1', credentials=credentials) In [15]: cluster = gke_api.projects().zones().clusters().get( projectId=pro
instanceGroupUrls
的属性,它是一个字符串列表,其中每个字符串都是实例组的完整URL:
In [14]: gke_api = discovery.build('container', 'v1', credentials=credentials)
In [15]: cluster = gke_api.projects().zones().clusters().get(
projectId=project_id, zone=zone, clusterId=cluster_id).execute()
In [16]: cluster['instanceGroupUrls']
Out[16]: ['https://www.googleapis.com/compute/v1/projects/{project-id}/zones/{zone-id}/instanceGroupManagers/{instanceGroupID}']
我的问题是:如果我只有资源的完整URL,如何获取实例组?现在,我可以解析该URL,然后使用api发现工具来执行instanceGroups.get(project='foo',instanceGroup='bar')
,但这看起来非常粗糙,而且容易被破坏
API客户端是否有提供完整URL的方法?我在IPython做了很多谷歌搜索和搜索,但找不到太多。我得到的最接近的是HttpRequest
class(),但我不确定要为args传递什么
感谢您的帮助,
亚伦TL;DR-对于
容器
API的发现与对于计算
API的发现是独立的,两者都无法通过URL了解资源的类型
- 如果只想查看实例组资源,可以使用通过凭据验证的对象向URL发送请求
- 如果您想灵活地使用
API的发现来访问资源,如您所述,您必须从URL中提取compute
和区域
字段并将其传递给。顺便说一句,这不是黑客行为,因为大多数谷歌云API的URL资源格式不太可能改变。这个实例组名
httplib2
中经过身份验证的Http对象来获取与URL对应的资源
- 工作示例
- 输出
-
如果您使用的是应用程序默认凭据,则需要对上面的示例进行以下修改,其中您构建了凭据对象,其余代码保持不变,而不是服务帐户:
from oauth2client.client import GoogleCredentials credentials = GoogleCredentials.get_application_default()
- 从URL提取信息并调用计算引擎API的代码段
- 输出
Instance Group URL: https://www.googleapis.com/compute/v1/projects/some-arbitrary-project/zones/us-central1-a/instanceGroupManagers/gke-cluster-foo-some-group
Instance Group Info:
{ u'baseInstanceName': u'gke-cluster-foo-default-pool-abcdef',
u'creationTimestamp': u'2017-07-07T10:11:12.678-07:00',
u'currentActions': { u'abandoning': 0,
u'creating': 0,
u'creatingWithoutRetries': 0,
u'deleting': 0,
u'none': 3,
u'recreating': 0,
u'refreshing': 0,
u'restarting': 0},
u'fingerprint': u'AABBCCDDEFG=',
u'id': u'12345678901234',
u'instanceGroup': u'https://www.googleapis.com/compute/v1/projects/some-arbitrary-project/zones/us-central1-a/instanceGroups/gke-cluster-foo-default-pool-some-group',
u'instanceTemplate': u'https://www.googleapis.com/compute/v1/projects/some-arbitrary-project/global/instanceTemplates/gke-cluster-foo-default-pool-abcdef',
u'kind': u'compute#instanceGroupManager',
u'name': u'gke-cluster-foo-default-pool-some-group',
u'selfLink': u'https://www.googleapis.com/compute/v1/projects/some-arbitrary-project/zones/us-central1-a/instanceGroupManagers/gke-cluster-foo-default-pool-some-grp',
u'targetSize': 3,
u'zone': u'https://www.googleapis.com/compute/v1/projects/some-arbitrary-project/zones/us-central1-a'}
from oauth2client.client import GoogleCredentials
credentials = GoogleCredentials.get_application_default()
import urlparse
# Extract the path component of the URL, and using that extract instance group
# name and zone name.
instance_group_url_components = urlparse.urlsplit(
instance_group_url).path.split('/')
instance_group_name = instance_group_url_components[-1]
zone_name = instance_group_url_components[-3]
compute_api = discovery.build('compute', 'v1', credentials=credentials)
instance_group_info = compute_api.instanceGroups().get(
project=PROJECT_NAME, zone=zone_name,
instanceGroup=instance_group_name).execute()
print 'Instance Group Info: '
pprint.PrettyPrinter(indent=2).pprint(instance_group)
Instance Group URL: https://www.googleapis.com/compute/v1/projects/some-arbitrary-project/zones/us-central1-a/instanceGroupManagers/gke-cluster-foo-some-group
Instance Group Info:
{ u'baseInstanceName': u'gke-cluster-foo-default-pool-abcdef',
u'creationTimestamp': u'2017-07-07T10:11:12.678-07:00',
u'currentActions': { u'abandoning': 0,
u'creating': 0,
u'creatingWithoutRetries': 0,
u'deleting': 0,
u'none': 3,
u'recreating': 0,
u'refreshing': 0,
u'restarting': 0},
u'fingerprint': u'AABBCCDDEFG=',
u'id': u'12345678901234',
u'instanceGroup': u'https://www.googleapis.com/compute/v1/projects/some-arbitrary-project/zones/us-central1-a/instanceGroups/gke-cluster-foo-default-pool-some-group',
u'instanceTemplate': u'https://www.googleapis.com/compute/v1/projects/some-arbitrary-project/global/instanceTemplates/gke-cluster-foo-default-pool-abcdef',
u'kind': u'compute#instanceGroupManager',
u'name': u'gke-cluster-foo-default-pool-some-group',
u'selfLink': u'https://www.googleapis.com/compute/v1/projects/some-arbitrary-project/zones/us-central1-a/instanceGroupManagers/gke-cluster-foo-default-pool-some-grp',
u'targetSize': 3,
u'zone': u'https://www.googleapis.com/compute/v1/projects/some-arbitrary-project/zones/us-central1-a'}