【问题标题】:How can I get the GCE instance name where my script is running?如何获取运行脚本的 GCE 实例名称?
【发布时间】:2014-05-03 02:14:12
【问题描述】:

我目前正在尝试从启动脚本中操作我的实例的元数据。为此,我必须使用以下命令:

gcutil setinstancemetadata <instance-name> --metadata=<key-1:value-1> --fingerprint=<current-fingerprint-hash> 

如您所见,该命令要求提供 instance-name。因为我试图从元数据中获取它,但它不存在(参见:Default Metadata)。

我的问题是如何获取此实例名称?

编辑:目前我唯一的解决方案是在创建实例时将实例名称添加为元数据:

gcutil addintance my-cool-instance --metadata=instance-name:my-cool-instance

然后通过 curl 请求获取它:

curl 'http://metadata/computeMetadata/v1/instance/attributes/instance-name' -H "X-Google-Metadata-Request: True"

【问题讨论】:

    标签: google-compute-engine gcutil


    【解决方案1】:

    Google Cloud Platform 元数据 URL 支持通过 hostname 资源获取实例名称,而不考虑为实例设置的任何自定义主机名。所以不推荐$HOSTNAME

    URL1:

    INSTANCE_NAME=$(curl http://169.254.169.254/0.1/meta-data/hostname -s | cut -d "." -f1)
    

    URL2:

    INSTANCE_NAME=$(curl http://metadata.google.internal/computeMetadata/v1/instance/hostname -H Metadata-Flavor:Google | cut -d . -f1)
    

    GCP 对资源名称 (?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?) 遵循通用正则表达式模式,因此可以安全地根据 . 剪切结果并将第一部分用作实例名称。

    【讨论】:

      【解决方案2】:

      实例名与其主机名相同,你可以使用 $HOSTNAME 环境变量,例如:

      gcutil setinstancemetadata $HOSTNAME --metadata=<key-1:value-1> --fingerprint=<current-fingerprint-hash>
      

      这适用于我的实例,该实例是从 debian-7-wheezy-v20140318 映像构建的。

      更新:以上在 Debian 7 (Wheezy) 上运行良好,但在 HOSTNAME 变量是完全限定域名而非主机名的操作系统上,您应该使用以下语法:

      gcutil setinstancemetadata $($HOSTNAME | cut -d . -f1) --metadata=<key-1:value-1> --fingerprint=<current-fingerprint-hash>
      

      【讨论】:

      • 感谢您的回复。在 CentOS 上,主机名似乎有点不同:my-cool-instance.c.my-cool-project.xxxx.com.yyyyy。我只需添加一个cut 即可解决。
      • 实例名称并非总是与主机名相同。如果您有自定义主机名怎么办?在这种情况下,实例的名称与主机名不同。
      【解决方案3】:

      获取实例名称的更好方法是使用 GCE 映像中包含的hostname 命令:

      [benoit@my-instance ~]$ hostname
      my-instance
      

      【讨论】:

      • 这没有得到完整的 gce 主机名,通常包括项目名称。
      猜你喜欢
      • 1970-01-01
      • 2011-06-03
      • 2010-11-29
      • 1970-01-01
      • 2019-07-08
      • 2015-12-10
      • 1970-01-01
      • 1970-01-01
      • 2014-03-06
      相关资源
      最近更新 更多