使用Golang的govmomi库通过指定IP、用户名和密码登录vCenter的方法
使用Golang的govmomi库通过指定IP、用户名和密码登录vCenter的方法 我想收集有关 vCenter 资源(主机、虚拟机、虚拟磁盘等)的所有信息。 是否有类似 pyvmomi 那样使用凭据登录 vCenter 的方法?
3 回复
是的,但我无法使用IP、用户名和密码登录
更多关于使用Golang的govmomi库通过指定IP、用户名和密码登录vCenter的方法的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
是的,使用 govmomi 库可以通过指定 IP、用户名和密码登录 vCenter。以下是一个完整的示例代码,展示如何建立连接并获取 vCenter 资源信息。
首先,确保已安装 govmomi 库:
go get github.com/vmware/govmomi
然后,使用以下代码登录 vCenter 并列出主机和虚拟机:
package main
import (
"context"
"fmt"
"net/url"
"os"
"github.com/vmware/govmomi"
"github.com/vmware/govmomi/find"
"github.com/vmware/govmomi/object"
"github.com/vmware/govmomi/vim25"
)
func main() {
// 设置 vCenter 连接参数
vCenterIP := "192.168.1.100" // 替换为你的 vCenter IP
username := "administrator@vsphere.local" // 替换为你的用户名
password := "yourpassword" // 替换为你的密码
// 创建上下文
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
// 构建 vCenter URL
u := &url.URL{
Scheme: "https",
Host: vCenterIP,
Path: "/sdk",
}
u.User = url.UserPassword(username, password)
// 连接到 vCenter
client, err := govmomi.NewClient(ctx, u, true)
if err != nil {
fmt.Printf("连接失败: %v\n", err)
os.Exit(1)
}
defer client.Logout(ctx)
fmt.Println("成功连接到 vCenter")
// 创建 Finder 来查找资源
finder := find.NewFinder(client.Client, true)
// 获取默认数据中心
dc, err := finder.DefaultDatacenter(ctx)
if err != nil {
fmt.Printf("获取数据中心失败: %v\n", err)
os.Exit(1)
}
finder.SetDatacenter(dc)
fmt.Printf("使用数据中心: %s\n", dc.Name())
// 列出所有主机
hosts, err := finder.HostSystemList(ctx, "*")
if err != nil {
fmt.Printf("获取主机列表失败: %v\n", err)
} else {
fmt.Printf("找到 %d 个主机:\n", len(hosts))
for _, host := range hosts {
fmt.Printf(" - %s\n", host.Name())
}
}
// 列出所有虚拟机
vms, err := finder.VirtualMachineList(ctx, "*")
if err != nil {
fmt.Printf("获取虚拟机列表失败: %v\n", err)
} else {
fmt.Printf("找到 %d 个虚拟机:\n", len(vms))
for _, vm := range vms {
fmt.Printf(" - %s\n", vm.Name())
}
}
// 获取虚拟磁盘信息的示例
if len(vms) > 0 {
vm := vms[0]
fmt.Printf("\n获取虚拟机 '%s' 的磁盘信息:\n", vm.Name())
// 获取虚拟机配置
vmObj := object.NewVirtualMachine(client.Client, vm.Reference())
devices, err := vmObj.Device(ctx)
if err != nil {
fmt.Printf("获取设备失败: %v\n", err)
} else {
disks := devices.SelectByType((*object.VirtualDisk)(nil))
fmt.Printf("找到 %d 个虚拟磁盘:\n", len(disks))
for _, disk := range disks {
if vdisk, ok := disk.(*object.VirtualDisk); ok {
fmt.Printf(" - 磁盘: %s\n", vdisk.DeviceInfo.GetDescription().Summary)
}
}
}
}
}
这段代码演示了:
- 使用 IP、用户名和密码建立到 vCenter 的连接
- 获取默认数据中心
- 列出所有主机系统
- 列出所有虚拟机
- 获取特定虚拟机的虚拟磁盘信息
要运行此代码,请将 vCenterIP、username 和 password 替换为你的实际 vCenter 凭据。代码会自动处理 SSL 证书验证(通过 true 参数启用)。
对于生产环境,建议添加错误处理和更完善的资源收集逻辑。你可以扩展此代码来收集其他资源类型,如数据存储、网络等。

