【问题标题】:Can I replicate `create-with-container` gcloud sdk command using the googleapiclient python client我可以使用 googleapiclient python 客户端复制`create-with-container` gcloud sdk 命令吗
【发布时间】:2020-09-13 16:16:42
【问题描述】:

我目前在 gcloud 容器存储库中有一个 docker 容器,我想启动一个实例以运行计算、保存结果并关闭:

gcloud compute instances create-with-container test-1 \
--machine-type=n1-standard-4 \
--boot-disk-size=20GB \
--container-image=eu.gcr.io/<container-link> \
--container-env=GCLOUD_INPUT_FILENAME=file.txt \
--container-env=GCLOUD_PROJECT=project-name

但是,我希望能够使用网络界面(flask)启动这些实例,这意味着我想使用googleapiclient(python)来创建和管理这些实例:

看起来您可以使用发现 api 创建实例创建顺序:

compute = googleclientapi.discovery.build('compute', 'v1')
compute.instances().insert(...).execute()

但看起来无法模拟create-with-container gcloud sdk 命令,尽管您可以将“machineImage”作为创建请求的一部分传递。

可以在不使用subprocess 调用gcloud sdk 的情况下创建一个“with-container”计算实例

我能否将我的create-with-container 实例转换为机器映像,然后使用googleapi client

【问题讨论】:

  • 尝试在启用 --log-http 的情况下运行 gcloud 命令。您可以查看它生成的 google API 调用并复制它。
  • GCLOUD 可能执行了多个不同的调用。日志 http 可以显示您自己实现的所有调用以实现相同的行为
  • 无法使用--log-http 找到好的答案。很想知道。评论关注。
  • 计算实例 REST 请求包含在字典中序列化的 yaml 文件。在幕后,启动了一个标准的 containerizedOS (cos) 容器,而应该在顶部运行的容器通过字典传递,该字典本身包含 yaml 文件。我使用 cloudlib 作为创建计算实例的驱动程序 - 我可以使用 ex_metadata 参数将序列化的 yaml 作为字典传递。 yaml 有效负载字典:{"items": [ "gce-container-declaration", "value": "&lt;container-info + disclaimer&gt;"}, "google-logging-enabled", "value": "true"}]}

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


【解决方案1】:

仅供参考,我从 log-http 日志中发现的(我知道这不是正确的答案)

==== request start ====
uri: https://compute.googleapis.com/batch/compute/v1
method: POST
== headers start ==
b'authorization': --- Token Redacted ---
b'content-length': b'479'
b'content-type': b'multipart/mixed; boundary="===============34234234234234=="'
b'user-agent': b'google-cloud-sdk gcloud/329.0.0 command/gcloud.compute.instances.create-with-container invocation-id/0dd6a37ac0624ac4b00e30a44da environment/devshell environment-version/None interactive/False from-script/False python/3.7.3 term/screen (Linux 5.4.89+)'
== headers end ==

“create-with-container”是通过头部传递的,我没有找到相同的主体。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-17
    • 1970-01-01
    • 2020-03-29
    • 2017-07-11
    • 2018-11-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多