This series contains code I mostly wrote some 6 months ago as an experiment. I've tidied it up and attempted to integrate it into the libvirt build system. Overall I much prefer the new impl of virt-host-validate, as explained in the commit message, I've wanted todo it this way for a long time, but was put off by C's XML handling verbosity. The main problem I've hit in integrating this work is the RPM build process integration. When building interactively, Go will dynamically download the 3rd party deps from git, similar to how we dynamically pull down gnulib. The difference is that this must happen for end users using tarballs too, not just devs usingn git. We could bundle the deps with our tarball the same way we do with gnulib, but Fedora would not accept using this, as it wants unbundled Go deps. I've done some things in the spec which makes this work against unbundled sources, but this still fails in mock as we don't get the build-id set in the resulting binary. I have attempted to fix that by passing extra flags to go build, but it still fails, so I've got some bug there. The resulting spec rules are very very very unpleasant, having to hardcode a bunch of build flags we should never touch. I've spoken with Nichlos Mailhot who is the Fedora Go packaging expert, who has basically confirmed my experiance that there is no nice solution to what I'm trying todo with the build process. He strongly recommends that we do *not* try to integrate Go into our existing build process, and that we instead keep any Go code as a completely seperate git repo that we build & install separately. This would make the RPM packaging much much simpler to deal with. Given what I've tried here, I'm inclined to agree with his recommendation. In the case of virt-host-validate, this is actually quite a straightforward thing to deal with, as the new impl of virt-host-validate has no direct dep wrt existing lkibvirt code in either direction. So we can trivially put it in a separate git repo. We would merely need an RPM dep from libvirt.spec.in to make the sure the external project gets pulled in on install of libvirt-daemon. Thus this patch is *NOT* something I'm proposing to merge as is. The code itself is fine, but it will need to go into a new git repo of its own. Daniel P. Berrangé (1): tools: rewrite virt-host-validate in Go to be data driven configure.ac | 1 + libvirt.spec.in | 23 + m4/virt-golang.m4 | 46 ++ m4/virt-host-validate.m4 | 8 +- po/POTFILES | 5 - tools/Makefile.am | 59 +- tools/host-validate/go.mod | 8 + tools/host-validate/go.sum | 4 + tools/host-validate/main.go | 98 +++ tools/host-validate/pkg/engine.go | 469 +++++++++++ tools/host-validate/pkg/facts.go | 784 +++++++++++++++++++ tools/host-validate/pkg/facts_test.go | 67 ++ tools/host-validate/pkg/xml_utils.go | 287 +++++++ tools/host-validate/rules/acpi.xml | 29 + tools/host-validate/rules/builtin.xml | 33 + tools/host-validate/rules/cgroups.xml | 403 ++++++++++ tools/host-validate/rules/cpu.xml | 148 ++++ tools/host-validate/rules/devices.xml | 54 ++ tools/host-validate/rules/freebsd-kernel.xml | 14 + tools/host-validate/rules/iommu.xml | 93 +++ tools/host-validate/rules/namespaces.xml | 94 +++ tools/host-validate/rules/pci.xml | 9 + tools/virt-host-validate-bhyve.c | 77 -- tools/virt-host-validate-bhyve.h | 24 - tools/virt-host-validate-common.c | 419 ---------- tools/virt-host-validate-common.h | 85 -- tools/virt-host-validate-lxc.c | 87 -- tools/virt-host-validate-lxc.h | 24 - tools/virt-host-validate-qemu.c | 116 --- tools/virt-host-validate-qemu.h | 24 - tools/virt-host-validate.c | 152 ---- tools/virt-host-validate.pod | 12 +- 32 files changed, 2693 insertions(+), 1063 deletions(-) create mode 100644 m4/virt-golang.m4 create mode 100644 tools/host-validate/go.mod create mode 100644 tools/host-validate/go.sum create mode 100644 tools/host-validate/main.go create mode 100644 tools/host-validate/pkg/engine.go create mode 100644 tools/host-validate/pkg/facts.go create mode 100644 tools/host-validate/pkg/facts_test.go create mode 100644 tools/host-validate/pkg/xml_utils.go create mode 100644 tools/host-validate/rules/acpi.xml create mode 100644 tools/host-validate/rules/builtin.xml create mode 100644 tools/host-validate/rules/cgroups.xml create mode 100644 tools/host-validate/rules/cpu.xml create mode 100644 tools/host-validate/rules/devices.xml create mode 100644 tools/host-validate/rules/freebsd-kernel.xml create mode 100644 tools/host-validate/rules/iommu.xml create mode 100644 tools/host-validate/rules/namespaces.xml create mode 100644 tools/host-validate/rules/pci.xml delete mode 100644 tools/virt-host-validate-bhyve.c delete mode 100644 tools/virt-host-validate-bhyve.h delete mode 100644 tools/virt-host-validate-common.c delete mode 100644 tools/virt-host-validate-common.h delete mode 100644 tools/virt-host-validate-lxc.c delete mode 100644 tools/virt-host-validate-lxc.h delete mode 100644 tools/virt-host-validate-qemu.c delete mode 100644 tools/virt-host-validate-qemu.h delete mode 100644 tools/virt-host-validate.c -- 2.21.0 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list