Как я могу получить имя экземпляра GCE, где работает мой скрипт?
В настоящее время я пытаюсь манипулировать метаданными моего экземпляра из сценария запуска. Для этого мне нужно использовать следующую команду:
gcutil setinstancemetadata <instance-name> --metadata=<key-1:value-1> --fingerprint=<current-fingerprint-hash>
Как вы видите команду, спросите имя экземпляра. Я пытался получить его из метаданных, но его там не было (см.: Метаданные по умолчанию).
У меня вопрос, как получить это имя экземпляра?
Изменить: на данный момент мое единственное решение заключается в добавлении имени экземпляра в качестве метаданных при создании экземпляра:
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"
3 ответа
Имя экземпляра совпадает с именем хоста, вы можете просто использовать переменную среды $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>
URL-адрес метаданных Google Cloud Platform поддерживает получение имени экземпляра с помощью 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
Команда, включенная в изображения GCE:
[benoit@my-instance ~]$ hostname
my-instance