文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Golang libvirt guest-agent 不可用

2024-02-09 20:57

关注

php小编柚子发现,最近一些用户反馈在Golang中使用libvirt guest-agent时遇到了不可用的问题。libvirt guest-agent是libvirt库的一部分,用于与虚拟机中的客户操作系统进行通信。然而,一些用户在尝试使用它时遇到了连接问题或功能失效的情况。这对于那些依赖libvirt guest-agent进行虚拟机管理和监控的开发人员来说是一个令人沮丧的问题。接下来,我们将探讨可能的原因和解决方案,帮助解决这个问题。

问题内容

我尝试通过 libvirt golang api 与 qemu 实例上的来宾代理进行通信。但是,它总是拒绝我与的连接

2022-12-02t00:10:43.799+0100    dpanic  test/main.go:335    failed to connect to guest  {"error": "virerror(code=86, domain=10, message='guest agent is not responding: qemu guest agent is not connected')"}

即使 qemu 实例已完全启动并且可以通过命令行使用来宾代理

sudo virsh qemu-agent-command test-vm '{"execute":"guest-info"}'

这是实现中的错误还是我必须在 go 代码中的某个位置注册代理?我无法在文档中找到参考资料。

    
      
      
      
      

谢谢!

解决方法

不知道最后是什么原因。我有一个循环并且正在访问,或者更具体地说,尝试访问代理。我将其更改为使用 500 毫秒的超时,但它不起作用。

type qemuStatusResponse struct {
    Return struct {
        Exitcode int    `json:"exitcode,omitempty"`
        OutData  string `json:"out-data,omitempty"`
        Exited   bool   `json:"exited,omitempty"`
        ErrData  string `json:"err-data,omitempty"`
    } `json:"return,omitempty"`
}

func (l *LibvirtInstance) waitForCompletion(ctx context.Context, pid int, domain *libvirt.Domain) (response *qemuStatusResponse, err error) {
    response = &qemuStatusResponse{}

    ticker := time.NewTicker(500 * time.Millisecond)
    defer ticker.Stop()
    for {
        select {
        case <-ticker.C:
            result, err := domain.QemuAgentCommand(
                fmt.Sprintf(`
                {
                    "execute": "guest-exec-status",
                    "arguments": {
                        "pid": %d
                    }
                    }`, pid),
                libvirt.DOMAIN_QEMU_AGENT_COMMAND_BLOCK, 0)
            if err != nil {
                return nil, err
            }
            if err := json.Unmarshal([]byte(result), response); err != nil {
                return nil, err
            }
            if response.Return.Exited {
                return response, nil
            }
        case <-ctx.Done():
            return nil, ctx.Err()
        }
    }
}

此外,我遇到了一些稳定性问题(即,当对连接执行多个并发请求时,它有时会被破坏)。我在网上发现一些文章建议将用户添加到 kvm 组。这对我有用。

以上就是Golang libvirt guest-agent 不可用的详细内容,更多请关注编程网其它相关文章!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯