[libvirt] [PATCH 1/2] Add a new example to illustrate domain migration

sahid sahid.ferdjaoui at cloudwatt.com
Sun Apr 13 13:50:44 UTC 2014


This commit adds a new example to illustrate peer to
peer domain migration with virDomainMigrateToURI.

Signed-off-by: Sahid Orentino Ferdjaoui <sahid.ferdjaoui at cloudwatt.com>
---
 .gitignore                       |  1 +
 Makefile.am                      |  2 +-
 configure.ac                     |  1 +
 examples/dommigrate/Makefile.am  | 26 ++++++++++++++
 examples/dommigrate/dommigrate.c | 78 ++++++++++++++++++++++++++++++++++++++++
 libvirt.spec.in                  |  3 +-
 6 files changed, 109 insertions(+), 2 deletions(-)
 create mode 100644 examples/dommigrate/Makefile.am
 create mode 100644 examples/dommigrate/dommigrate.c

diff --git a/.gitignore b/.gitignore
index 0513a33..8c3b870 100644
--- a/.gitignore
+++ b/.gitignore
@@ -74,6 +74,7 @@
 /examples/object-events/event-test
 /examples/dominfo/info1
 /examples/domsuspend/suspend
+/examples/dommigrate/dommigrate
 /examples/hellolibvirt/hellolibvirt
 /examples/openauth/openauth
 /gnulib/lib/*
diff --git a/Makefile.am b/Makefile.am
index 9847ff0..b961c0e 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -23,7 +23,7 @@ SUBDIRS = . gnulib/lib include src daemon tools docs gnulib/tests \
   tests po examples/object-events examples/hellolibvirt \
   examples/dominfo examples/domsuspend examples/apparmor \
   examples/xml/nwfilter examples/openauth examples/systemtap \
-  tools/wireshark
+  tools/wireshark examples/dommigrate
 
 ACLOCAL_AMFLAGS = -I m4
 
diff --git a/configure.ac b/configure.ac
index ea85851..e461001 100644
--- a/configure.ac
+++ b/configure.ac
@@ -2724,6 +2724,7 @@ AC_CONFIG_FILES([\
         examples/object-events/Makefile \
         examples/domsuspend/Makefile \
         examples/dominfo/Makefile \
+        examples/dommigrate/Makefile \
         examples/openauth/Makefile \
         examples/hellolibvirt/Makefile \
         examples/systemtap/Makefile \
diff --git a/examples/dommigrate/Makefile.am b/examples/dommigrate/Makefile.am
new file mode 100644
index 0000000..43b55fc
--- /dev/null
+++ b/examples/dommigrate/Makefile.am
@@ -0,0 +1,26 @@
+## Copyright (C) 2014 Cloudwatt
+## Copyright (C) 2005-2013 Red Hat, Inc.
+##
+## This library is free software; you can redistribute it and/or
+## modify it under the terms of the GNU Lesser General Public
+## License as published by the Free Software Foundation; either
+## version 2.1 of the License, or (at your option) any later version.
+##
+## This library is distributed in the hope that it will be useful,
+## but WITHOUT ANY WARRANTY; without even the implied warranty of
+## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+## Lesser General Public License for more details.
+##
+## You should have received a copy of the GNU Lesser General Public
+## License along with this library.  If not, see
+## <http://www.gnu.org/licenses/>.
+
+INCLUDES = \
+	-I$(top_builddir)/include -I$(top_srcdir)/include	\
+	-I$(top_builddir)/gnulib/lib -I$(top_srcdir)/gnulib/lib	\
+	-I$(top_srcdir)/src -I$(top_srcdir)/src/util		\
+	-I$(top_srcdir)
+noinst_PROGRAMS = dommigrate
+dommigrate_CFLAGS = $(WARN_CFLAGS)
+dommigrate_SOURCES = dommigrate.c
+dommigrate_LDADD = $(top_builddir)/src/libvirt.la
diff --git a/examples/dommigrate/dommigrate.c b/examples/dommigrate/dommigrate.c
new file mode 100644
index 0000000..a8f951e
--- /dev/null
+++ b/examples/dommigrate/dommigrate.c
@@ -0,0 +1,78 @@
+/* This file is largely inspired from hellolibvirt and contains a trivial
+   example that illustrate p2p domain migration with libvirt. */
+
+#include <config.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <libvirt/libvirt.h>
+#include <libvirt/virterror.h>
+
+#include "virstring.h"
+
+static int
+usage(char *prgn, int ret)
+{
+    printf("Usage: %s <src_uri> <dst_uri> <domain>\n", prgn);
+    return ret;
+}
+
+int
+main(int argc, char *argv[])
+{
+    char *src_uri, *dst_uri;
+    int ret = 0, id;
+    virConnectPtr conn = NULL;
+    virDomainPtr dom = NULL;
+
+    if (argc < 4) {
+        ret = usage(argv[0], 1);
+        goto out;
+    }
+
+    src_uri = argv[1];
+    dst_uri = argv[2];
+    virStrToLong_i(argv[3], NULL, 10, &id);
+
+    printf("Attempting to connect to the source hypervisor\n");
+    conn = virConnectOpenAuth(src_uri, virConnectAuthPtrDefault, 0);
+    if (!conn) {
+        ret = 1;
+        fprintf(stderr, "No connection to the source hypervisor: %s\n",
+                virGetLastErrorMessage());
+        goto out;
+    }
+    src_uri = virConnectGetURI(conn);
+    if (!src_uri) {
+        ret = 1;
+        fprintf(stderr, "Failed to get uri for the source connection: %s\n",
+                virGetLastErrorMessage());
+        goto disconnect;
+    }
+
+    printf("Attempting to retrieve domain id: %d\n", id);
+    dom = virDomainLookupByID(conn, id);
+    if (!dom) {
+        fprintf(stderr, "Failed to find domain %d\n", id);
+        goto disconnect;
+    }
+
+    printf("Attempting to migrate to: %s\n", dst_uri);
+    if ((ret = virDomainMigrateToURI(dom, dst_uri,
+                                     VIR_MIGRATE_PEER2PEER,
+                                     NULL, 0)) != 0) {
+        fprintf(stderr, "Failed to migrate domain %d\n", id);
+        goto disconnect;
+    }
+
+    printf("Migration finished\n");
+
+ disconnect:
+    if (dom != NULL)
+        virDomainFree(dom);
+    if (conn != NULL)
+        virConnectClose(conn);
+
+ out:
+    return ret;
+}
diff --git a/libvirt.spec.in b/libvirt.spec.in
index 4e70a41..a7d277b 100644
--- a/libvirt.spec.in
+++ b/libvirt.spec.in
@@ -1498,7 +1498,7 @@ rm -fr %{buildroot}
 # on RHEL 5, thus we need to expand it here.
 make install DESTDIR=%{?buildroot} SYSTEMD_UNIT_DIR=%{_unitdir}
 
-for i in object-events dominfo domsuspend hellolibvirt openauth xml/nwfilter systemtap
+for i in object-events dominfo domsuspend hellolibvirt openauth xml/nwfilter systemtap dommigrate
 do
   (cd examples/$i ; make clean ; rm -rf .deps .libs Makefile Makefile.in)
 done
@@ -2223,6 +2223,7 @@ exit 0
 %doc examples/object-events
 %doc examples/dominfo
 %doc examples/domsuspend
+%doc examples/dommigrate
 %doc examples/openauth
 %doc examples/xml
 %doc examples/systemtap
-- 
1.9.0




More information about the libvir-list mailing list