Post

列出Proxmox VE cluster 全部vm

列出Proxmox VE cluster 全部vm

有時需要查詢虛擬機的狀態, 尤其在只有一台pve時, 要知道其它節點有什麼vm


#!/bin/bash

# 設定表頭
printf "%-15s %-10s %-25s %-20s %-30s\n" "節點" "VMID" "VM名稱" "儲存裝置" "磁碟"
echo "------------------------------------------------------------------------------------------------"

# 遍歷所有節點的設定檔目錄
for node_dir in /etc/pve/nodes/*; do
    node_name=$(basename "$node_dir")

    # 檢查該節點是否有 qemu-server 設定檔
    if [ -d "$node_dir/qemu-server" ]; then
        # 遍歷該節點的所有 VM 設定檔
        for vm_config in "$node_dir"/qemu-server/*.conf; do
            if [ -f "$vm_config" ]; then
                vmid=$(basename "$vm_config" .conf)

                # 使用 grep 從設定檔中提取 VM 名稱
                vmname=$(grep -E "^name:" "$vm_config" | cut -d ':' -f 2 | tr -d '[:space:]')

                # 使用 grep 提取磁碟資訊
                disk_info=$(grep -E "^(disk|scsi|ide|sata)[0-9]+:" "$vm_config")

                # 如果沒有磁碟資訊,則顯示 N/A
                if [ -z "$disk_info" ]; then
                    printf "%-15s %-10s %-25s %-20s %-30s\n" "$node_name" "$vmid" "$vmname" "N/A" "N/A"
                else
                    first_line=true
                    while read -r disk; do
                        storage=$(echo "$disk" | cut -d ':' -f 2 | cut -d ',' -f 1 | cut -d ':' -f 1 | tr -d '[:space:]')
                        disk_details=$(echo "$disk" | cut -d ':' -f 3- | tr -d '[:space:]')
                        if $first_line; then
                            printf "%-15s %-10s %-25s %-20s %-30s\n" "$node_name" "$vmid" "$vmname" "$storage" "$disk_details"
                            first_line=false
                        else
                            printf "%-15s %-10s %-25s %-20s %-30s\n" "" "" "" "$storage" "$disk_details"
                        fi
                    done <<< "$disk_info"
                fi
            fi
        done
    fi
done

This post is licensed under CC BY 4.0 by the author.