使用simulator测试govmomi vapi rest客户端时出现404 Not Found错误
问题原因
- 你测试代码中使用的
simulator.ESX()是模拟独立ESXi主机的模型,ESXi原生不提供vAPI REST服务,不会注册/rest/*路径下的相关路由,所以请求session接口时直接返回404。 - 你之前用simulator跑通的是SOAP协议相关的客户端测试,SOAP接口是ESXi和vCenter共有的能力,所以ESX模型下可以正常运行,但vAPI REST是vCenter专属的接口集,ESX模型不会加载这部分逻辑。
- 你匿名导入的
github.com/vmware/govmomi/vapi/simulator只会在vCenter模拟模型(VPX)下自动注册REST路由,ESX模型下不会触发路由注册。
修复方案
只需要把测试代码中的模型初始化从simulator.ESX()替换为simulator.VPX()即可,VPX模型对应模拟vCenter Server实例,会自动加载所有vAPI REST接口的模拟实现。
修复后的测试代码核心部分如下:
func TestGetRestClient(t *testing.T){ ctx := context.Background() // 替换ESX()为VPX(),模拟vCenter环境 model := simulator.VPX() defer model.Remove() err := model.Create() if err != nil { t.Fatal(err) } server := model.Service.NewServer() defer server.Close() testUrl := server.URL var client RestClient = RestClient{url: testUrl,} _, err := client.GetRestClient(ctx) if err != nil { t.Errorf("err = %v", err) return } }
注意:原测试代码里把
net/url包名和局部变量重名了,虽然不影响当前逻辑,但建议把局部变量改名为testUrl这类名字,避免后续调用url包方法时出现变量遮蔽问题。
改完之后再运行测试,就可以正常完成REST客户端登录,不会再出现404错误。你的业务代码本身没有问题,对接真实vCenter时可以正常运行,问题仅出在测试用的模拟环境选型错误。
内容的提问来源于stack exchange,提问作者temptech
相关产品推荐
相关产品推荐

