我正在尝试从标签“Name”设置 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
附:我的实例上有 BASH,但我完全迷失在 bash document 中。有人能指出我正确的段落吗?
最佳答案
经过一些错误和尝试,脚本开始工作:
#!/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 将字符串解析为数组,幸运的是我知道第四个元素始终是主机名。
编辑(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)。
关于bash - 用于从标签设置 amazon ec2 主机名的 shell 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12268986/