[libvirt] [OSSTEST PATCH 1/2] libvirt: Check migration capabilities using proper XML parser
Jim Fehlig
jfehlig at suse.com
Wed Oct 5 23:50:59 UTC 2016
On 10/04/2016 11:02 AM, Ian Jackson wrote:
> Do not grep the virsh capabilities output (!) Instead, parse the XML
> using perl's XML modules and look for the specific feature flag using
> an XPATH pattern.
>
> AFAICT from looking at the XML, that's
>
> <capabilities>
> <host>
> <migration_features>
> <live/>
>
> But the original code does not test for <live/>.
>
> Xen could in principle (and AIUI might in the future, on ARM) support
> save/restore but not live migration. Currently it supports neither.
>
> I don't know whether libvirt's capabilities system can capture this
> distinction. libvirt.git#1d37a4c4 "libxl: detect support for save and
> restore" suggests not.
That's correct. But as Martin suggested in 2/2, libvirt could be enhanced to
report the distinction if/when needed.
>
> Perhaps relatedly, I am not sure whether this test should be changed
> to look for the xpath
> /capabilities/host/migration_features/live
> instead. The schema (libvirt.git/docs/schemas/capability.rng) seems
> to suggest that it probably should.
Agreed. migrate_check() should look for
/capabilities/host/migration_features/live.
Regards,
Jim
>
> For now, this osstest commit has no ultimate functional change (with
> libvirt output as it currently appears to be on real hosts).
>
> Signed-off-by: Ian Jackson <Ian.Jackson at eu.citrix.com>
> CC: Julien Grall <julien.grall at arm.com>
> CC: Jim Fehlig <jfehlig at suse.com>
> ---
> Osstest/Toolstack/libvirt.pm | 17 ++++++++++++++---
> 1 file changed, 14 insertions(+), 3 deletions(-)
>
> diff --git a/Osstest/Toolstack/libvirt.pm b/Osstest/Toolstack/libvirt.pm
> index 69ff0bb..b7db7af 100644
> --- a/Osstest/Toolstack/libvirt.pm
> +++ b/Osstest/Toolstack/libvirt.pm
> @@ -21,6 +21,8 @@ use strict;
> use warnings;
>
> use Osstest::TestSupport;
> +use XML::LibXML::XPathContext;
> +use XML::LibXML;
>
> sub new {
> my ($class, $ho, $methname,$asset) = @_;
> @@ -72,6 +74,17 @@ sub shutdown_wait ($$$) {
> guest_await_destroy($gho,$timeout);
> }
>
> +sub _check_capability ($$) {
> + my ($self, $xpath) = @_;
> + my $ho = $self->{Host};
> + my $caps = target_cmd_output_root($ho, 'virsh capabilities');
> + my $stash = open_unique_stashfile('virsh-capabilities');
> + my $dom = XML::LibXML->load_xml(string => $caps);
> + my $xc = XML::LibXML::XPathContext->new($dom);
> + my @nodes = $xc->findnodes($xpath);
> + return !!@nodes;
> +}
> +
> sub migrate_check ($$) {
> my ($self, $local) = @_;
> my $rc;
> @@ -80,9 +93,7 @@ sub migrate_check ($$) {
> # local migration is not supported
> $rc = 1;
> } else {
> - my $ho = $self->{Host};
> - my $caps = target_cmd_output_root($ho, "virsh capabilities");
> - $rc = ($caps =~ m/<migration_features>/) ? 0 : 1
> + $rc = $self->check_capability('/capabilities/host/migration_features');
> }
>
> logm("rc=$rc");
>
More information about the libvir-list
mailing list