谷歌计算引擎-我如何获得GCE实例名称,我的脚本正在运行



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

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

如您所见,命令要求输入instance-name。因为我试图从元数据中获取它,但它不在那里(参见:默认元数据)。

我的问题是如何得到这个实例名?

Edit:目前,我唯一的解决方案是在创建实例时添加实例名作为元数据:

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 Cloud Platform MetaData 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])?)的通用正则表达式模式,因此基于.削减结果并使用第一部分作为实例名称是安全的。

实例名与其主机名相同,您可以使用$ 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>

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

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

相关内容

  • 没有找到相关文章

最新更新