[libvirt] [PATCH RFC] Add a virt-host-validate command to sanity check HV config
Daniel P. Berrange
berrange at redhat.com
Fri Jan 27 15:04:59 UTC 2012
On Tue, Jan 10, 2012 at 02:48:18PM -0700, Eric Blake wrote:
> On 01/10/2012 10:33 AM, Daniel P. Berrange wrote:
>
> Missing changes to libvirt.spec.in to actually install it as part of the
> appropriate rpm (and probably to mingw32-libvirt.spec.in to exclude it,
> since neither kvm nor LXC is supported natively on mingw, leaving
> nothing to check for).
Actually I think it is reasonable to include the command for Mingw32.
I made it conditionally include the QEMU & LXC checks. Now it will
technically be a no-op on Win32 now, but someone could add checks for
existance of virtualbox perhaps.
> > +
> > +virt_host_validate_LDFLAGS = \
> > + $(WARN_LDFLAGS) \
> > + $(COVERAGE_LDFLAGS) \
> > + $(NULL)
> > +
> > +virt_host_validate_LDADD = \
> > + $(WARN_CFLAGS) \
>
> We shouldn't need $(WARN_CFLAGS) for LDADD, especially since...
Yes, that's a bug.
> > + }
> > + va_end(args);
> > +
> > + fprintf(stdout, "%6s: Checking %-60s: ", prefix, msg);
>
> Do we want to provide translation of these messages? Or are you okay
> with hard-coding it to the English language, regardless of locale?
Yes, I added i18n to the updated version
> > + VIR_FREE(msg);
> > +}
> > +
> > +void virHostMsgPass(void)
> > +{
> > + fprintf(stdout, "\033[32mPASS\033[0m\n");
>
> Are we sure that these particular terminal escape sequences will work
> everywhere, or should we be making things conditional? And if
> conditional, what do we depend on? checking isatty(1), linking against
> ncurses, ...?
I made it conditional on isatty() in v2
>
> > +int virHostValidateDevice(const char *hvname,
> > + const char *devname,
> > + virHostValidateLevel level,
> > + const char *hint)
> > +{
> > + virHostMsgCheck(hvname, "for device %s", devname);
> > +
> > + if (access(devname, R_OK|W_OK) < 0) {
> > + virHostMsgFail(level, hint);
> > + return -1;
> > + }
>
> Is this going to cause us grief if virt-host-validate is run as ordinary
> users instead of root?
Actually it is fine - /dev/kvm should be accessible & you'll get a
note if it isn't. For other things it will at least alert users that
if using libvirt non-root, they'll lack certain features
> > + fclose(fp);
>
> Doesn't 'make syntax-check' force us to use VIR_[FORCE_]FCLOSE here?
Yes it did :-)
> > +int virHostValidateLinuxKernel(const char *hvname,
> > + int version,
> > + virHostValidateLevel level,
> > + const char *hint)
> > +{
>
> It sounds like this is Linux-only. Should we be conditionally compiling
> things so that this helper app is only built and installed on Linux?
I don't think the helper needs to be conditional, since uname() is a
standard API call.
> > +
> > + if (sscanf(uts.release, "%d.%d.%d", &major, &minor, µ) != 3) {
> > + micro = 0;
> > + if (sscanf(uts.release, "%d.%d", &major, &minor) != 2) {
> > + virHostMsgFail(level, hint);
> > + return -1;
> > + }
> > + }
>
> Rather than hand-parse things, can't you just use util.c's
> virParseVersionString?
Yes, that works too
> > +#include <config.h>
> > +
> > +#include "virt-host-validate-lxc.h"
> > +#include "virt-host-validate-common.h"
> > +
> > +int virHostValidateLXC(void)
>
> Should this file (and virt-host-validate-qemu) only be compiled when
> their respective hypervisor drivers are also being compiled? That is,
> you can build libvirtd with qemu but no lxc support, in which case, this
> helper app checking for lxc situations seems odd.
I have now made it conditional
> > +
> > +static void
> > +show_help(FILE *out, const char *argv0)
> > +{
> > + fprintf(out, "syntax: %s [OPTIONS] [HVTYPE]\n", argv0);
>
> What options? I don't see any support for --help or --version.
There are some in v2 :-)
> > + if (!textdomain(PACKAGE)) {
> > + perror("textdomain");
> > + return EXIT_FAILURE;
> > + }
> > +
> > + if (argc > 2) {
> > + fprintf(stderr, "too many command line arguments\n");
> > + show_help(stderr, argv[0]);
> > + return EXIT_FAILURE;
> > + }
>
> Should we be parsing options before this argc > 2 check?
I use getopt_long() now
Daniel
--
|: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :|
|: http://libvirt.org -o- http://virt-manager.org :|
|: http://autobuild.org -o- http://search.cpan.org/~danberr/ :|
|: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :|
More information about the libvir-list
mailing list