如何获取运行脚本的 GCE 实例名称?

Ben*_*ère 7 google-compute-engine gcutil

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

gcutil setinstancemetadata <instance-name> --metadata=<key-1:value-1> --fingerprint=<current-fingerprint-hash> 
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,该命令要求输入实例名称。因为我试图从元数据中获取它,但它不在那里(请参阅:默认元数据)。

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

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

gcutil addintance my-cool-instance --metadata=instance-name:my-cool-instance
Run Code Online (Sandbox Code Playgroud)

然后通过curl请求获取它:

curl 'http://metadata/computeMetadata/v1/instance/attributes/instance-name' -H "X-Google-Metadata-Request: True"
Run Code Online (Sandbox Code Playgroud)

Ian*_*GSY 4

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

gcutil setinstancemetadata $HOSTNAME --metadata=<key-1:value-1> --fingerprint=<current-fingerprint-hash>
Run Code Online (Sandbox Code Playgroud)

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

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

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

  • 实例名称并不总是与主机名相同。如果您有自定义主机名怎么办?在这种情况下,实例的名称与主机名不同。 (2认同)