Skip to content

Instantly share code, notes, and snippets.

@troyfontaine
Created October 5, 2024 01:22
Show Gist options
  • Save troyfontaine/86d3d1bc9b1259318db2e2068209b231 to your computer and use it in GitHub Desktop.
Save troyfontaine/86d3d1bc9b1259318db2e2068209b231 to your computer and use it in GitHub Desktop.
Virsh command output converted to JSON

Virsh Command Output Converted to JSON

List of VMs

vm_json=$(echo "[ $(virsh list --all|grep -Ev 'Id|----'|awk '{print "{ \"id\": \""$1"\", \"name\": \""$2"\", \"state\": \""$3 $4"\"}," }'|head -n -1) {} ]"|jq -r)

Example Output

[
  {
    "id": "4",
    "name": "vmname-one",
    "state": "running"
  },
  {
    "id": "5",
    "name": "vmname-two",
    "state": "running"
  },
  {
    "id": "6",
    "name": "vmname-three",
    "state": "running"
  },
  {
    "id": "-",
    "name": "vmname-four",
    "state": "shutoff"
  },
  {}
]

Path to a VMs disk(s)

vm_name="vmname-three"
block_device_json=$(echo "[ $(virsh domblklist $vm_name | grep -Ev 'Target|--------' | awk -v vm_name=$vm_name '{print "{ \"domain\": \""vm_name"\", \"target\": \""$1"\",\"path\": \""$2"\"}," }'|head -n -1) {} ]"|jq -r)

Example Output

[
  {
    "domain": "vmname-three",
    "target": "sda",
    "path": "/var/lib/libvirt/default/vmname-three.qcow2"
  },
  {
    "domain": "vmname-three",
    "target": "vda",
    "path": "/var/lib/libvirt/default/vmname-three-second.qcow2"
  },
  {}
]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment