]> xenbits.xensource.com Git - libvirt.git/commitdiff
Move docs/examples into examples/
authorDaniel P. Berrange <berrange@redhat.com>
Wed, 16 Sep 2009 12:07:48 +0000 (13:07 +0100)
committerDaniel P. Berrange <berrange@redhat.com>
Mon, 21 Sep 2009 13:41:46 +0000 (14:41 +0100)
* Makefile.am: Add examples/dominfo examples/domsuspend examples/python
  as SUBDIRS
* configure.in: Update AC_OUTPUT for new/old Makefiles
* docs/Makefile.am: Remove examples from SUBDIRS
* docs/examples/info1.c: Move to examples/dominfo/info1.c
* docs/examples/suspend.c: Move to examples/domsuspend/suspend.c
* docs/examples: Remove all remaining files
* docs/examples/python: Moved to examples/python/
* examples/dominfo/Makefile.am, examples/domsuspend/Makefile.am: New
  build files
* libvirt.spec.in: Update to take account of moved examples

34 files changed:
Makefile.am
configure.in
docs/Makefile.am
docs/examples/.gitignore [deleted file]
docs/examples/Makefile.am [deleted file]
docs/examples/examples.xml [deleted file]
docs/examples/examples.xsl [deleted file]
docs/examples/index.html [deleted file]
docs/examples/index.py [deleted file]
docs/examples/info1.c [deleted file]
docs/examples/python/.gitignore [deleted file]
docs/examples/python/Makefile.am [deleted file]
docs/examples/python/README [deleted file]
docs/examples/python/dominfo.py [deleted file]
docs/examples/python/domrestore.py [deleted file]
docs/examples/python/domsave.py [deleted file]
docs/examples/python/domstart.py [deleted file]
docs/examples/python/guava.xml [deleted file]
docs/examples/python/papaya.xml [deleted file]
docs/examples/suspend.c [deleted file]
examples/dominfo/.gitignore [new file with mode: 0644]
examples/dominfo/Makefile.am [new file with mode: 0644]
examples/dominfo/info1.c [new file with mode: 0644]
examples/domsuspend/.gitignore [new file with mode: 0644]
examples/domsuspend/Makefile.am [new file with mode: 0644]
examples/domsuspend/suspend.c [new file with mode: 0644]
examples/python/.gitignore [new file with mode: 0644]
examples/python/Makefile.am [new file with mode: 0644]
examples/python/README [new file with mode: 0644]
examples/python/dominfo.py [new file with mode: 0755]
examples/python/domrestore.py [new file with mode: 0755]
examples/python/domsave.py [new file with mode: 0755]
examples/python/domstart.py [new file with mode: 0755]
libvirt.spec.in

index ff45957803e04e759951273a87c2e91ea94774b9..3b01d1f1311a64713f39db78581d811040d7e696 100644 (file)
@@ -4,7 +4,8 @@ LCOV = lcov
 GENHTML = genhtml
 
 SUBDIRS = gnulib/lib include src daemon tools proxy docs gnulib/tests \
-  python tests po examples/domain-events/events-c examples/hellolibvirt
+  python tests po examples/domain-events/events-c examples/hellolibvirt \
+  examples/dominfo examples/domsuspend examples/python
 
 ACLOCAL_AMFLAGS = -I m4 -I gnulib/m4
 
index 5d498ae85279803f3bfa28c4d4a006f2b705fc35..cb5ce550bac344549180cfdf8248c51af91baaf7 100644 (file)
@@ -1685,8 +1685,7 @@ test "x$srcdir" = x. && ! test -f COPYING &&
 cp -f COPYING.LIB COPYING
 
 AC_OUTPUT(Makefile src/Makefile include/Makefile docs/Makefile \
-          docs/examples/Makefile docs/devhelp/Makefile \
-         docs/examples/python/Makefile \
+          docs/devhelp/Makefile \
          docs/schemas/Makefile \
          gnulib/lib/Makefile \
          gnulib/tests/Makefile \
@@ -1703,6 +1702,9 @@ AC_OUTPUT(Makefile src/Makefile include/Makefile docs/Makefile \
           tests/xencapsdata/Makefile \
           tests/confdata/Makefile \
           examples/domain-events/events-c/Makefile \
+          examples/domsuspend/Makefile \
+          examples/dominfo/Makefile \
+          examples/python/Makefile \
           examples/hellolibvirt/Makefile)
 
 AC_MSG_NOTICE([])
index fd96ba413fb19b66d802f620e36a3e4d7e075905..4cd11b005d37a916bb5545432896986991576566 100644 (file)
@@ -1,5 +1,5 @@
 ## Process this file with automake to produce Makefile.in
-SUBDIRS= schemas examples devhelp
+SUBDIRS= schemas devhelp
 
 # The directory containing the source code (if it contains documentation).
 DOC_SOURCE_DIR=../src
diff --git a/docs/examples/.gitignore b/docs/examples/.gitignore
deleted file mode 100644 (file)
index 5f0e251..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-.memdump
-Makefile.in
-Makefile
-.deps
-.libs
-info1
-suspend
diff --git a/docs/examples/Makefile.am b/docs/examples/Makefile.am
deleted file mode 100644 (file)
index 5129b5c..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-# -*- buffer-read-only: t -*- vi: set ro:
-# Beware this is autogenerated by index.py
-SUBDIRS=python
-INCLUDES = -I$(top_builddir)/include -I$(top_srcdir)/include -I@srcdir@/include
-DEPS = $(top_builddir)/src/libvirt.la
-LDADDS = @STATIC_BINARIES@ $(WARN_CFLAGS) $(top_builddir)/src/libvirt.la       $(COVERAGE_LDFLAGS)
-
-rebuild: examples.xml index.html
-
-examples.xml: index.py info1.c suspend.c
-       -@($(srcdir)/index.py)
-
-index.html: examples.xml examples.xsl $(top_srcdir)/docs/site.xsl
-       -@(if [ -x $(XSLTPROC) ] ; then                 \
-          $(XSLTPROC) examples.xsl examples.xml        \
-            && echo "Rebuilt web page"                 \
-            && xmllint --valid --noout index.html;     \
-          fi)
-
-install-data-local:
-       $(mkinstalldirs) $(DESTDIR)$(HTML_DIR)
-       -@INSTALL@ -m 0644 $(srcdir)/*.html $(srcdir)/*.c $(srcdir)/*.xml \
-         $(srcdir)/*.xsl $(DESTDIR)$(HTML_DIR)
-
-EXTRA_DIST=examples.xsl index.py examples.xml
-
-noinst_PROGRAMS=info1 suspend
-
-info1_SOURCES=info1.c
-info1_LDFLAGS=
-info1_DEPENDENCIES= $(DEPS)
-info1_LDADD= $(LDADDS)
-
-suspend_SOURCES=suspend.c
-suspend_LDFLAGS=
-suspend_DEPENDENCIES= $(DEPS)
-suspend_LDADD= $(LDADDS)
-
-valgrind:
-       $(MAKE) CHECKER='valgrind' tests
-
-tests: $(noinst_PROGRAMS)
-       @(echo '## examples regression tests')
-       @($(CHECKER) ./info1)
-       @($(CHECKER) ./suspend)
diff --git a/docs/examples/examples.xml b/docs/examples/examples.xml
deleted file mode 100644 (file)
index 24c5a48..0000000
+++ /dev/null
@@ -1,86 +0,0 @@
-<examples>
-  <example filename='info1.c'>
-    <synopsis>Extract information about Xen domain 0</synopsis>
-    <purpose>Demonstrate the basic use of the library to connect to the hypervisor and extract domain information.</purpose>
-    <usage>info1</usage>
-    <test>info1</test>
-    <author>Daniel Veillard</author>
-    <copy>see Copyright for the status of this software. </copy>
-    <section>Informations</section>
-    <includes>
-    </includes>
-    <uses>
-      <function line='43' file='libvirt' name='virDomainGetInfo'/>
-      <function line='53' file='libvirt' name='virDomainFree'/>
-      <function line='36' file='libvirt' name='virDomainLookupByID'/>
-      <function line='55' file='libvirt' name='virConnectClose'/>
-      <struct line='25' file='libvirt' name='virDomainInfo'/>
-      <function line='29' file='libvirt' name='virConnectOpenReadOnly'/>
-    </uses>
-  </example>
-  <example filename='suspend.c'>
-    <synopsis>Suspend a domain and then resume its execution</synopsis>
-    <purpose>Demonstrate the basic use of the library to suspend and resume a domain. If no id is given on the command line this script will suspend and resume the first domain found which is not Domain 0.</purpose>
-    <usage>suspend [id]</usage>
-    <test>suspend</test>
-    <author>Daniel Veillard</author>
-    <copy>see Copyright for the status of this software. </copy>
-    <section>Scheduling</section>
-    <includes>
-    </includes>
-    <uses>
-      <function line='31' file='libvirt' name='virDomainGetInfo'/>
-      <function line='111' file='libvirt' name='virConnectListDomains'/>
-      <function line='93' file='libvirt' name='virDomainFree'/>
-      <function line='73' file='libvirt' name='virDomainResume'/>
-      <function line='50' file='libvirt' name='virDomainLookupByID'/>
-      <function line='132' file='libvirt' name='virConnectClose'/>
-      <struct line='28' file='libvirt' name='virDomainInfo'/>
-      <function line='62' file='libvirt' name='virDomainSuspend'/>
-      <function line='100' file='libvirt' name='virConnectOpenReadOnly'/>
-    </uses>
-  </example>
-  <symbols>
-    <symbol name='virConnectClose'>
-      <ref filename='info1.c'/>
-      <ref filename='suspend.c'/>
-    </symbol>
-    <symbol name='virConnectListDomains'>
-      <ref filename='suspend.c'/>
-    </symbol>
-    <symbol name='virConnectOpenReadOnly'>
-      <ref filename='info1.c'/>
-      <ref filename='suspend.c'/>
-    </symbol>
-    <symbol name='virDomainFree'>
-      <ref filename='info1.c'/>
-      <ref filename='suspend.c'/>
-    </symbol>
-    <symbol name='virDomainGetInfo'>
-      <ref filename='info1.c'/>
-      <ref filename='suspend.c'/>
-    </symbol>
-    <symbol name='virDomainInfo'>
-      <ref filename='info1.c'/>
-      <ref filename='suspend.c'/>
-    </symbol>
-    <symbol name='virDomainLookupByID'>
-      <ref filename='info1.c'/>
-      <ref filename='suspend.c'/>
-    </symbol>
-    <symbol name='virDomainResume'>
-      <ref filename='suspend.c'/>
-    </symbol>
-    <symbol name='virDomainSuspend'>
-      <ref filename='suspend.c'/>
-    </symbol>
-  </symbols>
-  <sections>
-    <section name='Informations'>
-      <example filename='info1.c'/>
-    </section>
-    <section name='Scheduling'>
-      <example filename='suspend.c'/>
-    </section>
-  </sections>
-</examples>
diff --git a/docs/examples/examples.xsl b/docs/examples/examples.xsl
deleted file mode 100644 (file)
index b7ccba2..0000000
+++ /dev/null
@@ -1,144 +0,0 @@
-<?xml version="1.0"?>
-<xsl:stylesheet version="1.0"
-  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
-  xmlns:exsl="http://exslt.org/common"
-  extension-element-prefixes="exsl"
-  exclude-result-prefixes="exsl">
-
-  <xsl:import href="../site.xsl"/>
-
-  <xsl:variable name="href_base">../</xsl:variable>
-  <xsl:variable name="menu_name">Examples Menu</xsl:variable>
-
-  <xsl:variable name="toc">
-    <form action="../search.php"
-          enctype="application/x-www-form-urlencoded" method="get">
-      <input name="query" type="text" size="20" value=""/>
-      <input name="submit" type="submit" value="Search ..."/>
-    </form>
-    <ul><!-- style="margin-left: -1em" -->
-      <li><a href="{$href_base}index.html">Home</a></li>
-      <li><a style="font-weight:bold"
-             href="{$href_base}docs.html">Developer Menu</a></li>
-      <li><a style="font-weight:bold"
-             href="{$href_base}html/index.html">API Menu</a></li>
-      <xsl:for-each select="/examples/sections/section">
-        <li><a href="#{@name}"><xsl:value-of select="@name"/> Examples</a></li>
-      </xsl:for-each>
-      <li><a href="{$href_base}guidelines.html">XML Guidelines</a></li>
-    </ul>
-  </xsl:variable>
-
-  <xsl:template match="include">
-    <xsl:variable name="header" select="substring-before(substring-after(., '/'), '&gt;')"/>
-    <xsl:variable name="doc" select="concat('../html/libvirt-', $header, 'tml')"/>
-    <li><a href="{$doc}"><xsl:value-of select="."/></a></li>
-  </xsl:template>
-
-  <xsl:template match="typedef">
-    <xsl:variable name="name" select="@name"/>
-    <xsl:variable name="header" select="concat(@file, '.h')"/>
-    <xsl:variable name="doc" select="concat('../html/libvirt-', @file, '.html#', $name)"/>
-    <li> line <xsl:value-of select="@line"/>: Type <a href="{$doc}"><xsl:value-of select="$name"/></a> from <xsl:value-of select="$header"/></li>
-  </xsl:template>
-
-  <xsl:template match="function">
-    <xsl:variable name="name" select="@name"/>
-    <xsl:variable name="header" select="concat(@file, '.h')"/>
-    <xsl:variable name="doc" select="concat('../html/libvirt-', @file, '.html#', $name)"/>
-    <li> line <xsl:value-of select="@line"/>: Function <a href="{$doc}"><xsl:value-of select="$name"/></a> from <xsl:value-of select="$header"/></li>
-  </xsl:template>
-
-  <xsl:template match="macro">
-    <xsl:variable name="name" select="@name"/>
-    <xsl:variable name="header" select="concat(@file, '.h')"/>
-    <xsl:variable name="doc" select="concat('../html/libvirt-', @file, '.html#', $name)"/>
-    <li> line <xsl:value-of select="@line"/>: Macro <a href="{$doc}"><xsl:value-of select="$name"/></a> from <xsl:value-of select="$header"/></li>
-  </xsl:template>
-
-  <xsl:template match="example">
-    <xsl:variable name="filename" select="string(@filename)"/>
-    <h3><a name="{$filename}" href="{$filename}"><xsl:value-of select="$filename"/></a>: <xsl:value-of select="synopsis"/></h3>
-    <p><xsl:value-of select="purpose"/></p>
-    <p>Uses:</p>
-    <ul>
-    <xsl:for-each select="uses/*">
-      <xsl:sort select="@line" data-type="number"/>
-      <xsl:apply-templates select='.'/>
-    </xsl:for-each>
-    </ul>
-    <p>Usage:</p>
-    <p><xsl:value-of select="usage"/></p>
-    <p>Author: <xsl:value-of select="author"/></p>
-  </xsl:template>
-
-  <xsl:template match="section">
-    <li><p> <a href="#{@name}"><xsl:value-of select="@name"/></a> :</p>
-    <ul>
-    <xsl:for-each select="example">
-      <xsl:sort select='.'/>
-      <xsl:variable name="filename" select="@filename"/>
-      <li> <a href="#{$filename}"><xsl:value-of select="$filename"/></a>: <xsl:value-of select="/examples/example[@filename = $filename]/synopsis"/></li>
-    </xsl:for-each>
-    </ul>
-    </li>
-  </xsl:template>
-
-  <xsl:template match="sections">
-    <p> The examples are stored per section depending on the main focus
-    of the example:</p>
-    <ul>
-    <xsl:for-each select="section">
-      <xsl:sort select='.'/>
-      <xsl:apply-templates select='.'/>
-    </xsl:for-each>
-    </ul>
-    <p> Getting the compilation options and libraries dependancies needed
-to generate binaries from the examples is best done on Linux/Unix by using
-the pkg-config data which should have been installed as part of <i>make
-install</i> step or when installing the libvirt development package:</p>
-<pre>gcc -o example example.c `pkg-config libvirt --libs`</pre>
-  </xsl:template>
-
-  <xsl:template name="sections-list">
-    <xsl:for-each select="sections/section">
-      <xsl:variable name="section" select="@name"/>
-      <h2> <a name="{$section}"></a><xsl:value-of select="$section"/> Examples</h2>
-      <xsl:apply-templates select='/examples/example[section = $section]'/>
-    </xsl:for-each>
-  </xsl:template>
-
-  <xsl:template match="examples">
-    <xsl:variable name="title">Libvirt set of C code examples</xsl:variable>
-     <xsl:document href="index.html" method="xml" encoding="ISO-8859-1"
-         doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN"
-     doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-      <html>
-        <head>
-          <xsl:call-template name="style"/>
-          <xsl:element name="title">
-            <xsl:value-of select="$title"/>
-          </xsl:element>
-        </head>
-       <body>
-       <div id="container">
-         <div id="intro">
-           <div id="adjustments"/>
-           <div id="pageHeader"/>
-           <div id="content2">
-             <xsl:call-template name="titlebox">
-               <xsl:with-param name="title" select="$title"/>
-             </xsl:call-template>
-             <xsl:apply-templates select="sections"/>
-             <xsl:call-template name="sections-list"/>
-           </div>
-         </div>
-         <xsl:call-template name="linkList2"/>
-         <xsl:call-template name="bottom"/>
-       </div>
-       </body>
-      </html>
-    </xsl:document>
-  </xsl:template>
-
-</xsl:stylesheet>
diff --git a/docs/examples/index.html b/docs/examples/index.html
deleted file mode 100644 (file)
index 6709b35..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /><link rel="stylesheet" type="text/css" href="../libvirt.css" /><link rel="SHORTCUT ICON" href="/32favicon.png" /><title>Libvirt set of C code examples</title></head><body><div id="container"><div id="intro"><div id="adjustments"></div><div id="pageHeader"></div><div id="content2"><h1 class="style1">Libvirt set of C code examples</h1><p> The examples are stored per section depending on the main focus
-    of the example:</p><ul><li><p><a href="#Informations">Informations</a> :</p><ul><li><a href="#info1.c">info1.c</a>: Extract information about Xen domain 0</li></ul></li><li><p><a href="#Scheduling">Scheduling</a> :</p><ul><li><a href="#suspend.c">suspend.c</a>: Suspend a domain and then resume its execution</li></ul></li></ul><p> Getting the compilation options and libraries dependancies needed
-to generate binaries from the examples is best done on Linux/Unix by using
-the pkg-config data which should have been installed as part of <i>make
-install</i> step or when installing the libvirt development package:</p><pre>gcc -o example example.c `pkg-config libvirt --libs`</pre><h2><a name="Informations" id="Informations"></a>Informations Examples</h2><h3><a name="info1.c" href="info1.c" id="info1.c">info1.c</a>: Extract information about Xen domain 0</h3><p>Demonstrate the basic use of the library to connect to the hypervisor and extract domain information.</p><p>Uses:</p><ul><li> line 29: Function <a href="../html/libvirt-libvirt.html#virConnectOpenReadOnly">virConnectOpenReadOnly</a> from libvirt.h</li><li> line 36: Function <a href="../html/libvirt-libvirt.html#virDomainLookupByID">virDomainLookupByID</a> from libvirt.h</li><li> line 43: Function <a href="../html/libvirt-libvirt.html#virDomainGetInfo">virDomainGetInfo</a> from libvirt.h</li><li> line 53: Function <a href="../html/libvirt-libvirt.html#virDomainFree">virDomainFree</a> from libvirt.h</li><li> line 55: Function <a href="../html/libvirt-libvirt.html#virConnectClose">virConnectClose</a> from libvirt.h</li></ul><p>Usage:</p><p>info1</p><p>Author: Daniel Veillard</p><h2><a name="Scheduling" id="Scheduling"></a>Scheduling Examples</h2><h3><a name="suspend.c" href="suspend.c" id="suspend.c">suspend.c</a>: Suspend a domain and then resume its execution</h3><p>Demonstrate the basic use of the library to suspend and resume a domain. If no id is given on the command line this script will suspend and resume the first domain found which is not Domain 0.</p><p>Uses:</p><ul><li> line 31: Function <a href="../html/libvirt-libvirt.html#virDomainGetInfo">virDomainGetInfo</a> from libvirt.h</li><li> line 50: Function <a href="../html/libvirt-libvirt.html#virDomainLookupByID">virDomainLookupByID</a> from libvirt.h</li><li> line 62: Function <a href="../html/libvirt-libvirt.html#virDomainSuspend">virDomainSuspend</a> from libvirt.h</li><li> line 73: Function <a href="../html/libvirt-libvirt.html#virDomainResume">virDomainResume</a> from libvirt.h</li><li> line 93: Function <a href="../html/libvirt-libvirt.html#virDomainFree">virDomainFree</a> from libvirt.h</li><li> line 100: Function <a href="../html/libvirt-libvirt.html#virConnectOpenReadOnly">virConnectOpenReadOnly</a> from libvirt.h</li><li> line 111: Function <a href="../html/libvirt-libvirt.html#virConnectListDomains">virConnectListDomains</a> from libvirt.h</li><li> line 132: Function <a href="../html/libvirt-libvirt.html#virConnectClose">virConnectClose</a> from libvirt.h</li></ul><p>Usage:</p><p>suspend [id]</p><p>Author: Daniel Veillard</p></div></div><div class="linkList2"><div class="llinks2"><h3 class="links2"><span>main menu</span></h3><ul><li><a href="../index.html">Home</a></li><li><a href="../html/index.html">API Menu</a></li><li><a href="../examples/index.html">C code examples</a></li><li><a href="../ChangeLog.html">Recent Changes</a></li></ul></div><div class="llinks2"><h3 class="links2"><span>related links</span></h3><ul><li><a href="https://www.redhat.com/archives/libvir-list/">Mail archive</a></li><li><a href="https://bugzilla.redhat.com/bugzilla/buglist.cgi?product=Fedora+Core&amp;component=libvirt&amp;bug_status=NEW&amp;bug_status=ASSIGNED&amp;bug_status=REOPENED&amp;bug_status=MODIFIED&amp;short_desc_type=allwordssubstr&amp;short_desc=&amp;long_desc_type=allwordssubstr">Open bugs</a></li><li><a href="http://virt-manager.et.redhat.com/">virt-manager</a></li><li><a href="http://search.cpan.org/~danberr/Sys-Virt-0.1.0/">Perl bindings</a></li><li><a href="http://libvirt.org/ocaml/">OCaml bindings</a></li><li><a href="http://libvirt.org/ruby/">Ruby bindings</a></li><li><a href="http://www.cl.cam.ac.uk/Research/SRG/netos/xen/index.html">Xen project</a></li><li><form action="../search.php" enctype="application/x-www-form-urlencoded" method="get"><input name="query" type="text" size="12" value="Search..." /><input name="submit" type="submit" value="Go" /></form></li><li><a href="http://xmlsoft.org/"><img src="../Libxml2-Logo-90x34.gif" alt="Made with Libxml2 Logo" /></a></li></ul><p class="credits">Graphics and design by <a href="mail:dfong@redhat.com">Diana Fong</a></p></div></div><div id="bottom"><p class="p1"></p></div></div></body></html>
diff --git a/docs/examples/index.py b/docs/examples/index.py
deleted file mode 100755 (executable)
index 00c0dcf..0000000
+++ /dev/null
@@ -1,305 +0,0 @@
-#!/usr/bin/python -u
-#
-# Indexes the examples and build an XML description
-#
-import string
-import glob
-import sys
-try:
-    import libxml2
-except:
-    sys.exit(1)
-sys.path.insert(0, "..")
-from apibuild import CParser, escape
-
-examples = []
-extras = ['examples.xsl', 'index.py']
-tests = []
-sections = {}
-symbols = {}
-api_dict = None
-api_doc = None
-
-def load_api():
-    global api_dict
-    global api_doc
-
-    if api_dict != None:
-        return
-    api_dict = {}
-    try:
-        print "loading ../libvirt-api.xml"
-        api_doc = libxml2.parseFile("../libvirt-api.xml")
-    except:
-        print "failed to parse ../libvirt-api.xml"
-       sys.exit(1)
-
-def find_symbol(name):
-    global api_dict
-    global api_doc
-
-    if api_doc == None:
-        load_api()
-
-    if name == None:
-        return
-    if api_dict.has_key(name):
-        return api_dict[name]
-    ctxt = api_doc.xpathNewContext()
-    res = ctxt.xpathEval("/api/symbols/*[@name = '%s']" % (name))
-    if type(res) == type([]) and len(res) >= 1:
-        if len(res) > 1:
-           print "Found %d references to %s in the API" % (len(res), name)
-       node = res[0]
-       typ = node.name
-       file = node.xpathEval("string(@file)")
-       info = node.xpathEval("string(info)")
-    else:
-        print "Reference %s not found in the API" % (name)
-       return None
-    ret = (typ, file, info)
-    api_dict[name] = ret
-    return ret
-
-def parse_top_comment(filename, comment):
-    res = {}
-    lines = string.split(comment, "\n")
-    item = None
-    for line in lines:
-        while line != "" and (line[0] == ' ' or line[0] == '\t'):
-           line = line[1:]
-        while line != "" and line[0] == '*':
-           line = line[1:]
-        while line != "" and (line[0] == ' ' or line[0] == '\t'):
-           line = line[1:]
-       try:
-           (it, line) = string.split(line, ":", 1)
-           item = it
-           while line != "" and (line[0] == ' ' or line[0] == '\t'):
-               line = line[1:]
-           if res.has_key(item):
-               res[item] = res[item] + " " + line
-           else:
-               res[item] = line
-       except:
-           if item != None:
-               if res.has_key(item):
-                   res[item] = res[item] + " " + line
-               else:
-                   res[item] = line
-    return res
-
-def parse(filename, output):
-    global symbols
-    global sections
-
-    parser = CParser(filename)
-    parser.collect_references()
-    idx = parser.parse()
-    info = parse_top_comment(filename, parser.top_comment)
-    output.write("  <example filename='%s'>\n" % filename)
-    try:
-        synopsis = info['synopsis']
-       output.write("    <synopsis>%s</synopsis>\n" % escape(synopsis));
-    except:
-        print "Example %s lacks a synopsis description" % (filename)
-    try:
-        purpose = info['purpose']
-       output.write("    <purpose>%s</purpose>\n" % escape(purpose));
-    except:
-        print "Example %s lacks a purpose description" % (filename)
-    try:
-        usage = info['usage']
-       output.write("    <usage>%s</usage>\n" % escape(usage));
-    except:
-        print "Example %s lacks an usage description" % (filename)
-    try:
-        test = info['test']
-       output.write("    <test>%s</test>\n" % escape(test));
-       progname=filename[0:-2]
-       command=string.replace(test, progname, './' + progname, 1)
-       tests.append(command)
-    except:
-        pass
-    try:
-        author = info['author']
-       output.write("    <author>%s</author>\n" % escape(author));
-    except:
-        print "Example %s lacks an author description" % (filename)
-    try:
-        copy = info['copy']
-       output.write("    <copy>%s</copy>\n" % escape(copy));
-    except:
-        print "Example %s lacks a copyright description" % (filename)
-    try:
-        section = info['section']
-       output.write("    <section>%s</section>\n" % escape(section));
-       if sections.has_key(section):
-           sections[section].append(filename)
-       else:
-           sections[section] = [filename]
-    except:
-        print "Example %s lacks a section description" % (filename)
-    for topic in info.keys():
-        if topic != "purpose" and topic != "usage" and \
-          topic != "author" and topic != "copy" and \
-          topic != "section" and topic != "synopsis" and topic != "test":
-           str = info[topic]
-           output.write("    <extra topic='%s'>%s</extra>\n" % (
-                        escape(topic), escape(str)))
-    output.write("    <includes>\n")
-    for include in idx.includes.keys():
-        if include.find("libxml") != -1:
-           output.write("      <include>%s</include>\n" % (escape(include)))
-    output.write("    </includes>\n")
-    output.write("    <uses>\n")
-    for ref in idx.references.keys():
-        id = idx.references[ref]
-       name = id.get_name()
-       line = id.get_lineno()
-       if symbols.has_key(name):
-           sinfo = symbols[name]
-           refs = sinfo[0]
-           # gather at most 5 references per symbols
-           if refs > 5:
-               continue
-           sinfo.append(filename)
-           sinfo[0] = refs + 1
-       else:
-           symbols[name] = [1, filename]
-       info = find_symbol(name)
-       if info != None:
-           type = info[0]
-           file = info[1]
-           output.write("      <%s line='%d' file='%s' name='%s'/>\n" % (type,
-                        line, file, name))
-       else:
-           type = id.get_type()
-           output.write("      <%s line='%d' name='%s'/>\n" % (type,
-                        line, name))
-
-    output.write("    </uses>\n")
-    output.write("  </example>\n")
-
-    return idx
-
-def dump_symbols(output):
-    global symbols
-
-    output.write("  <symbols>\n")
-    keys = symbols.keys()
-    keys.sort()
-    for symbol in keys:
-        output.write("    <symbol name='%s'>\n" % (symbol))
-       info = symbols[symbol]
-       i = 1
-       while i < len(info):
-           output.write("      <ref filename='%s'/>\n" % (info[i]))
-           i = i + 1
-        output.write("    </symbol>\n")
-    output.write("  </symbols>\n")
-
-def dump_sections(output):
-    global sections
-
-    output.write("  <sections>\n")
-    keys = sections.keys()
-    keys.sort()
-    for section in keys:
-        output.write("    <section name='%s'>\n" % (section))
-       info = sections[section]
-       i = 0
-       while i < len(info):
-           output.write("      <example filename='%s'/>\n" % (info[i]))
-           i = i + 1
-        output.write("    </section>\n")
-    output.write("  </sections>\n")
-
-def dump_Makefile():
-    for file in glob.glob('*.xml'):
-        extras.append(file)
-    Makefile="""# -*- buffer-read-only: t -*- vi: set ro:
-# Beware this is autogenerated by index.py
-SUBDIRS=python
-INCLUDES = -I$(top_builddir)/include -I$(top_srcdir)/include -I@srcdir@/include
-DEPS = $(top_builddir)/src/libvirt.la
-LDADDS = @STATIC_BINARIES@ $(WARN_CFLAGS) $(top_builddir)/src/libvirt.la \
-       $(COVERAGE_LDFLAGS)
-
-rebuild: examples.xml index.html
-
-examples.xml: index.py __C_SOURCES__
-       -@($(srcdir)/index.py)
-
-index.html: examples.xml examples.xsl $(top_srcdir)/docs/site.xsl
-       -@(if [ -x $(XSLTPROC) ] ; then                 \\
-          $(XSLTPROC) examples.xsl examples.xml        \\
-            && echo "Rebuilt web page"                 \\
-            && xmllint --valid --noout index.html;     \\
-          fi)
-
-install-data-local:
-       $(mkinstalldirs) $(DESTDIR)$(HTML_DIR)
-       -@INSTALL@ -m 0644 $(srcdir)/*.html $(srcdir)/*.c $(srcdir)/*.xml \\
-         $(srcdir)/*.xsl $(DESTDIR)$(HTML_DIR)
-
-"""
-    EXTRA_DIST= string.join(extras, ' ')
-    Makefile = Makefile + "EXTRA_DIST=%s\n\n" % (EXTRA_DIST)
-    noinst_PROGRAMS= string.join(examples, ' ')
-    Makefile = Makefile + "noinst_PROGRAMS=%s\n\n" % (noinst_PROGRAMS)
-    for example in examples:
-        Makefile = Makefile + "%s_SOURCES=%s.c\n%s_LDFLAGS=\n%s_DEPENDENCIES= $(DEPS)\n%s_LDADD= $(LDADDS)\n\n" % (example, example, example,
-              example, example)
-    Makefile = Makefile + "valgrind:\n\t$(MAKE) CHECKER='valgrind' tests\n\n"
-    Makefile = Makefile + "tests: $(noinst_PROGRAMS)\n"
-    Makefile = Makefile + "\t@(echo '## examples regression tests')\n"
-#    Makefile = Makefile + "\t@(echo > .memdump)\n"
-    for test in tests:
-        Makefile = Makefile + "\t@($(CHECKER) %s)\n" % (test)
-#        Makefile = Makefile + '\t@(grep "MORY ALLO" .memdump  | grep -v "MEMORY ALLOCATED : 0" ; exit 0)\n'
-
-    c_src = [("%s.c" % x) for x in examples]
-    Makefile = Makefile.replace("__C_SOURCES__", string.join(c_src, ' '))
-    try:
-       old = open("Makefile.am", "r").read()
-       if old != Makefile:
-           n = open("Makefile.am", "w").write(Makefile)
-           print "Updated Makefile.am"
-    except:
-        print "Failed to read or save Makefile.am"
-    #
-    # Autogenerate the .cvsignore too ...
-    #
-    ignore = """.memdump
-Makefile.in
-Makefile
-.deps
-.libs
-"""
-    for example in examples:
-        ignore = ignore + "%s\n" % (example)
-    try:
-       old = open(".cvsignore", "r").read()
-       if old != ignore:
-           n = open(".cvsignore", "w").write(ignore)
-           print "Updated .cvsignore"
-    except:
-        print "Failed to read or save .cvsignore"
-
-if __name__ == "__main__":
-    load_api()
-    output = open("examples.xml", "w")
-    output.write("<examples>\n")
-
-    c_src = glob.glob('*.c')
-    c_src.sort()
-    for file in c_src:
-       parse(file, output)
-       examples.append(file[:-2])
-
-    dump_symbols(output)
-    dump_sections(output)
-    output.write("</examples>\n")
-    output.close()
-    dump_Makefile()
diff --git a/docs/examples/info1.c b/docs/examples/info1.c
deleted file mode 100644 (file)
index 601e9f2..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-/**
- * section: Informations
- * synopsis: Extract information about Xen domain 0
- * purpose: Demonstrate the basic use of the library to connect to the
- *          hypervisor and extract domain information.
- * usage: info1
- * test: info1
- * author: Daniel Veillard
- * copy: see Copyright for the status of this software.
- */
-
-#include <stdio.h>
-#include <libvirt/libvirt.h>
-
-/**
- * getDomainInfo:
- * @id: the id of the domain
- *
- * extract the domain 0 information
- */
-static void
-getDomainInfo(int id) {
-    virConnectPtr conn = NULL; /* the hypervisor connection */
-    virDomainPtr dom = NULL;   /* the domain being checked */
-    virDomainInfo info;        /* the information being fetched */
-    int ret;
-
-    /* NULL means connect to local Xen hypervisor */
-    conn = virConnectOpenReadOnly(NULL);
-    if (conn == NULL) {
-        fprintf(stderr, "Failed to connect to hypervisor\n");
-        goto error;
-    }
-
-    /* Find the domain of the given id */
-    dom = virDomainLookupByID(conn, id);
-    if (dom == NULL) {
-        fprintf(stderr, "Failed to find Domain %d\n", id);
-        goto error;
-    }
-
-    /* Get the information */
-    ret = virDomainGetInfo(dom, &info);
-    if (ret < 0) {
-        fprintf(stderr, "Failed to get information for Domain %d\n", id);
-        goto error;
-    }
-
-    printf("Domains %d: %d CPUs\n", id, info.nrVirtCpu);
-
-error:
-    if (dom != NULL)
-        virDomainFree(dom);
-    if (conn != NULL)
-        virConnectClose(conn);
-}
-
-int main() {
-
-    getDomainInfo(0);
-
-    return(0);
-}
diff --git a/docs/examples/python/.gitignore b/docs/examples/python/.gitignore
deleted file mode 100644 (file)
index 282522d..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-Makefile
-Makefile.in
diff --git a/docs/examples/python/Makefile.am b/docs/examples/python/Makefile.am
deleted file mode 100644 (file)
index ae92d94..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-EXTRA_DIST=                                            \
-       README                                          \
-       dominfo.py domrestore.py domsave.py domstart.py \
-       guava.xml papaya.xml
diff --git a/docs/examples/python/README b/docs/examples/python/README
deleted file mode 100644 (file)
index 02c5bfb..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-Some simple examples on how to use the Python API for libvirt
-
-The examples are:
-
-dominfo.py  - print information about a running domU based on the results of
-              virDomainGetInfo and virDomainGetXMLDesc
-domstart.py - create a domU from an XML description if the domU isn't
-              running yet
-domsave.py  - save all running domU's into a directory
-domrestore.py - restore domU's from their saved files in a directory
-
-The XML files in this directory are examples of the XML format that libvirt
-expects, and will have to be adapted for your setup. They are only needed
-for domstart.py
diff --git a/docs/examples/python/dominfo.py b/docs/examples/python/dominfo.py
deleted file mode 100755 (executable)
index e41709c..0000000
+++ /dev/null
@@ -1,84 +0,0 @@
-#! /usr/bin/python
-# dominfo - print some information about a domain
-
-import libvirt
-import sys
-import os
-import libxml2
-import pdb
-
-def usage():
-   print 'Usage: %s DOMAIN' % sys.argv[0]
-   print '       Print information about the domain DOMAIN'
-
-def print_section(title):
-    print "\n%s" % title
-    print "=" * 60
-
-def print_entry(key, value):
-    print "%-10s %-10s" % (key, value)
-
-def print_xml(key, ctx, path):
-    res = ctx.xpathEval(path)
-    if res is None or len(res) == 0:
-        value="Unknown"
-    else:
-        value = res[0].content
-    print_entry(key, value)
-    return value
-
-if not os.access("/proc/xen", os.R_OK):
-    print 'System is not running a Xen kernel'
-    sys.exit(1)
-
-if len(sys.argv) != 2:
-    usage()
-    sys.exit(2)
-
-name = sys.argv[1]
-
-# Connect to libvirt
-conn = libvirt.openReadOnly(None)
-if conn == None:
-    print 'Failed to open connection to the hypervisor'
-    sys.exit(1)
-
-try:
-    dom = conn.lookupByName(name)
-    # Annoyiingly, libvirt prints its own error message here
-except libvirt.libvirtError:
-    print "Domain %s is not runing" % name
-    sys.exit(0)
-
-info = dom.info()
-print_section("Domain info")
-print_entry("State:", info[0])
-print_entry("MaxMem:", info[1])
-print_entry("UsedMem:", info[2])
-print_entry("VCPUs:", info[3])
-
-# Read some info from the XML desc
-xmldesc = dom.XMLDesc(0)
-doc = libxml2.parseDoc(xmldesc)
-ctx = doc.xpathNewContext()
-print_section("Kernel")
-print_xml("Type:", ctx, "/domain/os/type")
-print_xml("Kernel:", ctx, "/domain/os/kernel")
-print_xml("initrd:", ctx, "/domain/os/initrd")
-print_xml("cmdline:", ctx, "/domain/os/cmdline")
-
-print_section("Devices")
-devs = ctx.xpathEval("/domain/devices/*")
-for d in devs:
-    ctx.setContextNode(d)
-    #pdb.set_trace()
-    type = print_xml("Type:", ctx, "@type")
-    if type == "file":
-        print_xml("Source:", ctx, "source/@file")
-        print_xml("Target:", ctx, "target/@dev")
-    elif type == "block":
-        print_xml("Source:", ctx, "source/@dev")
-        print_xml("Target:", ctx, "target/@dev")
-    elif type == "bridge":
-        print_xml("Source:", ctx, "source/@bridge")
-        print_xml("MAC Addr:", ctx, "mac/@address")
diff --git a/docs/examples/python/domrestore.py b/docs/examples/python/domrestore.py
deleted file mode 100755 (executable)
index b032138..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-#! /usr/bin/python
-# domstart - make sure a given domU is running, if not start it
-
-import libvirt
-import sys
-import os
-import libxml2
-import pdb
-
-def usage():
-   print 'Usage: %s DIR' % sys.argv[0]
-   print '       Restore all the domains contained in DIR'
-   print '       It is assumed that all files in DIR are'
-   print '       images of domU\'s previously created with save'
-
-if len(sys.argv) != 2:
-    usage()
-    sys.exit(2)
-
-dir = sys.argv[1]
-imgs = os.listdir(dir)
-
-conn = libvirt.open(None)
-if conn == None:
-    print 'Failed to open connection to the hypervisor'
-    sys.exit(1)
-
-for img in imgs:
-    file = os.path.join(dir, img)
-    print "Restoring %s ... " % img,
-    sys.stdout.flush()
-    ret = conn.restore(file)
-    if ret == 0:
-        print "done"
-    else:
-        print "error %d" % ret
diff --git a/docs/examples/python/domsave.py b/docs/examples/python/domsave.py
deleted file mode 100755 (executable)
index 35e2c8a..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-#! /usr/bin/python
-# domstart - make sure a given domU is running, if not start it
-
-import libvirt
-import sys
-import os
-import libxml2
-import pdb
-
-def usage():
-   print 'Usage: %s DIR' % sys.argv[0]
-   print '       Save all currently running domU\'s into DIR'
-   print '       DIR must exist and be writable by this process'
-
-if len(sys.argv) != 2:
-    usage()
-    sys.exit(2)
-
-dir = sys.argv[1]
-
-conn = libvirt.open(None)
-if conn == None:
-    print 'Failed to open connection to the hypervisor'
-    sys.exit(1)
-
-doms = conn.listDomainsID()
-for id in doms:
-    if id == 0:
-        continue
-    dom = conn.lookupByID(id)
-    print "Saving %s[%d] ... " % (dom.name(), id),
-    sys.stdout.flush()
-    path = os.path.join(dir, dom.name())
-    ret = dom.save(path)
-    if ret == 0:
-        print "done"
-    else:
-        print "error %d" % ret
-
-#pdb.set_trace()
diff --git a/docs/examples/python/domstart.py b/docs/examples/python/domstart.py
deleted file mode 100755 (executable)
index 52fb79e..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-#! /usr/bin/python
-# domstart - make sure a given domU is running, if not start it
-
-import libvirt
-import sys
-import os
-import libxml2
-import pdb
-
-# Parse the XML description of domU from FNAME
-# and return a tuple (name, xmldesc) where NAME
-# is the name of the domain, and xmldesc is the contetn of FNAME
-def read_domain(fname):
-    fp = open(fname, "r")
-    xmldesc = fp.read()
-    fp.close()
-
-    doc = libxml2.parseDoc(xmldesc)
-    name = doc.xpathNewContext().xpathEval("/domain/name")[0].content
-    return (name, xmldesc)
-
-def usage():
-   print 'Usage: %s domain.xml' % sys.argv[0]
-   print '       Check that the domain described by DOMAIN.XML is running'
-   print '       If the domain is not running, create it'
-   print '       DOMAIN.XML must be a XML description of the domain'
-   print '       in libvirt\'s XML format'
-
-if len(sys.argv) != 2:
-    usage()
-    sys.exit(2)
-
-(name, xmldesc) = read_domain(sys.argv[1])
-
-conn = libvirt.open(None)
-if conn == None:
-    print 'Failed to open connection to the hypervisor'
-    sys.exit(1)
-
-try:
-    dom = conn.lookupByName(name)
-except libvirt.libvirtError:
-    print "Starting domain %s ... " % name,
-    sys.stdout.flush()
-    dom = conn.createLinux(xmldesc, 0)
-    if dom == None:
-        print "failed"
-        sys.exit(1)
-    else:
-        print "done"
diff --git a/docs/examples/python/guava.xml b/docs/examples/python/guava.xml
deleted file mode 100644 (file)
index 4cff175..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-<domain type='xen'>
-  <name>guava</name>
-  <os>
-    <type>linux</type>
-    <kernel>/var/xen/boot/vmlinuz-2.6.15-1.33_FC5guest</kernel>
-    <initrd>/var/xen/boot/initrd-2.6.15-1.33_FC5guest.img</initrd>
-    <cmdline>ro root=/dev/VolGroup00/LogVol00 rhgb quiet</cmdline>
-  </os>
-  <memory>262144</memory>
-  <vcpu>1</vcpu>
-  <devices>
-    <disk type='file'>
-      <source file='/var/xen/guava'/>
-      <target dev='xvda'/>
-    </disk>
-    <interface type='bridge'>
-      <source bridge='xenbr0'/>
-      <mac address='00:16:3e:78:a2:42'/>
-      <script path='/etc/xen/scripts/vif-bridge'/>
-    </interface>
-  </devices>
-</domain>
diff --git a/docs/examples/python/papaya.xml b/docs/examples/python/papaya.xml
deleted file mode 100644 (file)
index 51e85d6..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-<domain type='xen'>
-  <name>papaya</name>
-  <os>
-    <type>linux</type>
-    <kernel>/var/xen/boot/vmlinuz-2.6.15-1.33_FC5guest</kernel>
-    <initrd>/var/xen/boot/initrd-2.6.15-1.33_FC5guest.img</initrd>
-    <cmdline>ro root=/dev/VolGroup00/LogVol00 rhgb quiet single</cmdline>
-  </os>
-  <memory>262144</memory>
-  <vcpu>1</vcpu>
-  <devices>
-    <disk type='file'>
-      <source file='/var/xen/papaya'/>
-      <target dev='xvda'/>
-    </disk>
-    <disk type='block'>
-      <source dev='/dev/mapper/vg00-lv02'/>
-      <target dev='sda1'/>
-    </disk>
-    <interface type='bridge'>
-      <source bridge='xenbr0'/>
-      <mac address='00:16:3e:78:a2:0c'/>
-      <script path='/etc/xen/scripts/vif-bridge'/>
-    </interface>
-  </devices>
-</domain>
diff --git a/docs/examples/suspend.c b/docs/examples/suspend.c
deleted file mode 100644 (file)
index bae1b8d..0000000
+++ /dev/null
@@ -1,134 +0,0 @@
-/**
- * section: Scheduling
- * synopsis: Suspend a domain and then resume its execution
- * purpose: Demonstrate the basic use of the library to suspend and
- *          resume a domain. If no id is given on the command line
- *          this script will suspend and resume the first domain found
- *          which is not Domain 0.
- * usage: suspend [id]
- * test: suspend
- * author: Daniel Veillard
- * copy: see Copyright for the status of this software.
- */
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <libvirt/libvirt.h>
-
-static virConnectPtr conn = NULL; /* the hypervisor connection */
-
-/**
- * checkDomainState:
- * @dom: the domain
- *
- * Return the current state of a domain or -1 if non-exsitant
- */
-static int
-checkDomainState(virDomainPtr dom) {
-    virDomainInfo info;        /* the information being fetched */
-    int ret;
-
-    ret = virDomainGetInfo(dom, &info);
-    if (ret < 0) {
-        return(-1);
-    }
-    return(info.state);
-}
-
-/**
- * SuspendAndResumeDomain:
- * @id: the id of the domain
- *
- * extract the domain 0 information
- */
-static void
-SuspendAndResumeDomain(int id) {
-    virDomainPtr dom = NULL;   /* the domain being checked */
-    int ret, state;
-
-    /* Find the domain of the given id */
-    dom = virDomainLookupByID(conn, id);
-    if (dom == NULL) {
-        fprintf(stderr, "Failed to find Domain %d\n", id);
-        goto error;
-    }
-
-    /* Check state */
-    state = checkDomainState(dom);
-    if ((state == VIR_DOMAIN_RUNNING) ||
-        (state == VIR_DOMAIN_NOSTATE) ||
-        (state == VIR_DOMAIN_BLOCKED)) {
-        printf("Suspending domain...\n");
-        ret = virDomainSuspend(dom);
-        if (ret < 0) {
-            fprintf(stderr, "Failed to suspend Domain %d\n", id);
-            goto error;
-        }
-        state = checkDomainState(dom);
-        if (state != VIR_DOMAIN_PAUSED) {
-            fprintf(stderr, "Domain %d state is not suspended\n", id);
-        } else {
-            printf("Domain suspended, resuming it...\n");
-        }
-        ret = virDomainResume(dom);
-        if (ret < 0) {
-            fprintf(stderr, "Failed to resume Domain %d\n", id);
-            goto error;
-        }
-        state = checkDomainState(dom);
-        if ((state == VIR_DOMAIN_RUNNING) ||
-            (state == VIR_DOMAIN_NOSTATE) ||
-            (state == VIR_DOMAIN_BLOCKED)) {
-            printf("Domain resumed\n");
-        } else {
-            fprintf(stderr, "Domain %d state indicate it is not resumed\n", id);
-        }
-    } else {
-        fprintf(stderr, "Domain %d is not in a state where it should be suspended\n", id);
-        goto error;
-    }
-
-error:
-    if (dom != NULL)
-        virDomainFree(dom);
-}
-
-int main(int argc, char **argv) {
-    int id = 0;
-
-    /* NULL means connect to local Xen hypervisor */
-    conn = virConnectOpenReadOnly(NULL);
-    if (conn == NULL) {
-        fprintf(stderr, "Failed to connect to hypervisor\n");
-        goto error;
-    }
-
-    if (argc > 1) {
-        id = atoi(argv[1]);
-    }
-    if (id == 0) {
-        int i, j, ids[10];
-        i = virConnectListDomains(conn, &ids[0], 10);
-        if (i < 0) {
-            fprintf(stderr, "Failed to list the domains\n");
-            goto error;
-        }
-        for (j = 0;j < i;j++) {
-            if (ids[j] != 0) {
-                id = ids[j];
-                break;
-            }
-        }
-    }
-    if (id == 0) {
-        fprintf(stderr, "Failed find a running guest domain\n");
-        goto error;
-    }
-
-    SuspendAndResumeDomain(id);
-
-error:
-    if (conn != NULL)
-        virConnectClose(conn);
-    return(0);
-}
diff --git a/examples/dominfo/.gitignore b/examples/dominfo/.gitignore
new file mode 100644 (file)
index 0000000..4626c13
--- /dev/null
@@ -0,0 +1,5 @@
+Makefile.in
+Makefile
+.deps
+.libs
+info1
diff --git a/examples/dominfo/Makefile.am b/examples/dominfo/Makefile.am
new file mode 100644 (file)
index 0000000..5795cb5
--- /dev/null
@@ -0,0 +1,10 @@
+
+INCLUDES = -I$(top_builddir)/include -I$(top_srcdir)/include -I@srcdir@/include
+LDADDS = @STATIC_BINARIES@ $(WARN_CFLAGS) $(top_builddir)/src/libvirt.la       $(COVERAGE_LDFLAGS)
+
+noinst_PROGRAMS=info1
+
+info1_SOURCES=info1.c
+info1_LDFLAGS=
+info1_LDADD= $(LDADDS)
+
diff --git a/examples/dominfo/info1.c b/examples/dominfo/info1.c
new file mode 100644 (file)
index 0000000..601e9f2
--- /dev/null
@@ -0,0 +1,63 @@
+/**
+ * section: Informations
+ * synopsis: Extract information about Xen domain 0
+ * purpose: Demonstrate the basic use of the library to connect to the
+ *          hypervisor and extract domain information.
+ * usage: info1
+ * test: info1
+ * author: Daniel Veillard
+ * copy: see Copyright for the status of this software.
+ */
+
+#include <stdio.h>
+#include <libvirt/libvirt.h>
+
+/**
+ * getDomainInfo:
+ * @id: the id of the domain
+ *
+ * extract the domain 0 information
+ */
+static void
+getDomainInfo(int id) {
+    virConnectPtr conn = NULL; /* the hypervisor connection */
+    virDomainPtr dom = NULL;   /* the domain being checked */
+    virDomainInfo info;        /* the information being fetched */
+    int ret;
+
+    /* NULL means connect to local Xen hypervisor */
+    conn = virConnectOpenReadOnly(NULL);
+    if (conn == NULL) {
+        fprintf(stderr, "Failed to connect to hypervisor\n");
+        goto error;
+    }
+
+    /* Find the domain of the given id */
+    dom = virDomainLookupByID(conn, id);
+    if (dom == NULL) {
+        fprintf(stderr, "Failed to find Domain %d\n", id);
+        goto error;
+    }
+
+    /* Get the information */
+    ret = virDomainGetInfo(dom, &info);
+    if (ret < 0) {
+        fprintf(stderr, "Failed to get information for Domain %d\n", id);
+        goto error;
+    }
+
+    printf("Domains %d: %d CPUs\n", id, info.nrVirtCpu);
+
+error:
+    if (dom != NULL)
+        virDomainFree(dom);
+    if (conn != NULL)
+        virConnectClose(conn);
+}
+
+int main() {
+
+    getDomainInfo(0);
+
+    return(0);
+}
diff --git a/examples/domsuspend/.gitignore b/examples/domsuspend/.gitignore
new file mode 100644 (file)
index 0000000..02eeb79
--- /dev/null
@@ -0,0 +1,5 @@
+Makefile.in
+Makefile
+.deps
+.libs
+suspend
diff --git a/examples/domsuspend/Makefile.am b/examples/domsuspend/Makefile.am
new file mode 100644 (file)
index 0000000..059c5b5
--- /dev/null
@@ -0,0 +1,10 @@
+
+INCLUDES = -I$(top_builddir)/include -I$(top_srcdir)/include -I@srcdir@/include
+LDADDS = @STATIC_BINARIES@ $(WARN_CFLAGS) $(top_builddir)/src/libvirt.la       $(COVERAGE_LDFLAGS)
+
+noinst_PROGRAMS=suspend
+
+suspend_SOURCES=suspend.c
+suspend_LDFLAGS=
+suspend_LDADD= $(LDADDS)
+
diff --git a/examples/domsuspend/suspend.c b/examples/domsuspend/suspend.c
new file mode 100644 (file)
index 0000000..bae1b8d
--- /dev/null
@@ -0,0 +1,134 @@
+/**
+ * section: Scheduling
+ * synopsis: Suspend a domain and then resume its execution
+ * purpose: Demonstrate the basic use of the library to suspend and
+ *          resume a domain. If no id is given on the command line
+ *          this script will suspend and resume the first domain found
+ *          which is not Domain 0.
+ * usage: suspend [id]
+ * test: suspend
+ * author: Daniel Veillard
+ * copy: see Copyright for the status of this software.
+ */
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <libvirt/libvirt.h>
+
+static virConnectPtr conn = NULL; /* the hypervisor connection */
+
+/**
+ * checkDomainState:
+ * @dom: the domain
+ *
+ * Return the current state of a domain or -1 if non-exsitant
+ */
+static int
+checkDomainState(virDomainPtr dom) {
+    virDomainInfo info;        /* the information being fetched */
+    int ret;
+
+    ret = virDomainGetInfo(dom, &info);
+    if (ret < 0) {
+        return(-1);
+    }
+    return(info.state);
+}
+
+/**
+ * SuspendAndResumeDomain:
+ * @id: the id of the domain
+ *
+ * extract the domain 0 information
+ */
+static void
+SuspendAndResumeDomain(int id) {
+    virDomainPtr dom = NULL;   /* the domain being checked */
+    int ret, state;
+
+    /* Find the domain of the given id */
+    dom = virDomainLookupByID(conn, id);
+    if (dom == NULL) {
+        fprintf(stderr, "Failed to find Domain %d\n", id);
+        goto error;
+    }
+
+    /* Check state */
+    state = checkDomainState(dom);
+    if ((state == VIR_DOMAIN_RUNNING) ||
+        (state == VIR_DOMAIN_NOSTATE) ||
+        (state == VIR_DOMAIN_BLOCKED)) {
+        printf("Suspending domain...\n");
+        ret = virDomainSuspend(dom);
+        if (ret < 0) {
+            fprintf(stderr, "Failed to suspend Domain %d\n", id);
+            goto error;
+        }
+        state = checkDomainState(dom);
+        if (state != VIR_DOMAIN_PAUSED) {
+            fprintf(stderr, "Domain %d state is not suspended\n", id);
+        } else {
+            printf("Domain suspended, resuming it...\n");
+        }
+        ret = virDomainResume(dom);
+        if (ret < 0) {
+            fprintf(stderr, "Failed to resume Domain %d\n", id);
+            goto error;
+        }
+        state = checkDomainState(dom);
+        if ((state == VIR_DOMAIN_RUNNING) ||
+            (state == VIR_DOMAIN_NOSTATE) ||
+            (state == VIR_DOMAIN_BLOCKED)) {
+            printf("Domain resumed\n");
+        } else {
+            fprintf(stderr, "Domain %d state indicate it is not resumed\n", id);
+        }
+    } else {
+        fprintf(stderr, "Domain %d is not in a state where it should be suspended\n", id);
+        goto error;
+    }
+
+error:
+    if (dom != NULL)
+        virDomainFree(dom);
+}
+
+int main(int argc, char **argv) {
+    int id = 0;
+
+    /* NULL means connect to local Xen hypervisor */
+    conn = virConnectOpenReadOnly(NULL);
+    if (conn == NULL) {
+        fprintf(stderr, "Failed to connect to hypervisor\n");
+        goto error;
+    }
+
+    if (argc > 1) {
+        id = atoi(argv[1]);
+    }
+    if (id == 0) {
+        int i, j, ids[10];
+        i = virConnectListDomains(conn, &ids[0], 10);
+        if (i < 0) {
+            fprintf(stderr, "Failed to list the domains\n");
+            goto error;
+        }
+        for (j = 0;j < i;j++) {
+            if (ids[j] != 0) {
+                id = ids[j];
+                break;
+            }
+        }
+    }
+    if (id == 0) {
+        fprintf(stderr, "Failed find a running guest domain\n");
+        goto error;
+    }
+
+    SuspendAndResumeDomain(id);
+
+error:
+    if (conn != NULL)
+        virConnectClose(conn);
+    return(0);
+}
diff --git a/examples/python/.gitignore b/examples/python/.gitignore
new file mode 100644 (file)
index 0000000..282522d
--- /dev/null
@@ -0,0 +1,2 @@
+Makefile
+Makefile.in
diff --git a/examples/python/Makefile.am b/examples/python/Makefile.am
new file mode 100644 (file)
index 0000000..0742226
--- /dev/null
@@ -0,0 +1,3 @@
+EXTRA_DIST=                                            \
+       README                                          \
+       dominfo.py domrestore.py domsave.py domstart.py
diff --git a/examples/python/README b/examples/python/README
new file mode 100644 (file)
index 0000000..02c5bfb
--- /dev/null
@@ -0,0 +1,14 @@
+Some simple examples on how to use the Python API for libvirt
+
+The examples are:
+
+dominfo.py  - print information about a running domU based on the results of
+              virDomainGetInfo and virDomainGetXMLDesc
+domstart.py - create a domU from an XML description if the domU isn't
+              running yet
+domsave.py  - save all running domU's into a directory
+domrestore.py - restore domU's from their saved files in a directory
+
+The XML files in this directory are examples of the XML format that libvirt
+expects, and will have to be adapted for your setup. They are only needed
+for domstart.py
diff --git a/examples/python/dominfo.py b/examples/python/dominfo.py
new file mode 100755 (executable)
index 0000000..e41709c
--- /dev/null
@@ -0,0 +1,84 @@
+#! /usr/bin/python
+# dominfo - print some information about a domain
+
+import libvirt
+import sys
+import os
+import libxml2
+import pdb
+
+def usage():
+   print 'Usage: %s DOMAIN' % sys.argv[0]
+   print '       Print information about the domain DOMAIN'
+
+def print_section(title):
+    print "\n%s" % title
+    print "=" * 60
+
+def print_entry(key, value):
+    print "%-10s %-10s" % (key, value)
+
+def print_xml(key, ctx, path):
+    res = ctx.xpathEval(path)
+    if res is None or len(res) == 0:
+        value="Unknown"
+    else:
+        value = res[0].content
+    print_entry(key, value)
+    return value
+
+if not os.access("/proc/xen", os.R_OK):
+    print 'System is not running a Xen kernel'
+    sys.exit(1)
+
+if len(sys.argv) != 2:
+    usage()
+    sys.exit(2)
+
+name = sys.argv[1]
+
+# Connect to libvirt
+conn = libvirt.openReadOnly(None)
+if conn == None:
+    print 'Failed to open connection to the hypervisor'
+    sys.exit(1)
+
+try:
+    dom = conn.lookupByName(name)
+    # Annoyiingly, libvirt prints its own error message here
+except libvirt.libvirtError:
+    print "Domain %s is not runing" % name
+    sys.exit(0)
+
+info = dom.info()
+print_section("Domain info")
+print_entry("State:", info[0])
+print_entry("MaxMem:", info[1])
+print_entry("UsedMem:", info[2])
+print_entry("VCPUs:", info[3])
+
+# Read some info from the XML desc
+xmldesc = dom.XMLDesc(0)
+doc = libxml2.parseDoc(xmldesc)
+ctx = doc.xpathNewContext()
+print_section("Kernel")
+print_xml("Type:", ctx, "/domain/os/type")
+print_xml("Kernel:", ctx, "/domain/os/kernel")
+print_xml("initrd:", ctx, "/domain/os/initrd")
+print_xml("cmdline:", ctx, "/domain/os/cmdline")
+
+print_section("Devices")
+devs = ctx.xpathEval("/domain/devices/*")
+for d in devs:
+    ctx.setContextNode(d)
+    #pdb.set_trace()
+    type = print_xml("Type:", ctx, "@type")
+    if type == "file":
+        print_xml("Source:", ctx, "source/@file")
+        print_xml("Target:", ctx, "target/@dev")
+    elif type == "block":
+        print_xml("Source:", ctx, "source/@dev")
+        print_xml("Target:", ctx, "target/@dev")
+    elif type == "bridge":
+        print_xml("Source:", ctx, "source/@bridge")
+        print_xml("MAC Addr:", ctx, "mac/@address")
diff --git a/examples/python/domrestore.py b/examples/python/domrestore.py
new file mode 100755 (executable)
index 0000000..b032138
--- /dev/null
@@ -0,0 +1,36 @@
+#! /usr/bin/python
+# domstart - make sure a given domU is running, if not start it
+
+import libvirt
+import sys
+import os
+import libxml2
+import pdb
+
+def usage():
+   print 'Usage: %s DIR' % sys.argv[0]
+   print '       Restore all the domains contained in DIR'
+   print '       It is assumed that all files in DIR are'
+   print '       images of domU\'s previously created with save'
+
+if len(sys.argv) != 2:
+    usage()
+    sys.exit(2)
+
+dir = sys.argv[1]
+imgs = os.listdir(dir)
+
+conn = libvirt.open(None)
+if conn == None:
+    print 'Failed to open connection to the hypervisor'
+    sys.exit(1)
+
+for img in imgs:
+    file = os.path.join(dir, img)
+    print "Restoring %s ... " % img,
+    sys.stdout.flush()
+    ret = conn.restore(file)
+    if ret == 0:
+        print "done"
+    else:
+        print "error %d" % ret
diff --git a/examples/python/domsave.py b/examples/python/domsave.py
new file mode 100755 (executable)
index 0000000..35e2c8a
--- /dev/null
@@ -0,0 +1,40 @@
+#! /usr/bin/python
+# domstart - make sure a given domU is running, if not start it
+
+import libvirt
+import sys
+import os
+import libxml2
+import pdb
+
+def usage():
+   print 'Usage: %s DIR' % sys.argv[0]
+   print '       Save all currently running domU\'s into DIR'
+   print '       DIR must exist and be writable by this process'
+
+if len(sys.argv) != 2:
+    usage()
+    sys.exit(2)
+
+dir = sys.argv[1]
+
+conn = libvirt.open(None)
+if conn == None:
+    print 'Failed to open connection to the hypervisor'
+    sys.exit(1)
+
+doms = conn.listDomainsID()
+for id in doms:
+    if id == 0:
+        continue
+    dom = conn.lookupByID(id)
+    print "Saving %s[%d] ... " % (dom.name(), id),
+    sys.stdout.flush()
+    path = os.path.join(dir, dom.name())
+    ret = dom.save(path)
+    if ret == 0:
+        print "done"
+    else:
+        print "error %d" % ret
+
+#pdb.set_trace()
diff --git a/examples/python/domstart.py b/examples/python/domstart.py
new file mode 100755 (executable)
index 0000000..52fb79e
--- /dev/null
@@ -0,0 +1,50 @@
+#! /usr/bin/python
+# domstart - make sure a given domU is running, if not start it
+
+import libvirt
+import sys
+import os
+import libxml2
+import pdb
+
+# Parse the XML description of domU from FNAME
+# and return a tuple (name, xmldesc) where NAME
+# is the name of the domain, and xmldesc is the contetn of FNAME
+def read_domain(fname):
+    fp = open(fname, "r")
+    xmldesc = fp.read()
+    fp.close()
+
+    doc = libxml2.parseDoc(xmldesc)
+    name = doc.xpathNewContext().xpathEval("/domain/name")[0].content
+    return (name, xmldesc)
+
+def usage():
+   print 'Usage: %s domain.xml' % sys.argv[0]
+   print '       Check that the domain described by DOMAIN.XML is running'
+   print '       If the domain is not running, create it'
+   print '       DOMAIN.XML must be a XML description of the domain'
+   print '       in libvirt\'s XML format'
+
+if len(sys.argv) != 2:
+    usage()
+    sys.exit(2)
+
+(name, xmldesc) = read_domain(sys.argv[1])
+
+conn = libvirt.open(None)
+if conn == None:
+    print 'Failed to open connection to the hypervisor'
+    sys.exit(1)
+
+try:
+    dom = conn.lookupByName(name)
+except libvirt.libvirtError:
+    print "Starting domain %s ... " % name,
+    sys.stdout.flush()
+    dom = conn.createLinux(xmldesc, 0)
+    if dom == None:
+        print "failed"
+        sys.exit(1)
+    else:
+        print "done"
index 33a7277ae9b42a45d11bcf2dabb571c4d2ef0776..550ce5f22bb45b85f842150ad2d8aad09a8444b5 100644 (file)
@@ -509,10 +509,10 @@ gzip -9 ChangeLog
 rm -fr %{buildroot}
 
 %makeinstall
-(cd docs/examples ; make clean ; rm -rf .deps Makefile Makefile.in)
-(cd docs/examples/python ; rm -rf .deps Makefile Makefile.in)
-(cd examples/hellolibvirt ; make clean ; rm -rf .deps .libs Makefile Makefile.in)
-(cd examples/domain-events/events-c ;  make clean ;rm -rf .deps .libs Makefile Makefile.in)
+for i in domain-events dominfo domsuspend hellolibvirt python
+do
+  (cd examples/$i ; make clean ; rm -rf .deps .libs Makefile Makefile.in)
+done
 rm -f $RPM_BUILD_ROOT%{_libdir}/*.la
 rm -f $RPM_BUILD_ROOT%{_libdir}/*.a
 rm -f $RPM_BUILD_ROOT%{_libdir}/python*/site-packages/*.la
@@ -739,9 +739,11 @@ fi
 %doc %{_datadir}/gtk-doc/html/libvirt/*.css
 
 %doc docs/*.html docs/html docs/*.gif
-%doc docs/examples
 %doc docs/libvirt-api.xml
-%doc examples
+%doc examples/hellolibvirt
+%doc examples/domain-events/events-c
+%doc examples/dominfo
+%doc examples/domsuspend
 
 %if %{with_python}
 %files python
@@ -753,7 +755,8 @@ fi
 %doc python/tests/*.py
 %doc python/TODO
 %doc python/libvirtclass.txt
-%doc docs/examples/python
+%doc examples/python
+%doc examples/domain-events/events-python
 %endif
 
 %changelog