簡體   English   中英

AWS SSM 自定義清單

[英]AWS SSM Custom Inventory

我正在嘗試設置自定義清單類型以顯示 Linux 實例磁盤使用情況,如本文中為 Windows 實例顯示的那樣: https : //aws.amazon.com/blogs/mt/get-disk-utilization-of-your-fleet -using-ec2-systems-manager-custom-inventory-types/

我一直在嘗試創建與上面鏈接中的 PowerShell 腳本中給出的邏輯相同的邏輯,但我無法找到將 Linux 磁盤使用情況命令輸出轉換為 JSON 格式的方法。 我無法安裝jq或任何其他軟件。

這是我的腳本:

#!/bin/sh
output=$(df -hTP | grep -vE '^tmpfs|cdrom' | awk '{print $1,$3,$6}')
content= echo "{\"SchemaVersion\":\"1.0\",\"TypeName\":\"Custom:LinuxDiskUsage\",\"Content\":{$output}}"
instanceid=$(wget -q -O - http://169.254.169.254/latest/meta-data/instance-id)

如何更改此腳本,以便獲得與 Windows 實例顯示的結果相同的結果?

當前輸出為:

{
  "SchemaVersion" : "1.0",
  "TypeName" : "Custom:LinuxDiskUsage",
  "Content" : {
                 Filesystem Size Use% devtmpfs 474M 0% /dev/xvda1 8.0G 17%
              }
}

但我希望得到以下內容:

{
  "SchemaVersion" : "1.0",
  "TypeName" : "Custom:LinuxDiskUsage",
  "Content" : {
                "Filesystem" : "/dev/xvda1",
                "Size" : "8.0G",
                "Use%": "17%"
              }
}
output=$(df -hTP | grep -vE '^Filesystem|tmpfs|cdrom' | awk '{print "{ \"Filesystem\": \""$1"\", \"Size\": \""$3"\", \"Use\%\": \""$6"\"},"}')
content= echo "{\"SchemaVersion\":\"1.0\",\"TypeName\":\"Custom:LinuxDiskUsage\",\"Content\":[$output]}"

會做的。 基本上,由於您不使用任何東西來生成 JSON,因此您必須自己生成。 您的輸出中可能有太多逗號。 這可以通過連接或刪除最后一個字符來修復。

你可以用 awk 完全做到這一點:

df -h --output=source,size,pcent | awk '
         BEGIN { 
                 printf "{\n\t\"SchemaVersion\" : \"1.0\",\n\t\"TypeName\" : \"Customer:LinuxDiskUsage\",\n\t\"Content\" : "
               } 
         NR > 1 && $0 !~ /tmpfs/ && $0 !~ /cdrom/ { 
                printf "\n\t\t{\n\t\t\t\"Filesystem\" : \"%s\"\n\t\t\t\"Size\" : \"%s\",\n\t\t\t\"Use%\" : \"%s\"\n\t\t}\n",$1,$2,$3 
               } 
         END { 
                printf "\t}\n" 
             }'

一個班輪:

df -h --output=source,size,pcent | awk 'BEGIN { printf "{\n\t\"SchemaVersion\" : \"1.0\",\n\t\"TypeName\" : \"Customer:LinuxDiskUsage\",\n\t\"Content\" : "} NR > 1 && $0 !~ /tmpfs/ && $0 !~ /cdrom/ { printf "\n\t\t{\n\t\t\t\"Filesystem\" : \"%s\"\n\t\t\t\"Size\" : \"%s\",\n\t\t\t\"Use%\" : \"%s\"\n\t\t}\n",$1,$2,$3 } END { printf "\t}\n" }'

首先,使用 df 的輸出標志從輸出中去除任何“噪音”。 也不需要通過 grep 然后通過管道傳輸 awk。 使用 awk 的 BEGIN 塊打印 SchemaVersion、TypeName 和 Content 標簽。 在主塊中,當沒有遇到 tmpfs 和 cdrom 以及標頭 (NR>1) 時,打印 Filesystem、Use 和 Size 標簽的 df 命令的輸出。 在 END 塊中,打印結束標記。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM