shell脚本从标签设置amazon ec2主机名

时间:2012-09-04 18:02:00

标签: bash amazon-ec2 ec2-ami ec2-api-tools

我正在尝试从标记“名称”

设置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。有人能指出我正确的段落吗?

2 个答案:

答案 0 :(得分: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上)。

答案 1 :(得分:0)

你可以使用curl,因为它通常是安装的。

assigned_host_name = $(curl&#39; http://169.254.169.254/latest/meta-data/assigned_host_name&#39;) assigned_domain_name = $(curl&#39; http://169.254.169.254/latest/meta-data/assigned_domain_name&#39;)

然后,检查分配的值是否包含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>

然后做任何想要分配主机名的魔法。我今天稍后会对此进行编辑,以添加我是如何做到的。