如何通过AWS CLI过滤FSx存储虚拟机JSON输出为指定表格格式
问题描述
我通过AWS CLI获取了FSx存储虚拟机的JSON输出:
{"StorageVirtualMachines": [{"CreationTime": "2022-06-28T18:57:01.713000+05:30","Endpoints": {"Iscsi": {"DNSName": "iscsi.svm-010ea97h37n123456.fs-019f7g7g77948f88c.fsx.eu-west-1.amazonaws.com","IpAddresses": ["192.168.2.2","192.168.2.42"]},"Management": {"DNSName": "svm-010ea97h37n123456.fs-019f7g7g77948f88c.fsx.eu-west-1.amazonaws.com","IpAddresses": ["192.168.1.92"]},"Nfs": {"DNSName": "svm-010ea97h37n123456.fs-019f7g7g77948f88c.fsx.eu-west-1.amazonaws.com","IpAddresses": ["192.168.1.93"]}},"FileSystemId": "fs-019f7g7g77948f88c","Lifecycle": "CREATED","Name": "mysvm-fsxn_0001","ResourceARN": "arn:aws:fsx:eu-west-1:077831920798:storage-virtual-machine/fs-019f7g7g77948f88c/svm-010ea97h37n123456","StorageVirtualMachineId": "svm-010ea97h37n123456","Subtype": "DEFAULT","UUID": "66bb97d6-c7d7-11dc-1001-113072e8ap01"}]}
尝试执行以下命令过滤提取字段并以表格格式展示:
aws fsx describe-storage-virtual-machines --filters --query 'StorageVirtualMachines[*].{"SVM":Name,"DNS":DNSName}' --output table
结果中DNS字段为None,未达到预期效果。我期望提取出包含SVM名称、Management IpAddresses、Nfs IpAddresses、Iscsi IpAddresses的表格,格式如下:
------------------------------------------------------------------------------------------------------------------------------------+ | DescribeStorageVirtualMachines | +------+-----------------------------------------+-----------------------------------------+-----------------------------------------+-------------------------------------+ | DNS | SVM |Management IpAddresses | Nfs IpAddresses | Iscsi IpAddresses +------+-----------------------------------------+-----------------------------------------+-----------------------------------------+-------------------------------------+ | None| mysvm-fsxn_0001 |192.168.1.92 |192.168.1.93 | 192.168.2.2,192.168.2.42 +------+-----------------------------------------+-----------------------------------------+-----------------------------------------+-------------------------------------+
解决方案
你之前的命令出错原因是:DNSName并非StorageVirtualMachines的直接属性,而是嵌套在Endpoints下的各个子节点(Management、Nfs、Iscsi)中;同时你需要提取的各个IpAddresses也需要通过正确的嵌套路径访问,并且可以用JMESPath的join函数把数组格式的IP转为逗号分隔的字符串。
使用以下命令可以得到你想要的表格:
aws fsx describe-storage-virtual-machines --query 'StorageVirtualMachines[*].{"SVM": Name, "Management IpAddresses": join(", ", Endpoints.Management.IpAddresses), "Nfs IpAddresses": join(", ", Endpoints.Nfs.IpAddresses), "Iscsi IpAddresses": join(", ", Endpoints.Iscsi.IpAddresses)}' --output table
如果确实需要保留DNS列(可选择某一节点的DNS,比如Management的),可以调整命令为:
aws fsx describe-storage-virtual-machines --query 'StorageVirtualMachines[*].{"DNS": Endpoints.Management.DNSName, "SVM": Name, "Management IpAddresses": join(", ", Endpoints.Management.IpAddresses), "Nfs IpAddresses": join(", ", Endpoints.Nfs.IpAddresses), "Iscsi IpAddresses": join(", ", Endpoints.Iscsi.IpAddresses)}' --output table
命令说明
join(", ", <数组字段>):将IP数组转为逗号加空格分隔的字符串,适配表格展示需求Endpoints.Management.IpAddresses:正确访问嵌套在Endpoints下的Management节点IP列表--output table:指定输出格式为表格
内容的提问来源于stack exchange,提问作者user2023
相关产品推荐
相关产品推荐

