diff options
Diffstat (limited to 'main.go')
| -rw-r--r-- | main.go | 117 |
1 files changed, 117 insertions, 0 deletions
@@ -0,0 +1,117 @@ +// Copyright 2016 The go-qemu Authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package main + +import ( + "flag" + "fmt" + "log" + "net" + "time" + + hypervisor "github.com/digitalocean/go-qemu/hypervisor" + "github.com/digitalocean/go-qemu/qemu" +) + +var ( + network = flag.String("network", "unix", `Named network used to connect on. For Unix sockets -network=unix, for TCP connections: -network=tcp`) + address = flag.String("address", "/var/run/libvirt/libvirt-sock", `Address of the hypervisor. This could be in the form of Unix or TCP sockets. For TCP connections: -address="host:16509"`) + timeout = flag.Duration("timeout", 2*time.Second, "Connection timeout. Another valid value could be -timeout=500ms") +) + +func main() { + flag.Parse() + + // fmt.Printf("\nConnecting to %s://%s\n", *network, *address) + newConn := func() (net.Conn, error) { + // return net.DialTimeout(*network, *address, *timeout) + return net.DialTimeout("unix", "/var/run/libvirt/libvirt-sock", *timeout) + // return net.DialTimeout("tcp", "farm02:16514", *timeout) + } + + driver := hypervisor.NewRPCDriver(newConn) + hv := hypervisor.New(driver) + + // fmt.Printf("\n**********Domains**********\n") + domains, err := hv.Domains() + if err != nil { + log.Fatalf("Unable to get domains from hypervisor: %v", err) + } + for _, dom := range domains { + var name string + var err error + var drives []string + var status qemu.Status + name = dom.Name + // fmt.Printf("%s\n", dom.Name) + status, err = dom.Status() + if err != nil { + fmt.Println(name, status, err) + continue + } + // fmt.Printf("\nStatus: %s\n", status) + /* + if status == qemu.StatusRunning { + // getBlockDevices(dom) + // fmt.Println(name, status, err) + } + */ + blockDevices, err := dom.BlockDevices() + for _, blockDevice := range blockDevices { + drives = append(drives, blockDevice.Device) + drives = append(drives, blockDevice.Inserted.Driver) + drives = append(drives, blockDevice.Inserted.File) + // fmt.Printf("%20s %8s %30s\n", + // blockDevice.Device, blockDevice.Inserted.Driver, blockDevice.Inserted.File) + } + if status == qemu.StatusRunning { + fmt.Println("ON ", name, drives) + } else { + fmt.Println("OFF", status, name, drives) + } + } + // fmt.Printf("\n***************************\n") +} + +func displayBlockDevices(domain *qemu.Domain) { + // var []blks string + blockDevices, err := domain.BlockDevices() + if err != nil { + log.Fatalf("Error getting blockDevices: %v\n", blockDevices) + } + fmt.Printf("\n[ BlockDevices ]\n") + fmt.Printf("========================================================================\n") + fmt.Printf("%20s %8s %30s\n", "Device", "Driver", "File") + fmt.Printf("========================================================================\n") + for _, blockDevice := range blockDevices { + fmt.Printf("%20s %8s %30s\n", + blockDevice.Device, blockDevice.Inserted.Driver, blockDevice.Inserted.File) + } +} + +func displayPCIDevices(domain *qemu.Domain) { + pciDevices, err := domain.PCIDevices() + if err != nil { + log.Fatalf("Error getting PCIDevices: %v\n", pciDevices) + } + fmt.Printf("\n[ PCIDevices ]\n") + fmt.Printf("======================================\n") + fmt.Printf("%10s %20s\n", "[ID]", "[Description]") + fmt.Printf("======================================\n") + for _, pciDevice := range pciDevices { + fmt.Printf("[%10s] [%20s]\n", pciDevice.QdevID, pciDevice.ClassInfo.Desc) + } +} + |
