Сценарий оболочки для установки имени хоста amazon ec2 из тегов

Я пытаюсь установить имя хоста amazon EC2 из тега «Имя».

И нашел ответ для извлечения тегов из данных экземпляра.

ec2-describe-tags \
  --filter "resource-type=instance" \
  --filter "resource-id=$(ec2-metadata -i | cut -d ' ' -f2)" \
  --filter "key=Name" | cut -f5

результат:

+------------+--------------+------+--------+
| resourceId | resourceType | key  | value  |
+------------+--------------+------+--------+
| i-1xxxxxxx | instance     | Name | dev200 |
+------------+--------------+------+--------+

Я вижу, что почти достиг цели, но как мне получить значение (dev200) из приведенного выше результата? Затем я могу использовать его в:

echo $HOSTNAME > /etc/hostname

p.s. У меня есть BASH на инстансе, но я совершенно потерялся в документе bash. может кто-нибудь указать мне правильный абзац?


person Reed    schedule 04.09.2012    source источник


Ответы (2)


После некоторых ошибок и проб скрипт заработал:

#!/bin/bash
hostname=`ec2-describe-tags --filter "resource-type=instance" \
  --filter "resource-id=$(ec2-metadata -i | cut -d ' ' -f2)" \
  --filter "key=Name" | grep Name`

IFS="|" read -ra NAME <<< "$hostname"
hostname=${NAME[4]}
echo $hostname

Использовал IFS для анализа строки в массивы, и, к счастью, я знаю, что 4-й элемент всегда является именем хоста.

РЕДАКТИРОВАТЬ (20 декабря 2012 г.): За короткое время, прошедшее с момента публикации, несколько соответствующих инструментов командной строки ec2 были изменены, а флаги изменены или устарели (например, флаг -i выше больше не работает на текущая версия ec2metadata). Имея это в виду, вот сценарий командной строки, который я использовал для получения тега «Имя» текущей машины (не могу говорить с остальной частью сценария):

ec2-describe-tags --filter "resource-type=instance" --filter "resource-id=$(ec2metadata --instance-id)" | awk '{print $5}'

В Debian/Ubuntu вам нужно apt-get install cloud-utils ec2-api-tools, чтобы они заработали (позже только в Ubuntu Multiverse).

person Reed    schedule 04.09.2012
comment
Другой пример фильтрации по ключу тега hostname: ec2-describe-tags --filter "resource-type=instance" --filter "key=hostname" --filter "resource-id=$(ec2metadata --instance-id)" | awk '{print $5}' - person Thales Ceolin; 27.09.2018

Вы можете просто использовать curl, так как он обычно установлен.

назначенное_имя_хоста=$(curl 'http://169.254.169.254/latest/meta-data/assigned_host_name')assigned_domain_name=$(curl 'http://169.254.169.254/latest/meta-data/assigned_domain_name')

Затем просто убедитесь, что назначенные значения не содержат HTML-сообщение 404, как показано ниже.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <title>404 - Not Found</title> </head> <body> <h1>404 - Not Found</h1> </body> </html>

Затем сделайте любую магию, которую вы хотите назначить имени хоста. Я отредактирую это позже сегодня, чтобы добавить, как я это сделал.

person Dennis    schedule 05.06.2016