Rumah >pembangunan bahagian belakang >Golang >Agen tetamu Golang libvirt tidak tersedia
Editor PHP Youzi mendapati bahawa baru-baru ini beberapa pengguna melaporkan bahawa mereka menghadapi masalah ketaksediaan apabila menggunakan libvirt guest-agent di Golang. libvirt guest-agent ialah sebahagian daripada perpustakaan libvirt dan digunakan untuk berkomunikasi dengan sistem pengendalian tetamu dalam mesin maya. Walau bagaimanapun, sesetengah pengguna mengalami masalah sambungan atau gangguan fungsi apabila cuba menggunakannya. Ini adalah isu yang mengecewakan bagi pembangun yang bergantung pada ejen tetamu libvirt untuk pengurusan dan pemantauan mesin maya. Seterusnya, kami akan meneroka kemungkinan punca dan penyelesaian untuk membantu menyelesaikan isu ini.
Saya cuba berkomunikasi dengan ejen tetamu pada instance qemu melalui libvirt golang api. Walau bagaimanapun, ia sentiasa menolak sambungan saya dengan
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')"}
Walaupun contoh qemu dimulakan sepenuhnya dan ejen tetamu tersedia melalui baris arahan
sudo virsh qemu-agent-command test-vm '{"execute":"guest-info"}'
Adakah ini pepijat dalam pelaksanaan atau adakah saya perlu mendaftarkan proksi di suatu tempat dalam kod go? Saya tidak dapat mencari rujukan dalam dokumentasi.
<channel type='unix'> <source mode='bind' path='/var/lib/libvirt/qemu/channel/target/domain-6-test-vm/org.qemu.guest_agent.0'/> <target type='virtio' name='org.qemu.guest_agent.0' state='connected'/> <alias name='channel0'/> <address type='virtio-serial' controller='0' bus='0' port='1'/> </channel>
Terima kasih!
Saya tidak tahu apa sebab terakhir. Saya mempunyai gelung dan sedang mengakses, atau lebih khusus lagi, cuba mengakses proksi. Saya menukarnya untuk menggunakan tamat masa 500ms tetapi ia tidak berfungsi.
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() } } }
Selain itu, saya menghadapi beberapa isu kestabilan (iaitu apabila berbilang permintaan serentak dibuat kepada sambungan, kadangkala ia akan rosak). Saya menjumpai beberapa artikel dalam talian yang mencadangkan penambahan pengguna pada kumpulan kvm
. Ini berfungsi untuk saya.
Atas ialah kandungan terperinci Agen tetamu Golang libvirt tidak tersedia. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!