[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[RFC PATCH v1 0/8] qapi: add generator for Golang interface
From: |
Victor Toso |
Subject: |
[RFC PATCH v1 0/8] qapi: add generator for Golang interface |
Date: |
Sat, 2 Apr 2022 00:40:56 +0200 |
Hi,
Happy 1st April. Not a joke :) /* ugh, took me too long to send */
This series is about adding a generator in scripts/qapi to produce
Go data structures that can be used to communicate with QEMU over
QMP.
* Why Go?
There are quite a few Go projects that interact with QEMU over QMP
and they endup using a mix of different libraries with their own
code.
** Which projects?
The ones I've found so far:
- podman machine
https://github.com/containers/podman/tree/main/pkg/machine/qemu
- kata-containers (govmm)
https://github.com/kata-containers/kata-containers/tree/main/src/runtime/pkg/govmm
- lxd
https://github.com/lxc/lxd/tree/master/lxd/instance/drivers
- kubevirt (plain json strings)
https://github.com/kubevirt/kubevirt
(let me know if you know others)
* But Why?
I'm particularly interested in 3 out of 4 of the projects above and
only Kubevirt uses libvirt to handle QEMU. That means that every
QEMU releases where a QMP command, event or other data struct is
added, removed or changed, those projects need to check what changed
in QEMU and then address those changes in their projects, if needed.
The idea behind generating Go data structures is that we can keep a
Go module which can have releases that follow QEMU releases.
The project that uses this Go module, only need to bump the module
version and it shall receive all the changes in their own vendored
code base.
* Status
There are a few rough edges to work on but this is usable. The major
thing I forgot to add is handling Error from Commands. It'll be the
first thing I'll work on next week.
If you want to start using this Today you can fetch it in at
https://gitlab.com/victortoso/qapi-go/
There are quite a few tests that I took from the examples in the
qapi schema. Coverage using go's cover tool is giving `28.6% of
statements`
I've uploaded the a static generated godoc output of the above Go
module here:
https://fedorapeople.org/~victortoso/qapi-go/rfc/victortoso.com/qapi-go/pkg/qapi/
* License
While the generator (golang.py in this series) is GPL v2, the
generated code needs to be compatible with other Golang projects,
such as the ones mentioned above. My intention is to keep a Go
module with a MIT license.
* Disclaimer to reviewers
This is my first serious python project so there'll be lots of
suggetions that I'll be happy to take and learn from.
Thanks for taking a look, let me know if you have questions, ideas
or suggestions.
Cheers,
Victor
Victor Toso (8):
qapi: golang: Generate qapi's enum types in Go
qapi: golang: Generate qapi's alternate types in Go
qapi: golang: Generate qapi's struct types in Go
qapi: golang: Generate qapi's union types in Go
qapi: golang: Generate qapi's event types in Go
qapi: golang: Generate qapi's command types in Go
qapi: golang: Add CommandResult type to Go
qapi: golang: document skip function visit_array_types
qapi/meson.build | 1 +
scripts/qapi/golang.py | 727 +++++++++++++++++++++++++++++++++++++++++
scripts/qapi/main.py | 2 +
3 files changed, 730 insertions(+)
create mode 100644 scripts/qapi/golang.py
--
2.35.1
- [RFC PATCH v1 0/8] qapi: add generator for Golang interface,
Victor Toso <=
- [RFC PATCH v1 1/8] qapi: golang: Generate qapi's enum types in Go, Victor Toso, 2022/04/01
- [RFC PATCH v1 2/8] qapi: golang: Generate qapi's alternate types in Go, Victor Toso, 2022/04/01
- [RFC PATCH v1 3/8] qapi: golang: Generate qapi's struct types in Go, Victor Toso, 2022/04/01
- [RFC PATCH v1 4/8] qapi: golang: Generate qapi's union types in Go, Victor Toso, 2022/04/01
- [RFC PATCH v1 5/8] qapi: golang: Generate qapi's event types in Go, Victor Toso, 2022/04/01
- [RFC PATCH v1 7/8] qapi: golang: Add CommandResult type to Go, Victor Toso, 2022/04/01
- [RFC PATCH v1 8/8] qapi: golang: document skip function visit_array_types, Victor Toso, 2022/04/01
- [RFC PATCH v1 6/8] qapi: golang: Generate qapi's command types in Go, Victor Toso, 2022/04/01
- Re: [RFC PATCH v1 0/8] qapi: add generator for Golang interface, Andrea Bolognani, 2022/04/19