Table of Contents
Question content
Solution
Home Backend Development Golang Golang libvirt guest-agent is not available

Golang libvirt guest-agent is not available

Feb 09, 2024 pm 08:48 PM
Concurrent requests

Golang libvirt guest-agent 不可用

php editor Youzi found that recently some users reported that they encountered unavailability problems when using libvirt guest-agent in Golang. libvirt guest-agent is part of the libvirt library and is used to communicate with the guest operating system in a virtual machine. However, some users have experienced connectivity issues or functionality glitches when trying to use it. This is a frustrating issue for developers who rely on libvirt guest-agent for virtual machine management and monitoring. Next, we'll explore possible causes and solutions to help resolve this issue.

Question content

I am trying to communicate with a guest agent on a qemu instance via the libvirt golang api. However, it always refuses my connection to

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')"}
Copy after login

Even if the qemu instance is fully started and the guest agent is accessible via the command line

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

Is this a bug in the implementation or do I have to register the proxy somewhere in the go code? I can't find a reference in the documentation.

    <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>
Copy after login

Thanks!

Solution

I don’t know what the final reason is. I have a loop and am accessing, or more specifically, trying to access a proxy. I changed it to use a timeout of 500ms but it didn't work.

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()
        }
    }
}
Copy after login

Additionally, I encountered some stability issues (i.e. when multiple concurrent requests were made to the connection, it would sometimes get corrupted). I found some articles online suggesting adding users to the kvm group. This works for me.

The above is the detailed content of Golang libvirt guest-agent is not available. For more information, please follow other related articles on the PHP Chinese website!

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

AI Hentai Generator

AI Hentai Generator

Generate AI Hentai for free.

Hot Article

R.E.P.O. Energy Crystals Explained and What They Do (Yellow Crystal)
2 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
Repo: How To Revive Teammates
4 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: How To Get Giant Seeds
4 weeks ago By 尊渡假赌尊渡假赌尊渡假赌

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

The difference between nodejs and tomcat The difference between nodejs and tomcat Apr 21, 2024 am 04:16 AM

The main differences between Node.js and Tomcat are: Runtime: Node.js is based on JavaScript runtime, while Tomcat is a Java Servlet container. I/O model: Node.js uses an asynchronous non-blocking model, while Tomcat is synchronous blocking. Concurrency handling: Node.js handles concurrency through an event loop, while Tomcat uses a thread pool. Application scenarios: Node.js is suitable for real-time, data-intensive and high-concurrency applications, and Tomcat is suitable for traditional Java web applications.

Is nodejs a back-end development language? Is nodejs a back-end development language? Apr 21, 2024 am 05:09 AM

Yes, Node.js is a backend development language. It is used for back-end development, including handling server-side business logic, managing database connections, and providing APIs.

How to create a scalable API gateway using NIO technology in Java functions? How to create a scalable API gateway using NIO technology in Java functions? May 04, 2024 pm 01:12 PM

Answer: Using NIO technology you can create a scalable API gateway in Java functions to handle a large number of concurrent requests. Steps: Create NIOChannel, register event handler, accept connection, register data, read and write handler, process request, send response

Is redis a non-relational database? Is redis a non-relational database? Apr 20, 2024 am 05:36 AM

Redis is a non-relational database that stores data in key-value pairs. It has the characteristics of schema, key-value storage, high concurrency and persistence, and is suitable for scenarios such as caching, session management, queues and distributed locks.

How to conduct concurrency testing and debugging in Java concurrent programming? How to conduct concurrency testing and debugging in Java concurrent programming? May 09, 2024 am 09:33 AM

Concurrency testing and debugging Concurrency testing and debugging in Java concurrent programming are crucial and the following techniques are available: Concurrency testing: Unit testing: Isolate and test a single concurrent task. Integration testing: testing the interaction between multiple concurrent tasks. Load testing: Evaluate an application's performance and scalability under heavy load. Concurrency Debugging: Breakpoints: Pause thread execution and inspect variables or execute code. Logging: Record thread events and status. Stack trace: Identify the source of the exception. Visualization tools: Monitor thread activity and resource usage.

Can nodejs write front-end? Can nodejs write front-end? Apr 21, 2024 am 05:00 AM

Yes, Node.js can be used for front-end development, and key advantages include high performance, rich ecosystem, and cross-platform compatibility. Considerations to consider are learning curve, tool support, and small community size.

Performance gap between redis and mysql Performance gap between redis and mysql Apr 19, 2024 pm 10:54 PM

The performance differences between Redis and MySQL are obvious: 1. Reading performance: Redis memory storage has fast reading speed, while MySQL disk storage has reading limited by disk I/O. 2. Write performance: MySQL transaction model ensures data consistency, and write performance is usually better. Redis asynchronous writes can cause data loss. 3. Concurrency: Redis single-threaded architecture and event loop, high concurrency processing capabilities, MySQL multi-threaded architecture, concurrency is affected by the number of connections. 4. Data modeling: The Redis key-value data model is suitable for simple key/value pair storage, and MySQL has rich data modeling functions and supports relationships and constraints. 5. Scalability: Redis sharding and replication are easy to expand, MySQL cluster and

Which one has better web performance, golang or java? Which one has better web performance, golang or java? Apr 21, 2024 am 12:49 AM

Golang is better than Java in terms of web performance for the following reasons: a compiled language, directly compiled into machine code, has higher execution efficiency. Efficient garbage collection mechanism reduces the risk of memory leaks. Fast startup time without loading the runtime interpreter. Request processing performance is similar, and concurrent and asynchronous programming are supported. Lower memory usage, directly compiled into machine code without the need for additional interpreters and virtual machines.

See all articles