2012-09-04 54 views
2

我想設置從標籤「名稱」shell腳本設置從標籤

Amazon EC2的主機名Amazon EC2的主機並發現the answer來提取實例數據的標籤。

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 document。有人可以指出我正確的段落嗎?

回答

4

一些錯誤和審判後,拿到劇本的工作:

#!/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個元素始終是主機名。編輯(2012年12月20日):自發布以來的短時間內,幾個相關的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上)。

0

您可以使用捲曲,因爲它通常是安裝的。

assigned_host_name = $(捲曲 'http://169.254.169.254/latest/meta-data/assigned_host_name ') assigned_domain_name = $(捲曲' http://169.254.169.254/latest/meta-data/assigned_domain_name')

然後,只需檢查所分配的值不包含一個404 HTML消息像的下方。

<!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> 

然後做任何你想分配主機名的魔法。我將在今天晚些時候編輯它,以添加我如何做到這一點。