【发布时间】:2015-08-26 14:33:30
【问题描述】:
我需要编写一个 bash 脚本来根据卷的名称标签将 Amazon EBS 卷附加到给定实例。标签的格式为“服务器名称上的设备”,例如"/dev/xvdf on linuxserver"
我可以轻松地执行以下命令来检索所有相关实例,但是我无法遍历 json 数组中的每个对象以获取 VolumeId 和 Name 标签。
aws ec2 describe-volumes --region $region --filter Name=tag-key,Values="Name" Name=tag-value,Values="*$servername" --filter Name="status",Values="available" | jq '.Volumes[]'
一个示例输出是:
[
{
"AvailabilityZone": "us-east-1d",
"Attachments": [],
"Tags": [
{
"Value": "/dev/xvdg on linuxserver",
"Key": "Name"
}
],
"Encrypted": false,
"VolumeType": "io1",
"VolumeId": "vol-0233d8ec",
"State": "available",
"Iops": 120,
"SnapshotId": "",
"CreateTime": "2015-08-21T04:29:10.157Z",
"Size": 4
},
{
"AvailabilityZone": "us-east-1d",
"Attachments": [],
"Tags": [
{
"Value": "/dev/xvdf on linuxserver",
"Key": "Name"
}
],
"Encrypted": false,
"VolumeType": "io1",
"VolumeId": "vol-433bc8ae",
"State": "available",
"Iops": 120,
"SnapshotId": "",
"CreateTime": "2015-08-21T04:28:23.819Z",
"Size": 4
}
]
理想情况下,我想做以下事情:
for object in $(aws ec2 describe-volumes --region $region --filter Name=tag-key,Values="Name" Name=tag-value,Values="*$servername" --filter Name="status",Values="available" | jq '.Volumes[]')
do
echo $object.VolumeId
done
但是 bash 将每一行视为数组中的一个对象。
我非常感谢一些关于解决此问题的更好方法的建议。
谢谢
【问题讨论】:
标签: json bash amazon-web-services