如何用libvirts-go链接kvm虚拟机
要使用libvirt-go连接KVM虚拟机,需要按照以下步骤进行操作:
- 安装libvirt和libvirt-go
在Linux系统中,可以使用系统包管理器来安装libvirt和libvirt-go。例如,在Ubuntu系统中,可以运行以下命令:
sudo apt-get install libvirt-bin libvirt-dev libvirt-go
- 创建连接
使用libvirt-go可以创建到本地或远程主机上的libvirt连接。以下是一个示例代码:
import (
"fmt"
"github.com/libvirt/libvirt-go"
)
func main() {
conn, err := libvirt.NewConnect("qemu:///system")
if err != nil {
fmt.Println("Failed to connect to libvirt")
return
}
defer conn.Close()
fmt.Println("Connected to libvirt")
}
这将创建一个到本地系统上的libvirt连接。
- 获取虚拟机列表
使用连接对象可以获取虚拟机列表。以下是一个示例代码:
import (
"fmt"
"github.com/libvirt/libvirt-go"
)
func main() {
conn, err := libvirt.NewConnect("qemu:///system")
if err != nil {
fmt.Println("Failed to connect to libvirt")
return
}
defer conn.Close()
domains, err := conn.ListDomains()
if err != nil {
fmt.Println("Failed to get domain list")
return
}
fmt.Println("Domain list:")
for _, domain := range domains {
dom, err := conn.LookupDomainById(domain)
if err != nil {
fmt.Printf("Failed to get domain %d\n", domain)
continue
}
name, err := dom.GetName()
if err != nil {
fmt.Printf("Failed to get domain name for %d\n", domain)
continue
}
fmt.Printf("%d: %s\n", domain, name)
dom.Free()
}
}
这将获取本地系统上的虚拟机列表并输出它们的ID和名称。
- 启动和停止虚拟机
使用连接对象可以启动和停止虚拟机。以下是一个示例代码:
import (
"fmt"
"github.com/libvirt/libvirt-go"
)
func main() {
conn, err := libvirt.NewConnect("qemu:///system")
if err != nil {
fmt.Println("Failed to connect to libvirt")
return
}
defer conn.Close()
domain, err := conn.LookupDomainByName("testvm")
if err != nil {
fmt.Println("Failed to find domain")
return
}
defer domain.Free()
err = domain.Create()
if err != nil {
fmt.Println("Failed to start domain")
return
}
fmt.Println("Domain started")
err = domain.Shutdown()
if err != nil {
fmt.Println("Failed to stop domain")
return
}
fmt.Println("Domain stopped")
}
这将启动名为“testvm”的虚拟机,然后停止它。
以上是使用libvirt-go连接KVM虚拟机的基本步骤。可以使用libvirt-go来执行其他操作,例如创建和删除虚拟机,管理存储池和网络等
原文地址: https://www.cveoy.top/t/topic/fKbT 著作权归作者所有。请勿转载和采集!