[Pkg-ganeti-devel] Bug#783722: jessie-pu: package ganeti/2.12.3-0+deb8u1

Apollon Oikonomopoulos apoikos at debian.org
Wed Apr 29 13:43:28 UTC 2015


Package: release.debian.org
Severity: normal
Tags: jessie
User: release.debian.org at packages.debian.org
Usertags: pu

Dear Release Team,

I would like to update Ganeti in Jessie to the latest upstream bugfix 
release (2.12.3). This release fixes a number of significant bugs and 
usability regressions affecting the current ganeti package in Jessie. A 
number of these issues specifically affect wheezy to jessie upgrades.

Note that upstream has a policy of maintaining bugfix-only branches for 
their stable releases, so no new functionality is included.

The most important changes, as outlined in debian/changelog, are:
    Fixes in 2.12.1:
      + Clean up stale livelock files
      + Fix setting up the metadata daemon's network interface for Xen
      + Make the watcher visible on the reason trail on disk activation
      + Allow `gnt-instance grow-disk' to ignore instance policy
      + Fix counting votes when doing master failover
      + Properly check for IPv6 use before making an SSH connection
      + Properly check if an instance exists in `gnt-instance console'

    Fixes in 2.12.2:
      + Detect and report non-master status on socket connection errors
        (closes: #783388, #781084)
      + SSH keys are now distributed only to master and master candidates
      + Improve performance for operations with frequent configuration reads
      + Improve robustness of spawning job processes, fixing timeouts
      + Fix a race condition that caused cluster verify to fail
      + Fix failing automatic glusterfs mounts
      + Fix watcher failing to read its status file on upgrade
      + Fix Xen instance state handling, taking transitional states into
        account (closes: #776772)
      + Fix conversion of diskless DRBD instances to plain
      + Fix upgrades from pre-2.6 versions, by handling hv_state_static and
        disk_state_static configuration fields
      + Fix a memory leak in the monitoring daemon
      + Fix a file descriptor leak in the ConfD client

    Fixes in 2.12.3:
      + Fix config.data upgrade issues from older versions (closes: #783186)
      + Do not allow the master node to lose its master capability
      + Properly display externally reserved IPs in `gnt-network info' output
      + Properly distribute ssconf_hvparams_* using ssconf
      + Improve `gnt-cluster renew-crypto' robustness against node
        reachability errors
      + Make sure the master IP is always removed from the old master after
        master-failover
      + Work around Python's os.minor() not supporting devices with high
        (> 255) minor numbers (closes: #782073)
      + Fix Luxid failure when DNS returns an IPv6 address that does not
        reverse resolve

The only non-bugfix change is a modification to the molly-guard helper to also
warn when rebooting/shutting down the master node, even if it runs no
instances. This change was already committed to our repository but can be
postponed for a later release if you wish so.

A full source debdiff since 2.12.0-3 is attached. For ease of review, I'm also
attaching a filtered debdiff _excluding_ the following changes:

 devel/build_chroot                              |  497 ++++++++++++++++++++++++
   Development tool, not used by or shipped in our packages

 doc/admin.rst                                   |    2 
 doc/design-daemons.rst                          |   22 -
 doc/design-file-based-storage.rst               |    4 
 doc/design-storagetypes.rst                     |    4 
 doc/html/_sources/admin.txt                     |    2 
 doc/html/_sources/design-daemons.txt            |   22 -
 doc/html/_sources/design-file-based-storage.txt |    4 
 doc/html/_sources/design-storagetypes.txt       |    4 
 doc/html/_sources/install.txt                   |    8 
   Minor documentation updates

 doc/examples/systemd/ganeti-master.target       |    8 
 doc/examples/systemd/ganeti-node.target         |    8 
 doc/examples/systemd/ganeti.service             |   18 
 doc/examples/systemd/ganeti.target              |    8 
   Systemd unit files, not used by our packages

 doc/html/_sources/news.txt                      |  128 ++++++
   Copied from NEWS

 doc/html/admin.html                             |   12 
 doc/html/cluster-keys-replacement.html          |   10 
 doc/html/cluster-merge.html                     |   10 
 doc/html/design-2.0.html                        |   10 
 doc/html/design-2.1.html                        |   10 
 doc/html/design-2.10.html                       |   10 
 doc/html/design-2.11.html                       |   10 
 doc/html/design-2.12.html                       |   10 
 doc/html/design-2.2.html                        |   10 
 doc/html/design-2.3.html                        |   10 
 doc/html/design-2.4.html                        |   10 
 doc/html/design-2.5.html                        |   10 
 doc/html/design-2.6.html                        |   10 
 doc/html/design-2.7.html                        |   10 
 doc/html/design-2.8.html                        |   10 
 doc/html/design-2.9.html                        |   10 
 doc/html/design-autorepair.html                 |   10 
 doc/html/design-bulk-create.html                |   10 
 doc/html/design-ceph-ganeti-support.html        |   10 
 doc/html/design-chained-jobs.html               |   10 
 doc/html/design-cmdlib-unittests.html           |   10 
 doc/html/design-cpu-pinning.html                |   10 
 doc/html/design-cpu-speed.html                  |   10 
 doc/html/design-daemons.html                    |   36 -
 doc/html/design-device-uuid-name.html           |   10 
 doc/html/design-disks.html                      |   10 
 doc/html/design-draft.html                      |   10 
 doc/html/design-file-based-storage.html         |   14 
 doc/html/design-glusterfs-ganeti-support.html   |   10 
 doc/html/design-hotplug.html                    |   10 
 doc/html/design-hroller.html                    |   10 
 doc/html/design-hsqueeze.html                   |   10 
 doc/html/design-htools-2.3.html                 |   10 
 doc/html/design-http-server.html                |   10 
 doc/html/design-hugepages-support.html          |   10 
 doc/html/design-impexp2.html                    |   10 
 doc/html/design-internal-shutdown.html          |   10 
 doc/html/design-kvmd.html                       |   10 
 doc/html/design-linuxha.html                    |   10 
 doc/html/design-lu-generated-jobs.html          |   10 
 doc/html/design-monitoring-agent.html           |   10 
 doc/html/design-move-instance-improvements.html |   10 
 doc/html/design-multi-reloc.html                |   10 
 doc/html/design-multi-version-tests.html        |   10 
 doc/html/design-network.html                    |   10 
 doc/html/design-node-add.html                   |   10 
 doc/html/design-node-security.html              |   10 
 doc/html/design-oob.html                        |   10 
 doc/html/design-openvswitch.html                |   10 
 doc/html/design-opportunistic-locking.html      |   10 
 doc/html/design-optables.html                   |   10 
 doc/html/design-os.html                         |   10 
 doc/html/design-ovf-support.html                |   10 
 doc/html/design-partitioned.html                |   10 
 doc/html/design-performance-tests.html          |   10 
 doc/html/design-query-splitting.html            |   10 
 doc/html/design-query2.html                     |   10 
 doc/html/design-reason-trail.html               |   10 
 doc/html/design-resource-model.html             |   10 
 doc/html/design-restricted-commands.html        |   10 
 doc/html/design-shared-storage.html             |   10 
 doc/html/design-ssh-ports.html                  |   10 
 doc/html/design-storagetypes.html               |   14 
 doc/html/design-systemd.html                    |   10 
 doc/html/design-upgrade.html                    |   10 
 doc/html/design-virtual-clusters.html           |   10 
 doc/html/design-x509-ca.html                    |   10 
 doc/html/dev-codestyle.html                     |   10 
 doc/html/devnotes.html                          |   10 
 doc/html/glossary.html                          |   10 
 doc/html/hooks.html                             |   10 
 doc/html/iallocator.html                        |   10 
 doc/html/index.html                             |   10 
 doc/html/install-quick.html                     |   10 
 doc/html/install.html                           |   18 
 doc/html/locking.html                           |   10 
 doc/html/manpages.html                          |   10 
 doc/html/monitoring-query-format.html           |   10 
 doc/html/move-instance.html                     |   10 
 doc/html/news.html                              |  283 ++++++++++---
 doc/html/ovfconverter.html                      |   10 
 doc/html/rapi.html                              |   37 -
 doc/html/search.html                            |   10 
 doc/html/searchindex.js                         |    2 
 doc/html/security.html                          |   10 
 doc/html/upgrade.html                           |   10 
 doc/html/virtual-cluster.html                   |   10 
 doc/html/walkthrough.html                       |   10 
   Version bump. doc/html is re-generated using sphinx during package build
   anyway.

 doc/install.rst                                 |    8 
   Minor documentation update regarding modprobe.d usage.

 doc/news.rst                                    |  128 ++++++
   Generated from NEWS

 man/gnt-backup.8.in                             |    5 
 man/gnt-backup.gen                              |   13 
 man/gnt-backup.html.in                          |    2 
 man/gnt-backup.rst                              |   13 
 man/gnt-cluster.8.in                            |    2 
 man/gnt-cluster.gen                             |    2 
 man/gnt-cluster.html.in                         |    2 
 man/gnt-cluster.rst                             |    2 
 man/gnt-instance.8.in                           |    4 
 man/gnt-instance.gen                            |    4 
 man/gnt-instance.html.in                        |    4 
 man/gnt-instance.rst                            |    4 
   Minor documentation clarifications/fixes

 qa/ganeti-qa.py                                 |   38 +
 qa/qa_cluster.py                                |   49 +-
 qa/qa_instance.py                               |   30 -
 qa/qa_job_utils.py                              |   21 +
 qa/qa_utils.py                                  |   85 +++-
   QA suite. Not used by or shipped in our packages.

 test/data/cluster_config_2.11.json              |    6 
 test/hs/Test/Ganeti/HTools/Cluster.hs           |    4 
 test/hs/Test/Ganeti/HTools/Instance.hs          |   44 +-
 test/hs/Test/Ganeti/Hypervisor/Xen/XmParser.hs  |    2 
 test/hs/Test/Ganeti/Objects.hs                  |    7 
 test/hs/Test/Ganeti/OpCodes.hs                  |    2 
 test/hs/Test/Ganeti/TestHTools.hs               |   19 
 test/hs/Test/Ganeti/Utils/Statistics.hs         |    2 
 test/py/cmdlib/cluster_unittest.py              |  249 ++++++++++++
 test/py/cmdlib/cmdlib_unittest.py               |   74 +++
 test/py/cmdlib/group_unittest.py                |    1 
 test/py/cmdlib/instance_unittest.py             |   24 +
 test/py/cmdlib/testsupport/__init__.py          |    2 
 test/py/cmdlib/testsupport/config_mock.py       |   20 
 test/py/cmdlib/testsupport/pathutils_mock.py    |   48 ++
 test/py/cmdlib/testsupport/wconfd_mock.py       |    3 
 test/py/ganeti.hypervisor.hv_xen_unittest.py    |   45 ++
 test/py/ganeti.storage.bdev_unittest.py         |    2 
 test/py/ganeti.storage.gluster_unittest.py      |    7 
   Test suite. Not used by or shipped in our packages.

Regards,
Apollon
-------------- next part --------------
diff -Nru ganeti-2.12.0/configure ganeti-2.12.3/configure
--- ganeti-2.12.0/configure	2014-10-10 11:52:13.000000000 +0300
+++ ganeti-2.12.3/configure	2015-04-29 11:09:37.000000000 +0300
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for ganeti 2.12.0.
+# Generated by GNU Autoconf 2.69 for ganeti 2.12.3.
 #
 # Report bugs to <ganeti at googlegroups.com>.
 #
@@ -579,8 +579,8 @@
 # Identity of this package.
 PACKAGE_NAME='ganeti'
 PACKAGE_TARNAME='ganeti'
-PACKAGE_VERSION='2.12.0'
-PACKAGE_STRING='ganeti 2.12.0'
+PACKAGE_VERSION='2.12.3'
+PACKAGE_STRING='ganeti 2.12.3'
 PACKAGE_BUGREPORT='ganeti at googlegroups.com'
 PACKAGE_URL=''
 
@@ -695,6 +695,9 @@
 EXPORT_DIR
 SSH_INITD_SCRIPT
 HEXTRA_CONFIGURE
+DEVELOPER_MODE_FALSE
+DEVELOPER_MODE_TRUE
+DEVELOPER_MODE
 HTEST_FALSE
 HTEST_TRUE
 HTEST
@@ -787,6 +790,7 @@
 enable_haskell_profiling
 enable_haskell_coverage
 enable_haskell_tests
+enable_developer_mode
 with_haskell_flags
 with_ssh_initscript
 with_export_dir
@@ -1378,7 +1382,7 @@
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures ganeti 2.12.0 to adapt to many kinds of systems.
+\`configure' configures ganeti 2.12.3 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1444,7 +1448,7 @@
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of ganeti 2.12.0:";;
+     short | recursive ) echo "Configuration of ganeti 2.12.3:";;
    esac
   cat <<\_ACEOF
 
@@ -1464,6 +1468,9 @@
                           disabled)
   --enable-haskell-tests  enable additinal Haskell development test code
                           (default: disabled)
+  --enable-developer-mode do a developper build with additional checks and
+                          fatal warnings; this is implied by enabling the
+                          haskell tests
   --enable-drbd-barriers  enable the DRBD barriers functionality by default
                           (>= 8.0.12) (default: enabled)
   --enable-syslog         enable use of syslog (default: disabled), one of
@@ -1632,7 +1639,7 @@
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-ganeti configure 2.12.0
+ganeti configure 2.12.3
 generated by GNU Autoconf 2.69
 
 Copyright (C) 2012 Free Software Foundation, Inc.
@@ -1649,7 +1656,7 @@
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by ganeti $as_me 2.12.0, which was
+It was created by ganeti $as_me 2.12.3, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   $ $0 $@
@@ -2465,7 +2472,7 @@
 
 # Define the identity of the package.
  PACKAGE='ganeti'
- VERSION='2.12.0'
+ VERSION='2.12.3'
 
 
 cat >>confdefs.h <<_ACEOF
@@ -2591,10 +2598,10 @@
 
 VERSION_MINOR=12
 
-VERSION_REVISION=0
+VERSION_REVISION=3
 
 
-VERSION_FULL=2.12.0
+VERSION_FULL=2.12.3
 
 
 BINDIR=$bindir
@@ -2729,6 +2736,31 @@
 fi
 
 
+# --enable-developer-mode
+# Check whether --enable-developer-mode was given.
+if test "${enable_developer_mode+set}" = set; then :
+  enableval=$enable_developer_mode; if test "$enableval" != no; then
+      DEVELOPER_MODE=yes
+    else
+      DEVELOPER_MODE=no
+    fi
+
+else
+  DEVELOPER_MODE=no
+
+fi
+
+DEVELOPER_MODE=$DEVELOPER_MODE
+
+ if test "$DEVELOPER_MODE" = yes -o "$HTEST" = yes; then
+  DEVELOPER_MODE_TRUE=
+  DEVELOPER_MODE_FALSE='#'
+else
+  DEVELOPER_MODE_TRUE='#'
+  DEVELOPER_MODE_FALSE=
+fi
+
+
 # --with-haskell-flags=
 
 # Check whether --with-haskell-flags was given.
@@ -3016,11 +3048,11 @@
   withval=$with_group_prefix; group_rapi="${withval}rapi";
    group_admin="${withval}admin";
    group_confd="${withval}confd";
-   group_wconfd="${withval}wconfd";
+   group_wconfd="${withval}masterd";
    group_kvmd="$group_default";
    group_luxid="${withval}luxid";
    group_masterd="${withval}masterd";
-   group_metad="${withval}metad";
+   group_metad="$group_default";
    group_noded="$group_default";
    group_daemons="${withval}daemons";
    group_mond="$group_default"
@@ -3334,7 +3366,7 @@
   # Note: Character classes ([...]) need to be double quoted due to autoconf
   # using m4
   elif ! echo "$sphinxver" | grep -q -E \
-       '^Sphinx[[:space:]]+(\(sphinx-build\)[[:space:]]+|v)[1-9]\>'; then
+       '^Sphinx([[:space:]]+|\(sphinx-build[1-9]?\)|v)*[1-9]\>'; then
     as_fn_error $? "Sphinx 1.0 or higher is required" "$LINENO" 5
   fi
 fi
@@ -5665,6 +5697,10 @@
   as_fn_error $? "conditional \"HTEST\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
+if test -z "${DEVELOPER_MODE_TRUE}" && test -z "${DEVELOPER_MODE_FALSE}"; then
+  as_fn_error $? "conditional \"DEVELOPER_MODE\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
 if test -z "${USE_BACKUP_DIR_TRUE}" && test -z "${USE_BACKUP_DIR_FALSE}"; then
   as_fn_error $? "conditional \"USE_BACKUP_DIR\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
@@ -6114,7 +6150,7 @@
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by ganeti $as_me 2.12.0, which was
+This file was extended by ganeti $as_me 2.12.3, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -6167,7 +6203,7 @@
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
-ganeti config.status 2.12.0
+ganeti config.status 2.12.3
 configured by $0, generated by GNU Autoconf 2.69,
   with options \\"\$ac_cs_config\\"
 
diff -Nru ganeti-2.12.0/configure.ac ganeti-2.12.3/configure.ac
--- ganeti-2.12.0/configure.ac	2014-10-09 14:57:28.000000000 +0300
+++ ganeti-2.12.3/configure.ac	2015-04-29 11:09:35.000000000 +0300
@@ -1,7 +1,7 @@
 # Configure script for Ganeti
 m4_define([gnt_version_major], [2])
 m4_define([gnt_version_minor], [12])
-m4_define([gnt_version_revision], [0])
+m4_define([gnt_version_revision], [3])
 m4_define([gnt_version_suffix], [])
 m4_define([gnt_version_full],
           m4_format([%d.%d.%d%s],
@@ -108,6 +108,24 @@
 AC_SUBST(HTEST, $HTEST)
 AM_CONDITIONAL([HTEST], [test "$HTEST" = yes])
 
+# --enable-developer-mode
+AC_ARG_ENABLE([developer-mode],
+  [AS_HELP_STRING([--enable-developer-mode],
+                  m4_normalize([do a developper build with additional
+                  checks and fatal warnings; this is implied by enabling
+                  the haskell tests]))],
+  [[if test "$enableval" != no; then
+      DEVELOPER_MODE=yes
+    else
+      DEVELOPER_MODE=no
+    fi
+  ]],
+  [DEVELOPER_MODE=no
+  ])
+AC_SUBST(DEVELOPER_MODE, $DEVELOPER_MODE)
+AM_CONDITIONAL([DEVELOPER_MODE],
+               [test "$DEVELOPER_MODE" = yes -o "$HTEST" = yes])
+
 # --with-haskell-flags=
 AC_ARG_WITH([haskell-flags],
   [AS_HELP_STRING([--with-haskell-flags=FLAGS],
@@ -338,11 +356,11 @@
   [group_rapi="${withval}rapi";
    group_admin="${withval}admin";
    group_confd="${withval}confd";
-   group_wconfd="${withval}wconfd";
+   group_wconfd="${withval}masterd";
    group_kvmd="$group_default";
    group_luxid="${withval}luxid";
    group_masterd="${withval}masterd";
-   group_metad="${withval}metad";
+   group_metad="$group_default";
    group_noded="$group_default";
    group_daemons="${withval}daemons";
    group_mond="$group_default"],
@@ -494,7 +512,7 @@
   # Note: Character classes ([...]) need to be double quoted due to autoconf
   # using m4
   elif ! echo "$sphinxver" | grep -q -E \
-       '^Sphinx[[[:space:]]]+(\(sphinx-build\)[[[:space:]]]+|v)[[1-9]]\>'; then
+       '^Sphinx([[[:space:]]]+|\(sphinx-build[[1-9]]?\)|v)*[[1-9]]\>'; then
     AC_MSG_ERROR([Sphinx 1.0 or higher is required])
   fi
 fi
diff -Nru ganeti-2.12.0/debian/changelog ganeti-2.12.3/debian/changelog
--- ganeti-2.12.0/debian/changelog	2014-10-18 01:07:33.000000000 +0300
+++ ganeti-2.12.3/debian/changelog	2015-04-29 15:16:06.000000000 +0300
@@ -1,3 +1,59 @@
+ganeti (2.12.3-0+deb8u1) jessie; urgency=medium
+
+  [ Apollon Oikonomopoulos ]
+  * New upstream bugfix release (see /usr/share/doc/ganeti/NEWS.gz):
+    Fixes in 2.12.1:
+      + Clean up stale livelock files
+      + Fix setting up the metadata daemon's network interface for Xen
+      + Make the watcher visible on the reason trail on disk activation
+      + Allow `gnt-instance grow-disk' to ignore instance policy
+      + Fix counting votes when doing master failover
+      + Properly check for IPv6 use before making an SSH connection
+      + Properly check if an instance exists in `gnt-instance console'
+
+    Fixes in 2.12.2:
+      + Detect and report non-master status on socket connection errors
+        (closes: #783388, #781084)
+      + SSH keys are now distributed only to master and master candidates
+      + Improve performance for operations with frequent configuration reads
+      + Improve robustness of spawning job processes, fixing timeouts
+      + Fix a race condition that caused cluster verify to fail
+      + Fix failing automatic glusterfs mounts
+      + Fix watcher failing to read its status file on upgrade
+      + Fix Xen instance state handling, taking transitional states into
+        account (closes: #776772)
+      + Fix conversion of diskless DRBD instances to plain
+      + Fix upgrades from pre-2.6 versions, by handling hv_state_static and
+        disk_state_static configuration fields
+      + Fix a memory leak in the monitoring daemon
+      + Fix a file descriptor leak in the ConfD client
+
+    Fixes in 2.12.3:
+      + Fix config.data upgrade issues from older versions (closes: #783186)
+      + Do not allow the master node to lose its master capability
+      + Properly display externally reserved IPs in `gnt-network info' output
+      + Properly distribute ssconf_hvparams_* using ssconf
+      + Improve `gnt-cluster renew-crypto' robustness against node
+        reachability errors
+      + Make sure the master IP is always removed from the old master after
+        master-failover
+      + Work around Python's os.minor() not supporting devices with high
+        (> 255) minor numbers (closes: #782073)
+      + Fix Luxid failure when DNS returns an IPv6 address that does not
+        reverse resolve
+  * Drop fix-wconfd-metad patch, merged upstream.
+  * d/copyright: adjust copyright years
+
+  [ Gregory Potamianos ]
+  * molly-guard: detect master status and warn when attempting to shutdown or
+    reboot the master node.
+
+  [ Debconf translations ]
+  * Dutch (Frans Spiesschaert, closes: #765856)
+  * Swedish (Martin Bagge, closes: #769870)
+
+ -- Apollon Oikonomopoulos <apoikos at debian.org>  Wed, 29 Apr 2015 14:06:45 +0300
+
 ganeti (2.12.0-3) unstable; urgency=medium
 
   * Use proper groups for wconfd and metad (closes: #765764).
diff -Nru ganeti-2.12.0/debian/copyright ganeti-2.12.3/debian/copyright
--- ganeti-2.12.0/debian/copyright	2014-10-18 01:07:33.000000000 +0300
+++ ganeti-2.12.3/debian/copyright	2015-04-29 15:16:06.000000000 +0300
@@ -3,12 +3,12 @@
 Source: http://code.google.com/p/ganeti
 
 Files: *
-Copyright: Copyright (c) 2006-2014 Google Inc.
+Copyright: Copyright (c) 2006-2015 Google Inc.
 License: BSD-2-Clause
 
 Files: debian/*
 Copyright: Copyright (c) 2007 Leonardo Rodrigues de Mello <l at lmello.eu.org>
-           Copyright (c) 2007-2013 Debian Ganeti Team <pkg-ganeti at lists.alioth.debian.org>
+           Copyright (c) 2007-2015 Debian Ganeti Team <pkg-ganeti at lists.alioth.debian.org>
 License: GPL-2+
 
 Files: doc/html/_static/basic.css
diff -Nru ganeti-2.12.0/debian/molly-guard-helper ganeti-2.12.3/debian/molly-guard-helper
--- ganeti-2.12.0/debian/molly-guard-helper	2014-10-18 01:07:33.000000000 +0300
+++ ganeti-2.12.3/debian/molly-guard-helper	2015-04-29 15:16:06.000000000 +0300
@@ -71,12 +71,23 @@
             sys.stderr.write("W: unable to list %s instances: %s\n" %
                              (hv_type, str(err)))
 
-    if instances:
-        sys.stdout.write("W: The following Ganeti instances will be"
-                         " terminated abnormally if you %s this system:\n" %
-                         action)
-        for instance in sorted(instances):
-            sys.stdout.write("   - %s\n" % instance)
+    current_master = conf.GetMasterNode()
+
+    node_is_current_master = False
+    if hostname == current_master:
+        node_is_current_master = True
+
+    if instances or node_is_current_master:
+        if instances:
+            sys.stdout.write("W: The following Ganeti instances will be"
+                             " terminated abnormally if you %s this system:\n" %
+                             action)
+            for instance in sorted(instances):
+                sys.stdout.write("   - %s\n" % instance)
+
+        if node_is_current_master:
+            sys.stdout.write("W: This system is the current Ganeti master"
+                             " for this cluster\n")
 
         try:
             response = raw_input("Type YES to %s the system: " % action)
diff -Nru ganeti-2.12.0/debian/patches/fix-wconfd-metad ganeti-2.12.3/debian/patches/fix-wconfd-metad
--- ganeti-2.12.0/debian/patches/fix-wconfd-metad	2014-10-18 01:07:33.000000000 +0300
+++ ganeti-2.12.3/debian/patches/fix-wconfd-metad	1970-01-01 02:00:00.000000000 +0200
@@ -1,28 +0,0 @@
-commit 62d0ee90a1a16aa20af2c84cf37a0686c4bfd99d
-Author: Apollon Oikonomopoulos <apoikos at gmail.com>
-Date:   Sat Oct 18 00:42:32 2014 +0300
-
-    Really run wconfd as masterd and metad as root
-    
-    Commits 9decc439eb4 and 4ddce51deb were incomplete, missing the relevant
-    group specifications. Since the decision was made to run wconfd as
-    masterd and metad as root, we use the respective existing groups.
-    
-    Signed-off-by: Apollon Oikonomopoulos <apoikos at gmail.com>
-
---- a/configure
-+++ b/configure
-@@ -3016,11 +3016,11 @@
-   withval=$with_group_prefix; group_rapi="${withval}rapi";
-    group_admin="${withval}admin";
-    group_confd="${withval}confd";
--   group_wconfd="${withval}wconfd";
-+   group_wconfd="${withval}masterd";
-    group_kvmd="$group_default";
-    group_luxid="${withval}luxid";
-    group_masterd="${withval}masterd";
--   group_metad="${withval}metad";
-+   group_metad="$group_default";
-    group_noded="$group_default";
-    group_daemons="${withval}daemons";
-    group_mond="$group_default"
diff -Nru ganeti-2.12.0/debian/patches/series ganeti-2.12.3/debian/patches/series
--- ganeti-2.12.0/debian/patches/series	2014-10-18 01:07:33.000000000 +0300
+++ ganeti-2.12.3/debian/patches/series	2015-04-29 15:16:06.000000000 +0300
@@ -2,4 +2,3 @@
 cfgupgrade12-remove-old-ssconf.patch
 0003-Disable-local-checks-during-build.patch
 do-not-backup-export-dir.patch
-fix-wconfd-metad
diff -Nru ganeti-2.12.0/debian/po/nl.po ganeti-2.12.3/debian/po/nl.po
--- ganeti-2.12.0/debian/po/nl.po	1970-01-01 02:00:00.000000000 +0200
+++ ganeti-2.12.3/debian/po/nl.po	2015-04-29 15:16:06.000000000 +0300
@@ -0,0 +1,57 @@
+# Dutch translation of ganeti debconf templates.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the ganeti package.
+# Frans Spiesschaert <Frans.Spiesschaert at yucom.be>, 2014.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: ganeti\n"
+"Report-Msgid-Bugs-To: ganeti at packages.debian.org\n"
+"POT-Creation-Date: 2014-04-08 08:41+0200\n"
+"PO-Revision-Date: 2014-10-06 12:04+0200\n"
+"Last-Translator: Frans Spiesschaert <Frans.Spiesschaert at yucom.be>\n"
+"Language-Team: Debian Dutch l10n Team <debian-l10n-dutch at lists.debian.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. Type: boolean
+#. Description
+#: ../templates/versioned.templates:2001
+msgid "Abort ${package} removal?"
+msgstr "Verwijderen van ${package} afbreken?"
+
+#. Type: boolean
+#. Description
+#: ../templates/versioned.templates:2001
+msgid ""
+"You are attempting to remove ${package}, but it seems that the running "
+"Ganeti version is still ${version}."
+msgstr ""
+"U probeert ${package} te verwijderen, maar het ziet er naar uit dat de "
+"actieve versie van Ganeti nog altijd ${version} is."
+
+#. Type: boolean
+#. Description
+#: ../templates/versioned.templates:2001
+msgid ""
+"This can happen if you upgrade the ganeti package to a new minor version, "
+"but have not run \"gnt-cluster upgrade\" yet. Removing ${package} will cause "
+"Ganeti to stop functioning correctly."
+msgstr ""
+"Dit fenomeen kan zich voordoen als u het pakket ganeti opwaardeert naar een "
+"nieuwe onderversie, maar nog niet de opdracht \"gnt-cluster upgrade\" "
+"uitgevoerd heeft. Als u ${package} verwijdert zal Ganeti niet langer correct "
+"functioneren."
+
+#. Type: boolean
+#. Description
+#: ../templates/versioned.templates:2001
+msgid ""
+"It is highly recommended to abort the removal now and upgrade the cluster "
+"before removing ${package}."
+msgstr ""
+"Het wordt stellig aanbevolen om nu het verwijderen af te breken en eerst de "
+"cluster op te waarderen voor u ${package} verwijdert."
diff -Nru ganeti-2.12.0/debian/po/sv.po ganeti-2.12.3/debian/po/sv.po
--- ganeti-2.12.0/debian/po/sv.po	1970-01-01 02:00:00.000000000 +0200
+++ ganeti-2.12.3/debian/po/sv.po	2015-04-29 15:16:06.000000000 +0300
@@ -0,0 +1,57 @@
+# Translation of ganeti debconf template to Swedish
+# Copyright (C) 2014 Martin Bagge <brother at bsnet.se>
+# This file is distributed under the same license as the ganeti package.
+#
+# Martin Bagge <brother at bsnet.se>, 2014
+msgid ""
+msgstr ""
+"Project-Id-Version: ganeti\n"
+"Report-Msgid-Bugs-To: ganeti at packages.debian.org\n"
+"POT-Creation-Date: 2014-04-08 08:41+0200\n"
+"PO-Revision-Date: 2014-11-17 09:44+0100\n"
+"Last-Translator: Martin Bagge / brother <brother at bsnet.se>\n"
+"Language-Team: Swedish <debian-l10n-swedish at lists.debian.org>\n"
+"Language: sv\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Poedit 1.6.10\n"
+
+#. Type: boolean
+#. Description
+#: ../templates/versioned.templates:2001
+msgid "Abort ${package} removal?"
+msgstr "Avbryt radering av ${package}?"
+
+#. Type: boolean
+#. Description
+#: ../templates/versioned.templates:2001
+msgid ""
+"You are attempting to remove ${package}, but it seems that the running "
+"Ganeti version is still ${version}."
+msgstr ""
+"Du försöker ta bort ${package} men det verkar som att Ganeti kör version "
+"${version} fortfarande."
+
+#. Type: boolean
+#. Description
+#: ../templates/versioned.templates:2001
+msgid ""
+"This can happen if you upgrade the ganeti package to a new minor version, "
+"but have not run \"gnt-cluster upgrade\" yet. Removing ${package} will cause "
+"Ganeti to stop functioning correctly."
+msgstr ""
+"Detta kan inträffa vid en mindre uppdatering av ganeti-paketet utan att ha "
+"kört \"gnt-cluster upgrade\" än. Tas ${package} bort kommer Ganeti att sluta "
+"fungera korrekt."
+
+#. Type: boolean
+#. Description
+#: ../templates/versioned.templates:2001
+msgid ""
+"It is highly recommended to abort the removal now and upgrade the cluster "
+"before removing ${package}."
+msgstr ""
+"En stark rekommendation är att avbryta raderingen nu och uppgradera klustret "
+"innan ${package} tas bort."
diff -Nru ganeti-2.12.0/devel/build_chroot ganeti-2.12.3/devel/build_chroot
--- ganeti-2.12.0/devel/build_chroot	1970-01-01 02:00:00.000000000 +0200
+++ ganeti-2.12.3/devel/build_chroot	2015-04-29 11:09:35.000000000 +0300
@@ -0,0 +1,497 @@
+#!/bin/bash
+#Configuration
+: ${ARCH:=amd64}
+: ${DIST_RELEASE:=squeeze}
+: ${CONF_DIR:=/etc/schroot/chroot.d}
+: ${CHROOT_DIR:=/srv/chroot}
+: ${ALTERNATIVE_EDITOR:=/usr/bin/vim.basic}
+: ${CHROOT_FINAL_HOOK:=/bin/true}
+# Additional Variables taken from the environmen
+# DATA_DIR
+# CHROOT_EXTRA_DEBIAN_PACKAGES
+
+#Automatically generated variables
+CHROOTNAME=$DIST_RELEASE-$ARCH
+CHNAME=building_$CHROOTNAME
+TEMP_CHROOT_CONF=$CONF_DIR/$CHNAME.conf
+FINAL_CHROOT_CONF=$CHROOTNAME.conf
+ROOT=`pwd`
+CHDIR=$ROOT/$CHNAME
+USER=`whoami`
+COMP_FILENAME=$CHROOTNAME.tar.gz
+COMP_FILEPATH=$ROOT/$COMP_FILENAME
+TEMP_DATA_DIR=`mktemp -d`
+ACTUAL_DATA_DIR=$DATA_DIR
+ACTUAL_DATA_DIR=${ACTUAL_DATA_DIR:-$TEMP_DATA_DIR}
+GHC_VERSION="7.6.3"
+CABAL_INSTALL_VERSION="1.18.0.2"
+SHA1_LIST='
+cabal-install-1.18.0.2.tar.gz 2d1f7a48d17b1e02a1e67584a889b2ff4176a773
+ghc-7.6.3-i386-unknown-linux.tar.bz2 f042b4171a2d4745137f2e425e6949c185f8ea14
+ghc-7.6.3-x86_64-unknown-linux.tar.bz2 46ec3f3352ff57fba0dcbc8d9c20f7bcb6924b77
+'
+
+# export all variables needed in the schroot
+export ARCH GHC_VERSION CABAL_INSTALL_VERSION SHA1_LIST
+
+# Use gzip --rsyncable if available, to speed up transfers of generated files
+# The environment variable GZIP is read automatically by 'gzip',
+# see ENVIRONMENT in gzip(1).
+gzip --rsyncable </dev/null >/dev/null 2>&1 && export GZIP="--rsyncable"
+
+#Runnability checks
+if [ $USER != 'root' ]
+then
+  echo "This script requires root permissions to run"
+  exit
+fi
+
+if [ -f $TEMP_CHROOT_CONF ]
+then
+  echo "The configuration file name for the temporary chroot"
+  echo "  $TEMP_CHROOT_CONF"
+  echo "already exists."
+  echo "Remove it or change the CHNAME value in the script."
+  exit
+fi
+
+#Create configuration dir and files if they do not exist
+if [ ! -d $ACTUAL_DATA_DIR ]
+then
+  mkdir $ACTUAL_DATA_DIR
+  echo "The data directory"
+  echo "  $ACTUAL_DATA_DIR"
+  echo "has been created."
+fi
+
+if [ ! -f $ACTUAL_DATA_DIR/final.schroot.conf.in ]
+then
+  cat <<END >$ACTUAL_DATA_DIR/final.schroot.conf.in
+[${CHROOTNAME}]
+description=Debian ${DIST_RELEASE} ${ARCH}
+groups=src
+source-root-groups=root
+type=file
+file=${CHROOT_DIR}/${COMP_FILENAME}
+END
+  echo "The file"
+  echo " $ACTUAL_DATA_DIR/final.schroot.conf.in"
+  echo "has been created with default configurations."
+fi
+
+if [ ! -f $ACTUAL_DATA_DIR/temp.schroot.conf.in ]
+then
+  cat <<END >$ACTUAL_DATA_DIR/temp.schroot.conf.in
+[${CHNAME}]
+description=Debian ${DIST_RELEASE} ${ARCH}
+directory=${CHDIR}
+groups=src
+users=root
+type=directory
+END
+  echo "The file"
+  echo " $ACTUAL_DATA_DIR/temp.schroot.conf.in"
+  echo "has been created with default configurations."
+fi
+
+#Stop on errors
+set -e
+
+#Cleanup
+rm -rf $CHDIR
+mkdir $CHDIR
+
+#Install tools for building chroots
+apt-get install -y schroot debootstrap
+
+shopt -s expand_aliases
+alias in_chroot='schroot -c $CHNAME -d / '
+function subst_variables {
+  sed \
+    -e "s/\${ARCH}/$ARCH/" \
+    -e "s*\${CHDIR}*$CHDIR*" \
+    -e "s/\${CHNAME}/$CHNAME/" \
+    -e "s/\${CHROOTNAME}/$CHROOTNAME/" \
+    -e "s*\${CHROOT_DIR}*$CHROOT_DIR*" \
+    -e "s/\${COMP_FILENAME}/$COMP_FILENAME/" \
+    -e "s/\${DIST_RELEASE}/$DIST_RELEASE/" $@
+}
+
+#Generate chroot configurations
+cat $ACTUAL_DATA_DIR/temp.schroot.conf.in | subst_variables > $TEMP_CHROOT_CONF
+cat $ACTUAL_DATA_DIR/final.schroot.conf.in | subst_variables > $FINAL_CHROOT_CONF
+
+#Install the base system
+debootstrap --arch $ARCH $DIST_RELEASE $CHDIR
+
+APT_INSTALL="apt-get install -y --no-install-recommends"
+
+if [ DIST_RELEASE = squeeze ]
+then
+  echo "deb http://backports.debian.org/debian-backports" \
+       "$DIST_RELEASE-backports main contrib non-free" \
+       > $CHDIR/etc/apt/sources.list.d/backports.list
+fi
+
+#Install all the packages
+in_chroot -- \
+  apt-get update
+
+
+# Functions for downloading and checking Haskell core components.
+# The functions run commands within the schroot.
+
+# arguments : file_name expected_sha1
+function verify_sha1 {
+  local SUM="$( in_chroot -- sha1sum "$1" | awk '{print $1;exit}' )"
+  if [ "$SUM" != "$2" ] ; then
+    echo "ERROR: The SHA1 sum $SUM of $1 doesn't match $2." >&2
+    return 1
+  else
+    echo "SHA1 of $1 verified correct."
+  fi
+}
+
+# arguments: URL
+function lookup_sha1 {
+  grep -o "${1##*/}"'\s\+[0-9a-fA-F]*' <<<"$SHA1_LIST" | awk '{print $2;exit}'
+}
+
+# arguments : file_name URL
+function download {
+  local FNAME="$1"
+  local URL="$2"
+  in_chroot -- wget --output-document="$FNAME" "$URL"
+  verify_sha1 "$FNAME" "$( lookup_sha1 "$URL" )"
+}
+
+function install_ghc {
+  local GHC_ARCH=$ARCH
+  local TDIR=$( schroot -c $CHNAME -d / -- mktemp -d )
+  [ -n "$TDIR" ]
+  if [ "$ARCH" == "amd64" ] ; then
+    download "$TDIR"/ghc.tar.bz2 \
+      http://www.haskell.org/ghc/dist/${GHC_VERSION}/ghc-${GHC_VERSION}-x86_64-unknown-linux.tar.bz2
+  elif [ "$ARCH" == "i386" ] ; then
+    download "$TDIR"/ghc.tar.bz2 \
+      http://www.haskell.org/ghc/dist/${GHC_VERSION}/ghc-${GHC_VERSION}-i386-unknown-linux.tar.bz2
+  else
+    echo "Don't know what GHC to download for architecture $ARCH" >&2
+    return 1
+  fi
+  schroot -c $CHNAME -d "$TDIR" -- \
+    tar xjf ghc.tar.bz2
+  schroot -c $CHNAME -d "$TDIR/ghc-${GHC_VERSION}" -- \
+    ./configure --prefix=/usr/local
+  schroot -c $CHNAME -d "$TDIR/ghc-${GHC_VERSION}" -- \
+     make install
+  schroot -c $CHNAME -d "/" -- \
+    rm -rf "$TDIR"
+}
+
+function install_cabal {
+  local TDIR=$( schroot -c $CHNAME -d / -- mktemp -d )
+  [ -n "$TDIR" ]
+  download "$TDIR"/cabal-install.tar.gz \
+    http://www.haskell.org/cabal/release/cabal-install-${CABAL_INSTALL_VERSION}/cabal-install-${CABAL_INSTALL_VERSION}.tar.gz
+  schroot -c $CHNAME -d "$TDIR" -- \
+    tar xzf cabal-install.tar.gz
+  schroot -c $CHNAME -d "$TDIR/cabal-install-${CABAL_INSTALL_VERSION}" -- \
+    bash -c 'EXTRA_CONFIGURE_OPTS="--enable-library-profiling" ./bootstrap.sh --global'
+  schroot -c $CHNAME -d "/" -- \
+    rm -rf "$TDIR"
+}
+
+
+case $DIST_RELEASE in
+
+  squeeze)
+
+    # do not install libghc6-network-dev, since it's too old, and just
+    # confuses the dependencies
+    in_chroot -- \
+      $APT_INSTALL \
+        autoconf automake \
+        zlib1g-dev \
+        libgmp3-dev \
+        libcurl4-gnutls-dev \
+        libpcre3-dev \
+        happy \
+        hlint hscolour pandoc \
+        graphviz qemu-utils \
+        python-docutils \
+        python-simplejson \
+        python-pyparsing \
+        python-pyinotify \
+        python-pycurl \
+        python-ipaddr \
+        python-yaml \
+        python-paramiko
+
+    in_chroot -- \
+      $APT_INSTALL python-setuptools python-dev build-essential
+
+    in_chroot -- \
+      easy_install \
+        logilab-astng==0.24.1 \
+        logilab-common==0.58.3 \
+        mock==1.0.1 \
+        pylint==0.26.0
+
+    in_chroot -- \
+      easy_install \
+        sphinx==1.1.3 \
+        pep8==1.3.3 \
+        coverage==3.4 \
+        bitarray==0.8.0
+
+    install_ghc
+
+    install_cabal
+
+    in_chroot -- \
+      cabal update
+
+    # sinec we're using Cabal >=1.16, we can use the parallel install option
+    in_chroot -- \
+      cabal install --global -j --enable-library-profiling \
+        attoparsec-0.11.1.0 \
+        base64-bytestring-1.0.0.1 \
+        blaze-builder-0.3.3.2 \
+        case-insensitive-1.1.0.3 \
+        Crypto-4.2.5.1 \
+        curl-1.3.8 \
+        happy \
+        hashable-1.2.1.0 \
+        hinotify-0.3.6 \
+        hscolour-1.20.3 \
+        hslogger-1.2.3 \
+        json-0.7 \
+        lifted-base-0.2.2.0 \
+        lens-4.0.4 \
+        MonadCatchIO-transformers-0.3.0.0 \
+        network-2.4.1.2 \
+        parallel-3.2.0.4 \
+        parsec-3.1.3 \
+        regex-pcre-0.94.4 \
+        temporary-1.2.0.1 \
+        vector-0.10.9.1 \
+        zlib-0.5.4.1 \
+        \
+        hlint-1.8.57 \
+        HUnit-1.2.5.2 \
+        QuickCheck-2.6 \
+        test-framework-0.8.0.3 \
+        test-framework-hunit-0.3.0.1 \
+        test-framework-quickcheck2-0.3.0.2 \
+        \
+        snap-server-0.9.4.0 \
+        \
+        cabal-file-th-0.2.3 \
+        shelltestrunner
+
+    #Install selected packages from backports
+    in_chroot -- \
+      $APT_INSTALL -t squeeze-backports \
+        git \
+        git-email \
+        vim
+
+;;
+
+  wheezy)
+
+    in_chroot -- \
+      $APT_INSTALL \
+      autoconf automake ghc ghc-haddock libghc-network-dev \
+      libghc-test-framework{,-hunit,-quickcheck2}-dev \
+      libghc-json-dev libghc-curl-dev libghc-hinotify-dev \
+      libghc-parallel-dev libghc-utf8-string-dev \
+      libghc-hslogger-dev libghc-crypto-dev \
+      libghc-regex-pcre-dev libghc-attoparsec-dev \
+      libghc-vector-dev libghc-temporary-dev \
+      libghc-snap-server-dev libpcre3 libpcre3-dev hscolour hlint pandoc \
+      libghc-zlib-dev \
+      cabal-install \
+      python-setuptools python-sphinx python-epydoc graphviz python-pyparsing \
+      python-simplejson python-pycurl python-paramiko \
+      python-bitarray python-ipaddr python-yaml qemu-utils python-coverage pep8 \
+      shelltestrunner python-dev pylint openssh-client vim git git-email
+
+    # We need version 0.9.4 of pyinotify because the packaged version, 0.9.3, is
+    # incompatibile with the packaged version of python-epydoc 3.0.1.
+    # Reason: a logger class in pyinotify calculates its superclasses at
+    # runtime, which clashes with python-epydoc's static analysis phase.
+    #
+    # Problem introduced in:
+    #   https://github.com/seb-m/pyinotify/commit/2c7e8f8959d2f8528e0d90847df360
+    # and "fixed" in:
+    #   https://github.com/seb-m/pyinotify/commit/98c5f41a6e2e90827a63ff1b878596
+
+    in_chroot -- \
+      easy_install pyinotify==0.9.4
+
+     in_chroot -- \
+       cabal update
+
+     in_chroot -- \
+       cabal install --global \
+        'base64-bytestring>=1' \
+        lens-3.10.2 \
+        'lifted-base>=0.1.2'
+;;
+
+  testing)
+
+    in_chroot -- \
+      $APT_INSTALL \
+      autoconf automake ghc ghc-haddock libghc-network-dev \
+      libghc-test-framework{,-hunit,-quickcheck2}-dev \
+      libghc-json-dev libghc-curl-dev libghc-hinotify-dev \
+      libghc-parallel-dev libghc-utf8-string-dev \
+      libghc-hslogger-dev libghc-crypto-dev \
+      libghc-regex-pcre-dev libghc-attoparsec-dev \
+      libghc-vector-dev libghc-temporary-dev \
+      libghc-snap-server-dev libpcre3 libpcre3-dev hscolour hlint pandoc \
+      libghc-zlib-dev \
+      libghc-base64-bytestring-dev libghc-lens-dev libghc-lifted-base-dev \
+      cabal-install \
+      python-setuptools python-sphinx python-epydoc graphviz python-pyparsing \
+      python-simplejson python-pycurl python-pyinotify python-paramiko \
+      python-bitarray python-ipaddr python-yaml qemu-utils python-coverage pep8 \
+      shelltestrunner python-dev pylint openssh-client vim git git-email
+;;
+
+  precise)
+    # ghc, git-email and other dependencies are hosted in the universe
+    # repository, which is not enabled by default.
+    echo "Adding universe repository..."
+    cat > $CHDIR/etc/apt/sources.list.d/universe.list <<EOF
+deb http://archive.ubuntu.com/ubuntu precise universe
+EOF
+    in_chroot -- \
+      apt-get update
+
+    echo "Installing packages"
+    in_chroot -- \
+      $APT_INSTALL \
+      autoconf automake ghc ghc-haddock libghc-network-dev \
+      libghc-test-framework{,-hunit,-quickcheck2}-dev \
+      libghc-json-dev libghc-curl-dev libghc-hinotify-dev \
+      libghc-parallel-dev libghc-utf8-string-dev \
+      libghc-hslogger-dev libghc-crypto-dev \
+      libghc-regex-pcre-dev libghc-attoparsec-dev \
+      libghc-vector-dev libghc-temporary-dev \
+      libghc-snap-server-dev libpcre3 libpcre3-dev hscolour hlint pandoc \
+      python-setuptools python-sphinx python-epydoc graphviz python-pyparsing \
+      python-simplejson python-pyinotify python-pycurl python-paramiko \
+      python-bitarray python-ipaddr python-yaml qemu-utils python-coverage pep8 \
+      python-dev pylint openssh-client vim git git-email \
+      build-essential
+
+    echo "Installing cabal packages"
+    in_chroot -- \
+      $APT_INSTALL cabal-install
+
+    in_chroot -- \
+      cabal update
+
+     in_chroot -- \
+       cabal install --global \
+        'base64-bytestring>=1' \
+        lens-3.10.2 \
+        'lifted-base>=0.1.2'
+
+    in_chroot -- \
+      cabal install --global shelltestrunner
+    ;;
+
+  *)
+    in_chroot -- \
+      $APT_INSTALL \
+      autoconf automake ghc ghc-haddock libghc-network-dev \
+      libghc-test-framework{,-hunit,-quickcheck2}-dev \
+      libghc-json-dev libghc-curl-dev libghc-hinotify-dev \
+      libghc-parallel-dev libghc-utf8-string-dev \
+      libghc-hslogger-dev libghc-crypto-dev \
+      libghc-regex-pcre-dev libghc-attoparsec-dev \
+      libghc-vector-dev libghc-temporary-dev \
+      libghc-snap-server-dev libpcre3 libpcre3-dev hscolour hlint pandoc \
+      libghc-lifted-base-dev \
+      libghc-base64-bytestring-dev \
+      python-setuptools python-sphinx python-epydoc graphviz python-pyparsing \
+      python-simplejson python-pyinotify python-pycurl python-paramiko \
+      python-bitarray python-ipaddr python-yaml qemu-utils python-coverage pep8 \
+      shelltestrunner python-dev pylint openssh-client vim git git-email \
+      build-essential
+
+;;
+esac
+
+# print what packages and versions are installed:
+in_chroot -- \
+  cabal list --installed --simple-output
+
+in_chroot -- \
+  $APT_INSTALL sudo fakeroot rsync locales less socat
+
+# Configure the locale
+case $DIST_RELEASE in
+  precise)
+    in_chroot -- \
+      $APT_INSTALL language-pack-en
+    ;;
+  *)
+    echo "en_US.UTF-8 UTF-8" >> $CHDIR/etc/locale.gen
+
+    in_chroot -- \
+      locale-gen
+    ;;
+esac
+
+in_chroot -- \
+  $APT_INSTALL lvm2 ssh bridge-utils iproute iputils-arping \
+               ndisc6 python-openssl openssl \
+               python-mock fping qemu-utils
+
+in_chroot -- \
+  easy_install psutil
+
+in_chroot -- \
+  easy_install jsonpointer \
+    jsonpointer \
+    jsonpatch
+
+in_chroot -- \
+  $APT_INSTALL \
+  python-epydoc debhelper quilt
+
+# extra debian packages
+
+for package in $CHROOT_EXTRA_DEBIAN_PACKAGES
+do in_chroot -- \
+  $APT_INSTALL $package
+done
+
+#Set default editor
+in_chroot -- \
+  update-alternatives --set editor $ALTERNATIVE_EDITOR
+
+# Final user hook
+
+in_chroot -- $CHROOT_FINAL_HOOK
+
+rm -f $COMP_FILEPATH
+echo "Creating compressed schroot image..."
+cd $CHDIR
+tar czf $COMP_FILEPATH ./*
+cd $ROOT
+
+rm -rf $CHDIR
+rm -f $TEMP_CHROOT_CONF
+rm -rf $TEMP_DATA_DIR
+
+echo "Chroot created. In order to run it:"
+echo " * Copy the file $FINAL_CHROOT_CONF to $CONF_DIR/$FINAL_CHROOT_CONF"
+echo " * Copy the file $COMP_FILEPATH to $CHROOT_DIR/$COMP_FILENAME"
+echo "Then run \"schroot -c $CHROOTNAME\""
diff -Nru ganeti-2.12.0/doc/admin.rst ganeti-2.12.3/doc/admin.rst
--- ganeti-2.12.0/doc/admin.rst	2014-10-06 18:10:35.000000000 +0300
+++ ganeti-2.12.3/doc/admin.rst	2015-04-29 11:09:35.000000000 +0300
@@ -1555,7 +1555,7 @@
 Note that the set of characters present in a tag and the maximum tag
 length are restricted. Currently the maximum length is 128 characters,
 there can be at most 4096 tags per object, and the set of characters is
-comprised by alphanumeric characters and additionally ``.+*/:@-``.
+comprised by alphanumeric characters and additionally ``.+*/:@-_``.
 
 Operations
 ++++++++++
diff -Nru ganeti-2.12.0/doc/design-daemons.rst ganeti-2.12.3/doc/design-daemons.rst
--- ganeti-2.12.0/doc/design-daemons.rst	2014-10-07 17:45:37.000000000 +0300
+++ ganeti-2.12.3/doc/design-daemons.rst	2015-04-29 11:09:35.000000000 +0300
@@ -175,7 +175,7 @@
 
 ``Configuration query daemon (RConfD)``
   It is written in Haskell, and it corresponds to the old ConfD. It will run on
-  all the master candidates and it will serve information about the the static
+  all the master candidates and it will serve information about the static
   configuration of the cluster (the one contained in ``config.data``). The
   provided information will be highly available (as in: a response will be
   available as long as a stable-enough connection between the client and at
@@ -351,12 +351,12 @@
 #. Only then the child process can replace itself by the actual job
    process.
 
-If the child process detect that the pipe is broken before receiving the
+If the child process detects that the pipe is broken before receiving the
 confirmation, it must terminate, not starting the actual job.
-This way, the actual job is only started if its ensured that its lock
+This way, the actual job is only started if it is ensured that its lock
 file name is written to the job file.
 
-If the Luxi daemon detect that the pipe is broken before successfully
+If the Luxi daemon detects that the pipe is broken before successfully
 sending the confirmation in step 4., it assumes that the job has failed.
 If the pipe gets broken after sending the confirmation, no further
 action is necessary. If the child doesn't receive the confirmation,
@@ -436,16 +436,10 @@
      methods to WConfD.
 
 Step 3:
-  #. Remove WConfD's RPC functions for obtaining/releasing the single
-     internal lock from Step 1.
-  #. Remove WConfD's RPC functions for sending/receiving the whole
-     configuration from Step 1.
+  In a later step, the impact of the config lock will be reduced by moving
+  it more and more into an internal detail of WConfD. This process will be
+  detailed in a forthcoming design document.
 
-Future aims:
-
--  Optionally refactor the RPC calls to reduce their number or improve their
-   efficiency (for example by obtaining a larger set of data instead of
-   querying items one by one).
 
 Locking
 +++++++
@@ -552,7 +546,7 @@
 in the queue. This is race free, as LuxiD will no longer touch the job file,
 once the job is started; a corollary of this is that the job also has to
 take care of replicating updates to the job file. LuxiD will watch job files for
-changes to determine when a job as cleanly finished. To determine jobs
+changes to determine when a job was cleanly finished. To determine jobs
 that died without having the chance of updating the job file, the `Job death
 detection`_ mechanism will be used.
 
diff -Nru ganeti-2.12.0/doc/design-file-based-storage.rst ganeti-2.12.3/doc/design-file-based-storage.rst
--- ganeti-2.12.0/doc/design-file-based-storage.rst	2014-10-06 16:20:35.000000000 +0300
+++ ganeti-2.12.3/doc/design-file-based-storage.rst	2015-04-22 20:10:50.000000000 +0300
@@ -21,7 +21,7 @@
 
 * reuse existing image files
 
-* allow Ganeti to initalize the cluster without checking for a volume
+* allow Ganeti to initialize the cluster without checking for a volume
   group (e.g. xenvg)
 
 Non Goals:
@@ -267,7 +267,7 @@
 Provided "dump/restore" is used in the "export" and "import" guest-os
 scripts, there are no modifications needed when file-based instances are
 exported/imported. If any other backup-tool (which requires access to
-the mounted file-system) is used then the image file can be temporaily
+the mounted file-system) is used then the image file can be temporarily
 mounted. This can be done in different ways:
 
 Mount a raw image file via loopback driver::
diff -Nru ganeti-2.12.0/doc/design-storagetypes.rst ganeti-2.12.3/doc/design-storagetypes.rst
--- ganeti-2.12.0/doc/design-storagetypes.rst	2014-10-06 16:20:35.000000000 +0300
+++ ganeti-2.12.3/doc/design-storagetypes.rst	2015-04-28 11:13:10.000000000 +0300
@@ -9,7 +9,7 @@
 
 Currently, there is no consistent management of different variants of storage
 in Ganeti. One direct consequence is that storage space reporting is currently
-broken for all storage that is not based on lvm technolgy. This design looks at
+broken for all storage that is not based on lvm technology. This design looks at
 the root causes and proposes a way to fix it.
 
 Proposed changes
@@ -233,7 +233,7 @@
 extended storage reporting capabilities. The user can specify a storage
 type using ``--storage-type``. If he requests storage information about
 a storage type which does not support space reporting, a warning is
-emitted. If no storage type is specified explicitely, ``gnt-node
+emitted. If no storage type is specified explicitly, ``gnt-node
 list-storage`` will try to report storage on the storage type of the
 default disk template. If the default disk template's storage type does
 not support space reporting, an error message is emitted.
diff -Nru ganeti-2.12.0/doc/examples/systemd/ganeti-master.target ganeti-2.12.3/doc/examples/systemd/ganeti-master.target
--- ganeti-2.12.0/doc/examples/systemd/ganeti-master.target	1970-01-01 02:00:00.000000000 +0200
+++ ganeti-2.12.3/doc/examples/systemd/ganeti-master.target	2015-04-22 20:10:50.000000000 +0300
@@ -0,0 +1,8 @@
+[Unit]
+Description = Ganeti master functionality
+Documentation = man:ganeti(7)
+After = syslog.target
+PartOf = ganeti.target
+
+[Install]
+WantedBy = ganeti.target
diff -Nru ganeti-2.12.0/doc/examples/systemd/ganeti-node.target ganeti-2.12.3/doc/examples/systemd/ganeti-node.target
--- ganeti-2.12.0/doc/examples/systemd/ganeti-node.target	1970-01-01 02:00:00.000000000 +0200
+++ ganeti-2.12.3/doc/examples/systemd/ganeti-node.target	2015-04-22 20:10:50.000000000 +0300
@@ -0,0 +1,8 @@
+[Unit]
+Description = Ganeti node functionality
+Documentation = man:ganeti(7)
+After = syslog.service
+PartOf = ganeti.target
+
+[Install]
+WantedBy = ganeti.target
diff -Nru ganeti-2.12.0/doc/examples/systemd/ganeti.service ganeti-2.12.3/doc/examples/systemd/ganeti.service
--- ganeti-2.12.0/doc/examples/systemd/ganeti.service	1970-01-01 02:00:00.000000000 +0200
+++ ganeti-2.12.3/doc/examples/systemd/ganeti.service	2015-04-22 20:10:50.000000000 +0300
@@ -0,0 +1,18 @@
+# This is a dummy service, provided only for compatibility with SysV.
+# Systemd will automatically create a SysV service called
+# ganeti.service, attempting to start the initscript. Since there is no
+# way to tell systemd that the initscript acts as ganeti.target (and not
+# ganeti.service), we create a stub service requiring ganeti.target.
+#
+# This service is for compatibility only and so will not be marked for
+# installation.
+
+[Unit]
+Description = Dummy Ganeti SysV compatibility service
+Documentation = man:ganeti(7)
+After = ganeti.target
+Requires = ganeti.target
+
+[Service]
+Type = oneshot
+ExecStart = /bin/true
diff -Nru ganeti-2.12.0/doc/examples/systemd/ganeti.target ganeti-2.12.3/doc/examples/systemd/ganeti.target
--- ganeti-2.12.0/doc/examples/systemd/ganeti.target	1970-01-01 02:00:00.000000000 +0200
+++ ganeti-2.12.3/doc/examples/systemd/ganeti.target	2015-04-22 20:10:50.000000000 +0300
@@ -0,0 +1,8 @@
+[Unit]
+Description = Ganeti virtualization cluster manager
+Documentation = man:ganeti(7)
+PartOf = ganeti.service
+
+[Install]
+WantedBy = multi-user.target
+Also = ganeti-node.target ganeti-master.target
diff -Nru ganeti-2.12.0/doc/html/admin.html ganeti-2.12.3/doc/html/admin.html
--- ganeti-2.12.0/doc/html/admin.html	2014-10-10 11:56:50.000000000 +0300
+++ ganeti-2.12.3/doc/html/admin.html	2015-04-29 11:14:14.000000000 +0300
@@ -8,7 +8,7 @@
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     
-    <title>Ganeti administrator’s guide — Ganeti 2.12.0 documentation</title>
+    <title>Ganeti administrator’s guide — Ganeti 2.12.3 documentation</title>
     
     <link rel="stylesheet" href="_static/style.css" type="text/css" />
     <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
@@ -16,7 +16,7 @@
     <script type="text/javascript">
       var DOCUMENTATION_OPTIONS = {
         URL_ROOT:    '',
-        VERSION:     '2.12.0',
+        VERSION:     '2.12.3',
         COLLAPSE_INDEX: false,
         FILE_SUFFIX: '.html',
         HAS_SOURCE:  true
@@ -25,7 +25,7 @@
     <script type="text/javascript" src="_static/jquery.js"></script>
     <script type="text/javascript" src="_static/underscore.js"></script>
     <script type="text/javascript" src="_static/doctools.js"></script>
-    <link rel="top" title="Ganeti 2.12.0 documentation" href="index.html" />
+    <link rel="top" title="Ganeti 2.12.3 documentation" href="index.html" />
     <link rel="next" title="Merging clusters" href="cluster-merge.html" />
     <link rel="prev" title="Improvements of Node Security" href="design-node-security.html" /> 
   </head>
@@ -39,7 +39,7 @@
         <li class="right" >
           <a href="design-node-security.html" title="Improvements of Node Security"
              accesskey="P">previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>  
 
@@ -1692,7 +1692,7 @@
 <p>Note that the set of characters present in a tag and the maximum tag
 length are restricted. Currently the maximum length is 128 characters,
 there can be at most 4096 tags per object, and the set of characters is
-comprised by alphanumeric characters and additionally <tt class="docutils literal"><span class="pre">.+*/:@-</span></tt>.</p>
+comprised by alphanumeric characters and additionally <tt class="docutils literal"><span class="pre">.+*/:@-_</span></tt>.</p>
 </div>
 <div class="section" id="operations">
 <h3><a class="toc-backref" href="#id85">Operations</a><a class="headerlink" href="#operations" title="Permalink to this headline">¶</a></h3>
@@ -2318,7 +2318,7 @@
         <li class="right" >
           <a href="design-node-security.html" title="Improvements of Node Security"
              >previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>
     <div class="footer">
diff -Nru ganeti-2.12.0/doc/html/cluster-keys-replacement.html ganeti-2.12.3/doc/html/cluster-keys-replacement.html
--- ganeti-2.12.0/doc/html/cluster-keys-replacement.html	2014-10-10 11:56:50.000000000 +0300
+++ ganeti-2.12.3/doc/html/cluster-keys-replacement.html	2015-04-29 11:14:14.000000000 +0300
@@ -8,7 +8,7 @@
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     
-    <title>Cluster Keys Replacement — Ganeti 2.12.0 documentation</title>
+    <title>Cluster Keys Replacement — Ganeti 2.12.3 documentation</title>
     
     <link rel="stylesheet" href="_static/style.css" type="text/css" />
     <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
@@ -16,7 +16,7 @@
     <script type="text/javascript">
       var DOCUMENTATION_OPTIONS = {
         URL_ROOT:    '',
-        VERSION:     '2.12.0',
+        VERSION:     '2.12.3',
         COLLAPSE_INDEX: false,
         FILE_SUFFIX: '.html',
         HAS_SOURCE:  true
@@ -25,7 +25,7 @@
     <script type="text/javascript" src="_static/jquery.js"></script>
     <script type="text/javascript" src="_static/underscore.js"></script>
     <script type="text/javascript" src="_static/doctools.js"></script>
-    <link rel="top" title="Ganeti 2.12.0 documentation" href="index.html" />
+    <link rel="top" title="Ganeti 2.12.3 documentation" href="index.html" />
     <link rel="next" title="Instance auto-repair" href="design-autorepair.html" />
     <link rel="prev" title="Merging clusters" href="cluster-merge.html" /> 
   </head>
@@ -39,7 +39,7 @@
         <li class="right" >
           <a href="cluster-merge.html" title="Merging clusters"
              accesskey="P">previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>  
 
@@ -193,7 +193,7 @@
         <li class="right" >
           <a href="cluster-merge.html" title="Merging clusters"
              >previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>
     <div class="footer">
diff -Nru ganeti-2.12.0/doc/html/cluster-merge.html ganeti-2.12.3/doc/html/cluster-merge.html
--- ganeti-2.12.0/doc/html/cluster-merge.html	2014-10-10 11:56:50.000000000 +0300
+++ ganeti-2.12.3/doc/html/cluster-merge.html	2015-04-29 11:14:14.000000000 +0300
@@ -8,7 +8,7 @@
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     
-    <title>Merging clusters — Ganeti 2.12.0 documentation</title>
+    <title>Merging clusters — Ganeti 2.12.3 documentation</title>
     
     <link rel="stylesheet" href="_static/style.css" type="text/css" />
     <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
@@ -16,7 +16,7 @@
     <script type="text/javascript">
       var DOCUMENTATION_OPTIONS = {
         URL_ROOT:    '',
-        VERSION:     '2.12.0',
+        VERSION:     '2.12.3',
         COLLAPSE_INDEX: false,
         FILE_SUFFIX: '.html',
         HAS_SOURCE:  true
@@ -25,7 +25,7 @@
     <script type="text/javascript" src="_static/jquery.js"></script>
     <script type="text/javascript" src="_static/underscore.js"></script>
     <script type="text/javascript" src="_static/doctools.js"></script>
-    <link rel="top" title="Ganeti 2.12.0 documentation" href="index.html" />
+    <link rel="top" title="Ganeti 2.12.3 documentation" href="index.html" />
     <link rel="next" title="Cluster Keys Replacement" href="cluster-keys-replacement.html" />
     <link rel="prev" title="Ganeti administrator’s guide" href="admin.html" /> 
   </head>
@@ -39,7 +39,7 @@
         <li class="right" >
           <a href="admin.html" title="Ganeti administrator’s guide"
              accesskey="P">previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>  
 
@@ -154,7 +154,7 @@
         <li class="right" >
           <a href="admin.html" title="Ganeti administrator’s guide"
              >previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>
     <div class="footer">
diff -Nru ganeti-2.12.0/doc/html/design-2.0.html ganeti-2.12.3/doc/html/design-2.0.html
--- ganeti-2.12.0/doc/html/design-2.0.html	2014-10-10 11:56:50.000000000 +0300
+++ ganeti-2.12.3/doc/html/design-2.0.html	2015-04-29 11:14:15.000000000 +0300
@@ -8,7 +8,7 @@
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     
-    <title>Ganeti 2.0 design — Ganeti 2.12.0 documentation</title>
+    <title>Ganeti 2.0 design — Ganeti 2.12.3 documentation</title>
     
     <link rel="stylesheet" href="_static/style.css" type="text/css" />
     <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
@@ -16,7 +16,7 @@
     <script type="text/javascript">
       var DOCUMENTATION_OPTIONS = {
         URL_ROOT:    '',
-        VERSION:     '2.12.0',
+        VERSION:     '2.12.3',
         COLLAPSE_INDEX: false,
         FILE_SUFFIX: '.html',
         HAS_SOURCE:  true
@@ -25,7 +25,7 @@
     <script type="text/javascript" src="_static/jquery.js"></script>
     <script type="text/javascript" src="_static/underscore.js"></script>
     <script type="text/javascript" src="_static/doctools.js"></script>
-    <link rel="top" title="Ganeti 2.12.0 documentation" href="index.html" />
+    <link rel="top" title="Ganeti 2.12.3 documentation" href="index.html" />
     <link rel="next" title="Ganeti 2.1 design" href="design-2.1.html" />
     <link rel="prev" title="Welcome to Ganeti’s documentation!" href="index.html" /> 
   </head>
@@ -39,7 +39,7 @@
         <li class="right" >
           <a href="index.html" title="Welcome to Ganeti’s documentation!"
              accesskey="P">previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>  
 
@@ -2202,7 +2202,7 @@
         <li class="right" >
           <a href="index.html" title="Welcome to Ganeti’s documentation!"
              >previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>
     <div class="footer">
diff -Nru ganeti-2.12.0/doc/html/design-2.10.html ganeti-2.12.3/doc/html/design-2.10.html
--- ganeti-2.12.0/doc/html/design-2.10.html	2014-10-10 11:56:51.000000000 +0300
+++ ganeti-2.12.3/doc/html/design-2.10.html	2015-04-29 11:14:15.000000000 +0300
@@ -8,7 +8,7 @@
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     
-    <title>Ganeti 2.10 design — Ganeti 2.12.0 documentation</title>
+    <title>Ganeti 2.10 design — Ganeti 2.12.3 documentation</title>
     
     <link rel="stylesheet" href="_static/style.css" type="text/css" />
     <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
@@ -16,7 +16,7 @@
     <script type="text/javascript">
       var DOCUMENTATION_OPTIONS = {
         URL_ROOT:    '',
-        VERSION:     '2.12.0',
+        VERSION:     '2.12.3',
         COLLAPSE_INDEX: false,
         FILE_SUFFIX: '.html',
         HAS_SOURCE:  true
@@ -25,7 +25,7 @@
     <script type="text/javascript" src="_static/jquery.js"></script>
     <script type="text/javascript" src="_static/underscore.js"></script>
     <script type="text/javascript" src="_static/doctools.js"></script>
-    <link rel="top" title="Ganeti 2.12.0 documentation" href="index.html" />
+    <link rel="top" title="Ganeti 2.12.3 documentation" href="index.html" />
     <link rel="next" title="Ganeti 2.11 design" href="design-2.11.html" />
     <link rel="prev" title="Ganeti 2.9 design" href="design-2.9.html" /> 
   </head>
@@ -39,7 +39,7 @@
         <li class="right" >
           <a href="design-2.9.html" title="Ganeti 2.9 design"
              accesskey="P">previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>  
 
@@ -110,7 +110,7 @@
         <li class="right" >
           <a href="design-2.9.html" title="Ganeti 2.9 design"
              >previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>
     <div class="footer">
diff -Nru ganeti-2.12.0/doc/html/design-2.11.html ganeti-2.12.3/doc/html/design-2.11.html
--- ganeti-2.12.0/doc/html/design-2.11.html	2014-10-10 11:56:51.000000000 +0300
+++ ganeti-2.12.3/doc/html/design-2.11.html	2015-04-29 11:14:15.000000000 +0300
@@ -8,7 +8,7 @@
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     
-    <title>Ganeti 2.11 design — Ganeti 2.12.0 documentation</title>
+    <title>Ganeti 2.11 design — Ganeti 2.12.3 documentation</title>
     
     <link rel="stylesheet" href="_static/style.css" type="text/css" />
     <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
@@ -16,7 +16,7 @@
     <script type="text/javascript">
       var DOCUMENTATION_OPTIONS = {
         URL_ROOT:    '',
-        VERSION:     '2.12.0',
+        VERSION:     '2.12.3',
         COLLAPSE_INDEX: false,
         FILE_SUFFIX: '.html',
         HAS_SOURCE:  true
@@ -25,7 +25,7 @@
     <script type="text/javascript" src="_static/jquery.js"></script>
     <script type="text/javascript" src="_static/underscore.js"></script>
     <script type="text/javascript" src="_static/doctools.js"></script>
-    <link rel="top" title="Ganeti 2.12.0 documentation" href="index.html" />
+    <link rel="top" title="Ganeti 2.12.3 documentation" href="index.html" />
     <link rel="next" title="Ganeti 2.12 design" href="design-2.12.html" />
     <link rel="prev" title="Ganeti 2.10 design" href="design-2.10.html" /> 
   </head>
@@ -39,7 +39,7 @@
         <li class="right" >
           <a href="design-2.10.html" title="Ganeti 2.10 design"
              accesskey="P">previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>  
 
@@ -105,7 +105,7 @@
         <li class="right" >
           <a href="design-2.10.html" title="Ganeti 2.10 design"
              >previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>
     <div class="footer">
diff -Nru ganeti-2.12.0/doc/html/design-2.12.html ganeti-2.12.3/doc/html/design-2.12.html
--- ganeti-2.12.0/doc/html/design-2.12.html	2014-10-10 11:56:51.000000000 +0300
+++ ganeti-2.12.3/doc/html/design-2.12.html	2015-04-29 11:14:15.000000000 +0300
@@ -8,7 +8,7 @@
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     
-    <title>Ganeti 2.12 design — Ganeti 2.12.0 documentation</title>
+    <title>Ganeti 2.12 design — Ganeti 2.12.3 documentation</title>
     
     <link rel="stylesheet" href="_static/style.css" type="text/css" />
     <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
@@ -16,7 +16,7 @@
     <script type="text/javascript">
       var DOCUMENTATION_OPTIONS = {
         URL_ROOT:    '',
-        VERSION:     '2.12.0',
+        VERSION:     '2.12.3',
         COLLAPSE_INDEX: false,
         FILE_SUFFIX: '.html',
         HAS_SOURCE:  true
@@ -25,7 +25,7 @@
     <script type="text/javascript" src="_static/jquery.js"></script>
     <script type="text/javascript" src="_static/underscore.js"></script>
     <script type="text/javascript" src="_static/doctools.js"></script>
-    <link rel="top" title="Ganeti 2.12.0 documentation" href="index.html" />
+    <link rel="top" title="Ganeti 2.12.3 documentation" href="index.html" />
     <link rel="next" title="Design document drafts" href="design-draft.html" />
     <link rel="prev" title="Ganeti 2.11 design" href="design-2.11.html" /> 
   </head>
@@ -39,7 +39,7 @@
         <li class="right" >
           <a href="design-2.11.html" title="Ganeti 2.11 design"
              accesskey="P">previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>  
 
@@ -107,7 +107,7 @@
         <li class="right" >
           <a href="design-2.11.html" title="Ganeti 2.11 design"
              >previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>
     <div class="footer">
diff -Nru ganeti-2.12.0/doc/html/design-2.1.html ganeti-2.12.3/doc/html/design-2.1.html
--- ganeti-2.12.0/doc/html/design-2.1.html	2014-10-10 11:56:51.000000000 +0300
+++ ganeti-2.12.3/doc/html/design-2.1.html	2015-04-29 11:14:15.000000000 +0300
@@ -8,7 +8,7 @@
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     
-    <title>Ganeti 2.1 design — Ganeti 2.12.0 documentation</title>
+    <title>Ganeti 2.1 design — Ganeti 2.12.3 documentation</title>
     
     <link rel="stylesheet" href="_static/style.css" type="text/css" />
     <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
@@ -16,7 +16,7 @@
     <script type="text/javascript">
       var DOCUMENTATION_OPTIONS = {
         URL_ROOT:    '',
-        VERSION:     '2.12.0',
+        VERSION:     '2.12.3',
         COLLAPSE_INDEX: false,
         FILE_SUFFIX: '.html',
         HAS_SOURCE:  true
@@ -25,7 +25,7 @@
     <script type="text/javascript" src="_static/jquery.js"></script>
     <script type="text/javascript" src="_static/underscore.js"></script>
     <script type="text/javascript" src="_static/doctools.js"></script>
-    <link rel="top" title="Ganeti 2.12.0 documentation" href="index.html" />
+    <link rel="top" title="Ganeti 2.12.3 documentation" href="index.html" />
     <link rel="next" title="Ganeti 2.2 design" href="design-2.2.html" />
     <link rel="prev" title="Ganeti 2.0 design" href="design-2.0.html" /> 
   </head>
@@ -39,7 +39,7 @@
         <li class="right" >
           <a href="design-2.0.html" title="Ganeti 2.0 design"
              accesskey="P">previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>  
 
@@ -1398,7 +1398,7 @@
         <li class="right" >
           <a href="design-2.0.html" title="Ganeti 2.0 design"
              >previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>
     <div class="footer">
diff -Nru ganeti-2.12.0/doc/html/design-2.2.html ganeti-2.12.3/doc/html/design-2.2.html
--- ganeti-2.12.0/doc/html/design-2.2.html	2014-10-10 11:56:51.000000000 +0300
+++ ganeti-2.12.3/doc/html/design-2.2.html	2015-04-29 11:14:16.000000000 +0300
@@ -8,7 +8,7 @@
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     
-    <title>Ganeti 2.2 design — Ganeti 2.12.0 documentation</title>
+    <title>Ganeti 2.2 design — Ganeti 2.12.3 documentation</title>
     
     <link rel="stylesheet" href="_static/style.css" type="text/css" />
     <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
@@ -16,7 +16,7 @@
     <script type="text/javascript">
       var DOCUMENTATION_OPTIONS = {
         URL_ROOT:    '',
-        VERSION:     '2.12.0',
+        VERSION:     '2.12.3',
         COLLAPSE_INDEX: false,
         FILE_SUFFIX: '.html',
         HAS_SOURCE:  true
@@ -25,7 +25,7 @@
     <script type="text/javascript" src="_static/jquery.js"></script>
     <script type="text/javascript" src="_static/underscore.js"></script>
     <script type="text/javascript" src="_static/doctools.js"></script>
-    <link rel="top" title="Ganeti 2.12.0 documentation" href="index.html" />
+    <link rel="top" title="Ganeti 2.12.3 documentation" href="index.html" />
     <link rel="next" title="Ganeti 2.3 design" href="design-2.3.html" />
     <link rel="prev" title="Ganeti 2.1 design" href="design-2.1.html" /> 
   </head>
@@ -39,7 +39,7 @@
         <li class="right" >
           <a href="design-2.1.html" title="Ganeti 2.1 design"
              accesskey="P">previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>  
 
@@ -1073,7 +1073,7 @@
         <li class="right" >
           <a href="design-2.1.html" title="Ganeti 2.1 design"
              >previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>
     <div class="footer">
diff -Nru ganeti-2.12.0/doc/html/design-2.3.html ganeti-2.12.3/doc/html/design-2.3.html
--- ganeti-2.12.0/doc/html/design-2.3.html	2014-10-10 11:56:51.000000000 +0300
+++ ganeti-2.12.3/doc/html/design-2.3.html	2015-04-29 11:14:16.000000000 +0300
@@ -8,7 +8,7 @@
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     
-    <title>Ganeti 2.3 design — Ganeti 2.12.0 documentation</title>
+    <title>Ganeti 2.3 design — Ganeti 2.12.3 documentation</title>
     
     <link rel="stylesheet" href="_static/style.css" type="text/css" />
     <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
@@ -16,7 +16,7 @@
     <script type="text/javascript">
       var DOCUMENTATION_OPTIONS = {
         URL_ROOT:    '',
-        VERSION:     '2.12.0',
+        VERSION:     '2.12.3',
         COLLAPSE_INDEX: false,
         FILE_SUFFIX: '.html',
         HAS_SOURCE:  true
@@ -25,7 +25,7 @@
     <script type="text/javascript" src="_static/jquery.js"></script>
     <script type="text/javascript" src="_static/underscore.js"></script>
     <script type="text/javascript" src="_static/doctools.js"></script>
-    <link rel="top" title="Ganeti 2.12.0 documentation" href="index.html" />
+    <link rel="top" title="Ganeti 2.12.3 documentation" href="index.html" />
     <link rel="next" title="Synchronising htools to Ganeti 2.3" href="design-htools-2.3.html" />
     <link rel="prev" title="Ganeti 2.2 design" href="design-2.2.html" /> 
   </head>
@@ -39,7 +39,7 @@
         <li class="right" >
           <a href="design-2.2.html" title="Ganeti 2.2 design"
              accesskey="P">previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>  
 
@@ -1085,7 +1085,7 @@
         <li class="right" >
           <a href="design-2.2.html" title="Ganeti 2.2 design"
              >previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>
     <div class="footer">
diff -Nru ganeti-2.12.0/doc/html/design-2.4.html ganeti-2.12.3/doc/html/design-2.4.html
--- ganeti-2.12.0/doc/html/design-2.4.html	2014-10-10 11:56:51.000000000 +0300
+++ ganeti-2.12.3/doc/html/design-2.4.html	2015-04-29 11:14:16.000000000 +0300
@@ -8,7 +8,7 @@
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     
-    <title>Ganeti 2.4 design — Ganeti 2.12.0 documentation</title>
+    <title>Ganeti 2.4 design — Ganeti 2.12.3 documentation</title>
     
     <link rel="stylesheet" href="_static/style.css" type="text/css" />
     <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
@@ -16,7 +16,7 @@
     <script type="text/javascript">
       var DOCUMENTATION_OPTIONS = {
         URL_ROOT:    '',
-        VERSION:     '2.12.0',
+        VERSION:     '2.12.3',
         COLLAPSE_INDEX: false,
         FILE_SUFFIX: '.html',
         HAS_SOURCE:  true
@@ -25,7 +25,7 @@
     <script type="text/javascript" src="_static/jquery.js"></script>
     <script type="text/javascript" src="_static/underscore.js"></script>
     <script type="text/javascript" src="_static/doctools.js"></script>
-    <link rel="top" title="Ganeti 2.12.0 documentation" href="index.html" />
+    <link rel="top" title="Ganeti 2.12.3 documentation" href="index.html" />
     <link rel="next" title="Ganeti 2.5 design" href="design-2.5.html" />
     <link rel="prev" title="Synchronising htools to Ganeti 2.3" href="design-htools-2.3.html" /> 
   </head>
@@ -39,7 +39,7 @@
         <li class="right" >
           <a href="design-htools-2.3.html" title="Synchronising htools to Ganeti 2.3"
              accesskey="P">previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>  
 
@@ -100,7 +100,7 @@
         <li class="right" >
           <a href="design-htools-2.3.html" title="Synchronising htools to Ganeti 2.3"
              >previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>
     <div class="footer">
diff -Nru ganeti-2.12.0/doc/html/design-2.5.html ganeti-2.12.3/doc/html/design-2.5.html
--- ganeti-2.12.0/doc/html/design-2.5.html	2014-10-10 11:56:51.000000000 +0300
+++ ganeti-2.12.3/doc/html/design-2.5.html	2015-04-29 11:14:16.000000000 +0300
@@ -8,7 +8,7 @@
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     
-    <title>Ganeti 2.5 design — Ganeti 2.12.0 documentation</title>
+    <title>Ganeti 2.5 design — Ganeti 2.12.3 documentation</title>
     
     <link rel="stylesheet" href="_static/style.css" type="text/css" />
     <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
@@ -16,7 +16,7 @@
     <script type="text/javascript">
       var DOCUMENTATION_OPTIONS = {
         URL_ROOT:    '',
-        VERSION:     '2.12.0',
+        VERSION:     '2.12.3',
         COLLAPSE_INDEX: false,
         FILE_SUFFIX: '.html',
         HAS_SOURCE:  true
@@ -25,7 +25,7 @@
     <script type="text/javascript" src="_static/jquery.js"></script>
     <script type="text/javascript" src="_static/underscore.js"></script>
     <script type="text/javascript" src="_static/doctools.js"></script>
-    <link rel="top" title="Ganeti 2.12.0 documentation" href="index.html" />
+    <link rel="top" title="Ganeti 2.12.3 documentation" href="index.html" />
     <link rel="next" title="Ganeti 2.6 design" href="design-2.6.html" />
     <link rel="prev" title="Ganeti 2.4 design" href="design-2.4.html" /> 
   </head>
@@ -39,7 +39,7 @@
         <li class="right" >
           <a href="design-2.4.html" title="Ganeti 2.4 design"
              accesskey="P">previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>  
 
@@ -102,7 +102,7 @@
         <li class="right" >
           <a href="design-2.4.html" title="Ganeti 2.4 design"
              >previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>
     <div class="footer">
diff -Nru ganeti-2.12.0/doc/html/design-2.6.html ganeti-2.12.3/doc/html/design-2.6.html
--- ganeti-2.12.0/doc/html/design-2.6.html	2014-10-10 11:56:51.000000000 +0300
+++ ganeti-2.12.3/doc/html/design-2.6.html	2015-04-29 11:14:16.000000000 +0300
@@ -8,7 +8,7 @@
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     
-    <title>Ganeti 2.6 design — Ganeti 2.12.0 documentation</title>
+    <title>Ganeti 2.6 design — Ganeti 2.12.3 documentation</title>
     
     <link rel="stylesheet" href="_static/style.css" type="text/css" />
     <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
@@ -16,7 +16,7 @@
     <script type="text/javascript">
       var DOCUMENTATION_OPTIONS = {
         URL_ROOT:    '',
-        VERSION:     '2.12.0',
+        VERSION:     '2.12.3',
         COLLAPSE_INDEX: false,
         FILE_SUFFIX: '.html',
         HAS_SOURCE:  true
@@ -25,7 +25,7 @@
     <script type="text/javascript" src="_static/jquery.js"></script>
     <script type="text/javascript" src="_static/underscore.js"></script>
     <script type="text/javascript" src="_static/doctools.js"></script>
-    <link rel="top" title="Ganeti 2.12.0 documentation" href="index.html" />
+    <link rel="top" title="Ganeti 2.12.3 documentation" href="index.html" />
     <link rel="next" title="Ganeti 2.7 design" href="design-2.7.html" />
     <link rel="prev" title="Ganeti 2.5 design" href="design-2.5.html" /> 
   </head>
@@ -39,7 +39,7 @@
         <li class="right" >
           <a href="design-2.5.html" title="Ganeti 2.5 design"
              accesskey="P">previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>  
 
@@ -100,7 +100,7 @@
         <li class="right" >
           <a href="design-2.5.html" title="Ganeti 2.5 design"
              >previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>
     <div class="footer">
diff -Nru ganeti-2.12.0/doc/html/design-2.7.html ganeti-2.12.3/doc/html/design-2.7.html
--- ganeti-2.12.0/doc/html/design-2.7.html	2014-10-10 11:56:51.000000000 +0300
+++ ganeti-2.12.3/doc/html/design-2.7.html	2015-04-29 11:14:16.000000000 +0300
@@ -8,7 +8,7 @@
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     
-    <title>Ganeti 2.7 design — Ganeti 2.12.0 documentation</title>
+    <title>Ganeti 2.7 design — Ganeti 2.12.3 documentation</title>
     
     <link rel="stylesheet" href="_static/style.css" type="text/css" />
     <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
@@ -16,7 +16,7 @@
     <script type="text/javascript">
       var DOCUMENTATION_OPTIONS = {
         URL_ROOT:    '',
-        VERSION:     '2.12.0',
+        VERSION:     '2.12.3',
         COLLAPSE_INDEX: false,
         FILE_SUFFIX: '.html',
         HAS_SOURCE:  true
@@ -25,7 +25,7 @@
     <script type="text/javascript" src="_static/jquery.js"></script>
     <script type="text/javascript" src="_static/underscore.js"></script>
     <script type="text/javascript" src="_static/doctools.js"></script>
-    <link rel="top" title="Ganeti 2.12.0 documentation" href="index.html" />
+    <link rel="top" title="Ganeti 2.12.3 documentation" href="index.html" />
     <link rel="next" title="Ganeti 2.8 design" href="design-2.8.html" />
     <link rel="prev" title="Ganeti 2.6 design" href="design-2.6.html" /> 
   </head>
@@ -39,7 +39,7 @@
         <li class="right" >
           <a href="design-2.6.html" title="Ganeti 2.6 design"
              accesskey="P">previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>  
 
@@ -115,7 +115,7 @@
         <li class="right" >
           <a href="design-2.6.html" title="Ganeti 2.6 design"
              >previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>
     <div class="footer">
diff -Nru ganeti-2.12.0/doc/html/design-2.8.html ganeti-2.12.3/doc/html/design-2.8.html
--- ganeti-2.12.0/doc/html/design-2.8.html	2014-10-10 11:56:51.000000000 +0300
+++ ganeti-2.12.3/doc/html/design-2.8.html	2015-04-29 11:14:16.000000000 +0300
@@ -8,7 +8,7 @@
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     
-    <title>Ganeti 2.8 design — Ganeti 2.12.0 documentation</title>
+    <title>Ganeti 2.8 design — Ganeti 2.12.3 documentation</title>
     
     <link rel="stylesheet" href="_static/style.css" type="text/css" />
     <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
@@ -16,7 +16,7 @@
     <script type="text/javascript">
       var DOCUMENTATION_OPTIONS = {
         URL_ROOT:    '',
-        VERSION:     '2.12.0',
+        VERSION:     '2.12.3',
         COLLAPSE_INDEX: false,
         FILE_SUFFIX: '.html',
         HAS_SOURCE:  true
@@ -25,7 +25,7 @@
     <script type="text/javascript" src="_static/jquery.js"></script>
     <script type="text/javascript" src="_static/underscore.js"></script>
     <script type="text/javascript" src="_static/doctools.js"></script>
-    <link rel="top" title="Ganeti 2.12.0 documentation" href="index.html" />
+    <link rel="top" title="Ganeti 2.12.3 documentation" href="index.html" />
     <link rel="next" title="Ganeti 2.9 design" href="design-2.9.html" />
     <link rel="prev" title="Ganeti 2.7 design" href="design-2.7.html" /> 
   </head>
@@ -39,7 +39,7 @@
         <li class="right" >
           <a href="design-2.7.html" title="Ganeti 2.7 design"
              accesskey="P">previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>  
 
@@ -111,7 +111,7 @@
         <li class="right" >
           <a href="design-2.7.html" title="Ganeti 2.7 design"
              >previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>
     <div class="footer">
diff -Nru ganeti-2.12.0/doc/html/design-2.9.html ganeti-2.12.3/doc/html/design-2.9.html
--- ganeti-2.12.0/doc/html/design-2.9.html	2014-10-10 11:56:51.000000000 +0300
+++ ganeti-2.12.3/doc/html/design-2.9.html	2015-04-29 11:14:16.000000000 +0300
@@ -8,7 +8,7 @@
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     
-    <title>Ganeti 2.9 design — Ganeti 2.12.0 documentation</title>
+    <title>Ganeti 2.9 design — Ganeti 2.12.3 documentation</title>
     
     <link rel="stylesheet" href="_static/style.css" type="text/css" />
     <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
@@ -16,7 +16,7 @@
     <script type="text/javascript">
       var DOCUMENTATION_OPTIONS = {
         URL_ROOT:    '',
-        VERSION:     '2.12.0',
+        VERSION:     '2.12.3',
         COLLAPSE_INDEX: false,
         FILE_SUFFIX: '.html',
         HAS_SOURCE:  true
@@ -25,7 +25,7 @@
     <script type="text/javascript" src="_static/jquery.js"></script>
     <script type="text/javascript" src="_static/underscore.js"></script>
     <script type="text/javascript" src="_static/doctools.js"></script>
-    <link rel="top" title="Ganeti 2.12.0 documentation" href="index.html" />
+    <link rel="top" title="Ganeti 2.12.3 documentation" href="index.html" />
     <link rel="next" title="Ganeti 2.10 design" href="design-2.10.html" />
     <link rel="prev" title="Ganeti 2.8 design" href="design-2.8.html" /> 
   </head>
@@ -39,7 +39,7 @@
         <li class="right" >
           <a href="design-2.8.html" title="Ganeti 2.8 design"
              accesskey="P">previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>  
 
@@ -108,7 +108,7 @@
         <li class="right" >
           <a href="design-2.8.html" title="Ganeti 2.8 design"
              >previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>
     <div class="footer">
diff -Nru ganeti-2.12.0/doc/html/design-autorepair.html ganeti-2.12.3/doc/html/design-autorepair.html
--- ganeti-2.12.0/doc/html/design-autorepair.html	2014-10-10 11:56:51.000000000 +0300
+++ ganeti-2.12.3/doc/html/design-autorepair.html	2015-04-29 11:14:16.000000000 +0300
@@ -8,7 +8,7 @@
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     
-    <title>Instance auto-repair — Ganeti 2.12.0 documentation</title>
+    <title>Instance auto-repair — Ganeti 2.12.3 documentation</title>
     
     <link rel="stylesheet" href="_static/style.css" type="text/css" />
     <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
@@ -16,7 +16,7 @@
     <script type="text/javascript">
       var DOCUMENTATION_OPTIONS = {
         URL_ROOT:    '',
-        VERSION:     '2.12.0',
+        VERSION:     '2.12.3',
         COLLAPSE_INDEX: false,
         FILE_SUFFIX: '.html',
         HAS_SOURCE:  true
@@ -25,7 +25,7 @@
     <script type="text/javascript" src="_static/jquery.js"></script>
     <script type="text/javascript" src="_static/underscore.js"></script>
     <script type="text/javascript" src="_static/doctools.js"></script>
-    <link rel="top" title="Ganeti 2.12.0 documentation" href="index.html" />
+    <link rel="top" title="Ganeti 2.12.3 documentation" href="index.html" />
     <link rel="next" title="Ganeti Bulk Create" href="design-bulk-create.html" />
     <link rel="prev" title="Cluster Keys Replacement" href="cluster-keys-replacement.html" /> 
   </head>
@@ -39,7 +39,7 @@
         <li class="right" >
           <a href="cluster-keys-replacement.html" title="Cluster Keys Replacement"
              accesskey="P">previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>  
 
@@ -495,7 +495,7 @@
         <li class="right" >
           <a href="cluster-keys-replacement.html" title="Cluster Keys Replacement"
              >previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>
     <div class="footer">
diff -Nru ganeti-2.12.0/doc/html/design-bulk-create.html ganeti-2.12.3/doc/html/design-bulk-create.html
--- ganeti-2.12.0/doc/html/design-bulk-create.html	2014-10-10 11:56:51.000000000 +0300
+++ ganeti-2.12.3/doc/html/design-bulk-create.html	2015-04-29 11:14:16.000000000 +0300
@@ -8,7 +8,7 @@
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     
-    <title>Ganeti Bulk Create — Ganeti 2.12.0 documentation</title>
+    <title>Ganeti Bulk Create — Ganeti 2.12.3 documentation</title>
     
     <link rel="stylesheet" href="_static/style.css" type="text/css" />
     <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
@@ -16,7 +16,7 @@
     <script type="text/javascript">
       var DOCUMENTATION_OPTIONS = {
         URL_ROOT:    '',
-        VERSION:     '2.12.0',
+        VERSION:     '2.12.3',
         COLLAPSE_INDEX: false,
         FILE_SUFFIX: '.html',
         HAS_SOURCE:  true
@@ -25,7 +25,7 @@
     <script type="text/javascript" src="_static/jquery.js"></script>
     <script type="text/javascript" src="_static/underscore.js"></script>
     <script type="text/javascript" src="_static/doctools.js"></script>
-    <link rel="top" title="Ganeti 2.12.0 documentation" href="index.html" />
+    <link rel="top" title="Ganeti 2.12.3 documentation" href="index.html" />
     <link rel="next" title="Chained jobs" href="design-chained-jobs.html" />
     <link rel="prev" title="Instance auto-repair" href="design-autorepair.html" /> 
   </head>
@@ -39,7 +39,7 @@
         <li class="right" >
           <a href="design-autorepair.html" title="Instance auto-repair"
              accesskey="P">previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>  
 
@@ -198,7 +198,7 @@
         <li class="right" >
           <a href="design-autorepair.html" title="Instance auto-repair"
              >previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>
     <div class="footer">
diff -Nru ganeti-2.12.0/doc/html/design-ceph-ganeti-support.html ganeti-2.12.3/doc/html/design-ceph-ganeti-support.html
--- ganeti-2.12.0/doc/html/design-ceph-ganeti-support.html	2014-10-10 11:56:52.000000000 +0300
+++ ganeti-2.12.3/doc/html/design-ceph-ganeti-support.html	2015-04-29 11:14:16.000000000 +0300
@@ -8,7 +8,7 @@
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     
-    <title>RADOS/Ceph support in Ganeti — Ganeti 2.12.0 documentation</title>
+    <title>RADOS/Ceph support in Ganeti — Ganeti 2.12.3 documentation</title>
     
     <link rel="stylesheet" href="_static/style.css" type="text/css" />
     <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
@@ -16,7 +16,7 @@
     <script type="text/javascript">
       var DOCUMENTATION_OPTIONS = {
         URL_ROOT:    '',
-        VERSION:     '2.12.0',
+        VERSION:     '2.12.3',
         COLLAPSE_INDEX: false,
         FILE_SUFFIX: '.html',
         HAS_SOURCE:  true
@@ -25,7 +25,7 @@
     <script type="text/javascript" src="_static/jquery.js"></script>
     <script type="text/javascript" src="_static/underscore.js"></script>
     <script type="text/javascript" src="_static/doctools.js"></script>
-    <link rel="top" title="Ganeti 2.12.0 documentation" href="index.html" />
+    <link rel="top" title="Ganeti 2.12.3 documentation" href="index.html" />
     <link rel="up" title="Design document drafts" href="design-draft.html" />
     <link rel="next" title="HSqueeze tool" href="design-hsqueeze.html" />
     <link rel="prev" title="Filtering of jobs for the Ganeti job queue" href="design-optables.html" /> 
@@ -40,7 +40,7 @@
         <li class="right" >
           <a href="design-optables.html" title="Filtering of jobs for the Ganeti job queue"
              accesskey="P">previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li>
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li>
           <li><a href="design-draft.html" accesskey="U">Design document drafts</a> »</li> 
       </ul>
     </div>  
@@ -296,7 +296,7 @@
         <li class="right" >
           <a href="design-optables.html" title="Filtering of jobs for the Ganeti job queue"
              >previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li>
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li>
           <li><a href="design-draft.html" >Design document drafts</a> »</li> 
       </ul>
     </div>
diff -Nru ganeti-2.12.0/doc/html/design-chained-jobs.html ganeti-2.12.3/doc/html/design-chained-jobs.html
--- ganeti-2.12.0/doc/html/design-chained-jobs.html	2014-10-10 11:56:52.000000000 +0300
+++ ganeti-2.12.3/doc/html/design-chained-jobs.html	2015-04-29 11:14:16.000000000 +0300
@@ -8,7 +8,7 @@
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     
-    <title>Chained jobs — Ganeti 2.12.0 documentation</title>
+    <title>Chained jobs — Ganeti 2.12.3 documentation</title>
     
     <link rel="stylesheet" href="_static/style.css" type="text/css" />
     <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
@@ -16,7 +16,7 @@
     <script type="text/javascript">
       var DOCUMENTATION_OPTIONS = {
         URL_ROOT:    '',
-        VERSION:     '2.12.0',
+        VERSION:     '2.12.3',
         COLLAPSE_INDEX: false,
         FILE_SUFFIX: '.html',
         HAS_SOURCE:  true
@@ -25,7 +25,7 @@
     <script type="text/javascript" src="_static/jquery.js"></script>
     <script type="text/javascript" src="_static/underscore.js"></script>
     <script type="text/javascript" src="_static/doctools.js"></script>
-    <link rel="top" title="Ganeti 2.12.0 documentation" href="index.html" />
+    <link rel="top" title="Ganeti 2.12.3 documentation" href="index.html" />
     <link rel="next" title="Unit tests for cmdlib / LogicalUnit’s" href="design-cmdlib-unittests.html" />
     <link rel="prev" title="Ganeti Bulk Create" href="design-bulk-create.html" /> 
   </head>
@@ -39,7 +39,7 @@
         <li class="right" >
           <a href="design-bulk-create.html" title="Ganeti Bulk Create"
              accesskey="P">previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>  
 
@@ -332,7 +332,7 @@
         <li class="right" >
           <a href="design-bulk-create.html" title="Ganeti Bulk Create"
              >previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>
     <div class="footer">
diff -Nru ganeti-2.12.0/doc/html/design-cmdlib-unittests.html ganeti-2.12.3/doc/html/design-cmdlib-unittests.html
--- ganeti-2.12.0/doc/html/design-cmdlib-unittests.html	2014-10-10 11:56:52.000000000 +0300
+++ ganeti-2.12.3/doc/html/design-cmdlib-unittests.html	2015-04-29 11:14:16.000000000 +0300
@@ -8,7 +8,7 @@
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     
-    <title>Unit tests for cmdlib / LogicalUnit’s — Ganeti 2.12.0 documentation</title>
+    <title>Unit tests for cmdlib / LogicalUnit’s — Ganeti 2.12.3 documentation</title>
     
     <link rel="stylesheet" href="_static/style.css" type="text/css" />
     <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
@@ -16,7 +16,7 @@
     <script type="text/javascript">
       var DOCUMENTATION_OPTIONS = {
         URL_ROOT:    '',
-        VERSION:     '2.12.0',
+        VERSION:     '2.12.3',
         COLLAPSE_INDEX: false,
         FILE_SUFFIX: '.html',
         HAS_SOURCE:  true
@@ -25,7 +25,7 @@
     <script type="text/javascript" src="_static/jquery.js"></script>
     <script type="text/javascript" src="_static/underscore.js"></script>
     <script type="text/javascript" src="_static/doctools.js"></script>
-    <link rel="top" title="Ganeti 2.12.0 documentation" href="index.html" />
+    <link rel="top" title="Ganeti 2.12.3 documentation" href="index.html" />
     <link rel="next" title="Taking relative CPU speed into account" href="design-cpu-speed.html" />
     <link rel="prev" title="Chained jobs" href="design-chained-jobs.html" /> 
   </head>
@@ -39,7 +39,7 @@
         <li class="right" >
           <a href="design-chained-jobs.html" title="Chained jobs"
              accesskey="P">previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>  
 
@@ -294,7 +294,7 @@
         <li class="right" >
           <a href="design-chained-jobs.html" title="Chained jobs"
              >previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>
     <div class="footer">
diff -Nru ganeti-2.12.0/doc/html/design-cpu-pinning.html ganeti-2.12.3/doc/html/design-cpu-pinning.html
--- ganeti-2.12.0/doc/html/design-cpu-pinning.html	2014-10-10 11:56:52.000000000 +0300
+++ ganeti-2.12.3/doc/html/design-cpu-pinning.html	2015-04-29 11:14:16.000000000 +0300
@@ -8,7 +8,7 @@
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     
-    <title>Ganeti CPU Pinning — Ganeti 2.12.0 documentation</title>
+    <title>Ganeti CPU Pinning — Ganeti 2.12.3 documentation</title>
     
     <link rel="stylesheet" href="_static/style.css" type="text/css" />
     <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
@@ -16,7 +16,7 @@
     <script type="text/javascript">
       var DOCUMENTATION_OPTIONS = {
         URL_ROOT:    '',
-        VERSION:     '2.12.0',
+        VERSION:     '2.12.3',
         COLLAPSE_INDEX: false,
         FILE_SUFFIX: '.html',
         HAS_SOURCE:  true
@@ -25,7 +25,7 @@
     <script type="text/javascript" src="_static/jquery.js"></script>
     <script type="text/javascript" src="_static/underscore.js"></script>
     <script type="text/javascript" src="_static/doctools.js"></script>
-    <link rel="top" title="Ganeti 2.12.0 documentation" href="index.html" />
+    <link rel="top" title="Ganeti 2.12.3 documentation" href="index.html" />
     <link rel="next" title="Design for adding UUID and name to devices" href="design-device-uuid-name.html" />
     <link rel="prev" title="Taking relative CPU speed into account" href="design-cpu-speed.html" /> 
   </head>
@@ -39,7 +39,7 @@
         <li class="right" >
           <a href="design-cpu-speed.html" title="Taking relative CPU speed into account"
              accesskey="P">previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>  
 
@@ -305,7 +305,7 @@
         <li class="right" >
           <a href="design-cpu-speed.html" title="Taking relative CPU speed into account"
              >previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>
     <div class="footer">
diff -Nru ganeti-2.12.0/doc/html/design-cpu-speed.html ganeti-2.12.3/doc/html/design-cpu-speed.html
--- ganeti-2.12.0/doc/html/design-cpu-speed.html	2014-10-10 11:56:52.000000000 +0300
+++ ganeti-2.12.3/doc/html/design-cpu-speed.html	2015-04-29 11:14:16.000000000 +0300
@@ -8,7 +8,7 @@
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     
-    <title>Taking relative CPU speed into account — Ganeti 2.12.0 documentation</title>
+    <title>Taking relative CPU speed into account — Ganeti 2.12.3 documentation</title>
     
     <link rel="stylesheet" href="_static/style.css" type="text/css" />
     <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
@@ -16,7 +16,7 @@
     <script type="text/javascript">
       var DOCUMENTATION_OPTIONS = {
         URL_ROOT:    '',
-        VERSION:     '2.12.0',
+        VERSION:     '2.12.3',
         COLLAPSE_INDEX: false,
         FILE_SUFFIX: '.html',
         HAS_SOURCE:  true
@@ -25,7 +25,7 @@
     <script type="text/javascript" src="_static/jquery.js"></script>
     <script type="text/javascript" src="_static/underscore.js"></script>
     <script type="text/javascript" src="_static/doctools.js"></script>
-    <link rel="top" title="Ganeti 2.12.0 documentation" href="index.html" />
+    <link rel="top" title="Ganeti 2.12.3 documentation" href="index.html" />
     <link rel="next" title="Ganeti CPU Pinning" href="design-cpu-pinning.html" />
     <link rel="prev" title="Unit tests for cmdlib / LogicalUnit’s" href="design-cmdlib-unittests.html" /> 
   </head>
@@ -39,7 +39,7 @@
         <li class="right" >
           <a href="design-cmdlib-unittests.html" title="Unit tests for cmdlib / LogicalUnit’s"
              accesskey="P">previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>  
 
@@ -144,7 +144,7 @@
         <li class="right" >
           <a href="design-cmdlib-unittests.html" title="Unit tests for cmdlib / LogicalUnit’s"
              >previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>
     <div class="footer">
diff -Nru ganeti-2.12.0/doc/html/design-daemons.html ganeti-2.12.3/doc/html/design-daemons.html
--- ganeti-2.12.0/doc/html/design-daemons.html	2014-10-10 11:56:52.000000000 +0300
+++ ganeti-2.12.3/doc/html/design-daemons.html	2015-04-29 11:14:17.000000000 +0300
@@ -8,7 +8,7 @@
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     
-    <title>Ganeti daemons refactoring — Ganeti 2.12.0 documentation</title>
+    <title>Ganeti daemons refactoring — Ganeti 2.12.3 documentation</title>
     
     <link rel="stylesheet" href="_static/style.css" type="text/css" />
     <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
@@ -16,7 +16,7 @@
     <script type="text/javascript">
       var DOCUMENTATION_OPTIONS = {
         URL_ROOT:    '',
-        VERSION:     '2.12.0',
+        VERSION:     '2.12.3',
         COLLAPSE_INDEX: false,
         FILE_SUFFIX: '.html',
         HAS_SOURCE:  true
@@ -25,7 +25,7 @@
     <script type="text/javascript" src="_static/jquery.js"></script>
     <script type="text/javascript" src="_static/underscore.js"></script>
     <script type="text/javascript" src="_static/doctools.js"></script>
-    <link rel="top" title="Ganeti 2.12.0 documentation" href="index.html" />
+    <link rel="top" title="Ganeti 2.12.3 documentation" href="index.html" />
     <link rel="next" title="Disks" href="design-disks.html" />
     <link rel="prev" title="Design for adding UUID and name to devices" href="design-device-uuid-name.html" /> 
   </head>
@@ -39,7 +39,7 @@
         <li class="right" >
           <a href="design-device-uuid-name.html" title="Design for adding UUID and name to devices"
              accesskey="P">previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>  
 
@@ -218,7 +218,7 @@
 Interaction with this daemon will be performed using Unix sockets.</dd>
 <dt><tt class="docutils literal"><span class="pre">Configuration</span> <span class="pre">query</span> <span class="pre">daemon</span> <span class="pre">(RConfD)</span></tt></dt>
 <dd>It is written in Haskell, and it corresponds to the old ConfD. It will run on
-all the master candidates and it will serve information about the the static
+all the master candidates and it will serve information about the static
 configuration of the cluster (the one contained in <tt class="docutils literal"><span class="pre">config.data</span></tt>). The
 provided information will be highly available (as in: a response will be
 available as long as a stable-enough connection between the client and at
@@ -373,11 +373,11 @@
 <li>Only then the child process can replace itself by the actual job
 process.</li>
 </ol>
-<p>If the child process detect that the pipe is broken before receiving the
+<p>If the child process detects that the pipe is broken before receiving the
 confirmation, it must terminate, not starting the actual job.
-This way, the actual job is only started if its ensured that its lock
+This way, the actual job is only started if it is ensured that its lock
 file name is written to the job file.</p>
-<p>If the Luxi daemon detect that the pipe is broken before successfully
+<p>If the Luxi daemon detects that the pipe is broken before successfully
 sending the confirmation in step 4., it assumes that the job has failed.
 If the pipe gets broken after sending the confirmation, no further
 action is necessary. If the child doesn’t receive the confirmation,
@@ -456,20 +456,10 @@
 </ol>
 </dd>
 <dt>Step 3:</dt>
-<dd><ol class="first last arabic simple">
-<li>Remove WConfD’s RPC functions for obtaining/releasing the single
-internal lock from Step 1.</li>
-<li>Remove WConfD’s RPC functions for sending/receiving the whole
-configuration from Step 1.</li>
-</ol>
-</dd>
+<dd>In a later step, the impact of the config lock will be reduced by moving
+it more and more into an internal detail of WConfD. This process will be
+detailed in a forthcoming design document.</dd>
 </dl>
-<p>Future aims:</p>
-<ul class="simple">
-<li>Optionally refactor the RPC calls to reduce their number or improve their
-efficiency (for example by obtaining a larger set of data instead of
-querying items one by one).</li>
-</ul>
 </div>
 <div class="section" id="locking">
 <h4>Locking<a class="headerlink" href="#locking" title="Permalink to this headline">¶</a></h4>
@@ -564,7 +554,7 @@
 in the queue. This is race free, as LuxiD will no longer touch the job file,
 once the job is started; a corollary of this is that the job also has to
 take care of replicating updates to the job file. LuxiD will watch job files for
-changes to determine when a job as cleanly finished. To determine jobs
+changes to determine when a job was cleanly finished. To determine jobs
 that died without having the chance of updating the job file, the <a class="reference internal" href="#job-death-detection">Job death
 detection</a> mechanism will be used.</p>
 </div>
@@ -633,7 +623,7 @@
         <li class="right" >
           <a href="design-device-uuid-name.html" title="Design for adding UUID and name to devices"
              >previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>
     <div class="footer">
diff -Nru ganeti-2.12.0/doc/html/design-device-uuid-name.html ganeti-2.12.3/doc/html/design-device-uuid-name.html
--- ganeti-2.12.0/doc/html/design-device-uuid-name.html	2014-10-10 11:56:52.000000000 +0300
+++ ganeti-2.12.3/doc/html/design-device-uuid-name.html	2015-04-29 11:14:17.000000000 +0300
@@ -8,7 +8,7 @@
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     
-    <title>Design for adding UUID and name to devices — Ganeti 2.12.0 documentation</title>
+    <title>Design for adding UUID and name to devices — Ganeti 2.12.3 documentation</title>
     
     <link rel="stylesheet" href="_static/style.css" type="text/css" />
     <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
@@ -16,7 +16,7 @@
     <script type="text/javascript">
       var DOCUMENTATION_OPTIONS = {
         URL_ROOT:    '',
-        VERSION:     '2.12.0',
+        VERSION:     '2.12.3',
         COLLAPSE_INDEX: false,
         FILE_SUFFIX: '.html',
         HAS_SOURCE:  true
@@ -25,7 +25,7 @@
     <script type="text/javascript" src="_static/jquery.js"></script>
     <script type="text/javascript" src="_static/underscore.js"></script>
     <script type="text/javascript" src="_static/doctools.js"></script>
-    <link rel="top" title="Ganeti 2.12.0 documentation" href="index.html" />
+    <link rel="top" title="Ganeti 2.12.3 documentation" href="index.html" />
     <link rel="next" title="Ganeti daemons refactoring" href="design-daemons.html" />
     <link rel="prev" title="Ganeti CPU Pinning" href="design-cpu-pinning.html" /> 
   </head>
@@ -39,7 +39,7 @@
         <li class="right" >
           <a href="design-cpu-pinning.html" title="Ganeti CPU Pinning"
              accesskey="P">previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>  
 
@@ -188,7 +188,7 @@
         <li class="right" >
           <a href="design-cpu-pinning.html" title="Ganeti CPU Pinning"
              >previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>
     <div class="footer">
diff -Nru ganeti-2.12.0/doc/html/design-disks.html ganeti-2.12.3/doc/html/design-disks.html
--- ganeti-2.12.0/doc/html/design-disks.html	2014-10-10 11:56:52.000000000 +0300
+++ ganeti-2.12.3/doc/html/design-disks.html	2015-04-29 11:14:17.000000000 +0300
@@ -8,7 +8,7 @@
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     
-    <title>Disks — Ganeti 2.12.0 documentation</title>
+    <title>Disks — Ganeti 2.12.3 documentation</title>
     
     <link rel="stylesheet" href="_static/style.css" type="text/css" />
     <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
@@ -16,7 +16,7 @@
     <script type="text/javascript">
       var DOCUMENTATION_OPTIONS = {
         URL_ROOT:    '',
-        VERSION:     '2.12.0',
+        VERSION:     '2.12.3',
         COLLAPSE_INDEX: false,
         FILE_SUFFIX: '.html',
         HAS_SOURCE:  true
@@ -25,7 +25,7 @@
     <script type="text/javascript" src="_static/jquery.js"></script>
     <script type="text/javascript" src="_static/underscore.js"></script>
     <script type="text/javascript" src="_static/doctools.js"></script>
-    <link rel="top" title="Ganeti 2.12.0 documentation" href="index.html" />
+    <link rel="top" title="Ganeti 2.12.3 documentation" href="index.html" />
     <link rel="next" title="File-based Storage" href="design-file-based-storage.html" />
     <link rel="prev" title="Ganeti daemons refactoring" href="design-daemons.html" /> 
   </head>
@@ -39,7 +39,7 @@
         <li class="right" >
           <a href="design-daemons.html" title="Ganeti daemons refactoring"
              accesskey="P">previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>  
 
@@ -253,7 +253,7 @@
         <li class="right" >
           <a href="design-daemons.html" title="Ganeti daemons refactoring"
              >previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>
     <div class="footer">
diff -Nru ganeti-2.12.0/doc/html/design-draft.html ganeti-2.12.3/doc/html/design-draft.html
--- ganeti-2.12.0/doc/html/design-draft.html	2014-10-10 11:56:52.000000000 +0300
+++ ganeti-2.12.3/doc/html/design-draft.html	2015-04-29 11:14:17.000000000 +0300
@@ -8,7 +8,7 @@
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     
-    <title>Design document drafts — Ganeti 2.12.0 documentation</title>
+    <title>Design document drafts — Ganeti 2.12.3 documentation</title>
     
     <link rel="stylesheet" href="_static/style.css" type="text/css" />
     <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
@@ -16,7 +16,7 @@
     <script type="text/javascript">
       var DOCUMENTATION_OPTIONS = {
         URL_ROOT:    '',
-        VERSION:     '2.12.0',
+        VERSION:     '2.12.3',
         COLLAPSE_INDEX: false,
         FILE_SUFFIX: '.html',
         HAS_SOURCE:  true
@@ -25,7 +25,7 @@
     <script type="text/javascript" src="_static/jquery.js"></script>
     <script type="text/javascript" src="_static/underscore.js"></script>
     <script type="text/javascript" src="_static/doctools.js"></script>
-    <link rel="top" title="Ganeti 2.12.0 documentation" href="index.html" />
+    <link rel="top" title="Ganeti 2.12.3 documentation" href="index.html" />
     <link rel="next" title="Design for a X509 Certificate Authority" href="design-x509-ca.html" />
     <link rel="prev" title="Ganeti 2.12 design" href="design-2.12.html" /> 
   </head>
@@ -39,7 +39,7 @@
         <li class="right" >
           <a href="design-2.12.html" title="Ganeti 2.12 design"
              accesskey="P">previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>  
 
@@ -189,7 +189,7 @@
         <li class="right" >
           <a href="design-2.12.html" title="Ganeti 2.12 design"
              >previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>
     <div class="footer">
diff -Nru ganeti-2.12.0/doc/html/design-file-based-storage.html ganeti-2.12.3/doc/html/design-file-based-storage.html
--- ganeti-2.12.0/doc/html/design-file-based-storage.html	2014-10-10 11:56:52.000000000 +0300
+++ ganeti-2.12.3/doc/html/design-file-based-storage.html	2015-04-29 11:14:17.000000000 +0300
@@ -8,7 +8,7 @@
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     
-    <title>File-based Storage — Ganeti 2.12.0 documentation</title>
+    <title>File-based Storage — Ganeti 2.12.3 documentation</title>
     
     <link rel="stylesheet" href="_static/style.css" type="text/css" />
     <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
@@ -16,7 +16,7 @@
     <script type="text/javascript">
       var DOCUMENTATION_OPTIONS = {
         URL_ROOT:    '',
-        VERSION:     '2.12.0',
+        VERSION:     '2.12.3',
         COLLAPSE_INDEX: false,
         FILE_SUFFIX: '.html',
         HAS_SOURCE:  true
@@ -25,7 +25,7 @@
     <script type="text/javascript" src="_static/jquery.js"></script>
     <script type="text/javascript" src="_static/underscore.js"></script>
     <script type="text/javascript" src="_static/doctools.js"></script>
-    <link rel="top" title="Ganeti 2.12.0 documentation" href="index.html" />
+    <link rel="top" title="Ganeti 2.12.3 documentation" href="index.html" />
     <link rel="next" title="HRoller tool" href="design-hroller.html" />
     <link rel="prev" title="Disks" href="design-disks.html" /> 
   </head>
@@ -39,7 +39,7 @@
         <li class="right" >
           <a href="design-disks.html" title="Disks"
              accesskey="P">previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>  
 
@@ -63,7 +63,7 @@
 <li>failover of file-based virtual machines between cluster-nodes</li>
 <li>export/import file-based virtual machines</li>
 <li>reuse existing image files</li>
-<li>allow Ganeti to initalize the cluster without checking for a volume
+<li>allow Ganeti to initialize the cluster without checking for a volume
 group (e.g. xenvg)</li>
 </ul>
 <p>Non Goals:</p>
@@ -267,7 +267,7 @@
 <p>Provided “dump/restore” is used in the “export” and “import” guest-os
 scripts, there are no modifications needed when file-based instances are
 exported/imported. If any other backup-tool (which requires access to
-the mounted file-system) is used then the image file can be temporaily
+the mounted file-system) is used then the image file can be temporarily
 mounted. This can be done in different ways:</p>
 <p>Mount a raw image file via loopback driver:</p>
 <div class="highlight-python"><pre>mount -o loop /srv/ganeti/file-storage/instance1/sda1 /mnt/disk\</pre>
@@ -464,7 +464,7 @@
         <li class="right" >
           <a href="design-disks.html" title="Disks"
              >previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>
     <div class="footer">
diff -Nru ganeti-2.12.0/doc/html/design-glusterfs-ganeti-support.html ganeti-2.12.3/doc/html/design-glusterfs-ganeti-support.html
--- ganeti-2.12.0/doc/html/design-glusterfs-ganeti-support.html	2014-10-10 11:56:52.000000000 +0300
+++ ganeti-2.12.3/doc/html/design-glusterfs-ganeti-support.html	2015-04-29 11:14:17.000000000 +0300
@@ -8,7 +8,7 @@
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     
-    <title>GlusterFS Ganeti support — Ganeti 2.12.0 documentation</title>
+    <title>GlusterFS Ganeti support — Ganeti 2.12.3 documentation</title>
     
     <link rel="stylesheet" href="_static/style.css" type="text/css" />
     <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
@@ -16,7 +16,7 @@
     <script type="text/javascript">
       var DOCUMENTATION_OPTIONS = {
         URL_ROOT:    '',
-        VERSION:     '2.12.0',
+        VERSION:     '2.12.3',
         COLLAPSE_INDEX: false,
         FILE_SUFFIX: '.html',
         HAS_SOURCE:  true
@@ -25,7 +25,7 @@
     <script type="text/javascript" src="_static/jquery.js"></script>
     <script type="text/javascript" src="_static/underscore.js"></script>
     <script type="text/javascript" src="_static/doctools.js"></script>
-    <link rel="top" title="Ganeti 2.12.0 documentation" href="index.html" />
+    <link rel="top" title="Ganeti 2.12.3 documentation" href="index.html" />
     <link rel="up" title="Design document drafts" href="design-draft.html" />
     <link rel="next" title="Huge Pages Support for Ganeti" href="design-hugepages-support.html" />
     <link rel="prev" title="Management of storage types and disk templates, incl. storage space reporting" href="design-storagetypes.html" /> 
@@ -40,7 +40,7 @@
         <li class="right" >
           <a href="design-storagetypes.html" title="Management of storage types and disk templates, incl. storage space reporting"
              accesskey="P">previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li>
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li>
           <li><a href="design-draft.html" accesskey="U">Design document drafts</a> »</li> 
       </ul>
     </div>  
@@ -482,7 +482,7 @@
         <li class="right" >
           <a href="design-storagetypes.html" title="Management of storage types and disk templates, incl. storage space reporting"
              >previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li>
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li>
           <li><a href="design-draft.html" >Design document drafts</a> »</li> 
       </ul>
     </div>
diff -Nru ganeti-2.12.0/doc/html/design-hotplug.html ganeti-2.12.3/doc/html/design-hotplug.html
--- ganeti-2.12.0/doc/html/design-hotplug.html	2014-10-10 11:56:52.000000000 +0300
+++ ganeti-2.12.3/doc/html/design-hotplug.html	2015-04-29 11:14:17.000000000 +0300
@@ -8,7 +8,7 @@
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     
-    <title>Hotplug — Ganeti 2.12.0 documentation</title>
+    <title>Hotplug — Ganeti 2.12.3 documentation</title>
     
     <link rel="stylesheet" href="_static/style.css" type="text/css" />
     <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
@@ -16,7 +16,7 @@
     <script type="text/javascript">
       var DOCUMENTATION_OPTIONS = {
         URL_ROOT:    '',
-        VERSION:     '2.12.0',
+        VERSION:     '2.12.3',
         COLLAPSE_INDEX: false,
         FILE_SUFFIX: '.html',
         HAS_SOURCE:  true
@@ -25,7 +25,7 @@
     <script type="text/javascript" src="_static/jquery.js"></script>
     <script type="text/javascript" src="_static/underscore.js"></script>
     <script type="text/javascript" src="_static/doctools.js"></script>
-    <link rel="top" title="Ganeti 2.12.0 documentation" href="index.html" />
+    <link rel="top" title="Ganeti 2.12.3 documentation" href="index.html" />
     <link rel="next" title="Detection of user-initiated shutdown from inside an instance" href="design-internal-shutdown.html" />
     <link rel="prev" title="HRoller tool" href="design-hroller.html" /> 
   </head>
@@ -39,7 +39,7 @@
         <li class="right" >
           <a href="design-hroller.html" title="HRoller tool"
              accesskey="P">previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>  
 
@@ -343,7 +343,7 @@
         <li class="right" >
           <a href="design-hroller.html" title="HRoller tool"
              >previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>
     <div class="footer">
diff -Nru ganeti-2.12.0/doc/html/design-hroller.html ganeti-2.12.3/doc/html/design-hroller.html
--- ganeti-2.12.0/doc/html/design-hroller.html	2014-10-10 11:56:52.000000000 +0300
+++ ganeti-2.12.3/doc/html/design-hroller.html	2015-04-29 11:14:17.000000000 +0300
@@ -8,7 +8,7 @@
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     
-    <title>HRoller tool — Ganeti 2.12.0 documentation</title>
+    <title>HRoller tool — Ganeti 2.12.3 documentation</title>
     
     <link rel="stylesheet" href="_static/style.css" type="text/css" />
     <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
@@ -16,7 +16,7 @@
     <script type="text/javascript">
       var DOCUMENTATION_OPTIONS = {
         URL_ROOT:    '',
-        VERSION:     '2.12.0',
+        VERSION:     '2.12.3',
         COLLAPSE_INDEX: false,
         FILE_SUFFIX: '.html',
         HAS_SOURCE:  true
@@ -25,7 +25,7 @@
     <script type="text/javascript" src="_static/jquery.js"></script>
     <script type="text/javascript" src="_static/underscore.js"></script>
     <script type="text/javascript" src="_static/doctools.js"></script>
-    <link rel="top" title="Ganeti 2.12.0 documentation" href="index.html" />
+    <link rel="top" title="Ganeti 2.12.3 documentation" href="index.html" />
     <link rel="next" title="Hotplug" href="design-hotplug.html" />
     <link rel="prev" title="File-based Storage" href="design-file-based-storage.html" /> 
   </head>
@@ -39,7 +39,7 @@
         <li class="right" >
           <a href="design-file-based-storage.html" title="File-based Storage"
              accesskey="P">previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>  
 
@@ -282,7 +282,7 @@
         <li class="right" >
           <a href="design-file-based-storage.html" title="File-based Storage"
              >previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>
     <div class="footer">
diff -Nru ganeti-2.12.0/doc/html/design-hsqueeze.html ganeti-2.12.3/doc/html/design-hsqueeze.html
--- ganeti-2.12.0/doc/html/design-hsqueeze.html	2014-10-10 11:56:53.000000000 +0300
+++ ganeti-2.12.3/doc/html/design-hsqueeze.html	2015-04-29 11:14:17.000000000 +0300
@@ -8,7 +8,7 @@
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     
-    <title>HSqueeze tool — Ganeti 2.12.0 documentation</title>
+    <title>HSqueeze tool — Ganeti 2.12.3 documentation</title>
     
     <link rel="stylesheet" href="_static/style.css" type="text/css" />
     <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
@@ -16,7 +16,7 @@
     <script type="text/javascript">
       var DOCUMENTATION_OPTIONS = {
         URL_ROOT:    '',
-        VERSION:     '2.12.0',
+        VERSION:     '2.12.3',
         COLLAPSE_INDEX: false,
         FILE_SUFFIX: '.html',
         HAS_SOURCE:  true
@@ -25,7 +25,7 @@
     <script type="text/javascript" src="_static/jquery.js"></script>
     <script type="text/javascript" src="_static/underscore.js"></script>
     <script type="text/javascript" src="_static/doctools.js"></script>
-    <link rel="top" title="Ganeti 2.12.0 documentation" href="index.html" />
+    <link rel="top" title="Ganeti 2.12.3 documentation" href="index.html" />
     <link rel="up" title="Design document drafts" href="design-draft.html" />
     <link rel="next" title="Ganeti OS installation redesign" href="design-os.html" />
     <link rel="prev" title="RADOS/Ceph support in Ganeti" href="design-ceph-ganeti-support.html" /> 
@@ -40,7 +40,7 @@
         <li class="right" >
           <a href="design-ceph-ganeti-support.html" title="RADOS/Ceph support in Ganeti"
              accesskey="P">previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li>
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li>
           <li><a href="design-draft.html" accesskey="U">Design document drafts</a> »</li> 
       </ul>
     </div>  
@@ -239,7 +239,7 @@
         <li class="right" >
           <a href="design-ceph-ganeti-support.html" title="RADOS/Ceph support in Ganeti"
              >previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li>
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li>
           <li><a href="design-draft.html" >Design document drafts</a> »</li> 
       </ul>
     </div>
diff -Nru ganeti-2.12.0/doc/html/design-htools-2.3.html ganeti-2.12.3/doc/html/design-htools-2.3.html
--- ganeti-2.12.0/doc/html/design-htools-2.3.html	2014-10-10 11:56:53.000000000 +0300
+++ ganeti-2.12.3/doc/html/design-htools-2.3.html	2015-04-29 11:14:17.000000000 +0300
@@ -8,7 +8,7 @@
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     
-    <title>Synchronising htools to Ganeti 2.3 — Ganeti 2.12.0 documentation</title>
+    <title>Synchronising htools to Ganeti 2.3 — Ganeti 2.12.3 documentation</title>
     
     <link rel="stylesheet" href="_static/style.css" type="text/css" />
     <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
@@ -16,7 +16,7 @@
     <script type="text/javascript">
       var DOCUMENTATION_OPTIONS = {
         URL_ROOT:    '',
-        VERSION:     '2.12.0',
+        VERSION:     '2.12.3',
         COLLAPSE_INDEX: false,
         FILE_SUFFIX: '.html',
         HAS_SOURCE:  true
@@ -25,7 +25,7 @@
     <script type="text/javascript" src="_static/jquery.js"></script>
     <script type="text/javascript" src="_static/underscore.js"></script>
     <script type="text/javascript" src="_static/doctools.js"></script>
-    <link rel="top" title="Ganeti 2.12.0 documentation" href="index.html" />
+    <link rel="top" title="Ganeti 2.12.3 documentation" href="index.html" />
     <link rel="next" title="Ganeti 2.4 design" href="design-2.4.html" />
     <link rel="prev" title="Ganeti 2.3 design" href="design-2.3.html" /> 
   </head>
@@ -39,7 +39,7 @@
         <li class="right" >
           <a href="design-2.3.html" title="Ganeti 2.3 design"
              accesskey="P">previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>  
 
@@ -420,7 +420,7 @@
         <li class="right" >
           <a href="design-2.3.html" title="Ganeti 2.3 design"
              >previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>
     <div class="footer">
diff -Nru ganeti-2.12.0/doc/html/design-http-server.html ganeti-2.12.3/doc/html/design-http-server.html
--- ganeti-2.12.0/doc/html/design-http-server.html	2014-10-10 11:56:53.000000000 +0300
+++ ganeti-2.12.3/doc/html/design-http-server.html	2015-04-29 11:14:17.000000000 +0300
@@ -8,7 +8,7 @@
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     
-    <title>Design for replacing Ganeti’s HTTP server — Ganeti 2.12.0 documentation</title>
+    <title>Design for replacing Ganeti’s HTTP server — Ganeti 2.12.3 documentation</title>
     
     <link rel="stylesheet" href="_static/style.css" type="text/css" />
     <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
@@ -16,7 +16,7 @@
     <script type="text/javascript">
       var DOCUMENTATION_OPTIONS = {
         URL_ROOT:    '',
-        VERSION:     '2.12.0',
+        VERSION:     '2.12.3',
         COLLAPSE_INDEX: false,
         FILE_SUFFIX: '.html',
         HAS_SOURCE:  true
@@ -25,7 +25,7 @@
     <script type="text/javascript" src="_static/jquery.js"></script>
     <script type="text/javascript" src="_static/underscore.js"></script>
     <script type="text/javascript" src="_static/doctools.js"></script>
-    <link rel="top" title="Ganeti 2.12.0 documentation" href="index.html" />
+    <link rel="top" title="Ganeti 2.12.3 documentation" href="index.html" />
     <link rel="up" title="Design document drafts" href="design-draft.html" />
     <link rel="next" title="Design for import/export version 2" href="design-impexp2.html" />
     <link rel="prev" title="Design for a X509 Certificate Authority" href="design-x509-ca.html" /> 
@@ -40,7 +40,7 @@
         <li class="right" >
           <a href="design-x509-ca.html" title="Design for a X509 Certificate Authority"
              accesskey="P">previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li>
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li>
           <li><a href="design-draft.html" accesskey="U">Design document drafts</a> »</li> 
       </ul>
     </div>  
@@ -233,7 +233,7 @@
         <li class="right" >
           <a href="design-x509-ca.html" title="Design for a X509 Certificate Authority"
              >previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li>
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li>
           <li><a href="design-draft.html" >Design document drafts</a> »</li> 
       </ul>
     </div>
diff -Nru ganeti-2.12.0/doc/html/design-hugepages-support.html ganeti-2.12.3/doc/html/design-hugepages-support.html
--- ganeti-2.12.0/doc/html/design-hugepages-support.html	2014-10-10 11:56:53.000000000 +0300
+++ ganeti-2.12.3/doc/html/design-hugepages-support.html	2015-04-29 11:14:17.000000000 +0300
@@ -8,7 +8,7 @@
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     
-    <title>Huge Pages Support for Ganeti — Ganeti 2.12.0 documentation</title>
+    <title>Huge Pages Support for Ganeti — Ganeti 2.12.3 documentation</title>
     
     <link rel="stylesheet" href="_static/style.css" type="text/css" />
     <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
@@ -16,7 +16,7 @@
     <script type="text/javascript">
       var DOCUMENTATION_OPTIONS = {
         URL_ROOT:    '',
-        VERSION:     '2.12.0',
+        VERSION:     '2.12.3',
         COLLAPSE_INDEX: false,
         FILE_SUFFIX: '.html',
         HAS_SOURCE:  true
@@ -25,7 +25,7 @@
     <script type="text/javascript" src="_static/jquery.js"></script>
     <script type="text/javascript" src="_static/underscore.js"></script>
     <script type="text/javascript" src="_static/doctools.js"></script>
-    <link rel="top" title="Ganeti 2.12.0 documentation" href="index.html" />
+    <link rel="top" title="Ganeti 2.12.3 documentation" href="index.html" />
     <link rel="up" title="Design document drafts" href="design-draft.html" />
     <link rel="next" title="Filtering of jobs for the Ganeti job queue" href="design-optables.html" />
     <link rel="prev" title="GlusterFS Ganeti support" href="design-glusterfs-ganeti-support.html" /> 
@@ -40,7 +40,7 @@
         <li class="right" >
           <a href="design-glusterfs-ganeti-support.html" title="GlusterFS Ganeti support"
              accesskey="P">previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li>
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li>
           <li><a href="design-draft.html" accesskey="U">Design document drafts</a> »</li> 
       </ul>
     </div>  
@@ -194,7 +194,7 @@
         <li class="right" >
           <a href="design-glusterfs-ganeti-support.html" title="GlusterFS Ganeti support"
              >previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li>
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li>
           <li><a href="design-draft.html" >Design document drafts</a> »</li> 
       </ul>
     </div>
diff -Nru ganeti-2.12.0/doc/html/design-impexp2.html ganeti-2.12.3/doc/html/design-impexp2.html
--- ganeti-2.12.0/doc/html/design-impexp2.html	2014-10-10 11:56:53.000000000 +0300
+++ ganeti-2.12.3/doc/html/design-impexp2.html	2015-04-29 11:14:17.000000000 +0300
@@ -8,7 +8,7 @@
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     
-    <title>Design for import/export version 2 — Ganeti 2.12.0 documentation</title>
+    <title>Design for import/export version 2 — Ganeti 2.12.3 documentation</title>
     
     <link rel="stylesheet" href="_static/style.css" type="text/css" />
     <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
@@ -16,7 +16,7 @@
     <script type="text/javascript">
       var DOCUMENTATION_OPTIONS = {
         URL_ROOT:    '',
-        VERSION:     '2.12.0',
+        VERSION:     '2.12.3',
         COLLAPSE_INDEX: false,
         FILE_SUFFIX: '.html',
         HAS_SOURCE:  true
@@ -25,7 +25,7 @@
     <script type="text/javascript" src="_static/jquery.js"></script>
     <script type="text/javascript" src="_static/underscore.js"></script>
     <script type="text/javascript" src="_static/doctools.js"></script>
-    <link rel="top" title="Ganeti 2.12.0 documentation" href="index.html" />
+    <link rel="top" title="Ganeti 2.12.3 documentation" href="index.html" />
     <link rel="up" title="Design document drafts" href="design-draft.html" />
     <link rel="next" title="Resource model changes" href="design-resource-model.html" />
     <link rel="prev" title="Design for replacing Ganeti’s HTTP server" href="design-http-server.html" /> 
@@ -40,7 +40,7 @@
         <li class="right" >
           <a href="design-http-server.html" title="Design for replacing Ganeti’s HTTP server"
              accesskey="P">previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li>
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li>
           <li><a href="design-draft.html" accesskey="U">Design document drafts</a> »</li> 
       </ul>
     </div>  
@@ -626,7 +626,7 @@
         <li class="right" >
           <a href="design-http-server.html" title="Design for replacing Ganeti’s HTTP server"
              >previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li>
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li>
           <li><a href="design-draft.html" >Design document drafts</a> »</li> 
       </ul>
     </div>
diff -Nru ganeti-2.12.0/doc/html/design-internal-shutdown.html ganeti-2.12.3/doc/html/design-internal-shutdown.html
--- ganeti-2.12.0/doc/html/design-internal-shutdown.html	2014-10-10 11:56:53.000000000 +0300
+++ ganeti-2.12.3/doc/html/design-internal-shutdown.html	2015-04-29 11:14:17.000000000 +0300
@@ -8,7 +8,7 @@
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     
-    <title>Detection of user-initiated shutdown from inside an instance — Ganeti 2.12.0 documentation</title>
+    <title>Detection of user-initiated shutdown from inside an instance — Ganeti 2.12.3 documentation</title>
     
     <link rel="stylesheet" href="_static/style.css" type="text/css" />
     <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
@@ -16,7 +16,7 @@
     <script type="text/javascript">
       var DOCUMENTATION_OPTIONS = {
         URL_ROOT:    '',
-        VERSION:     '2.12.0',
+        VERSION:     '2.12.3',
         COLLAPSE_INDEX: false,
         FILE_SUFFIX: '.html',
         HAS_SOURCE:  true
@@ -25,7 +25,7 @@
     <script type="text/javascript" src="_static/jquery.js"></script>
     <script type="text/javascript" src="_static/underscore.js"></script>
     <script type="text/javascript" src="_static/doctools.js"></script>
-    <link rel="top" title="Ganeti 2.12.0 documentation" href="index.html" />
+    <link rel="top" title="Ganeti 2.12.3 documentation" href="index.html" />
     <link rel="next" title="KVM daemon" href="design-kvmd.html" />
     <link rel="prev" title="Hotplug" href="design-hotplug.html" /> 
   </head>
@@ -39,7 +39,7 @@
         <li class="right" >
           <a href="design-hotplug.html" title="Hotplug"
              accesskey="P">previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>  
 
@@ -215,7 +215,7 @@
         <li class="right" >
           <a href="design-hotplug.html" title="Hotplug"
              >previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>
     <div class="footer">
diff -Nru ganeti-2.12.0/doc/html/design-kvmd.html ganeti-2.12.3/doc/html/design-kvmd.html
--- ganeti-2.12.0/doc/html/design-kvmd.html	2014-10-10 11:56:53.000000000 +0300
+++ ganeti-2.12.3/doc/html/design-kvmd.html	2015-04-29 11:14:17.000000000 +0300
@@ -8,7 +8,7 @@
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     
-    <title>KVM daemon — Ganeti 2.12.0 documentation</title>
+    <title>KVM daemon — Ganeti 2.12.3 documentation</title>
     
     <link rel="stylesheet" href="_static/style.css" type="text/css" />
     <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
@@ -16,7 +16,7 @@
     <script type="text/javascript">
       var DOCUMENTATION_OPTIONS = {
         URL_ROOT:    '',
-        VERSION:     '2.12.0',
+        VERSION:     '2.12.3',
         COLLAPSE_INDEX: false,
         FILE_SUFFIX: '.html',
         HAS_SOURCE:  true
@@ -25,7 +25,7 @@
     <script type="text/javascript" src="_static/jquery.js"></script>
     <script type="text/javascript" src="_static/underscore.js"></script>
     <script type="text/javascript" src="_static/doctools.js"></script>
-    <link rel="top" title="Ganeti 2.12.0 documentation" href="index.html" />
+    <link rel="top" title="Ganeti 2.12.3 documentation" href="index.html" />
     <link rel="next" title="Linux HA integration" href="design-linuxha.html" />
     <link rel="prev" title="Detection of user-initiated shutdown from inside an instance" href="design-internal-shutdown.html" /> 
   </head>
@@ -39,7 +39,7 @@
         <li class="right" >
           <a href="design-internal-shutdown.html" title="Detection of user-initiated shutdown from inside an instance"
              accesskey="P">previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>  
 
@@ -296,7 +296,7 @@
         <li class="right" >
           <a href="design-internal-shutdown.html" title="Detection of user-initiated shutdown from inside an instance"
              >previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>
     <div class="footer">
diff -Nru ganeti-2.12.0/doc/html/design-linuxha.html ganeti-2.12.3/doc/html/design-linuxha.html
--- ganeti-2.12.0/doc/html/design-linuxha.html	2014-10-10 11:56:53.000000000 +0300
+++ ganeti-2.12.3/doc/html/design-linuxha.html	2015-04-29 11:14:17.000000000 +0300
@@ -8,7 +8,7 @@
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     
-    <title>Linux HA integration — Ganeti 2.12.0 documentation</title>
+    <title>Linux HA integration — Ganeti 2.12.3 documentation</title>
     
     <link rel="stylesheet" href="_static/style.css" type="text/css" />
     <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
@@ -16,7 +16,7 @@
     <script type="text/javascript">
       var DOCUMENTATION_OPTIONS = {
         URL_ROOT:    '',
-        VERSION:     '2.12.0',
+        VERSION:     '2.12.3',
         COLLAPSE_INDEX: false,
         FILE_SUFFIX: '.html',
         HAS_SOURCE:  true
@@ -25,7 +25,7 @@
     <script type="text/javascript" src="_static/jquery.js"></script>
     <script type="text/javascript" src="_static/underscore.js"></script>
     <script type="text/javascript" src="_static/doctools.js"></script>
-    <link rel="top" title="Ganeti 2.12.0 documentation" href="index.html" />
+    <link rel="top" title="Ganeti 2.12.3 documentation" href="index.html" />
     <link rel="next" title="Submitting jobs from logical units" href="design-lu-generated-jobs.html" />
     <link rel="prev" title="KVM daemon" href="design-kvmd.html" /> 
   </head>
@@ -39,7 +39,7 @@
         <li class="right" >
           <a href="design-kvmd.html" title="KVM daemon"
              accesskey="P">previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>  
 
@@ -292,7 +292,7 @@
         <li class="right" >
           <a href="design-kvmd.html" title="KVM daemon"
              >previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>
     <div class="footer">
diff -Nru ganeti-2.12.0/doc/html/design-lu-generated-jobs.html ganeti-2.12.3/doc/html/design-lu-generated-jobs.html
--- ganeti-2.12.0/doc/html/design-lu-generated-jobs.html	2014-10-10 11:56:53.000000000 +0300
+++ ganeti-2.12.3/doc/html/design-lu-generated-jobs.html	2015-04-29 11:14:17.000000000 +0300
@@ -8,7 +8,7 @@
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     
-    <title>Submitting jobs from logical units — Ganeti 2.12.0 documentation</title>
+    <title>Submitting jobs from logical units — Ganeti 2.12.3 documentation</title>
     
     <link rel="stylesheet" href="_static/style.css" type="text/css" />
     <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
@@ -16,7 +16,7 @@
     <script type="text/javascript">
       var DOCUMENTATION_OPTIONS = {
         URL_ROOT:    '',
-        VERSION:     '2.12.0',
+        VERSION:     '2.12.3',
         COLLAPSE_INDEX: false,
         FILE_SUFFIX: '.html',
         HAS_SOURCE:  true
@@ -25,7 +25,7 @@
     <script type="text/javascript" src="_static/jquery.js"></script>
     <script type="text/javascript" src="_static/underscore.js"></script>
     <script type="text/javascript" src="_static/doctools.js"></script>
-    <link rel="top" title="Ganeti 2.12.0 documentation" href="index.html" />
+    <link rel="top" title="Ganeti 2.12.3 documentation" href="index.html" />
     <link rel="next" title="Ganeti monitoring agent" href="design-monitoring-agent.html" />
     <link rel="prev" title="Linux HA integration" href="design-linuxha.html" /> 
   </head>
@@ -39,7 +39,7 @@
         <li class="right" >
           <a href="design-linuxha.html" title="Linux HA integration"
              accesskey="P">previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>  
 
@@ -187,7 +187,7 @@
         <li class="right" >
           <a href="design-linuxha.html" title="Linux HA integration"
              >previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>
     <div class="footer">
diff -Nru ganeti-2.12.0/doc/html/design-monitoring-agent.html ganeti-2.12.3/doc/html/design-monitoring-agent.html
--- ganeti-2.12.0/doc/html/design-monitoring-agent.html	2014-10-10 11:56:53.000000000 +0300
+++ ganeti-2.12.3/doc/html/design-monitoring-agent.html	2015-04-29 11:14:18.000000000 +0300
@@ -8,7 +8,7 @@
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     
-    <title>Ganeti monitoring agent — Ganeti 2.12.0 documentation</title>
+    <title>Ganeti monitoring agent — Ganeti 2.12.3 documentation</title>
     
     <link rel="stylesheet" href="_static/style.css" type="text/css" />
     <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
@@ -16,7 +16,7 @@
     <script type="text/javascript">
       var DOCUMENTATION_OPTIONS = {
         URL_ROOT:    '',
-        VERSION:     '2.12.0',
+        VERSION:     '2.12.3',
         COLLAPSE_INDEX: false,
         FILE_SUFFIX: '.html',
         HAS_SOURCE:  true
@@ -25,7 +25,7 @@
     <script type="text/javascript" src="_static/jquery.js"></script>
     <script type="text/javascript" src="_static/underscore.js"></script>
     <script type="text/javascript" src="_static/doctools.js"></script>
-    <link rel="top" title="Ganeti 2.12.0 documentation" href="index.html" />
+    <link rel="top" title="Ganeti 2.12.3 documentation" href="index.html" />
     <link rel="next" title="Instance move improvements" href="design-move-instance-improvements.html" />
     <link rel="prev" title="Submitting jobs from logical units" href="design-lu-generated-jobs.html" /> 
   </head>
@@ -39,7 +39,7 @@
         <li class="right" >
           <a href="design-lu-generated-jobs.html" title="Submitting jobs from logical units"
              accesskey="P">previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>  
 
@@ -932,7 +932,7 @@
         <li class="right" >
           <a href="design-lu-generated-jobs.html" title="Submitting jobs from logical units"
              >previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>
     <div class="footer">
diff -Nru ganeti-2.12.0/doc/html/design-move-instance-improvements.html ganeti-2.12.3/doc/html/design-move-instance-improvements.html
--- ganeti-2.12.0/doc/html/design-move-instance-improvements.html	2014-10-10 11:56:53.000000000 +0300
+++ ganeti-2.12.3/doc/html/design-move-instance-improvements.html	2015-04-29 11:14:18.000000000 +0300
@@ -8,7 +8,7 @@
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     
-    <title>Instance move improvements — Ganeti 2.12.0 documentation</title>
+    <title>Instance move improvements — Ganeti 2.12.3 documentation</title>
     
     <link rel="stylesheet" href="_static/style.css" type="text/css" />
     <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
@@ -16,7 +16,7 @@
     <script type="text/javascript">
       var DOCUMENTATION_OPTIONS = {
         URL_ROOT:    '',
-        VERSION:     '2.12.0',
+        VERSION:     '2.12.3',
         COLLAPSE_INDEX: false,
         FILE_SUFFIX: '.html',
         HAS_SOURCE:  true
@@ -25,7 +25,7 @@
     <script type="text/javascript" src="_static/jquery.js"></script>
     <script type="text/javascript" src="_static/underscore.js"></script>
     <script type="text/javascript" src="_static/doctools.js"></script>
-    <link rel="top" title="Ganeti 2.12.0 documentation" href="index.html" />
+    <link rel="top" title="Ganeti 2.12.3 documentation" href="index.html" />
     <link rel="next" title="Moving instances accross node groups" href="design-multi-reloc.html" />
     <link rel="prev" title="Ganeti monitoring agent" href="design-monitoring-agent.html" /> 
   </head>
@@ -39,7 +39,7 @@
         <li class="right" >
           <a href="design-monitoring-agent.html" title="Ganeti monitoring agent"
              accesskey="P">previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>  
 
@@ -451,7 +451,7 @@
         <li class="right" >
           <a href="design-monitoring-agent.html" title="Ganeti monitoring agent"
              >previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>
     <div class="footer">
diff -Nru ganeti-2.12.0/doc/html/design-multi-reloc.html ganeti-2.12.3/doc/html/design-multi-reloc.html
--- ganeti-2.12.0/doc/html/design-multi-reloc.html	2014-10-10 11:56:53.000000000 +0300
+++ ganeti-2.12.3/doc/html/design-multi-reloc.html	2015-04-29 11:14:18.000000000 +0300
@@ -8,7 +8,7 @@
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     
-    <title>Moving instances accross node groups — Ganeti 2.12.0 documentation</title>
+    <title>Moving instances accross node groups — Ganeti 2.12.3 documentation</title>
     
     <link rel="stylesheet" href="_static/style.css" type="text/css" />
     <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
@@ -16,7 +16,7 @@
     <script type="text/javascript">
       var DOCUMENTATION_OPTIONS = {
         URL_ROOT:    '',
-        VERSION:     '2.12.0',
+        VERSION:     '2.12.3',
         COLLAPSE_INDEX: false,
         FILE_SUFFIX: '.html',
         HAS_SOURCE:  true
@@ -25,7 +25,7 @@
     <script type="text/javascript" src="_static/jquery.js"></script>
     <script type="text/javascript" src="_static/underscore.js"></script>
     <script type="text/javascript" src="_static/doctools.js"></script>
-    <link rel="top" title="Ganeti 2.12.0 documentation" href="index.html" />
+    <link rel="top" title="Ganeti 2.12.3 documentation" href="index.html" />
     <link rel="next" title="Multi-version tests" href="design-multi-version-tests.html" />
     <link rel="prev" title="Instance move improvements" href="design-move-instance-improvements.html" /> 
   </head>
@@ -39,7 +39,7 @@
         <li class="right" >
           <a href="design-move-instance-improvements.html" title="Instance move improvements"
              accesskey="P">previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>  
 
@@ -228,7 +228,7 @@
         <li class="right" >
           <a href="design-move-instance-improvements.html" title="Instance move improvements"
              >previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>
     <div class="footer">
diff -Nru ganeti-2.12.0/doc/html/design-multi-version-tests.html ganeti-2.12.3/doc/html/design-multi-version-tests.html
--- ganeti-2.12.0/doc/html/design-multi-version-tests.html	2014-10-10 11:56:53.000000000 +0300
+++ ganeti-2.12.3/doc/html/design-multi-version-tests.html	2015-04-29 11:14:18.000000000 +0300
@@ -8,7 +8,7 @@
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     
-    <title>Multi-version tests — Ganeti 2.12.0 documentation</title>
+    <title>Multi-version tests — Ganeti 2.12.3 documentation</title>
     
     <link rel="stylesheet" href="_static/style.css" type="text/css" />
     <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
@@ -16,7 +16,7 @@
     <script type="text/javascript">
       var DOCUMENTATION_OPTIONS = {
         URL_ROOT:    '',
-        VERSION:     '2.12.0',
+        VERSION:     '2.12.3',
         COLLAPSE_INDEX: false,
         FILE_SUFFIX: '.html',
         HAS_SOURCE:  true
@@ -25,7 +25,7 @@
     <script type="text/javascript" src="_static/jquery.js"></script>
     <script type="text/javascript" src="_static/underscore.js"></script>
     <script type="text/javascript" src="_static/doctools.js"></script>
-    <link rel="top" title="Ganeti 2.12.0 documentation" href="index.html" />
+    <link rel="top" title="Ganeti 2.12.3 documentation" href="index.html" />
     <link rel="next" title="Network management" href="design-network.html" />
     <link rel="prev" title="Moving instances accross node groups" href="design-multi-reloc.html" /> 
   </head>
@@ -39,7 +39,7 @@
         <li class="right" >
           <a href="design-multi-reloc.html" title="Moving instances accross node groups"
              accesskey="P">previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>  
 
@@ -270,7 +270,7 @@
         <li class="right" >
           <a href="design-multi-reloc.html" title="Moving instances accross node groups"
              >previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>
     <div class="footer">
diff -Nru ganeti-2.12.0/doc/html/design-network.html ganeti-2.12.3/doc/html/design-network.html
--- ganeti-2.12.0/doc/html/design-network.html	2014-10-10 11:56:53.000000000 +0300
+++ ganeti-2.12.3/doc/html/design-network.html	2015-04-29 11:14:18.000000000 +0300
@@ -8,7 +8,7 @@
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     
-    <title>Network management — Ganeti 2.12.0 documentation</title>
+    <title>Network management — Ganeti 2.12.3 documentation</title>
     
     <link rel="stylesheet" href="_static/style.css" type="text/css" />
     <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
@@ -16,7 +16,7 @@
     <script type="text/javascript">
       var DOCUMENTATION_OPTIONS = {
         URL_ROOT:    '',
-        VERSION:     '2.12.0',
+        VERSION:     '2.12.3',
         COLLAPSE_INDEX: false,
         FILE_SUFFIX: '.html',
         HAS_SOURCE:  true
@@ -25,7 +25,7 @@
     <script type="text/javascript" src="_static/jquery.js"></script>
     <script type="text/javascript" src="_static/underscore.js"></script>
     <script type="text/javascript" src="_static/doctools.js"></script>
-    <link rel="top" title="Ganeti 2.12.0 documentation" href="index.html" />
+    <link rel="top" title="Ganeti 2.12.3 documentation" href="index.html" />
     <link rel="next" title="Design for adding a node to a cluster" href="design-node-add.html" />
     <link rel="prev" title="Multi-version tests" href="design-multi-version-tests.html" /> 
   </head>
@@ -39,7 +39,7 @@
         <li class="right" >
           <a href="design-multi-version-tests.html" title="Multi-version tests"
              accesskey="P">previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>  
 
@@ -473,7 +473,7 @@
         <li class="right" >
           <a href="design-multi-version-tests.html" title="Multi-version tests"
              >previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>
     <div class="footer">
diff -Nru ganeti-2.12.0/doc/html/design-node-add.html ganeti-2.12.3/doc/html/design-node-add.html
--- ganeti-2.12.0/doc/html/design-node-add.html	2014-10-10 11:56:53.000000000 +0300
+++ ganeti-2.12.3/doc/html/design-node-add.html	2015-04-29 11:14:18.000000000 +0300
@@ -8,7 +8,7 @@
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     
-    <title>Design for adding a node to a cluster — Ganeti 2.12.0 documentation</title>
+    <title>Design for adding a node to a cluster — Ganeti 2.12.3 documentation</title>
     
     <link rel="stylesheet" href="_static/style.css" type="text/css" />
     <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
@@ -16,7 +16,7 @@
     <script type="text/javascript">
       var DOCUMENTATION_OPTIONS = {
         URL_ROOT:    '',
-        VERSION:     '2.12.0',
+        VERSION:     '2.12.3',
         COLLAPSE_INDEX: false,
         FILE_SUFFIX: '.html',
         HAS_SOURCE:  true
@@ -25,7 +25,7 @@
     <script type="text/javascript" src="_static/jquery.js"></script>
     <script type="text/javascript" src="_static/underscore.js"></script>
     <script type="text/javascript" src="_static/doctools.js"></script>
-    <link rel="top" title="Ganeti 2.12.0 documentation" href="index.html" />
+    <link rel="top" title="Ganeti 2.12.3 documentation" href="index.html" />
     <link rel="next" title="Improvements of Node Security" href="design-node-security.html" />
     <link rel="prev" title="Network management" href="design-network.html" /> 
   </head>
@@ -39,7 +39,7 @@
         <li class="right" >
           <a href="design-network.html" title="Network management"
              accesskey="P">previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>  
 
@@ -254,7 +254,7 @@
         <li class="right" >
           <a href="design-network.html" title="Network management"
              >previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>
     <div class="footer">
diff -Nru ganeti-2.12.0/doc/html/design-node-security.html ganeti-2.12.3/doc/html/design-node-security.html
--- ganeti-2.12.0/doc/html/design-node-security.html	2014-10-10 11:56:54.000000000 +0300
+++ ganeti-2.12.3/doc/html/design-node-security.html	2015-04-29 11:14:18.000000000 +0300
@@ -8,7 +8,7 @@
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     
-    <title>Improvements of Node Security — Ganeti 2.12.0 documentation</title>
+    <title>Improvements of Node Security — Ganeti 2.12.3 documentation</title>
     
     <link rel="stylesheet" href="_static/style.css" type="text/css" />
     <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
@@ -16,7 +16,7 @@
     <script type="text/javascript">
       var DOCUMENTATION_OPTIONS = {
         URL_ROOT:    '',
-        VERSION:     '2.12.0',
+        VERSION:     '2.12.3',
         COLLAPSE_INDEX: false,
         FILE_SUFFIX: '.html',
         HAS_SOURCE:  true
@@ -25,7 +25,7 @@
     <script type="text/javascript" src="_static/jquery.js"></script>
     <script type="text/javascript" src="_static/underscore.js"></script>
     <script type="text/javascript" src="_static/doctools.js"></script>
-    <link rel="top" title="Ganeti 2.12.0 documentation" href="index.html" />
+    <link rel="top" title="Ganeti 2.12.3 documentation" href="index.html" />
     <link rel="next" title="Ganeti Node OOB Management Framework" href="design-oob.html" />
     <link rel="prev" title="Design for adding a node to a cluster" href="design-node-add.html" /> 
   </head>
@@ -39,7 +39,7 @@
         <li class="right" >
           <a href="design-node-add.html" title="Design for adding a node to a cluster"
              accesskey="P">previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>  
 
@@ -731,7 +731,7 @@
         <li class="right" >
           <a href="design-node-add.html" title="Design for adding a node to a cluster"
              >previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>
     <div class="footer">
diff -Nru ganeti-2.12.0/doc/html/design-oob.html ganeti-2.12.3/doc/html/design-oob.html
--- ganeti-2.12.0/doc/html/design-oob.html	2014-10-10 11:56:54.000000000 +0300
+++ ganeti-2.12.3/doc/html/design-oob.html	2015-04-29 11:14:18.000000000 +0300
@@ -8,7 +8,7 @@
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     
-    <title>Ganeti Node OOB Management Framework — Ganeti 2.12.0 documentation</title>
+    <title>Ganeti Node OOB Management Framework — Ganeti 2.12.3 documentation</title>
     
     <link rel="stylesheet" href="_static/style.css" type="text/css" />
     <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
@@ -16,7 +16,7 @@
     <script type="text/javascript">
       var DOCUMENTATION_OPTIONS = {
         URL_ROOT:    '',
-        VERSION:     '2.12.0',
+        VERSION:     '2.12.3',
         COLLAPSE_INDEX: false,
         FILE_SUFFIX: '.html',
         HAS_SOURCE:  true
@@ -25,7 +25,7 @@
     <script type="text/javascript" src="_static/jquery.js"></script>
     <script type="text/javascript" src="_static/underscore.js"></script>
     <script type="text/javascript" src="_static/doctools.js"></script>
-    <link rel="top" title="Ganeti 2.12.0 documentation" href="index.html" />
+    <link rel="top" title="Ganeti 2.12.3 documentation" href="index.html" />
     <link rel="next" title="Support for Open vSwitch" href="design-openvswitch.html" />
     <link rel="prev" title="Improvements of Node Security" href="design-node-security.html" /> 
   </head>
@@ -39,7 +39,7 @@
         <li class="right" >
           <a href="design-node-security.html" title="Improvements of Node Security"
              accesskey="P">previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>  
 
@@ -641,7 +641,7 @@
         <li class="right" >
           <a href="design-node-security.html" title="Improvements of Node Security"
              >previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>
     <div class="footer">
diff -Nru ganeti-2.12.0/doc/html/design-openvswitch.html ganeti-2.12.3/doc/html/design-openvswitch.html
--- ganeti-2.12.0/doc/html/design-openvswitch.html	2014-10-10 11:56:54.000000000 +0300
+++ ganeti-2.12.3/doc/html/design-openvswitch.html	2015-04-29 11:14:18.000000000 +0300
@@ -8,7 +8,7 @@
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     
-    <title>Support for Open vSwitch — Ganeti 2.12.0 documentation</title>
+    <title>Support for Open vSwitch — Ganeti 2.12.3 documentation</title>
     
     <link rel="stylesheet" href="_static/style.css" type="text/css" />
     <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
@@ -16,7 +16,7 @@
     <script type="text/javascript">
       var DOCUMENTATION_OPTIONS = {
         URL_ROOT:    '',
-        VERSION:     '2.12.0',
+        VERSION:     '2.12.3',
         COLLAPSE_INDEX: false,
         FILE_SUFFIX: '.html',
         HAS_SOURCE:  true
@@ -25,7 +25,7 @@
     <script type="text/javascript" src="_static/jquery.js"></script>
     <script type="text/javascript" src="_static/underscore.js"></script>
     <script type="text/javascript" src="_static/doctools.js"></script>
-    <link rel="top" title="Ganeti 2.12.0 documentation" href="index.html" />
+    <link rel="top" title="Ganeti 2.12.3 documentation" href="index.html" />
     <link rel="next" title="Design for parallelized instance creations and opportunistic locking" href="design-opportunistic-locking.html" />
     <link rel="prev" title="Ganeti Node OOB Management Framework" href="design-oob.html" /> 
   </head>
@@ -39,7 +39,7 @@
         <li class="right" >
           <a href="design-oob.html" title="Ganeti Node OOB Management Framework"
              accesskey="P">previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>  
 
@@ -214,7 +214,7 @@
         <li class="right" >
           <a href="design-oob.html" title="Ganeti Node OOB Management Framework"
              >previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>
     <div class="footer">
diff -Nru ganeti-2.12.0/doc/html/design-opportunistic-locking.html ganeti-2.12.3/doc/html/design-opportunistic-locking.html
--- ganeti-2.12.0/doc/html/design-opportunistic-locking.html	2014-10-10 11:56:54.000000000 +0300
+++ ganeti-2.12.3/doc/html/design-opportunistic-locking.html	2015-04-29 11:14:18.000000000 +0300
@@ -8,7 +8,7 @@
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     
-    <title>Design for parallelized instance creations and opportunistic locking — Ganeti 2.12.0 documentation</title>
+    <title>Design for parallelized instance creations and opportunistic locking — Ganeti 2.12.3 documentation</title>
     
     <link rel="stylesheet" href="_static/style.css" type="text/css" />
     <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
@@ -16,7 +16,7 @@
     <script type="text/javascript">
       var DOCUMENTATION_OPTIONS = {
         URL_ROOT:    '',
-        VERSION:     '2.12.0',
+        VERSION:     '2.12.3',
         COLLAPSE_INDEX: false,
         FILE_SUFFIX: '.html',
         HAS_SOURCE:  true
@@ -25,7 +25,7 @@
     <script type="text/javascript" src="_static/jquery.js"></script>
     <script type="text/javascript" src="_static/underscore.js"></script>
     <script type="text/javascript" src="_static/doctools.js"></script>
-    <link rel="top" title="Ganeti 2.12.0 documentation" href="index.html" />
+    <link rel="top" title="Ganeti 2.12.3 documentation" href="index.html" />
     <link rel="next" title="Ganeti OS installation redesign" href="design-os.html" />
     <link rel="prev" title="Support for Open vSwitch" href="design-openvswitch.html" /> 
   </head>
@@ -39,7 +39,7 @@
         <li class="right" >
           <a href="design-openvswitch.html" title="Support for Open vSwitch"
              accesskey="P">previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>  
 
@@ -228,7 +228,7 @@
         <li class="right" >
           <a href="design-openvswitch.html" title="Support for Open vSwitch"
              >previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>
     <div class="footer">
diff -Nru ganeti-2.12.0/doc/html/design-optables.html ganeti-2.12.3/doc/html/design-optables.html
--- ganeti-2.12.0/doc/html/design-optables.html	2014-10-10 11:56:54.000000000 +0300
+++ ganeti-2.12.3/doc/html/design-optables.html	2015-04-29 11:14:18.000000000 +0300
@@ -8,7 +8,7 @@
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     
-    <title>Filtering of jobs for the Ganeti job queue — Ganeti 2.12.0 documentation</title>
+    <title>Filtering of jobs for the Ganeti job queue — Ganeti 2.12.3 documentation</title>
     
     <link rel="stylesheet" href="_static/style.css" type="text/css" />
     <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
@@ -16,7 +16,7 @@
     <script type="text/javascript">
       var DOCUMENTATION_OPTIONS = {
         URL_ROOT:    '',
-        VERSION:     '2.12.0',
+        VERSION:     '2.12.3',
         COLLAPSE_INDEX: false,
         FILE_SUFFIX: '.html',
         HAS_SOURCE:  true
@@ -25,7 +25,7 @@
     <script type="text/javascript" src="_static/jquery.js"></script>
     <script type="text/javascript" src="_static/underscore.js"></script>
     <script type="text/javascript" src="_static/doctools.js"></script>
-    <link rel="top" title="Ganeti 2.12.0 documentation" href="index.html" />
+    <link rel="top" title="Ganeti 2.12.3 documentation" href="index.html" />
     <link rel="up" title="Design document drafts" href="design-draft.html" />
     <link rel="next" title="RADOS/Ceph support in Ganeti" href="design-ceph-ganeti-support.html" />
     <link rel="prev" title="Huge Pages Support for Ganeti" href="design-hugepages-support.html" /> 
@@ -40,7 +40,7 @@
         <li class="right" >
           <a href="design-hugepages-support.html" title="Huge Pages Support for Ganeti"
              accesskey="P">previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li>
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li>
           <li><a href="design-draft.html" accesskey="U">Design document drafts</a> »</li> 
       </ul>
     </div>  
@@ -297,7 +297,7 @@
         <li class="right" >
           <a href="design-hugepages-support.html" title="Huge Pages Support for Ganeti"
              >previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li>
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li>
           <li><a href="design-draft.html" >Design document drafts</a> »</li> 
       </ul>
     </div>
diff -Nru ganeti-2.12.0/doc/html/design-os.html ganeti-2.12.3/doc/html/design-os.html
--- ganeti-2.12.0/doc/html/design-os.html	2014-10-10 11:56:54.000000000 +0300
+++ ganeti-2.12.3/doc/html/design-os.html	2015-04-29 11:14:19.000000000 +0300
@@ -8,7 +8,7 @@
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     
-    <title>Ganeti OS installation redesign — Ganeti 2.12.0 documentation</title>
+    <title>Ganeti OS installation redesign — Ganeti 2.12.3 documentation</title>
     
     <link rel="stylesheet" href="_static/style.css" type="text/css" />
     <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
@@ -16,7 +16,7 @@
     <script type="text/javascript">
       var DOCUMENTATION_OPTIONS = {
         URL_ROOT:    '',
-        VERSION:     '2.12.0',
+        VERSION:     '2.12.3',
         COLLAPSE_INDEX: false,
         FILE_SUFFIX: '.html',
         HAS_SOURCE:  true
@@ -25,7 +25,7 @@
     <script type="text/javascript" src="_static/jquery.js"></script>
     <script type="text/javascript" src="_static/underscore.js"></script>
     <script type="text/javascript" src="_static/doctools.js"></script>
-    <link rel="top" title="Ganeti 2.12.0 documentation" href="index.html" />
+    <link rel="top" title="Ganeti 2.12.3 documentation" href="index.html" />
     <link rel="next" title="Ganeti Instance Import/Export using Open Virtualization Format" href="design-ovf-support.html" />
     <link rel="prev" title="Design for parallelized instance creations and opportunistic locking" href="design-opportunistic-locking.html" /> 
   </head>
@@ -39,7 +39,7 @@
         <li class="right" >
           <a href="design-opportunistic-locking.html" title="Design for parallelized instance creations and opportunistic locking"
              accesskey="P">previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>  
 
@@ -676,7 +676,7 @@
         <li class="right" >
           <a href="design-opportunistic-locking.html" title="Design for parallelized instance creations and opportunistic locking"
              >previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>
     <div class="footer">
diff -Nru ganeti-2.12.0/doc/html/design-ovf-support.html ganeti-2.12.3/doc/html/design-ovf-support.html
--- ganeti-2.12.0/doc/html/design-ovf-support.html	2014-10-10 11:56:55.000000000 +0300
+++ ganeti-2.12.3/doc/html/design-ovf-support.html	2015-04-29 11:14:19.000000000 +0300
@@ -8,7 +8,7 @@
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     
-    <title>Ganeti Instance Import/Export using Open Virtualization Format — Ganeti 2.12.0 documentation</title>
+    <title>Ganeti Instance Import/Export using Open Virtualization Format — Ganeti 2.12.3 documentation</title>
     
     <link rel="stylesheet" href="_static/style.css" type="text/css" />
     <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
@@ -16,7 +16,7 @@
     <script type="text/javascript">
       var DOCUMENTATION_OPTIONS = {
         URL_ROOT:    '',
-        VERSION:     '2.12.0',
+        VERSION:     '2.12.3',
         COLLAPSE_INDEX: false,
         FILE_SUFFIX: '.html',
         HAS_SOURCE:  true
@@ -25,7 +25,7 @@
     <script type="text/javascript" src="_static/jquery.js"></script>
     <script type="text/javascript" src="_static/underscore.js"></script>
     <script type="text/javascript" src="_static/doctools.js"></script>
-    <link rel="top" title="Ganeti 2.12.0 documentation" href="index.html" />
+    <link rel="top" title="Ganeti 2.12.3 documentation" href="index.html" />
     <link rel="next" title="Partitioned Ganeti" href="design-partitioned.html" />
     <link rel="prev" title="Ganeti OS installation redesign" href="design-os.html" /> 
   </head>
@@ -39,7 +39,7 @@
         <li class="right" >
           <a href="design-os.html" title="Ganeti OS installation redesign"
              accesskey="P">previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>  
 
@@ -613,7 +613,7 @@
         <li class="right" >
           <a href="design-os.html" title="Ganeti OS installation redesign"
              >previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>
     <div class="footer">
diff -Nru ganeti-2.12.0/doc/html/design-partitioned.html ganeti-2.12.3/doc/html/design-partitioned.html
--- ganeti-2.12.0/doc/html/design-partitioned.html	2014-10-10 11:56:55.000000000 +0300
+++ ganeti-2.12.3/doc/html/design-partitioned.html	2015-04-29 11:14:19.000000000 +0300
@@ -8,7 +8,7 @@
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     
-    <title>Partitioned Ganeti — Ganeti 2.12.0 documentation</title>
+    <title>Partitioned Ganeti — Ganeti 2.12.3 documentation</title>
     
     <link rel="stylesheet" href="_static/style.css" type="text/css" />
     <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
@@ -16,7 +16,7 @@
     <script type="text/javascript">
       var DOCUMENTATION_OPTIONS = {
         URL_ROOT:    '',
-        VERSION:     '2.12.0',
+        VERSION:     '2.12.3',
         COLLAPSE_INDEX: false,
         FILE_SUFFIX: '.html',
         HAS_SOURCE:  true
@@ -25,7 +25,7 @@
     <script type="text/javascript" src="_static/jquery.js"></script>
     <script type="text/javascript" src="_static/underscore.js"></script>
     <script type="text/javascript" src="_static/doctools.js"></script>
-    <link rel="top" title="Ganeti 2.12.0 documentation" href="index.html" />
+    <link rel="top" title="Ganeti 2.12.3 documentation" href="index.html" />
     <link rel="next" title="Performance tests for QA" href="design-performance-tests.html" />
     <link rel="prev" title="Ganeti Instance Import/Export using Open Virtualization Format" href="design-ovf-support.html" /> 
   </head>
@@ -39,7 +39,7 @@
         <li class="right" >
           <a href="design-ovf-support.html" title="Ganeti Instance Import/Export using Open Virtualization Format"
              accesskey="P">previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>  
 
@@ -396,7 +396,7 @@
         <li class="right" >
           <a href="design-ovf-support.html" title="Ganeti Instance Import/Export using Open Virtualization Format"
              >previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>
     <div class="footer">
diff -Nru ganeti-2.12.0/doc/html/design-performance-tests.html ganeti-2.12.3/doc/html/design-performance-tests.html
--- ganeti-2.12.0/doc/html/design-performance-tests.html	2014-10-10 11:56:55.000000000 +0300
+++ ganeti-2.12.3/doc/html/design-performance-tests.html	2015-04-29 11:14:19.000000000 +0300
@@ -8,7 +8,7 @@
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     
-    <title>Performance tests for QA — Ganeti 2.12.0 documentation</title>
+    <title>Performance tests for QA — Ganeti 2.12.3 documentation</title>
     
     <link rel="stylesheet" href="_static/style.css" type="text/css" />
     <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
@@ -16,7 +16,7 @@
     <script type="text/javascript">
       var DOCUMENTATION_OPTIONS = {
         URL_ROOT:    '',
-        VERSION:     '2.12.0',
+        VERSION:     '2.12.3',
         COLLAPSE_INDEX: false,
         FILE_SUFFIX: '.html',
         HAS_SOURCE:  true
@@ -25,7 +25,7 @@
     <script type="text/javascript" src="_static/jquery.js"></script>
     <script type="text/javascript" src="_static/underscore.js"></script>
     <script type="text/javascript" src="_static/doctools.js"></script>
-    <link rel="top" title="Ganeti 2.12.0 documentation" href="index.html" />
+    <link rel="top" title="Ganeti 2.12.3 documentation" href="index.html" />
     <link rel="next" title="Query version 2 design" href="design-query2.html" />
     <link rel="prev" title="Partitioned Ganeti" href="design-partitioned.html" /> 
   </head>
@@ -39,7 +39,7 @@
         <li class="right" >
           <a href="design-partitioned.html" title="Partitioned Ganeti"
              accesskey="P">previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>  
 
@@ -231,7 +231,7 @@
         <li class="right" >
           <a href="design-partitioned.html" title="Partitioned Ganeti"
              >previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>
     <div class="footer">
diff -Nru ganeti-2.12.0/doc/html/design-query2.html ganeti-2.12.3/doc/html/design-query2.html
--- ganeti-2.12.0/doc/html/design-query2.html	2014-10-10 11:56:55.000000000 +0300
+++ ganeti-2.12.3/doc/html/design-query2.html	2015-04-29 11:14:19.000000000 +0300
@@ -8,7 +8,7 @@
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     
-    <title>Query version 2 design — Ganeti 2.12.0 documentation</title>
+    <title>Query version 2 design — Ganeti 2.12.3 documentation</title>
     
     <link rel="stylesheet" href="_static/style.css" type="text/css" />
     <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
@@ -16,7 +16,7 @@
     <script type="text/javascript">
       var DOCUMENTATION_OPTIONS = {
         URL_ROOT:    '',
-        VERSION:     '2.12.0',
+        VERSION:     '2.12.3',
         COLLAPSE_INDEX: false,
         FILE_SUFFIX: '.html',
         HAS_SOURCE:  true
@@ -25,7 +25,7 @@
     <script type="text/javascript" src="_static/jquery.js"></script>
     <script type="text/javascript" src="_static/underscore.js"></script>
     <script type="text/javascript" src="_static/doctools.js"></script>
-    <link rel="top" title="Ganeti 2.12.0 documentation" href="index.html" />
+    <link rel="top" title="Ganeti 2.12.3 documentation" href="index.html" />
     <link rel="next" title="Splitting the query and job execution paths" href="design-query-splitting.html" />
     <link rel="prev" title="Performance tests for QA" href="design-performance-tests.html" /> 
   </head>
@@ -39,7 +39,7 @@
         <li class="right" >
           <a href="design-performance-tests.html" title="Performance tests for QA"
              accesskey="P">previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>  
 
@@ -500,7 +500,7 @@
         <li class="right" >
           <a href="design-performance-tests.html" title="Performance tests for QA"
              >previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>
     <div class="footer">
diff -Nru ganeti-2.12.0/doc/html/design-query-splitting.html ganeti-2.12.3/doc/html/design-query-splitting.html
--- ganeti-2.12.0/doc/html/design-query-splitting.html	2014-10-10 11:56:55.000000000 +0300
+++ ganeti-2.12.3/doc/html/design-query-splitting.html	2015-04-29 11:14:19.000000000 +0300
@@ -8,7 +8,7 @@
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     
-    <title>Splitting the query and job execution paths — Ganeti 2.12.0 documentation</title>
+    <title>Splitting the query and job execution paths — Ganeti 2.12.3 documentation</title>
     
     <link rel="stylesheet" href="_static/style.css" type="text/css" />
     <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
@@ -16,7 +16,7 @@
     <script type="text/javascript">
       var DOCUMENTATION_OPTIONS = {
         URL_ROOT:    '',
-        VERSION:     '2.12.0',
+        VERSION:     '2.12.3',
         COLLAPSE_INDEX: false,
         FILE_SUFFIX: '.html',
         HAS_SOURCE:  true
@@ -25,7 +25,7 @@
     <script type="text/javascript" src="_static/jquery.js"></script>
     <script type="text/javascript" src="_static/underscore.js"></script>
     <script type="text/javascript" src="_static/doctools.js"></script>
-    <link rel="top" title="Ganeti 2.12.0 documentation" href="index.html" />
+    <link rel="top" title="Ganeti 2.12.3 documentation" href="index.html" />
     <link rel="next" title="Ganeti reason trail" href="design-reason-trail.html" />
     <link rel="prev" title="Query version 2 design" href="design-query2.html" /> 
   </head>
@@ -39,7 +39,7 @@
         <li class="right" >
           <a href="design-query2.html" title="Query version 2 design"
              accesskey="P">previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>  
 
@@ -242,7 +242,7 @@
         <li class="right" >
           <a href="design-query2.html" title="Query version 2 design"
              >previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>
     <div class="footer">
diff -Nru ganeti-2.12.0/doc/html/design-reason-trail.html ganeti-2.12.3/doc/html/design-reason-trail.html
--- ganeti-2.12.0/doc/html/design-reason-trail.html	2014-10-10 11:56:55.000000000 +0300
+++ ganeti-2.12.3/doc/html/design-reason-trail.html	2015-04-29 11:14:19.000000000 +0300
@@ -8,7 +8,7 @@
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     
-    <title>Ganeti reason trail — Ganeti 2.12.0 documentation</title>
+    <title>Ganeti reason trail — Ganeti 2.12.3 documentation</title>
     
     <link rel="stylesheet" href="_static/style.css" type="text/css" />
     <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
@@ -16,7 +16,7 @@
     <script type="text/javascript">
       var DOCUMENTATION_OPTIONS = {
         URL_ROOT:    '',
-        VERSION:     '2.12.0',
+        VERSION:     '2.12.3',
         COLLAPSE_INDEX: false,
         FILE_SUFFIX: '.html',
         HAS_SOURCE:  true
@@ -25,7 +25,7 @@
     <script type="text/javascript" src="_static/jquery.js"></script>
     <script type="text/javascript" src="_static/underscore.js"></script>
     <script type="text/javascript" src="_static/doctools.js"></script>
-    <link rel="top" title="Ganeti 2.12.0 documentation" href="index.html" />
+    <link rel="top" title="Ganeti 2.12.3 documentation" href="index.html" />
     <link rel="next" title="Design for executing commands via RPC" href="design-restricted-commands.html" />
     <link rel="prev" title="Splitting the query and job execution paths" href="design-query-splitting.html" /> 
   </head>
@@ -39,7 +39,7 @@
         <li class="right" >
           <a href="design-query-splitting.html" title="Splitting the query and job execution paths"
              accesskey="P">previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>  
 
@@ -199,7 +199,7 @@
         <li class="right" >
           <a href="design-query-splitting.html" title="Splitting the query and job execution paths"
              >previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>
     <div class="footer">
diff -Nru ganeti-2.12.0/doc/html/design-resource-model.html ganeti-2.12.3/doc/html/design-resource-model.html
--- ganeti-2.12.0/doc/html/design-resource-model.html	2014-10-10 11:56:55.000000000 +0300
+++ ganeti-2.12.3/doc/html/design-resource-model.html	2015-04-29 11:14:19.000000000 +0300
@@ -8,7 +8,7 @@
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     
-    <title>Resource model changes — Ganeti 2.12.0 documentation</title>
+    <title>Resource model changes — Ganeti 2.12.3 documentation</title>
     
     <link rel="stylesheet" href="_static/style.css" type="text/css" />
     <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
@@ -16,7 +16,7 @@
     <script type="text/javascript">
       var DOCUMENTATION_OPTIONS = {
         URL_ROOT:    '',
-        VERSION:     '2.12.0',
+        VERSION:     '2.12.3',
         COLLAPSE_INDEX: false,
         FILE_SUFFIX: '.html',
         HAS_SOURCE:  true
@@ -25,7 +25,7 @@
     <script type="text/javascript" src="_static/jquery.js"></script>
     <script type="text/javascript" src="_static/underscore.js"></script>
     <script type="text/javascript" src="_static/doctools.js"></script>
-    <link rel="top" title="Ganeti 2.12.0 documentation" href="index.html" />
+    <link rel="top" title="Ganeti 2.12.3 documentation" href="index.html" />
     <link rel="up" title="Design document drafts" href="design-draft.html" />
     <link rel="next" title="Management of storage types and disk templates, incl. storage space reporting" href="design-storagetypes.html" />
     <link rel="prev" title="Design for import/export version 2" href="design-impexp2.html" /> 
@@ -40,7 +40,7 @@
         <li class="right" >
           <a href="design-impexp2.html" title="Design for import/export version 2"
              accesskey="P">previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li>
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li>
           <li><a href="design-draft.html" accesskey="U">Design document drafts</a> »</li> 
       </ul>
     </div>  
@@ -1252,7 +1252,7 @@
         <li class="right" >
           <a href="design-impexp2.html" title="Design for import/export version 2"
              >previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li>
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li>
           <li><a href="design-draft.html" >Design document drafts</a> »</li> 
       </ul>
     </div>
diff -Nru ganeti-2.12.0/doc/html/design-restricted-commands.html ganeti-2.12.3/doc/html/design-restricted-commands.html
--- ganeti-2.12.0/doc/html/design-restricted-commands.html	2014-10-10 11:56:55.000000000 +0300
+++ ganeti-2.12.3/doc/html/design-restricted-commands.html	2015-04-29 11:14:19.000000000 +0300
@@ -8,7 +8,7 @@
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     
-    <title>Design for executing commands via RPC — Ganeti 2.12.0 documentation</title>
+    <title>Design for executing commands via RPC — Ganeti 2.12.3 documentation</title>
     
     <link rel="stylesheet" href="_static/style.css" type="text/css" />
     <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
@@ -16,7 +16,7 @@
     <script type="text/javascript">
       var DOCUMENTATION_OPTIONS = {
         URL_ROOT:    '',
-        VERSION:     '2.12.0',
+        VERSION:     '2.12.3',
         COLLAPSE_INDEX: false,
         FILE_SUFFIX: '.html',
         HAS_SOURCE:  true
@@ -25,7 +25,7 @@
     <script type="text/javascript" src="_static/jquery.js"></script>
     <script type="text/javascript" src="_static/underscore.js"></script>
     <script type="text/javascript" src="_static/doctools.js"></script>
-    <link rel="top" title="Ganeti 2.12.0 documentation" href="index.html" />
+    <link rel="top" title="Ganeti 2.12.3 documentation" href="index.html" />
     <link rel="next" title="Ganeti shared storage support" href="design-shared-storage.html" />
     <link rel="prev" title="Ganeti reason trail" href="design-reason-trail.html" /> 
   </head>
@@ -39,7 +39,7 @@
         <li class="right" >
           <a href="design-reason-trail.html" title="Ganeti reason trail"
              accesskey="P">previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>  
 
@@ -156,7 +156,7 @@
         <li class="right" >
           <a href="design-reason-trail.html" title="Ganeti reason trail"
              >previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>
     <div class="footer">
diff -Nru ganeti-2.12.0/doc/html/design-shared-storage.html ganeti-2.12.3/doc/html/design-shared-storage.html
--- ganeti-2.12.0/doc/html/design-shared-storage.html	2014-10-10 11:56:55.000000000 +0300
+++ ganeti-2.12.3/doc/html/design-shared-storage.html	2015-04-29 11:14:19.000000000 +0300
@@ -8,7 +8,7 @@
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     
-    <title>Ganeti shared storage support — Ganeti 2.12.0 documentation</title>
+    <title>Ganeti shared storage support — Ganeti 2.12.3 documentation</title>
     
     <link rel="stylesheet" href="_static/style.css" type="text/css" />
     <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
@@ -16,7 +16,7 @@
     <script type="text/javascript">
       var DOCUMENTATION_OPTIONS = {
         URL_ROOT:    '',
-        VERSION:     '2.12.0',
+        VERSION:     '2.12.3',
         COLLAPSE_INDEX: false,
         FILE_SUFFIX: '.html',
         HAS_SOURCE:  true
@@ -25,7 +25,7 @@
     <script type="text/javascript" src="_static/jquery.js"></script>
     <script type="text/javascript" src="_static/underscore.js"></script>
     <script type="text/javascript" src="_static/doctools.js"></script>
-    <link rel="top" title="Ganeti 2.12.0 documentation" href="index.html" />
+    <link rel="top" title="Ganeti 2.12.3 documentation" href="index.html" />
     <link rel="next" title="Design for supporting custom SSH ports for nodes" href="design-ssh-ports.html" />
     <link rel="prev" title="Design for executing commands via RPC" href="design-restricted-commands.html" /> 
   </head>
@@ -39,7 +39,7 @@
         <li class="right" >
           <a href="design-restricted-commands.html" title="Design for executing commands via RPC"
              accesskey="P">previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>  
 
@@ -436,7 +436,7 @@
         <li class="right" >
           <a href="design-restricted-commands.html" title="Design for executing commands via RPC"
              >previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>
     <div class="footer">
diff -Nru ganeti-2.12.0/doc/html/design-ssh-ports.html ganeti-2.12.3/doc/html/design-ssh-ports.html
--- ganeti-2.12.0/doc/html/design-ssh-ports.html	2014-10-10 11:56:55.000000000 +0300
+++ ganeti-2.12.3/doc/html/design-ssh-ports.html	2015-04-29 11:14:19.000000000 +0300
@@ -8,7 +8,7 @@
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     
-    <title>Design for supporting custom SSH ports for nodes — Ganeti 2.12.0 documentation</title>
+    <title>Design for supporting custom SSH ports for nodes — Ganeti 2.12.3 documentation</title>
     
     <link rel="stylesheet" href="_static/style.css" type="text/css" />
     <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
@@ -16,7 +16,7 @@
     <script type="text/javascript">
       var DOCUMENTATION_OPTIONS = {
         URL_ROOT:    '',
-        VERSION:     '2.12.0',
+        VERSION:     '2.12.3',
         COLLAPSE_INDEX: false,
         FILE_SUFFIX: '.html',
         HAS_SOURCE:  true
@@ -25,7 +25,7 @@
     <script type="text/javascript" src="_static/jquery.js"></script>
     <script type="text/javascript" src="_static/underscore.js"></script>
     <script type="text/javascript" src="_static/doctools.js"></script>
-    <link rel="top" title="Ganeti 2.12.0 documentation" href="index.html" />
+    <link rel="top" title="Ganeti 2.12.3 documentation" href="index.html" />
     <link rel="next" title="Management of storage types and disk templates, incl. storage space reporting" href="design-storagetypes.html" />
     <link rel="prev" title="Ganeti shared storage support" href="design-shared-storage.html" /> 
   </head>
@@ -39,7 +39,7 @@
         <li class="right" >
           <a href="design-shared-storage.html" title="Ganeti shared storage support"
              accesskey="P">previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>  
 
@@ -182,7 +182,7 @@
         <li class="right" >
           <a href="design-shared-storage.html" title="Ganeti shared storage support"
              >previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>
     <div class="footer">
diff -Nru ganeti-2.12.0/doc/html/design-storagetypes.html ganeti-2.12.3/doc/html/design-storagetypes.html
--- ganeti-2.12.0/doc/html/design-storagetypes.html	2014-10-10 11:56:55.000000000 +0300
+++ ganeti-2.12.3/doc/html/design-storagetypes.html	2015-04-29 11:14:20.000000000 +0300
@@ -8,7 +8,7 @@
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     
-    <title>Management of storage types and disk templates, incl. storage space reporting — Ganeti 2.12.0 documentation</title>
+    <title>Management of storage types and disk templates, incl. storage space reporting — Ganeti 2.12.3 documentation</title>
     
     <link rel="stylesheet" href="_static/style.css" type="text/css" />
     <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
@@ -16,7 +16,7 @@
     <script type="text/javascript">
       var DOCUMENTATION_OPTIONS = {
         URL_ROOT:    '',
-        VERSION:     '2.12.0',
+        VERSION:     '2.12.3',
         COLLAPSE_INDEX: false,
         FILE_SUFFIX: '.html',
         HAS_SOURCE:  true
@@ -25,7 +25,7 @@
     <script type="text/javascript" src="_static/jquery.js"></script>
     <script type="text/javascript" src="_static/underscore.js"></script>
     <script type="text/javascript" src="_static/doctools.js"></script>
-    <link rel="top" title="Ganeti 2.12.0 documentation" href="index.html" />
+    <link rel="top" title="Ganeti 2.12.3 documentation" href="index.html" />
     <link rel="next" title="Systemd integration" href="design-systemd.html" />
     <link rel="prev" title="Design for supporting custom SSH ports for nodes" href="design-ssh-ports.html" /> 
   </head>
@@ -39,7 +39,7 @@
         <li class="right" >
           <a href="design-ssh-ports.html" title="Design for supporting custom SSH ports for nodes"
              accesskey="P">previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>  
 
@@ -74,7 +74,7 @@
 <h2><a class="toc-backref" href="#id2">Background</a><a class="headerlink" href="#background" title="Permalink to this headline">¶</a></h2>
 <p>Currently, there is no consistent management of different variants of storage
 in Ganeti. One direct consequence is that storage space reporting is currently
-broken for all storage that is not based on lvm technolgy. This design looks at
+broken for all storage that is not based on lvm technology. This design looks at
 the root causes and proposes a way to fix it.</p>
 </div>
 <div class="section" id="proposed-changes">
@@ -266,7 +266,7 @@
 extended storage reporting capabilities. The user can specify a storage
 type using <tt class="docutils literal"><span class="pre">--storage-type</span></tt>. If he requests storage information about
 a storage type which does not support space reporting, a warning is
-emitted. If no storage type is specified explicitely, <tt class="docutils literal"><span class="pre">gnt-node</span>
+emitted. If no storage type is specified explicitly, <tt class="docutils literal"><span class="pre">gnt-node</span>
 <span class="pre">list-storage</span></tt> will try to report storage on the storage type of the
 default disk template. If the default disk template’s storage type does
 not support space reporting, an error message is emitted.</p>
@@ -395,7 +395,7 @@
         <li class="right" >
           <a href="design-ssh-ports.html" title="Design for supporting custom SSH ports for nodes"
              >previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>
     <div class="footer">
diff -Nru ganeti-2.12.0/doc/html/design-systemd.html ganeti-2.12.3/doc/html/design-systemd.html
--- ganeti-2.12.0/doc/html/design-systemd.html	2014-10-10 11:56:55.000000000 +0300
+++ ganeti-2.12.3/doc/html/design-systemd.html	2015-04-29 11:14:20.000000000 +0300
@@ -8,7 +8,7 @@
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     
-    <title>Systemd integration — Ganeti 2.12.0 documentation</title>
+    <title>Systemd integration — Ganeti 2.12.3 documentation</title>
     
     <link rel="stylesheet" href="_static/style.css" type="text/css" />
     <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
@@ -16,7 +16,7 @@
     <script type="text/javascript">
       var DOCUMENTATION_OPTIONS = {
         URL_ROOT:    '',
-        VERSION:     '2.12.0',
+        VERSION:     '2.12.3',
         COLLAPSE_INDEX: false,
         FILE_SUFFIX: '.html',
         HAS_SOURCE:  true
@@ -25,7 +25,7 @@
     <script type="text/javascript" src="_static/jquery.js"></script>
     <script type="text/javascript" src="_static/underscore.js"></script>
     <script type="text/javascript" src="_static/doctools.js"></script>
-    <link rel="top" title="Ganeti 2.12.0 documentation" href="index.html" />
+    <link rel="top" title="Ganeti 2.12.3 documentation" href="index.html" />
     <link rel="next" title="Automatized Upgrade Procedure for Ganeti" href="design-upgrade.html" />
     <link rel="prev" title="Management of storage types and disk templates, incl. storage space reporting" href="design-storagetypes.html" /> 
   </head>
@@ -39,7 +39,7 @@
         <li class="right" >
           <a href="design-storagetypes.html" title="Management of storage types and disk templates, incl. storage space reporting"
              accesskey="P">previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>  
 
@@ -332,7 +332,7 @@
         <li class="right" >
           <a href="design-storagetypes.html" title="Management of storage types and disk templates, incl. storage space reporting"
              >previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>
     <div class="footer">
diff -Nru ganeti-2.12.0/doc/html/design-upgrade.html ganeti-2.12.3/doc/html/design-upgrade.html
--- ganeti-2.12.0/doc/html/design-upgrade.html	2014-10-10 11:56:55.000000000 +0300
+++ ganeti-2.12.3/doc/html/design-upgrade.html	2015-04-29 11:14:20.000000000 +0300
@@ -8,7 +8,7 @@
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     
-    <title>Automatized Upgrade Procedure for Ganeti — Ganeti 2.12.0 documentation</title>
+    <title>Automatized Upgrade Procedure for Ganeti — Ganeti 2.12.3 documentation</title>
     
     <link rel="stylesheet" href="_static/style.css" type="text/css" />
     <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
@@ -16,7 +16,7 @@
     <script type="text/javascript">
       var DOCUMENTATION_OPTIONS = {
         URL_ROOT:    '',
-        VERSION:     '2.12.0',
+        VERSION:     '2.12.3',
         COLLAPSE_INDEX: false,
         FILE_SUFFIX: '.html',
         HAS_SOURCE:  true
@@ -25,7 +25,7 @@
     <script type="text/javascript" src="_static/jquery.js"></script>
     <script type="text/javascript" src="_static/underscore.js"></script>
     <script type="text/javascript" src="_static/doctools.js"></script>
-    <link rel="top" title="Ganeti 2.12.0 documentation" href="index.html" />
+    <link rel="top" title="Ganeti 2.12.3 documentation" href="index.html" />
     <link rel="next" title="Design for virtual clusters support" href="design-virtual-clusters.html" />
     <link rel="prev" title="Systemd integration" href="design-systemd.html" /> 
   </head>
@@ -39,7 +39,7 @@
         <li class="right" >
           <a href="design-systemd.html" title="Systemd integration"
              accesskey="P">previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>  
 
@@ -385,7 +385,7 @@
         <li class="right" >
           <a href="design-systemd.html" title="Systemd integration"
              >previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>
     <div class="footer">
diff -Nru ganeti-2.12.0/doc/html/design-virtual-clusters.html ganeti-2.12.3/doc/html/design-virtual-clusters.html
--- ganeti-2.12.0/doc/html/design-virtual-clusters.html	2014-10-10 11:56:56.000000000 +0300
+++ ganeti-2.12.3/doc/html/design-virtual-clusters.html	2015-04-29 11:14:20.000000000 +0300
@@ -8,7 +8,7 @@
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     
-    <title>Design for virtual clusters support — Ganeti 2.12.0 documentation</title>
+    <title>Design for virtual clusters support — Ganeti 2.12.3 documentation</title>
     
     <link rel="stylesheet" href="_static/style.css" type="text/css" />
     <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
@@ -16,7 +16,7 @@
     <script type="text/javascript">
       var DOCUMENTATION_OPTIONS = {
         URL_ROOT:    '',
-        VERSION:     '2.12.0',
+        VERSION:     '2.12.3',
         COLLAPSE_INDEX: false,
         FILE_SUFFIX: '.html',
         HAS_SOURCE:  true
@@ -25,7 +25,7 @@
     <script type="text/javascript" src="_static/jquery.js"></script>
     <script type="text/javascript" src="_static/underscore.js"></script>
     <script type="text/javascript" src="_static/doctools.js"></script>
-    <link rel="top" title="Ganeti 2.12.0 documentation" href="index.html" />
+    <link rel="top" title="Ganeti 2.12.3 documentation" href="index.html" />
     <link rel="next" title="Developer notes" href="devnotes.html" />
     <link rel="prev" title="Automatized Upgrade Procedure for Ganeti" href="design-upgrade.html" /> 
   </head>
@@ -39,7 +39,7 @@
         <li class="right" >
           <a href="design-upgrade.html" title="Automatized Upgrade Procedure for Ganeti"
              accesskey="P">previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>  
 
@@ -416,7 +416,7 @@
         <li class="right" >
           <a href="design-upgrade.html" title="Automatized Upgrade Procedure for Ganeti"
              >previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>
     <div class="footer">
diff -Nru ganeti-2.12.0/doc/html/design-x509-ca.html ganeti-2.12.3/doc/html/design-x509-ca.html
--- ganeti-2.12.0/doc/html/design-x509-ca.html	2014-10-10 11:56:56.000000000 +0300
+++ ganeti-2.12.3/doc/html/design-x509-ca.html	2015-04-29 11:14:20.000000000 +0300
@@ -8,7 +8,7 @@
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     
-    <title>Design for a X509 Certificate Authority — Ganeti 2.12.0 documentation</title>
+    <title>Design for a X509 Certificate Authority — Ganeti 2.12.3 documentation</title>
     
     <link rel="stylesheet" href="_static/style.css" type="text/css" />
     <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
@@ -16,7 +16,7 @@
     <script type="text/javascript">
       var DOCUMENTATION_OPTIONS = {
         URL_ROOT:    '',
-        VERSION:     '2.12.0',
+        VERSION:     '2.12.3',
         COLLAPSE_INDEX: false,
         FILE_SUFFIX: '.html',
         HAS_SOURCE:  true
@@ -25,7 +25,7 @@
     <script type="text/javascript" src="_static/jquery.js"></script>
     <script type="text/javascript" src="_static/underscore.js"></script>
     <script type="text/javascript" src="_static/doctools.js"></script>
-    <link rel="top" title="Ganeti 2.12.0 documentation" href="index.html" />
+    <link rel="top" title="Ganeti 2.12.3 documentation" href="index.html" />
     <link rel="up" title="Design document drafts" href="design-draft.html" />
     <link rel="next" title="Design for replacing Ganeti’s HTTP server" href="design-http-server.html" />
     <link rel="prev" title="Design document drafts" href="design-draft.html" /> 
@@ -40,7 +40,7 @@
         <li class="right" >
           <a href="design-draft.html" title="Design document drafts"
              accesskey="P">previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li>
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li>
           <li><a href="design-draft.html" accesskey="U">Design document drafts</a> »</li> 
       </ul>
     </div>  
@@ -296,7 +296,7 @@
         <li class="right" >
           <a href="design-draft.html" title="Design document drafts"
              >previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li>
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li>
           <li><a href="design-draft.html" >Design document drafts</a> »</li> 
       </ul>
     </div>
diff -Nru ganeti-2.12.0/doc/html/dev-codestyle.html ganeti-2.12.3/doc/html/dev-codestyle.html
--- ganeti-2.12.0/doc/html/dev-codestyle.html	2014-10-10 11:56:56.000000000 +0300
+++ ganeti-2.12.3/doc/html/dev-codestyle.html	2015-04-29 11:14:20.000000000 +0300
@@ -8,7 +8,7 @@
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     
-    <title>Code style guide — Ganeti 2.12.0 documentation</title>
+    <title>Code style guide — Ganeti 2.12.3 documentation</title>
     
     <link rel="stylesheet" href="_static/style.css" type="text/css" />
     <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
@@ -16,7 +16,7 @@
     <script type="text/javascript">
       var DOCUMENTATION_OPTIONS = {
         URL_ROOT:    '',
-        VERSION:     '2.12.0',
+        VERSION:     '2.12.3',
         COLLAPSE_INDEX: false,
         FILE_SUFFIX: '.html',
         HAS_SOURCE:  true
@@ -25,7 +25,7 @@
     <script type="text/javascript" src="_static/jquery.js"></script>
     <script type="text/javascript" src="_static/underscore.js"></script>
     <script type="text/javascript" src="_static/doctools.js"></script>
-    <link rel="top" title="Ganeti 2.12.0 documentation" href="index.html" />
+    <link rel="top" title="Ganeti 2.12.3 documentation" href="index.html" />
     <link rel="next" title="Glossary" href="glossary.html" />
     <link rel="prev" title="Developer notes" href="devnotes.html" /> 
   </head>
@@ -39,7 +39,7 @@
         <li class="right" >
           <a href="devnotes.html" title="Developer notes"
              accesskey="P">previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>  
 
@@ -702,7 +702,7 @@
         <li class="right" >
           <a href="devnotes.html" title="Developer notes"
              >previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>
     <div class="footer">
diff -Nru ganeti-2.12.0/doc/html/devnotes.html ganeti-2.12.3/doc/html/devnotes.html
--- ganeti-2.12.0/doc/html/devnotes.html	2014-10-10 11:56:56.000000000 +0300
+++ ganeti-2.12.3/doc/html/devnotes.html	2015-04-29 11:14:20.000000000 +0300
@@ -8,7 +8,7 @@
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     
-    <title>Developer notes — Ganeti 2.12.0 documentation</title>
+    <title>Developer notes — Ganeti 2.12.3 documentation</title>
     
     <link rel="stylesheet" href="_static/style.css" type="text/css" />
     <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
@@ -16,7 +16,7 @@
     <script type="text/javascript">
       var DOCUMENTATION_OPTIONS = {
         URL_ROOT:    '',
-        VERSION:     '2.12.0',
+        VERSION:     '2.12.3',
         COLLAPSE_INDEX: false,
         FILE_SUFFIX: '.html',
         HAS_SOURCE:  true
@@ -25,7 +25,7 @@
     <script type="text/javascript" src="_static/jquery.js"></script>
     <script type="text/javascript" src="_static/underscore.js"></script>
     <script type="text/javascript" src="_static/doctools.js"></script>
-    <link rel="top" title="Ganeti 2.12.0 documentation" href="index.html" />
+    <link rel="top" title="Ganeti 2.12.3 documentation" href="index.html" />
     <link rel="next" title="Code style guide" href="dev-codestyle.html" />
     <link rel="prev" title="Design for virtual clusters support" href="design-virtual-clusters.html" /> 
   </head>
@@ -39,7 +39,7 @@
         <li class="right" >
           <a href="design-virtual-clusters.html" title="Design for virtual clusters support"
              accesskey="P">previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>  
 
@@ -338,7 +338,7 @@
         <li class="right" >
           <a href="design-virtual-clusters.html" title="Design for virtual clusters support"
              >previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>
     <div class="footer">
diff -Nru ganeti-2.12.0/doc/html/glossary.html ganeti-2.12.3/doc/html/glossary.html
--- ganeti-2.12.0/doc/html/glossary.html	2014-10-10 11:56:56.000000000 +0300
+++ ganeti-2.12.3/doc/html/glossary.html	2015-04-29 11:14:20.000000000 +0300
@@ -8,7 +8,7 @@
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     
-    <title>Glossary — Ganeti 2.12.0 documentation</title>
+    <title>Glossary — Ganeti 2.12.3 documentation</title>
     
     <link rel="stylesheet" href="_static/style.css" type="text/css" />
     <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
@@ -16,7 +16,7 @@
     <script type="text/javascript">
       var DOCUMENTATION_OPTIONS = {
         URL_ROOT:    '',
-        VERSION:     '2.12.0',
+        VERSION:     '2.12.3',
         COLLAPSE_INDEX: false,
         FILE_SUFFIX: '.html',
         HAS_SOURCE:  true
@@ -25,7 +25,7 @@
     <script type="text/javascript" src="_static/jquery.js"></script>
     <script type="text/javascript" src="_static/underscore.js"></script>
     <script type="text/javascript" src="_static/doctools.js"></script>
-    <link rel="top" title="Ganeti 2.12.0 documentation" href="index.html" />
+    <link rel="top" title="Ganeti 2.12.3 documentation" href="index.html" />
     <link rel="next" title="Ganeti customisation using hooks" href="hooks.html" />
     <link rel="prev" title="Code style guide" href="dev-codestyle.html" /> 
   </head>
@@ -39,7 +39,7 @@
         <li class="right" >
           <a href="dev-codestyle.html" title="Code style guide"
              accesskey="P">previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>  
 
@@ -153,7 +153,7 @@
         <li class="right" >
           <a href="dev-codestyle.html" title="Code style guide"
              >previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>
     <div class="footer">
diff -Nru ganeti-2.12.0/doc/html/hooks.html ganeti-2.12.3/doc/html/hooks.html
--- ganeti-2.12.0/doc/html/hooks.html	2014-10-10 11:56:56.000000000 +0300
+++ ganeti-2.12.3/doc/html/hooks.html	2015-04-29 11:14:20.000000000 +0300
@@ -8,7 +8,7 @@
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     
-    <title>Ganeti customisation using hooks — Ganeti 2.12.0 documentation</title>
+    <title>Ganeti customisation using hooks — Ganeti 2.12.3 documentation</title>
     
     <link rel="stylesheet" href="_static/style.css" type="text/css" />
     <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
@@ -16,7 +16,7 @@
     <script type="text/javascript">
       var DOCUMENTATION_OPTIONS = {
         URL_ROOT:    '',
-        VERSION:     '2.12.0',
+        VERSION:     '2.12.3',
         COLLAPSE_INDEX: false,
         FILE_SUFFIX: '.html',
         HAS_SOURCE:  true
@@ -25,7 +25,7 @@
     <script type="text/javascript" src="_static/jquery.js"></script>
     <script type="text/javascript" src="_static/underscore.js"></script>
     <script type="text/javascript" src="_static/doctools.js"></script>
-    <link rel="top" title="Ganeti 2.12.0 documentation" href="index.html" />
+    <link rel="top" title="Ganeti 2.12.3 documentation" href="index.html" />
     <link rel="next" title="Ganeti automatic instance allocation" href="iallocator.html" />
     <link rel="prev" title="Glossary" href="glossary.html" /> 
   </head>
@@ -39,7 +39,7 @@
         <li class="right" >
           <a href="glossary.html" title="Glossary"
              accesskey="P">previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>  
 
@@ -1260,7 +1260,7 @@
         <li class="right" >
           <a href="glossary.html" title="Glossary"
              >previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>
     <div class="footer">
diff -Nru ganeti-2.12.0/doc/html/iallocator.html ganeti-2.12.3/doc/html/iallocator.html
--- ganeti-2.12.0/doc/html/iallocator.html	2014-10-10 11:56:56.000000000 +0300
+++ ganeti-2.12.3/doc/html/iallocator.html	2015-04-29 11:14:21.000000000 +0300
@@ -8,7 +8,7 @@
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     
-    <title>Ganeti automatic instance allocation — Ganeti 2.12.0 documentation</title>
+    <title>Ganeti automatic instance allocation — Ganeti 2.12.3 documentation</title>
     
     <link rel="stylesheet" href="_static/style.css" type="text/css" />
     <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
@@ -16,7 +16,7 @@
     <script type="text/javascript">
       var DOCUMENTATION_OPTIONS = {
         URL_ROOT:    '',
-        VERSION:     '2.12.0',
+        VERSION:     '2.12.3',
         COLLAPSE_INDEX: false,
         FILE_SUFFIX: '.html',
         HAS_SOURCE:  true
@@ -25,7 +25,7 @@
     <script type="text/javascript" src="_static/jquery.js"></script>
     <script type="text/javascript" src="_static/underscore.js"></script>
     <script type="text/javascript" src="_static/doctools.js"></script>
-    <link rel="top" title="Ganeti 2.12.0 documentation" href="index.html" />
+    <link rel="top" title="Ganeti 2.12.3 documentation" href="index.html" />
     <link rel="next" title="Ganeti installation tutorial" href="install.html" />
     <link rel="prev" title="Ganeti customisation using hooks" href="hooks.html" /> 
   </head>
@@ -39,7 +39,7 @@
         <li class="right" >
           <a href="hooks.html" title="Ganeti customisation using hooks"
              accesskey="P">previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>  
 
@@ -750,7 +750,7 @@
         <li class="right" >
           <a href="hooks.html" title="Ganeti customisation using hooks"
              >previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>
     <div class="footer">
diff -Nru ganeti-2.12.0/doc/html/index.html ganeti-2.12.3/doc/html/index.html
--- ganeti-2.12.0/doc/html/index.html	2014-10-10 11:57:00.000000000 +0300
+++ ganeti-2.12.3/doc/html/index.html	2015-04-29 11:14:24.000000000 +0300
@@ -8,7 +8,7 @@
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     
-    <title>Welcome to Ganeti’s documentation! — Ganeti 2.12.0 documentation</title>
+    <title>Welcome to Ganeti’s documentation! — Ganeti 2.12.3 documentation</title>
     
     <link rel="stylesheet" href="_static/style.css" type="text/css" />
     <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
@@ -16,7 +16,7 @@
     <script type="text/javascript">
       var DOCUMENTATION_OPTIONS = {
         URL_ROOT:    '',
-        VERSION:     '2.12.0',
+        VERSION:     '2.12.3',
         COLLAPSE_INDEX: false,
         FILE_SUFFIX: '.html',
         HAS_SOURCE:  true
@@ -25,7 +25,7 @@
     <script type="text/javascript" src="_static/jquery.js"></script>
     <script type="text/javascript" src="_static/underscore.js"></script>
     <script type="text/javascript" src="_static/doctools.js"></script>
-    <link rel="top" title="Ganeti 2.12.0 documentation" href="#" />
+    <link rel="top" title="Ganeti 2.12.3 documentation" href="#" />
     <link rel="next" title="Ganeti 2.0 design" href="design-2.0.html" /> 
   </head>
   <body>
@@ -35,7 +35,7 @@
         <li class="right" style="margin-right: 10px">
           <a href="design-2.0.html" title="Ganeti 2.0 design"
              accesskey="N">next</a></li>
-        <li><a href="#">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="#">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>  
 
@@ -200,7 +200,7 @@
         <li class="right" style="margin-right: 10px">
           <a href="design-2.0.html" title="Ganeti 2.0 design"
              >next</a></li>
-        <li><a href="#">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="#">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>
     <div class="footer">
diff -Nru ganeti-2.12.0/doc/html/install.html ganeti-2.12.3/doc/html/install.html
--- ganeti-2.12.0/doc/html/install.html	2014-10-10 11:56:57.000000000 +0300
+++ ganeti-2.12.3/doc/html/install.html	2015-04-29 11:14:21.000000000 +0300
@@ -8,7 +8,7 @@
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     
-    <title>Ganeti installation tutorial — Ganeti 2.12.0 documentation</title>
+    <title>Ganeti installation tutorial — Ganeti 2.12.3 documentation</title>
     
     <link rel="stylesheet" href="_static/style.css" type="text/css" />
     <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
@@ -16,7 +16,7 @@
     <script type="text/javascript">
       var DOCUMENTATION_OPTIONS = {
         URL_ROOT:    '',
-        VERSION:     '2.12.0',
+        VERSION:     '2.12.3',
         COLLAPSE_INDEX: false,
         FILE_SUFFIX: '.html',
         HAS_SOURCE:  true
@@ -25,7 +25,7 @@
     <script type="text/javascript" src="_static/jquery.js"></script>
     <script type="text/javascript" src="_static/underscore.js"></script>
     <script type="text/javascript" src="_static/doctools.js"></script>
-    <link rel="top" title="Ganeti 2.12.0 documentation" href="index.html" />
+    <link rel="top" title="Ganeti 2.12.3 documentation" href="index.html" />
     <link rel="next" title="Ganeti quick installation guide" href="install-quick.html" />
     <link rel="prev" title="Ganeti automatic instance allocation" href="iallocator.html" /> 
   </head>
@@ -39,7 +39,7 @@
         <li class="right" >
           <a href="iallocator.html" title="Ganeti automatic instance allocation"
              accesskey="P">previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>  
 
@@ -349,9 +349,11 @@
 <blockquote>
 <div>$ apt-get install drbd8-utils</div></blockquote>
 <p>Then to configure it for Ganeti:</p>
-<div class="highlight-shell-example"><div class="highlight"><pre>$ <span class="gs">echo</span> <span class="gs">drbd</span> <span class="gs">minor_count=128</span> <span class="gs">usermode_helper=/bin/true</span> <span class="gs">>></span> <span class="gs">/etc/modules</span>
+<div class="highlight-shell-example"><div class="highlight"><pre>$ <span class="gs">echo</span> <span class="gs">"options</span> <span class="gs">drbd</span> <span class="gs">minor_count=128</span> <span class="gs">usermode_helper=/bin/true"</span> <span class="gs">\</span>
+   <span class="gs">></span> <span class="gs">/etc/modprobe.d/drbd.conf</span>
+$ <span class="gs">echo</span> <span class="gs">"drbd"</span> <span class="gs">>></span> <span class="gs">/etc/modules</span>
 $ <span class="gs">depmod</span> <span class="gs">-a</span>
-$ <span class="gs">modprobe</span> <span class="gs">drbd</span> <span class="gs">minor_count=128</span> <span class="gs">usermode_helper=/bin/true</span>
+$ <span class="gs">modprobe</span> <span class="gs">drbd</span>
 </pre></div>
 </div>
 <p>It is also recommended that you comment out the default resources (if any)
@@ -637,7 +639,7 @@
 <h3><a class="toc-backref" href="#id25">Installing Ganeti</a><a class="headerlink" href="#installing-ganeti" title="Permalink to this headline">¶</a></h3>
 <p><strong>Mandatory</strong> on all nodes.</p>
 <p>It’s now time to install the Ganeti software itself.  Download the
-source from the project page at <a class="reference external" href="http://code.google.com/p/ganeti/">http://code.google.com/p/ganeti/</a>,
+source from the project page at <a class="reference external" href="http://downloads.ganeti.org/releases/">http://downloads.ganeti.org/releases/</a>,
 and install it (replace 2.6.0 with the latest version):</p>
 <div class="highlight-shell-example"><div class="highlight"><pre>$ <span class="gs">tar</span> <span class="gs">xvzf</span> <span class="gs">ganeti-</span><span class="nv">2.6.0</span><span class="gs">.tar.gz</span>
 $ <span class="gs">cd</span> <span class="gs">ganeti-</span><span class="nv">2.6.0</span>
@@ -969,7 +971,7 @@
         <li class="right" >
           <a href="iallocator.html" title="Ganeti automatic instance allocation"
              >previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>
     <div class="footer">
diff -Nru ganeti-2.12.0/doc/html/install-quick.html ganeti-2.12.3/doc/html/install-quick.html
--- ganeti-2.12.0/doc/html/install-quick.html	2014-10-10 11:56:57.000000000 +0300
+++ ganeti-2.12.3/doc/html/install-quick.html	2015-04-29 11:14:21.000000000 +0300
@@ -8,7 +8,7 @@
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     
-    <title>Ganeti quick installation guide — Ganeti 2.12.0 documentation</title>
+    <title>Ganeti quick installation guide — Ganeti 2.12.3 documentation</title>
     
     <link rel="stylesheet" href="_static/style.css" type="text/css" />
     <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
@@ -16,7 +16,7 @@
     <script type="text/javascript">
       var DOCUMENTATION_OPTIONS = {
         URL_ROOT:    '',
-        VERSION:     '2.12.0',
+        VERSION:     '2.12.3',
         COLLAPSE_INDEX: false,
         FILE_SUFFIX: '.html',
         HAS_SOURCE:  true
@@ -25,7 +25,7 @@
     <script type="text/javascript" src="_static/jquery.js"></script>
     <script type="text/javascript" src="_static/underscore.js"></script>
     <script type="text/javascript" src="_static/doctools.js"></script>
-    <link rel="top" title="Ganeti 2.12.0 documentation" href="index.html" />
+    <link rel="top" title="Ganeti 2.12.3 documentation" href="index.html" />
     <link rel="next" title="Ganeti locking" href="locking.html" />
     <link rel="prev" title="Ganeti installation tutorial" href="install.html" /> 
   </head>
@@ -39,7 +39,7 @@
         <li class="right" >
           <a href="install.html" title="Ganeti installation tutorial"
              accesskey="P">previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>  
 
@@ -373,7 +373,7 @@
         <li class="right" >
           <a href="install.html" title="Ganeti installation tutorial"
              >previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>
     <div class="footer">
diff -Nru ganeti-2.12.0/doc/html/locking.html ganeti-2.12.3/doc/html/locking.html
--- ganeti-2.12.0/doc/html/locking.html	2014-10-10 11:56:57.000000000 +0300
+++ ganeti-2.12.3/doc/html/locking.html	2015-04-29 11:14:21.000000000 +0300
@@ -8,7 +8,7 @@
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     
-    <title>Ganeti locking — Ganeti 2.12.0 documentation</title>
+    <title>Ganeti locking — Ganeti 2.12.3 documentation</title>
     
     <link rel="stylesheet" href="_static/style.css" type="text/css" />
     <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
@@ -16,7 +16,7 @@
     <script type="text/javascript">
       var DOCUMENTATION_OPTIONS = {
         URL_ROOT:    '',
-        VERSION:     '2.12.0',
+        VERSION:     '2.12.3',
         COLLAPSE_INDEX: false,
         FILE_SUFFIX: '.html',
         HAS_SOURCE:  true
@@ -25,7 +25,7 @@
     <script type="text/javascript" src="_static/jquery.js"></script>
     <script type="text/javascript" src="_static/underscore.js"></script>
     <script type="text/javascript" src="_static/doctools.js"></script>
-    <link rel="top" title="Ganeti 2.12.0 documentation" href="index.html" />
+    <link rel="top" title="Ganeti 2.12.3 documentation" href="index.html" />
     <link rel="next" title="Man pages" href="manpages.html" />
     <link rel="prev" title="Ganeti quick installation guide" href="install-quick.html" /> 
   </head>
@@ -39,7 +39,7 @@
         <li class="right" >
           <a href="install-quick.html" title="Ganeti quick installation guide"
              accesskey="P">previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>  
 
@@ -170,7 +170,7 @@
         <li class="right" >
           <a href="install-quick.html" title="Ganeti quick installation guide"
              >previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>
     <div class="footer">
diff -Nru ganeti-2.12.0/doc/html/manpages.html ganeti-2.12.3/doc/html/manpages.html
--- ganeti-2.12.0/doc/html/manpages.html	2014-10-10 11:56:57.000000000 +0300
+++ ganeti-2.12.3/doc/html/manpages.html	2015-04-29 11:14:21.000000000 +0300
@@ -8,7 +8,7 @@
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     
-    <title>Man pages — Ganeti 2.12.0 documentation</title>
+    <title>Man pages — Ganeti 2.12.3 documentation</title>
     
     <link rel="stylesheet" href="_static/style.css" type="text/css" />
     <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
@@ -16,7 +16,7 @@
     <script type="text/javascript">
       var DOCUMENTATION_OPTIONS = {
         URL_ROOT:    '',
-        VERSION:     '2.12.0',
+        VERSION:     '2.12.3',
         COLLAPSE_INDEX: false,
         FILE_SUFFIX: '.html',
         HAS_SOURCE:  true
@@ -25,7 +25,7 @@
     <script type="text/javascript" src="_static/jquery.js"></script>
     <script type="text/javascript" src="_static/underscore.js"></script>
     <script type="text/javascript" src="_static/doctools.js"></script>
-    <link rel="top" title="Ganeti 2.12.0 documentation" href="index.html" />
+    <link rel="top" title="Ganeti 2.12.3 documentation" href="index.html" />
     <link rel="next" title="/" href="monitoring-query-format.html" />
     <link rel="prev" title="Ganeti locking" href="locking.html" /> 
   </head>
@@ -39,7 +39,7 @@
         <li class="right" >
           <a href="locking.html" title="Ganeti locking"
              accesskey="P">previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>  
 
@@ -97,7 +97,7 @@
         <li class="right" >
           <a href="locking.html" title="Ganeti locking"
              >previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>
     <div class="footer">
diff -Nru ganeti-2.12.0/doc/html/monitoring-query-format.html ganeti-2.12.3/doc/html/monitoring-query-format.html
--- ganeti-2.12.0/doc/html/monitoring-query-format.html	2014-10-10 11:56:57.000000000 +0300
+++ ganeti-2.12.3/doc/html/monitoring-query-format.html	2015-04-29 11:14:21.000000000 +0300
@@ -8,7 +8,7 @@
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     
-    <title>/ — Ganeti 2.12.0 documentation</title>
+    <title>/ — Ganeti 2.12.3 documentation</title>
     
     <link rel="stylesheet" href="_static/style.css" type="text/css" />
     <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
@@ -16,7 +16,7 @@
     <script type="text/javascript">
       var DOCUMENTATION_OPTIONS = {
         URL_ROOT:    '',
-        VERSION:     '2.12.0',
+        VERSION:     '2.12.3',
         COLLAPSE_INDEX: false,
         FILE_SUFFIX: '.html',
         HAS_SOURCE:  true
@@ -25,7 +25,7 @@
     <script type="text/javascript" src="_static/jquery.js"></script>
     <script type="text/javascript" src="_static/underscore.js"></script>
     <script type="text/javascript" src="_static/doctools.js"></script>
-    <link rel="top" title="Ganeti 2.12.0 documentation" href="index.html" />
+    <link rel="top" title="Ganeti 2.12.3 documentation" href="index.html" />
     <link rel="next" title="Moving instances between clusters" href="move-instance.html" />
     <link rel="prev" title="Man pages" href="manpages.html" /> 
   </head>
@@ -39,7 +39,7 @@
         <li class="right" >
           <a href="manpages.html" title="Man pages"
              accesskey="P">previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>  
 
@@ -143,7 +143,7 @@
         <li class="right" >
           <a href="manpages.html" title="Man pages"
              >previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>
     <div class="footer">
diff -Nru ganeti-2.12.0/doc/html/move-instance.html ganeti-2.12.3/doc/html/move-instance.html
--- ganeti-2.12.0/doc/html/move-instance.html	2014-10-10 11:56:57.000000000 +0300
+++ ganeti-2.12.3/doc/html/move-instance.html	2015-04-29 11:14:21.000000000 +0300
@@ -8,7 +8,7 @@
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     
-    <title>Moving instances between clusters — Ganeti 2.12.0 documentation</title>
+    <title>Moving instances between clusters — Ganeti 2.12.3 documentation</title>
     
     <link rel="stylesheet" href="_static/style.css" type="text/css" />
     <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
@@ -16,7 +16,7 @@
     <script type="text/javascript">
       var DOCUMENTATION_OPTIONS = {
         URL_ROOT:    '',
-        VERSION:     '2.12.0',
+        VERSION:     '2.12.3',
         COLLAPSE_INDEX: false,
         FILE_SUFFIX: '.html',
         HAS_SOURCE:  true
@@ -25,7 +25,7 @@
     <script type="text/javascript" src="_static/jquery.js"></script>
     <script type="text/javascript" src="_static/underscore.js"></script>
     <script type="text/javascript" src="_static/doctools.js"></script>
-    <link rel="top" title="Ganeti 2.12.0 documentation" href="index.html" />
+    <link rel="top" title="Ganeti 2.12.3 documentation" href="index.html" />
     <link rel="next" title="News" href="news.html" />
     <link rel="prev" title="/" href="monitoring-query-format.html" /> 
   </head>
@@ -39,7 +39,7 @@
         <li class="right" >
           <a href="monitoring-query-format.html" title="/"
              accesskey="P">previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>  
 
@@ -213,7 +213,7 @@
         <li class="right" >
           <a href="monitoring-query-format.html" title="/"
              >previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>
     <div class="footer">
diff -Nru ganeti-2.12.0/doc/html/news.html ganeti-2.12.3/doc/html/news.html
--- ganeti-2.12.0/doc/html/news.html	2014-10-10 11:56:58.000000000 +0300
+++ ganeti-2.12.3/doc/html/news.html	2015-04-29 11:14:22.000000000 +0300
@@ -8,7 +8,7 @@
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     
-    <title>News — Ganeti 2.12.0 documentation</title>
+    <title>News — Ganeti 2.12.3 documentation</title>
     
     <link rel="stylesheet" href="_static/style.css" type="text/css" />
     <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
@@ -16,7 +16,7 @@
     <script type="text/javascript">
       var DOCUMENTATION_OPTIONS = {
         URL_ROOT:    '',
-        VERSION:     '2.12.0',
+        VERSION:     '2.12.3',
         COLLAPSE_INDEX: false,
         FILE_SUFFIX: '.html',
         HAS_SOURCE:  true
@@ -25,7 +25,7 @@
     <script type="text/javascript" src="_static/jquery.js"></script>
     <script type="text/javascript" src="_static/underscore.js"></script>
     <script type="text/javascript" src="_static/doctools.js"></script>
-    <link rel="top" title="Ganeti 2.12.0 documentation" href="index.html" />
+    <link rel="top" title="Ganeti 2.12.3 documentation" href="index.html" />
     <link rel="next" title="OVF converter" href="ovfconverter.html" />
     <link rel="prev" title="Moving instances between clusters" href="move-instance.html" /> 
   </head>
@@ -39,7 +39,7 @@
         <li class="right" >
           <a href="move-instance.html" title="Moving instances between clusters"
              accesskey="P">previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>  
 
@@ -50,6 +50,121 @@
             
   <div class="section" id="news">
 <h1>News<a class="headerlink" href="#news" title="Permalink to this headline">¶</a></h1>
+<div class="section" id="version-2-12-3">
+<h2>Version 2.12.3<a class="headerlink" href="#version-2-12-3" title="Permalink to this headline">¶</a></h2>
+<p><em>(Released Wed, 29 Apr 2015)</em></p>
+<ul class="simple">
+<li>Fixed Issue #1019: upgrade from 2.6.2 to 2.12 fails. cfgupgrade
+doesn’t migrate the config.data file properly</li>
+<li>Fixed Issue 1023: Master master-capable option bug</li>
+<li>Fixed Issue 1068: gnt-network info outputs wrong external reservations</li>
+<li>Fixed Issue 1070: Upgrade of Ganeti 2.5.2 to 2.12.0 fails due to
+missing UUIDs for disks</li>
+<li>Fixed Issue 1073: ssconf_hvparams_* not distributed with ssconf</li>
+</ul>
+<p>Inherited from the 2.11 branch:</p>
+<ul class="simple">
+<li>Fixed Issue 1032: Renew-crypto –new-node-certificates sometimes does not
+complete.
+The operation ‘gnt-cluster renew-crypto –new-node-certificates’ is
+now more robust against intermitten reachability errors. Nodes that
+are temporarily not reachable, are contacted with several retries.
+Nodes which are marked as offline are omitted right away.</li>
+</ul>
+<p>Inherited from the 2.10 branch:</p>
+<ul class="simple">
+<li>Fixed Issue 1057: master-failover succeeds, but IP remains assigned to
+old master</li>
+<li>Fixed Issue 1058: Python’s os.minor() does not support devices with
+high minor numbers</li>
+<li>Fixed Issue 1059: Luxid fails if DNS returns an IPv6 address that does
+not reverse resolve</li>
+</ul>
+<div class="section" id="known-issues">
+<h3>Known issues<a class="headerlink" href="#known-issues" title="Permalink to this headline">¶</a></h3>
+<p>Pending since 2.12.2:</p>
+<ul class="simple">
+<li>GHC 7.8 introduced some incompatible changes, so currently Ganeti
+2.12. doesn’t compile on GHC 7.8</li>
+<li>Under certain conditions instance doesn’t get unpaused after live
+migration (issue #1050)</li>
+<li>GlusterFS support breaks at upgrade to 2.12 - switches back to
+shared-file (issue #1030)</li>
+</ul>
+</div>
+</div>
+<div class="section" id="version-2-12-2">
+<h2>Version 2.12.2<a class="headerlink" href="#version-2-12-2" title="Permalink to this headline">¶</a></h2>
+<p><em>(Released Wed, 25 Mar 2015)</em></p>
+<ul class="simple">
+<li>Support for the lens Haskell library up to version 4.7 (issue #1028)</li>
+<li>SSH keys are now distributed only to master and master candidates
+(issue #377)</li>
+<li>Improved performance for operations that frequently read the
+cluster configuration</li>
+<li>Improved robustness of spawning job processes that occasionally caused
+newly-started jobs to timeout</li>
+<li>Fixed race condition during cluster verify which occasionally caused
+it to fail</li>
+</ul>
+<p>Inherited from the 2.11 branch:</p>
+<ul class="simple">
+<li>Fix failing automatic glusterfs mounts (issue #984)</li>
+<li>Fix watcher failing to read its status file after an upgrade
+(issue #1022)</li>
+<li>Improve Xen instance state handling, in particular of somewhat exotic
+transitional states</li>
+</ul>
+<p>Inherited from the 2.10 branch:</p>
+<ul class="simple">
+<li>Fix failing to change a diskless drbd instance to plain
+(issue #1036)</li>
+<li>Fixed issues with auto-upgrades from pre-2.6
+(hv_state_static and disk_state_static)</li>
+<li>Fix memory leak in the monitoring daemon</li>
+</ul>
+<p>Inherited from the 2.9 branch:</p>
+<ul class="simple">
+<li>Fix file descriptor leak in Confd client</li>
+</ul>
+<div class="section" id="id1">
+<h3>Known issues<a class="headerlink" href="#id1" title="Permalink to this headline">¶</a></h3>
+<ul class="simple">
+<li>GHC 7.8 introduced some incompatible changes, so currently Ganeti
+2.12. doesn’t compile on GHC 7.8</li>
+<li>Under certain conditions instance doesn’t get unpaused after live
+migration (issue #1050)</li>
+<li>GlusterFS support breaks at upgrade to 2.12 - switches back to
+shared-file (issue #1030)</li>
+</ul>
+</div>
+</div>
+<div class="section" id="version-2-12-1">
+<h2>Version 2.12.1<a class="headerlink" href="#version-2-12-1" title="Permalink to this headline">¶</a></h2>
+<p><em>(Released Wed, 14 Jan 2015)</em></p>
+<ul class="simple">
+<li>Fix users under which the wconfd and metad daemons run (issue #976)</li>
+<li>Clean up stale livelock files (issue #865)</li>
+<li>Fix setting up the metadata daemon’s network interface for Xen</li>
+<li>Make watcher identify itself on disk activation</li>
+<li>Add “ignore-ipolicy” option to gnt-instance grow-disk</li>
+<li>Check disk size ipolicy during “gnt-instance grow-disk” (issue #995)</li>
+</ul>
+<p>Inherited from the 2.11 branch:</p>
+<ul class="simple">
+<li>Fix counting votes when doing master failover (issue #962)</li>
+<li>Fix broken haskell dependencies (issues #758 and #912)</li>
+<li>Check if IPv6 is used directly when running SSH (issue #892)</li>
+</ul>
+<p>Inherited from the 2.10 branch:</p>
+<ul class="simple">
+<li>Fix typo in gnt_cluster output (issue #1015)</li>
+<li>Use the Python path detected at configure time in the top-level Python
+scripts.</li>
+<li>Fix check for sphinx-build from python2-sphinx</li>
+<li>Properly check if an instance exists in ‘gnt-instance console’</li>
+</ul>
+</div>
 <div class="section" id="version-2-12-0">
 <h2>Version 2.12.0<a class="headerlink" href="#version-2-12-0" title="Permalink to this headline">¶</a></h2>
 <p><em>(Released Fri, 10 Oct 2014)</em></p>
@@ -124,8 +239,8 @@
 implemented yet.</li>
 </ul>
 </div>
-<div class="section" id="known-issues">
-<h3>Known issues<a class="headerlink" href="#known-issues" title="Permalink to this headline">¶</a></h3>
+<div class="section" id="id2">
+<h3>Known issues<a class="headerlink" href="#id2" title="Permalink to this headline">¶</a></h3>
 <ul>
 <li><p class="first"><em>Wrong UDP checksums in DHCP network packets:</em>
 If an instance communicates with the metadata daemon and uses DHCP to
@@ -215,6 +330,16 @@
 <p>This was the first beta release of the 2.12 series. All important changes
 are listed in the latest 2.12 entry.</p>
 </div>
+<div class="section" id="version-2-11-7">
+<h2>Version 2.11.7<a class="headerlink" href="#version-2-11-7" title="Permalink to this headline">¶</a></h2>
+<p><em>(Released Fri, 17 Apr 2015)</em></p>
+<ul class="simple">
+<li>The operation ‘gnt-cluster renew-crypto –new-node-certificates’ is
+now more robust against intermitten reachability errors. Nodes that
+are temporarily not reachable, are contacted with several retries.
+Nodes which are marked as offline are omitted right away.</li>
+</ul>
+</div>
 <div class="section" id="version-2-11-6">
 <h2>Version 2.11.6<a class="headerlink" href="#version-2-11-6" title="Permalink to this headline">¶</a></h2>
 <p><em>(Released Mon, 22 Sep 2014)</em></p>
@@ -389,8 +514,8 @@
 <div class="section" id="version-2-11-0">
 <h2>Version 2.11.0<a class="headerlink" href="#version-2-11-0" title="Permalink to this headline">¶</a></h2>
 <p><em>(Released Fri, 25 Apr 2014)</em></p>
-<div class="section" id="id1">
-<h3>Incompatible/important changes<a class="headerlink" href="#id1" title="Permalink to this headline">¶</a></h3>
+<div class="section" id="id3">
+<h3>Incompatible/important changes<a class="headerlink" href="#id3" title="Permalink to this headline">¶</a></h3>
 <ul class="simple">
 <li><tt class="docutils literal"><span class="pre">gnt-node</span> <span class="pre">list</span></tt> no longer shows disk space information for shared file
 disk templates because it is not a node attribute. (For example, if you have
@@ -417,8 +542,8 @@
 this to create client certificates and activate this feature.</li>
 </ul>
 </div>
-<div class="section" id="id2">
-<h3>New features<a class="headerlink" href="#id2" title="Permalink to this headline">¶</a></h3>
+<div class="section" id="id4">
+<h3>New features<a class="headerlink" href="#id4" title="Permalink to this headline">¶</a></h3>
 <ul class="simple">
 <li>Instance moves, backups and imports can now use compression to transfer the
 instance data.</li>
@@ -436,8 +561,8 @@
 moves.</li>
 </ul>
 </div>
-<div class="section" id="id3">
-<h3>New dependencies<a class="headerlink" href="#id3" title="Permalink to this headline">¶</a></h3>
+<div class="section" id="id5">
+<h3>New dependencies<a class="headerlink" href="#id5" title="Permalink to this headline">¶</a></h3>
 <p>The following new dependencies have been added:</p>
 <p>For Haskell:</p>
 <ul class="simple">
@@ -688,8 +813,8 @@
 <div class="section" id="version-2-10-0">
 <h2>Version 2.10.0<a class="headerlink" href="#version-2-10-0" title="Permalink to this headline">¶</a></h2>
 <p><em>(Released Thu, 20 Feb 2014)</em></p>
-<div class="section" id="id4">
-<h3>Incompatible/important changes<a class="headerlink" href="#id4" title="Permalink to this headline">¶</a></h3>
+<div class="section" id="id6">
+<h3>Incompatible/important changes<a class="headerlink" href="#id6" title="Permalink to this headline">¶</a></h3>
 <ul class="simple">
 <li>Adding disks with ‘gnt-instance modify’ now waits for the disks to sync per
 default. Specify –no-wait-for-sync to override this behavior.</li>
@@ -706,8 +831,8 @@
 as empty strings (and not “None”) during ‘instance-migrate’ related hooks.</li>
 </ul>
 </div>
-<div class="section" id="id5">
-<h3>New features<a class="headerlink" href="#id5" title="Permalink to this headline">¶</a></h3>
+<div class="section" id="id7">
+<h3>New features<a class="headerlink" href="#id7" title="Permalink to this headline">¶</a></h3>
 <ul>
 <li><p class="first">KVM hypervisors can now access RBD storage directly without having to
 go through a block device.</p>
@@ -755,8 +880,8 @@
 changes will be part of the next release of Ganeti.</li>
 </ul>
 </div>
-<div class="section" id="id6">
-<h3>New dependencies<a class="headerlink" href="#id6" title="Permalink to this headline">¶</a></h3>
+<div class="section" id="id8">
+<h3>New dependencies<a class="headerlink" href="#id8" title="Permalink to this headline">¶</a></h3>
 <p>The following new dependencies have been added/updated.</p>
 <p>Python</p>
 <ul class="simple">
@@ -869,8 +994,8 @@
 <p><em>(Released Wed, 27 Nov 2013)</em></p>
 <p>This was the first beta release of the 2.10 series. All important changes
 are listed in the latest 2.10 entry.</p>
-<div class="section" id="id7">
-<h3>Known issues<a class="headerlink" href="#id7" title="Permalink to this headline">¶</a></h3>
+<div class="section" id="id9">
+<h3>Known issues<a class="headerlink" href="#id9" title="Permalink to this headline">¶</a></h3>
 <p>The following issues are known to be present in the beta and will be fixed
 before rc1.</p>
 <ul class="simple">
@@ -989,8 +1114,8 @@
 <div class="section" id="version-2-9-0">
 <h2>Version 2.9.0<a class="headerlink" href="#version-2-9-0" title="Permalink to this headline">¶</a></h2>
 <p><em>(Released Tue, 5 Nov 2013)</em></p>
-<div class="section" id="id8">
-<h3>Incompatible/important changes<a class="headerlink" href="#id8" title="Permalink to this headline">¶</a></h3>
+<div class="section" id="id10">
+<h3>Incompatible/important changes<a class="headerlink" href="#id10" title="Permalink to this headline">¶</a></h3>
 <ul class="simple">
 <li>hroller now also plans for capacity to move non-redundant instances off
 any node to be rebooted; the old behavior of completely ignoring any
@@ -1022,8 +1147,8 @@
 disk templates.</li>
 </ul>
 </div>
-<div class="section" id="id9">
-<h3>New features<a class="headerlink" href="#id9" title="Permalink to this headline">¶</a></h3>
+<div class="section" id="id11">
+<h3>New features<a class="headerlink" href="#id11" title="Permalink to this headline">¶</a></h3>
 <ul class="simple">
 <li>DRBD 8.4 support. Depending on the installed DRBD version, Ganeti now uses
 the correct command syntax. It is possible to use different DRBD versions
@@ -1041,8 +1166,8 @@
 <li>The ConfD client is now IPv6 compatible.</li>
 </ul>
 </div>
-<div class="section" id="id10">
-<h3>New dependencies<a class="headerlink" href="#id10" title="Permalink to this headline">¶</a></h3>
+<div class="section" id="id12">
+<h3>New dependencies<a class="headerlink" href="#id12" title="Permalink to this headline">¶</a></h3>
 <p>The following new dependencies have been added.</p>
 <p>Python</p>
 <ul class="simple">
@@ -1167,8 +1292,8 @@
 <div class="section" id="version-2-8-0">
 <h2>Version 2.8.0<a class="headerlink" href="#version-2-8-0" title="Permalink to this headline">¶</a></h2>
 <p><em>(Released Mon, 30 Sep 2013)</em></p>
-<div class="section" id="id11">
-<h3>Incompatible/important changes<a class="headerlink" href="#id11" title="Permalink to this headline">¶</a></h3>
+<div class="section" id="id13">
+<h3>Incompatible/important changes<a class="headerlink" href="#id13" title="Permalink to this headline">¶</a></h3>
 <ul class="simple">
 <li>Instance policy can contain multiple instance specs, as described in
 the “Constrained instance sizes” section of <a class="reference internal" href="design-partitioned.html"><em>Partitioned Ganeti</em></a>. As a consequence, it’s not possible to partially change
@@ -1185,8 +1310,8 @@
 This allows finer grained permissions if using separate users.</li>
 </ul>
 </div>
-<div class="section" id="id12">
-<h3>New features<a class="headerlink" href="#id12" title="Permalink to this headline">¶</a></h3>
+<div class="section" id="id14">
+<h3>New features<a class="headerlink" href="#id14" title="Permalink to this headline">¶</a></h3>
 <ul class="simple">
 <li>The <a class="reference internal" href="rapi.html"><em>Remote API</em></a> daemon now supports a command line flag
 to always require authentication, <tt class="docutils literal"><span class="pre">--require-authentication</span></tt>. It can
@@ -1243,8 +1368,8 @@
 these files will remain stable in all future versions.</li>
 </ul>
 </div>
-<div class="section" id="id13">
-<h3>New dependencies<a class="headerlink" href="#id13" title="Permalink to this headline">¶</a></h3>
+<div class="section" id="id15">
+<h3>New dependencies<a class="headerlink" href="#id15" title="Permalink to this headline">¶</a></h3>
 <p>The following new dependencies have been added:</p>
 <p>For Haskell:
 - The <tt class="docutils literal"><span class="pre">curl</span></tt> library is not optional anymore for compiling the Haskell code.
@@ -1350,8 +1475,8 @@
 <div class="section" id="version-2-7-0">
 <h2>Version 2.7.0<a class="headerlink" href="#version-2-7-0" title="Permalink to this headline">¶</a></h2>
 <p><em>(Released Thu, 04 Jul 2013)</em></p>
-<div class="section" id="id14">
-<h3>Incompatible/important changes<a class="headerlink" href="#id14" title="Permalink to this headline">¶</a></h3>
+<div class="section" id="id16">
+<h3>Incompatible/important changes<a class="headerlink" href="#id16" title="Permalink to this headline">¶</a></h3>
 <ul class="simple">
 <li>Instance policies for disk size were documented to be on a per-disk
 basis, but hail applied them to the sum of all disks. This has been
@@ -1392,8 +1517,8 @@
 is recommended. 2.6 will be mandatory from the 2.8 series.</li>
 </ul>
 </div>
-<div class="section" id="id15">
-<h3>New features<a class="headerlink" href="#id15" title="Permalink to this headline">¶</a></h3>
+<div class="section" id="id17">
+<h3>New features<a class="headerlink" href="#id17" title="Permalink to this headline">¶</a></h3>
 <ul class="simple">
 <li>New network management functionality to support automatic allocation
 of IP addresses and managing of network parameters. See
@@ -1440,8 +1565,8 @@
 reasons. The file is not copied automatically.</li>
 </ul>
 </div>
-<div class="section" id="id16">
-<h3>Misc changes<a class="headerlink" href="#id16" title="Permalink to this headline">¶</a></h3>
+<div class="section" id="id18">
+<h3>Misc changes<a class="headerlink" href="#id18" title="Permalink to this headline">¶</a></h3>
 <ul class="simple">
 <li>Diskless instances are now externally mirrored (Issue 237). This for
 now has only been tested in conjunction with explicit target nodes for
@@ -1675,8 +1800,8 @@
 pausing/resuming the watcher, cancelling and archiving jobs, querying
 the cluster configuration) will fail.</p>
 </div>
-<div class="section" id="id17">
-<h3>New features<a class="headerlink" href="#id17" title="Permalink to this headline">¶</a></h3>
+<div class="section" id="id19">
+<h3>New features<a class="headerlink" href="#id19" title="Permalink to this headline">¶</a></h3>
 <div class="section" id="instance-run-status">
 <h4>Instance run status<a class="headerlink" href="#instance-run-status" title="Permalink to this headline">¶</a></h4>
 <p>The current <tt class="docutils literal"><span class="pre">admin_up</span></tt> field, which used to denote whether an instance
@@ -2129,8 +2254,8 @@
 <li>Includes all bugfixes made in the 2.4 series</li>
 </ul>
 </div>
-<div class="section" id="id18">
-<h3>New features<a class="headerlink" href="#id18" title="Permalink to this headline">¶</a></h3>
+<div class="section" id="id20">
+<h3>New features<a class="headerlink" href="#id20" title="Permalink to this headline">¶</a></h3>
 <ul class="simple">
 <li>The ganeti-htools project has been merged into the ganeti-core source
 tree and will be built as part of Ganeti (see <a class="reference internal" href="install-quick.html"><em>Ganeti quick installation guide</em></a>).</li>
@@ -2626,8 +2751,8 @@
 </li>
 </ul>
 </div>
-<div class="section" id="id19">
-<h3>Misc<a class="headerlink" href="#id19" title="Permalink to this headline">¶</a></h3>
+<div class="section" id="id21">
+<h3>Misc<a class="headerlink" href="#id21" title="Permalink to this headline">¶</a></h3>
 <ul class="simple">
 <li>Added IPv6 support in import/export</li>
 <li>Pause DRBD synchronization while wiping disks on instance creation</li>
@@ -3064,8 +3189,8 @@
 <p><em>(Released Fri, 7 May 2010)</em></p>
 <p>Another release with a long development cycle, during which many
 different features were added.</p>
-<div class="section" id="id20">
-<h3>Significant features<a class="headerlink" href="#id20" title="Permalink to this headline">¶</a></h3>
+<div class="section" id="id22">
+<h3>Significant features<a class="headerlink" href="#id22" title="Permalink to this headline">¶</a></h3>
 <p>The KVM hypervisor now can run the individual instances as non-root, to
 reduce the impact of a VM being hijacked due to bugs in the
 hypervisor. It is possible to run all instances as a single (non-root)
@@ -3105,8 +3230,8 @@
 <p>Cluster verify has added a few new checks: SSL certificates validity,
 /etc/hosts consistency across the cluster, etc.</p>
 </div>
-<div class="section" id="id21">
-<h3>Other changes<a class="headerlink" href="#id21" title="Permalink to this headline">¶</a></h3>
+<div class="section" id="id23">
+<h3>Other changes<a class="headerlink" href="#id23" title="Permalink to this headline">¶</a></h3>
 <p>As usual, many internal changes were done, documentation fixes,
 etc. Among others:</p>
 <ul class="simple">
@@ -3212,8 +3337,8 @@
 <li>Many documentation fixes based on feedback from users</li>
 </ul>
 </div>
-<div class="section" id="id22">
-<h3>New features<a class="headerlink" href="#id22" title="Permalink to this headline">¶</a></h3>
+<div class="section" id="id24">
+<h3>New features<a class="headerlink" href="#id24" title="Permalink to this headline">¶</a></h3>
 <ul class="simple">
 <li>Added an “early_release” more for instance replace disks and node
 evacuate, where we release locks earlier and thus allow higher
@@ -3843,12 +3968,21 @@
   <h3><a href="index.html">Table Of Contents</a></h3>
   <ul>
 <li><a class="reference internal" href="#">News</a><ul>
+<li><a class="reference internal" href="#version-2-12-3">Version 2.12.3</a><ul>
+<li><a class="reference internal" href="#known-issues">Known issues</a></li>
+</ul>
+</li>
+<li><a class="reference internal" href="#version-2-12-2">Version 2.12.2</a><ul>
+<li><a class="reference internal" href="#id1">Known issues</a></li>
+</ul>
+</li>
+<li><a class="reference internal" href="#version-2-12-1">Version 2.12.1</a></li>
 <li><a class="reference internal" href="#version-2-12-0">Version 2.12.0</a><ul>
 <li><a class="reference internal" href="#incompatible-important-changes">Incompatible/important changes</a></li>
 <li><a class="reference internal" href="#new-features">New features</a></li>
 <li><a class="reference internal" href="#new-dependencies">New dependencies</a></li>
 <li><a class="reference internal" href="#incomplete-features">Incomplete features</a></li>
-<li><a class="reference internal" href="#known-issues">Known issues</a></li>
+<li><a class="reference internal" href="#id2">Known issues</a></li>
 <li><a class="reference internal" href="#since-2-12-0-rc2">Since 2.12.0 rc2</a></li>
 </ul>
 </li>
@@ -3861,6 +3995,7 @@
 </ul>
 </li>
 <li><a class="reference internal" href="#version-2-12-0-beta1">Version 2.12.0 beta1</a></li>
+<li><a class="reference internal" href="#version-2-11-7">Version 2.11.7</a></li>
 <li><a class="reference internal" href="#version-2-11-6">Version 2.11.6</a></li>
 <li><a class="reference internal" href="#version-2-11-5">Version 2.11.5</a></li>
 <li><a class="reference internal" href="#version-2-11-4">Version 2.11.4</a></li>
@@ -3868,9 +4003,9 @@
 <li><a class="reference internal" href="#version-2-11-2">Version 2.11.2</a></li>
 <li><a class="reference internal" href="#version-2-11-1">Version 2.11.1</a></li>
 <li><a class="reference internal" href="#version-2-11-0">Version 2.11.0</a><ul>
-<li><a class="reference internal" href="#id1">Incompatible/important changes</a></li>
-<li><a class="reference internal" href="#id2">New features</a></li>
-<li><a class="reference internal" href="#id3">New dependencies</a></li>
+<li><a class="reference internal" href="#id3">Incompatible/important changes</a></li>
+<li><a class="reference internal" href="#id4">New features</a></li>
+<li><a class="reference internal" href="#id5">New dependencies</a></li>
 <li><a class="reference internal" href="#since-2-11-0-rc1">Since 2.11.0 rc1</a></li>
 </ul>
 </li>
@@ -3884,10 +4019,10 @@
 <li><a class="reference internal" href="#version-2-10-2">Version 2.10.2</a></li>
 <li><a class="reference internal" href="#version-2-10-1">Version 2.10.1</a></li>
 <li><a class="reference internal" href="#version-2-10-0">Version 2.10.0</a><ul>
-<li><a class="reference internal" href="#id4">Incompatible/important changes</a></li>
-<li><a class="reference internal" href="#id5">New features</a></li>
+<li><a class="reference internal" href="#id6">Incompatible/important changes</a></li>
+<li><a class="reference internal" href="#id7">New features</a></li>
 <li><a class="reference internal" href="#misc-changes">Misc changes</a></li>
-<li><a class="reference internal" href="#id6">New dependencies</a></li>
+<li><a class="reference internal" href="#id8">New dependencies</a></li>
 <li><a class="reference internal" href="#since-2-10-0-rc3">Since 2.10.0 rc3</a></li>
 </ul>
 </li>
@@ -3895,7 +4030,7 @@
 <li><a class="reference internal" href="#version-2-10-0-rc2">Version 2.10.0 rc2</a></li>
 <li><a class="reference internal" href="#version-2-10-0-rc1">Version 2.10.0 rc1</a></li>
 <li><a class="reference internal" href="#version-2-10-0-beta1">Version 2.10.0 beta1</a><ul>
-<li><a class="reference internal" href="#id7">Known issues</a></li>
+<li><a class="reference internal" href="#id9">Known issues</a></li>
 </ul>
 </li>
 <li><a class="reference internal" href="#version-2-9-6">Version 2.9.6</a></li>
@@ -3905,9 +4040,9 @@
 <li><a class="reference internal" href="#version-2-9-2">Version 2.9.2</a></li>
 <li><a class="reference internal" href="#version-2-9-1">Version 2.9.1</a></li>
 <li><a class="reference internal" href="#version-2-9-0">Version 2.9.0</a><ul>
-<li><a class="reference internal" href="#id8">Incompatible/important changes</a></li>
-<li><a class="reference internal" href="#id9">New features</a></li>
-<li><a class="reference internal" href="#id10">New dependencies</a></li>
+<li><a class="reference internal" href="#id10">Incompatible/important changes</a></li>
+<li><a class="reference internal" href="#id11">New features</a></li>
+<li><a class="reference internal" href="#id12">New dependencies</a></li>
 <li><a class="reference internal" href="#since-2-9-0-rc3">Since 2.9.0 rc3</a></li>
 </ul>
 </li>
@@ -3920,9 +4055,9 @@
 <li><a class="reference internal" href="#version-2-8-2">Version 2.8.2</a></li>
 <li><a class="reference internal" href="#version-2-8-1">Version 2.8.1</a></li>
 <li><a class="reference internal" href="#version-2-8-0">Version 2.8.0</a><ul>
-<li><a class="reference internal" href="#id11">Incompatible/important changes</a></li>
-<li><a class="reference internal" href="#id12">New features</a></li>
-<li><a class="reference internal" href="#id13">New dependencies</a></li>
+<li><a class="reference internal" href="#id13">Incompatible/important changes</a></li>
+<li><a class="reference internal" href="#id14">New features</a></li>
+<li><a class="reference internal" href="#id15">New dependencies</a></li>
 <li><a class="reference internal" href="#since-2-8-0-rc3">Since 2.8.0 rc3</a></li>
 </ul>
 </li>
@@ -3933,9 +4068,9 @@
 <li><a class="reference internal" href="#version-2-7-2">Version 2.7.2</a></li>
 <li><a class="reference internal" href="#version-2-7-1">Version 2.7.1</a></li>
 <li><a class="reference internal" href="#version-2-7-0">Version 2.7.0</a><ul>
-<li><a class="reference internal" href="#id14">Incompatible/important changes</a></li>
-<li><a class="reference internal" href="#id15">New features</a></li>
-<li><a class="reference internal" href="#id16">Misc changes</a></li>
+<li><a class="reference internal" href="#id16">Incompatible/important changes</a></li>
+<li><a class="reference internal" href="#id17">New features</a></li>
+<li><a class="reference internal" href="#id18">Misc changes</a></li>
 </ul>
 </li>
 <li><a class="reference internal" href="#version-2-7-0-rc3">Version 2.7.0 rc3</a></li>
@@ -3947,7 +4082,7 @@
 <li><a class="reference internal" href="#version-2-6-2">Version 2.6.2</a></li>
 <li><a class="reference internal" href="#version-2-6-1">Version 2.6.1</a></li>
 <li><a class="reference internal" href="#version-2-6-0">Version 2.6.0</a><ul>
-<li><a class="reference internal" href="#id17">New features</a><ul>
+<li><a class="reference internal" href="#id19">New features</a><ul>
 <li><a class="reference internal" href="#instance-run-status">Instance run status</a></li>
 <li><a class="reference internal" href="#instance-policies-and-specs">Instance policies and specs</a></li>
 <li><a class="reference internal" href="#instance-migration-behaviour">Instance migration behaviour</a></li>
@@ -3977,7 +4112,7 @@
 <li><a class="reference internal" href="#version-2-5-1">Version 2.5.1</a></li>
 <li><a class="reference internal" href="#version-2-5-0">Version 2.5.0</a><ul>
 <li><a class="reference internal" href="#incompatible-important-changes-and-bugfixes">Incompatible/important changes and bugfixes</a></li>
-<li><a class="reference internal" href="#id18">New features</a></li>
+<li><a class="reference internal" href="#id20">New features</a></li>
 <li><a class="reference internal" href="#node-group-improvements">Node group improvements</a></li>
 <li><a class="reference internal" href="#misc">Misc</a></li>
 </ul>
@@ -4009,7 +4144,7 @@
 <li><a class="reference internal" href="#user-visible">User-visible</a></li>
 <li><a class="reference internal" href="#integration">Integration</a></li>
 <li><a class="reference internal" href="#remote-api">Remote API</a></li>
-<li><a class="reference internal" href="#id19">Misc</a></li>
+<li><a class="reference internal" href="#id21">Misc</a></li>
 </ul>
 </li>
 <li><a class="reference internal" href="#version-2-3-1">Version 2.3.1</a></li>
@@ -4039,14 +4174,14 @@
 </li>
 <li><a class="reference internal" href="#version-2-1-2-1">Version 2.1.2.1</a></li>
 <li><a class="reference internal" href="#version-2-1-2">Version 2.1.2</a><ul>
-<li><a class="reference internal" href="#id20">Significant features</a></li>
-<li><a class="reference internal" href="#id21">Other changes</a></li>
+<li><a class="reference internal" href="#id22">Significant features</a></li>
+<li><a class="reference internal" href="#id23">Other changes</a></li>
 </ul>
 </li>
 <li><a class="reference internal" href="#version-2-1-1">Version 2.1.1</a><ul>
 <li><a class="reference internal" href="#major-changes">Major changes</a></li>
 <li><a class="reference internal" href="#bug-fixes">Bug fixes</a></li>
-<li><a class="reference internal" href="#id22">New features</a></li>
+<li><a class="reference internal" href="#id24">New features</a></li>
 </ul>
 </li>
 <li><a class="reference internal" href="#version-2-1-0">Version 2.1.0</a><ul>
@@ -4118,7 +4253,7 @@
         <li class="right" >
           <a href="move-instance.html" title="Moving instances between clusters"
              >previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>
     <div class="footer">
diff -Nru ganeti-2.12.0/doc/html/ovfconverter.html ganeti-2.12.3/doc/html/ovfconverter.html
--- ganeti-2.12.0/doc/html/ovfconverter.html	2014-10-10 11:56:58.000000000 +0300
+++ ganeti-2.12.3/doc/html/ovfconverter.html	2015-04-29 11:14:22.000000000 +0300
@@ -8,7 +8,7 @@
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     
-    <title>OVF converter — Ganeti 2.12.0 documentation</title>
+    <title>OVF converter — Ganeti 2.12.3 documentation</title>
     
     <link rel="stylesheet" href="_static/style.css" type="text/css" />
     <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
@@ -16,7 +16,7 @@
     <script type="text/javascript">
       var DOCUMENTATION_OPTIONS = {
         URL_ROOT:    '',
-        VERSION:     '2.12.0',
+        VERSION:     '2.12.3',
         COLLAPSE_INDEX: false,
         FILE_SUFFIX: '.html',
         HAS_SOURCE:  true
@@ -25,7 +25,7 @@
     <script type="text/javascript" src="_static/jquery.js"></script>
     <script type="text/javascript" src="_static/underscore.js"></script>
     <script type="text/javascript" src="_static/doctools.js"></script>
-    <link rel="top" title="Ganeti 2.12.0 documentation" href="index.html" />
+    <link rel="top" title="Ganeti 2.12.3 documentation" href="index.html" />
     <link rel="next" title="Ganeti remote API" href="rapi.html" />
     <link rel="prev" title="News" href="news.html" /> 
   </head>
@@ -39,7 +39,7 @@
         <li class="right" >
           <a href="news.html" title="News"
              accesskey="P">previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>  
 
@@ -313,7 +313,7 @@
         <li class="right" >
           <a href="news.html" title="News"
              >previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>
     <div class="footer">
diff -Nru ganeti-2.12.0/doc/html/rapi.html ganeti-2.12.3/doc/html/rapi.html
--- ganeti-2.12.0/doc/html/rapi.html	2014-10-10 11:56:59.000000000 +0300
+++ ganeti-2.12.3/doc/html/rapi.html	2015-04-29 11:14:23.000000000 +0300
@@ -8,7 +8,7 @@
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     
-    <title>Ganeti remote API — Ganeti 2.12.0 documentation</title>
+    <title>Ganeti remote API — Ganeti 2.12.3 documentation</title>
     
     <link rel="stylesheet" href="_static/style.css" type="text/css" />
     <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
@@ -16,7 +16,7 @@
     <script type="text/javascript">
       var DOCUMENTATION_OPTIONS = {
         URL_ROOT:    '',
-        VERSION:     '2.12.0',
+        VERSION:     '2.12.3',
         COLLAPSE_INDEX: false,
         FILE_SUFFIX: '.html',
         HAS_SOURCE:  true
@@ -25,7 +25,7 @@
     <script type="text/javascript" src="_static/jquery.js"></script>
     <script type="text/javascript" src="_static/underscore.js"></script>
     <script type="text/javascript" src="_static/doctools.js"></script>
-    <link rel="top" title="Ganeti 2.12.0 documentation" href="index.html" />
+    <link rel="top" title="Ganeti 2.12.3 documentation" href="index.html" />
     <link rel="next" title="Security in Ganeti" href="security.html" />
     <link rel="prev" title="OVF converter" href="ovfconverter.html" /> 
   </head>
@@ -39,7 +39,7 @@
         <li class="right" >
           <a href="ovfconverter.html" title="OVF converter"
              accesskey="P">previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>  
 
@@ -757,13 +757,13 @@
 <span id="id5"></span><h4><a class="toc-backref" href="#id104"><tt class="docutils literal"><span class="pre">PUT</span></tt></a><a class="headerlink" href="#rapi-res-modify-put" title="Permalink to this headline">¶</a></h4>
 <p>Returns a job ID.</p>
 <p>Body parameters:</p>
-<p><tt class="docutils literal"><span class="pre">add_uids</span></tt> (defaults to <tt class="docutils literal"><span class="pre">None</span></tt>, must be <tt class="docutils literal"><span class="pre">None</span> <span class="pre">or</span> <span class="pre">(List</span> <span class="pre">of</span> <span class="pre">(Tuple</span> <span class="pre">of</span> <span class="pre">((<Integer</span> <span class="pre"><function</span> <span class="pre">TInt</span> <span class="pre">at</span> <span class="pre">0x29c85f0>>,</span> <span class="pre"><Integer</span> <span class="pre"><function</span> <span class="pre">TInt</span> <span class="pre">at</span> <span class="pre">0x29c85f0>>))))</span></tt>)</p>
+<p><tt class="docutils literal"><span class="pre">add_uids</span></tt> (defaults to <tt class="docutils literal"><span class="pre">None</span></tt>, must be <tt class="docutils literal"><span class="pre">None</span> <span class="pre">or</span> <span class="pre">(List</span> <span class="pre">of</span> <span class="pre">(Tuple</span> <span class="pre">of</span> <span class="pre">((<Integer</span> <span class="pre"><function</span> <span class="pre">TInt</span> <span class="pre">at</span> <span class="pre">0x2350668>>,</span> <span class="pre"><Integer</span> <span class="pre"><function</span> <span class="pre">TInt</span> <span class="pre">at</span> <span class="pre">0x2350668>>))))</span></tt>)</p>
 <blockquote>
 <div>Extend UID pool, must be list of lists describing UID ranges (two items, start and end inclusive)</div></blockquote>
 <p><tt class="docutils literal"><span class="pre">beparams</span></tt> (defaults to <tt class="docutils literal"><span class="pre">None</span></tt>, must be <tt class="docutils literal"><span class="pre">None</span> <span class="pre">or</span> <span class="pre">(Dictionary</span> <span class="pre">with</span> <span class="pre">keys</span> <span class="pre">of</span> <span class="pre">Anything</span> <span class="pre">and</span> <span class="pre">values</span> <span class="pre">of</span> <span class="pre">Anything)</span></tt>)</p>
 <blockquote>
 <div>Cluster-wide backend parameter defaults</div></blockquote>
-<p><tt class="docutils literal"><span class="pre">blacklisted_os</span></tt> (defaults to <tt class="docutils literal"><span class="pre">None</span></tt>, must be <tt class="docutils literal"><span class="pre">None</span> <span class="pre">or</span> <span class="pre">(List</span> <span class="pre">of</span> <span class="pre">(Tuple</span> <span class="pre">of</span> <span class="pre">((<OneOf</span> <span class="pre">add,</span> <span class="pre">remove</span> <span class="pre"><function</span> <span class="pre">fn</span> <span class="pre">at</span> <span class="pre">0x29d02a8>>,</span> <span class="pre"><NonEmptyString</span> <span class="pre"><String</span> <span class="pre">and</span> <span class="pre">EvalToTrue</span> <span class="pre"><function</span> <span class="pre">fn</span> <span class="pre">at</span> <span class="pre">0x29c8cf8>>>))))</span></tt>)</p>
+<p><tt class="docutils literal"><span class="pre">blacklisted_os</span></tt> (defaults to <tt class="docutils literal"><span class="pre">None</span></tt>, must be <tt class="docutils literal"><span class="pre">None</span> <span class="pre">or</span> <span class="pre">(List</span> <span class="pre">of</span> <span class="pre">(Tuple</span> <span class="pre">of</span> <span class="pre">((<OneOf</span> <span class="pre">add,</span> <span class="pre">remove</span> <span class="pre"><function</span> <span class="pre">fn</span> <span class="pre">at</span> <span class="pre">0x2359320>>,</span> <span class="pre"><NonEmptyString</span> <span class="pre"><String</span> <span class="pre">and</span> <span class="pre">EvalToTrue</span> <span class="pre"><function</span> <span class="pre">fn</span> <span class="pre">at</span> <span class="pre">0x2350d70>>>))))</span></tt>)</p>
 <blockquote>
 <div>Modify list of blacklisted operating systems: each modification must have two items, the operation and the OS name; the operation can be add or remove</div></blockquote>
 <p><tt class="docutils literal"><span class="pre">candidate_pool_size</span></tt> (defaults to <tt class="docutils literal"><span class="pre">None</span></tt>, must be <tt class="docutils literal"><span class="pre">None</span> <span class="pre">or</span> <span class="pre">GreaterThanZero</span></tt>)</p>
@@ -804,7 +804,7 @@
 <blockquote>
 <div>Whether to force the operation</div></blockquote>
 <p><tt class="docutils literal"><span class="pre">gluster_storage_dir</span></tt> (defaults to <tt class="docutils literal"><span class="pre">None</span></tt>, must be <tt class="docutils literal"><span class="pre">None</span> <span class="pre">or</span> <span class="pre">String</span></tt>)</p>
-<p><tt class="docutils literal"><span class="pre">hidden_os</span></tt> (defaults to <tt class="docutils literal"><span class="pre">None</span></tt>, must be <tt class="docutils literal"><span class="pre">None</span> <span class="pre">or</span> <span class="pre">(List</span> <span class="pre">of</span> <span class="pre">(Tuple</span> <span class="pre">of</span> <span class="pre">((<OneOf</span> <span class="pre">add,</span> <span class="pre">remove</span> <span class="pre"><function</span> <span class="pre">fn</span> <span class="pre">at</span> <span class="pre">0x29d02a8>>,</span> <span class="pre"><NonEmptyString</span> <span class="pre"><String</span> <span class="pre">and</span> <span class="pre">EvalToTrue</span> <span class="pre"><function</span> <span class="pre">fn</span> <span class="pre">at</span> <span class="pre">0x29c8cf8>>>))))</span></tt>)</p>
+<p><tt class="docutils literal"><span class="pre">hidden_os</span></tt> (defaults to <tt class="docutils literal"><span class="pre">None</span></tt>, must be <tt class="docutils literal"><span class="pre">None</span> <span class="pre">or</span> <span class="pre">(List</span> <span class="pre">of</span> <span class="pre">(Tuple</span> <span class="pre">of</span> <span class="pre">((<OneOf</span> <span class="pre">add,</span> <span class="pre">remove</span> <span class="pre"><function</span> <span class="pre">fn</span> <span class="pre">at</span> <span class="pre">0x2359320>>,</span> <span class="pre"><NonEmptyString</span> <span class="pre"><String</span> <span class="pre">and</span> <span class="pre">EvalToTrue</span> <span class="pre"><function</span> <span class="pre">fn</span> <span class="pre">at</span> <span class="pre">0x2350d70>>>))))</span></tt>)</p>
 <blockquote>
 <div>Modify list of hidden operating systems: each modification must have two items, the operation and the OS name; the operation can be add or remove</div></blockquote>
 <p><tt class="docutils literal"><span class="pre">hv_state</span></tt> (defaults to <tt class="docutils literal"><span class="pre">None</span></tt>, must be <tt class="docutils literal"><span class="pre">None</span> <span class="pre">or</span> <span class="pre">(Dictionary</span> <span class="pre">with</span> <span class="pre">keys</span> <span class="pre">of</span> <span class="pre">Anything</span> <span class="pre">and</span> <span class="pre">values</span> <span class="pre">of</span> <span class="pre">Anything)</span></tt>)</p>
@@ -857,14 +857,14 @@
 <p><tt class="docutils literal"><span class="pre">prealloc_wipe_disks</span></tt> (defaults to <tt class="docutils literal"><span class="pre">None</span></tt>, must be <tt class="docutils literal"><span class="pre">None</span> <span class="pre">or</span> <span class="pre">Boolean</span></tt>)</p>
 <blockquote>
 <div>Whether to wipe disks before allocating them to instances</div></blockquote>
-<p><tt class="docutils literal"><span class="pre">remove_uids</span></tt> (defaults to <tt class="docutils literal"><span class="pre">None</span></tt>, must be <tt class="docutils literal"><span class="pre">None</span> <span class="pre">or</span> <span class="pre">(List</span> <span class="pre">of</span> <span class="pre">(Tuple</span> <span class="pre">of</span> <span class="pre">((<Integer</span> <span class="pre"><function</span> <span class="pre">TInt</span> <span class="pre">at</span> <span class="pre">0x29c85f0>>,</span> <span class="pre"><Integer</span> <span class="pre"><function</span> <span class="pre">TInt</span> <span class="pre">at</span> <span class="pre">0x29c85f0>>))))</span></tt>)</p>
+<p><tt class="docutils literal"><span class="pre">remove_uids</span></tt> (defaults to <tt class="docutils literal"><span class="pre">None</span></tt>, must be <tt class="docutils literal"><span class="pre">None</span> <span class="pre">or</span> <span class="pre">(List</span> <span class="pre">of</span> <span class="pre">(Tuple</span> <span class="pre">of</span> <span class="pre">((<Integer</span> <span class="pre"><function</span> <span class="pre">TInt</span> <span class="pre">at</span> <span class="pre">0x2350668>>,</span> <span class="pre"><Integer</span> <span class="pre"><function</span> <span class="pre">TInt</span> <span class="pre">at</span> <span class="pre">0x2350668>>))))</span></tt>)</p>
 <blockquote>
 <div>Shrink UID pool, must be list of lists describing UID ranges (two items, start and end inclusive) to be removed</div></blockquote>
 <p><tt class="docutils literal"><span class="pre">reserved_lvs</span></tt> (defaults to <tt class="docutils literal"><span class="pre">None</span></tt>, must be <tt class="docutils literal"><span class="pre">None</span> <span class="pre">or</span> <span class="pre">(List</span> <span class="pre">of</span> <span class="pre">NonEmptyString)</span></tt>)</p>
 <blockquote>
 <div>List of reserved LVs</div></blockquote>
 <p><tt class="docutils literal"><span class="pre">shared_file_storage_dir</span></tt> (defaults to <tt class="docutils literal"><span class="pre">None</span></tt>, must be <tt class="docutils literal"><span class="pre">None</span> <span class="pre">or</span> <span class="pre">String</span></tt>)</p>
-<p><tt class="docutils literal"><span class="pre">uid_pool</span></tt> (defaults to <tt class="docutils literal"><span class="pre">None</span></tt>, must be <tt class="docutils literal"><span class="pre">None</span> <span class="pre">or</span> <span class="pre">(List</span> <span class="pre">of</span> <span class="pre">(Tuple</span> <span class="pre">of</span> <span class="pre">((<Integer</span> <span class="pre"><function</span> <span class="pre">TInt</span> <span class="pre">at</span> <span class="pre">0x29c85f0>>,</span> <span class="pre"><Integer</span> <span class="pre"><function</span> <span class="pre">TInt</span> <span class="pre">at</span> <span class="pre">0x29c85f0>>))))</span></tt>)</p>
+<p><tt class="docutils literal"><span class="pre">uid_pool</span></tt> (defaults to <tt class="docutils literal"><span class="pre">None</span></tt>, must be <tt class="docutils literal"><span class="pre">None</span> <span class="pre">or</span> <span class="pre">(List</span> <span class="pre">of</span> <span class="pre">(Tuple</span> <span class="pre">of</span> <span class="pre">((<Integer</span> <span class="pre"><function</span> <span class="pre">TInt</span> <span class="pre">at</span> <span class="pre">0x2350668>>,</span> <span class="pre"><Integer</span> <span class="pre"><function</span> <span class="pre">TInt</span> <span class="pre">at</span> <span class="pre">0x2350668>>))))</span></tt>)</p>
 <blockquote>
 <div>Set UID pool, must be list of lists describing UID ranges (two items, start and end inclusive)</div></blockquote>
 <p><tt class="docutils literal"><span class="pre">use_external_mip_script</span></tt> (defaults to <tt class="docutils literal"><span class="pre">None</span></tt>, must be <tt class="docutils literal"><span class="pre">None</span> <span class="pre">or</span> <span class="pre">Boolean</span></tt>)</p>
@@ -1063,7 +1063,7 @@
 <blockquote>
 <div>Default node parameters for group</div></blockquote>
 <p>Job result:</p>
-<p><tt class="docutils literal"><span class="pre">List</span> <span class="pre">of</span> <span class="pre">(Tuple</span> <span class="pre">of</span> <span class="pre">((<NonEmptyString</span> <span class="pre"><String</span> <span class="pre">and</span> <span class="pre">EvalToTrue</span> <span class="pre"><function</span> <span class="pre">fn</span> <span class="pre">at</span> <span class="pre">0x29c8cf8>>>,</span> <span class="pre"><Anything</span> <span class="pre"><function</span> <span class="pre">TAny</span> <span class="pre">at</span> <span class="pre">0x29c8398>>)))</span></tt></p>
+<p><tt class="docutils literal"><span class="pre">List</span> <span class="pre">of</span> <span class="pre">(Tuple</span> <span class="pre">of</span> <span class="pre">((<NonEmptyString</span> <span class="pre"><String</span> <span class="pre">and</span> <span class="pre">EvalToTrue</span> <span class="pre"><function</span> <span class="pre">fn</span> <span class="pre">at</span> <span class="pre">0x2350d70>>>,</span> <span class="pre"><Anything</span> <span class="pre"><function</span> <span class="pre">TAny</span> <span class="pre">at</span> <span class="pre">0x2350410>>)))</span></tt></p>
 </div>
 </div>
 <div class="section" id="groups-group-name-rename">
@@ -2009,7 +2009,7 @@
 <p><tt class="docutils literal"><span class="pre">depends</span></tt> (defaults to <tt class="docutils literal"><span class="pre">None</span></tt>, must be <tt class="docutils literal"><span class="pre">None</span> <span class="pre">or</span> <span class="pre">(List</span> <span class="pre">of</span> <span class="pre">(((List</span> <span class="pre">of</span> <span class="pre">Anything)</span> <span class="pre">or</span> <span class="pre">Tuple)</span> <span class="pre">and</span> <span class="pre">(Length</span> <span class="pre">2)</span> <span class="pre">and</span> <span class="pre">(Item</span> <span class="pre">0</span> <span class="pre">is</span> <span class="pre">(JobId</span> <span class="pre">or</span> <span class="pre">RelativeJobId),</span> <span class="pre">item</span> <span class="pre">1</span> <span class="pre">is</span> <span class="pre">(List</span> <span class="pre">of</span> <span class="pre">(OneOf</span> <span class="pre">canceled,</span> <span class="pre">success,</span> <span class="pre">error)))))</span></tt>)</p>
 <blockquote>
 <div>Job dependencies; if used through <tt class="docutils literal"><span class="pre">SubmitManyJobs</span></tt> relative (negative) job IDs can be used; see <a class="reference internal" href="design-chained-jobs.html"><em>design document</em></a> for details</div></blockquote>
-<p><tt class="docutils literal"><span class="pre">disks</span></tt> (defaults to <tt class="docutils literal"><span class="pre">[]</span></tt>, must be <tt class="docutils literal"><span class="pre">List</span> <span class="pre">of</span> <span class="pre">(EqualOrGreaterThanZero</span> <span class="pre">and</span> <span class="pre">(<function</span> <span class="pre"><lambda></span> <span class="pre">at</span> <span class="pre">0x29cbed8>))</span></tt>)</p>
+<p><tt class="docutils literal"><span class="pre">disks</span></tt> (defaults to <tt class="docutils literal"><span class="pre">[]</span></tt>, must be <tt class="docutils literal"><span class="pre">List</span> <span class="pre">of</span> <span class="pre">(EqualOrGreaterThanZero</span> <span class="pre">and</span> <span class="pre">(<function</span> <span class="pre"><lambda></span> <span class="pre">at</span> <span class="pre">0x2355f50>))</span></tt>)</p>
 <blockquote>
 <div>List of disk indices</div></blockquote>
 <p><tt class="docutils literal"><span class="pre">early_release</span></tt> (defaults to <tt class="docutils literal"><span class="pre">False</span></tt>, must be <tt class="docutils literal"><span class="pre">Boolean</span></tt>)</p>
@@ -2063,7 +2063,7 @@
 <p>Takes the bool parameter <tt class="docutils literal"><span class="pre">ignore_size</span></tt>. When set ignore the recorded
 size (useful for forcing activation when recorded size is wrong).</p>
 <p>Job result:</p>
-<p><tt class="docutils literal"><span class="pre">List</span> <span class="pre">of</span> <span class="pre">(Tuple</span> <span class="pre">of</span> <span class="pre">((<NonEmptyString</span> <span class="pre"><String</span> <span class="pre">and</span> <span class="pre">EvalToTrue</span> <span class="pre"><function</span> <span class="pre">fn</span> <span class="pre">at</span> <span class="pre">0x29c8cf8>>>,</span> <span class="pre"><NonEmptyString</span> <span class="pre"><String</span> <span class="pre">and</span> <span class="pre">EvalToTrue</span> <span class="pre"><function</span> <span class="pre">fn</span> <span class="pre">at</span> <span class="pre">0x29c8cf8>>>,</span> <span class="pre"><NonEmptyString</span> <span class="pre"><String</span> <span class="pre">and</span> <span class="pre">EvalToTrue</span> <span class="pre"><function</span> <span class="pre">fn</span> <span class="pre">at</span> <span class="pre">0x29c8cf8>>>)))</span></tt></p>
+<p><tt class="docutils literal"><span class="pre">List</span> <span class="pre">of</span> <span class="pre">(Tuple</span> <span class="pre">of</span> <span class="pre">((<NonEmptyString</span> <span class="pre"><String</span> <span class="pre">and</span> <span class="pre">EvalToTrue</span> <span class="pre"><function</span> <span class="pre">fn</span> <span class="pre">at</span> <span class="pre">0x2350d70>>>,</span> <span class="pre"><NonEmptyString</span> <span class="pre"><String</span> <span class="pre">and</span> <span class="pre">EvalToTrue</span> <span class="pre"><function</span> <span class="pre">fn</span> <span class="pre">at</span> <span class="pre">0x2350d70>>>,</span> <span class="pre"><NonEmptyString</span> <span class="pre"><String</span> <span class="pre">and</span> <span class="pre">EvalToTrue</span> <span class="pre"><function</span> <span class="pre">fn</span> <span class="pre">at</span> <span class="pre">0x2350d70>>>)))</span></tt></p>
 </div>
 </div>
 <div class="section" id="instances-instance-name-deactivate-disks">
@@ -2169,6 +2169,9 @@
 <p><tt class="docutils literal"><span class="pre">depends</span></tt> (defaults to <tt class="docutils literal"><span class="pre">None</span></tt>, must be <tt class="docutils literal"><span class="pre">None</span> <span class="pre">or</span> <span class="pre">(List</span> <span class="pre">of</span> <span class="pre">(((List</span> <span class="pre">of</span> <span class="pre">Anything)</span> <span class="pre">or</span> <span class="pre">Tuple)</span> <span class="pre">and</span> <span class="pre">(Length</span> <span class="pre">2)</span> <span class="pre">and</span> <span class="pre">(Item</span> <span class="pre">0</span> <span class="pre">is</span> <span class="pre">(JobId</span> <span class="pre">or</span> <span class="pre">RelativeJobId),</span> <span class="pre">item</span> <span class="pre">1</span> <span class="pre">is</span> <span class="pre">(List</span> <span class="pre">of</span> <span class="pre">(OneOf</span> <span class="pre">canceled,</span> <span class="pre">success,</span> <span class="pre">error)))))</span></tt>)</p>
 <blockquote>
 <div>Job dependencies; if used through <tt class="docutils literal"><span class="pre">SubmitManyJobs</span></tt> relative (negative) job IDs can be used; see <a class="reference internal" href="design-chained-jobs.html"><em>design document</em></a> for details</div></blockquote>
+<p><tt class="docutils literal"><span class="pre">ignore_ipolicy</span></tt> (defaults to <tt class="docutils literal"><span class="pre">False</span></tt>, must be <tt class="docutils literal"><span class="pre">Boolean</span></tt>)</p>
+<blockquote>
+<div>Whether to ignore ipolicy violations</div></blockquote>
 <p><tt class="docutils literal"><span class="pre">instance_uuid</span></tt> (defaults to <tt class="docutils literal"><span class="pre">None</span></tt>, must be <tt class="docutils literal"><span class="pre">None</span> <span class="pre">or</span> <span class="pre">NonEmptyString</span></tt>)</p>
 <blockquote>
 <div>An instance UUID (for single-instance LUs)</div></blockquote>
@@ -2274,7 +2277,7 @@
 <blockquote>
 <div>The variable part of time to wait before declaring the zeroing operation to have failed, dependent on total size of disks</div></blockquote>
 <p>Job result:</p>
-<p><tt class="docutils literal"><span class="pre">Tuple</span> <span class="pre">of</span> <span class="pre">((<Boolean</span> <span class="pre"><function</span> <span class="pre">TBool</span> <span class="pre">at</span> <span class="pre">0x29c8578>>,</span> <span class="pre"><List</span> <span class="pre">of</span> <span class="pre">Boolean</span> <span class="pre"><List</span> <span class="pre">and</span> <span class="pre">(<function</span> <span class="pre"><lambda></span> <span class="pre">at</span> <span class="pre">0x29565f0>)</span> <span class="pre"><function</span> <span class="pre">fn</span> <span class="pre">at</span> <span class="pre">0x2956668>>>))</span></tt></p>
+<p><tt class="docutils literal"><span class="pre">Tuple</span> <span class="pre">of</span> <span class="pre">((<Boolean</span> <span class="pre"><function</span> <span class="pre">TBool</span> <span class="pre">at</span> <span class="pre">0x23505f0>>,</span> <span class="pre"><List</span> <span class="pre">of</span> <span class="pre">Boolean</span> <span class="pre"><List</span> <span class="pre">and</span> <span class="pre">(<function</span> <span class="pre"><lambda></span> <span class="pre">at</span> <span class="pre">0x24f6668>)</span> <span class="pre"><function</span> <span class="pre">fn</span> <span class="pre">at</span> <span class="pre">0x24f66e0>>>))</span></tt></p>
 </div>
 </div>
 <div class="section" id="instances-instance-name-migrate">
@@ -2522,7 +2525,7 @@
 <blockquote>
 <div>Whether to wait for the disk to synchronize</div></blockquote>
 <p>Job result:</p>
-<p><tt class="docutils literal"><span class="pre">List</span> <span class="pre">of</span> <span class="pre">(Tuple</span> <span class="pre">of</span> <span class="pre">((<NonEmptyString</span> <span class="pre"><String</span> <span class="pre">and</span> <span class="pre">EvalToTrue</span> <span class="pre"><function</span> <span class="pre">fn</span> <span class="pre">at</span> <span class="pre">0x29c8cf8>>>,</span> <span class="pre"><Anything</span> <span class="pre"><function</span> <span class="pre">TAny</span> <span class="pre">at</span> <span class="pre">0x29c8398>>)))</span></tt></p>
+<p><tt class="docutils literal"><span class="pre">List</span> <span class="pre">of</span> <span class="pre">(Tuple</span> <span class="pre">of</span> <span class="pre">((<NonEmptyString</span> <span class="pre"><String</span> <span class="pre">and</span> <span class="pre">EvalToTrue</span> <span class="pre"><function</span> <span class="pre">fn</span> <span class="pre">at</span> <span class="pre">0x2350d70>>>,</span> <span class="pre"><Anything</span> <span class="pre"><function</span> <span class="pre">TAny</span> <span class="pre">at</span> <span class="pre">0x2350410>>)))</span></tt></p>
 </div>
 </div>
 <div class="section" id="instances-instance-name-console">
@@ -3053,7 +3056,7 @@
 be a job id.</p>
 <p>It supports the bool <tt class="docutils literal"><span class="pre">force</span></tt> argument.</p>
 <p>Job result:</p>
-<p><tt class="docutils literal"><span class="pre">List</span> <span class="pre">of</span> <span class="pre">(Tuple</span> <span class="pre">of</span> <span class="pre">((<NonEmptyString</span> <span class="pre"><String</span> <span class="pre">and</span> <span class="pre">EvalToTrue</span> <span class="pre"><function</span> <span class="pre">fn</span> <span class="pre">at</span> <span class="pre">0x29c8cf8>>>,</span> <span class="pre"><Anything</span> <span class="pre"><function</span> <span class="pre">TAny</span> <span class="pre">at</span> <span class="pre">0x29c8398>>)))</span></tt></p>
+<p><tt class="docutils literal"><span class="pre">List</span> <span class="pre">of</span> <span class="pre">(Tuple</span> <span class="pre">of</span> <span class="pre">((<NonEmptyString</span> <span class="pre"><String</span> <span class="pre">and</span> <span class="pre">EvalToTrue</span> <span class="pre"><function</span> <span class="pre">fn</span> <span class="pre">at</span> <span class="pre">0x2350d70>>>,</span> <span class="pre"><Anything</span> <span class="pre"><function</span> <span class="pre">TAny</span> <span class="pre">at</span> <span class="pre">0x2350410>>)))</span></tt></p>
 </div>
 </div>
 <div class="section" id="nodes-node-name-modify">
@@ -3122,7 +3125,7 @@
 <blockquote>
 <div>Whether node can host instances</div></blockquote>
 <p>Job result:</p>
-<p><tt class="docutils literal"><span class="pre">List</span> <span class="pre">of</span> <span class="pre">(Tuple</span> <span class="pre">of</span> <span class="pre">((<NonEmptyString</span> <span class="pre"><String</span> <span class="pre">and</span> <span class="pre">EvalToTrue</span> <span class="pre"><function</span> <span class="pre">fn</span> <span class="pre">at</span> <span class="pre">0x29c8cf8>>>,</span> <span class="pre"><Anything</span> <span class="pre"><function</span> <span class="pre">TAny</span> <span class="pre">at</span> <span class="pre">0x29c8398>>)))</span></tt></p>
+<p><tt class="docutils literal"><span class="pre">List</span> <span class="pre">of</span> <span class="pre">(Tuple</span> <span class="pre">of</span> <span class="pre">((<NonEmptyString</span> <span class="pre"><String</span> <span class="pre">and</span> <span class="pre">EvalToTrue</span> <span class="pre"><function</span> <span class="pre">fn</span> <span class="pre">at</span> <span class="pre">0x2350d70>>>,</span> <span class="pre"><Anything</span> <span class="pre"><function</span> <span class="pre">TAny</span> <span class="pre">at</span> <span class="pre">0x2350410>>)))</span></tt></p>
 </div>
 </div>
 <div class="section" id="nodes-node-name-storage">
@@ -4074,7 +4077,7 @@
         <li class="right" >
           <a href="ovfconverter.html" title="OVF converter"
              >previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>
     <div class="footer">
diff -Nru ganeti-2.12.0/doc/html/search.html ganeti-2.12.3/doc/html/search.html
--- ganeti-2.12.0/doc/html/search.html	2014-10-10 11:56:59.000000000 +0300
+++ ganeti-2.12.3/doc/html/search.html	2015-04-29 11:14:24.000000000 +0300
@@ -8,7 +8,7 @@
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     
-    <title>Search — Ganeti 2.12.0 documentation</title>
+    <title>Search — Ganeti 2.12.3 documentation</title>
     
     <link rel="stylesheet" href="_static/style.css" type="text/css" />
     <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
@@ -16,7 +16,7 @@
     <script type="text/javascript">
       var DOCUMENTATION_OPTIONS = {
         URL_ROOT:    '',
-        VERSION:     '2.12.0',
+        VERSION:     '2.12.3',
         COLLAPSE_INDEX: false,
         FILE_SUFFIX: '.html',
         HAS_SOURCE:  true
@@ -26,7 +26,7 @@
     <script type="text/javascript" src="_static/underscore.js"></script>
     <script type="text/javascript" src="_static/doctools.js"></script>
     <script type="text/javascript" src="_static/searchtools.js"></script>
-    <link rel="top" title="Ganeti 2.12.0 documentation" href="index.html" />
+    <link rel="top" title="Ganeti 2.12.3 documentation" href="index.html" />
   <script type="text/javascript">
     jQuery(function() { Search.loadIndex("searchindex.js"); });
   </script>
@@ -37,7 +37,7 @@
     <div class="related">
       <h3>Navigation</h3>
       <ul>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>  
 
@@ -82,7 +82,7 @@
     <div class="related">
       <h3>Navigation</h3>
       <ul>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>
     <div class="footer">
diff -Nru ganeti-2.12.0/doc/html/searchindex.js ganeti-2.12.3/doc/html/searchindex.js
--- ganeti-2.12.0/doc/html/searchindex.js	2014-10-10 11:56:59.000000000 +0300
+++ ganeti-2.12.3/doc/html/searchindex.js	2015-04-29 11:14:24.000000000 +0300
@@ -1 +1 @@
-Search.setIndex({objects:{},terms:{mastercap:37,diagos:36,vif_script:55,orthogon:[79,69],"_opexeccallback":78,cluster_verify_disk:37,untrust:[56,78],localstatedir:[63,77,24,67,15,55,34],interchang:29,four:[45,48,78,80,43,59,69],secondli:32,prefix:[8,63,37,2,24,61,78,39,58,15,55,34,22,80,10,28],sleep:79,uid_pool:[58,79],nmem:69,oldest:[77,79],forget:[43,19,55,80],whose:[36,7,37,2,24,80,58,69,82,16,83,22,11],authorit:[51,23,69],accur:77,temp_insufficient_resourc:[34,58],authoris:80,aug:34,umask:34,diskstat:[34,16],list:[56,0,23,2,3,24,42,5,58,39,69,59,7,61,28,29,30,8,85,9,44,45,40,20,46,47,82,48,13,15,49,33,34,16,35,57,50,18,43,37,77,78,79,80,54,81,11,55,38,21,22,84,52],swap:[0,64,79,80,43,82,61,11],under:[56,0,23,24,61,28,8,63,64,67,45,68,11,12,82,15,34,50,36,18,37,77,78,79,80,55,22],regrett:38,testabl:32,validateparamet:80,bootloader_arg:[37,34,43],ramdisk:16,digit:[2,34],virtio:[56,34,67,80],everi:[56,0,23,2,3,4,57,6,61,28,30,64,66,68,10,11,82,32,15,49,34,16,50,18,37,77,78,79,80,55,38],risk:[56,0,37,3,41,78,80,39,34,83,84],lookup:[34,4,23,18],dtotal:[38,43,58,85,55],opinstanceconsol:34,jack:58,seamless:[37,68],upstream:55,upgradenot:37,affect:[0,3,42,43,8,64,69,31,32,49,34,16,37,77,78,79,80,20,55,38,22,84,85],writetempfil:78,viewabl:21,maxmem:[37,34,43],macaddress:28,tani:58,fcgi:61,cmd:[34,46,80],upload:[34,15],checkparamsyntax:80,vector:[67,78],unmanag:34,libekg:16,tty1:43,verif:[63,37,2,3,79,9,81,34,61,50],"572862ee939c":37,parenthes:[33,5,77],instance_nicn_mod:2,initialis:[37,80,43,67,15,34],x86_64:[37,58],zlib:[34,64,67],instance_statu:2,clarifi:[5,34],lessen:0,net100:18,direct:[56,83,30,0,1,31,37,2,85,84,59,33,23,22,61,50,20,68],checkprereq:80,batch:[37,40,42,78,19,34,80],consequ:[34,85],second:[0,7,3,24,42,43,58,39,6,23,61,30,63,85,9,10,11,82,48,15,33,34,50,5,37,77,78,79,80,69,55,84,52],ebtabl:37,op_instance_add_mddrbd:2,custom_nicparam:[34,58],nbma:[37,34,78],even:[56,0,23,2,3,41,42,5,58,61,44,63,64,67,28,45,68,10,11,12,46,82,48,13,14,15,33,34,16,18,37,77,78,79,80,54,69,55,38,21,83,52],lesser:0,actual_st:16,hide:[33,16,78],commonnam:44,autoarch:37,asid:[62,43],aio:64,scp:[37,9],"7d582ab7eef4":43,"new":[56,0,7,2,3,4,24,42,5,58,57,69,59,83,23,80,61,28,29,30,8,63,64,65,66,9,44,45,81,68,10,40,20,12,85,48,82,31,32,13,14,54,49,33,34,16,35,50,17,36,18,43,37,77,78,79,67,73,19,11,55,38,22,84,52],symmetr:[37,34],getinstancesecondarynod:45,ever:[37,42,5,58,55,20,17],topolog:54,told:[41,80,34,22,61,69],"4b25ecb5df5c":58,pci_reserv:30,elimin:[0,37,3,15,39,34],subtre:80,abov:[56,39,7,2,3,24,43,58,0,23,61,28,8,67,44,40,20,12,46,13,15,34,16,17,36,18,37,77,78,79,80,54,19,69,55,22,84],flip:37,mem:[33,34,69,55],envelop:28,never:[12,0,7,63,37,77,3,41,78,79,80,5,15,44,34,23,68,61,84,20,85],here:[56,0,23,2,3,24,43,58,63,64,69,31,48,49,33,16,50,5,37,77,78,79,80,55,21,85],lvto:16,met:[37,8,50,82],studio:28,argv:[78,79],path:[56,23,2,59,43,46,27,61,8,63,64,67,9,81,32,82,31,48,15,54,49,34,85,36,71,72,37,78,80,73,19,55,38,22,52],ca_cert:44,use_privatekei:44,interpret:[12,36,2,42,79,80,34,16,61,84],"0af08a3d":37,dry:[34,58,8,79],haskel:[12,23,54,4,24,42,5,67,34,16],anymor:[56,57,23,37,2,3,42,80,43,33,34,16,69],use_external_mip_script:58,op_group_renam:2,loos:[40,28],precis:[63,77,78,49,34,16,10,69],keymap:34,synchronis:[29,2,48,77,80,69],permit:[37,34,69],use_dhcp:78,aka:[41,50,80],nodec:37,portabl:[22,28],signifi:[36,78,79],fbar:5,exp_size_fd:[34,61],unif:79,fbaz:5,qcow:[64,28],brought:[37,34,84,80],releas:[0,23,4,58,61,29,8,64,65,67,20,32,34,35,18,37,77,78,79,80,54,55,38,83,52],unix:[12,30,23,51,77,79,80,49,33,16,61,22],quickcheck:[5,24],total:[56,62,82,37,48,77,43,58,15,55,34,16,69],master_nam:37,unit:[23,4,24,43,58,27,85,65,68,69,32,14,33,34,16,35,37,75,77,78,79,80,38,83],highli:[37,23,79,55],asynchron:[64,77,78,80,35,61],overheat:59,describ:[56,0,23,3,4,5,58,39,7,61,28,29,8,64,65,67,9,40,20,12,46,32,14,15,69,33,34,16,57,17,36,43,37,77,78,79,80,53,51,81,11,82,38,21,83,84],would:[56,0,23,2,3,4,41,42,5,58,57,6,61,30,85,66,10,40,11,12,31,48,13,15,49,33,34,16,35,50,17,36,18,43,37,77,78,79,80,53,54,69,38,83,84],behind:[21,16,34,13],init:[56,62,8,31,37,2,64,24,77,79,80,43,67,19,55,59,38,34,22,68,85],dure:[56,0,2,4,5,58,39,59,30,8,63,65,67,45,68,69,32,31,48,13,34,17,36,18,37,77,78,79,80,53,54,81],getuidpool:79,choosen:[10,80],readi:[56,0,37,77,79,80,43,9,34,61],call:[56,0,7,2,3,5,57,23,61,28,30,8,63,85,65,67,68,10,40,69,12,31,32,15,49,33,34,16,50,17,36,18,43,37,77,78,79,80,55,38,84],greedi:17,typo:[34,32],recommend:[0,24,43,58,44,63,67,28,69,15,34,5,37,77,78,80,81,20,55,38,21,22],old_nam:2,difficulti:[33,34,48,79,80],calc:34,type:[56,23,2,40,43,58,27,1,61,28,29,30,8,48,66,68,69,46,82,31,32,33,34,16,85,36,71,5,37,72,77,78,79,80,54,55,38,21,83,84,64,7],until:[12,30,0,23,37,84,48,4,77,78,79,80,43,67,57,69,34,68,61,20,17],fastcgi:[61,13],inst5:59,inst4:[79,59],inst7:59,correspondingli:30,inst1:[37,5,7,79,59],inst3:[5,79,59],inst2:[5,7,79,59],readm:[37,34,69,55],relat:[56,39,23,3,24,0,59,60,44,29,8,63,64,65,9,28,11,12,48,15,34,36,18,37,77,78,79,80,54,81,69,21,22,84],"10gb":64,inst8:[5,7],notic:[37,8,79,28,80],br0:[18,82,37,2,58,43,9,55,28],warn:[30,8,31,43,37,3,59,24,5,58,34,33,21,85,69],verifycli:[61,13],exce:59,compatbl:58,rel:[18,14,37,79,42,58,78,5,9,25,34,22,61,52,28],implemt:3,ssconf_hypervisor:8,asyncor:[34,78],hole:[64,69],herebi:[37,56,61],overrul:5,pattern:[56,5,0,24,80],must:[56,0,7,2,40,4,24,42,5,58,39,23,60,61,44,62,83,30,63,65,9,81,68,11,12,46,82,48,13,15,33,34,35,50,17,36,18,43,37,77,78,79,80,53,19,69,55,38,22,84,52],join:[37,77,9,55,38,34,22,16],room:[11,59],err:79,restor:[0,37,2,64,41,77,80,8,55,34,61],setup:[56,0,3,4,41,43,58,61,8,64,66,9,69,46,31,15,34,36,37,77,80,54,55,22],work:[56,0,23,3,4,24,42,43,58,39,59,6,1,61,28,62,8,64,68,40,11,48,31,41,32,13,15,49,33,34,16,35,17,72,37,77,78,79,80,54,69,55,38,21,22,84,85],network_vlan:[34,58],spec:[34,58,77,78,69],stonith:41,conceptu:43,coalesc:84,raid1:51,instance_disk:60,unwant:[43,22,79],slash:[24,78,69],rework:[34,69],root:[56,3,43,58,61,30,85,9,68,46,47,13,15,34,16,37,77,78,79,80,19,55,22,52],overrid:[56,62,18,3,32,77,78,79,80,58,15,81,69,34,16,68,28,17],defer:[77,78,80],hlint:[5,24],give:[56,0,23,3,24,5,58,8,66,67,69,32,34,16,35,36,18,37,77,78,79,55,38],ovfexport:28,synchron:[36,64,42,79,78,58,33,34,16,80,83,68],gntmasterd:77,corollari:[23,80],indic:[12,36,60,37,3,58,80,56,33,34,16,61,50,20],assuredli:0,aaaa:9,"117d":43,unavail:[33,34,23,52],want:[56,0,2,3,41,42,43,59,69,29,8,85,66,67,20,32,48,49,34,16,35,18,5,37,77,78,79,80,54,11,55,21,22],generateselfsignedsslcert:78,keep:[56,0,23,2,3,24,5,57,6,60,61,30,63,64,65,10,69,12,48,32,13,33,34,16,17,18,37,77,78,79,80,54],czf:8,"_autoconf":15,groupmembership:34,hvm_cdrom_image_path:[34,80],end:[56,0,23,24,43,58,6,61,28,30,63,10,69,15,33,34,5,37,77,78,79,80,54,19,11,83,84],manipul:[36,30,37,3,79,67,20],pygrub:37,hackag:[34,67],ordinari:[5,0,77],faulti:[34,41],classifi:[37,48],how:[56,0,3,4,5,58,39,6,61,44,29,30,85,28,45,68,11,12,82,32,13,54,34,16,17,51,77,78,79,80,37,69,55,38,84],hot:[34,69],custom_ndparam:58,recoveri:[37,80],env:2,vastli:34,answer:[0,23,37,78,79,80,34,16,47,22,69],verifi:[0,2,3,43,58,39,59,61,44,8,63,67,9,28,40,11,15,34,57,50,36,37,77,78,79,80,53,19,69,22,84,52],more:[56,0,23,2,3,4,24,42,5,58,39,6,60,80,61,30,8,63,48,66,9,45,68,10,20,12,85,46,82,41,32,13,15,54,69,33,34,16,35,50,17,36,18,43,37,77,78,79,67,51,81,11,55,38,21,22,84,64],ancestor:68,config:[56,57,23,2,3,24,43,58,60,28,30,8,64,65,66,67,45,15,34,16,37,77,79,80,19,55,21,85],bindir:67,updat:[56,23,3,41,42,43,61,28,30,8,63,85,67,69,46,31,24,48,54,34,16,5,37,77,78,79,80,53,73,19,55,84],grown:[34,61,13],mybigtyp:5,recogn:[56,62,39,79,55,35],haven:[8,54,3,15,55,16],x509:[29,1,78,58,19,34,61,44],after:[56,0,23,2,3,4,5,58,57,59,6,61,28,29,30,8,63,85,67,9,81,10,11,12,48,31,83,32,13,49,33,34,16,50,17,36,43,37,77,78,79,80,19,69,55,38,22,52],openvswitch:[58,55,11,66],superus:58,diagram:77,befor:[56,0,23,2,3,4,24,5,58,39,59,6,61,29,30,8,63,65,67,9,45,11,12,31,83,32,13,34,16,35,57,50,17,43,37,77,78,79,80,53,54,69,55,38,21,22,84,52],wrong:[56,8,43,37,41,79,80,5,58,6,34,16,84,69],ova:[21,28],ovf:[21,34,0,28,29],"4rcf":37,parallel:[56,0,7,2,4,42,39,61,8,65,67,34,35,17,37,77,78,79,80,73,81,83],demonstr:[4,79],handl:[0,23,2,3,4,41,43,39,59,6,61,28,30,8,63,85,65,9,68,40,20,12,31,48,14,34,35,57,17,36,18,37,77,78,79,80,54,69,55,38,22,84],source_cert:78,attempt:[0,23,48,79,80,43,58,39,59,38,34,68,52],custom_ipolici:58,third:[30,0,7,37,84,48,42,58,78,9,81,34,22,80,61,44],"_ip":80,classmethod:80,opaqu:[48,61],grant:[23,32,80,43,58,34,22],credenti:[56,34,20],pvgrub:[37,34],imposs:[56,30,0,77,42,79,78,49,21,80,44],perform:[56,0,23,3,4,41,43,39,27,6,1,61,28,62,63,64,66,45,68,11,12,48,82,31,32,15,49,34,16,57,83,17,36,18,37,77,78,79,80,69,55,38,22,84,85,7],unpaus:63,maintain:[56,57,18,37,77,3,41,78,79,80,5,58,34,11],environ:[56,36,0,18,37,2,64,32,78,79,80,39,43,58,15,55,34,46,61,60,68],reloc:[7,82,37,2,48,79,43,58,55],enter:[34,80,20,43],exclus:[56,23,73,77,48,65,78,79,80,69,55,6,34,11],spindle_ratio:[69,11],first:[56,0,7,3,4,42,5,58,69,6,23,80,61,28,30,8,63,64,66,9,45,10,20,12,85,48,82,32,49,34,16,50,17,18,43,37,77,78,79,67,54,11,55,84,52],order:[56,39,23,2,40,42,5,58,57,59,7,60,28,62,29,30,8,63,64,65,67,45,68,10,20,12,48,82,31,32,69,33,34,16,50,17,36,18,43,37,77,78,79,80,54,19,11,55,38,21,22,84,85],op_network_remov:[2,18],origin:[0,7,63,37,48,32,42,13,5,46,49,34,22,35,50,20,17],macaddr:56,composit:[38,5],feedback:[63,77,78,13,34,35,61],instance_nicn_network:[2,18],softwar:[56,1,41,5,59,61,44,8,64,67,28,69,13,34,16,18,37,78,80,55,21,22],diagnos:[36,37,77,78,15,34],consent:84,over:[56,0,23,2,3,43,58,39,6,60,30,64,9,10,20,46,54,34,16,35,83,36,5,37,77,78,79,80,51,69,38,22,84,85],failur:[56,0,7,2,3,41,43,58,23,62,63,68,11,48,33,34,35,50,17,5,37,78,79,80,54,69,82,38,84],becaus:[56,0,23,3,43,58,39,30,85,68,40,69,12,49,34,16,57,37,77,78,79,80,53,54,21,22],addinstancedisk:45,privileg:[56,30,46,77,78,80,15,34,22],appar:[57,44],flexibl:[56,78,80,33,34,16,69],vari:[82,37,4,79,80,19,55,34,16,69],digest:[3,58],sha1sum:28,streamlin:85,bottleneck:80,cli:[56,39,31,80,37,42,78,51,15,33,68,35],fit:[38,34,40,80,56],ganeti_instance_hv_use_bootload:2,drbd_usermode_help:34,fix:[56,0,23,4,43,58,61,30,8,85,69,32,48,15,34,16,50,37,78,79,80,84],inadvert:50,better:[0,23,3,41,42,43,39,61,28,64,67,68,82,15,33,34,16,17,5,77,78,79,80,55,38,84,85],crlsign:44,drawback:[33,3,35,60],vmdk:[21,64,28],persist:[0,23,63,64,79,34,16,20],comprehens:[37,29],verifyconfig:45,hidden:[54,34,58,78],easier:[12,56,39,7,18,37,85,32,78,79,13,58,15,69,55,34,23,80,61,11],inadverd:79,count:[37,64,77,58,69,82,34,16,83,11],them:[56,0,23,2,3,4,24,42,5,58,57,59,6,60,61,28,30,8,63,85,65,67,44,45,81,68,10,40,20,41,32,13,15,49,34,16,83,17,36,43,37,77,78,79,80,53,54,19,69,55,38,22,84],scrutinis:80,thei:[56,0,7,2,3,4,24,5,58,39,23,60,61,28,30,8,63,85,65,67,44,45,68,10,11,12,48,82,31,41,32,13,14,15,49,33,34,16,18,43,37,77,78,79,80,19,69,55,38,83,84],proce:[0,80,37,48,4,77,42,79,78,43,9,55,6,34,35,84,17],promin:56,safe:[12,56,0,43,37,65,41,13,5,58,69,34,83,80,84,28,17],radosblockdevic:31,mergedread:16,"break":[56,54,80,37,3,24,42,79,78,5,58,69,55,33,34,83,35,38,11,17],band:[51,34,15,59],bang:5,glorifi:5,"9second":80,closer:[77,28],interrupt:[0,37,77,34,84,28],hvm_acpi:[34,80],d55d:55,choic:[56,36,23,0,1,63,61,3,48,42,13,5,55,34,7,16,80,10,68,28],drbdsetup:[37,34,69,43],use_bootload:[34,43],categori:[56,29,47,31,36,37,79,15,16,69],acquisit:[83,23],instance20:37,hscolour:24,timeout:[56,39,23,2,77,79,80,58,0,55,59,34,83,61],each:[56,0,7,2,3,4,42,5,58,39,69,59,23,60,61,28,30,8,63,64,66,67,44,68,10,20,12,48,82,31,32,13,15,49,33,34,16,35,50,17,36,18,43,37,77,78,79,80,54,19,11,55,38,22,84,85],debug:[56,30,39,37,4,24,42,79,78,81,6,34,80,61],higher:[8,63,37,84,64,32,77,79,80,67,34,10,69],side:[12,56,32,80,40,4,41,42,79,67,5,58,39,33,34,78,61,69],mean:[0,23,3,4,41,43,58,57,59,60,61,28,62,30,8,63,65,66,45,68,11,12,48,82,32,54,33,34,16,35,50,17,5,37,77,78,79,80,51,81,69,55,38,22,84,52],nochang:80,instance_query_data:37,inexist:34,migration_port:[34,55],resum:[37,34,61,23,63],enorm:28,free_count:58,op_node_migr:2,group:[0,7,2,24,42,5,58,57,59,6,23,62,29,8,64,66,11,82,31,48,14,33,34,16,83,17,36,18,43,37,75,77,78,79,80,53,69,55,38,22,84,85],target_node_uuid:58,vote:[37,34,79,80],htool:[29,82,43,37,77,48,24,42,14,15,63,55,49,34,10,69,17],your_ip_address:55,xmem:69,ignore_remove_failur:58,ommit:59,collector:[47,31,72,37,73,82,49,34,16],tgz:56,contend:78,network:[56,0,2,3,41,43,58,39,60,61,28,30,8,64,67,73,11,46,82,32,13,15,54,33,34,16,36,18,37,77,78,79,80,51,69,55,38,21,22],goe:[8,43,37,84,63,80,5,49,6,10],newli:[30,0,23,18,31,37,3,77,79,80,14,9,19,55,34,10,85,69],segtyp:16,dss:9,predefin:[56,13],content:[56,0,23,2,3,4,41,42,5,58,39,69,60,61,28,30,63,85,66,9,44,45,81,68,10,40,20,12,46,82,31,32,13,14,49,33,34,16,35,57,83,17,36,18,43,37,77,78,79,80,53,19,11,55,38,21,22,84,52],rewrit:[34,61,80],laid:32,adjust:[56,64,24,78,79,15,69,55,34,11],dsk:79,dsh:[37,8],reader:[56,35,7,42],got:[37,34,77],opensslcompress:67,impract:37,multilin:5,kernel_minor:16,unwarr:11,linear:23,barrier:[34,64,79,69],worthwhil:0,initscript:68,attoparsec:67,precaut:[22,52],situat:[56,0,1,3,4,41,42,43,57,59,23,85,67,69,12,32,15,34,16,37,77,78,79,80,55,83,84,52],free:[0,23,43,58,62,85,10,69,46,48,15,33,34,16,18,5,37,77,78,80,11,82,38,21,52],ineffici:23,kvm_cmd:30,small:[8,0,54,43,37,61,48,77,78,79,80,5,15,69,34,46,10,28,17],fixm:69,virtio_net_queu:34,hv_kvm:31,undocu:34,fcff:55,repeat:[63,5,55,33,50,69],md5:58,precompil:64,reconfigur:[43,28],node2:[43,37,38,58,82,59,33],workaround:[56,34,30,69,80],iss:34,openssh:[37,24,67,19,78],your_network:55,openssl:[0,78,67,13,58,19,34,44],node4:[37,7,59],filter:[12,29,0,23,63,37,85,48,79,38,58,55,34,33,1,22,84,20],renew:[8,3,77,53,19,34,68,81,44],fuse:[38,34],iso:[34,28,80],unabl:[37,43,61],ism:34,unknown:[77,79,80,43,58,59,33,21,34,61],regress:[34,79],temporari:[30,0,41,24,80,58,69,34,83,28,17],differnt:[34,63],confus:[54,3,24,42,81,68,69],caught:32,user:[56,0,7,2,3,59,58,39,26,27,60,61,28,62,29,30,8,48,66,67,68,69,12,46,31,32,13,15,49,33,34,16,35,57,18,37,77,78,79,80,53,54,82,22,84,85],pristin:[56,80],rang:[18,37,77,78,79,50,58,34,16,61,22],instance_nam:[7,37,2,78,80,58,34],abolish:77,render:[43,68],mkdir:55,independ:[12,56,0,23,63,51,77,78,80,11,59,34,16,60,28],wast:[38,0],thereof:23,eui:18,restrict:[56,0,7,3,4,42,23,61,30,63,85,68,10,69,48,34,17,37,77,78,80,54,81,11,55,22,52],hook:[56,29,18,37,2,3,41,77,79,78,43,15,34,22,60],reinitialis:37,alreadi:[56,0,23,3,24,42,5,58,39,59,61,30,8,63,64,67,68,10,40,20,12,48,82,32,14,15,69,33,34,16,35,17,36,18,37,77,78,79,80,54,11,55,38,83,84,85],wrapper:[37,34,68,61,45],wasn:[34,79,43],agre:80,primari:[56,7,2,43,58,59,61,64,69,82,31,48,33,34,16,17,36,37,77,79,80,81,20,55,84],ifac:55,total_cpu:82,optim:[0,63,64,79,80,28,82,85,69],rewritten:[34,23],wildli:69,top:[56,30,0,37,64,24,79,80,5,57,45,34,10,69,17],sometim:[56,23,37,78,79,80,43,59,34,16,69],downsid:15,setnodeparam:79,master:[56,0,23,2,3,4,41,42,43,58,57,59,6,61,44,30,8,63,65,9,81,68,10,46,82,32,13,15,54,33,34,16,35,17,36,18,37,77,78,79,80,51,19,55,22,84],too:[39,23,5,58,61,44,30,8,65,66,69,32,48,15,33,34,16,50,36,37,78,79,80,54,20,55],ip_check:[34,58],similarli:[56,36,63,37,32,77,5,34,10,69],"0x29c8398":58,outag:16,tidiskparam:34,listen:[12,56,37,77,78,13,15,55,38,34,22,61,68],iptabl:[56,22,61,78],"0x29c8578":58,consol:[43,37,77,79,53,51,58,54,55,34],fdsend:[34,30,67],namespac:[2,78,79,80,55,68],sdd1:55,tool:[56,0,23,42,5,58,25,26,6,1,69,28,29,8,64,66,9,68,10,20,46,31,32,15,49,34,16,17,36,18,71,43,37,72,77,79,80,51,81,11,55,21,22,84],use_dchp:78,lighttpd:[61,44,13],lower:[0,55,82,37,2,4,77,78,79,8,44,32,69,10,84,11],net101:18,sched_setaffin:50,task:[12,56,8,23,31,63,37,32,77,66,79,80,39,51,0,59,57,28],incur:[23,31],queryjob:[34,78,80],somewhat:[37,77,79,9,15,61,69],termin:[12,23,37,24,78,80,58,34],dump_certificate_request:44,oversubscript:[34,69],technic:[54,3,32,79,35,10],breaker:20,cluster_redist_conf:37,vcpu_ratio:[69,11],x509_check_private_kei:44,target:[0,7,2,3,24,5,58,39,61,29,30,68,11,48,34,35,17,36,43,37,77,79,80,69,55,38,83,84],keyword:[5,55,80],provid:[56,0,23,2,3,4,41,5,58,57,59,6,61,28,29,8,63,48,67,44,68,10,20,46,47,82,31,32,13,69,33,34,16,85,36,18,43,37,77,78,79,80,51,11,55,38,21,22,84,64],load_privatekei:44,older:[56,23,82,63,37,77,4,24,42,66,43,58,19,55,34,16,80],tree:[37,64,15,38,34,68,61,28],rate:[78,66,80,34,16,69],bootloader_path:[37,34,43],project:[31,37,64,5,55,34],matter:[30,85,48,79,38,50],boil:[38,0],gnupg:78,previous_job_info:58,nic0_link:28,minut:[57,77,79,15,6,34,68,83],provis:[36,55,11],hugepag:62,mini:80,fashion:[34,39,65,78,79],entail:32,fold:[54,5,15],ran:[37,16,22,80],ram:[56,51,79,43,69,11,34,21,61,28],mind:[12,0,37,24,79,15,55],sinst_cnt:58,taint:[12,34],raw:[64,78,58,34,21,61,28],aforement:[37,30],manner:[5,40,84,80],increment:16,further:[56,0,23,3,61,85,45,10,69,12,48,55,32,16,11,37,78,79,80,20,82,38,84],seen:[0,18,37,85,32,78,80,54,34,16,69],seem:[12,0,37,42,43,15,21,61],incompat:[38,34,80],seek:64,minu:48,cipher:[0,13],dozen:38,barcloud:36,realm:58,recreat:[56,37,2,58,19,34,84],epo:[34,59],latter:[56,63,77,80,69,21,83,61,52,28],especi:[46,63,37,3,77,78,79,80,15,34,10,69],wipe:[34,58,83],rpcresult:80,high:[36,0,18,37,77,64,41,13,55,34,16,80,10,22,69],contact:[56,37,77,78,79,80,43],cumbersom:40,instance_disk_s:2,usb_devic:34,transmit:[80,13],opinstancequeri:80,all_uid:79,expens:[37,36,48,77],simplifi:[12,31,77,78,79,13,43,38,34,22,80,11],thumb:[5,83,0],plenti:11,though:[12,39,23,63,37,2,3,77,78,79,80,58,81,19,69,55,34,22,52,11,64],usernam:[56,34,58,81,13],glob:24,object:[1,2,3,24,42,58,59,60,30,64,66,9,45,69,31,32,33,34,16,50,36,18,37,77,78,79,80,82,83,84,85],what:[56,0,23,2,3,4,41,42,43,57,59,28,85,45,68,11,82,24,48,13,49,33,34,16,50,5,37,77,78,79,80,51,69,55,38,84],regular:[12,36,57,23,37,3,48,80,58,55,59,33,34,22,61,52,68],netdev_add:30,letter:[5,30,80],phase:[2,23,78,34],insul:[78,79],sub:[31,37,2,32,80,58,55,34,16,52],tradit:61,broadcast:[37,18,55],simplic:[33,80],don:[39,2,3,41,42,43,61,8,64,67,11,48,13,15,54,34,16,17,5,51,77,78,79,80,37,19,69,55,38,85],internod:37,plugin_specific_data:16,doc:[3,24,79,80,5,67,70,55,33,34,16,68,85],clock:[34,79],flow:[38,5,23],dog:5,doe:[56,0,2,3,4,41,43,58,39,59,61,28,30,8,63,85,67,10,40,69,12,47,13,34,16,83,36,5,37,77,78,79,80,54,82,38,21,22,84,52],dummi:46,ganeti_post_:2,declar:[36,37,40,65,78,79,80,5,58,34,69],wildcard:56,neg:[56,58,42,20,78],neighbour:37,unchang:[57,23,48,80,4,59],section:[56,0,3,58,61,44,8,65,28,68,69,13,34,16,50,37,77,78,79,80,11,55,21],dot:[66,79],libxenlight:77,virtualhardwaresect:[21,28],reactor:80,paravirtu:[34,64,55],external_reserv:[58,18],pacemak:[16,41],whitelist:[37,38],random:[37,78,79,81,34,22,61],speedup:34,hvm_boot_ord:80,syntax:[0,37,78,80,5,58,34,69],freeform:78,advisori:84,directli:[56,23,3,43,61,8,63,64,68,69,31,15,33,34,51,77,78,80,37,20,38,85],node_daemon_certif:9,buildbot:[34,4],radic:80,protocol:[12,36,47,23,18,37,3,48,77,58,79,13,43,56,82,38,34,16,80,61,85],involv:[56,23,63,37,3,48,65,78,43,58,15,69,55,6,34,61,11],absolut:[46,77,80,58,59,34,22,52,60],networkrec:16,layout:[63,37,78,79,80,43,82,34],acquir:[0,23,77,65,42,79,78,69,34,83,80,52,20],libari:5,"_frontend_typ":80,menu:37,explain:[56,7,82,37,77,78,55,16,84,28],configur:[56,0,23,2,3,4,24,5,58,39,59,6,1,60,80,61,28,30,8,63,48,66,9,44,45,81,68,10,20,46,82,31,41,32,13,15,70,54,69,34,16,57,50,36,18,43,37,77,78,79,67,53,51,19,11,55,38,21,22,85],apach:[80,13],stanza:55,preseed:78,mnl0:43,latenc:[37,69,59],instance_nicn_network_mac_prefix:2,folder:[38,4],rss:9,"744m":38,oct:[37,34,43],wantedbi:68,buse:11,plate:5,remotest:16,primary_ip:82,pinst:[33,38,85,55,43],patter:80,timetofinish:16,localrol:16,watch:[12,23,37,42,78,58,34,7],compli:[43,3,80],foremost:80,amazon:56,report:[1,27,41,43,58,59,7,61,29,63,85,69,47,24,48,34,16,71,5,37,72,79,80,11,82,38,22,84],unmap:[37,50],recalcul:17,net:[56,30,82,63,37,79,80,43,81,69,55,34,60,28],op_instance_mov:2,bar:[37,5,0,79],cpython:[42,79],removemiss:[37,34,80,43],changeabl:[37,62,79,69,80],"public":[56,23,37,77,3,65,78,13,43,9,19,44,34,22,61,28],runa:78,cleanli:[8,23,4,42,80,43,55,59,34],pythondir:63,network_nam:[2,58,18],list_elem:5,metadata:[56,36,8,31,64,79,80,67,34,16,69],steal:56,valid:[56,36,18,43,37,3,48,78,79,80,5,44,15,28,69,34,50,20],respond:[37,41,54,59,34,52],fair:[40,66,79,78,34,69],job:[56,39,23,40,41,42,43,58,57,27,7,61,29,8,63,65,9,20,12,13,15,54,49,33,34,35,1,17,71,72,37,75,77,78,79,80,73,69,55,38,83,84],generate_kei:44,nicparam:[37,34,58,18,66],nfqueue:37,roadmap:64,dump_privatekei:44,num:16,mandatori:[23,18,78,79,80,55,34,16],result:[56,0,23,2,40,4,5,58,39,59,7,60,28,63,65,66,68,20,12,48,82,32,13,15,69,33,34,35,57,43,37,77,78,79,80,53,54,19,11,55,38,21,22,84,52],respons:[56,23,4,58,61,63,64,68,69,12,13,33,34,16,35,77,78,79,80,53,82,85],corrupt:[37,34,65],themselv:[57,23,37,32,77,80,43,58,34,16,20],key_fil:78,charact:[0,37,78,79,13,5,33,34,80],optimum:55,allow_failov:58,bb3b2e42:79,subject:[22,79,44],nfdhcpd:[37,58],awar:[56,0,7,18,51,3,57,55,6,16],instance_commun:58,said:[5,9,48,52],hopefulli:[33,34,37,55],heterogen:[5,69],databas:[2,78,80],wikipedia:51,discoveri:[15,80],instance16:37,instance17:37,outstand:60,getinstancenod:45,simplest:[38,32],awak:78,posix:[77,23,79],awai:[7,63,37,61,77,79,80,82,34,10],rsyslogd:43,approach:[12,36,0,18,31,4,66,80,43,56,10,69,17],instance19:37,attribut:[36,8,7,85,48,77,42,79,78,5,69,82,34,16,80,84,44],instance_nicn_ip:2,accord:[56,39,23,3,42,79,58,57,69,16,10,85,28],req_query_:54,af38:79,were:[56,0,23,2,3,43,58,61,44,85,9,40,69,12,48,13,49,33,34,16,35,17,37,77,78,79,80,81,22,84],weak:[37,78],sophist:23,extens:[12,56,0,23,61,3,24,79,80,5,84,44,59,33,34,35,10,64,28,17],lazi:5,replace_auto:58,extent:16,toler:[37,34],advertis:37,opnodeadd:9,behaviour:[56,62,39,37,77,4,24,78,79,13,5,15,6,34,80,57,38,69],protect:[56,37,65,41,42,79,78,58,34,22,80,69],accident:[56,78,20],easi:[12,30,0,23,31,37,64,32,77,78,79,80,43,59,6,34,16,22,11],cow:28,fault:37,howev:[56,7,2,3,4,42,5,59,23,30,63,64,68,40,20,12,48,32,13,14,15,34,36,37,77,78,79,80,54,81,69,55,38,22,85],quicker:28,cfgupgrad:[37,34,8,63],checkexpiredx509cert:78,against:[36,37,2,79,80,54,34,68,11],instance_info:79,troubl:[21,58,78,28],source_instance_nam:58,capabl:[12,0,23,18,31,37,2,3,77,66,55,59,34,22,84,85],docbook:[34,24],logic:[23,4,42,43,61,30,64,65,9,69,32,34,16,35,83,36,18,37,75,77,78,79,80,38,22,85],xyz789:58,seri:[8,37,80,57,45,34,16,69],com:[56,46,7,82,31,43,37,2,58,79,38,9,55,59,33,34,61,50,44],con:42,compromis:[0,3,78,79,34,44],assur:37,findclust:78,applianc:[56,36,28],createsignedx509certif:78,sdb1:[37,43,55],trunk:66,"50gb":37,uidpool:[77,79],loader:37,node_info:79,spindl:[85,58,11,82,34,69],framework:[36,76,37,77,32,24,79,80,5,82,59,34,10],ssconf_node_pass:8,guid:[29,82,43,37,24,5,67,55,34],assum:[56,46,23,43,37,2,64,48,65,61,79,80,14,55,77,16,10,50,85],summar:[5,16],duplic:[30,54,79,58,6,34,35,69],replicationprotocol:16,fra:43,tint:58,sucessfulli:78,addbr:66,union:[23,7,36],fri:[37,34],listrunn:[34,9,67],filesystem:[56,0,2,41,43,61,63,64,12,31,32,15,34,16,36,37,77,78,79,80,55,38],three:[56,0,43,37,32,77,58,79,78,5,9,69,82,34,22,80,68,20],been:[56,0,23,2,3,4,42,76,5,58,57,25,26,27,61,44,8,63,65,67,9,68,40,11,12,46,82,48,13,15,49,34,16,35,83,36,71,43,37,74,75,72,77,78,79,80,53,73,69,55,38,22,84],master_capability_rapi_modifi:3,accumul:[5,16,34],much:[56,0,23,3,39,61,64,68,69,82,48,15,33,34,16,54,77,78,79,80,37,11,55,38],beta3:34,beta2:[34,58],interest:[12,8,31,3,4,77,79,15,69,33,68,28],basic:[56,23,3,24,58,28,29,64,66,67,68,10,69,46,48,13,34,16,36,37,78,79,80,51,55,22,84],replace_on_primari:[43,58],"001d093e835f":79,vnc_bind_address:80,quickli:[0,79,32,13],approv:56,life:[43,15,80,59],rather:[62,0,14,3,4,77,78,79,80,5,69,55,34,38,21,60,61,85,11,17],ifnam:56,encourag:[64,79],nplus1:34,type_rsa:44,worker:[80,77,65,78,79,42,34,35],uncommon:23,anywher:[80,45],multithread:[11,80],"60mb":34,craft:[39,56,0],child:[43,58,23,77,80],cdrom:[56,34,55,80],emploi:[56,58,67,69,78],ident:[30,23,64,4,78,80,53,19,55,34,61,69],gnt:[56,0,2,3,85,41,42,43,58,39,59,60,28,62,83,30,8,63,64,66,67,44,81,40,12,46,82,31,49,34,35,57,50,17,36,18,37,77,78,79,80,53,54,19,55,38,21,22,52],gnu:[43,67,24],helper_startup_timeout:58,hat:28,servic:[12,56,23,31,37,41,78,79,13,55,59,38,68,80],properti:[56,51,0,37,2,64,48,77,42,80,5,15,59,69,45,34,10,44],jobqueue_purg:80,op_instance_startup:2,asign:18,aim:[36,0,23,31,37,77,78,79,5,10],calcul:[85,77,79,11,34,16,28,17],publicli:77,aid:[34,68,65],conflicts_check:58,spawn:[12,61,23,31],timefram:[83,77],seven:43,fe80:55,cont:50,coher:[37,80],parseuidpool:79,tabl:[56,23,37,4,77,79,5,55,33,34],device_del:30,node1_nam:37,cloop:28,ganeti_instance_nam:2,conf:[8,31,63,37,77,78,79,43,55,34,22],enabled_disk_templ:[34,58,85],tediou:[37,80],network_subnet6:2,ssh_host_rsa_kei:19,opcreateinst:0,sever:[12,83,0,23,37,3,85,77,42,78,5,58,15,33,34,46,80,52,20,64],"0beta1":34,instance_reboot:37,disabl:[56,0,3,58,6,61,8,85,67,20,12,13,15,33,34,11,83,54,78,79,37,69,55,22],filestorag:[38,36],incorrectli:38,receiv:[56,39,23,2,40,58,61,9,69,12,48,13,49,33,34,16,35,37,77,78,79,80,81,52],suggest:[36,0,3,14,21,6,34,50],make:[56,0,7,3,4,24,42,5,58,39,23,60,69,28,83,30,8,63,64,66,67,45,81,68,40,20,12,82,41,32,49,33,34,16,50,17,36,18,43,37,77,78,79,80,19,11,55,38,22,84,85],format:[56,3,4,43,58,59,60,28,29,30,8,63,64,66,9,20,47,82,49,33,34,16,5,37,74,77,78,79,80,81,55,38,21],giampaolo:50,bunni:20,who:[29,30,43,3,77,78,5,58,49,16,35],complex:[12,0,54,37,41,3,32,24,42,79,78,5,58,69,34,80,61,48,11],split:[8,23,71,72,37,77,45,65,66,78,5,15,73,27,34,46,80,84,54,69],big:[1,37,77,65,80,5,15,55,34,83,61,69],lockset:[34,83,77,79],ganeti_mast:2,complet:[56,39,23,2,3,24,43,0,7,61,28,8,66,68,11,82,48,13,34,16,57,18,37,77,78,79,80,54,81,69,55,38,21,84],foldabl:5,raid:[16,11],fragil:9,evid:[37,16],nic:[56,2,43,58,60,28,62,30,66,67,69,55,15,33,34,16,18,37,79,80,82,21],hang:[54,34,55,31,43],greedili:10,hand:[0,37,77,40,4,41,78,79,80,58,15,16,57,22,69,68],posit:[56,30,4,80,5,82,20],fairli:56,rais:[30,43,77,78,79,5,33,21],boiler:5,ownership:[34,15,78,80],refin:[11,17],"273m":38,studi:[35,42],tune:[54,0,69],environment_error:58,judgement:5,kept:[56,0,23,77,41,78,79,80,69,34,35,50,11],undesir:56,bewar:[41,55],cross:[16,7,79],thu:[56,0,23,2,3,41,43,28,30,64,66,45,68,69,12,48,15,34,16,50,17,36,5,37,78,79,80,55,38,22,85],itself:[56,0,7,3,41,43,57,59,23,61,28,62,63,85,65,9,68,40,11,48,13,34,16,17,18,37,77,79,80,53,54,81,69,55,22,84],hypothet:[56,10],inherit:[62,18,37,66,79,59,38,34,68,69],thp:62,gateway6:[37,58,18],op_instance_failov:[2,7,42],client:[7,3,4,42,43,58,23,61,8,67,9,68,40,31,48,13,49,33,34,35,36,18,37,77,78,79,80,54,55,22],shortli:5,thi:[56,0,7,2,3,4,24,42,5,58,39,69,59,6,23,60,80,61,28,62,29,30,8,63,48,65,66,9,44,45,81,68,10,40,20,64,12,85,46,47,82,31,41,32,13,14,15,54,49,33,34,16,35,57,50,17,36,18,43,37,77,78,79,67,53,51,83,19,11,55,38,21,22,84,52],createx509certif:78,gzip:[56,0,24,67,61,28],programm:4,everyth:[23,72,37,4,78,79,80,5,55,59,16,61,28],paradigm:80,instance_start:56,left:[0,23,37,2,78,79,80,43,84,82,68,10,52,69],logical_id:[43,64,79],rbdn:37,identifi:[56,36,0,23,37,84,48,4,80,43,15,59,34,16,61,50,60],op1:35,just:[56,0,23,3,41,42,5,58,57,59,6,61,30,63,64,45,40,20,82,48,15,49,33,34,16,17,36,37,77,78,79,80,54,69,55,38,84,85],filedevicehelp:38,"49af":58,overridden:[34,3,80,79,17],bandwidth:[0,77,66,11],partner:16,human:[33,84,77,28,59],vif:[56,30,37,66,79,55],nowadai:[85,42,69],node_cnt:58,yet:[56,0,23,3,4,58,57,64,67,11,12,15,34,16,37,77,78,79,80,54,55,22,84],languag:[5,58,32,20],previous:[0,23,48,4,79,80,43,58,34,21,28],iff_vnet_hdr:34,reboot:[51,30,39,63,37,2,59,79,43,58,57,55,49,34,84,17],shoud:16,awaken:78,xmlhttprequest:58,"20gib":[69,55],expos:[30,0,23,54,4,77,78,80,34,16,60],interfer:[56,0],had:[0,43,37,3,4,78,80,14,54,34,22,48,69],ideal:[56,0,43,66,78,5,15],ganeti_instance_vcpu:2,spread:[77,79,69,80],els:[0,67,79,80,5,58,45,34,16,44],save:[56,36,30,23,54,45,80,55,34,21,16,28],explanatori:78,gave:2,sanit:37,applic:[62,31,13,5,58,34,80,61],advis:[8,7,2,3,42,55,34,22,35,84],mayb:[54,5,28,11],preserv:[30,57,64,80,34,84],longstr:5,max_ispec:69,"105mb":0,disk_reserv:69,extractextag:34,kjournald:43,item:[8,23,37,5,58,59,33,34,16,28],greear:43,background:[12,36,1,31,64,78,80,59,85,28],submitmanyjob:[58,35,42,78],apart:[16,0,60,68],measur:[56,39,14,8,69,82,16,61,11],daemon:[56,57,23,3,41,42,43,58,25,26,6,61,44,8,63,65,67,9,68,20,12,46,31,24,32,13,15,54,49,33,34,16,35,37,77,78,79,80,53,51,55,22,52],ctime:[58,77],specif:[56,0,23,2,40,42,5,58,57,69,7,61,28,83,30,8,63,64,67,68,10,20,12,46,47,82,31,48,13,49,33,34,16,50,85,36,18,43,37,77,78,79,80,51,11,55,21,22,84,52],arbitrari:[56,30,0,14,78,5,49,34,52],kernel_path:[37,34,80,43],op_:2,manual:[56,7,4,41,43,59,6,28,29,8,63,85,67,68,10,20,46,24,15,69,34,18,37,78,79,80,51,19,11,55,22,84],findclusterbyinst:78,unstabl:78,hvparam:[30,37,79,80,58,34],night:10,hung:[16,80],seg_tag:16,specifii:8,fileid:34,dsa:[34,9,19],underli:[29,18,37,64,77,43,58,34,16,50,11,85],www:[34,58,61,67],right:[30,0,37,2,85,32,77,42,80,5,15,69,6,34,61,38,11],old:[23,2,3,4,43,58,61,30,8,65,40,13,33,34,37,78,79,80,54,19,21,22,84],candelatech:43,deal:[12,36,30,57,23,18,85,48,77,80,5,15,69,34,11],exportcert:[61,13],statvf:38,somehow:[37,84,61,80],dead:23,node3_nam:37,id_dsa:[37,19,79],intern:[57,23,43,58,6,64,65,69,12,48,15,34,16,83,36,37,77,78,79,80,54,21,22],group_network:18,extra_packag:78,opinstanceimportprepar:61,inact:[58,77,79],successfulli:[36,30,8,23,37,48,4,79,80,43,9,15,55,34,16],op_network_set_param:[2,18],transmiss:13,brd:55,cooper:37,trace:[37,78],outlier:48,archiv:[56,37,77,42,80,55,34,28],fox:5,subclass:[33,5],dangl:[34,63,45],"_arg":24,tracker:31,middlewar:13,overcom:[12,56,40,78,79,80,45],cno:58,foo:[37,5,82,79],rootfs_siz:78,localhost:55,core:[72,77,42,79,78,15,34,80,84,50,69],log_entri:58,sensibl:[32,10,79],uncompress:61,mynode2:85,disk_info:78,trivial:[43,37,48,79,80,5,54,68,61,44],spindle_count:[14,58,11,34],discount:80,corp:43,unreason:80,repositori:[37,4],ha1:58,peer:[34,48,80,69,43],xenvg:[37,34,64,55,43],post:[56,18,63,2,3,79,80,58,69,34,61,20],"super":48,error_msg:59,plug:[30,69],vnc_consol:34,hard:[51,30,0,43,37,48,32,80,5,58,34,21,16,60,69],req:[19,78,44],slightli:[34,83,0,41,78],choke:0,surround:5,simul:[46,41,79,80,43,69],upgradeconfig:[34,79],coars:20,transcendent_memori:51,commit:[34,4,42,43],breakag:[34,55],produc:[12,62,0,18,78,79,13,34,16,80,28],unrespons:[34,41],total_disk:82,grouplist:18,mem_in_mb:28,ssh_port:53,required_nod:82,xyz:[33,5],"float":[5,34,58,69,14],encod:[47,23,18,37,79,13,58,82,33,34,16,80,61,69],bound:[34,68,77,79,69],funtion:16,down:[0,2,3,43,58,39,59,61,10,69,12,48,49,34,16,57,17,54,77,78,80,37,82,38,22,84,52],spice_streaming_video:34,sor:[51,69,59],resili:[34,11,80],"_access":80,vnet_hdr:34,opportun:56,storag:[23,43,58,27,7,29,8,64,73,11,82,31,48,33,34,16,1,17,36,18,71,72,37,75,77,78,79,80,51,69,55,38,84,85],eth0:[37,43,55],wan:37,accordingli:[31,63,37,3,48,43,58,55,34,61,40,28],git:[37,34,16,24],fmtjson:34,cc012285:37,overus:5,support:[56,0,23,2,3,4,24,5,58,27,83,1,60,61,28,62,29,30,8,63,48,66,67,44,81,68,20,85,46,47,82,31,41,32,13,15,33,34,16,50,17,36,18,43,37,75,77,78,79,80,53,73,59,69,55,38,21,22,64],transform:[80,63],"class":[36,32,47,77,85,4,65,78,79,80,5,69,55,49,38,34,35,28],br100:[37,62,18],stuck:16,reli:[36,0,23,18,2,41,77,79,78,59,34,68,80],dts_int_mirror:36,queryd:23,cluster_nam:[9,82],overhead:[36,80,31,11,69],gil:79,interv:[12,57,3,43,68,69],fork:[77,23,80],homogen:[5,77,11],medium:[56,34,77,55],form:[62,0,23,43,37,78,79,80,5,58,69,33,34,16,84,28],offer:[36,0,37,3,38,68],forc:[12,30,8,7,18,37,2,3,77,79,13,43,58,59,34,80,50,69,85],reassign:11,heal:[34,41],forg:78,maxim:[34,58],percentag:16,heap:77,cidr:18,safeguard:79,"true":[82,80,77,3,4,24,42,79,78,43,58,44,55,59,33,34,68,35,40,20],lvmstrap:[37,34,55],reset:[8,18,37,2,80,43,58,34,22,52,44],absent:[34,82],userland:[61,18],flavour:28,drive_add:30,createinst:78,bootup:37,spun:38,mebibyt:[36,82,80],max_node_failur:69,unpin:50,max_inst_spec:77,maximum:[56,51,0,23,37,48,77,66,79,78,39,43,58,15,69,59,34,80,11],tell:[12,37,2,77,78,79,80,55,61],url:[56,58,61,80],disk_aio:34,metalock:80,absenc:[12,16,78],rerun:37,another_elem:5,unrel:[34,55,17],emit:[34,3,85],leaf:[78,80],reattach:45,classif:[58,80],new_nod:37,alongsid:79,semicolon:5,classic:[48,69],hardcod:[33,34,48,79,69],"abstract":[18,37,64,42,79,38,34,16],decrypt:[3,78],proven:[56,63],backoff:61,shelltest:24,diagnost:34,inst6:59,exist:[56,0,23,2,3,4,42,5,58,69,59,7,61,29,30,8,63,64,65,66,45,68,40,20,12,48,47,82,31,32,15,49,33,34,16,35,36,18,43,37,77,78,79,80,53,19,11,55,21,22,85],aliv:[37,43,23,80],"528a":82,strive:11,ship:[41,24,78,79,34,68],virtualsystem:28,check:[56,0,7,2,3,4,24,43,58,59,23,61,28,8,63,64,65,44,45,68,40,11,12,48,31,41,32,15,33,34,16,35,17,36,18,37,77,78,79,80,53,81,69,55,38,22,84],sticki:41,assembl:36,pipe:[12,56,23,77,79,34,61],password:[56,3,79,80,43,58,81,55,34,52],encrypt:[0,3,78,79,19,22,61,64],mem_hv:69,cron:[37,51,68,8,55],relax:34,when:[56,0,23,2,3,4,24,42,5,58,57,69,59,6,7,61,28,62,29,30,8,63,48,65,66,67,44,45,81,68,20,12,85,46,82,31,41,32,14,15,49,33,34,16,35,50,17,18,43,37,77,78,79,80,53,54,83,19,11,55,38,21,22,84,64],"__slots__":34,refactor:[36,32,23,4,25,34],configdata:45,flood:34,fakeroot:24,role:[56,36,23,37,3,41,79,80,54,58,34,16,64,28,68],sda3:55,sda1:[37,43,64],test:[56,0,40,4,24,42,43,39,27,28,29,30,63,64,66,67,82,32,13,15,34,16,50,5,37,78,79,80,54,55,21,84],master_capabability_rapi_modifi:3,presum:[48,77,69],roll:[37,34,63,17],node:[56,73,0,23,2,3,85,41,5,58,39,25,26,59,6,1,80,61,28,62,29,30,8,63,48,65,66,9,44,45,81,68,10,40,11,64,12,46,82,31,83,32,13,14,15,54,49,33,34,16,35,57,50,17,36,18,43,37,75,76,77,78,79,67,53,51,19,69,55,38,21,22,84,52,7],legitim:78,notif:[12,77,41,78,79,34,61],intend:[56,7,63,3,77,79,80,55,34,16,20],opprereqerror:[33,37,40,58],turnup:2,security_domain:22,kvm:[56,57,1,58,26,62,30,66,67,69,12,31,34,50,37,77,78,79,80,11,55,22],asterisk:37,urllib2:58,instance_vcpu:2,aaeccc0dff9328fdf7967cb600b6a80a6a9332af:79,intens:[64,55],intent:[56,63,37,53,34,22,69],consid:[0,1,3,41,43,58,57,59,23,61,28,62,85,10,11,12,48,14,34,17,36,18,5,51,77,78,79,80,37,69,82],easili:[0,23,43,58,63,64,10,69,13,15,33,34,16,54,77,78,79,80,81,11,21,84],vm1disk:64,weekend:10,startinst:31,subdivis:23,"2048k":64,longer:[56,30,0,23,37,2,3,77,80,5,58,45,38,34,83,61,52,69],furthermor:[56,36,23,18,37,64,48,77,62,79,78,5,15,54,34,69],sighup:34,pseudo:78,cluster_ip_vers:2,rough:[32,13],ignor:[56,0,2,24,42,43,58,61,28,8,63,85,45,69,48,34,50,17,37,77,80,11,38,21,83],ovfimport:28,time:[56,0,23,2,42,5,58,39,69,59,6,61,28,83,30,8,63,64,65,67,45,68,10,20,46,82,32,14,15,70,49,33,34,16,35,57,50,17,36,18,43,37,77,78,79,80,54,11,55,38,21,22,84,85],push:[37,23,78],ubklback:64,backward:[56,1,18,63,64,42,79,80,58,82,34,83,61],exposur:69,corpu:29,ganeti_hooks_vers:2,concept:[36,0,37,2,48,77,79,80,84,11,17],rom:[21,34],chain:[75,42,66,81,40,20],skip:[63,77,79,80,55,34,28,17],global:[36,37,48,77,66,79,78,43,55,22,80,60,69,17],datum:3,focus:[78,31,80],known:[37,85,77,80,5,19,34,33,21,16,84,22],signific:[0,54,3,80,15,34,10,69],supplement:53,computation:77,boot_ord:80,ignore_ipolici:58,consum:[33,34,77],gntdaemon:77,osd:31,row:61,hierarch:37,decid:[57,4,41,58,59,61,30,8,85,10,69,48,13,49,34,16,83,54,77,78,79,80,11,21,22,84],hold:[36,23,18,37,77,3,65,78,79,80,43,58,20,82,83,85,11],depend:[56,0,7,2,3,41,42,43,58,57,23,60,28,62,29,30,8,63,85,65,67,9,68,11,47,82,24,13,33,34,16,50,17,36,18,37,77,78,79,80,51,19,69,55,83,84],system:[56,0,23,3,4,41,43,58,57,61,28,8,63,64,67,9,68,11,12,46,47,82,31,24,15,49,33,34,16,50,85,18,37,78,79,80,54,19,69,55,38,21,22,84,52],cloud1:36,pem:[8,78,77,58,79,13,9,19,81,52,44],destination_nod:37,blockdevic:64,decim:80,readabl:[23,77,79,28,34,33,7,44],worth:[21,77,69],plj0:79,std_spec:69,modify_etc_host:[34,58],certainli:[68,61,42],haskel98:5,decis:[56,36,30,46,77,82,45,22,83,69],text:[36,37,3,67,78,58,15,33,34,16],downtim:[37,77,80,43,34,10,17],exectut:2,brown:5,sourc:[56,1,2,3,4,24,43,58,69,61,28,8,64,67,20,48,49,34,16,51,78,37,81,11,55,21,22],string:[56,7,2,5,58,59,80,28,63,85,66,9,69,49,33,34,16,50,36,37,77,78,79,67,20,82],congest:[34,83],redist:[37,34,8,79,63],rpcrunner:80,instance_os_add:[56,34],disk_usag:58,auto_promot:[34,58],feasibl:[85,0,80],sendtocli:78,pgrep:37,broadli:48,condit:[12,23,77,41,78,79,80,5,69,59,34,68,84,11,17],word:[37,2,48,77,78,79,80,11,55,69,50,28],brows:29,readyst:58,cpu_set:50,enoperm:[37,84],set_subject:44,hour:[8,37,77,15,34,83,44],administr:[56,23,2,3,43,59,29,8,64,69,12,31,34,16,36,18,37,78,80,11,55,38,22,84,85],level:[0,23,41,42,5,58,6,60,62,30,66,45,10,11,32,31,48,13,15,49,34,16,83,36,18,37,77,78,79,80,53,69,55,38,22,84],did:[0,2,3,77,80,38,61,85],die:23,gui:49,placat:34,iter:[5,80,79,34],shortcom:[56,39,1,3,41,42,57,23,60,61,44,62,30,63,66,9,45,68,10,40,20,12,32,13,14,49,33,16,35,17,18,37,77,78,79,53,11,38,83,84,52],m1tgej:37,unsupport:[38,80,28,59],relev:[12,23,37,3,24,78,79,80,55,38,16,84],d1fa:43,ndisc6:67,activitylog:16,implic:[81,22,23],unaccount:69,round:[34,79,69],dir:[8,63,37,85,79,15,55,34,38,21,68,28],prevent:[56,0,23,82,37,48,32,77,78,79,80,81,55,59,34,22,69,17],slower:[16,69],version:[56,0,23,2,3,4,24,5,58,57,1,61,28,29,30,8,63,64,66,67,44,40,20,46,47,82,48,13,69,33,34,16,17,43,37,76,77,78,79,80,53,19,11,55,21,22,84,85],powercycl:[0,46,41,79,58,15,59,34,52],nic_mod:66,plu:[39,37,2,24,77,79,80,81,34,84],sign:[0,23,84,3,78,5,58,81,34,61,44],pend:[77,42,79,78,34,16,84],heavyweight:41,cost:[36,61,77,42,80,16,10,69],group1:58,unprotect:78,minimis:69,jobid:[37,58,20],port:[56,47,37,66,79,78,53,43,58,15,81,55,38,34,16,80,61,22],os_hvp:58,explictli:56,replc:84,appear:[56,3,78,80,43,16,61,69],disk_typ:28,repli:[37,56,23,78],"64bit":[37,58],havoc:43,uniform:[34,80],current:[56,0,23,2,3,4,24,42,5,58,39,69,59,1,60,80,61,28,62,83,30,8,63,64,66,9,44,45,68,10,40,20,12,85,48,47,82,31,41,32,13,14,15,54,49,33,34,16,35,57,50,17,36,18,43,37,77,78,79,67,53,51,11,55,38,21,22,84,52,7],sinc:[56,57,23,2,3,85,42,43,58,59,60,61,28,30,8,63,64,65,66,45,68,40,20,15,49,33,34,16,50,17,5,37,77,78,79,80,54,69,55,38,21,22,52],wors:[0,63,80,34,83,84],suspect:34,reqv1:58,graph:[84,23,17],del:37,nodegroup:[62,36,18,31,37,2,85,58,82,34,60,84,17],acpi:[12,34,55],corosync:41,standi:10,xml:[16,28,80],pose:[56,58,80],deriv:[5,68,34],x509req:44,urlopen:58,gener:[56,0,23,3,4,24,42,5,58,7,61,28,30,8,44,11,12,46,82,31,48,15,49,34,16,36,18,37,77,78,79,80,54,19,69,55,38,21,22,84,52],unauthor:34,onli:[56,73,0,23,2,3,4,24,42,5,58,39,59,7,60,80,61,28,62,83,30,8,63,48,65,66,9,44,45,81,68,10,40,20,64,12,85,46,47,82,31,41,32,13,15,54,69,33,34,16,35,57,50,17,36,18,43,37,77,78,79,67,53,51,19,11,55,38,21,22,84,52],agreement:80,satisfi:[0,77,79,55,61,20],ganeti_forc:2,explicitli:[56,29,0,18,37,85,48,42,67,58,57,33,34,80,17],modif:[56,0,23,43,58,59,60,30,64,66,45,69,12,31,34,36,18,37,77,78,80,54,19,83],install_imag:58,address:[56,0,2,41,43,58,61,30,67,20,12,82,32,15,69,34,16,36,18,37,77,78,79,80,11,55,38,21,22],waitdep:42,along:[37,34,8,23,80],getinstancedisk:45,wait:[0,23,2,3,42,43,58,39,61,63,65,68,69,34,35,17,37,77,78,79,80,83,84],box:[68,55],nagio:16,netdev:[37,34,55],shift:[40,4,69],rethink:38,wrong_input:[33,58],queue:[56,29,39,23,79,63,37,65,49,41,42,58,78,9,15,77,34,1,35,20,80],multicast:[37,55],throughput:[0,79],behav:[38,34,3,79,11],overriden:[62,3],healthi:[37,84,48,79,43,10],extrem:[15,0,28],imbal:48,reclaim:[48,77],promot:[37,2,3,41,77,80,58,34],ipc:[51,23],semant:[0,3,80,69,82,16,35,20],elect:80,taskset:50,extra:[56,3,24,5,60,30,63,85,67,45,15,34,16,36,37,77,78,79,80,19,82,84],tweak:[34,77,79,69],modul:[43,77,64,32,24,42,79,80,5,67,55,33,34,16,61],"477m":38,prefer:[12,56,23,63,61,85,4,77,66,79,80,5,58,82,68,10],forev:[55,80],gntrapi:77,total_memori:82,default_templ:77,instac:[82,55],visibl:[56,18,37,41,42,78,82,38,34,80,69],instal:[56,0,1,3,4,41,43,58,25,28,29,30,8,63,67,44,68,69,12,46,82,31,24,15,34,16,18,37,78,79,80,55,38,21,22],new_disk_templ:2,mobil:[36,7],vg_name:[37,16,58],regex:[37,34,67],jan:[37,34],max_running_job:58,memori:[56,23,2,42,43,58,1,28,62,64,10,11,46,82,48,14,33,34,16,51,77,78,79,80,37,69,55,38,21,52],subvert:78,mnode:[38,43,58,85,55],ft_raw:64,linter:24,todai:[77,79,80],impos:[34,80,23,45],connector:12,live:[56,23,42,43,58,30,8,64,67,45,69,48,15,34,50,17,51,77,79,80,37,55,84],handler:[61,79,13],value3:5,value2:[5,31,36],value1:[5,36],"417c":43,msg:[58,79],scope:[64,32,80,55,16,85,69],vol_new_s:36,checkout:4,confidenti:56,analyz:[34,16,80],unsaf:0,capit:5,idempot:[2,63,34],oob:[51,76,41,15,59,34,10],peopl:[5,80,34],claus:34,pylint:[34,24],finit:[40,11],ctype:[34,61,79],enhanc:[62,8,2,3,77,79,80,43,69,55,34,11],appendix:79,rigid:80,osparam:[58,78],examin:[0,37,4,77,80,43,55],outofsync:16,unseri:80,ebd1a7d1:37,effort:[23,54,3,11,38,20],old_secondari:2,getinstanceinfo:[78,79],voum:69,manpag:[55,37,70,82,34,17],aes_ni:0,filebas:79,opcomputecapac:77,instance_diskn_s:2,ublkback:64,pyinotifi:67,local:[56,23,2,4,24,43,58,61,8,67,9,31,41,48,15,34,16,17,5,51,77,78,79,80,37,55,22],prepar:[0,37,58,79,78,43,9,46,20,59,34,80,61,28],xmlreq:58,hextra:24,uniqu:[56,36,30,23,18,37,84,3,77,78,79,80,58,44,55,34,16,61,60,11,85],cat:[43,61,77,55,78],strain:0,descriptor:[56,77,30,61,79],whatev:[37,2,3,48,79,67],nostartup:58,purpos:[30,0,82,37,77,78,79,80,14,20,55,38,34,68,10,28],logon:43,vol_nam:[36,31],problemat:[12,24],nearest:[37,84],opresult:58,encapsul:[51,30,35,11],stream:[34,0,61,80],predict:[34,68,77,11],add_extens:44,chip:0,socat:[34,67,61,50,78],sharedfil:[37,85,58,38,34,28],agent:[29,47,71,72,37,41,73,34,16,22],topic:[29,0,42,80,34,35,11],keyusag:44,abort:[8,63,37,2,40,78,79,80,43,9,59,6,34,61,64],physical_id:79,unfortun:[56,54,48,77,79,58,15,34,61,69],occur:[12,29,30,0,18,77,65,79,56,34,28],level_inst:83,pink:20,alwai:[56,3,4,41,43,58,28,63,85,20,32,33,34,11,50,18,5,37,77,78,79,80,69,82,22,84],differenti:[33,34,64,4,80],chroot:[30,37,78,58,34,69],multipl:[56,0,23,2,4,41,5,58,39,6,28,29,8,63,48,20,46,32,15,69,34,16,83,18,37,77,78,79,80,81,11,82,38,22,84],a378:58,get:[56,39,23,3,41,42,43,58,57,59,60,61,83,30,8,63,64,67,45,40,20,47,24,32,14,15,33,34,16,50,36,37,77,78,79,80,53,54,11,55,22],uptim:16,"500gib":69,write:[56,0,23,2,3,24,42,5,58,61,44,63,64,9,69,12,46,31,32,15,34,16,37,77,78,79,80,81],till:[63,3,80,34,10,85],despair:78,anyon:[43,80],actual:[56,39,7,2,42,5,58,57,59,23,61,29,30,8,63,64,10,11,12,48,47,82,32,13,14,15,49,34,16,17,36,43,37,78,79,80,54,69,55,38,22,84,85],fourth:34,nodenam:[55,59],abovement:85,somevalu:5,loopback:[16,64,31],snf:37,map:[36,23,18,31,43,37,3,79,80,5,58,33,34,16,50,69,85],product:[56,39,41,78,79,67,55,34],mar:34,max:[82,34,30,58,69],clone:41,partwai:80,spot:80,usabl:[36,23,54,79,80,43,34,61],constraint:[36,0,18,37,2,85,69,11],intrus:55,membership:34,xzf:55,known_host:[77,8,19],pave:80,mai:[56,0,23,4,41,58,59,7,61,28,62,8,63,64,68,20,82,31,24,32,13,34,16,50,36,18,37,77,78,79,80,51,19,11,55,21,22,84,52],drastic:[0,84],underscor:[2,0],secondari:[39,7,2,43,58,59,64,69,55,48,34,17,36,37,77,79,80,51,81,82,22,84],data:[56,0,23,2,3,4,41,42,5,58,59,61,28,30,8,64,67,9,73,81,10,20,12,47,82,31,48,13,15,54,49,33,34,16,50,18,43,37,77,78,79,80,51,19,69,55,38,22,84],grow:[36,23,37,2,77,80,43,58,15,69,34,11],"4a4139b2c3c5921f7e439469a0a45ad200aead0f":79,man:[29,37,85,80,51,58,70,55,34,50,69],repo:66,autotool:34,practic:[12,0,43,37,3,4,77,5,39,54,59,46,69],newkei:[19,78],runwithlock:34,devi:43,divid:[23,31,37,77,65,78,79,55,16],explicit:[62,85,48,5,3,32,77,78,43,57,49,34,68,61,50,69,17],acces:55,ganeti_instance_disk_count:2,predic:20,mangl:37,inform:[56,39,23,2,3,4,42,58,57,83,7,61,28,29,30,8,63,64,66,67,68,10,11,12,46,82,49,33,34,16,50,85,36,18,37,77,78,79,80,81,69,55,38,21,22,84,52],"switch":[30,8,63,3,48,77,79,80,43,0,55,38,34,50,85],preced:[37,0,84,82,69],combin:[56,83,0,80,2,48,24,77,79,50,5,33,34,16,78,61,38,69],ghc:[34,67,24],callabl:79,kvm_dev_path:31,hvm_vnc_console_port:80,talk:[0,43,37,2,78,79,13,5,81,54,55,80,34,22,35,61,69],volume_group_nam:85,ovfread:28,tty:2,lsb:[68,41],wheezi:[37,67,24,55],getmast:[37,34],virtualis:[37,15],op_cluster_verify_group:[2,34],os_typ:[37,58],graphviz:24,lst:[37,5],occasion:34,existing_nod:37,dumb:[37,34],equip:[16,59],still:[56,0,7,3,4,41,42,43,58,57,59,23,60,61,30,63,85,10,40,20,12,24,48,13,15,69,34,16,17,18,37,77,78,79,80,54,11,55,38,84,52],apidoc:5,seg_count:16,dynam:[56,32,37,4,77,66,78,51,15,34,80,10,69],entiti:[0,23,37,78,79,80,58,49,34,22,84,60,28],busi:[57,48,77,80,38,34,69],conjunct:[34,80],depmod:55,overhaul:34,monitor:[0,23,3,41,42,58,39,59,29,30,64,67,12,47,31,49,34,16,50,71,72,37,80,73,55,22],sata:55,polici:[7,82,2,64,77,58,69,55,34,22,84,11],invalid:[37,77,64,48,65,34],avil:22,weaker:0,f4e06e0d:82,nic0_mac:28,instantli:[30,80],hotplug_devic:30,platform:[67,0,28],window:[37,43,16],req_submit_job:54,rconfd:23,mail:[58,69],netdev_del:30,main:[12,56,23,37,3,32,77,58,79,78,54,9,69,55,34,68,80,83,52,28,85],basenam:[78,63],confin:7,watermark:20,non:[0,23,2,3,85,41,42,5,58,39,61,44,63,64,28,10,20,47,82,48,14,15,33,34,16,17,36,43,37,77,78,79,80,53,54,69,55,22,84,52],oneshot:68,synopsi:34,hop:78,dmtf:28,smarter:79,cheap:48,remote_node_uuid:58,initi:[56,0,23,2,3,41,42,43,57,26,27,61,30,63,85,9,68,20,12,46,31,32,13,15,54,34,16,17,36,37,77,78,79,80,51,19,69,55,22],"28676f0516c6ab68062b":78,pkill:37,therebi:[34,77],half:[69,80],removesecondari:5,nov:34,now:[57,3,4,41,42,43,58,6,60,28,30,63,85,45,11,82,31,33,34,16,17,5,37,77,78,79,80,54,81,69,55,38,84],discuss:[80,54,84,42,79,78,69,33,68,35,61,28,17],nor:[36,30,0,54,37,3,77,78,79,5,39,69,21,60,61,11],introduct:[36,0,1,18,82,37,2,64,65,42,43,58,15,54,55,77,46,69],wont:11,term:[12,29,48,18,54,14,37,3,4,77,78,5,67,51,55,59,38,36,61,69],workload:[39,34,64,0,78],name:[56,0,23,2,3,24,42,5,58,69,59,6,7,60,61,28,30,8,64,65,9,44,45,81,68,10,40,20,12,46,47,82,15,49,33,34,16,83,85,36,18,71,43,37,72,77,78,79,80,19,11,55,38,21,22,52],readfil:78,realist:[39,0],nil:80,perspect:[37,78,80],dmsetup:43,revert:[8,0,78,80],crypto:[8,3,77,53,67,19,34,68,81,44],separ:[0,23,2,3,4,58,59,61,28,62,30,63,85,9,45,10,20,46,82,48,13,15,69,33,34,16,50,37,77,78,79,80,54,81,11,55,22,84,52],op_jobid:35,keypair:43,januari:[16,49],hijack:34,confid:32,compil:[23,24,5,67,15,55,33,34],failov:[7,2,41,43,58,64,66,68,69,48,15,34,35,50,17,36,5,37,79,80,55,83,84],domain:[36,30,57,23,37,3,77,80,43,58,81,55,34,7,61,50,11,64],replai:[2,79],c_mine:79,citat:17,agil:69,replac:[23,2,3,41,43,58,1,61,29,8,64,45,20,12,82,32,13,69,33,34,16,17,36,18,37,77,78,79,80,19,11,55,22,84,85,7],individu:[39,23,3,4,24,58,63,66,68,69,48,32,34,17,37,77,78,79,80,54,22,84],continu:[39,3,43,58,6,61,8,63,9,68,20,48,13,33,16,17,5,37,77,79,80,11,22,84],ensur:[56,0,23,3,4,58,57,7,61,30,8,63,64,66,68,20,12,31,15,34,18,37,77,78,79,80,53,69,21,84,85],target_nod:[37,2,58,34],rt_tab:18,wrap:[5,58,18,79],request_queu:16,oikonomopoulo:34,backport:[34,78],significantli:[39,3,48,77,42,79,0,34,69],network_tag:2,resourc:[0,1,40,41,5,58,57,23,61,28,29,85,68,10,20,47,48,14,69,33,34,16,18,37,77,79,80,11,55,38,83,84],happen:[56,0,23,40,41,43,58,57,61,28,30,8,85,69,12,34,16,50,17,37,77,78,79,80,11,22,84],cmdlib:[36,8,63,3,32,65,80,27],os_vers:78,baselin:32,subnet:[37,58,18],shown:[56,0,77,42,78,43,67,82,38,83,80,61],accomplish:[23,37,77,79,5,55],referenc:[30,85,77,42,34,68,50],"3rd":61,space:[0,23,2,5,58,27,1,28,29,85,10,69,82,48,34,16,18,71,72,37,77,78,79,80,11,55,38,21],hypervisor_nam:28,profil:24,mess:59,foostor:36,rational:[56,48,80,15,38,16,69],internet:55,sweet:80,correct:[62,8,37,61,64,24,77,78,5,39,69,55,34,80,57,84,11],cnode:58,necessarilli:79,timeread:16,z0ju:37,migrat:[56,39,7,2,41,43,58,61,28,30,8,64,67,69,12,34,50,17,36,37,77,78,79,80,11,55,83,84],contain:[56,0,23,2,3,85,24,42,5,58,7,61,28,30,8,63,48,65,9,45,68,11,12,46,82,32,13,33,34,16,35,17,36,18,37,77,78,79,80,81,69,55,21,22,52],libpcre3:67,cpu_spe:14,compulsori:[21,28,80],dataloss:79,mime:61,theori:[8,80],debootstrap:[56,0,82,37,2,79,43,55],oplog:58,org:[37,51,67,34,61,50],"byte":[16,61,78],expandnam:[65,23,80],card:[37,28,80],care:[0,23,3,41,42,5,59,61,64,68,40,20,48,33,17,36,37,77,78,79,80,55,38,84],ganeti_instance_disk0_mod:2,device_add:30,wai:[56,0,7,2,3,4,24,42,39,69,59,6,23,60,61,8,63,64,67,9,68,10,20,85,46,41,48,14,15,49,33,34,16,57,50,17,36,37,77,78,79,80,54,11,55,38,22,84,52],network_gatewai:[2,18],badli:[40,41,69],waiter:79,frequenc:34,op2:35,suid:61,sysconfdir:[63,2,24,67,55,34],ssl_ctx_load_verify_loc:81,refus:[43,37,3,78,79,80,38,69,49,6,61,11],recov:[56,0,37,80,43,59,22,84],libcurl4:67,vmlinuz:[43,55],waitforjobchang:[78,80],place:[56,0,7,3,4,24,43,61,30,85,69,12,31,32,15,33,34,16,18,37,77,78,19,82],propos:[56,0,23,3,85,41,42,39,69,7,60,61,44,62,30,63,64,66,9,45,68,10,40,20,12,31,32,13,14,15,49,33,16,35,57,1,17,36,18,54,77,78,79,80,53,11,83,84,52],get_pubkei:44,standbi:10,router:[37,43],technolgi:85,principl:[34,58,4],think:[54,3,80,69,55,84,11],frequent:[57,77,50,79,78],op_network_connect:2,oper:[56,0,23,2,3,4,41,42,5,58,39,59,7,60,61,28,48,65,45,68,40,11,46,82,31,32,13,15,49,33,34,16,35,57,17,36,18,43,37,77,78,79,80,53,51,69,55,21,22,84,64],offend:78,suspend:[37,34,84],reimplement:[34,23],redhat:[43,68],carri:[12,56,8,63,3,66,57,82,34,20],onc:[56,0,23,3,42,43,58,46,61,8,63,9,45,68,10,40,12,32,48,13,33,34,16,17,5,37,77,78,79,80,54,55,84],arrai:[16,58,82],ssconf_cluster_tag:41,yourself:2,reopen:34,suspens:[37,84],fast:[0,3,78,79,16,83,69],symmetri:34,rebal:[62,34],oppos:[56,37,48,78,79,80,51,34,16,69],open:[56,23,43,58,27,61,44,30,64,66,28,12,34,16,5,54,74,77,79,80,38,21],lexicograph:2,size:[0,2,3,43,58,39,61,28,62,30,8,64,11,46,13,15,33,34,16,50,36,18,72,37,77,78,79,80,69,82,21,83],bsd:34,avail:[56,0,23,40,85,41,43,58,57,69,61,62,30,8,64,66,67,68,10,20,46,47,82,48,13,14,49,33,34,16,83,17,36,18,37,77,78,79,80,54,81,11,55,38,21,22,84,52],given:[56,0,23,2,4,41,42,5,58,7,61,28,8,63,65,66,9,45,68,20,12,48,32,15,34,16,36,18,37,77,78,79,80,69,82,38,21,83,84],breviti:43,silent:[37,34],convent:[2,64],width:5,kvm_extra:34,libceph:[67,55],netparam:[37,18,79],download:[37,56,61,55,13],silenc:34,necessarili:[12,36,65,77,38,69],draft:[29,1],averag:[34,16,0,11],white:5,conveni:[23,32,79,59,21,20],includ:[56,0,23,3,24,5,58,57,61,28,29,30,63,48,67,9,73,68,10,40,12,46,47,82,41,32,13,15,49,33,34,16,85,36,43,37,77,78,79,80,53,51,81,55,38,21,22,84,64],attach:[56,36,31,37,2,64,49,43,51,55,45,34,16,61,84],speedunit:16,opstartupinst:5,cope:57,copi:[56,23,2,3,43,61,8,64,9,67,19,46,48,34,37,78,79,80,81,55,84,52],gch6:24,specifi:[56,57,2,4,42,43,58,6,80,61,28,85,66,9,10,20,12,47,82,31,32,49,33,34,16,36,18,37,77,78,79,67,81,11,55,22],blacklist:[34,58,78],netmask:[56,18,2,58,55,34],"short":[56,43,37,32,77,78,80,5,58,55,34,83],librari:[30,18,43,65,63,24,42,13,5,58,15,67,77,55,49,34,16,80,61,83],mostli:[77,64,24,79,5,69,34,61,28],date:[56,8,23,37,77,43,34,16],floppi:[56,34],custom_hvparam:58,holder:[3,79],than:[56,0,23,3,4,41,42,5,58,57,60,61,44,62,64,66,9,28,45,11,12,48,82,32,14,15,54,49,34,16,50,17,36,43,37,77,78,79,80,53,51,69,55,38,84,85],serv:[0,23,31,43,54,61,48,4,13,14,22,80,10,20],wide:[85,0,23,37,66,3,48,77,58,79,13,9,82,59,34,22,80,61,52,69,17],constantli:[16,79],drbd0:[34,43],e57f:43,cfgupgrade12:[37,34,8],ganeti_clust:2,param2:36,param1:36,optimist:[32,23],addidion:23,nuisanc:82,browser:[58,78],pre:[36,30,8,47,18,31,37,2,48,32,58,34,68,69,17],analysi:16,sai:[2,43,11,5],bootstrap:[56,3,77,67,78,9,55,34,68,61],san:[36,64,48,77,80,55],nicer:[34,80],on_shutdown:57,pro:[3,42],pri:5,argument:[56,36,0,23,43,37,2,32,24,42,78,46,5,58,8,63,82,34,16,80,77],dash:[0,79],deliv:[56,78,79],cpuid:34,recover:[37,84],"20m":79,disk_stat:[58,69],reorgan:23,bitwis:16,burnin:[37,42,43,15,55,34],squar:69,alloc_polici:[77,58,7,82],alias:[34,15,0],destroi:[56,0,23,37,2,77,78,80,43,57,45,61],moreov:[12,56,77,41,78,79,80,38,34,84,69],note:[56,0,1,2,3,24,42,5,58,59,7,61,28,62,29,8,63,64,67,69,12,82,31,41,48,14,33,34,16,50,17,18,43,37,77,78,79,80,54,19,55,38,21,22,84,85],sendfil:61,emphasis:69,curent:79,take:[56,0,7,2,40,4,41,42,5,58,57,25,59,23,61,62,30,63,48,68,10,20,46,82,31,32,14,15,69,33,34,16,83,36,18,43,37,77,78,79,80,19,11,55,38,22,84,85],ganeti_op_cod:2,enabled_hypervisor:[58,82],similiar:82,hslogger:[34,67],noth:[37,77,64,48,41,79,80,5,34,22,85,17],channel:[56,22,0],auto_balanc:28,begin:[0,23,78,13,5,9,80,61,69],sure:[0,3,41,42,43,8,63,64,67,45,81,68,40,11,32,34,16,50,17,37,78,79,80,19,69,55,22,84],pain:[78,80],streamoptim:28,normal:[56,0,7,3,42,5,58,6,62,8,63,40,20,48,14,15,33,35,37,77,78,79,80,11,55,84],track:[30,48,23,3,32,78,79,58,15,69,49,34,57,64,11],compress:[0,64,48,67,79,78,58,81,34,21,80,61,28],clearer:80,paid:65,extglob:34,configwrit:[65,23,18,79],beta:[34,8],pathlen:44,i_pri_up_memori:82,ethernet:[66,55],pair:[56,48,23,63,3,4,77,80,53,55,34,11],ghci:24,unalloc:[43,58,77,78],disk_templ:[37,85,80,58,82,28],allevi:78,renam:[56,36,30,23,37,2,3,77,42,79,78,43,58,15,81,6,34,22,80,60,85],correctli:[12,30,0,23,48,32,24,78,79,80,43,15,55,34,21,16,57,64,11,68],adopt:[37,34,85,69,36],drive:[0,31,37,32,80,51,55,34,38,21,16,69],spill:80,op_instance_change_group:2,getjob:34,"0x93":43,runtim:[12,56,30,39,37,77,78,80,43,58,59,34,69],fillb:80,default_ov:66,destroyx509cert:78,effect:[56,0,43,58,60,30,66,10,69,32,48,34,50,37,77,78,79,80,11,55,20,21,83],salt:[5,78,79],hmac:[77,3,23,78,79],gracefulli:[34,57,63],getjobstatus:34,disk0_dump:28,newer:[8,63,37,4,67,58,57,55,34],"6a430034bf43":58,show:[57,4,43,61,44,8,28,10,69,47,13,34,16,36,5,37,77,78,79,80,55,38],opportunist:[0,23,73,58,34,83],delta:[37,34],serialis:[34,77],f5a277e7:58,unprocess:77,poweroff:[12,57,41],concurr:[23,77,65,80,43,69],permiss:[8,37,3,77,78,80,58,34,22],hack:78,frontend:13,instance_nicn_network_:2,contemporari:17,fifth:34,ground:58,slot:[34,30,18,60,45],master_cap:[37,2,3,77,58,34],singlenotifypipecondit:34,slow:[39,77,64,24,78,80,58,0,34,22,52,69],ratio:[0,51,77,14,58,82,34,69],new_alloc_polici:2,fenc:41,load_certif:44,brigd:80,transact:68,proportion:11,pump:61,iv_nam:34,dict:[30,40,80,5,58,82,34,69],jqueue:[65,78,79,49],blkfront:64,harep:[37,34,63],curlopt_http_content_decod:61,offici:55,op_instance_remov:2,ethtool:34,query2:58,dissimilar:4,variou:[56,29,0,23,63,37,3,4,77,78,79,80,39,55,33,34,16,64,69],diskparam:[34,58,79],allocat:[37,58,85,11],ganeti_instance_memori:2,ssl:[37,3,78,79,13,58,19,34,22,80,61,81,44],"128mb":69,op_cluster_post_init:2,ssh:[56,53,0,37,3,78,77,58,79,67,46,43,9,15,19,55,34,22,80,52],lighter:3,primary_nod:[43,79,80],mem_nod:69,requir:[56,0,23,2,3,4,24,42,5,58,39,69,1,80,61,28,62,83,30,8,63,48,66,9,44,45,68,20,12,85,46,82,31,41,32,13,15,54,49,33,34,16,35,57,50,17,36,43,37,77,78,79,67,51,11,55,38,21,22,84,64],attr:[43,16],prime:[0,31],mapper:[37,43,16],wconfd:[34,3,23],output_field:58,lv_name:37,seldom:[37,77],hostil:0,borrow:36,yield:0,irrespect:69,new_nam:[2,58],data_flush:79,new_secondari:[37,2],bugfix:[34,8],"1gib":55,overwrot:34,where:[56,0,7,2,3,24,42,43,57,59,23,60,28,62,30,63,64,67,45,68,40,20,12,82,48,49,34,16,50,85,36,5,37,77,78,79,80,54,69,55,38,83,84,52],vision:20,summari:[38,5,16,58,34],wiki:[37,34,51,13],kernel:[12,51,23,37,64,67,78,43,56,62,69,55,38,34,16,80,68,11],caller:[52,79],shutdown_timeout:[2,58],burst:[66,11,69],bitarrai:[34,67,18],iprout:67,nodee1:82,assumpt:[36,0,48,80,20,35,69],drbd1:43,hierarchi:[77,79,63],drbd3:43,add_reserved_ip:58,drbd7:[8,80],dom0:[16,64,55,69],drbd8:[34,80,55,43],impexpd:34,reiter:33,translat:[56,36,13,55,38,80,50,69],xenserv:28,concern:[12,56,30,18,31,3,34,16,85],instance_tag:[2,34],detect:[12,56,30,0,23,18,63,84,3,4,41,67,80,58,39,26,27,34,68,57,69],kei:[56,3,24,43,58,60,61,44,29,8,85,9,28,81,69,82,33,34,16,18,5,37,77,78,79,80,53,19,55,22],rado:[29,1,31,37,85,55,27,34],tarfil:28,review:[23,80],enumer:3,forecast:85,cpu_mask:[34,50],enough:[0,23,3,43,58,59,7,61,28,63,85,67,10,11,12,48,13,15,49,34,16,50,17,5,37,77,78,79,80,69,55,21,84],"172k":43,between:[56,0,23,3,4,41,42,5,58,39,80,61,28,29,8,63,64,66,9,10,40,20,12,82,48,14,15,54,69,33,34,16,17,36,18,43,37,77,78,79,67,51,81,11,55,38,21,22],timeio:16,getinstancelist:79,across:[29,48,7,18,36,37,84,4,77,78,80,51,58,82,38,34,16,61,60,69],user2:37,spars:[64,0,28],hv_vnc_password_fil:79,cpu_nod:69,parent:[12,34,46,77,66],node_nam:[37,2,58,34],screen:43,disk_overhead:69,style:[30,24,13,5,58,33,34,80,61],popul:[18,3,32,77,79,38,22],drbdn:37,cycl:[37,34,15,54,59],bitset:16,uncondition:68,shortag:0,come:[51,8,37,3,85,24,66,79,78,5,67,69,34,22,80,64,28,17],tue:[34,43],home_nod:37,uuid:[30,7,18,71,72,37,3,77,79,43,58,82,45,38,34,16,60,20],reaction:2,mond:[16,23,68,82],aa104b5:4,img:[64,24,67,55,34,21,28],githash:16,pertain:56,blockdev_prefix:34,quiet:34,lugroupverifydisk:83,ckeck:37,tutori:[29,37,43,67,55,34],present:[56,0,23,2,3,4,42,43,57,28,29,63,64,10,20,12,47,48,15,34,16,17,36,18,5,37,80,69,82,21,22,84],idisk_pool:36,abc123:58,"0020fc1ed55d":55,mani:[56,0,23,4,41,42,5,39,44,67,9,11,82,48,15,33,34,35,50,36,51,77,78,79,80,37,69,55,38,83],starvat:[77,80],threads1:77,among:[23,18,37,82,3,77,78,80,55,34,68,28],netutil:77,threads2:77,cabal:[67,24],threads4:77,threads6:77,color:17,overview:[36,1,37,64,32,80,59,38,28],unittest:[5,15,24,34],inspir:5,disonnect:58,period:[0,23,63,77,79,80,43,6,16,10],dispatch:49,duti:38,exploit:[56,0,3,78,55,16],featur:[56,0,3,5,58,28,29,8,64,67,68,40,20,12,48,31,32,69,33,34,16,36,37,77,78,79,80,81,11,55,22],colon:[34,50,66],memfre:33,exclud:[8,18,78,0,55,59,34,11],cancel:[37,42,80,54,58,34,35,20],hvp:34,poll:[77,79,80,58,34,61],poc:79,damag:[34,79,59],needlessli:[69,17],software_vers:58,ultim:[16,32,80],wrong_stat:58,clust:34,hd0:37,skew:34,size_unit:16,domu:[34,64,55],certifc:3,pci:[34,30],"0x29d02a8":58,meant:[56,23,37,64,32,42,67],covert:28,subproperty2:5,addit:[56,0,23,2,3,4,24,42,43,39,59,7,60,61,28,62,83,30,8,63,85,66,67,45,68,10,40,20,12,48,82,31,32,13,14,69,33,34,16,50,17,36,18,37,77,78,79,80,53,11,55,21,22],nc2c:43,procedur:[56,36,8,23,18,63,37,2,3,4,80,43,67,15,55,27,34,57,48],pendriv:19,glustervolum:38,indirect:[3,0,20,63],gmtime_adj_notaft:44,cpu_tot:[16,69],thousand:15,resolut:[37,77],suscept:80,oposdiagnos:78,catastroph:34,wake:79,subproperty1:5,vmcapabl:37,src_cluster:78,unreleas:34,instance_hypervisor:[2,79],former:[46,4,77,80,58,34,69],reload_ssh_kei:24,instance_nicn_network_subnet:2,"case":[56,0,23,2,3,4,42,5,58,39,59,7,61,28,30,8,63,64,65,67,44,45,68,40,20,12,48,82,32,13,15,69,33,34,16,35,57,50,85,36,18,43,37,77,78,79,80,54,11,55,21,83,84,52],"char":[5,30],sumbmitmanyjob:34,instance_nicn_bridg:2,"50g":37,mount:[56,36,0,63,37,64,62,43,15,55,38,34,68],plugin:[7,37,64,77,79,16,83,69],keygen:[19,55],trick:3,cast:50,invok:[0,37,85,4,9,59,55,49,6,34,68,50],hdd:58,cannot:[56,62,30,0,18,37,3,45,66,79,80,5,69,55,34,38,21,60,84,28],transfer_id:61,invoc:[56,37,40,81,55,34,68,85],vncpasswd:55,margin:11,ganti:68,anotherdatacollector:16,"07805e6f":37,misbehav:54,suse:28,advantag:[12,36,30,0,55,54,3,4,62,79,13,50,56,15,69,32,68,80,40,28,64],stdout:[36,0,2,78,80,82,59,16,61],ioflag:16,metric:[48,14,34,16,10,69],henc:[37,54,69,11,78],worri:[3,8],destin:[37,3,78,79,43,58,81,34,61,64,11],cluster:[56,73,0,23,2,3,4,41,43,58,39,59,6,60,80,61,28,62,29,8,63,48,66,9,44,81,68,10,40,20,64,85,46,82,31,83,32,13,14,15,54,69,33,34,16,50,17,36,18,37,77,78,79,67,53,51,19,11,55,38,21,22,84,52],luclustersetparam:34,eras:[37,55],ambient:59,ganeti_instance_statu:2,ascii:[34,80],curl:[34,58,61,67],csocket:58,commandlin:3,subscrib:[12,78],source_x509_ca:58,develop:[56,29,0,65,64,24,79,80,5,55,34,16,22,11],prop_mymegaprop:5,author:[29,1,37,2,78,13,9,81,59,61,44],alphabet:[5,65,79,80],kvm_vnc_console_port:80,outils_unittest:34,queryexport:34,same:[56,0,7,2,3,4,24,42,5,58,57,69,6,23,61,28,83,30,8,63,48,65,66,9,44,45,10,20,85,46,82,32,13,14,15,49,33,34,16,50,17,36,18,43,37,77,78,79,80,54,81,11,55,38,22,84,64],binari:[8,18,63,37,61,24,5,16,10],threade5:77,threade4:77,threade3:77,threade2:77,threade1:77,timestamp:[37,77,79,20,49,33,34,16,84,28],autocr:58,pai:[43,77],preparatori:0,eventu:[23,18,63,37,3,32,65,78,79,9,15,55,16,28],config_vers:[5,58],max_memori:69,cert_pem:78,byterang:61,exhaust:[77,78],xen_blkfront:55,finish:[8,23,80,63,37,84,77,42,79,78,5,19,20,82,69,34,16,35,61,11,17],webserv:[58,61,13],asymmetri:80,"8gb":[43,0],nest:69,op_instance_set_param:2,driver:[56,36,0,31,51,64,43,58,55,34,16,69],someon:[43,3],snode:[34,40,58],decompress:[0,61],driven:77,concis:32,luinstanceconsol:77,improv:[0,1,3,4,41,25,26,23,61,62,29,66,10,69,31,48,34,16,77,78,79,80,55,38],extern:[57,23,3,58,39,59,60,61,44,29,64,28,10,20,82,48,15,49,34,16,36,18,37,77,78,79,80,55,21,84],glusterstorag:38,postpon:80,ipaddress:28,eth:56,stdin:[2,0,78,80],appropri:[0,7,5,58,23,28,63,64,68,10,20,31,32,16,50,36,18,37,80,81,11,55,22],cherri:34,inconsist:[37,3,80,43,58,54,34,85,69],macro:50,markup:[5,16],pep8:[34,24],waitoutput:78,without:[56,39,23,3,85,43,58,0,69,59,61,28,30,8,63,48,65,66,45,68,10,20,46,32,15,49,34,16,35,17,36,37,77,78,79,80,81,11,55,38,22,84,64],dhcp:[37,34,56],titl:[33,34],op_instance_replace_disk:[2,7,42],model:[39,7,43,51,1,61,44,29,30,28,69,48,15,34,36,18,54,77,78,79,80,37,22],roughli:[83,80,69,13],zonelist:43,leewai:0,execut:[56,0,7,2,3,4,42,43,58,39,27,23,60,8,59,63,65,9,73,10,20,12,32,15,54,49,33,34,16,35,50,17,36,18,71,72,37,77,78,79,80,51,19,69,55,22,84,52],pkglibdir:34,maintain_node_health:[37,34,58],unarchiv:80,threads3:77,rest:[56,57,37,65,67,79,78,5,58,55,59,34,80,20],bitmap:16,disk0_ivnam:28,unclear:[23,80],kill:[12,37,56,41],op_instance_cr:[2,20],aspect:[51,0,32],gnt_cluster:3,touch:[23,37,79,80,35,84],hvm:[8,51,79,80,58,55,34],flavor:55,speed:[0,37,79,80,14,39,25,55,34,16,83,69],inet6:55,versu:[54,48,77,78,34,11],death:23,temporarili:[30,0,23,37,84,34,16,61,17],miscellan:[34,78],stai:[23,37,79,5,33,84],instance_communication_network:58,plugin_specif:16,xenu:[43,8,55],op_node_remov:2,except:[56,2,3,42,43,59,44,30,8,67,5,68,69,48,33,34,17,36,72,54,77,78,79,80,37,22],param:[31,2,85,5,34,50],paral:[8,23],identif:[54,79],priori:69,bigger:[37,3,77,79,80,15,34,61,69],exercis:[37,43,32],guidelin:[5,32],verifysignedx509cert:78,vulner:56,xend:[79,55],disrupt:[33,56],pragma:[5,61],real:[39,4,41,78,50,43,58,15,32,16,80,22,69],around:[56,18,64,43,40,41,42,79,78,5,80,33,34,35,61,38,69,17],use_certif:44,libc:34,lzop:0,xendomain:55,tendenc:5,arriv:[61,78,79],deepseq:67,op_id:[7,42,20],envis:[77,79],mon:[37,34,55,31,43],tie:[20,11],world:[56,39,63,51,59,41,80,5,49],unsign:80,oldnam:77,network_port:[58,80],seg_start_p:16,confd_protocol_vers:79,ssh_host_:19,realtim:50,sendfile2:61,rlib2:[58,49],integ:[77,42,79,80,53,58,82,49,34,16,50,20],shrink:[34,58],benefit:[12,0,23,61,3,77,78,68,10],dnsmasq:56,either:[56,0,23,2,3,43,58,57,6,61,62,29,30,8,63,67,11,12,82,31,48,13,15,34,16,50,17,18,5,37,77,78,79,80,69,55,21,84,52],sdpw:43,oversubscrib:[84,69],output:[0,24,42,43,58,57,59,6,61,28,30,85,47,82,31,32,33,34,16,5,37,77,78,79,80,81,55,38,21,22,52],downward:77,inter:[0,7,2,3,48,77,78,79,80,67,81,34,22,61,44],ovfwrit:28,manag:[0,1,3,59,41,43,58,27,23,28,62,29,8,64,66,67,68,10,69,12,85,32,13,15,34,16,17,36,18,71,72,37,76,77,79,80,73,55,38,84,52],emerg:[34,77,50,59],fulfil:[62,77,23,42,78],"512m":[37,43,82],deduct:69,grub:[37,21,55],allow_runtime_chang:58,"_secondari":34,fledg:[79,13],udev:[36,30,55],showmap:34,handshak:[58,80],default_hypervisor:58,lvremov:[37,43],level_nodegroup:83,instance_nicn_network_gatewai:2,intact:23,kernelspac:[38,31],blacklisted_o:58,nonzero:16,freez:[3,61],writedata:61,accommod:[43,4],remove_inst:[2,58],qemu:[12,30,1,31,64,24,67,55,34,38,21,28],characteris:69,benefici:0,definit:[56,0,2,3,5,58,61,8,9,68,40,69,46,82,48,33,34,36,37,78,79,80,55],recomput:28,legal:11,opclustersetparam:[34,78],"84g":43,exis:18,exit:[12,63,37,48,77,78,9,81,82,33,34,68,52],ddn:37,os_api_vers:[58,80],network_subnet:[2,18],genmayb:5,einval:34,complic:[12,48,37,3,4,79,80,43,15,61,50],spindle_us:[34,11],refer:[56,2,3,4,42,5,58,60,28,62,29,30,67,45,11,82,48,34,16,36,51,79,80,37,69,55,38,21],extra_pkg:55,felt:80,arrow:5,lenni:[21,55,28,79],quit:[39,23,63,37,85,48,42,79,78,11,52,20],sixth:34,scarc:11,inspect:[37,85,79],retrocompat:[65,79],broker:80,remote_nod:[58,7],unsuccessfulli:79,broken:[0,23,37,3,78,79,53,43,34,22,84,85],streightforward:21,node_rol:31,fulli:[18,63,37,48,41,66,79,13,5,69,55,80,34,78,84,11],regexp:[33,2,37,17],op_backup_export:2,appli:[36,8,31,37,3,48,41,78,80,5,67,15,59,69,45,34,83,84,20],"throw":43,earlier:[8,37,48,13,58,34],"7046452df2cbb530877058712cf17bd4":58,src:[37,34,24,81,55],reservemac:34,opnodequeri:79,coupl:[37,3,9,55,34,40,69],tailor:[85,80],device_model:34,sinst:[38,43,85,55],ndparam:[53,34,58],degre:79,srv:[37,64,80,67,55,21,28],stand:[51,34,16,18,79],act:[36,0,23,37,77,3,4,41,80,46,15,16,22],instance_n:60,zeroing_timeout_fix:58,gv0:38,luck:41,backup:[8,63,37,64,79,58,34,21,28],implictli:14,effici:[0,23,18,32,80,58,16,61,28],eval:58,seg_start:16,lastli:34,ignore_s:58,nic0_mod:28,contrib:67,surviv:[4,69],seg_siz:16,runrenamescript:78,multinod:77,strip:[34,69],"import":[56,0,1,2,3,42,43,58,61,44,29,8,63,64,67,28,45,69,12,48,13,15,34,16,5,37,74,77,78,79,80,81,55,21,22,84],mark:[56,57,31,63,37,84,85,24,79,80,43,58,33,34,68,10,50,20],remoterol:16,your:[8,37,2,41,67,43,58,19,69,55,34,21,22,28],complianc:34,area:[39,48,77,78,79,80,34,16,35,68],aren:11,internal_error:58,overwrit:[56,77,78,79,5,22],filetype_pem:44,start:[56,0,23,2,24,5,58,39,69,6,61,28,29,30,8,63,64,67,9,68,10,20,12,46,31,41,13,15,49,33,34,16,35,57,50,17,43,37,77,78,79,80,51,83,81,11,55,22,84,85],compliant:23,instance_be_x:2,interfac:[56,23,2,3,4,42,43,58,69,1,61,30,66,73,10,40,20,46,82,32,13,54,49,33,34,16,35,83,36,18,37,77,78,79,80,51,11,55,22,7],clsuter:63,lot:[62,39,18,40,78,33,42,79,67,5,58,6,34,83,80],ipv6:[56,18,37,77,67,43,58,34,61],clusterip:37,submiss:[39,37,77,42,80,54,34,35],ganeti_data_dir:2,old_primari:2,machin:[56,57,3,4,41,43,58,59,61,28,29,30,64,67,9,11,12,46,82,24,15,34,16,50,17,36,51,77,78,79,53,37,81,69,55,38,22],apollon:34,unam:55,orchestr:56,media:[56,61],from:[56,0,23,2,3,4,24,42,5,58,57,26,27,6,7,60,80,61,28,62,83,30,8,59,63,64,65,66,9,44,45,81,68,10,40,11,12,85,48,82,41,32,13,15,54,49,33,34,16,35,50,17,36,18,43,37,75,77,78,79,67,53,51,19,69,55,38,21,22,84,52],serial_no:[58,80,45],tupl:[47,37,85,77,42,58,5,9,79,82,49,33,34,16],powerdown:12,hroller:[34,72,71,17],jun:34,concess:0,jul:34,state_reason:16,tspec:77,htpasswd:80,diffus:77,crontab:[34,63],ganeti_instance_disk0_s:2,cryptograph:3,realli:[12,39,37,79,80,43,59],categor:80,untag:[34,66],faster:[0,77,80,34,16,61,83],example_monitor_host3:55,notat:[5,18],example_monitor_host1:55,node_uuid:[3,58],algorithm:[0,23,37,48,79,80,58,69,82,34,83,10,11,17],possibl:[56,0,23,3,4,24,42,5,58,39,69,59,6,7,61,28,62,30,63,64,65,66,44,68,10,20,12,48,32,13,15,49,33,34,16,35,57,83,17,36,43,37,77,78,79,80,54,19,11,55,38,21,22,84,85],"default":[56,0,3,24,43,58,57,59,6,44,62,83,30,8,63,64,66,67,28,10,69,47,82,32,14,33,34,16,50,18,5,37,77,78,79,80,53,81,55,38,21,22,85],network_link:58,master_netdev:[2,9,58],bucket:48,jailbroken:22,nic2:33,fake_id:79,unusu:56,oblivi:51,vhd:28,embed:84,deadlock:[23,65,80,55,38,35],expect:[56,0,2,4,42,57,59,61,44,68,69,12,82,48,15,33,34,16,50,36,18,37,77,79,80,53,55,38,21],"1023m":85,gone:[37,34,16],nic1:33,findmatch:33,creat:[56,0,23,2,3,4,5,58,39,59,61,28,62,30,8,63,64,65,66,67,44,45,81,68,10,40,20,12,46,82,31,32,15,54,69,34,16,57,83,17,36,18,43,37,77,78,79,80,73,19,11,55,38,21,22,85],certain:[0,7,6,23,44,29,28,68,69,46,13,15,49,34,16,18,37,77,78,80,11,55,22,84],lint:[5,24],cpu_count:69,hotplug:[34,30,67,58,27],watcher:[8,37,84,3,77,78,79,80,51,15,0,55,6,34,46,57,68],strongli:[34,22,64],deem:[84,0,65,78],decreas:[34,77,78,80],shortcut:32,file:[56,0,23,2,3,4,24,42,5,58,57,6,61,28,29,30,8,63,64,65,9,44,45,81,68,40,69,12,85,46,82,31,41,48,13,15,49,34,16,50,17,36,43,37,77,78,79,80,19,55,38,21,22,84,52],proport:37,intra:[0,3,77,78,80,43,22,61],fill:[30,0,18,80,69,28],incorrect:[12,34,44],again:[56,23,2,3,4,24,43,58,6,8,63,65,66,9,45,68,40,48,33,34,17,5,37,77,78,79,80,82,21,84],beyond:64,googl:[37,5,61,55,43],op_cluster_destroi:2,extract:[38,34,16,23,45],hybrid:[77,66,69],prepend:[0,78,49],field:[57,18,63,37,40,77,79,80,38,58,28,59,33,34,16,35,20],src_cert:78,compet:[83,11],hvm_nic_typ:80,export_devic:80,writabl:82,you:[2,3,41,43,58,59,6,28,29,8,64,67,81,40,69,24,34,5,37,79,80,19,55,38,21,22],architectur:[30,0,1,63,37,42,79,78,58,80,69],poor:80,collector_nam:[37,16,47],prereq:18,regardless:[68,4],sequenc:[56,0,23,77,4,24,80,5,67,32,34,7,50,69],call_:80,on_poweroff:57,vertex:17,grnet:37,fsck:[2,43],disk_siz:[37,69],briefli:[68,11],networkless:18,recent:[56,30,23,78,79,67,55,34,44],reproduc:[39,4,78],"_bridg":80,unless:[56,3,42,5,58,61,28,9,68,69,48,15,34,50,17,37,77,78,81,11,55,21],pool:[1,3,58,62,30,85,69,31,48,34,17,36,18,37,77,78,79,80,11,55,38,22],drbdadmin:69,reduc:[56,0,23,80,37,3,4,77,42,79,13,43,54,38,34,83,78,10,69],deliber:[32,42],set_pubkei:44,escal:[22,78],addsecondari:5,directori:[56,2,4,24,58,6,28,8,64,67,68,12,46,82,15,34,36,18,37,77,78,79,80,81,55,38,21,22,85],mpgsize:62,descript:[29,39,77,80,5,58,15,20,82,34,33,21,46,69,28],tricki:[15,11],vcpu:[51,37,48,77,80,43,58,11,82,69,34,50,28],chown:30,hs2py:34,potenti:[12,36,0,23,55,41,3,4,24,42,58,67,56,69,32,79,34,16,77,48,28],cpp:5,escap:[5,34],level_nod:69,degrad:[34,23,43],gmtime_adj_notbefor:44,unset:[37,34,78],togeth:[56,23,41,5,61,63,69,12,46,32,13,34,16,17,37,77,78,79,80,19,11,38],scm:30,suffici:[5,0,50,55,69],all:[56,0,23,2,3,4,24,42,5,58,39,69,59,6,7,80,61,28,62,29,30,8,63,48,65,66,9,44,45,81,68,10,40,20,12,85,46,47,82,31,41,32,14,15,54,49,33,34,16,35,57,50,17,36,18,43,37,72,77,78,79,67,53,51,83,19,11,55,38,21,22,84,64],dist:[34,8],consider:[12,0,1,63,61,3,32,5,69,23,10,50,20],op_master_failov:2,disk_:80,ssconf_master_candidates_ip:34,forbidden:80,instance_new_nam:2,mnt:[37,64],fragment:28,lacp:66,helper_shutdown_timeout:58,correl:[39,77],abil:[36,3,41,42,78,38,15,55,33,34,22,80,60,68],follow:[56,0,23,2,3,4,24,42,76,5,58,39,69,25,26,27,6,7,60,61,28,62,29,8,59,63,64,65,67,44,81,68,10,20,48,47,82,31,41,32,13,49,33,34,16,57,50,17,36,18,71,43,37,74,75,72,77,78,79,80,73,19,11,55,21,22,84,85],disk:[56,0,23,2,41,42,43,58,39,27,1,60,61,28,29,30,8,63,64,45,11,46,82,31,48,14,15,54,33,34,16,83,17,36,71,72,37,77,78,79,80,73,81,69,55,38,21,22,84,85],children:[77,79],abid:34,"0x29cbed8":58,batcher:34,"1mb":0,wish:[21,64,55],testnet1:18,rewrot:34,nodea:43,dest_cert:78,script_nam:56,nodeb:43,shall:[6,52,66],tail:43,program:[46,82,37,61,78,58,13,5,9,15,67,55,59,33,34,10,20],optimis:[34,80],those:[56,0,23,3,5,58,39,59,7,60,85,10,69,32,34,16,57,17,37,77,78,79,80,11,55,38,21,83,84],solicit:37,queri:[39,23,3,27,42,58,57,59,60,85,69,47,15,54,33,34,16,11,71,72,37,76,77,79,80,73,20,22],megabyt:[33,61,80],neglig:61,introduc:[56,0,23,40,4,42,61,28,30,85,10,11,12,46,31,48,15,49,33,34,35,36,18,37,77,78,79,80,54,69],getrsakeypath:78,queryfield:[33,34],liter:[5,47],straightforward:[24,77,78,80,11,61,69],determinist:77,fals:[37,2,3,78,79,80,43,58,82,59,33,34,83,35,44],opinstancequerydata:78,ganeti_instance_be_auto_bal:2,offlin:[57,2,3,41,42,43,58,59,63,10,69,31,48,33,34,16,17,37,79,80,82,83,84],util:[29,0,55,37,77,64,4,24,78,67,32,33,34,16,61,68],print:[46,24,78,79,43,58,33,34,16,44],rapi_us:[34,3,77,79],candid:[0,23,3,41,43,58,59,44,9,68,48,13,34,16,37,77,79,80,54,82,22,84],worst:[48,78],fall:[29,68,80,10,34],veri:[0,23,3,4,41,5,59,61,28,64,66,69,24,48,13,15,33,34,83,37,77,78,80,11,82,21,22],rebuild:[34,19],strang:[56,69],enviroment:36,bridge_stp:55,ssl_client_s_dn_cn:13,mixedcas:5,brctl:55,hyp:28,emul:[51,34,64,41],sane:59,stderr:[2,36,59,80,34],node1:[46,82,43,37,2,79,38,58,44,55,59,33,21,28],node3:[37,2,43,58,82,59,33],parallelis:80,node5:[2,59],mcl_current:79,enterpris:28,altogeth:17,dfree:[38,43,58,85,55],tag1:[58,28],infinitesim:69,tag3:[58,28],drbd:[0,23,2,43,58,39,51,8,85,67,10,69,82,48,34,16,83,17,36,73,77,78,79,80,37,11,55,22,84],qmp:[12,34],eas:[36,79,80,55,34,16],sync:[36,37,40,77,78,79,80,43,59,34,16,17],past:63,syslog:34,zero:[36,0,1,2,64,5,58,81,82,49,33,34,16,61,83,69],pressur:11,design:[56,0,23,3,4,41,42,58,39,69,25,26,27,6,1,60,61,28,62,29,30,63,64,65,66,9,44,45,81,68,10,40,20,12,85,46,31,32,13,15,54,49,33,34,16,35,57,50,17,36,18,71,72,37,74,75,76,77,78,79,80,53,73,59,11,82,38,21,83,84,52,7],pass:[56,0,23,2,24,43,58,59,61,30,85,67,9,68,11,82,13,49,33,34,16,35,83,36,18,5,37,77,78,79,80,81,69,55,22,84,52],extp_param1:36,extp_param2:36,suboptim:[34,69],nbd:36,harden:22,deleg:[37,48,23,69,13],start_node_daemon:9,default_ialloc:58,soundhw:34,"11de":79,sun:37,sum:[48,77,5,28,34,16,69],advanc:[37,80,67,55,34,69],abl:[56,57,7,3,41,43,59,23,60,62,30,63,65,66,20,12,46,13,15,69,33,34,16,83,17,36,18,37,77,78,79,80,54,11,55,22,84],overload:[34,69],operatingsystem:28,ssconf_node_secondary_ip:34,pnode:[34,40,58],abbrevi:37,dhcpv6:37,intersect:23,sdc1:55,consecut:[79,4,50,28],deepli:56,method:[56,23,5,58,61,62,85,66,69,32,31,48,13,15,33,34,16,50,36,18,37,77,78,79,80,51,55,22],contrast:[37,34,80],movement:77,millisecond:16,hasn:[2,23,77],fping:[34,67,43],hash:[3,78,58,38,34,16,44],"5gb":64,unmodifi:33,exit_notmast:68,nic_vlan:66,lack:[30,18,54,40,79,80,28,34,83,84,69],modular:[12,80],"750gb":43,middl:79,morfeo:28,excess:0,ver:55,standard:[56,2,42,43,58,61,28,29,63,9,67,10,69,32,48,34,16,5,37,78,80,53,11],modifi:[56,0,23,2,3,24,43,58,39,59,60,69,62,29,30,8,63,85,65,66,81,68,20,46,31,41,48,14,15,49,34,57,50,17,36,18,37,77,78,79,80,53,19,11,55,38,22],valu:[56,0,2,42,5,58,57,59,60,28,62,8,85,66,9,45,81,20,12,46,47,82,31,32,14,69,33,34,16,35,18,43,37,77,78,79,80,53,51,19,11,55,38,21],evaltotru:58,search:[29,37,24,79,82,34,17],tweakabl:79,ahead:[37,77,79,69,63],nth:80,src_cert_fil:78,reason:[56,0,23,3,85,41,42,5,58,39,69,59,6,7,61,28,29,30,8,48,9,10,20,12,46,32,13,15,49,33,34,16,35,17,36,71,72,37,77,79,80,54,19,11,55,38,21,52],oper_vcpu:58,mac:[56,30,82,37,2,80,43,58,69,55,34,28],prior:[34,0,79],amount:[0,23,2,58,39,59,61,28,85,10,69,48,14,33,34,16,51,77,78,79,80,37,11,55,21,83],"9mb":0,isn:[37,34,79],redistributeconfig:79,reserved_lv:[34,58,69],pick:[34,85,80],codebas:[37,34,23,13],introductori:55,versioninfo:16,magnitud:80,believ:79,via:[56,0,23,2,3,41,43,58,61,62,8,64,67,9,73,68,10,11,46,82,24,48,13,34,50,17,36,18,5,37,77,78,79,80,51,81,69,55,22,52],shorthand:83,beparam:[37,34,58,79,80],root_path:[37,34,8,43],intermedi:[15,77,44,63],transit:[12,23,63,37,84,85,77,42,79,80,34,61,69],instance_os_typ:2,network_gateway6:2,readili:57,cafil:78,filenam:[37,82,34,22,61,52,28],inappropri:38,identify_default:58,famili:[34,43],heurist:[85,10,55],suddenli:54,decrement:16,establish:[56,48,3,32,77,80,43,34],enabled_user_shutdown:58,select:[36,48,18,37,82,4,77,78,79,13,43,58,55,33,34,16,80,28,17],cluster_repair_disk_s:37,matchobject:33,hexadecim:[43,50],proceed:[37,43,80,78,17],insserv:34,distinct:[36,20],rt_tabl:18,ctrl:[12,34],tackl:0,two:[56,0,23,2,3,4,42,5,58,39,59,6,7,60,61,28,29,8,63,85,45,68,40,69,12,48,82,32,15,49,33,34,16,35,50,17,36,18,43,37,77,78,79,80,54,19,55,38,21,83,84],coverag:[34,32,24,69],ganeti_pub_kei:3,zfp91c:43,ctotal:58,autonom:[16,79],taken:[56,0,23,31,3,78,80,14,39,69,11,34,21,57,52,20,17],initrd_path:[37,43,8,80],minor:[36,8,63,37,4,79,80,43,0,34,16,61],network_mac_prefix:2,reachabl:[37,34,3,59,56],flaw:[4,0],desir:[36,0,7,18,37,3,4,77,80,43,58,57,69,34,33,23,35,61,28,17],flap:[41,16,10],canon:5,hundr:[77,15,38,34,61,69],iallocator_script:37,problem:[56,0,3,41,43,58,59,61,28,30,8,63,85,45,40,11,12,48,32,15,34,16,5,37,77,79,80,54,69,55,21],customis:[29,37,2,24,79,15,34,69],runtime_memori:2,adapt:[0,3,32,24,48,79,58,34,16,40,69,85],flag:[68,37,2,3,85,24,77,78,43,11,82,59,34,16,80,64,20,17],sigkil:12,uncov:34,broke:34,particular:[12,56,23,37,79,3,41,28,80,5,67,84,20,38,34,16,10,22,11],op_group_set_param:[2,18],build_chroot:34,nic_count:[69,28,80],offload:34,cach:[34,16,77,61,64],sinst_list:58,none:[48,18,43,37,2,4,41,66,79,78,5,58,77,59,33,34,22,80,83,69,17],endpoint:[34,81],nodegroup1:[37,18],pycurl:[34,67,61,13],valuabl:3,nodegroup2:18,outlin:[68,79],dev:[56,8,31,37,2,64,24,78,79,43,67,55,61],histori:[34,85,24,80],blockdev:[34,58,85,28],remain:[12,30,0,23,54,63,37,64,48,78,79,80,43,15,69,59,38,34,68,61,20],paragraph:[37,77,16,48,47],opennod:28,edit:[8,37,19,55,38,34],caveat:[63,80,69,59],learn:55,abandon:79,deb:37,dec:34,obtain:[0,23,18,63,37,3,77,80,55,34,52,17],switch1:66,def:5,transcend:[51,11],omit:[18,37,32,80,59,28],prompt:59,dual:[2,80,61,77,34],greaterthanzero:58,scan:[55,80],challeng:4,ddump:24,printtestcas:5,templat:[39,1,5,58,0,27,28,29,8,64,68,69,46,82,31,34,17,36,71,72,37,77,80,81,11,55,38,21,85],dts_net_mirror:36,tabular:37,loadstat:68,minimum:[18,43,37,77,78,5,44,55,69,34,10,50,11],resync:[34,80,69,43],explor:0,luxid:[56,23,54,34,22,68],bandwith:34,action:[12,36,30,0,23,31,63,37,2,3,32,77,9,57,28,59,6,34,16,60,20],routing_table_200:18,low:[39,54,32,77,80,55,34,22,10],huge:[56,29,61,62,1],mfree:[62,43,85,38,58,55,33],"128m":43,interconnect:38,newlin:[33,5,79],secur:[56,0,1,3,25,26,28,29,30,8,85,81,68,20,34,54,77,78,79,80,19,55,38,22],programmat:[33,29,84],export_do_shutdown:2,mcl_futur:79,snippet:55,neede:23,reject:[34,68,69,20],dest_clust:78,strong:78,simpl:[23,4,24,42,43,61,44,30,8,64,67,28,68,11,48,33,34,16,17,5,37,77,78,79,80,69,82,38],nsupdat:37,plain_cert:78,snapshot:[39,37,64,80,54,34,61],regener:[37,3,19],job_status_waitlock:42,threat:44,op_network_disconnect:2,overcommit:11,our:[56,23,18,77,3,32,41,78,79,80,43,15,69,34,68,10,85,28],vlan:[34,58,0,66,43],variant:[85,78,58,5,9,79,34],sneak:40,reflect:[36,30,18,63,73,3,42,34,16],virtualsystemcollect:28,applicationpend:16,buffer:[56,64,78,79,13,69],numa:11,offset:[5,16,61],heartbeat:41,scm_right:30,associ:[56,23,37,2,48,24,42,79,80,51,11,33,34,16,61,77,20],nonetheless:79,set_serial_numb:44,stabil:[4,41,80],circumst:[34,23,69],github:50,zero_free_spac:58,ani:[56,0,23,2,3,4,24,42,5,58,39,69,59,6,7,61,28,62,83,8,63,64,65,45,68,10,40,20,12,47,31,41,48,13,15,54,49,33,34,16,35,57,50,17,36,18,43,37,77,78,79,80,51,81,11,55,38,21,22,84,85],onto:56,davem:43,proto:[16,23],ambigu:[33,60],caus:[0,23,2,43,58,61,28,8,64,67,20,12,48,33,34,16,50,37,77,79,80,82,38,21,83,84,85],callback:[35,80,13],opinstancemultialloc:83,call_upload_fil:65,rebalanc:[85,10,79],scsi:[34,55,80],basehttpserv:13,egg:[3,85],iscsi:36,logrot:[34,55],group_network_link:[2,18],sysctl:43,blktap2:[34,58],burn:43,check_privatekei:44,soon:[56,39,77,79,80,43,58,81,34,16,84,22,20,68],trade:3,kernel_arg:[37,43],held:[23,77,4,65,42,79,78,43,34,83,80],i386:79,through:[56,0,23,4,41,43,58,57,69,59,83,61,28,29,8,63,85,66,9,10,20,12,47,31,24,15,49,34,16,50,17,36,37,77,78,79,80,73,11,55,38,22,84,52],polymorph:5,reconnect:34,minmax:[58,82],variat:[37,0,79],suffer:[37,78,79,80,34,17],paramet:[56,0,1,2,5,58,39,69,59,23,60,61,28,62,83,8,85,66,9,20,48,47,31,32,14,15,54,49,33,34,16,57,50,36,18,43,37,77,78,79,80,53,51,81,11,55,38,22,52],src_node:[2,58],systemd:[34,68,25],job_id:[58,42,80],undrain:[37,34,63],exact:[23,82,37,48,80,55,33,34,16,61,69],epoch:[33,16,49],instance_reinstal:34,late:[54,80],resort:[38,56,80],wrt:[34,3,23,22,68],html:[61,67,24],rapidli:41,op_init_clust:2,bypass:0,curlopt_writefunct:13,pad:[16,49,13],might:[56,0,23,3,4,24,42,5,58,61,8,63,85,66,67,10,40,20,12,48,82,41,32,13,15,54,49,33,34,16,35,17,36,43,37,77,78,79,80,51,11,55,21,22,84],alter:[0,77,55,80],pae:[34,80],wouldn:[23,84,42,78,34,61],good:[0,3,4,41,43,61,8,67,69,31,32,13,15,16,17,5,37,77,79,80,55,38],"return":[56,39,7,2,40,41,42,5,58,59,6,23,61,30,45,20,47,82,48,33,34,16,35,36,37,77,78,79,80,55,38,84,52],vg_uuid:16,no_instal:[34,58],"22459cf8":43,sentenc:5,pollut:[78,79],chuid:77,configobject:33,oldnod:43,op_cluster_ip_turndown:2,somebodi:16,instance_primari:2,foo_bar_baz:5,shred:19,detach:[36,45,43],"_backend_typ":80,complain:[37,34,59,43],export_nod:2,gethostbynam:77,turndown:2,document:[56,0,23,2,3,4,24,42,76,5,58,39,69,25,26,27,6,1,60,61,28,62,29,30,8,63,64,65,66,45,81,68,10,20,12,46,82,31,41,32,13,14,15,70,49,34,16,35,57,50,17,36,18,71,43,37,74,75,72,77,78,79,80,53,73,59,11,55,38,22,84,7],ignore_offline_nod:58,troubleshoot:[37,43,80],sole:28,instruct:[29,46,37,64,48,67,8,55,34],authent:[56,31,78,79,80,43,58,34,22,61],tear:80,token:[3,22],osparams_secret:58,libghc:[67,24],undertak:0,should_run:82,ceas:23,found:[0,4,24,42,43,58,57,63,64,67,9,69,82,13,33,34,37,77,78,80,81,55,22,84,85],intervent:[37,16,8,59],add_mod:2,ifi:55,pcre:67,subsystem:[16,41,69],week:[37,44],instancesetparam:34,prescrib:16,weight:[14,16,48],a5ad:82,blank:5,lugroupassignnod:34,idea:[41,85,77,79,38,16,35,84],group_list:58,slowdown:64,heavi:[34,64,23,78,69],initrd:[37,34,8,55],bangpattern:5,connect:[56,0,23,2,3,43,58,80,61,66,9,45,68,12,82,48,54,34,16,50,36,18,37,77,78,79,67,51,81,55,38,22,52],stabl:[56,8,23,64,78,79,80,34,16,68],http:[56,29,47,23,55,31,37,78,67,13,5,58,51,50,34,1,16,80,61,22],thing:[30,23,37,48,24,79,80,5,58,15,55,68,69],todo:[85,48,77],orient:[29,77,43],hostnam:[56,46,18,3,79,15,55,38,34],archivejob:[78,80],voidspac:34,safeti:[56,8,23,63,37,64,80,34],oper_ram:58,syntacti:34,lambda:58,publish:79,footnot:55,recoomend:8,race:[12,34,23,84,80],health:[34,16,84,58,59],healti:16,req_submit_many_job:54,utf8:67,sparingli:[5,32],occurr:[11,80],file_nam:80,foreground:[12,68],qualifi:[5,55,63],assist:[56,4,79],sheepdog:77,proxi:[37,4,61,13],gluster_storage_dir:58,upon:[12,83,30,0,18,37,40,4,41,42,80,51,34,16,61,60,20],pcpu:[34,77],team:64,src_path:[2,58],gntconfd:77,pub:[19,79],std_ispec:69,quick:[29,82,37,24,80,5,67,15,55,34],ovfconvert:[21,67,28,34],source_cert_fil:78,rmem:69,dire:0,ask:[8,23,37,85,78,79,59,38,34],opinstancebulkadd:40,workstat:0,bash:[34,61,24,55],basi:[56,37,77,66,5,34],instance_uuid:58,luclusterverifygroup:[34,83],pyyaml:24,bring:[8,63,37,3,79,80,54,69,59,38,34,20],thread:[12,83,23,54,77,65,78,79,80,19,34,16,35,50],unhandl:43,exponenti:61,perhap:[56,0,78,17],csr:[61,44],unknownfield:33,set_issu:44,relocate_from:82,instanceshutdown:57,fallen:10,ganeti_instance_os_typ:2,name2:24,feed:77,pleas:[56,62,8,43,37,41,24,79,5,67,19,69,55,34,6,21,16,28],major:[63,37,4,77,42,79,78,43,80,34,16,35,68],notifi:[30,0,77,78,79,35,61],obviou:[5,16,41,85,11],lvm2:67,diskless:[46,37,85,80,58,15,34,21,28],exchang:[56,37,77,78,43,81,22],certfic:3,misc:34,number:[56,0,23,2,3,4,24,5,58,39,61,28,8,63,64,44,45,68,10,11,46,47,82,48,13,14,49,33,34,16,35,50,17,36,18,43,37,77,78,79,80,53,54,81,69,55,38,21,83],sptotal:58,mcpu:[34,83,32,65,78],"3de":13,x509v3:44,done:[0,23,2,3,4,41,43,58,57,61,28,83,8,63,64,65,66,9,68,40,11,24,33,34,16,50,17,36,37,77,78,79,80,54,19,55,38,21,22,52],unhealthi:48,preferred_lft:55,"262e":58,horribl:5,python2:43,miss:[12,8,23,37,2,41,78,79,80,43,69,33,34,68,84,50,28],"40mb":0,obligatori:0,differ:[56,0,23,2,3,4,24,42,5,58,61,28,83,64,66,67,45,68,10,20,12,82,31,41,48,14,15,69,34,16,50,17,36,18,43,37,77,78,79,80,54,11,55,38,21,22,85],master_netmask:[2,58],guest:[56,37,64,55,34,11],pandoc:[34,24],recompil:55,interact:[56,48,23,37,41,85,4,24,77,78,54,69,33,34,16,80,44],construct:[32,4,78,80,5,69],all_disks_don:78,faq:56,zealou:34,expand:[79,13,55,33,34,16,80,69],accept:[56,57,7,42,43,58,60,61,44,85,28,68,69,48,34,83,36,5,37,77,78,79,80,20,82,21,22,84],mlock:[34,52],gpt:34,gid:34,idisk_provid:36,store:[56,23,3,58,61,44,30,64,66,45,68,69,12,31,33,34,16,36,18,37,77,78,79,80,19,55,38],adher:[34,24],assign:[56,30,18,31,37,60,77,80,43,58,81,69,82,34,38,21,16,50,11],option:[56,0,23,2,3,24,42,5,58,59,6,60,80,61,28,30,8,63,64,66,9,68,10,11,12,46,82,31,13,15,33,34,16,50,17,36,18,43,37,77,78,79,67,54,81,69,55,21,83,85],para:[51,56],blindli:80,compens:[54,69],instance2:[37,2,64,43,82,69],illeg:11,instance1:[46,37,64,78,43,82,69],dt_:34,instance7:43,instance4:[43,82],tasklet:[79,80],attract:10,fred:58,reinstal:[12,56,39,37,2,24,78,79,43,58,34,84],anoth:[56,23,2,3,4,24,42,43,58,59,7,60,61,30,65,11,12,46,48,13,15,33,34,16,35,36,18,5,37,77,78,79,80,54,69,21,83,84],kind:[36,23,37,2,64,42,79,80,58,55,33,47,16,69],scheme:[38,56,58,79],contrari:30,whenev:[8,23,3,77,80,5,84,11],remot:[23,2,42,58,51,61,29,64,20,48,13,15,49,34,16,36,54,77,78,80,37,22,52],gotten:[35,77],remov:[0,23,2,3,4,24,42,43,58,39,6,60,61,28,30,8,63,64,66,9,45,10,20,12,31,41,48,15,34,50,36,18,37,77,78,79,80,53,54,19,69,55,22,84,85],pictur:[61,1],riski:[8,84],onam:37,ca_kei:44,perfind:16,stp:55,str:[36,79],consumpt:[34,77,78,69],stale:[34,23,79,80],toward:[30,23,37,3,79,15,49,34,69],grei:38,netlink:12,opstatu:58,randomli:80,cleaner:[37,23,85,10,34],comput:[46,7,43,37,85,48,77,78,79,80,5,69,82,45,34,16,10,11,17],disk1:33,group2:58,beforehand:[62,65],defect:79,ceph:[29,1,31,36,77,67,55,27,34],packag:[56,8,18,31,63,37,64,24,78,79,43,67,19,69,55,34,21,68,50,28],opupdatenodegroupcach:77,expir:[34,78,79,80],f0af:37,opensusestudio:28,dedic:[23,37,64,78,14,9,55,34,61,11,17],"null":[47,37,2,58,82,16],max_cpu_ratio:77,"2ffc":18,lie:56,unintend:[34,63],relationship:79,lib:[2,3,43,58,44,8,63,85,9,67,81,46,55,15,34,36,37,77,79,80,19,82,38],hunit:24,hspace:[85,77,15,11,34,69],self:[56,0,18,84,3,41,78,80,81,34,22,61,44],violat:[56,34,58,23,11],"10f3e114232d":82,oper_st:[58,57],troublesom:4,undeclar:78,also:[56,0,23,2,3,24,42,5,58,39,59,60,69,28,62,83,8,63,64,65,67,9,45,68,10,40,20,12,46,82,31,41,32,13,15,54,49,33,34,16,35,57,50,17,36,18,43,37,77,78,79,80,51,19,11,55,38,21,22,84,85],"0x29c8cf8":58,build:[56,29,30,82,54,37,4,24,67,5,9,15,70,51,55,34,16,10,22],swapfil:43,localst:16,brace:[5,58],secondary_nod:[37,45],recurs:[37,48],vnc:[34,58,77,79,55],distribut:[56,0,23,3,24,28,8,63,65,67,68,69,31,34,16,36,37,78,79,80,19,55,38,22],autobal:[8,28],op_network_add:[2,18],previou:[56,0,7,3,4,42,5,6,23,8,63,67,69,49,33,34,16,35,17,37,77,79,80,54,19,84],reach:[56,0,23,37,79,80,55,6],react:0,capitalis:5,ifup:[37,34,56,55],prolifer:[54,10,79],plan:[56,0,23,31,37,4,77,78,79,80,38,44,55,69,33,34,16,84,54,28],disk_tot:69,nothing:0,alpha:40,addr:55,chkconfig:67,hereaft:[37,23],"_timestamp":45,quorum:[41,80],bug:[56,31,37,84,3,32,78,43,19,54,55,59,34,22,61,85],instance3:[43,82],op_group_evacu:2,clear:[0,23,37,2,48,32,77,80,5,58,15,69,34,84,11],opparam:34,cover:[30,39,7,85,77,78,79,80,69],equalorgreaterthanzero:58,destruct:[37,34,57,84],"2nd":34,ext:[37,34,58,85,36],part:[56,39,23,2,3,4,24,42,58,69,59,60,61,28,29,30,8,85,67,9,44,45,20,48,31,32,49,33,34,16,35,72,37,77,78,79,80,51,11,82,38,22,84],quickcheck2:24,clean:[0,23,5,77,24,79,80,43,58,57,55,34],pars:[30,37,78,79,13,54,58,82,34,80,61,28],x86_32:37,usual:[56,57,2,43,58,46,61,28,8,67,69,12,32,48,34,18,5,51,79,80,37,81,55],microsoft:28,respect:[85,31,63,37,2,3,48,77,61,66,59,55,45,34,16,78,10,68,69,80],foo555:58,sector:[16,0,69],test1:[37,18],wsgi:13,sample_provider2:36,canceljob:[78,80],sample_provider1:36,carefulli:[56,55,80],finer:34,consult:[77,82,79],comand:63,progressunit:16,session:[34,79],particularli:[56,29,3,0,23],checksum:[34,61,28],miller:43,ganeti_instance_nic0_mac:2,jobqueue_upd:80,reus:[0,23,64,80,43,34,16,61,69,17],fine:[23,37,77,79,80,43,15,20,55,69,61,28],find:[62,30,8,37,48,78,79,80,43,59,82,49,6,34,16,10,20],impact:[56,54,48,77,80,43,82,34,16,83,69],access:[56,0,23,3,42,43,58,61,44,29,30,64,66,28,45,32,47,82,31,48,15,34,16,36,37,77,78,79,80,51,81,55,38,22],firewal:[56,22,80],libnss:34,pretti:[21,61,24],bfd:69,merger:[6,34,79],writer:4,solut:[56,0,23,4,41,42,43,7,61,9,10,69,48,15,33,34,35,1,36,77,78,79,80,11,82,38,84,52],"1aaf4716":43,notifystart:78,couldn:[37,43,83,7],queu:[39,77,42,80,34,16,20],home:[37,2,78,13,34,61],factor:[39,23,48,42,0,61,69],curlopt_proxi:61,disksiz:80,represent:[18,63,79,80,45,33,16],std:[34,58,82],remedi:[0,80],key_nam:78,hit:[62,77],unus:[62,0,37,79,80,43,49,21,34,68],canonci:34,albeit:0,no_rememb:[34,58],"__file__":43,express:[37,5,69,55,49,33,16,20],cheaper:[34,69],drbd_helper:58,nativ:[34,67,68,55],max_tracked_job:58,simplist:37,tcp:[56,37,78,43,58,81,38,34,61],"3400m":82,network6:[37,58,18],grep:[37,43,8],desiderd:16,fillhv:80,network2:58,evacu:[0,7,37,2,64,48,77,79,80,43,58,82,34,35,10,84,69,17],restart:[56,0,23,2,57,61,8,63,9,68,69,12,46,34,37,77,79,80,51,19,55,22],network1:58,instance_secondari:2,pnode_uuid:58,syslogd:43,irrevers:37,qathreadgroup:34,instancenam:80,umount:37,rfc:[37,78,13,58,34,22,61,44],common:[56,0,2,3,24,43,28,85,67,68,55,48,34,36,5,37,77,79,80,82,22,84],userspac:[12,31,67,55,38,34],srcversion:16,tix:24,wrote:15,commod:36,arp:[37,67],certif:[29,8,1,3,78,79,13,9,81,19,44,34,22,61,52,28],set:[56,0,23,2,3,4,24,5,58,57,59,7,80,61,28,62,83,8,63,64,65,66,9,44,81,10,40,20,46,82,31,32,13,15,69,33,34,16,50,17,36,18,43,37,77,78,79,67,19,11,55,38,21,22,84,85],dump:[56,0,64,4,78,80,55,22,61],taggabl:[77,45],ganeti:[56,73,0,1,2,3,4,24,42,76,5,58,39,69,25,26,27,6,7,60,80,61,28,62,29,23,8,59,63,48,65,66,9,44,45,81,68,10,40,20,64,12,85,46,82,31,41,32,30,13,14,15,54,49,33,34,16,35,57,50,17,36,18,71,43,37,74,75,72,77,78,79,67,53,51,83,19,11,55,38,21,22,84,52],fr5e:37,sensit:[56,55,3,80,82,22],startup:[12,30,0,37,2,4,65,78,79,80,51,58,15,19,55,34,68,69],"256mib":43,ara:22,see:[56,7,3,41,42,5,58,59,23,61,83,30,8,63,85,67,9,81,68,10,20,46,82,24,48,13,54,33,34,16,50,17,36,43,37,77,78,79,80,51,19,11,55,38,22],sed:37,bare:[5,65],disk0_meta:43,arg:[34,80],close:[56,39,23,77,79,80,5],pvm:[8,82,43,37,80,51,58,55,34,28],set_vers:44,simultan:[36,23,48,58,61,17],instance_nicn_network_uuid:2,inconveni:[37,0,49],op_instance_migr:[2,7,42],systemat:4,someth:[43,37,84,85,42,80,5,15,11,55,6,34,16,61,20],equalis:69,topmost:79,stall:[77,80],forcefulli:23,kpartx:[37,43,55],drbd2:43,readsnum:16,subscript:[51,34,78,69],experi:[38,56,0,78,80],altern:[12,36,0,1,37,77,3,24,58,79,80,5,56,15,84,55,38,23,61,50],signatur:[78,79,5,81,35,61],latin:34,syntact:[56,34,16,80],numer:[32,5,33,34,16,60],osparams_private_clust:58,"9aa6ce92":79,javascript:58,isol:[37,0,55,11],disallow:[37,84,48,20,55,34,61,28],hidden_o:58,lowercas:[37,16,47,78],gibibyt:80,frozenset:[5,36],op_instance_recreate_disk:2,opportunistic_lock:[34,58],ssh_root_kei:9,both:[56,0,23,3,4,24,43,58,57,7,60,28,62,30,8,64,67,9,81,68,11,82,48,13,15,34,16,50,17,36,5,37,77,78,79,80,54,19,69,55,21,84,85],last:[56,0,43,37,49,77,78,79,80,5,58,46,54,55,45,34,16,84,60,17],delimit:[2,80],getnodeinfo:79,hint:[43,0],alon:[18,48,80,59,34,16],event:[12,29,57,64,41,80,34],foreign:37,roman:34,speicif:6,alow:69,disksect:28,forgotten:[37,77,80],welcom:[29,34],bond:66,whole:[23,3,5,59,28,30,66,68,10,69,46,33,34,16,17,36,18,37,77,78,79,80,11,83],physdev:[37,43],load:[30,23,54,37,40,48,24,66,79,78,14,15,69,55,33,34,16,80,64,11],old_instance_nam:80,onward:[8,4],simpli:[56,23,7,63,37,77,3,48,41,78,79,80,43,67,15,81,34,21,61,69],splice:[61,24],figur:11,instanti:79,schedul:[23,37,84,80,43,49,34,16,10,11,17],i_pri_memori:82,uptod:34,header:[8,64,78,80,5,58,34,61],node_group:77,littl:[21,0,50,32,52],shutdown:[0,2,27,43,58,57,26,59,68,10,12,49,34,17,36,37,77,78,79,80,54,55,38],linux:[62,31,37,41,24,78,43,67,73,55,69,38,34,16,22,11,68],mistak:[37,34,80],bridg:[56,30,18,82,37,2,66,79,67,43,58,15,11,55,34,21,80,28],simpler:[12,8,54,4,42,79,78,43,33,80,28],backend:[39,23,43,58,61,28,30,63,64,45,68,69,13,15,49,34,16,36,18,37,79,80,51,81,21,84,85],mynode1:85,mynode3:85,unsuccess:[7,79],"30mb":34,compris:[37,48,23],help:[56,8,82,37,41,3,24,66,79,78,54,15,0,77,55,59,34,22,17],overlook:80,devic:[56,0,2,43,58,60,61,30,8,64,66,68,69,31,34,16,36,71,72,37,78,79,80,51,55,38,22,84,85],due:[56,0,23,3,4,24,42,43,58,61,28,30,63,67,40,11,46,31,15,34,83,37,77,78,79,80,54,69,55,38,22,84,52],empti:[0,7,2,42,5,58,23,30,85,12,32,55,48,49,33,34,16,37,77,78,79,80,82,84],x509_signkey_fil:78,runner:32,secret:[56,37,3,77,78,80,58,81,34,22,61],unlock:[65,79,80],jointli:56,op3:35,brick:38,instance_disk_templ:2,devis:80,luinstanceactivatedisk:77,strategi:[12,29,23,37,38,1],modern:0,autogen:24,setopt:61,fire:[20,80],delet:[36,30,0,23,18,3,77,66,79,80,58,11,45,34,16,64,20],imag:[56,36,0,37,2,64,80,43,58,55,21,34,22,61,28],shuffl:43,epytext:5,gap:34,coordin:[34,20,80],"44d3":58,corner:[34,40],func:5,demand:[54,77,80],ganeti_instance_primari:2,bitfield:18,opbackupprepar:61,cfgshell:37,dom0_vcpus_pin:55,e61fbc97:37,whilt:55,conception:20,look:[42,43,58,6,28,63,85,69,12,48,34,16,36,5,54,78,79,80,19,82,21,84],evac_mod:82,straight:[58,50,69],erron:[22,80],pessimist:23,durat:[83,77,80],"while":[56,0,7,2,3,4,24,42,43,58,39,23,60,61,44,8,63,65,10,20,46,82,31,48,13,54,69,33,34,16,35,36,18,37,77,78,79,80,51,11,55,38,84],runtask:78,unifi:[38,34,0,69,80],match:[56,0,7,2,3,24,43,58,59,61,44,9,69,55,33,34,50,37,77,79,80,82,84],behavior:[56,0,63,3,79,67,57,11,38,34,68,10,28,17],error:[0,2,3,4,24,42,5,58,57,59,6,61,28,62,30,8,63,85,9,44,40,11,47,41,32,33,34,16,50,36,18,43,37,77,78,79,80,38,21,83,84,52],greearb:43,loop:[12,64,80,43,58,34],pack:[21,10,28],subsect:56,propag:[0,77,79,80,58,16,68],xvzf:55,guestfwd:56,readd:[37,34,79,31,43],cpu_numb:16,zrci:43,technolog:[85,61,79,13],demon:8,activ:[0,2,41,43,58,57,61,29,8,63,68,69,13,15,34,16,37,77,78,79,80,19,11,22,84],unitari:69,costli:58,demot:[37,3,41,80,43,34],rid:[37,23,80],deamon:[53,34,23],availabilili:55,exclusive_storag:[34,85,11],unmount:38,fedora:[34,67,68],obsolet:[2,3,8,58,80],belong:[0,23,18,37,3,77,66,79,82,45,34,16,47,20],nanosecond:[16,49],node_list:58,shorter:77,read:[56,0,23,2,3,4,41,42,43,58,61,44,63,65,28,68,82,24,48,15,34,16,5,37,78,79,80,54,81,55,38,84],lengthi:69,decod:[9,58,80],nic0_ip:28,curle_range_error:61,custom_diskparam:58,disk0_siz:28,agnost:[30,55],conflict:[23,18,63,37,77,3,65,67,79,58,69,6,34,16,50,20],inotifi:[12,37,67,42],res1:58,concaten:66,ganeti_instance_nic_count:2,max_disk_usag:77,messsag:34,tmem:[51,69],wherea:[12,56,82,37,2,48,79,54,69,55,38,28],inflat:38,alert:[16,50,58],unintention:63,moment:[7,63,24,66,80,43,69,21,16,22,20],ganeti_hooks_path:2,lxc:[34,58,69,11],stripe:[34,69,11,79],libc6:55,impedi:80,robust:[36,0,23,54,80,34],lxm:67,wherev:68,specialis:2,stack:[37,3,77,79,80,61,69],en_u:[34,24],stateless:[37,41,16,23,80],travers:34,sha1:[3,44,28,78],equival:[56,30,18,80,37,24,42,78,34,35,84,17],discourag:34,eleg:61,unanim:0,entri:[30,0,82,37,3,77,79,43,9,46,19,55,59,33,34,16,50,20],spent:[16,0,61],honor:[34,7,77],pickl:34,person:[56,16,84,28,20],reservelv:34,useabl:[78,55],commonli:[77,28],elev:61,miicsdccahmgawibagi:78,iproute2:67,traffic:[56,0,78,43,55,34,22,69],fibrechannel:36,bog:0,nic_ip_pool:18,anybodi:23,weakest:22,explan:[21,7,79,29],key_selector:5,op_instance_remove_mddrbd:2,dts_ext_mirror:36,reduct:[0,1,69],opinstancesetparam:60,reserv:[62,30,23,18,37,61,77,79,80,58,69,55,49,34,10,11],debug_level:80,shape:20,qr_lock:[54,34],administ:78,openstack:[56,28],poller:34,coul:41,priorit:[77,80],move:[0,23,2,3,43,58,39,1,61,28,29,30,67,9,10,11,48,34,16,17,37,75,77,78,79,80,54,81,69,82,38,21,22,84,7],seriou:79,cur:37,received_t:58,disk0:[33,37],scenario:[56,37,77,80,15,55],disk2:33,disk3:33,pubkei:34,removedisk:45,theoret:[77,61,69,13],stabilis:[34,69],revok:3,"0x0000000a":50,realloc:82,snap:[5,67,34],input:[36,0,37,40,32,77,58,79,80,43,9,15,82,34,16,61,48],prealloc_wipe_disk:[34,58],subsequ:[56,79,78,55,80],ld_:34,launchpad:34,bin:[63,37,2,78,79,67,55,59,34,68,50],bio:43,disk_space_tot:82,transpar:[62,18,37,77,80,67,61,11],ipmi:[51,59],subfield:16,distrupt:37,unexpir:78,intuit:5,bia:79,custom_beparam:58,nginx:13,fdsk:69,bit:[77,24,42,79,15,55,34,22,50,20],base:[0,40,4,24,42,5,39,59,61,28,30,64,67,68,10,69,82,31,48,13,15,54,49,34,16,50,85,36,37,78,79,80,51,55,38,22,52],like:[56,0,23,2,4,41,5,58,39,6,61,28,30,63,85,67,44,45,68,10,11,12,48,31,32,13,49,33,34,16,35,17,36,43,37,77,78,79,80,69,55,38,21,22,84],getcommandoutput:34,resolver_error:58,lost:[56,63,37,80,43,15,69,34,44],semi:[69,55],docutil:47,signal:[12,0,23,63,77,78,79,58,34],whitespac:[33,5,58,78],resolv:[31,37,84,77,78,58,55,34,21,61,28],elaps:23,manifest:28,collect:[34,16],fake:[34,46,15,58],api:[29,23,80,37,52,77,42,79,13,5,58,82,49,33,34,16,78,61,22,20,68],diskn:37,flup:[61,13],modprob:55,encount:[0,84,77,21,83,61,52,28],luinstancequeri:34,often:[78,58,16,84,52,28],t30jmn:37,dest_cluster_nam:78,creation:[56,0,23,40,43,58,39,60,28,30,64,66,45,20,12,15,69,34,83,36,18,37,77,78,79,80,73,11,38,22,85],some:[56,0,23,2,40,24,42,5,58,39,69,83,7,61,28,29,30,8,63,85,67,9,44,68,10,20,12,46,48,13,49,33,34,16,35,57,50,17,36,18,43,37,77,78,79,80,54,11,55,38,21,22,84,52],back:[56,3,58,59,61,30,8,63,64,68,11,46,48,13,34,17,36,37,77,78,79,80,84],understood:[37,5,56],unspecifi:34,sampl:[1,13,55,34,68,61,44],remove_uid:58,sight:[77,80],mirror:[36,23,37,2,64,43,55,34,10],server:[56,1,3,43,58,59,23,61,29,64,67,81,47,13,33,34,16,36,18,37,77,78,79,80,53,51,19,55,38,22,52],collectori:16,insepar:80,other_valu:5,scale:[77,78,80,15,55,38],mknod:30,a_funct:5,go_her:16,exec:80,pep:[5,13],per:[0,2,3,24,58,46,61,44,85,66,28,68,69,12,48,47,82,32,15,34,16,35,50,17,36,37,77,78,79,80,55,22],recognit:34,substitut:[23,55],retri:[12,84,77,79,80,58,34,61],larg:[29,18,32,79,13,9,55,34,21,83,35,61],undon:63,recognis:34,buildbi:16,prof:24,executat:63,proc:[12,34,16,8,43],recogniz:57,cgi:[61,13],switchnam:66,gntnode:77,run:[56,0,7,2,3,4,24,42,43,58,39,59,23,61,28,30,8,63,48,65,67,9,81,68,40,20,12,46,82,31,41,32,13,14,15,54,69,34,16,57,50,17,36,37,77,78,79,80,53,51,19,11,55,38,22,84,64],reserved_count:58,pyopenssl:[67,44],instance6:43,unlik:[12,56,63,61,3,78,13,58,60,10],viabl:[12,36,56],sacrif:83,noteworti:28,step:[56,0,23,3,4,43,59,6,61,8,63,66,69,31,48,13,15,49,34,16,17,37,79,80,19,55],squeez:[34,10,79,55],prerequisit:[37,34,8,82,31],meantim:[40,77,42,58,38,34,61,11],wget:[58,61,55],shorten:[29,82,34],subtract:[62,11],crond:43,most:[56,0,23,2,4,24,5,58,59,61,28,29,64,67,9,44,20,12,48,32,13,14,15,69,33,34,16,43,37,77,78,79,80,81,11,55,21],coexist:4,materi:56,mem_siz:69,bgl:[77,83,65,69],plai:38,perk:0,idl:[78,69],versionful:34,ganeti_instance_disk_templ:2,bash_complet:34,block:[56,0,23,43,58,61,30,8,64,20,31,13,54,34,16,35,36,5,51,77,78,79,80,37,11,55,83,85],timewrit:16,instance_nicn_network_subnet6:2,repair:[8,72,37,77,3,48,41,79,80,43,58,59,34,16,84],instance_hv_x:2,primarili:[36,68,0,31],lifetim:[77,80],pythonpath:24,curlopt_maxconnect:61,within:[56,0,7,3,5,39,23,11,12,46,82,48,34,16,35,37,77,78,79,80,81,55,22],drain:[63,37,2,41,77,79,80,43,58,82,59,34,35,10,84,20,17],network_mod:58,import_index:80,gensometh:5,fqdn:[82,34,79,55,43],protocol_vers:58,chang:[56,0,23,2,3,4,24,42,43,58,39,69,59,83,1,60,61,28,62,29,30,8,63,64,66,9,44,45,68,10,40,20,12,85,48,82,31,41,32,13,14,15,54,49,33,34,16,35,57,50,17,36,18,37,77,78,79,80,53,51,81,11,55,38,21,22,84,52,7],artifici:[15,80,13],partof:68,getfd:30,characht:34,occupi:[30,18],inclus:[58,70,79],span:47,mask:[68,50,79],spam:34,declarelock:[65,23,80],adddisk:45,question:[12,56,0,59,83,35,69],submit:[39,23,80,37,40,4,77,42,58,78,43,9,57,54,33,34,83,35,84,75],custom:[56,0,82,37,41,4,24,79,80,53,15,55,45,38,34,61,69],adjac:16,doubt:[5,61],pocoo:34,sslv2:13,forward:[56,23,37,64,13,58,49,16,50,69,85],etch:[58,8,64,79],authorized_kei:[37,3,78,79,19,22],usr:[46,82,63,37,2,24,78,79,43,67,8,55,59,50],jobexecutor:42,properli:[56,30,57,23,63,37,41,78,79,80,43,54,34,28,17],repeatedli:23,lockless:77,osparams_priv:58,writeord:16,criteria:48,admin_st:[34,16,57,58,82],pwd:24,perman:[37,34,60,84,69],link:[56,62,23,18,63,37,67,79,78,43,58,55,34,28],sda:[64,8,80],sdb:[43,64,31,80],atom:[54,16,35,79,80],russian:13,ns1:78,line:[23,2,3,43,58,61,28,30,67,10,20,82,15,49,33,34,16,50,36,5,37,77,78,79,80,19,69,55,21,22,52],mitig:[3,4,22,31],xendomains_sav:55,already_exist:58,info:[36,30,8,18,31,37,85,77,79,80,43,58,39,82,59,34,46,57,50,28],utc:43,"03af5da9dc50":43,utf:[34,24],nic_link:66,consist:[0,7,2,43,58,23,63,64,68,11,12,46,32,15,33,34,16,36,18,5,37,77,78,79,80,54,69,55,38,85],logfil:[79,80],simplif:69,prelud:5,free_memori:82,cim:28,destination_x509_ca:58,growth:37,"_mac":80,reorder:64,redistribut:[8,37,3,48,77,79,58,34],"4bea":43,highlight:[37,4],yyyi:56,similar:[0,2,3,24,43,58,61,28,8,9,44,10,69,12,13,34,5,37,77,78,79,80,81,11,82,83],signed_cert:78,memtot:33,constant:[36,18,80,85,4,77,42,79,66,5,58,15,69,34,68,78,10,28],nic_:80,detachinstancedisk:45,backrefer:33,allocateport:79,new_primari:2,parser:34,unconf:8,doesn:[56,39,23,2,40,41,42,43,58,6,61,44,64,66,67,45,20,48,15,69,34,16,36,5,37,77,78,79,80,11,55,22,84,85],repres:[43,37,2,64,4,77,79,80,5,49,59,11,55,45,33,16,69,50,20,85],sxp:55,proper:[56,62,57,23,37,48,77,50,5,28,34,16,80,22,11],incomplet:[29,18,28,34],"1400m":82,differnet:[34,64],odditi:38,disktempl:28,nas2:36,ignore_secondari:[2,58],nas1:36,crypt:3,sequenti:[39,34,4,18,80],exportdisk:78,unnecessari:[23,79],nal:83,accross:[75,7],bracket:69,transport:[38,15,61,80],nat:[56,58,28],instance_memori:2,mock:[34,15,24,82,32],nice:[79,55,80],deseri:42,node2_nam:37,hcheck:34,gigabyt:[64,61,69,80],shared_file_storage_dir:58,spice_image_compress:34,resign:3,elsewher:48,meaning:[83,85],force_vari:58,evac:[58,48],score:[34,48,69],distro:34,unaffect:23,svn:34,infrequ:34,sparringli:69,noqueu:55,vice:[37,34,84,79],inaccuraci:34,nic3:33,nic0:33,confirm:[8,23,63,37,13,43,59,80,61],notion:[4,36,0],alphanumer:[37,0],tradeoff:0,depth:[34,77],came:[56,64],leak:[34,16,52],far:[30,63,54,3,13,58,69,16,80,85,44],fresh:[16,23],vsize:43,hello:5,node_sip:2,prototyp:[56,31],vnc_console_port:80,getaddrinfo:77,code:[56,0,1,2,40,4,24,42,5,58,39,59,23,61,44,30,63,64,65,9,45,20,12,82,41,32,13,15,54,33,34,16,35,83,85,36,18,37,77,78,79,80,51,69,55,38,22,84,52],req_wait_for_job_chang:78,edg:17,scratch:2,zeroing_timeout_per_mib:58,confd:[23,37,3,79,73,67,15,54,34,16,22,68],issue10882:61,vgextend:55,ip_address:78,overlap:[77,20,11],supervis:[34,22,68,36],urandom:78,untangl:54,unfulfil:67,cognit:80,op_group_remov:2,compact:18,privat:[56,37,3,77,58,78,9,81,34,22,61,44],ganeti_api_vers:80,last_resort:[58,77],vsctl:66,rsalt:79,shouldn:[2,42,78,43,58,15,69,49,83,11],base64:[34,67,18],friendli:18,simliar:58,granular:[16,78,80],migration_cap:34,evolv:36,becam:[84,42,52],diskinfo:[37,78],networksect:[21,28],breach:0,inst_list:58,xenbr0:55,sent:[12,56,0,23,37,3,78,79,80,58,34,16,47,61],inject:[56,34],xenbu:[56,43],deactiv:[37,2,58,43,34],unverifi:78,redistibut:3,rollback:[6,8,80,79,63],whichev:69,rc5:34,querygroup:34,nic_mode_ov:66,account:[36,0,7,18,14,37,48,4,77,80,5,58,15,69,25,82,34,21,10,11],subcommand:[37,59],graphic:28,volum:[36,31,37,64,79,80,43,58,69,55,38,34,16,22,11,85],removenod:78,rubi:58,untouch:[3,84],implicitli:18,lv_attr:34,runnabl:15,tri:[12,0,43,37,3,4,65,79,80,14,58,15,54,59,34,10,85,69],group_network_vlan:2,magic:[79,80],opt:59,setdiskid:34,scalabl:[12,23,64,77,78,79,80,34],fewer:[37,3,48,42,34,85],queryinst:34,replication_ip:37,smuggl:0,cgroup:11,dealt:80,snode_uuid:58,freed:[43,10],tlsv1_method:44,attachinstancedisk:45,claudia:28,malici:[56,34,0],impli:[36,0,58,9,15,11],cap:69,luclusterredistconf:79,clusternam:[58,55,80],natur:[12,0,77,78,11,69],get_subject:44,bootp:37,add_uid:58,jump:[5,63],node_tags_:2,debootrap:79,instance_nicn_network_gateway6:2,accomod:34,foldl:5,ifdown:55,valid_lft:55,secwritten:16,odd:69,append:[30,79,80,49,6,68,69],osp_:[36,78],compat:[56,1,3,4,42,58,23,61,29,8,63,64,66,68,11,82,32,33,34,50,18,79,80,55,38,83,85],index:[2,77,78,79,80,43,58,82,49,34,60,69],turn:[83,0,23,63,37,3,78,42,79,50,38,15,59,33,34,68,84,40,11,85],copyfil:[8,37,77,80,19,34],undetect:34,power:[56,84,3,41,58,15,59,34,10],compar:[36,48,3,4,77,78,79,80,34,16,11],outsmart:11,gigabit:0,affin:[34,50],henceforth:[83,61],"_config_lock":23,engin:13,experiment:[34,41,55,43],hostkei:43,bridge_port:55,obvious:[85,41],journal:[2,43],deduc:[43,82],can:[56,0,7,2,3,4,24,42,5,58,39,69,59,6,23,60,80,61,28,62,29,30,8,63,48,65,66,9,44,45,81,68,10,40,20,64,12,85,46,47,82,31,41,32,13,14,15,54,49,33,34,16,35,57,50,17,36,18,43,37,77,78,79,67,51,83,19,11,55,38,21,22,84,52],spice_password_fil:34,shelltestrunn:24,"_opentap":30,ration:34,runtime_mem:58,chose:79,acceler:34,despit:81,syncstatu:16,len:[34,67,78],bodi:[5,58,80,61,34],intercept:[0,78],let:[56,30,46,23,18,43,37,77,78,80,5],symlink:[63,79,67,55,34,22,52],ubuntu:[56,34,67,24,55],unpack:[56,28],vcluster:[46,39],safer:17,bdev:[38,36],win:[37,84],implicit:[34,68,48,77],obsolesc:36,convert:[29,23,37,24,78,79,80,55,34,33,21,28],mem_path:62,convers:[37,21,80,28,34],vbd:[43,64],overwritten:34,hypervisor:[56,0,1,2,3,43,58,39,23,28,62,30,64,66,67,11,12,46,82,15,34,16,50,18,51,77,78,79,80,37,81,69,55,38,22],conceiv:[37,80],larger:[37,14,62,23,34],ctx:44,later:[56,0,40,24,58,61,8,63,66,67,69,34,17,37,77,78,79,80,55,83,84,52],glusterf:[38,29,1,55],bootdata:43,cert:[44,28,78],temporaryreservationmanag:18,ssconf_node_primary_ip:34,rdb:[34,85],earli:[0,63,40,34,68,61],opinion:61,typic:[12,36,3,80,38,21,28],seg_pe_rang:16,extp_nam:36,chanc:[12,77,23],revoc:44,control:[56,0,2,3,5,58,6,60,61,30,9,68,69,12,48,34,50,36,37,78,80,20,83],lamda:5,harm:[3,0,63],danger:[56,0,37,65,41,43,55,34,16,52],apr:34,"_sre":33,app:49,aquir:34,gatewai:[56,18,37,13,58,55,34],apt:[37,67,24,55],"boolean":[0,48,77,58,80,9,82,59,33,34,83,20],pull:55,"512mib":[43,55],immut:[77,79],opcod:[0,7,2,40,42,5,58,61,63,65,9,69,32,49,33,34,16,35,51,77,78,79,80,37,20,82,83,84],tap:[37,34,30,64,56],ocf:41,redo:63,op_query_:80,cloud:[56,48,28],dump_certif:44,fed:77,feel:5,feb:34,usb:[56,21,28],commun:[12,56,0,23,2,3,32,77,79,80,43,58,82,59,38,34,22,61,84,44],doubl:[8,0,77,79,5,15,34],querytag:34,upgrad:[12,29,8,23,63,37,3,4,79,80,53,45,56,55,27,34,68,85],mydir:85,next:[30,23,63,37,3,48,77,42,79,13,43,67,34,80,20],websit:13,os_valid:56,all_nod:45,import_devic:80,spfree:[34,58],"791667d07800":43,kvmd:34,your_netmask:55,checker:[5,34],releaseuid:79,ganeti_rootdir:[46,15],remaind:36,sort:[5,48,77,84,34],masterfailov:[34,77],systemctl:68,comparison:[2,4,80,34],ssh_host_kei:9,mismatch:[37,34,50,43],sbin:[37,2,55,63],balanc:[62,40,48,24,66,79,14,11,69,38,34,16,10,83,28],backslash:[5,34],some_late_data:16,pkei:44,"transient":[54,34,80],"32gb":43,insensit:[34,58],name1:24,central:[33,37,16,66],osuf:24,focu:[39,77,17],greatli:[36,80],fan:59,"5fd6b69479c0":42,unacknowledg:16,reboot_typ:2,retriev:[56,3,78,80,58,33,34,35,52],vswitch:[66,27],augment:77,perceiv:[40,84],alia:34,critic:[34,78,59],autorepair:[37,84,16,41],tag:[39,18,37,2,48,41,66,80,5,58,82,34,16,10,84,28,17],timescal:77,your_broadcast_address:55,executor:[34,23,42,78],bidirect:[12,56],meet:59,exc:77,fetch:[57,23,31,3,4,78,58,16],"7ydj":43,proof:[34,79],point:[0,23,2,3,5,58,59,6,60,61,28,62,29,30,8,63,64,45,68,40,31,48,14,49,34,16,85,43,37,77,78,79,80,54,55,84,52],fcgiwrap:61,thenels:5,all_set:69,sharedlock:[65,77,78,79,80,83],slip:78,tar:[56,34,8,24,55],process:[56,0,23,42,5,58,39,61,44,30,8,63,65,67,9,28,68,10,20,12,31,13,34,16,35,50,36,37,77,78,79,80,53,54,11,55,83],lock:[0,23,3,42,58,39,59,1,29,65,73,45,69,48,32,33,34,35,54,77,78,79,80,37,20,83,84,52],migrate_l:2,candidate_pool_s:[58,80],src_imag:2,ganeti_op_target:2,haddock:[5,24],rapi:[56,39,23,3,4,58,0,60,61,44,8,9,68,40,69,48,13,15,49,33,34,35,17,37,77,78,79,80,51,81,22],execwithunuseduid:79,sligthli:2,ganeti_object_typ:2,tab:[5,24,78],"_path":80,instance_nicn_mac:2,onlin:[23,43,37,84,3,63,41,5,59,34,10,85,69,17],serial:[56,23,3,43,58,6,7,61,44,63,40,55,49,33,34,51,78,79,80,37,82,83],pawt:37,loopdevic:64,hvm_disk_typ:80,delai:[39,54,84,77,79,13,0,69,59,34,22,61,52,20],kib:[16,69],sip:58,forese:[80,63],admin_state_sourc:58,sit:[34,69],tamper:56,data_dir:2,vnc_password_fil:79,prv0:58,copyright:5,infeas:0,subdirectori:[56,34],instead:[56,0,23,3,4,24,5,58,57,59,60,61,44,63,64,9,28,45,81,10,11,12,82,48,33,34,16,35,50,36,37,77,78,79,80,54,19,69,55,83,84,85],ovftool:[21,28],weaken:[0,78],panic:80,inher:[3,41,80],source_handshak:58,migrateinst:34,everywher:[34,80,45],workerpool:77,nph:61,op_cluster_renam:[37,2],myvg:85,finterprint:22,stop:[56,39,2,24,43,57,61,8,63,64,68,69,12,46,31,41,15,49,34,16,37,77,78,79,80,53,54,55,22],realoc:82,surfac:[3,78,13],walk:[29,43],metavg:[34,85,69],inst:[5,50,28,34],attent:[0,65,43,55,34,83],share:[56,0,7,3,24,42,58,23,8,63,64,65,66,73,11,48,82,32,14,15,54,49,34,17,36,18,37,75,77,78,79,80,51,81,69,55,38,22,84,85],op_cod:2,netcat:[56,78],redund:[0,23,37,84,59,43,39,69,45,34,10,11,17],physic:[51,46,82,43,37,3,77,79,52,14,58,15,69,55,34,16,80,61,50,11],alloc:[0,2,40,43,58,57,59,29,64,10,69,48,34,16,83,36,18,37,77,79,80,51,11,82,38,22,85],drop:[78,79,9,33,34,22,61,68,17],essenti:[38,83,15],use_localtim:34,syscal:55,bind:[56,37,77,5,67,15,34,22,61],op_cluster_ip_turnup:2,correspond:[56,0,7,2,3,4,58,59,23,61,28,30,63,64,15,34,16,18,37,78,79,53,55,22],processor:[65,64,32,77,78,80,35,69],issu:[56,39,23,3,4,24,42,43,0,59,61,30,8,69,12,31,48,15,49,33,34,16,57,50,37,77,78,79,80,53,54,55,21,22,84],mainten:[7,37,77,55,49,34,16,20,17],temp:59,allow:[56,0,7,2,3,4,41,42,5,58,57,69,59,23,61,28,62,29,30,63,48,66,45,68,10,40,20,64,12,85,46,82,31,32,13,15,49,33,34,16,35,50,17,43,37,77,78,79,80,53,11,55,38,22,84,52],qcow2:28,fallback:[58,28],jobqueue_renam:80,elif:78,least:[56,0,23,2,3,4,41,42,58,59,61,28,68,20,48,32,15,34,16,36,18,37,77,79,80,54,69,55,84],ouput:34,setuptool:[67,24],export_index:80,imperson:81,balanced:10,templatehaskel:24,comma:[24,78,79,80,5,58,82,34,50],expanduidpool:79,blktap:[58,64,80],overful:34,avaibl:79,everybodi:20,bunch:40,perfect:48,job_info:58,outer:34,ispec:[34,69],chosen:[56,30,0,7,39,61,77,78,79,80,43,15,69,34,10,28],send:[12,56,0,23,31,37,78,79,13,54,58,59,34,22,80,61,50],certificateerror:34,src_node_uuid:58,early_releas:[34,58],infrastructur:[18,37,3,4,79,80,54,34,61,28],instance_disk_count:2,purg:80,therefor:[56,39,23,2,42,5,57,59,61,63,64,10,11,12,32,13,49,33,34,83,51,77,79,80,37,81,69,38,21,22,85],submitjob:[78,80],onreadystatechang:58,pinst_cnt:58,crucial:3,crash:[12,57,23,37,64,77,43,54,59,34,16,84,69],pure:[54,60,77,69,80],admin_down:[57,69],drbd0px:43,auto:[82,72,37,77,3,24,80,43,67,11,55,69,34,10,84,28],overal:[12,37,48,77,79],churn:42,dai:[34,61,19,78],auth:43,devel:[34,67],mention:[12,56,30,0,7,84,3,77,50,19,69,55,83,34,16,61,22,28],op_node_add:2,terminolog:[37,29,64,55],luinstancemov:34,fingerprint:[43,61],front:[34,77,79],bootload:[37,34],ganeti_hooks_phas:2,align:[5,32,80],"256m":43,getclient:33,gnutl:34,writefil:77,reestablish:56,somewher:[43,78],xvda1:[37,64],anyth:[43,3,32,80,38,58,55,6,16],mytest:24,unlimit:54,epip:34,otherkei:5,psutil:[34,67,50],trap:34,c_other:79,disk0_data:43,cluster1:[2,82],tracer:78,few:[29,0,37,77,24,67,79,78,5,58,15,19,69,33,34,80,84,81,11,17],secread:16,tolist:5,bump:[34,78],forcibl:[83,0],chunk:[77,61,28,13],"try":[56,0,23,3,4,41,43,58,59,44,62,85,67,68,10,11,48,34,16,50,5,37,77,78,79,80,69,55,22],ignore_consist:[2,58],remap:[56,50],networksend:16,"10g":64,restructuredtext:34,meta:[56,85,67,34,68,69],"static":[23,66,80,58,15,69,55,33,34,22,11],ec2:56,annot:45,mountpoint:[37,36,38],patch:[37,34,67,45],"0x29c85f0":58,special:[0,23,2,41,42,5,58,39,61,30,64,65,15,33,34,35,37,77,78,79,80,38,83],out:[56,0,23,3,4,42,43,57,59,61,8,63,64,68,10,40,20,48,32,14,15,54,69,33,34,16,83,17,18,37,77,78,79,80,51,19,11,55,22,85],variabl:[56,57,2,24,43,58,60,68,69,46,15,34,36,18,5,54,78,79,80,37,11,55],lock_statu:34,soften:34,reload:[56,34,24],influenc:[37,36,80],singular:28,hconfd:34,bad:[0,43,37,40,41,78,80,5,55,34,16,11],facto:68,master_ip:[2,9],stub:[33,23],suitabl:[67,10,82,20],disappear:[56,16,80,63],replace_new_secondari:[43,58,7],hardwar:[36,0,23,51,43,37,3,80,14,15,28,55,34,83,21,16,69,64,11],saniti:[9,40,79],merg:[6,29,16,79,34],name_check:58,red:28,statist:[34,16,77],unallocat:0,shut:[12,0,37,61,78,80,43,58,57,59,34,10],footprint:[54,34,16],jessica:58,insid:[56,57,5,26,27,60,61,30,85,65,11,12,48,13,16,35,17,36,18,37,77,78,79,80,69,55,38,21],workflow:[34,80,69,28,78],stripe_s:79,cleartext:58,source_shutdown_timeout:58,undo:[37,79,63],font:43,standalon:[43,37,73,58,34,16],devnot:67,dictionari:[56,36,18,31,80,77,58,79,78,5,9,69,82,33,22,35,52,28],tempt:80,shun:41,thecollectoridentifi:16,afterward:[4,80,5,19,55,84],quo:3,log:[56,7,2,43,58,59,23,8,65,67,32,15,34,16,37,77,78,79,80,54,55,22,52],ganetiapierror:34,indent:[5,80,34],threads5:77,logilab:24,mem_tot:69,could:[56,0,7,2,3,4,42,43,58,39,59,23,61,44,85,10,20,12,48,32,13,15,69,33,34,16,83,36,18,37,77,78,79,80,54,19,11,55,38,22,84,52],diskread:16,put:[56,36,37,2,32,42,78,5,58,55,34,16,80,84,20,17],segreg:11,"10gib":34,david:43,counterpart:[85,24],length:[30,0,18,37,79,80,5,58,82,33,61],enforc:[36,0,64,13,5,69,34,50,11],indend:5,crl:44,outsid:[56,63,37,3,77,66,79,78,69,55,45,34,22,80,84,16,28,85],balloon:[0,51,69,55,34,11],serial_consol:55,retain:[23,79],timezon:34,distinguish:[12,36,0,3,48,79,80,56,49,38,16,40,85],addnod:[78,79],oob_program:34,unexpectedli:23,kernel_major:16,qualiti:[0,61],tbool:58,echo:[43,58,55],tier:[34,77,28,11],instance_diskn_:2,fignor:24,owner:[23,37,77,42,79,78,82,34,22],minmem:[37,34,43],getmirrorstatu:79,facil:[33,18],cluster_renam:37,organ:18,prioriti:[0,80,37,77,42,78,11,38,34,35,10,20],"long":[56,0,23,4,41,43,58,59,61,28,30,64,11,48,13,15,34,16,36,18,5,37,77,78,79,80,54,69,38],smaller:[39,18,54,64,48,77,78,80,8,32,34,50,69],seq:5,strict:[32,4,80,5,58,34,60],temporaili:64,export_mod:2,licens:[34,28],sep:34,superfl:34,capac:[37,48,77,79,14,69,34,84,11,17],messag:[0,43,58,57,59,6,62,30,8,85,65,32,13,49,34,16,50,36,5,37,78,79,80,82,38,52],basicconstraint:44,togheth:65,attack:[0,3,78,79,13,34,22,52],disk_index:[34,58],op_instance_shutdown:2,volume_group:37,organis:[2,32],reevalu:20,"\u03bb":24,"final":[12,36,30,0,14,37,84,78,42,13,5,67,54,55,34,16,80,10,68,69],tag2:[58,28],ipv4:[56,18,37,77,58,34,61],abicloud:28,udp:[38,34,23,79],shell:[8,37,24,58,9,15,38,34],gear:[69,13],format_vers:16,highest:[56,37,77,79,80,58,11,84,20],rsa:[78,43,9,19,34,61],simplestor:79,biggest:[11,80],accompani:36,be_:80,underutil:0,enqueu:49,rst:[6,21,67,80,34],repect:2,exactli:[30,0,54,2,64,77,78,79,80,69,55,45,33,22,61,68,28],strictli:[38,77,55,11],blind:79,dt_plain:69,mechan:[12,56,0,23,51,84,85,48,77,66,79,80,58,69,55,34,16,61,60,11],dev_typ:79,ben:43,i_pri_up:82,addprimari:5,bloat:34,rsahostkeypub:19,op_instance_renam:2,emac:[5,24],structur:[56,0,23,2,4,42,5,28,63,9,69,13,15,49,33,34,16,54,77,78,79,80,51,20,82,38],querynod:[33,34],claim:[38,28],src_key_nam:78,sens:[0,23,18,63,37,85,4,77,66,79,67,58,20,69,80,11],becom:[56,0,3,43,58,61,28,9,48,33,34,16,17,36,18,5,37,77,78,79,80,22],histor:[46,80,58,19,33,69],sec:5,stricter:[34,22,52],other:[56,0,23,2,3,4,24,42,5,58,57,69,59,6,1,60,61,28,62,29,30,8,63,48,65,66,67,44,68,10,40,20,64,12,85,46,82,31,41,32,13,14,15,54,49,33,34,16,35,50,17,36,43,37,77,78,79,80,53,51,83,19,11,55,38,21,22,84,52],greater:[34,0,23,69,80],querylock:34,unencrypt:[22,0],counter:79,thereaft:34,pvcreat:55,deprec:[56,7,37,40,58,82,34],clearli:[38,32],fail:[56,0,23,2,3,4,41,42,43,58,39,59,61,62,30,64,65,67,68,40,69,82,48,54,33,34,16,35,50,5,51,77,78,79,80,37,55,83,84,52],ocfs2:36,interf:78,have:[56,0,23,2,3,4,24,42,76,5,58,57,69,25,26,27,6,7,60,80,61,28,83,30,8,59,63,48,65,66,9,44,45,81,68,10,40,20,64,12,85,46,47,82,41,32,13,15,54,49,33,34,16,35,50,17,36,18,71,43,37,74,75,72,77,78,79,67,53,73,19,11,55,38,21,22,84,52],disadvantag:[12,0,54,64,4,80],need:[56,73,0,23,2,3,4,24,42,5,57,59,7,80,61,28,30,8,63,64,66,9,44,45,81,68,10,40,11,12,85,82,31,41,48,15,49,33,34,16,83,17,36,43,37,77,78,79,67,53,51,19,69,55,38,21,22,84,52],element:[7,49,77,80,5,58,20,82,34,21,16,28],border:61,paramiko:[34,9,67],instance5:[43,82],pemfil:13,simplejson:67,min:[82,34,58,69,55],rout:[56,18,37,79,43,58,28,55,34,21,22,11],mib:[2,58],ipaddr:67,mid:36,innard:[35,42],mix:[34,80,69,55,79],unawar:16,iff_one_queu:34,best:[62,0,23,2,3,48,5,39,55,10,11],which:[56,0,23,2,3,4,24,42,5,58,39,59,83,7,80,61,28,29,30,8,63,48,65,66,9,45,81,68,10,40,20,64,12,85,46,82,31,41,32,13,15,54,69,33,34,16,35,57,50,17,36,18,43,37,77,78,79,67,51,19,11,55,38,21,22,84,52],discrep:37,jail:22,qa_job_util:34,viridian:34,divers:[4,0],singl:[56,0,23,2,4,42,43,58,59,6,61,28,63,65,66,9,68,10,20,12,46,82,31,48,15,33,34,16,35,50,17,5,37,77,78,79,80,54,81,69,55,38,83,84],uppercas:33,min_ispec:69,courtesi:0,regard:[2,3,41,77,80,43,15,69,34,21,22,84,85,28],led:[34,77],deploy:[4,18,37,48,77,38,69],x509extens:44,versa:[37,84,79],oracl:21,discov:[37,4,78,80,21,69],admin_up:34,insufficient_resourc:58,size_in_mb:28,gntadmin:77,hvm_pae:[34,80],amongst:[15,77],deploi:[37,64,67,55,80],mode:[56,23,2,40,41,42,43,58,7,28,66,69,82,31,48,34,16,83,17,36,18,37,77,78,79,80,51,81,55,21,22,52],segment:16,why:[0,23,54,49,42,57,55,34,38,7,16,61,52,28],group_network_mod:[2,18],minor_count:55,prove:[0,78],op_node_set_param:[2,42],placement:[18,37,40,77,79,82,34],dens:18,instig:0,gather:[23,37,48,43,9,34,16,61,28],stronger:[85,77,69],uri:[58,80],node_pip:2,face:[38,34,85,23,13],inde:[34,3],deni:2,file_driv:[34,58],blockdevsnapshot:34,yum:67,determin:[56,23,3,42,58,59,61,28,85,66,67,68,10,69,12,48,49,33,34,16,83,36,37,77,79,80,38,22],built:[43,37,3,85,78,79,13,5,15,49,33,34,16,61,64,69,68],constrain:[34,80,11,72],removeinstancedisk:45,modularli:55,fact:[12,18,51,2,3,4,77,80,54,69,21,22,10,11],gain:[56,0,3,80,83,44],epydoc:[5,24],"45173e82":43,assert:[4,34,0,32],mainloop:78,filetyp:64,verbos:[8,47,37,33,81,6,34,16],prof_o:24,ioemu:34,gennam:5,waitforchang:80,ecode_temp_nor:83,op_instance_reboot:2,envisag:77,new_vg_nam:2,requested_nod:82,chicken:[3,85],debat:69,dbu:56,anywai:[63,61,3,48,77,79,80,43,15,55,10,11,17],nonemptystr:58,subjectkeyidentifi:44,redirect:[54,78,79],textual:58,locat:[12,56,46,82,31,37,64,48,77,78,79,80,55,34,16,68],nois:34,fd_loop:64,tapx:22,dom0_max_vcpu:55,wreak:43,threateningli:77,prolong:79,won:[23,3,42,43,58,61,85,40,69,31,48,15,34,16,17,37,77,78,79,80,54,11,21,22,84],initramf:55,combo:22,ksm:11,spice:[34,3,58],akward:79,hope:[85,10],subdir:5,d_name:60,devnum:80,mtu:[34,55],contribut:67,example_monitor_host2:55,familiar:[56,7,37,78,5,55],sysv:68,pypi:[61,50],sd_listen_fd:68,autom:[8,23,37,59,41,78,79,80,43,69,49,6,34,16,44,17],ec018ffe72b8e75bb4d508ed5b6d079c:58,db8:18,hinotifi:67,expres:20,kbd:55,increas:[56,0,23,3,41,43,58,6,28,67,10,69,32,34,16,54,77,78,79,37,81,20,55,84],f0fac192:37,hotplug_if_poss:58,ganeti_instance_nic0_bridg:2,tbd:[41,31],endless:34,shr:77,enabl:[56,3,4,24,43,58,28,62,83,30,8,64,67,9,68,11,12,46,82,31,13,70,34,50,17,18,37,77,79,69,55,22,84,85],ancient:34,twice:[39,34,0,24,43],upper:[36,2,77,78,5,69],instance18:37,osp_ns1:78,storage_pool:[36,48],state:[56,0,1,3,4,41,42,43,58,39,69,59,6,23,60,61,44,62,30,63,64,65,66,9,45,68,10,40,20,12,85,48,31,32,13,14,54,49,33,34,16,35,57,83,17,18,37,77,78,79,80,53,51,11,22,84,52],whether:[56,0,23,2,3,4,5,58,57,61,44,63,85,9,69,12,48,13,33,34,16,35,83,36,37,77,78,79,80,54,82,22,84],cluster_tag:[2,82],integr:[54,1,31,37,77,3,4,41,80,73,67,15,25,55,34,16,68],partit:[0,71,72,37,85,48,43,73,55,38,34,16,61,11,17],usb_mous:34,grab:[0,65,77,66,79,80],builder:4,view:[57,37,64,48,77,78,80,54,38,34,16,83],conform:[2,58,77],legaci:[34,58],bridge_fd:55,"_total":69,googlecod:55,frame:77,knowledg:[37,38,22,78,80],orphan:[37,34,69,43],group_nam:[2,58,34],packet:[37,34,56,61],displai:[0,85,58,59,33,34],malfunct:34,"954bja":43,subresourc:58,full:[2,3,41,43,58,28,8,63,64,66,9,68,10,69,82,13,14,15,34,16,35,17,36,18,37,77,78,79,55,38,84],multipart:61,bytestr:[34,67],rc3:34,hsqueez:[29,1,25,26,34,10],xxxxx:18,ssconf_:77,master_candid:[37,2,3,79,43,58,82],statu:[56,57,23,2,3,41,42,43,58,69,59,61,63,11,47,48,49,33,34,16,35,50,17,36,72,37,77,79,80,20,82,22],wire:79,extend:[56,0,23,3,4,42,58,57,59,60,29,64,66,68,10,40,11,32,48,34,36,18,37,78,79,80,69,83,84,85],"881a":58,drive_del:30,pointer:45,boundari:[3,32,77,79,69],slaac:37,cours:[8,18,37,77,3,48,41,79,80,69,55,34,16,84,85,20],tend:[56,41,69],luxi:[56,23,80,51,78,77,42,13,43,15,54,33,34,22,35,69],favor:[34,30],written:[56,30,0,23,80,37,84,3,32,77,42,58,13,9,78,79,34,16,47,61],crude:69,progress:[56,0,37,42,80,54,11,16,28],neither:[0,37,3,78,79,5,39,21,61,69],lun:36,tent:54,conjoin:5,amem:69,secondary_ip:[37,58,82],bockdevic:34,extstorag:[37,34,73,36],parseabl:34,reinforc:44,syncer:[34,69],sow:[51,69,59],entir:[30,23,37,77,48,24,78,80,54,15,69,34,50,11],rare:[34,69,28,80],previous_log_seri:58,disconnect:[36,18,37,2,77,58],parenthesi:5,dmz:80,thank:34,ipolici:[55,85,58,69,82,34,11],mylist:5,revers:59,succss:61,rtype:5,admin:[82,37,79,80,43,58,55,49,34,16,84],goal:[36,3,32,77,78,79,80,9,15,52,69,64],etx:80,equal:[0,7,5,2,63,77,58,79,80,14,9,46,28,82,69,33,22,61,20],vgcreat:55,configpars:5,etc:[56,23,2,24,43,58,60,30,8,63,48,67,45,11,64,46,31,32,15,54,49,33,34,16,50,36,18,5,37,77,78,79,80,51,19,69,55,38,22,84,52],admit:34,succeed:[38,84,82,59],grain:[34,23,20,80],equat:69,ialloc:[0,7,40,43,58,1,62,85,69,48,55,32,15,34,36,18,37,77,79,80,81,82,38,83],vfree:43,zeroing_imag:58,freeli:[56,77],sigterm:[34,63],minumum:16,noshutdown:37,comment:[37,5,58,55,59,34,69],unimpl:31,localcount:16,deconfigur:37,job_status_wait:42,primaryinst:33,hyphen:2,connectionst:16,chmod:[19,55],vgreduc:[37,34,80,79,43],dest_cert_fil:78,solv:[85,80,43,34,84,11],rpc:[56,57,23,3,61,30,8,85,65,9,45,31,32,13,15,34,16,35,17,73,77,78,79,80,54,19,22,84,52],inet:55,free_disk:82,pkgdatadir:34,diskwrit:16,rpm:59,uid:[34,22,30,58,79],operatingsystemsect:28,vgname:55,evalu:[77,42,79,78,5,11,16,20],yaml:[34,24],addition:[36,30,0,37,3,32,77,67,79,80,38,58,39,69,59,33,34,68,10,40,28],libdir:[34,8,82,63],compos:[12,5,3,48,80],abc:5,insuffici:[30,11],compon:[12,62,0,23,55,31,82,37,2,4,24,77,79,43,46,32,49,38,16,84,69],json:[56,8,23,18,80,37,40,59,58,79,13,5,9,67,82,49,34,16,47,69],besid:[37,3,48,80,82,34,50,69,85],treat:[30,42,78,58,59,34,68,80,69],vm_capabl:[37,2,77,58,15,82,34],unconfigur:[56,16],remove_reserved_ip:58,default_iallocator_param:58,doabl:[15,69],partial:[83,0,71,72,37,77,41,79,80,73,46,69,11,26,27,34,16,61,68,20,25],storage_typ:[58,48,85,31],disks_info:45,runlevel:43,wiomilli:16,upcom:37,presenc:[12,0,18,3,48,41,79,58,34,21,68,84],instance_nicn_:2,vmware:[21,28],bulk:[37,40,73,58,82,34],behalf:23,deep:[54,80],minim:[56,0,80,55,34,16,10],criterion:69,removeprimari:5,veth:78,hbal:[62,1,43,85,14,15,34,83,10,11],replic:[36,0,23,82,37,2,78,79,80,43,55,38,34,16,22,44,17],multi:[0,7,82,54,37,40,4,77,79,5,58,69,55,59,34,68,61,48,28,17],novel:77,autoarchivejob:78,usermode_help:[34,55],plain:[0,37,84,85,48,77,79,14,58,39,11,82,69,34,16,61,28,17],"12gb":43,hyperlink:[21,28],harder:[37,0,78,11,80],migrate_cleanup:2,keyout:[19,78],instanc:[56,73,0,23,2,3,4,41,5,58,39,69,26,27,83,1,60,61,28,62,29,30,8,63,48,65,66,67,44,45,81,10,40,20,12,85,46,82,31,32,13,14,15,54,49,33,34,16,35,57,50,17,36,18,43,37,74,75,72,77,78,79,80,53,51,59,11,55,38,21,22,84,64,7],defin:[56,57,23,2,4,42,58,59,6,80,61,44,64,66,9,68,20,32,15,69,34,16,50,36,18,37,77,78,79,67,11,82,22,85],ganeti_:2,suffix:[5,80,63],opshutdowninst:5,charaterist:84,glossari:[29,37,51,67,55,34],load_certificate_request:44,rbd:[1,31,37,85,67,58,55,38,34,16,84,17],repol:16,layer:[36,77,15,19,34,16,35,11],incooper:40,customiz:[56,34,79],op_instance_grow_disk:2,almost:[0,32,77,34,68,61],uncompromis:3,mac_prefix:58,mtime:[16,58],site:[36,82,37,2,55,34,22,69],docinput:34,unclean:34,pip:[33,58],initd:[67,55],motiv:7,substanti:[64,11],lightweight:[0,79],fiddl:55,incom:[56,77,3,61,22],revis:[8,79,63],unneed:[34,80],surprisingli:0,halt:[50,59],device_typ:30,recreateinstancedisk:34,parti:[56,48,78,81,34,22,61,44],ssconf_master_candidates_cert:8,priority_opt:34,replaceinstancedisk:34,member:[37,83,77,66],python:[23,2,4,24,42,43,58,61,30,8,63,67,12,32,13,15,33,34,50,18,5,54,79,80,55],compression_tool:58,updateexcltag:34,largest:48,fourcc:79,codepath:[34,80],"__version__":58,incl:[29,1,71,72,85,27],infer:[77,18],hv_kernel_arg:34,difficult:[56,23,37,4,65,42,79,80,5,15,44,34,61,11],bes_paramet:80,oneof:58,immedi:[0,23,63,37,3,42,79,80,57,16,68,11],slave:[36,55],context:[12,39,3,32,78,79,69,34,44],denot:[37,2,64,48,24,77,79,80,9,82,45,34],vpcu_ratio:11,expans:34,keepal:[34,78],target_group:[2,82],file_storage_dir:[34,58],struct:16,handi:59,"0x29565f0":58,phy:43,meta_data:56,sooner:34,usecas:21,auto_bal:[34,58,8,28,80],decoupl:[34,23],login:[43,22],reclam:48,cosmet:34,audit:16,dmesg:43,off:[0,7,82,37,77,3,41,78,80,58,55,59,34,68,84,50,17],disapear:84,nevertheless:[12,22],sre_pattern:33,colour:33,reboot_behavior:34,well:[56,0,23,3,4,41,42,58,39,61,28,30,63,64,66,67,68,20,12,31,24,48,13,15,34,16,57,83,17,18,37,77,78,79,80,53,54,81,69,55,38,22,84,85],versatil:42,thought:84,versionid:28,exampl:[56,73,0,23,2,3,4,24,42,5,58,69,59,1,80,61,28,29,8,63,64,66,9,44,68,20,12,46,82,41,32,13,15,54,49,33,34,16,35,50,36,18,43,37,77,78,79,67,51,19,11,55,38,21,84,85,7],command:[56,0,23,2,3,4,24,5,58,57,59,60,61,28,62,30,8,63,67,9,44,81,10,40,20,12,46,82,31,32,15,49,33,34,16,50,36,43,37,77,78,79,80,73,19,69,55,38,21,22,52],achiev:[12,56,68,0,18,63,37,3,4,79,69,34,60,48,20,64],choos:[12,36,30,0,63,37,77,64,48,41,78,79,80,55,34,17],undefin:59,is_primari:43,stripecount:[34,69],loss:[37,64,80,43,34,84],piec:[54,3,79,13,49,80,84,28],latest:[56,29,40,80,55,34,20],regularli:[37,51],requestunuseduid:79,test3:18,test2:18,newest:21,paus:[8,63,37,6,34,20],export_vers:[58,28],less:[0,23,18,43,37,82,77,42,78,38,58,15,69,55,33,34,80,61,84,44],xen:[56,57,2,43,58,28,62,8,64,66,67,69,12,82,34,16,50,51,77,79,80,37,11,55,21,22],e90739d625b:34,aggress:[34,64],detail:[56,0,23,3,4,41,42,43,58,57,59,7,60,61,28,29,30,8,63,64,66,67,45,10,20,82,24,13,54,49,34,16,50,1,17,18,37,77,79,80,53,51,81,69,55,21,22,84],should:[56,0,23,2,3,4,24,42,5,58,39,59,6,7,60,80,61,28,30,8,63,48,65,66,9,45,81,68,20,12,85,46,82,41,32,13,14,15,54,69,33,34,16,35,50,17,36,18,43,37,77,78,79,67,51,19,11,55,38,21,83,84,64],trust:[38,34,22,78,56],interim:85,heavili:[36,23,41,77,78,79,69],monolith:77,drdb:28,"_but_":66,ganetisect:28,web:[58,78,55,13],rapid:23,amd64:[79,55],wee:80,tight:[9,79],cert_fil:78,a8d6:43,makefil:[34,24],aris:[12,30,0,78,16,61],script:[56,0,2,3,4,24,43,58,6,61,29,30,8,64,67,9,68,46,82,31,41,15,34,16,36,18,37,77,78,79,80,53,19,55,38,21,22,52],add:[56,0,23,2,3,41,42,5,58,39,59,60,80,28,62,30,8,64,66,9,45,10,40,20,12,46,82,31,32,14,15,69,33,34,16,36,18,43,37,77,78,79,67,53,51,11,55,38,22,84,85],cleanup:[12,57,37,78,79,80,43,58,49,34],remote_raid1:[34,8,80],newnam:77,citizen:45,freshest:16,iputil:67,suit:[4,77,48,24,79,80,82,34,69],adh:13,vdi:28,always_failov:34,ganetilockmanag:83,unprivileg:[56,64,15],rememb:[34,58,8,79,69],minimalist:21,dest:[67,81],os_vari:34,fyi:[79,59],os_nam:58,arguabl:77,effortless:28,camelcas:5,punctuat:[33,5],realiz:[37,64],five:[37,34,32,77],know:[12,56,0,37,40,42,79,78,53,54,57,82,34,33,21,16,80,84,68,69,85],burden:78,redesign:[56,29,1,25,79],realis:[37,57],runcmd:78,imem:69,mkstemp:78,toe:80,suppos:[3,57,16,79,80],insert:[30,5,58,55,16,83],hv_state:[58,69],resid:[12,36,30,37,65,58,55,34,52],ganeti_instance_secondari:2,success:[36,7,37,2,3,48,41,42,79,80,58,81,84,82,38,34,68,61,40,28],request:[56,0,7,3,4,42,43,58,39,69,23,61,44,62,83,30,64,10,40,20,12,48,47,32,13,49,33,34,16,57,50,85,18,37,77,78,79,80,53,54,11,82,22,84,52],pinst_list:58,mergedwrit:16,ganeti_hostnam:46,instance_nic_count:2,opqueri:34,stagger:79,necessari:[56,0,23,3,42,58,61,28,30,8,63,12,46,15,33,34,17,37,78,79,80,53,55,38,83,84],lose:[8,37,3,79,80,34,84,17],async:80,resiz:[37,36,30,64,78],be_typ:80,soft:[63,37,43,58,34,20],page:[62,29,1,37,64,79,80,43,58,70,51,55,69,34,16,50,11],backlog:16,restructur:23,unreach:[23,2,67,43,58,33,34],exceed:59,didn:[23,37,78,79,81,34,61],responsetext:58,regist:[43,78,55],pydoc:5,gluster:[1,31,37,58,55,38,34],replace_on_secondari:[43,58],hail:[46,43,15,82,38,34,69,17],rtl8139:80,contin:61,"export":[56,0,23,2,3,41,42,5,58,1,61,44,29,8,64,67,28,69,82,24,48,13,15,49,34,16,36,43,37,74,77,78,79,80,81,55,21,83,84],readonli:[34,43],mlockal:[34,79],guarante:[0,80,37,2,3,4,42,79,13,58,78,69,34,60,35,40,28],meta_flush:79,mainli:[56,29,37,80,67,82,38],tmp:[46,78],inst_spec:78,competitor:0,deboostrap:79,lead:[12,62,0,3,77,79,50,67,57,55,33,34,35,40,69,85],esp:13,broad:69,avoid:[0,23,3,42,5,57,59,61,30,85,65,68,10,69,33,34,11,83,17,77,78,79,80,20,55,21,22],octet:[43,61],reconsid:12,chapter:[4,0],ether:[34,55],leas:56,cheapli:[48,77],estim:[85,79,80,43,15,34,61,69],leav:[56,8,23,37,77,3,65,78,80,43,57,55,68,61,11],fe1e:55,remedei:67,overlai:[56,68],launch:[12,56,37,62,15,82,49,34],speak:[48,80,13],symbol:[67,80,18,55,63],forbid:60,masterd:[56,30,8,23,37,85,77,78,79,54,15,34,22,68],"95f1":37,constitut:80,investig:[54,84,78,43,15,34,21,61,28],throttl:0,"68f9":58,slight:[34,40,79],acronym:5,imaginari:58,usag:[0,58,6,28,85,67,10,69,46,33,34,16,50,18,51,77,78,79,80,37,81,11,55],ourselv:48,docstr:[5,34],vhost:34,host:[56,0,2,3,24,43,58,28,64,9,11,46,31,48,15,34,16,17,36,18,37,77,78,80,19,55,38,22],toggl:[37,80],xenstor:43,obei:[4,0,69],although:[62,36,18,85,4,77,78,79,69,55,28],so_peercr:34,hardlock:38,stage:[23,63,42,80,55,38,84,50],op_instance_reinstal:2,about:[56,0,23,2,3,42,5,58,69,60,61,28,62,29,30,8,63,64,68,20,12,48,82,32,15,49,33,34,16,35,17,36,37,77,78,79,80,81,11,55,38,21,22,84,85],pypars:[34,67],toolchain:34,socket:[12,30,23,51,77,78,13,54,34,16,80,61,22,68],column:[33,5],justif:28,blockag:23,dts_mirror:36,fear:55,lifecycl:0,dependend:64,discard:[77,78],idisk_param:36,"0d7d407c":58,addinst:79,synctarget:80,subset:[0,23,85,77,79,80,34,16,69],own:[56,0,23,3,5,57,44,9,67,28,68,11,48,15,49,34,16,37,77,78,79,80,69,55,38,22,52],reserved_memori:82,uncertain:55,submitt:[83,35,61],bashrc:24,easy_instal:[67,24],automat:[56,57,23,4,41,43,58,27,61,44,29,8,59,63,66,28,68,20,12,82,32,34,16,17,18,5,37,77,79,80,51,19,69,55,21,22,84],ext3:43,hooks_vers:2,automak:[34,24],doesnt:2,wait_for_sync:[58,83],"_executekvmcommand":30,mere:[9,32,20],virtualbox:[21,28],leverag:[39,4],x509_key_nam:58,oversubscription_ratio:69,curlopt_encod:61,transfer:[0,3,41,78,13,67,34,61,50],resource_not_uniqu:58,rotat:55,disk_count:[69,28,80],intellig:23,trigger:[32,77,4,41,79,49,34,16,84,68,17],downgrad:[8,63,3,4,53,45,34],inner:33,signx509certif:78,"var":[12,8,37,2,3,24,67,80,5,58,15,19,55,38,34,81],lds_drbd:79,extra_:24,object_typ:2,favorit:58,"function":[56,0,23,3,4,24,5,58,39,61,28,29,30,64,65,66,67,44,45,68,10,69,12,48,31,32,13,15,33,34,16,35,57,83,17,36,18,43,37,72,77,78,79,80,54,55,38,22,85],mtotal:[62,43,85,38,58,55,33],beta1:34,unexpect:34,guess:[69,55],subsum:85,beta0:34,wed:34,node_r:34,"100gib":69,remote_import:78,backtrac:34,uninstal:37,hooks_phas:2,overflow:34,inlin:5,ssh_kei:3,suppli:[56,0,78,79,67,34,69],succe:[30,39,23,2,4,41,77,79,80,58,35,50,69,17],made:[56,0,3,4,24,61,62,8,63,64,66,45,20,82,32,13,33,34,16,85,18,77,79,80,69,55,38,52],wise:[5,3,39,41,77],googlecom:61,helper:[56,46,18,32,58,0,55,59,38,34,83],rc4:[34,0],shrunk:85,rc6:34,rc0:34,rc1:[34,8],rc2:[34,8],relativejobid:58,logicalunit:[23,51,32,80,58,27],record:[51,30,37,4,5,58,59,69,49,34,10,11],below:[56,57,7,41,43,58,61,44,29,8,67,9,81,10,20,48,69,33,34,50,17,36,37,77,78,79,80,19,11,82,22],limit:[56,0,3,4,42,5,58,57,59,61,28,85,66,45,10,20,12,46,48,15,69,33,34,35,50,36,37,77,78,80,54,11,38,21],indefinit:[37,84],"8e950e3cec6854b0181fbc3a6058657701f2d458":43,lvm:[36,23,37,85,48,79,80,43,58,69,55,38,34,84,11],vol_metadata:36,start_t:58,trail:[71,72,5,49,34,16,61,20],gnt_node:3,"3mb":0,ssconf_online_nod:8,"catch":5,weakli:48,multip:69,astng:24,pin:[34,67,50,11,74],"int":[5,58,77,69,34],ganeti_instance_nic0_ip:2,your_gatewai:55,opbackupexport:[0,61,78],pid:[12,34,68,37,78],meaningless:69,"_jobqueuework":[65,78],twist:[34,42,80],jessi:67,implement:[56,73,0,23,2,3,4,41,42,58,57,69,25,26,27,83,1,60,61,28,62,29,30,63,64,66,67,44,45,68,40,20,12,46,31,13,15,54,49,33,34,16,50,17,36,18,71,72,37,74,75,76,77,78,79,80,53,51,11,82,38,22,84,85,7],ini:[21,28],xyz_filename_extens:5,luinstancecr:34,op_group_add:2,flight:[0,69],ing:[34,58],a1aa:43,probabl:[30,37,41,78,79,80,38,21,50,17],otherwis:[56,0,23,3,4,43,58,59,6,28,65,9,67,20,82,48,15,34,16,5,37,77,78,79,80,81,69,55,38,84],stopinst:78,mutual:[6,79,80],nic_typ:8,quot:5,getnodelist:79,acloc:34,guidanc:29,vol_siz:36,boot:[56,51,8,37,80,43,67,0,55,34,68],gitori:34,virtual:[56,0,2,3,58,57,61,37,28,29,30,64,11,46,14,15,34,50,36,73,74,77,78,79,80,51,69,55,21],"0x2956668":58,expr2:5,ssconf:[23,37,2,3,77,79,80,53,9,38,34],expr1:5,bool:[33,5,58,69],futur:[56,39,23,3,24,58,0,1,61,28,8,63,85,66,44,68,20,31,41,32,33,34,16,35,17,18,37,77,78,79,80,53,19,11,38,21,84],branch:[34,4],varieti:[34,0,23,35],hpc:24,lc_all:34,haskell2010:5,opinstancecr:[40,78,80,34,83,61],instance_diskn_mod:2,fmem:69,stat:[38,34,16],dismiss:35,prealloc:34,opqueryfield:34,lunodeadd:3,setinfo:36,on_crash:57,tdsk:69,op_cluster_set_param:2,throughout:36,end_t:58,debian:[56,8,2,64,24,67,79,43,58,19,55,34,68],e1000:34,experienc:[29,67],qdisc:55,sphinx:[34,24],"__acquire_inn":83,pycrypto:34,reliabl:[0,23,37,48,4,80,54,15,34],collis:34,rule:[56,36,30,0,23,18,43,37,2,48,78,80,5,8,55,22,83,20],cpu:[0,2,43,58,25,61,28,30,67,10,69,82,48,14,34,16,50,51,74,77,37,11,55,21],unknown_ent:58,portion:[62,32,28],lift:[34,67,4],status:80,auxiliari:68,opmodifyinst:80,keycertsign:44,understand:[32,41,78,13,5,16,80,69],decemb:55,invari:[34,0]},objtypes:{},titles:["Instance move improvements","Design document drafts","Ganeti customisation using hooks","Improvements of Node Security","Multi-version tests","Code style guide","Merging clusters","Moving instances accross node groups","Upgrade notes","Design for adding a node to a cluster","HSqueeze tool","Partitioned Ganeti","KVM daemon","Design for replacing Ganeti’s HTTP server","Taking relative CPU speed into account","Design for virtual clusters support","Ganeti monitoring agent","HRoller tool","Network management","Cluster Keys Replacement","Filtering of jobs for the Ganeti job queue","OVF converter","Security in Ganeti","Ganeti daemons refactoring","Developer notes","Ganeti 2.12 design","Ganeti 2.11 design","Ganeti 2.10 design","Ganeti Instance Import/Export using Open Virtualization Format","Welcome to Ganeti’s documentation!","Hotplug","RADOS/Ceph support in Ganeti","Unit tests for cmdlib / LogicalUnit’s","Query version 2 design","News","Submitting jobs from logical units","Ganeti shared storage support","Ganeti administrator’s guide","GlusterFS Ganeti support","Performance tests for QA","Ganeti Bulk Create","Linux HA integration","Chained jobs","Ganeti walk-through","Design for a X509 Certificate Authority","Disks","Virtual cluster support","<tt class=\"docutils literal docutils literal\"><span class=\"pre\">/</span></tt>","Synchronising htools to Ganeti 2.3","Ganeti reason trail","Ganeti CPU Pinning","Glossary","Design for executing commands via RPC","Design for supporting custom SSH ports for nodes","Splitting the query and job execution paths","Ganeti installation tutorial","Ganeti OS installation redesign","Detection of user-initiated shutdown from inside an instance","Ganeti remote API","Ganeti Node OOB Management Framework","Design for adding UUID and name to devices","Design for import/export version 2","Huge Pages Support for Ganeti","Automatized Upgrade Procedure for Ganeti","File-based Storage","Ganeti locking","Support for Open vSwitch","Ganeti quick installation guide","Systemd integration","Resource model changes","Man pages","Ganeti 2.9 design","Ganeti 2.8 design","Ganeti 2.7 design","Ganeti 2.6 design","Ganeti 2.5 design","Ganeti 2.4 design","Ganeti 2.3 design","Ganeti 2.2 design","Ganeti 2.1 design","Ganeti 2.0 design","Moving instances between clusters","Ganeti automatic instance allocation","Design for parallelized instance creations and opportunistic locking","Instance auto-repair","Management of storage types and disk templates, incl. storage space reporting"],objnames:{},filenames:["design-move-instance-improvements","design-draft","hooks","design-node-security","design-multi-version-tests","dev-codestyle","cluster-merge","design-multi-reloc","upgrade","design-node-add","design-hsqueeze","design-partitioned","design-kvmd","design-http-server","design-cpu-speed","design-virtual-clusters","design-monitoring-agent","design-hroller","design-network","cluster-keys-replacement","design-optables","ovfconverter","security","design-daemons","devnotes","design-2.12","design-2.11","design-2.10","design-ovf-support","index","design-hotplug","design-ceph-ganeti-support","design-cmdlib-unittests","design-query2","news","design-lu-generated-jobs","design-shared-storage","admin","design-glusterfs-ganeti-support","design-performance-tests","design-bulk-create","design-linuxha","design-chained-jobs","walkthrough","design-x509-ca","design-disks","virtual-cluster","monitoring-query-format","design-htools-2.3","design-reason-trail","design-cpu-pinning","glossary","design-restricted-commands","design-ssh-ports","design-query-splitting","install","design-os","design-internal-shutdown","rapi","design-oob","design-device-uuid-name","design-impexp2","design-hugepages-support","design-upgrade","design-file-based-storage","locking","design-openvswitch","install-quick","design-systemd","design-resource-model","manpages","design-2.9","design-2.8","design-2.7","design-2.6","design-2.5","design-2.4","design-2.3","design-2.2","design-2.1","design-2.0","move-instance","iallocator","design-opportunistic-locking","design-autorepair","design-storagetypes"]})
\ No newline at end of file
+Search.setIndex({objects:{},terms:{mastercap:37,diagos:36,vif_script:55,orthogon:[79,69],"_opexeccallback":78,cluster_verify_disk:37,untrust:[56,78],localstatedir:[63,77,24,67,15,55,34],interchang:29,four:[45,48,78,80,43,59,69],secondli:32,prefix:[8,63,37,2,24,61,78,39,58,15,55,34,22,80,10,28],sleep:79,uid_pool:[58,79],nmem:69,oldest:[77,79],forget:[43,19,55,80],whose:[36,7,37,2,24,80,58,69,82,16,83,22,11],authorit:[51,23,69],accur:77,temp_insufficient_resourc:[34,58],authoris:80,aug:34,umask:34,diskstat:[34,16],list:[56,0,23,2,3,24,42,5,58,39,69,59,7,61,28,29,30,8,85,9,44,45,40,20,46,47,82,48,13,15,49,33,34,16,35,57,50,18,43,37,77,78,79,80,54,81,11,55,38,21,22,84,52],swap:[0,64,79,80,43,82,61,11],under:[56,0,23,24,61,28,8,63,64,67,45,68,11,12,82,15,34,50,36,18,37,77,78,79,80,55,22],regrett:38,testabl:32,validateparamet:80,bootloader_arg:[37,34,43],ramdisk:16,digit:[2,34],virtio:[56,34,67,80],everi:[56,0,23,2,3,4,57,6,61,28,30,64,66,68,10,11,82,32,15,49,34,16,50,18,37,77,78,79,80,55,38],risk:[56,0,37,3,41,78,80,39,34,83,84],lookup:[34,4,23,18],dtotal:[38,43,58,85,55],opinstanceconsol:34,jack:58,seamless:[37,68],upstream:55,upgradenot:37,affect:[0,3,42,43,8,64,69,31,32,49,34,16,37,77,78,79,80,20,55,38,22,84,85],writetempfil:78,viewabl:21,maxmem:[37,34,43],macaddress:28,tani:58,fcgi:61,cmd:[34,46,80],upload:[34,15],checkparamsyntax:80,vector:[67,78],unmanag:34,libekg:16,tty1:43,verif:[63,37,2,3,79,9,81,34,61,50],"572862ee939c":37,parenthes:[33,5,77],instance_nicn_mod:2,initialis:[37,80,43,67,15,34],x86_64:[37,58],zlib:[34,64,67],instance_statu:2,clarifi:[5,34],lessen:0,net100:18,direct:[56,83,30,0,1,31,37,2,85,84,59,33,23,22,61,50,20,68],checkprereq:80,batch:[37,40,42,78,19,34,80],consequ:[34,85],second:[0,7,3,24,42,43,58,39,6,23,61,30,63,85,9,10,11,82,48,15,33,34,50,5,37,77,78,79,80,69,55,84,52],ebtabl:37,op_instance_add_mddrbd:2,custom_nicparam:[34,58],nbma:[37,34,78],even:[56,0,23,2,3,41,42,5,58,61,44,63,64,67,28,45,68,10,11,12,46,82,48,13,14,15,33,34,16,18,37,77,78,79,80,54,69,55,38,21,83,52],lesser:0,actual_st:16,hide:[33,16,78],"0x2350410":58,commonnam:44,autoarch:37,asid:[62,43],aio:64,scp:[37,9],"7d582ab7eef4":43,"new":[56,0,7,2,3,4,24,42,5,58,57,69,59,83,23,80,61,28,29,30,8,63,64,65,66,9,44,45,81,68,10,40,20,12,85,48,82,31,32,13,14,54,49,33,34,16,35,50,17,36,18,43,37,77,78,79,67,73,19,11,55,38,22,84,52],symmetr:[37,34],getinstancesecondarynod:45,ever:[37,42,5,58,55,20,17],topolog:54,told:[41,80,34,22,61,69],"4b25ecb5df5c":58,pci_reserv:30,elimin:[0,37,3,15,39,34],subtre:80,abov:[56,39,7,2,3,24,43,58,0,23,61,28,8,67,44,40,20,12,46,13,15,34,16,17,36,18,37,77,78,79,80,54,19,69,55,22,84],flip:37,mem:[33,34,69,55],envelop:28,never:[12,0,7,63,37,77,3,41,78,79,80,5,15,44,34,23,68,61,84,20,85],here:[56,0,23,2,3,24,43,58,63,64,69,31,48,49,33,16,50,5,37,77,78,79,80,55,21,85],lvto:16,met:[37,8,50,82],studio:28,argv:[78,79],path:[56,23,2,59,43,46,27,61,8,63,64,67,9,81,32,82,31,48,15,54,49,34,85,36,71,72,37,78,80,73,19,55,38,22,52],ca_cert:44,use_privatekei:44,interpret:[12,36,2,42,79,80,34,16,61,84],"0af08a3d":37,dry:[34,58,8,79],haskel:[12,23,54,4,24,42,5,67,34,16],anymor:[56,57,23,37,2,3,42,80,43,33,34,16,69],use_external_mip_script:58,op_group_renam:2,loos:[40,28],precis:[63,77,78,49,34,16,10,69],keymap:34,synchronis:[29,2,48,77,80,69],permit:[37,34,69],use_dhcp:78,aka:[41,50,80],nodec:37,portabl:[22,28],signifi:[36,78,79],fbar:5,exp_size_fd:[34,61],unif:79,fbaz:5,qcow:[64,28],brought:[37,34,84,80],releas:[0,23,4,58,61,29,8,64,65,67,20,32,34,35,18,37,77,78,79,80,54,55,38,83,52],unix:[12,30,23,51,77,79,80,49,33,16,61,22],quickcheck:[5,24],attach:[56,36,31,37,2,64,49,43,51,55,45,34,16,61,84],total:[56,62,82,37,48,77,43,58,15,55,34,16,69],master_nam:37,unit:[23,4,24,43,58,27,85,65,68,69,32,14,33,34,16,35,37,75,77,78,79,80,38,83],highli:[37,23,79,55],asynchron:[64,77,78,80,35,61],overheat:59,describ:[56,0,23,3,4,5,58,39,7,61,28,29,8,64,65,67,9,40,20,12,46,32,14,15,69,33,34,16,57,17,36,43,37,77,78,79,80,53,51,81,11,82,38,21,83,84],would:[56,0,23,2,3,4,41,42,5,58,57,6,61,30,85,66,10,40,11,12,31,48,13,15,49,33,34,16,35,50,17,36,18,43,37,77,78,79,80,53,54,69,38,83,84],behind:[21,16,34,13],init:[56,62,8,31,37,2,85,24,77,79,80,43,67,19,55,59,38,34,22,68],dure:[56,0,2,4,5,58,39,59,30,8,63,65,67,45,68,69,32,31,48,13,34,17,36,18,37,77,78,79,80,53,54,81],getuidpool:79,choosen:[10,80],readi:[56,0,37,77,79,80,43,9,34,61],call:[56,0,7,2,3,5,57,23,61,28,30,8,63,85,65,67,68,10,40,69,12,31,32,15,49,33,34,16,50,17,36,18,43,37,77,78,79,80,55,38,84],greedi:17,typo:[34,32],recommend:[0,24,43,58,44,63,67,28,69,15,34,5,37,77,78,80,81,20,55,38,21,22],old_nam:2,difficulti:[33,34,48,79,80],calc:34,type:[56,23,2,40,43,58,27,1,61,28,29,30,8,48,66,68,69,46,82,31,32,33,34,16,85,36,71,5,37,72,77,78,79,80,54,55,38,21,83,84,64,7],until:[12,30,0,23,37,84,48,4,77,78,79,80,43,67,57,69,34,68,61,20,17],fastcgi:[61,13],inst5:59,inst4:[79,59],inst7:59,correspondingli:30,inst1:[37,5,7,79,59],inst3:[5,79,59],inst2:[5,7,79,59],readm:[37,34,69,55],relat:[56,39,23,3,24,0,59,60,44,29,8,63,64,65,9,28,11,12,48,15,34,36,18,37,77,78,79,80,54,81,69,21,22,84],"10gb":64,inst8:[5,7],notic:[37,8,79,28,80],br0:[18,82,37,2,58,43,9,55,28],warn:[30,8,31,43,37,3,59,24,5,58,34,33,21,85,69],verifycli:[61,13],exce:59,compatbl:58,rel:[18,14,37,79,42,58,78,5,9,25,34,22,61,52,28],implemt:3,ssconf_hypervisor:8,asyncor:[34,78],hole:[64,69],herebi:[37,56,61],overrul:5,pattern:[56,5,0,24,80],must:[56,0,7,2,40,4,24,42,5,58,39,23,60,61,44,62,83,30,63,65,9,81,68,11,12,46,82,48,13,15,33,34,35,50,17,36,18,43,37,77,78,79,80,53,19,69,55,38,22,84,52],join:[37,77,9,55,38,34,22,16],room:[11,59],err:79,restor:[0,37,2,64,41,77,80,8,55,34,61],setup:[56,0,3,4,41,43,58,61,8,64,66,9,69,46,31,15,34,36,37,77,80,54,55,22],work:[56,0,23,3,4,24,42,43,58,39,59,6,1,61,28,62,8,64,68,40,11,48,31,41,32,13,15,49,33,34,16,35,17,72,37,77,78,79,80,54,69,55,38,21,22,84,85],network_vlan:[34,58],spec:[34,58,77,78,69],stonith:41,conceptu:43,coalesc:84,raid1:51,instance_disk:60,unwant:[43,22,79],slash:[24,78,69],rework:[34,69],root:[56,3,43,58,61,30,85,9,68,46,47,13,15,34,16,37,77,78,79,80,19,55,22,52],overrid:[56,62,18,3,32,77,78,79,80,58,15,81,69,34,16,68,28,17],defer:[77,78,80],hlint:[5,24],give:[56,0,23,3,24,5,58,8,66,67,69,32,34,16,35,36,18,37,77,78,79,55,38],ovfexport:28,synchron:[36,64,42,79,78,58,33,34,16,80,83,68],gntmasterd:77,corollari:[23,80],indic:[12,36,60,37,3,58,80,56,33,34,16,61,50,20],assuredli:0,aaaa:9,"117d":43,unavail:[33,34,23,52],want:[56,0,2,3,41,42,43,59,69,29,8,85,66,67,20,32,48,49,34,16,35,18,5,37,77,78,79,80,54,11,55,21,22],generateselfsignedsslcert:78,keep:[56,0,23,2,3,24,5,57,6,60,61,30,63,64,65,10,69,12,48,32,13,33,34,16,17,18,37,77,78,79,80,54],czf:8,"_autoconf":15,groupmembership:34,hvm_cdrom_image_path:[34,80],end:[56,0,23,24,43,58,6,61,28,30,63,10,69,15,33,34,5,37,77,78,79,80,54,19,11,83,84],manipul:[36,30,37,3,79,67,20],pygrub:37,hackag:[34,67],ordinari:[5,0,77],faulti:[34,41],classifi:[37,48],how:[56,0,3,4,5,58,39,6,61,44,29,30,85,28,45,68,11,12,82,32,13,54,34,16,17,51,77,78,79,80,37,69,55,38,84],hot:[34,69],custom_ndparam:58,recoveri:[37,80],env:2,vastli:34,answer:[0,23,37,78,79,80,34,16,47,22,69],verifi:[0,2,3,43,58,39,59,61,44,8,63,67,9,28,40,11,15,34,57,50,36,37,77,78,79,80,53,19,69,22,84,52],more:[56,0,23,2,3,4,24,42,5,58,39,6,60,80,61,30,8,63,48,66,9,45,68,10,20,12,85,46,82,41,32,13,15,54,69,33,34,16,35,50,17,36,18,43,37,77,78,79,67,51,81,11,55,38,21,22,84,64],ancestor:68,config:[56,57,23,2,3,24,43,58,60,28,30,8,64,65,66,67,45,15,34,16,37,77,79,80,19,55,21,85],bindir:67,updat:[56,23,3,41,42,43,61,28,30,8,63,85,67,69,46,31,24,48,54,34,16,5,37,77,78,79,80,53,73,19,55,84],grown:[34,61,13],mybigtyp:5,recogn:[56,62,39,79,55,35],haven:[8,54,3,15,55,16],x509:[29,1,78,58,19,34,61,44],after:[56,0,23,2,3,4,5,58,57,59,6,61,28,29,30,8,63,85,67,9,81,10,11,12,48,31,83,32,13,49,33,34,16,50,17,36,43,37,77,78,79,80,19,69,55,38,22,52],openvswitch:[58,55,11,66],superus:58,diagram:77,befor:[56,0,23,2,3,4,24,5,58,39,59,6,61,29,30,8,63,65,67,9,45,11,12,31,83,32,13,34,16,35,57,50,17,43,37,77,78,79,80,53,54,69,55,38,21,22,84,52],wrong:[56,8,43,37,41,79,80,5,58,6,34,16,84,69],ova:[21,28],ovf:[21,34,0,28,29],"4rcf":37,parallel:[56,0,7,2,4,42,39,61,8,65,67,34,35,17,37,77,78,79,80,73,81,83],demonstr:[4,79],handl:[0,23,2,3,4,41,43,39,59,6,61,28,30,8,63,85,65,9,68,40,20,12,31,48,14,34,35,57,17,36,18,37,77,78,79,80,54,69,55,38,22,84],source_cert:78,attempt:[0,23,48,79,80,43,58,39,59,38,34,68,52],custom_ipolici:58,third:[30,0,7,37,84,48,42,58,78,9,81,34,22,80,61,44],"_ip":80,classmethod:80,opaqu:[48,61],grant:[23,32,80,43,58,34,22],credenti:[56,34,20],pvgrub:[37,34],imposs:[56,30,0,77,42,79,78,49,21,80,44],perform:[56,0,23,3,4,41,43,39,27,6,1,61,28,62,63,64,66,45,68,11,12,48,82,31,32,15,49,34,16,57,83,17,36,18,37,77,78,79,80,69,55,38,22,84,85,7],unpaus:[34,63],maintain:[56,57,18,37,77,3,41,78,79,80,5,58,34,11],environ:[56,36,0,18,37,2,64,32,78,79,80,39,43,58,15,55,34,46,61,60,68],reloc:[7,82,37,2,48,79,43,58,55],enter:[34,80,20,43],exclus:[56,23,73,77,48,65,78,79,80,69,55,6,34,11],spindle_ratio:[69,11],first:[56,0,7,3,4,42,5,58,69,6,23,80,61,28,30,8,63,64,66,9,45,10,20,12,85,48,82,32,49,34,16,50,17,18,43,37,77,78,79,67,54,11,55,84,52],order:[56,39,23,2,40,42,5,58,57,59,7,60,28,62,29,30,8,63,64,65,67,45,68,10,20,12,48,82,31,32,69,33,34,16,50,17,36,18,43,37,77,78,79,80,54,19,11,55,38,21,22,84,85],op_network_remov:[2,18],origin:[0,7,63,37,48,32,42,13,5,46,49,34,22,35,50,20,17],macaddr:56,composit:[38,5],feedback:[63,77,78,13,34,35,61],instance_nicn_network:[2,18],softwar:[56,1,41,5,59,61,44,8,64,67,28,69,13,34,16,18,37,78,80,55,21,22],diagnos:[36,37,77,78,15,34],consent:84,over:[56,0,23,2,3,43,58,39,6,60,30,64,9,10,20,46,54,34,16,35,83,36,5,37,77,78,79,80,51,69,38,22,84,85],failur:[56,0,7,2,3,41,43,58,23,62,63,68,11,48,33,34,35,50,17,5,37,78,79,80,54,69,82,38,84],becaus:[56,0,23,3,43,58,39,30,85,68,40,69,12,49,34,16,57,37,77,78,79,80,53,54,21,22],addinstancedisk:45,privileg:[56,30,46,77,78,80,15,34,22],appar:[57,44],flexibl:[56,78,80,33,34,16,69],vari:[82,37,4,79,80,19,55,34,16,69],digest:[3,58],sha1sum:28,streamlin:85,bottleneck:80,cli:[56,39,31,80,37,42,78,51,15,33,68,35],fit:[38,34,40,80,56],ganeti_instance_hv_use_bootload:2,drbd_usermode_help:34,fix:[56,0,23,4,43,58,61,30,8,85,69,32,48,15,34,16,50,37,78,79,80,84],inadvert:50,better:[0,23,3,41,42,43,39,61,28,64,67,68,82,15,33,34,16,17,5,77,78,79,80,55,38,84,85],crlsign:44,drawback:[33,3,35,60],vmdk:[21,64,28],persist:[0,23,63,64,79,34,16,20],comprehens:[37,29],verifyconfig:45,hidden:[54,34,58,78],easier:[12,56,39,7,18,37,85,32,78,79,13,58,15,69,55,34,23,80,61,11],inadverd:79,count:[37,64,77,58,69,82,34,16,83,11],them:[56,0,23,2,3,4,24,42,5,58,57,59,6,60,61,28,30,8,63,85,65,67,44,45,81,68,10,40,20,41,32,13,15,49,34,16,83,17,36,43,37,77,78,79,80,53,54,19,69,55,38,22,84],scrutinis:80,thei:[56,0,7,2,3,4,24,5,58,39,23,60,61,28,30,8,63,85,65,67,44,45,68,10,11,12,48,82,31,41,32,13,14,15,49,33,34,16,18,43,37,77,78,79,80,19,69,55,38,83,84],proce:[0,80,37,48,4,77,42,79,78,43,9,55,6,34,35,84,17],promin:56,safe:[12,56,0,43,37,65,41,13,5,58,69,34,83,80,84,28,17],radosblockdevic:31,mergedread:16,"break":[56,54,80,37,3,24,42,79,78,5,58,69,55,33,34,83,35,38,11,17],band:[51,34,15,59],bang:5,glorifi:5,"9second":80,closer:[77,28],interrupt:[0,37,77,34,84,28],hvm_acpi:[34,80],"0x23505f0":58,choic:[56,36,23,0,1,63,61,3,48,42,13,5,55,34,7,16,80,10,68,28],drbdsetup:[37,34,69,43],use_bootload:[34,43],categori:[56,29,47,31,36,37,79,15,16,69],acquisit:[83,23],instance20:37,hscolour:24,timeout:[56,39,23,2,77,79,80,58,0,55,59,34,83,61],each:[56,0,7,2,3,4,42,5,58,39,69,59,23,60,61,28,30,8,63,64,66,67,44,68,10,20,12,48,82,31,32,13,15,49,33,34,16,35,50,17,36,18,43,37,77,78,79,80,54,19,11,55,38,22,84,85],debug:[56,30,39,37,4,24,42,79,78,81,6,34,80,61],higher:[8,63,37,84,64,32,77,79,80,67,34,10,69],side:[12,56,32,80,40,4,41,42,79,67,5,58,39,33,34,78,61,69],mean:[0,23,3,4,41,43,58,57,59,60,61,28,62,30,8,63,65,66,45,68,11,12,48,82,32,54,33,34,16,35,50,17,5,37,77,78,79,80,51,81,69,55,38,22,84,52],nochang:80,instance_query_data:37,inexist:34,migration_port:[34,55],resum:[37,34,61,23,63],enorm:28,free_count:58,op_node_migr:2,group:[0,7,2,24,42,5,58,57,59,6,23,62,29,8,64,66,11,82,31,48,14,33,34,16,83,17,36,18,43,37,75,77,78,79,80,53,69,55,38,22,84,85],target_node_uuid:58,vote:[37,34,79,80],htool:[29,82,43,37,77,48,24,42,14,15,63,55,49,34,10,69,17],your_ip_address:55,xmem:69,ignore_remove_failur:58,ommit:59,collector:[47,31,72,37,73,82,49,34,16],tgz:56,contend:78,network:[56,0,2,3,41,43,58,39,60,61,28,30,8,64,67,73,11,46,82,32,13,15,54,33,34,16,36,18,37,77,78,79,80,51,69,55,38,21,22],goe:[8,43,37,84,63,80,5,49,6,10],newli:[30,0,23,18,31,37,3,77,79,80,14,9,19,55,34,10,85,69],segtyp:16,dss:9,predefin:[56,13],content:[56,0,23,2,3,4,41,42,5,58,39,69,60,61,28,30,63,85,66,9,44,45,81,68,10,40,20,12,46,82,31,32,13,14,49,33,34,16,35,57,83,17,36,18,43,37,77,78,79,80,53,19,11,55,38,21,22,84,52],rewrit:[34,61,80],laid:32,adjust:[56,64,24,78,79,15,69,55,34,11],dsk:79,dsh:[37,8],reader:[56,35,7,42],got:[37,34,77],opensslcompress:67,impract:37,multilin:5,kernel_minor:16,unwarr:11,linear:23,barrier:[34,64,79,69],worthwhil:0,initscript:68,attoparsec:67,precaut:[22,52],situat:[56,0,1,3,4,41,42,43,57,59,23,85,67,69,12,32,15,34,16,37,77,78,79,80,55,83,84,52],free:[0,23,43,58,62,85,10,69,46,48,15,33,34,16,18,5,37,77,78,80,11,82,38,21,52],ineffici:23,kvm_cmd:30,small:[8,0,54,43,37,61,48,77,78,79,80,5,15,69,34,46,10,28,17],fixm:69,virtio_net_queu:34,hv_kvm:31,undocu:34,fcff:55,repeat:[63,5,55,33,50,69],md5:58,precompil:64,reconfigur:[43,28],node2:[43,37,38,58,82,59,33],workaround:[56,34,30,69,80],iss:34,openssh:[37,24,67,19,78],your_network:55,openssl:[0,78,67,13,58,19,34,44],node4:[37,7,59],filter:[12,29,0,23,63,37,85,48,79,38,58,55,34,33,1,22,84,20],renew:[8,3,77,53,19,34,68,81,44],fuse:[38,34],iso:[34,28,80],unabl:[37,43,61],ism:34,unknown:[77,79,80,43,58,59,33,21,34,61],regress:[34,79],temporari:[30,0,41,24,80,58,69,34,83,28,17],differnt:[34,63],confus:[54,3,24,42,81,68,69],caught:32,user:[56,0,7,2,3,59,58,39,26,27,60,61,28,62,29,30,8,48,66,67,68,69,12,46,31,32,13,15,49,33,34,16,35,57,18,37,77,78,79,80,53,54,82,22,84,85],pristin:[56,80],rang:[18,37,77,78,79,50,58,34,16,61,22],instance_nam:[7,37,2,78,80,58,34],abolish:77,render:[43,68],mkdir:55,independ:[12,56,0,23,63,51,77,78,80,11,59,34,16,60,28],wast:[38,0],thereof:23,eui:18,restrict:[56,0,7,3,4,42,23,61,30,63,85,68,10,69,48,34,17,37,77,78,80,54,81,11,55,22,52],hook:[56,29,18,37,2,3,41,77,79,78,43,15,34,22,60],reinitialis:37,alreadi:[56,0,23,3,24,42,5,58,39,59,61,30,8,63,64,67,68,10,40,20,12,48,82,32,14,15,69,33,34,16,35,17,36,18,37,77,78,79,80,54,11,55,38,83,84,85],wrapper:[37,34,68,61,45],wasn:[34,79,43],agre:80,primari:[56,7,2,43,58,59,61,64,69,82,31,48,33,34,16,17,36,37,77,79,80,81,20,55,84],ifac:55,total_cpu:82,optim:[0,63,64,79,80,28,82,85,69],rewritten:[34,23],wildli:69,top:[56,30,0,37,64,24,79,80,5,57,45,34,10,69,17],sometim:[56,23,37,78,79,80,43,59,34,16,69],downsid:15,setnodeparam:79,master:[56,0,23,2,3,4,41,42,43,58,57,59,6,61,44,30,8,63,65,9,81,68,10,46,82,32,13,15,54,33,34,16,35,17,36,18,37,77,78,79,80,51,19,55,22,84],too:[39,23,5,58,61,44,30,8,65,66,69,32,48,15,33,34,16,50,36,37,78,79,80,54,20,55],ip_check:[34,58],similarli:[56,36,63,37,32,77,5,34,10,69],recent:[56,30,23,78,79,67,55,34,44],outag:16,tidiskparam:34,listen:[12,56,37,77,78,13,15,55,38,34,22,61,68],iptabl:[56,22,61,78],consol:[43,37,77,79,53,51,58,54,55,34],fdsend:[34,30,67],namespac:[2,78,79,80,55,68],sdd1:55,tool:[56,0,23,42,5,58,25,26,6,1,69,28,29,8,64,66,9,68,10,20,46,31,32,15,49,34,16,17,36,18,71,43,37,72,77,79,80,51,81,11,55,21,22,84],use_dchp:78,lighttpd:[61,44,13],lower:[0,55,82,37,2,4,77,78,79,8,44,32,69,10,84,11],net101:18,sched_setaffin:50,task:[12,56,8,23,31,63,37,32,77,66,79,80,39,51,0,59,57,28],incur:[23,31],queryjob:[34,78,80],somewhat:[37,77,79,9,15,34,61,69],termin:[12,23,37,24,78,80,58,34],dump_certificate_request:44,oversubscript:[34,69],technic:[54,3,32,79,35,10],breaker:20,cluster_redist_conf:37,vcpu_ratio:[69,11],x509_check_private_kei:44,target:[0,7,2,3,24,5,58,39,61,29,30,68,11,48,34,35,17,36,43,37,77,79,80,69,55,38,83,84],keyword:[5,55,80],provid:[56,0,23,2,3,4,41,5,58,57,59,6,61,28,29,8,63,48,67,44,68,10,20,46,47,82,31,32,13,69,33,34,16,85,36,18,43,37,77,78,79,80,51,11,55,38,21,22,84,64],load_privatekei:44,older:[56,23,82,63,37,77,4,24,42,66,43,58,19,55,34,16,80],tree:[37,64,15,38,34,68,61,28],rate:[78,66,80,34,16,69],bootloader_path:[37,34,43],project:[31,37,64,5,55,34],matter:[30,85,48,79,38,50],boil:[38,0],gnupg:78,previous_job_info:58,nic0_link:28,minut:[57,77,79,15,6,34,68,83],provis:[36,55,11],hugepag:62,mini:80,fashion:[34,39,65,78,79],entail:32,fold:[54,5,15],ran:[37,16,22,80],ram:[56,51,79,43,69,11,34,21,61,28],mind:[12,0,37,24,79,15,55],sinst_cnt:58,taint:[12,34],raw:[64,78,58,34,21,61,28],aforement:[37,30],manner:[5,40,84,80],increment:16,further:[56,0,23,3,61,85,45,10,69,12,48,55,32,16,11,37,78,79,80,20,82,38,84],seen:[0,18,37,85,32,78,80,54,34,16,69],seem:[12,0,37,42,43,15,21,61],incompat:[38,34,80],seek:64,minu:48,cipher:[0,13],dozen:38,barcloud:36,realm:58,recreat:[56,37,2,58,19,34,84],epo:[34,59],latter:[56,63,77,80,69,21,83,61,52,28],especi:[46,63,37,3,77,78,79,80,15,34,10,69],wipe:[34,58,83],rpcresult:80,high:[36,0,18,37,77,64,41,13,55,34,16,80,10,22,69],contact:[56,37,77,78,79,80,43,34],cumbersom:40,instance_disk_s:2,usb_devic:34,transmit:[80,13],opinstancequeri:80,all_uid:79,expens:[37,36,48,77],simplifi:[12,31,77,78,79,13,43,38,34,22,80,11],thumb:[5,83,0],plenti:11,though:[12,39,23,63,37,2,3,77,78,79,80,58,81,19,69,55,34,22,52,11,64],usernam:[56,34,58,81,13],glob:24,object:[1,2,3,24,42,58,59,60,30,64,66,9,45,69,31,32,33,34,16,50,36,18,37,77,78,79,80,82,83,84,85],what:[56,0,23,2,3,4,41,42,43,57,59,28,85,45,68,11,82,24,48,13,49,33,34,16,50,5,37,77,78,79,80,51,69,55,38,84],regular:[12,36,57,23,37,3,48,80,58,55,59,33,34,22,61,52,68],netdev_add:30,letter:[5,30,80],phase:[2,23,78,34],insul:[78,79],sub:[31,37,2,32,80,58,55,34,16,52],tradit:61,broadcast:[37,18,55],simplic:[33,80],metad:34,internod:37,plugin_specific_data:16,doc:[3,24,79,80,5,67,70,55,33,34,16,68,85],clock:[34,79],flow:[38,5,23],dog:5,doe:[56,0,2,3,4,41,43,58,39,59,61,28,30,8,63,85,67,10,40,69,12,47,13,34,16,83,36,5,37,77,78,79,80,54,82,38,21,22,84,52],dummi:46,ganeti_post_:2,declar:[36,37,40,65,78,79,80,5,58,34,69],wildcard:56,neg:[56,58,42,20,78],neighbour:37,unchang:[57,23,48,80,4,59],section:[56,0,3,58,61,44,8,65,28,68,69,13,34,16,50,37,77,78,79,80,11,55,21],dot:[66,79],libxenlight:77,virtualhardwaresect:[21,28],reactor:80,paravirtu:[34,64,55],external_reserv:[58,18],pacemak:[16,41],whitelist:[37,38],random:[37,78,79,81,34,22,61],speedup:34,hvm_boot_ord:80,syntax:[0,37,78,80,5,58,34,69],freeform:78,advisori:84,directli:[56,23,3,43,61,8,63,64,68,69,31,15,33,34,51,77,78,80,37,20,38,85],node_daemon_certif:9,buildbot:[34,4],radic:80,protocol:[12,36,47,23,18,37,3,48,77,58,79,13,43,56,82,38,34,16,80,61,85],involv:[56,23,63,37,3,48,65,78,43,58,15,69,55,6,34,61,11],absolut:[46,77,80,58,59,34,22,52,60],networkrec:16,layout:[63,37,78,79,80,43,82,34],acquir:[0,23,77,65,42,79,78,69,34,83,80,52,20],libari:5,"_frontend_typ":80,menu:37,explain:[56,7,82,37,77,78,55,16,84,28],configur:[56,0,23,2,3,4,24,5,58,39,59,6,1,60,80,61,28,30,8,63,48,66,9,44,45,81,68,10,20,46,82,31,41,32,13,15,70,54,69,34,16,57,50,36,18,43,37,77,78,79,67,53,51,19,11,55,38,21,22,85],apach:[80,13],stanza:55,preseed:78,mnl0:43,latenc:[37,69,59],instance_nicn_network_mac_prefix:2,folder:[38,4],rss:9,"744m":38,oct:[37,34,43],wantedbi:68,buse:11,plate:5,remotest:16,primary_ip:82,pinst:[33,38,85,55,43],patter:80,timetofinish:16,localrol:16,watch:[12,23,37,42,78,58,34,7],compli:[43,3,80],foremost:80,amazon:56,report:[1,27,41,43,58,59,7,61,29,63,85,69,47,24,48,34,16,71,5,37,72,79,80,11,82,38,22,84],unmap:[37,50],recalcul:17,net:[56,30,82,63,37,79,80,43,81,69,55,34,60,28],op_instance_mov:2,bar:[37,5,0,79],cpython:[42,79],removemiss:[37,34,80,43],changeabl:[37,62,79,69,80],"public":[56,23,37,77,3,65,78,13,43,9,19,44,34,22,61,28],runa:78,cleanli:[8,23,4,42,80,43,55,59,34],pythondir:63,network_nam:[2,58,18],list_elem:5,metadata:[56,36,8,31,64,79,80,67,34,16,69],steal:56,valid:[56,36,18,43,37,3,48,78,79,80,5,44,15,28,69,34,50,20],respond:[37,41,54,59,34,52],fair:[40,66,79,78,34,69],job:[56,39,23,40,41,42,43,58,57,27,7,61,29,8,63,65,9,20,12,13,15,54,49,33,34,35,1,17,71,72,37,75,77,78,79,80,73,69,55,38,83,84],generate_kei:44,nicparam:[37,34,58,18,66],nfqueue:37,roadmap:64,dump_privatekei:44,num:16,mandatori:[23,18,78,79,80,55,34,16],result:[56,0,23,2,40,4,5,58,39,59,7,60,28,63,65,66,68,20,12,48,82,32,13,15,69,33,34,35,57,43,37,77,78,79,80,53,54,19,11,55,38,21,22,84,52],respons:[56,23,4,58,61,63,64,68,69,12,13,33,34,16,35,77,78,79,80,53,82,85],corrupt:[37,34,65],themselv:[57,23,37,32,77,80,43,58,34,16,20],key_fil:78,charact:[0,37,78,79,13,5,33,34,80],optimum:55,allow_failov:58,bb3b2e42:79,subject:[22,79,44],nfdhcpd:[37,58],awar:[56,0,7,18,51,3,57,55,6,16],instance_commun:58,said:[5,9,48,52],hopefulli:[33,34,37,55],heterogen:[5,69],databas:[2,78,80],wikipedia:51,discoveri:[15,80],instance16:37,instance17:37,outstand:60,getinstancenod:45,simplest:[38,32],awak:78,posix:[77,23,79],awai:[7,63,37,61,77,79,80,82,34,10],rsyslogd:43,approach:[12,36,0,18,31,4,66,80,43,56,10,69,17],instance19:37,attribut:[36,8,7,85,48,77,42,79,78,5,69,82,34,16,80,84,44],instance_nicn_ip:2,accord:[56,39,23,3,42,79,58,57,69,16,10,85,28],req_query_:54,af38:79,were:[56,0,23,2,3,43,58,61,44,85,9,40,69,12,48,13,49,33,34,16,35,17,37,77,78,79,80,81,22,84],weak:[37,78],sophist:23,extens:[12,56,0,23,61,3,24,79,80,5,84,44,59,33,34,35,10,64,28,17],lazi:5,replace_auto:58,extent:16,toler:[37,34],advertis:37,opnodeadd:9,behaviour:[56,62,39,37,77,4,24,78,79,13,5,15,6,34,80,57,38,69],protect:[56,37,65,41,42,79,78,58,34,22,80,69],accident:[56,78,20],easi:[12,30,0,23,31,37,64,32,77,78,79,80,43,59,6,34,16,22,11],cow:28,fault:37,howev:[56,7,2,3,4,42,5,59,23,30,63,64,68,40,20,12,48,32,13,14,15,34,36,37,77,78,79,80,54,81,69,55,38,22,85],quicker:28,cfgupgrad:[37,34,8,63],checkexpiredx509cert:78,against:[36,37,2,79,80,54,34,68,11],instance_info:79,troubl:[21,58,78,28],source_instance_nam:58,capabl:[12,0,23,18,31,37,2,3,77,66,55,59,34,22,84,85],docbook:[34,24],logic:[23,4,42,43,61,30,64,65,9,69,32,34,16,35,83,36,18,37,75,77,78,79,80,38,22,85],xyz789:58,seri:[8,37,80,57,45,34,16,69],com:[56,46,7,82,31,43,37,2,58,79,38,9,55,59,33,34,61,50,44],con:42,compromis:[0,3,78,79,34,44],assur:37,findclust:78,applianc:[56,36,28],createsignedx509certif:78,sdb1:[37,43,55],trunk:66,"50gb":37,uidpool:[77,79],loader:37,node_info:79,spindl:[85,58,11,82,34,69],framework:[36,76,37,77,32,24,79,80,5,82,59,34,10],ssconf_node_pass:8,guid:[29,82,43,37,24,5,67,55,34],assum:[56,46,23,43,37,2,64,48,65,61,79,80,14,55,77,16,10,50,85],summar:[5,16],duplic:[30,54,79,58,6,34,35,69],replicationprotocol:16,fra:43,tint:58,sucessfulli:78,addbr:66,union:[23,7,36],fri:[37,34],listrunn:[34,9,67],filesystem:[56,0,2,41,43,61,63,64,12,31,32,15,34,16,36,37,77,78,79,80,55,38],three:[56,0,43,37,32,77,58,79,78,5,9,69,82,34,22,80,68,20],been:[56,0,23,2,3,4,42,76,5,58,57,25,26,27,61,44,8,63,65,67,9,68,40,11,12,46,82,48,13,15,49,34,16,35,83,36,71,43,37,74,75,72,77,78,79,80,53,73,69,55,38,22,84],master_capability_rapi_modifi:3,accumul:[5,16,34],much:[56,0,23,3,39,61,64,68,69,82,48,15,33,34,16,54,77,78,79,80,37,11,55,38],beta3:34,beta2:[34,58],interest:[12,8,31,3,4,77,79,15,69,33,68,28],basic:[56,23,3,24,58,28,29,64,66,67,68,10,69,46,48,13,34,16,36,37,78,79,80,51,55,22,84],replace_on_primari:[43,58],"001d093e835f":79,vnc_bind_address:80,quickli:[0,79,32,13],approv:56,life:[43,15,80,59],rather:[62,0,14,3,4,77,78,79,80,5,69,55,34,38,21,60,61,85,11,17],ifnam:56,encourag:[64,79],nplus1:34,type_rsa:44,worker:[80,77,65,78,79,42,34,35],uncommon:23,anywher:[80,45],multithread:[11,80],"60mb":34,craft:[39,56,0],child:[43,58,23,77,80],cdrom:[56,34,55,80],emploi:[56,58,67,69,78],ident:[30,23,64,4,78,80,53,19,55,34,61,69],gnt:[56,0,2,3,85,41,42,43,58,39,59,60,28,62,83,30,8,63,64,66,67,44,81,40,12,46,82,31,49,34,35,57,50,17,36,18,37,77,78,79,80,53,54,19,55,38,21,22,52],gnu:[43,67,24],helper_startup_timeout:58,hat:28,servic:[12,56,23,31,37,41,78,79,13,55,59,38,68,80],properti:[56,51,0,37,2,64,48,77,42,80,5,15,59,69,45,34,10,44],jobqueue_purg:80,op_instance_startup:2,asign:18,aim:[36,0,23,31,37,77,78,79,5,10],calcul:[85,77,79,11,34,16,28,17],publicli:77,aid:[34,68,65],conflicts_check:58,spawn:[12,34,61,23,31],timefram:[83,77],seven:43,fe80:55,cont:50,coher:[37,80],parseuidpool:79,tabl:[56,23,37,4,77,79,5,55,33,34],device_del:30,node1_nam:37,cloop:28,ganeti_instance_nam:2,conf:[8,31,63,37,77,78,79,43,55,34,22],enabled_disk_templ:[34,58,85],tediou:[37,80],network_subnet6:2,ssh_host_rsa_kei:19,opcreateinst:0,sever:[12,83,0,23,37,3,85,77,42,78,5,58,15,33,34,46,80,52,20,64],"0beta1":34,instance_reboot:37,disabl:[56,0,3,58,6,61,8,85,67,20,12,13,15,33,34,11,83,54,78,79,37,69,55,22],filestorag:[38,36],incorrectli:38,receiv:[56,39,23,2,40,58,61,9,69,12,48,13,49,33,34,16,35,37,77,78,79,80,81,52],suggest:[36,0,3,14,21,6,34,50],make:[56,0,7,3,4,24,42,5,58,39,23,60,69,28,83,30,8,63,64,66,67,45,81,68,40,20,12,82,41,32,49,33,34,16,50,17,36,18,43,37,77,78,79,80,19,11,55,38,22,84,85],format:[56,3,4,43,58,59,60,28,29,30,8,63,64,66,9,20,47,82,49,33,34,16,5,37,74,77,78,79,80,81,55,38,21],giampaolo:50,bunni:20,who:[29,30,43,3,77,78,5,58,49,16,35],complex:[12,0,54,37,41,3,32,24,42,79,78,5,58,69,34,80,61,48,11],split:[8,23,71,72,37,77,45,65,66,78,5,15,73,27,34,46,80,84,54,69],big:[1,37,77,65,80,5,15,55,34,83,61,69],lockset:[34,83,77,79],ganeti_mast:2,complet:[56,39,23,2,3,24,43,0,7,61,28,8,66,68,11,82,48,13,34,16,57,18,37,77,78,79,80,54,81,69,55,38,21,84],foldabl:5,raid:[16,11],fragil:9,evid:[37,16],nic:[56,2,43,58,60,28,62,30,66,67,69,55,15,33,34,16,18,37,79,80,82,21],hang:[54,34,55,31,43],greedili:10,hand:[0,37,77,40,4,41,78,79,80,58,15,16,57,22,69,68],posit:[56,30,4,80,5,82,20],fairli:56,rais:[30,43,77,78,79,5,33,21],boiler:5,ownership:[34,15,78,80],refin:[11,17],"273m":38,studi:[35,42],tune:[54,0,69],environment_error:58,judgement:5,kept:[56,0,23,77,41,78,79,80,69,34,35,50,11],undesir:56,bewar:[41,55],cross:[16,7,79],thu:[56,0,23,2,3,41,43,28,30,64,66,45,68,69,12,48,15,34,16,50,17,36,5,37,78,79,80,55,38,22,85],itself:[56,0,7,3,41,43,57,59,23,61,28,62,63,85,65,9,68,40,11,48,13,34,16,17,18,37,77,79,80,53,54,81,69,55,22,84],hypothet:[56,10],inherit:[62,18,37,66,79,59,38,34,68,69],thp:62,gateway6:[37,58,18],op_instance_failov:[2,7,42],client:[7,3,4,42,43,58,23,61,8,67,9,68,40,31,48,13,49,33,34,35,36,18,37,77,78,79,80,54,55,22],shortli:5,thi:[56,0,7,2,3,4,24,42,5,58,39,69,59,6,23,60,80,61,28,62,29,30,8,63,48,65,66,9,44,45,81,68,10,40,20,64,12,85,46,47,82,31,41,32,13,14,15,54,49,33,34,16,35,57,50,17,36,18,43,37,77,78,79,67,53,51,83,19,11,55,38,21,22,84,52],createx509certif:78,gzip:[56,0,24,67,61,28],programm:4,everyth:[23,72,37,4,78,79,80,5,55,59,16,61,28],paradigm:80,instance_start:56,left:[0,23,37,2,78,79,80,43,84,82,68,10,52,69],logical_id:[43,64,79],rbdn:37,identifi:[56,36,0,23,37,84,48,4,80,43,15,59,34,16,61,50,60],op1:35,just:[56,0,23,3,41,42,5,58,57,59,6,61,30,63,64,45,40,20,82,48,15,49,33,34,16,17,36,37,77,78,79,80,54,69,55,38,84,85],filedevicehelp:38,"49af":58,overridden:[34,3,80,79,17],bandwidth:[0,77,66,11],partner:16,human:[33,84,77,28,59],vif:[56,30,37,66,79,55],nowadai:[85,42,69],node_cnt:58,yet:[56,0,23,3,4,58,57,64,67,11,12,15,34,16,37,77,78,79,80,54,55,22,84],languag:[5,58,32,20],previous:[0,23,48,4,79,80,43,58,34,21,28],iff_vnet_hdr:34,reboot:[51,30,39,63,37,2,59,79,43,58,57,55,49,34,84,17],shoud:16,awaken:78,xmlhttprequest:58,"20gib":[69,55],expos:[30,0,23,54,4,77,78,80,34,16,60],interfer:[56,0],had:[0,43,37,3,4,78,80,14,54,34,22,48,69],ideal:[56,0,43,66,78,5,15],ganeti_instance_vcpu:2,spread:[77,79,69,80],els:[0,67,79,80,5,58,45,34,16,44],save:[56,36,30,23,54,45,80,55,34,21,16,28],explanatori:78,gave:2,sanit:37,applic:[62,31,13,5,58,34,80,61],advis:[8,7,2,3,42,55,34,22,35,84],mayb:[54,5,28,11],preserv:[30,57,64,80,34,84],longstr:5,max_ispec:69,"105mb":0,disk_reserv:69,extractextag:34,kjournald:43,item:[8,37,5,58,59,33,34,16,28],greear:43,background:[12,36,1,31,64,78,80,59,85,28],submitmanyjob:[58,35,42,78],apart:[16,0,60,68],measur:[56,39,14,8,69,82,16,61,11],daemon:[56,57,23,3,41,42,43,58,25,26,6,61,44,8,63,65,67,9,68,20,12,46,31,24,32,13,15,54,49,33,34,16,35,37,77,78,79,80,53,51,55,22,52],ctime:[58,77],specif:[56,0,23,2,40,42,5,58,57,69,7,61,28,83,30,8,63,64,67,68,10,20,12,46,47,82,31,48,13,49,33,34,16,50,85,36,18,43,37,77,78,79,80,51,11,55,21,22,84,52],arbitrari:[56,30,0,14,78,5,49,34,52],kernel_path:[37,34,80,43],op_:2,manual:[56,7,4,41,43,59,6,28,29,8,63,85,67,68,10,20,46,24,15,69,34,18,37,78,79,80,51,19,11,55,22,84],findclusterbyinst:78,unstabl:78,hvparam:[30,37,79,80,58,34],night:10,hung:[16,80],seg_tag:16,specifii:8,fileid:34,dsa:[34,9,19],underli:[29,18,37,64,77,43,58,34,16,50,11,85],www:[34,58,61,67],right:[30,0,37,2,85,32,77,42,80,5,15,69,6,34,61,38,11],old:[23,2,3,4,43,58,61,30,8,65,40,13,33,34,37,78,79,80,54,19,21,22,84],candelatech:43,deal:[12,36,30,57,23,18,85,48,77,80,5,15,69,34,11],exportcert:[61,13],statvf:38,somehow:[37,84,61,80],dead:23,node3_nam:37,id_dsa:[37,19,79],intern:[57,23,43,58,6,64,65,69,12,48,15,34,16,83,36,37,77,78,79,80,54,21,22],group_network:18,extra_packag:78,opinstanceimportprepar:61,inact:[58,77,79],successfulli:[36,30,8,23,37,48,4,79,80,43,9,15,55,34,16],op_network_set_param:[2,18],transmiss:13,brd:55,cooper:37,trace:[37,78],outlier:48,archiv:[56,37,77,42,80,55,34,28],fox:5,subclass:[33,5],dangl:[34,63,45],"_arg":24,tracker:31,middlewar:13,overcom:[12,56,40,78,79,80,45],cno:58,foo:[37,5,82,79],rootfs_siz:78,localhost:55,core:[72,77,42,79,78,15,34,80,84,50,69],log_entri:58,sensibl:[32,10,79],uncompress:61,mynode2:85,disk_info:78,trivial:[43,37,48,79,80,5,54,68,61,44],spindle_count:[14,58,11,34],discount:80,corp:43,unreason:80,repositori:[37,4],ha1:58,peer:[34,48,80,69,43],xenvg:[37,34,64,55,43],post:[56,18,63,2,3,79,80,58,69,34,61,20],"super":48,error_msg:59,plug:[30,69],vnc_consol:34,hard:[51,30,0,43,37,48,32,80,5,58,34,21,16,60,69],req:[19,78,44],slightli:[34,83,0,41,78],choke:0,surround:5,simul:[46,41,79,80,43,69],upgradeconfig:[34,79],coars:20,transcendent_memori:51,commit:[34,4,42,43],breakag:[34,55],produc:[12,62,0,18,78,79,13,34,16,80,28],unrespons:[34,41],total_disk:82,grouplist:18,mem_in_mb:28,ssh_port:53,required_nod:82,xyz:[33,5],"float":[5,34,58,69,14],encod:[47,23,18,37,79,13,58,82,33,34,16,80,61,69],bound:[34,68,77,79,69],funtion:16,down:[0,2,3,43,58,39,59,61,10,69,12,48,49,34,16,57,17,54,77,78,80,37,82,38,22,84,52],spice_streaming_video:34,sor:[51,69,59],resili:[34,11,80],"_access":80,vnet_hdr:34,opportun:56,storag:[23,43,58,27,7,29,8,64,73,11,82,31,48,33,34,16,1,17,36,18,71,72,37,75,77,78,79,80,51,69,55,38,84,85],eth0:[37,43,55],wan:37,accordingli:[31,63,37,3,48,43,58,55,34,61,40,28],git:[37,34,16,24],fmtjson:34,cc012285:37,overus:5,support:[56,0,23,2,3,4,24,5,58,27,83,1,60,61,28,62,29,30,8,63,48,66,67,44,81,68,20,85,46,47,82,31,41,32,13,15,33,34,16,50,17,36,18,43,37,75,77,78,79,80,53,73,59,69,55,38,21,22,64],transform:[80,63],"class":[36,32,47,77,85,4,65,78,79,80,5,69,55,49,38,34,35,28],br100:[37,62,18],stuck:16,reli:[36,0,23,18,2,41,77,79,78,59,34,68,80],dts_int_mirror:36,queryd:23,cluster_nam:[9,82],overhead:[36,80,31,11,69],gil:79,interv:[12,57,3,43,68,69],fork:[77,23,80],homogen:[5,77,11],medium:[56,34,77,55],form:[62,0,23,43,37,78,79,80,5,58,69,33,34,16,84,28],offer:[36,0,37,3,38,68],forc:[12,30,8,7,18,37,2,3,77,79,13,43,58,59,34,80,50,69,85],reassign:11,heal:[34,41],forg:78,maxim:[34,58],percentag:16,heap:77,cidr:18,safeguard:79,"true":[82,80,77,3,4,24,42,79,78,43,58,44,55,59,33,34,68,35,40,20],lvmstrap:[37,34,55],reset:[8,18,37,2,80,43,58,34,22,52,44],absent:[34,82],userland:[61,18],flavour:28,drive_add:30,createinst:78,bootup:37,spun:38,mebibyt:[36,82,80],max_node_failur:69,unpin:50,max_inst_spec:77,maximum:[56,51,0,23,37,48,77,66,79,78,39,43,58,15,69,59,34,80,11],tell:[12,37,2,77,78,79,80,55,61],url:[56,58,61,80],disk_aio:34,metalock:80,absenc:[12,16,78],rerun:37,another_elem:5,unrel:[34,55,17],emit:[34,3,85],leaf:[78,80],reattach:45,classif:[58,80],new_nod:37,alongsid:79,semicolon:5,classic:[48,69],hardcod:[33,34,48,79,69],"abstract":[18,37,64,42,79,38,34,16],decrypt:[3,78],proven:[56,63],backoff:61,shelltest:24,diagnost:34,inst6:59,exist:[56,0,23,2,3,4,42,5,58,69,59,7,61,29,30,8,63,64,65,66,45,68,40,20,12,48,47,82,31,32,15,49,33,34,16,35,36,18,43,37,77,78,79,80,53,19,11,55,21,22,85],aliv:[37,43,23,80],"528a":82,strive:11,ship:[41,24,78,79,34,68],virtualsystem:28,check:[56,0,7,2,3,4,24,43,58,59,23,61,28,8,63,64,65,44,45,68,40,11,12,48,31,41,32,15,33,34,16,35,17,36,18,37,77,78,79,80,53,81,69,55,38,22,84],sticki:41,assembl:36,pipe:[12,56,23,77,79,34,61],password:[56,3,79,80,43,58,81,55,34,52],encrypt:[0,3,78,79,19,22,61,64],mem_hv:69,cron:[37,51,68,8,55],relax:34,when:[56,0,23,2,3,4,24,42,5,58,57,69,59,6,7,61,28,62,29,30,8,63,48,65,66,67,44,45,81,68,20,12,85,46,82,31,41,32,14,15,49,33,34,16,35,50,17,18,43,37,77,78,79,80,53,54,83,19,11,55,38,21,22,84,64],"__slots__":34,refactor:[36,32,23,4,25,34],configdata:45,flood:34,fakeroot:24,role:[56,36,23,37,3,41,79,80,54,58,34,16,64,28,68],sda3:55,sda1:[37,43,64],test:[56,0,40,4,24,42,43,39,27,28,29,30,63,64,66,67,82,32,13,15,34,16,50,5,37,78,79,80,54,55,21,84],master_capabability_rapi_modifi:3,presum:[48,77,69],roll:[37,34,63,17],node:[56,73,0,23,2,3,85,41,5,58,39,25,26,59,6,1,80,61,28,62,29,30,8,63,48,65,66,9,44,45,81,68,10,40,11,64,12,46,82,31,83,32,13,14,15,54,49,33,34,16,35,57,50,17,36,18,43,37,75,76,77,78,79,67,53,51,19,69,55,38,21,22,84,52,7],legitim:78,notif:[12,77,41,78,79,34,61],intend:[56,7,63,3,77,79,80,55,34,16,20],opprereqerror:[33,37,40,58],turnup:2,security_domain:22,kvm:[56,57,1,58,26,62,30,66,67,69,12,31,34,50,37,77,78,79,80,11,55,22],asterisk:37,urllib2:58,instance_vcpu:2,aaeccc0dff9328fdf7967cb600b6a80a6a9332af:79,intens:[64,55],intent:[56,63,37,53,34,22,69],consid:[0,1,3,41,43,58,57,59,23,61,28,62,85,10,11,12,48,14,34,17,36,18,5,51,77,78,79,80,37,69,82],easili:[0,23,43,58,63,64,10,69,13,15,33,34,16,54,77,78,79,80,81,11,21,84],vm1disk:64,weekend:10,startinst:31,subdivis:23,"2048k":64,longer:[56,30,0,23,37,2,3,77,80,5,58,45,38,34,83,61,52,69],furthermor:[56,36,23,18,37,64,48,77,62,79,78,5,15,54,34,69],sighup:34,pseudo:78,cluster_ip_vers:2,rough:[32,13],ignor:[56,0,2,24,42,43,58,61,28,8,63,85,45,69,48,34,50,17,37,77,80,11,38,21,83],ovfimport:28,time:[56,0,23,2,42,5,58,39,69,59,6,61,28,83,30,8,63,64,65,67,45,68,10,20,46,82,32,14,15,70,49,33,34,16,35,57,50,17,36,18,43,37,77,78,79,80,54,11,55,38,21,22,84,85],push:[37,23,78],ubklback:64,backward:[56,1,18,63,64,42,79,80,58,82,34,83,61],exposur:69,corpu:29,ganeti_hooks_vers:2,concept:[36,0,37,2,48,77,79,80,84,11,17],rom:[21,34],chain:[75,42,66,81,40,20],skip:[63,77,79,80,55,34,28,17],global:[36,37,48,77,66,79,78,43,55,22,80,60,69,17],datum:3,focus:[78,31,80],known:[37,85,77,80,5,19,34,33,21,16,84,22],signific:[0,54,3,80,15,34,10,69],supplement:53,computation:77,boot_ord:80,ignore_ipolici:58,consum:[33,34,77],gntdaemon:77,osd:31,row:61,hierarch:37,decid:[57,4,41,58,59,61,30,8,85,10,69,48,13,49,34,16,83,54,77,78,79,80,11,21,22,84],hold:[36,23,18,37,77,3,65,78,79,80,43,58,20,82,83,85,11],depend:[56,0,7,2,3,41,42,43,58,57,23,60,28,62,29,30,8,63,85,65,67,9,68,11,47,82,24,13,33,34,16,50,17,36,18,37,77,78,79,80,51,19,69,55,83,84],system:[56,0,23,3,4,41,43,58,57,61,28,8,63,64,67,9,68,11,12,46,47,82,31,24,15,49,33,34,16,50,85,18,37,78,79,80,54,19,69,55,38,21,22,84,52],cloud1:36,pem:[8,78,77,58,79,13,9,19,81,52,44],destination_nod:37,blockdevic:64,decim:80,readabl:[23,77,79,28,34,33,7,44],worth:[21,77,69],plj0:79,std_spec:69,modify_etc_host:[34,58],certainli:[68,61,42],haskel98:5,decis:[56,36,30,46,77,82,45,22,83,69],text:[36,37,3,67,78,58,15,33,34,16],downtim:[37,77,80,43,34,10,17],exectut:2,brown:5,sourc:[56,1,2,3,4,24,43,58,69,61,28,8,64,67,20,48,49,34,16,51,78,37,81,11,55,21,22],string:[56,7,2,5,58,59,80,28,63,85,66,9,69,49,33,34,16,50,36,37,77,78,79,67,20,82],congest:[34,83],redist:[37,34,8,79,63],rpcrunner:80,instance_os_add:[56,34],disk_usag:58,auto_promot:[34,58],feasibl:[85,0,80],sendtocli:78,pgrep:37,broadli:48,condit:[12,23,77,41,78,79,80,5,69,59,34,68,84,11,17],word:[37,2,48,77,78,79,80,11,55,69,50,28],brows:29,readyst:58,cpu_set:50,enoperm:[37,84],set_subject:44,hour:[8,37,77,15,34,83,44],administr:[56,23,2,3,43,59,29,8,64,69,12,31,34,16,36,18,37,78,80,11,55,38,22,84,85],level:[0,23,41,42,5,58,6,60,62,30,66,45,10,11,32,31,48,13,15,49,34,16,83,36,18,37,77,78,79,80,53,69,55,38,22,84],did:[0,2,3,77,80,38,61,85],die:23,gui:49,placat:34,iter:[5,80,79,34],shortcom:[56,39,1,3,41,42,57,23,60,61,44,62,30,63,66,9,45,68,10,40,20,12,32,13,14,49,33,16,35,17,18,37,77,78,79,53,11,38,83,84,52],m1tgej:37,unsupport:[38,80,28,59],relev:[12,23,37,3,24,78,79,80,55,38,16,84],d1fa:43,ndisc6:67,activitylog:16,implic:[81,22,23],unaccount:69,round:[34,79,69],dir:[8,63,37,85,79,15,55,34,38,21,68,28],prevent:[56,0,23,82,37,48,32,77,78,79,80,81,55,59,34,22,69,17],slower:[16,69],version:[56,0,23,2,3,4,24,5,58,57,1,61,28,29,30,8,63,64,66,67,44,40,20,46,47,82,48,13,69,33,34,16,17,43,37,76,77,78,79,80,53,19,11,55,21,22,84,85],powercycl:[0,46,41,79,58,15,59,34,52],nic_mod:66,plu:[39,37,2,24,77,79,80,81,34,84],sign:[0,23,84,3,78,5,58,81,34,61,44],pend:[77,42,79,78,34,16,84],heavyweight:41,cost:[36,61,77,42,80,16,10,69],group1:58,unprotect:78,minimis:69,jobid:[37,58,20],port:[56,47,37,66,79,78,53,43,58,15,81,55,38,34,16,80,61,22],os_hvp:58,explictli:56,replc:84,appear:[56,3,78,80,43,16,61,69],disk_typ:28,repli:[37,56,23,78],"64bit":[37,58],havoc:43,uniform:[34,80],current:[56,0,23,2,3,4,24,42,5,58,39,69,59,1,60,80,61,28,62,83,30,8,63,64,66,9,44,45,68,10,40,20,12,85,48,47,82,31,41,32,13,14,15,54,49,33,34,16,35,57,50,17,36,18,43,37,77,78,79,67,53,51,11,55,38,21,22,84,52,7],sinc:[56,57,23,2,3,85,42,43,58,59,60,61,28,30,8,63,64,65,66,45,68,40,20,15,49,33,34,16,50,17,5,37,77,78,79,80,54,69,55,38,21,22,52],wors:[0,63,80,34,83,84],suspect:34,reqv1:58,graph:[84,23,17],del:37,nodegroup:[62,36,18,31,37,2,85,58,82,34,60,84,17],acpi:[12,34,55],corosync:41,standi:10,xml:[16,28,80],pose:[56,58,80],deriv:[5,68,34],x509req:44,urlopen:58,gener:[56,0,23,3,4,24,42,5,58,7,61,28,30,8,44,11,12,46,82,31,48,15,49,34,16,36,18,37,77,78,79,80,54,19,69,55,38,21,22,84,52],unauthor:34,onli:[56,73,0,23,2,3,4,24,42,5,58,39,59,7,60,80,61,28,62,83,30,8,63,48,65,66,9,44,45,81,68,10,40,20,64,12,85,46,47,82,31,41,32,13,15,54,69,33,34,16,35,57,50,17,36,18,43,37,77,78,79,67,53,51,19,11,55,38,21,22,84,52],agreement:80,satisfi:[0,77,79,55,61,20],ganeti_forc:2,explicitli:[56,29,0,18,37,85,48,42,67,58,57,33,34,80,17],modif:[56,0,23,43,58,59,60,30,64,66,45,69,12,31,34,36,18,37,77,78,80,54,19,83],install_imag:58,address:[56,0,2,41,43,58,61,30,67,20,12,82,32,15,69,34,16,36,18,37,77,78,79,80,11,55,38,21,22],waitdep:42,along:[37,34,8,23,80],getinstancedisk:45,wait:[0,23,2,3,42,43,58,39,61,63,65,68,69,34,35,17,37,77,78,79,80,83,84],box:[68,55],nagio:16,netdev:[37,34,55],shift:[40,4,69],rethink:38,wrong_input:[33,58],queue:[56,29,39,23,79,63,37,65,49,41,42,58,78,9,15,77,34,1,35,20,80],multicast:[37,55],throughput:[0,79],behav:[38,34,3,79,11],overriden:[62,3],healthi:[37,84,48,79,43,10],extrem:[15,0,28],imbal:48,reclaim:[48,77],promot:[37,2,3,41,77,80,58,34],ipc:[51,23],semant:[0,3,80,69,82,16,35,20],elect:80,taskset:50,extra:[56,3,24,5,60,30,63,85,67,45,15,34,16,36,37,77,78,79,80,19,82,84],tweak:[34,77,79,69],modul:[43,77,64,32,24,42,79,80,5,67,55,33,34,16,61],"477m":38,prefer:[12,56,23,63,61,85,4,77,66,79,80,5,58,82,68,10],forev:[55,80],gntrapi:77,total_memori:82,default_templ:77,instac:[82,55],visibl:[56,18,37,41,42,78,82,38,34,80,69],instal:[56,0,1,3,4,41,43,58,25,28,29,30,8,63,67,44,68,69,12,46,82,31,24,15,34,16,18,37,78,79,80,55,38,21,22],new_disk_templ:2,mobil:[36,7],vg_name:[37,16,58],regex:[37,34,67],jan:[37,34],max_running_job:58,memori:[56,23,2,42,43,58,1,28,62,64,10,11,46,82,48,14,33,34,16,51,77,78,79,80,37,69,55,38,21,52],subvert:78,mnode:[38,43,58,85,55],ft_raw:64,linter:24,todai:[77,79,80],impos:[34,80,23,45],connector:12,live:[56,23,42,43,58,30,8,64,67,45,69,48,15,34,50,17,51,77,79,80,37,55,84],handler:[61,79,13],value3:5,value2:[5,31,36],value1:[5,36],"417c":43,msg:[58,79],scope:[64,32,80,55,16,85,69],vol_new_s:36,checkout:4,confidenti:56,analyz:[34,16,80],unsaf:0,capit:5,idempot:[2,63,34],oob:[51,76,41,15,59,34,10],peopl:[5,80,34],claus:34,pylint:[34,24],finit:[40,11],ctype:[34,61,79],enhanc:[62,8,2,3,77,79,80,43,69,55,34,11],appendix:79,rigid:80,osparam:[58,78],examin:[0,37,4,77,80,43,55],outofsync:16,unseri:80,ebd1a7d1:37,effort:[23,54,3,11,38,20],old_secondari:2,getinstanceinfo:[78,79],voum:69,manpag:[55,37,70,82,34,17],aes_ni:0,filebas:79,opcomputecapac:77,instance_diskn_s:2,ublkback:64,pyinotifi:67,local:[56,23,2,4,24,43,58,61,8,67,9,31,41,48,15,34,16,17,5,51,77,78,79,80,37,55,22],prepar:[0,37,58,79,78,43,9,46,20,59,34,80,61,28],xmlreq:58,hextra:24,uniqu:[56,36,30,23,18,37,84,3,77,78,79,80,58,44,55,34,16,61,60,11,85],cat:[43,61,77,55,78],strain:0,descriptor:[56,30,77,79,34,61],whatev:[37,2,3,48,79,67],nostartup:58,purpos:[30,0,82,37,77,78,79,80,14,20,55,38,34,68,10,28],logon:43,vol_nam:[36,31],problemat:[12,24],nearest:[37,84],opresult:58,encapsul:[51,30,35,11],stream:[34,0,61,80],predict:[34,68,77,11],add_extens:44,chip:0,socat:[34,67,61,50,78],sharedfil:[37,85,58,38,34,28],agent:[29,47,71,72,37,41,73,34,16,22],topic:[29,0,42,80,34,35,11],keyusag:44,abort:[8,63,37,2,40,78,79,80,43,9,59,6,34,61,64],physical_id:79,unfortun:[56,54,48,77,79,58,15,34,61,69],occur:[12,29,30,0,18,77,65,79,56,34,28],level_inst:83,pink:20,alwai:[56,3,4,41,43,58,28,63,85,20,32,33,34,11,50,18,5,37,77,78,79,80,69,82,22,84],differenti:[33,34,64,4,80],chroot:[30,37,78,58,34,69],multipl:[56,0,23,2,4,41,5,58,39,6,28,29,8,63,48,20,46,32,15,69,34,16,83,18,37,77,78,79,80,81,11,82,38,22,84],a378:58,get:[56,39,23,3,41,42,43,58,57,59,60,61,83,30,8,63,64,67,45,40,20,47,24,32,14,15,33,34,16,50,36,37,77,78,79,80,53,54,11,55,22],uptim:16,"500gib":69,write:[56,0,23,2,3,24,42,5,58,61,44,63,64,9,69,12,46,31,32,15,34,16,37,77,78,79,80,81],till:[63,3,80,34,10,85],despair:78,anyon:[43,80],actual:[56,39,7,2,42,5,58,57,59,23,61,29,30,8,63,64,10,11,12,48,47,82,32,13,14,15,49,34,16,17,36,43,37,78,79,80,54,69,55,38,22,84,85],fourth:34,nodenam:[55,59],abovement:85,somevalu:5,loopback:[16,64,31],snf:37,map:[36,23,18,31,43,37,3,79,80,5,58,33,34,16,50,69,85],product:[56,39,41,78,79,67,55,34],mar:34,max:[82,34,30,58,69],clone:41,partwai:80,spot:80,usabl:[36,23,54,79,80,43,34,61],constraint:[36,0,18,37,2,85,69,11],intrus:55,membership:34,xzf:55,known_host:[77,8,19],pave:80,mai:[56,0,23,4,41,58,59,7,61,28,62,8,63,64,68,20,82,31,24,32,13,34,16,50,36,18,37,77,78,79,80,51,19,11,55,21,22,84,52],drastic:[0,84],underscor:[2,0],secondari:[39,7,2,43,58,59,64,69,55,48,34,17,36,37,77,79,80,51,81,82,22,84],data:[56,0,23,2,3,4,41,42,5,58,59,61,28,30,8,64,67,9,73,81,10,20,12,47,82,31,48,13,15,54,49,33,34,16,50,18,43,37,77,78,79,80,51,19,69,55,38,22,84],grow:[36,23,37,2,77,80,43,58,15,69,34,11],"4a4139b2c3c5921f7e439469a0a45ad200aead0f":79,man:[29,37,85,80,51,58,70,55,34,50,69],repo:66,autotool:34,practic:[12,0,43,37,3,4,77,5,39,54,59,46,69],newkei:[19,78],runwithlock:34,devi:43,divid:[23,31,37,77,65,78,79,55,16],explicit:[62,48,5,3,32,77,78,43,57,49,34,68,61,50,69,17],acces:55,ganeti_instance_disk_count:2,predic:20,mangl:37,inform:[56,39,23,2,3,4,42,58,57,83,7,61,28,29,30,8,63,64,66,67,68,10,11,12,46,82,49,33,34,16,50,85,36,18,37,77,78,79,80,81,69,55,38,21,22,84,52],"switch":[30,8,63,3,48,77,79,80,43,0,55,38,34,50,85],preced:[37,0,84,82,69],combin:[56,83,0,80,2,48,24,77,79,50,5,33,34,16,78,61,38,69],ghc:[34,67,24],callabl:79,kvm_dev_path:31,hvm_vnc_console_port:80,talk:[0,43,37,2,78,79,13,5,81,54,55,80,34,22,35,61,69],volume_group_nam:85,ovfread:28,tty:2,lsb:[68,41],wheezi:[37,67,24,55],getmast:[37,34],virtualis:[37,15],op_cluster_verify_group:[2,34],os_typ:[37,58],graphviz:24,lst:[37,5],occasion:34,existing_nod:37,dumb:[37,34],equip:[16,59],still:[56,0,7,3,4,41,42,43,58,57,59,23,60,61,30,63,85,10,40,20,12,24,48,13,15,69,34,16,17,18,37,77,78,79,80,54,11,55,38,84,52],apidoc:5,seg_count:16,dynam:[56,32,37,4,77,66,78,51,15,34,80,10,69],entiti:[0,23,37,78,79,80,58,49,34,22,84,60,28],busi:[57,48,77,80,38,34,69],conjunct:[34,80],depmod:55,overhaul:34,monitor:[0,23,3,41,42,58,39,59,29,30,64,67,12,47,31,49,34,16,50,71,72,37,80,73,55,22],sata:55,polici:[7,82,2,64,77,58,69,55,34,22,84,11],invalid:[37,77,64,48,65,34],avil:22,weaker:0,f4e06e0d:82,nic0_mac:28,instantli:[30,80],hotplug_devic:30,platform:[67,0,28],window:[37,43,16],req_submit_job:54,rconfd:23,mail:[58,69],netdev_del:30,main:[12,56,23,37,3,32,77,58,79,78,54,9,69,55,34,68,80,83,52,28,85],basenam:[78,63],confin:7,watermark:20,non:[0,23,2,3,85,41,42,5,58,39,61,44,63,64,28,10,20,47,82,48,14,15,33,34,16,17,36,43,37,77,78,79,80,53,54,69,55,22,84,52],oneshot:68,synopsi:34,hop:78,dmtf:28,smarter:79,cheap:48,remote_node_uuid:58,initi:[56,0,23,2,3,41,42,43,57,26,27,61,30,63,64,9,68,20,12,46,31,32,13,15,54,34,16,17,36,37,77,78,79,80,51,19,69,55,22,85],"28676f0516c6ab68062b":78,pkill:37,therebi:[34,77],half:[69,80],removesecondari:5,nov:34,now:[57,3,4,41,42,43,58,6,60,28,30,63,85,45,11,82,31,33,34,16,17,5,37,77,78,79,80,54,81,69,55,38,84],discuss:[80,54,84,42,79,78,69,33,68,35,61,28,17],nor:[36,30,0,54,37,3,77,78,79,5,39,69,21,60,61,11],introduct:[36,0,1,18,82,37,2,64,65,42,43,58,15,54,55,77,46,69],wont:11,term:[12,29,48,18,54,14,37,3,4,77,78,5,67,51,55,59,38,36,61,69],workload:[39,34,64,0,78],name:[56,0,23,2,3,24,42,5,58,69,59,6,7,60,61,28,30,8,64,65,9,44,45,81,68,10,40,20,12,46,47,82,15,49,33,34,16,83,85,36,18,71,43,37,72,77,78,79,80,19,11,55,38,21,22,52],readfil:78,realist:[39,0],nil:80,perspect:[37,78,80],dmsetup:43,revert:[8,0,78,80],crypto:[8,3,77,53,67,19,34,68,81,44],separ:[0,23,2,3,4,58,59,61,28,62,30,63,85,9,45,10,20,46,82,48,13,15,69,33,34,16,50,37,77,78,79,80,54,81,11,55,22,84,52],op_jobid:35,keypair:43,januari:[16,49],hijack:34,confid:32,compil:[23,24,5,67,15,55,33,34],failov:[7,2,41,43,58,64,66,68,69,48,15,34,35,50,17,36,5,37,79,80,55,83,84],domain:[36,30,57,23,37,3,77,80,43,58,81,55,34,7,61,50,11,64],replai:[2,79],c_mine:79,citat:17,agil:69,replac:[23,2,3,41,43,58,1,61,29,8,64,45,20,12,82,32,13,69,33,34,16,17,36,18,37,77,78,79,80,19,11,55,22,84,85,7],individu:[39,23,3,4,24,58,63,66,68,69,48,32,34,17,37,77,78,79,80,54,22,84],continu:[39,3,43,58,6,61,8,63,9,68,20,48,13,33,16,17,5,37,77,79,80,11,22,84],ensur:[56,0,23,3,4,58,57,7,61,30,8,63,64,66,68,20,12,31,15,34,18,37,77,78,79,80,53,69,21,84,85],target_nod:[37,2,58,34],rt_tab:18,wrap:[5,58,18,79],request_queu:16,oikonomopoulo:34,backport:[34,78],significantli:[39,3,48,77,42,79,0,34,69],network_tag:2,resourc:[0,1,40,41,5,58,57,23,61,28,29,85,68,10,20,47,48,14,69,33,34,16,18,37,77,79,80,11,55,38,83,84],happen:[56,0,23,40,41,43,58,57,61,28,30,8,85,69,12,34,16,50,17,37,77,78,79,80,11,22,84],cmdlib:[36,8,63,3,32,65,80,27],os_vers:78,baselin:32,subnet:[37,58,18],shown:[56,0,77,42,78,43,67,82,38,83,80,61],accomplish:[23,37,77,79,5,55],referenc:[30,85,77,42,34,68,50],"3rd":61,space:[0,23,2,5,58,27,1,28,29,85,10,69,82,48,34,16,18,71,72,37,77,78,79,80,11,55,38,21],hypervisor_nam:28,profil:24,mess:59,foostor:36,rational:[56,48,80,15,38,16,69],internet:55,sweet:80,correct:[62,8,37,61,64,24,77,78,5,39,69,55,34,80,57,84,11],cnode:58,necessarilli:79,timeread:16,z0ju:37,migrat:[56,39,7,2,41,43,58,61,28,30,8,64,67,69,12,34,50,17,36,37,77,78,79,80,11,55,83,84],contain:[56,0,23,2,3,85,24,42,5,58,7,61,28,30,8,63,48,65,9,45,68,11,12,46,82,32,13,33,34,16,35,17,36,18,37,77,78,79,80,81,69,55,21,22,52],libpcre3:67,cpu_spe:14,compulsori:[21,28,80],dataloss:79,mime:61,theori:[8,80],debootstrap:[56,0,82,37,2,79,43,55],oplog:58,org:[37,51,67,55,34,61,50],"byte":[16,61,78],expandnam:[65,23,80],card:[37,28,80],care:[0,23,3,41,42,5,59,61,64,68,40,20,48,33,17,36,37,77,78,79,80,55,38,84],ganeti_instance_disk0_mod:2,device_add:30,wai:[56,0,7,2,3,4,24,42,39,69,59,6,23,60,61,8,63,64,67,9,68,10,20,85,46,41,48,14,15,49,33,34,16,57,50,17,36,37,77,78,79,80,54,11,55,38,22,84,52],network_gatewai:[2,18],badli:[40,41,69],waiter:79,frequenc:34,op2:35,suid:61,sysconfdir:[63,2,24,67,55,34],ssl_ctx_load_verify_loc:81,refus:[43,37,3,78,79,80,38,69,49,6,61,11],recov:[56,0,37,80,43,59,22,84],libcurl4:67,vmlinuz:[43,55],waitforjobchang:[78,80],place:[56,0,7,3,4,24,43,61,30,85,69,12,31,32,15,33,34,16,18,37,77,78,19,82],propos:[56,0,23,3,85,41,42,39,69,7,60,61,44,62,30,63,64,66,9,45,68,10,40,20,12,31,32,13,14,15,49,33,16,35,57,1,17,36,18,54,77,78,79,80,53,11,83,84,52],get_pubkei:44,standbi:10,router:[37,43],principl:[34,58,4],think:[54,3,80,69,55,84,11],frequent:[57,77,78,79,34,50],op_network_connect:2,oper:[56,0,23,2,3,4,41,42,5,58,39,59,7,60,61,28,48,65,45,68,40,11,46,82,31,32,13,15,49,33,34,16,35,57,17,36,18,43,37,77,78,79,80,53,51,69,55,21,22,84,64],offend:78,suspend:[37,34,84],reimplement:[34,23],redhat:[43,68],carri:[12,56,8,63,3,66,57,82,34,20],onc:[56,0,23,3,42,43,58,46,61,8,63,9,45,68,10,40,12,32,48,13,33,34,16,17,5,37,77,78,79,80,54,55,84],arrai:[16,58,82],ssconf_cluster_tag:41,yourself:2,reopen:34,suspens:[37,84],fast:[0,3,78,79,16,83,69],symmetri:34,rebal:[62,34],oppos:[56,37,48,78,79,80,51,34,16,69],open:[56,23,43,58,27,61,44,30,64,66,28,12,34,16,5,54,74,77,79,80,38,21],lexicograph:2,size:[0,2,3,43,58,39,61,28,62,30,8,64,11,46,13,15,33,34,16,50,36,18,72,37,77,78,79,80,69,82,21,83],bsd:34,avail:[56,0,23,40,85,41,43,58,57,69,61,62,30,8,64,66,67,68,10,20,46,47,82,48,13,14,49,33,34,16,83,17,36,18,37,77,78,79,80,54,81,11,55,38,21,22,84,52],given:[56,0,23,2,4,41,42,5,58,7,61,28,8,63,65,66,9,45,68,20,12,48,32,15,34,16,36,18,37,77,78,79,80,69,82,38,21,83,84],breviti:43,silent:[37,34],convent:[2,64],width:5,kvm_extra:34,libceph:[67,55],netparam:[37,18,79],download:[37,56,61,55,13],silenc:34,necessarili:[12,36,65,77,38,69],draft:[29,1],averag:[34,16,0,11],white:5,conveni:[23,32,79,59,21,20],includ:[56,0,23,3,24,5,58,57,61,28,29,30,63,48,67,9,73,68,10,40,12,46,47,82,41,32,13,15,49,33,34,16,85,36,43,37,77,78,79,80,53,51,81,55,38,21,22,84,64],forthcom:23,speedunit:16,opstartupinst:5,cope:57,copi:[56,23,2,3,43,61,8,64,9,67,19,46,48,34,37,78,79,80,81,55,84,52],gch6:24,specifi:[56,57,2,4,42,43,58,6,80,61,28,85,66,9,10,20,12,47,82,31,32,49,33,34,16,36,18,37,77,78,79,67,81,11,55,22],blacklist:[34,58,78],netmask:[56,18,2,58,55,34],"short":[56,43,37,32,77,78,80,5,58,55,34,83],librari:[30,18,43,65,63,24,42,13,5,58,15,67,77,55,49,34,16,80,61,83],mostli:[77,64,24,79,5,69,34,61,28],date:[56,8,23,37,77,43,34,16],floppi:[56,34],custom_hvparam:58,holder:[3,79],than:[56,0,23,3,4,41,42,5,58,57,60,61,44,62,64,66,9,28,45,11,12,48,82,32,14,15,54,49,34,16,50,17,36,43,37,77,78,79,80,53,51,69,55,38,84,85],serv:[0,23,31,43,54,61,48,4,13,14,22,80,10,20],wide:[85,0,23,37,66,3,48,77,58,79,13,9,82,59,34,22,80,61,52,69,17],constantli:[16,79],drbd0:[34,43],e57f:43,cfgupgrade12:[37,34,8],ganeti_clust:2,param2:36,param1:36,optimist:[32,23],addidion:23,nuisanc:82,browser:[58,78],pre:[36,30,8,47,18,31,37,2,48,32,58,34,68,69,17],analysi:16,sai:[2,43,11,5],bootstrap:[56,3,77,67,78,9,55,34,68,61],san:[36,64,48,77,80,55],nicer:[34,80],on_shutdown:57,pro:[3,42],pri:5,argument:[56,36,0,23,43,37,2,32,24,42,78,46,5,58,8,63,82,34,16,80,77],dash:[0,79],deliv:[56,78,79],cpuid:34,recover:[37,84],"20m":79,disk_stat:[58,69],reorgan:23,bitwis:16,burnin:[37,42,43,15,55,34],squar:69,alloc_polici:[77,58,7,82],alias:[34,15,0],destroi:[56,0,23,37,2,77,78,80,43,57,45,61],moreov:[12,56,77,41,78,79,80,38,34,84,69],note:[56,0,1,2,3,24,42,5,58,59,7,61,28,62,29,8,63,64,67,69,12,82,31,41,48,14,33,34,16,50,17,18,43,37,77,78,79,80,54,19,55,38,21,22,84,85],sendfil:61,emphasis:69,curent:79,take:[56,0,7,2,40,4,41,42,5,58,57,25,59,23,61,62,30,63,48,68,10,20,46,82,31,32,14,15,69,33,34,16,83,36,18,43,37,77,78,79,80,19,11,55,38,22,84,85],ganeti_op_cod:2,enabled_hypervisor:[58,82],similiar:82,hslogger:[34,67],noth:[37,77,64,48,41,79,80,5,34,22,85,17],channel:[56,22,0],auto_balanc:28,begin:[0,23,78,13,5,9,80,61,69],sure:[0,3,41,42,43,8,63,64,67,45,81,68,40,11,32,34,16,50,17,37,78,79,80,19,69,55,22,84],pain:[78,80],streamoptim:28,normal:[56,0,7,3,42,5,58,6,62,8,63,40,20,48,14,15,33,35,37,77,78,79,80,11,55,84],track:[30,48,23,3,32,78,79,58,15,69,49,34,57,64,11],compress:[0,64,48,67,79,78,58,81,34,21,80,61,28],clearer:80,paid:65,extglob:34,configwrit:[65,23,18,79],beta:[34,8],pathlen:44,i_pri_up_memori:82,ethernet:[66,55],pair:[56,48,23,63,3,4,77,80,53,55,34,11],ghci:24,unalloc:[43,58,77,78],disk_templ:[37,85,80,58,82,28],allevi:78,renam:[56,36,30,23,37,2,3,77,42,79,78,43,58,15,81,6,34,22,80,60,85],correctli:[12,30,0,23,48,32,24,78,79,80,43,15,55,34,21,16,57,64,11,68],livelock:34,adopt:[37,34,85,69,36],drive:[0,31,37,32,80,51,55,34,38,21,16,69],spill:80,op_instance_change_group:2,getjob:34,"0x93":43,runtim:[12,56,30,39,37,77,78,80,43,58,59,34,69],fillb:80,default_ov:66,destroyx509cert:78,effect:[56,0,43,58,60,30,66,10,69,32,48,34,50,37,77,78,79,80,11,55,20,21,83],salt:[5,78,79],hmac:[77,3,23,78,79],gracefulli:[34,57,63],getjobstatus:34,disk0_dump:28,newer:[8,63,37,4,67,58,57,55,34],"6a430034bf43":58,show:[57,4,43,61,44,8,28,10,69,47,13,34,16,36,5,37,77,78,79,80,55,38],opportunist:[0,23,73,58,34,83],delta:[37,34],serialis:[34,77],f5a277e7:58,unprocess:77,poweroff:[12,57,41],concurr:[23,77,65,80,43,69],permiss:[8,37,3,77,78,80,58,34,22],hack:78,frontend:13,instance_nicn_network_:2,contemporari:17,fifth:34,ground:58,slot:[34,30,18,60,45],master_cap:[37,2,3,77,58,34],singlenotifypipecondit:34,slow:[39,77,64,24,78,80,58,0,34,22,52,69],ratio:[0,51,77,14,58,82,34,69],new_alloc_polici:2,fenc:41,load_certif:44,brigd:80,transact:68,proportion:11,pump:61,iv_nam:34,dict:[30,40,80,5,58,82,34,69],jqueue:[65,78,79,49],blkfront:64,harep:[37,34,63],curlopt_http_content_decod:61,offici:55,op_instance_remov:2,ethtool:34,query2:58,dissimilar:4,variou:[56,29,0,23,63,37,3,4,77,78,79,80,39,55,33,34,16,64,69],diskparam:[34,58,79],pycrypto:34,allocat:[37,58,85,11],ganeti_instance_memori:2,ssl:[37,3,78,79,13,58,19,34,22,80,61,81,44],"128mb":69,op_cluster_post_init:2,ssh:[56,53,0,37,3,78,77,58,79,67,46,43,9,15,19,55,34,22,80,52],lighter:3,primary_nod:[43,79,80],mem_nod:69,requir:[56,0,23,2,3,4,24,42,5,58,39,69,1,80,61,28,62,83,30,8,63,48,66,9,44,45,68,20,12,85,46,82,31,41,32,13,15,54,49,33,34,16,35,57,50,17,36,43,37,77,78,79,67,51,11,55,38,21,22,84,64],attr:[43,16],prime:[0,31],mapper:[37,43,16],wconfd:[34,3,23],output_field:58,lv_name:37,seldom:[37,77],hostil:0,borrow:36,yield:0,irrespect:69,new_nam:[2,58],data_flush:79,new_secondari:[37,2],bugfix:[34,8],"1gib":55,overwrot:34,where:[56,0,7,2,3,24,42,43,57,59,23,60,28,62,30,63,64,67,45,68,40,20,12,82,48,49,34,16,50,85,36,5,37,77,78,79,80,54,69,55,38,83,84,52],vision:20,summari:[38,5,16,58,34],wiki:[37,34,51,13],kernel:[12,51,23,37,64,67,78,43,56,62,69,55,38,34,16,80,68,11],caller:[52,79],shutdown_timeout:[2,58],burst:[66,11,69],bitarrai:[34,67,18],iprout:67,nodee1:82,assumpt:[36,0,48,80,20,35,69],drbd1:43,hierarchi:[77,79,63],drbd3:43,add_reserved_ip:58,drbd7:[8,80],dom0:[16,64,55,69],drbd8:[34,80,55,43],impexpd:34,reiter:33,translat:[56,36,13,55,38,80,50,69],xenserv:28,concern:[12,56,30,18,31,3,34,16,85],instance_tag:[2,34],detect:[12,56,30,0,23,18,63,84,3,4,41,67,80,58,39,26,27,34,68,57,69],kei:[56,3,24,43,58,60,61,44,29,8,85,9,28,81,69,82,33,34,16,18,5,37,77,78,79,80,53,19,55,22],rado:[29,1,31,37,85,55,27,34],tarfil:28,review:[23,80],enumer:3,forecast:85,cpu_mask:[34,50],enough:[0,23,3,43,58,59,7,61,28,63,85,67,10,11,12,48,13,15,49,34,16,50,17,5,37,77,78,79,80,69,55,21,84],"172k":43,between:[56,0,23,3,4,41,42,5,58,39,80,61,28,29,8,63,64,66,9,10,40,20,12,82,48,14,15,54,69,33,34,16,17,36,18,43,37,77,78,79,67,51,81,11,55,38,21,22],timeio:16,getinstancelist:79,across:[29,48,7,18,36,37,84,4,77,78,80,51,58,82,38,34,16,61,60,69],user2:37,spars:[64,0,28],hv_vnc_password_fil:79,cpu_nod:69,parent:[12,34,46,77,66],node_nam:[37,2,58,34],screen:43,disk_overhead:69,style:[30,24,13,5,58,33,34,80,61],popul:[18,3,32,77,79,38,22],drbdn:37,cycl:[37,34,15,54,59],bitset:16,uncondition:68,shortag:0,come:[51,8,37,3,85,24,66,79,78,5,67,69,34,22,80,64,28,17],tue:[34,43],home_nod:37,uuid:[30,7,18,71,72,37,3,77,79,43,58,82,45,38,34,16,60,20],reaction:2,mond:[16,23,68,82],aa104b5:4,img:[64,24,67,55,34,21,28],githash:16,pertain:56,blockdev_prefix:34,quiet:34,lugroupverifydisk:83,ckeck:37,tutori:[29,37,43,67,55,34],present:[56,0,23,2,3,4,42,43,57,28,29,63,64,10,20,12,47,48,15,34,16,17,36,18,5,37,80,69,82,21,22,84],idisk_pool:36,abc123:58,"0020fc1ed55d":55,mani:[56,0,23,4,41,42,5,39,44,67,9,11,82,48,15,33,34,35,50,36,51,77,78,79,80,37,69,55,38,83],starvat:[77,80],threads1:77,among:[23,18,37,82,3,77,78,80,55,34,68,28],netutil:77,threads2:77,cabal:[67,24],threads4:77,threads6:77,color:17,overview:[36,1,37,64,32,80,59,38,28],unittest:[5,15,24,34],inspir:5,disonnect:58,period:[0,23,63,77,79,80,43,6,16,10],dispatch:49,duti:38,exploit:[56,0,3,78,55,16],featur:[56,0,3,5,58,28,29,8,64,67,68,40,20,12,48,31,32,69,33,34,16,36,37,77,78,79,80,81,11,55,22],colon:[34,50,66],memfre:33,exclud:[8,18,78,0,55,59,34,11],cancel:[37,42,80,54,58,34,35,20],hvp:34,poll:[77,79,80,58,34,61],poc:79,damag:[34,79,59],needlessli:[69,17],software_vers:58,ultim:[16,32,80],wrong_stat:58,clust:34,hd0:37,skew:34,size_unit:16,domu:[34,64,55],certifc:3,pci:[34,30],meant:[56,23,37,64,32,42,67],covert:28,subproperty2:5,addit:[56,0,23,2,3,4,24,42,43,39,59,7,60,61,28,62,83,30,8,63,85,66,67,45,68,10,40,20,12,48,82,31,32,13,14,69,33,34,16,50,17,36,18,37,77,78,79,80,53,11,55,21,22],nc2c:43,procedur:[56,36,8,23,18,63,37,2,3,4,80,43,67,15,55,27,34,57,48],pendriv:19,glustervolum:38,indirect:[3,0,20,63],gmtime_adj_notaft:44,cpu_tot:[16,69],thousand:15,resolut:[37,77],suscept:80,oposdiagnos:78,catastroph:34,wake:79,subproperty1:5,vmcapabl:37,src_cluster:78,unreleas:34,instance_hypervisor:[2,79],former:[46,4,77,80,58,34,69],reload_ssh_kei:24,instance_nicn_network_subnet:2,"case":[56,0,23,2,3,4,42,5,58,39,59,7,61,28,30,8,63,64,65,67,44,45,68,40,20,12,48,82,32,13,15,69,33,34,16,35,57,50,85,36,18,43,37,77,78,79,80,54,11,55,21,83,84,52],"char":[5,30],sumbmitmanyjob:34,instance_nicn_bridg:2,"50g":37,mount:[56,36,0,63,37,64,62,43,15,55,38,34,68],plugin:[7,37,64,77,79,16,83,69],keygen:[19,55],trick:3,cast:50,invok:[0,37,85,4,9,59,55,49,6,34,68,50],hdd:58,cannot:[56,62,30,0,18,37,3,45,66,79,80,5,69,55,34,38,21,60,84,28],transfer_id:61,invoc:[56,37,40,81,55,34,68,85],vncpasswd:55,margin:11,ganti:68,anotherdatacollector:16,"07805e6f":37,misbehav:54,suse:28,advantag:[12,36,30,0,55,54,3,4,62,79,13,50,56,15,69,32,68,80,40,28,64],stdout:[36,0,2,78,80,82,59,16,61],ioflag:16,metric:[48,14,34,16,10,69],henc:[37,54,69,11,78],worri:[3,8],destin:[37,3,78,79,43,58,81,34,61,64,11],cluster:[56,73,0,23,2,3,4,41,43,58,39,59,6,60,80,61,28,62,29,8,63,48,66,9,44,81,68,10,40,20,64,85,46,82,31,83,32,13,14,15,54,69,33,34,16,50,17,36,18,37,77,78,79,67,53,51,19,11,55,38,21,22,84,52],luclustersetparam:34,eras:[37,55],ambient:59,ganeti_instance_statu:2,ascii:[34,80],curl:[34,58,61,67],csocket:58,commandlin:3,subscrib:[12,78],source_x509_ca:58,develop:[56,29,0,65,64,24,79,80,5,55,34,16,22,11],prop_mymegaprop:5,author:[29,1,37,2,78,13,9,81,59,61,44],alphabet:[5,65,79,80],kvm_vnc_console_port:80,outils_unittest:34,queryexport:34,same:[56,0,7,2,3,4,24,42,5,58,57,69,6,23,61,28,83,30,8,63,48,65,66,9,44,45,10,20,85,46,82,32,13,14,15,49,33,34,16,50,17,36,18,43,37,77,78,79,80,54,81,11,55,38,22,84,64],binari:[8,18,63,37,61,24,5,16,10],threade5:77,threade4:77,threade3:77,threade2:77,threade1:77,timestamp:[37,77,79,20,49,33,34,16,84,28],autocr:58,pai:[43,77],preparatori:0,eventu:[23,18,63,37,3,32,65,78,79,9,15,55,16,28],config_vers:[5,58],max_memori:69,cert_pem:78,byterang:61,exhaust:[77,78],xen_blkfront:55,finish:[8,23,80,63,37,84,77,42,79,78,5,19,20,82,69,34,16,35,61,11,17],webserv:[58,61,13],asymmetri:80,"8gb":[43,0],nest:69,op_instance_set_param:2,driver:[56,36,0,31,51,64,43,58,55,34,16,69],someon:[43,3],snode:[34,40,58],decompress:[0,61],driven:77,concis:32,luinstanceconsol:77,improv:[0,1,3,4,41,25,26,23,61,62,29,66,10,69,31,48,34,16,77,78,79,80,55,38],extern:[57,23,3,58,39,59,60,61,44,29,64,28,10,20,82,48,15,49,34,16,36,18,37,77,78,79,80,55,21,84],glusterstorag:38,postpon:80,ipaddress:28,eth:56,stdin:[2,0,78,80],appropri:[0,7,5,58,23,28,63,64,68,10,20,31,32,16,50,36,18,37,80,81,11,55,22],cherri:34,inconsist:[37,3,80,43,58,54,34,85,69],macro:50,markup:[5,16],pep8:[34,24],waitoutput:78,without:[56,39,23,3,85,43,58,0,69,59,61,28,30,8,63,48,65,66,45,68,10,20,46,32,15,49,34,16,35,17,36,37,77,78,79,80,81,11,55,38,22,84,64],dhcp:[37,34,56],titl:[33,34],op_instance_replace_disk:[2,7,42],model:[39,7,43,51,1,61,44,29,30,28,69,48,15,34,36,18,54,77,78,79,80,37,22],roughli:[83,80,69,13],zonelist:43,leewai:0,execut:[56,0,7,2,3,4,42,43,58,39,27,23,60,8,59,63,65,9,73,10,20,12,32,15,54,49,33,34,16,35,50,17,36,18,71,72,37,77,78,79,80,51,19,69,55,22,84,52],pkglibdir:34,maintain_node_health:[37,34,58],unarchiv:80,threads3:77,rest:[56,57,37,65,67,79,78,5,58,55,59,34,80,20],bitmap:16,disk0_ivnam:28,unclear:[23,80],kill:[12,37,56,41],op_instance_cr:[2,20],aspect:[51,0,32],gnt_cluster:[34,3],touch:[23,37,79,80,35,84],hvm:[8,51,79,80,58,55,34],flavor:55,speed:[0,37,79,80,14,39,25,55,34,16,83,69],inet6:55,versu:[54,48,77,78,34,11],death:23,temporarili:[30,0,23,37,84,64,34,16,61,17],miscellan:[34,78],stai:[23,37,79,5,33,84],instance_communication_network:58,plugin_specif:16,xenu:[43,8,55],op_node_remov:2,except:[56,2,3,42,43,59,44,30,8,67,5,68,69,48,33,34,17,36,72,54,77,78,79,80,37,22],param:[31,2,85,5,34,50],paral:[8,23],identif:[54,79],priori:69,bigger:[37,3,77,79,80,15,34,61,69],exercis:[37,43,32],guidelin:[5,32],verifysignedx509cert:78,vulner:56,xend:[79,55],disrupt:[33,56],pragma:[5,61],real:[39,4,41,78,50,43,58,15,32,16,80,22,69],around:[56,18,64,43,40,41,42,79,78,5,80,33,34,35,61,38,69,17],use_certif:44,libc:34,lzop:0,xendomain:55,tendenc:5,arriv:[61,78,79],deepseq:67,op_id:[7,42,20],envis:[77,79],mon:[37,34,55,31,43],tie:[20,11],world:[56,39,63,51,59,41,80,5,49],unsign:80,oldnam:77,network_port:[58,80],seg_start_p:16,confd_protocol_vers:79,ssh_host_:19,realtim:50,sendfile2:61,rlib2:[58,49],integ:[77,42,79,80,53,58,82,49,34,16,50,20],shrink:[34,58],benefit:[12,0,23,61,3,77,78,68,10],dnsmasq:56,either:[56,0,23,2,3,43,58,57,6,61,62,29,30,8,63,67,11,12,82,31,48,13,15,34,16,50,17,18,5,37,77,78,79,80,69,55,21,84,52],sdpw:43,oversubscrib:[84,69],output:[0,24,42,43,58,57,59,6,61,28,30,85,47,82,31,32,33,34,16,5,37,77,78,79,80,81,55,38,21,22,52],downward:77,inter:[0,7,2,3,48,77,78,79,80,67,81,34,22,61,44],ovfwrit:28,manag:[0,1,3,59,41,43,58,27,23,28,62,29,8,64,66,67,68,10,69,12,85,32,13,15,34,16,17,36,18,71,72,37,76,77,79,80,73,55,38,84,52],emerg:[34,77,50,59],fulfil:[62,77,23,42,78],"512m":[37,43,82],deduct:69,disk_state_stat:34,grub:[37,21,55],allow_runtime_chang:58,"_secondari":34,fledg:[79,13],udev:[36,30,55],showmap:34,handshak:[58,80],default_hypervisor:58,lvremov:[37,43],level_nodegroup:83,instance_nicn_network_gatewai:2,intact:23,kernelspac:[38,31],blacklisted_o:58,nonzero:16,freez:[3,61],writedata:61,accommod:[43,4],remove_inst:[2,58],qemu:[12,30,1,31,64,24,67,55,34,38,21,28],characteris:69,benefici:0,definit:[56,0,2,3,5,58,61,8,9,68,40,69,46,82,48,33,34,36,37,78,79,80,55],recomput:28,legal:11,opclustersetparam:[34,78],"84g":43,exis:18,exit:[12,63,37,48,77,78,9,81,82,33,34,68,52],ddn:37,os_api_vers:[58,80],network_subnet:[2,18],genmayb:5,einval:34,complic:[12,48,37,3,4,79,80,43,15,61,50],spindle_us:[34,11],refer:[56,2,3,4,42,5,58,60,28,62,29,30,67,45,11,82,48,34,16,36,51,79,80,37,69,55,38,21],extra_pkg:55,felt:80,arrow:5,lenni:[21,55,28,79],quit:[39,23,63,37,85,48,42,79,78,11,52,20],sixth:34,scarc:11,inspect:[37,85,79],retrocompat:[65,79],broker:80,remote_nod:[58,7],unsuccessfulli:79,broken:[0,23,37,3,78,79,53,43,34,22,84,85],streightforward:21,node_rol:31,fulli:[18,63,37,48,41,66,79,13,5,69,55,80,34,78,84,11],regexp:[33,2,37,17],op_backup_export:2,appli:[36,8,31,37,3,48,41,78,80,5,67,15,59,69,45,34,83,84,20],"throw":43,earlier:[8,37,48,13,58,34],"7046452df2cbb530877058712cf17bd4":58,src:[37,34,24,81,55],reservemac:34,opnodequeri:79,coupl:[37,3,9,55,34,40,69],tailor:[85,80],device_model:34,sinst:[38,43,85,55],ndparam:[53,34,58],degre:79,srv:[37,64,80,67,55,21,28],stand:[51,34,16,18,79],act:[36,0,23,37,77,3,4,41,80,46,15,16,22],instance_n:60,zeroing_timeout_fix:58,gv0:38,luck:41,backup:[8,63,37,64,79,58,34,21,28],implictli:14,effici:[0,18,32,80,58,16,61,28],eval:58,seg_start:16,lastli:34,ignore_s:58,nic0_mod:28,contrib:67,surviv:[4,69],seg_siz:16,runrenamescript:78,multinod:77,strip:[34,69],"import":[56,0,1,2,3,42,43,58,61,44,29,8,63,64,67,28,45,69,12,48,13,15,34,16,5,37,74,77,78,79,80,81,55,21,22,84],mark:[56,57,31,63,37,84,85,24,79,80,43,58,33,34,68,10,50,20],remoterol:16,your:[8,37,2,41,67,43,58,19,69,55,34,21,22,28],"0x2359320":58,complianc:34,area:[39,48,77,78,79,80,34,16,35,68],aren:11,internal_error:58,overwrit:[56,77,78,79,5,22],filetype_pem:44,start:[56,0,23,2,24,5,58,39,69,6,61,28,29,30,8,63,64,67,9,68,10,20,12,46,31,41,13,15,49,33,34,16,35,57,50,17,43,37,77,78,79,80,51,83,81,11,55,22,84,85],compliant:23,instance_be_x:2,interfac:[56,23,2,3,4,42,43,58,69,1,61,30,66,73,10,40,20,46,82,32,13,54,49,33,34,16,35,83,36,18,37,77,78,79,80,51,11,55,22,7],clsuter:63,lot:[62,39,18,40,78,33,42,79,67,5,58,6,34,83,80],ipv6:[56,18,37,77,67,43,58,34,61],clusterip:37,submiss:[39,37,77,42,80,54,34,35],ganeti_data_dir:2,old_primari:2,machin:[56,57,3,4,41,43,58,59,61,28,29,30,64,67,9,11,12,46,82,24,15,34,16,50,17,36,51,77,78,79,53,37,81,69,55,38,22],apollon:34,unam:55,orchestr:56,media:[56,61],from:[56,0,23,2,3,4,24,42,5,58,57,26,27,6,7,60,80,61,28,62,83,30,8,59,63,64,65,66,9,44,45,81,68,10,40,11,12,85,48,82,41,32,13,15,54,49,33,34,16,35,50,17,36,18,43,37,75,77,78,79,67,53,51,19,69,55,38,21,22,84,52],serial_no:[58,80,45],tupl:[47,37,85,77,42,58,5,9,79,82,49,33,34,16],powerdown:12,hroller:[34,72,71,17],jun:34,concess:0,jul:34,state_reason:16,tspec:77,htpasswd:80,diffus:77,crontab:[34,63],ganeti_instance_disk0_s:2,cryptograph:3,realli:[12,39,37,79,80,43,59],categor:80,untag:[34,66],faster:[0,77,80,34,16,61,83],example_monitor_host3:55,notat:[5,18],example_monitor_host1:55,node_uuid:[3,58],algorithm:[0,23,37,48,79,80,58,69,82,34,83,10,11,17],possibl:[56,0,23,3,4,24,42,5,58,39,69,59,6,7,61,28,62,30,63,64,65,66,44,68,10,20,12,48,32,13,15,49,33,34,16,35,57,83,17,36,43,37,77,78,79,80,54,19,11,55,38,21,22,84,85],"default":[56,0,3,24,43,58,57,59,6,44,62,83,30,8,63,64,66,67,28,10,69,47,82,32,14,33,34,16,50,18,5,37,77,78,79,80,53,81,55,38,21,22,85],network_link:58,master_netdev:[2,9,58],bucket:48,jailbroken:22,nic2:33,fake_id:79,unusu:56,oblivi:51,vhd:28,embed:84,deadlock:[23,65,80,55,38,35],expect:[56,0,2,4,42,57,59,61,44,68,69,12,82,48,15,33,34,16,50,36,18,37,77,79,80,53,55,38,21],"1023m":85,gone:[37,34,16],nic1:33,findmatch:33,creat:[56,0,23,2,3,4,5,58,39,59,61,28,62,30,8,63,64,65,66,67,44,45,81,68,10,40,20,12,46,82,31,32,15,54,69,34,16,57,83,17,36,18,43,37,77,78,79,80,73,19,11,55,38,21,22,85],certain:[0,7,6,23,44,29,28,68,69,46,13,15,49,34,16,18,37,77,78,80,11,55,22,84],lint:[5,24],cpu_count:69,hotplug:[34,30,67,58,27],watcher:[8,37,84,3,77,78,79,80,51,15,0,55,6,34,46,57,68],strongli:[34,22,64],deem:[84,0,65,78],decreas:[34,77,78,80],shortcut:32,file:[56,0,23,2,3,4,24,42,5,58,57,6,61,28,29,30,8,63,64,65,9,44,45,81,68,40,69,12,85,46,82,31,41,48,13,15,49,34,16,50,17,36,43,37,77,78,79,80,19,55,38,21,22,84,52],hv_state_stat:34,proport:37,intra:[0,3,77,78,80,43,22,61],fill:[30,0,18,80,69,28],incorrect:[12,34,44],again:[56,23,2,3,4,24,43,58,6,8,63,65,66,9,45,68,40,48,33,34,17,5,37,77,78,79,80,82,21,84],beyond:64,googl:[37,5,61,43],op_cluster_destroi:2,extract:[38,34,16,23,45],hybrid:[77,66,69],prepend:[0,78,49],field:[57,18,63,37,40,77,79,80,38,58,28,59,33,34,16,35,20],src_cert:78,compet:[83,11],hvm_nic_typ:80,export_devic:80,d55d:55,writabl:82,you:[2,3,41,43,58,59,6,28,29,8,64,67,81,40,69,24,34,5,37,79,80,19,55,38,21,22],architectur:[30,0,1,63,37,42,79,78,58,80,69],poor:80,collector_nam:[37,16,47],prereq:18,regardless:[68,4],sequenc:[56,0,23,77,4,24,80,5,67,32,34,7,50,69],call_:80,on_poweroff:57,vertex:17,grnet:37,fsck:[2,43],disk_siz:[37,69],briefli:[68,11],networkless:18,reproduc:[39,4,78],"_bridg":80,unless:[56,3,42,5,58,61,28,9,68,69,48,15,34,50,17,37,77,78,81,11,55,21],pool:[1,3,58,62,30,85,69,31,48,34,17,36,18,37,77,78,79,80,11,55,38,22],drbdadmin:69,reduc:[56,0,23,80,37,3,4,77,42,79,13,43,54,38,34,83,78,10,69],deliber:[32,42],set_pubkei:44,escal:[22,78],addsecondari:5,directori:[56,2,4,24,58,6,28,8,64,67,68,12,46,82,15,34,36,18,37,77,78,79,80,81,55,38,21,22,85],mpgsize:62,descript:[29,39,77,80,5,58,15,20,82,34,33,21,46,69,28],tricki:[15,11],vcpu:[51,37,48,77,80,43,58,11,82,69,34,50,28],chown:30,hs2py:34,potenti:[12,36,0,23,55,41,3,4,24,42,58,67,56,69,32,79,34,16,77,48,28],cpp:5,escap:[5,34],level_nod:69,degrad:[34,23,43],gmtime_adj_notbefor:44,unset:[37,34,78],togeth:[56,23,41,5,61,63,69,12,46,32,13,34,16,17,37,77,78,79,80,19,11,38],scm:30,suffici:[5,0,50,55,69],all:[56,0,23,2,3,4,24,42,5,58,39,69,59,6,7,80,61,28,62,29,30,8,63,48,65,66,9,44,45,81,68,10,40,20,12,85,46,47,82,31,41,32,14,15,54,49,33,34,16,35,57,50,17,36,18,43,37,72,77,78,79,67,53,51,83,19,11,55,38,21,22,84,64],dist:[34,8],consider:[12,0,1,63,61,3,32,5,69,23,10,50,20],op_master_failov:2,disk_:80,ssconf_master_candidates_ip:34,forbidden:80,instance_new_nam:2,mnt:[37,64],fragment:28,lacp:66,helper_shutdown_timeout:58,correl:[39,77],abil:[36,3,41,42,78,38,15,55,33,34,22,80,60,68],follow:[56,0,23,2,3,4,24,42,76,5,58,39,69,25,26,27,6,7,60,61,28,62,29,8,59,63,64,65,67,44,81,68,10,20,48,47,82,31,41,32,13,49,33,34,16,57,50,17,36,18,71,43,37,74,75,72,77,78,79,80,73,19,11,55,21,22,84,85],disk:[56,0,23,2,41,42,43,58,39,27,1,60,61,28,29,30,8,63,64,45,11,46,82,31,48,14,15,54,33,34,16,83,17,36,71,72,37,77,78,79,80,73,81,69,55,38,21,22,84,85],children:[77,79],abid:34,batcher:34,"1mb":0,wish:[21,64,55],testnet1:18,rewrot:34,nodea:43,dest_cert:78,script_nam:56,nodeb:43,shall:[6,52,66],tail:43,program:[46,82,37,61,78,58,13,5,9,15,67,55,59,33,34,10,20],optimis:[34,80],those:[56,0,23,3,5,58,39,59,7,60,85,10,69,32,34,16,57,17,37,77,78,79,80,11,55,38,21,83,84],solicit:37,queri:[39,23,3,27,42,58,57,59,60,85,69,47,15,54,33,34,16,11,71,72,37,76,77,79,80,73,20,22],megabyt:[33,61,80],neglig:61,introduc:[56,0,23,40,4,42,61,28,30,85,10,11,12,46,31,48,15,49,33,34,35,36,18,37,77,78,79,80,54,69],getrsakeypath:78,queryfield:[33,34],liter:[5,47],straightforward:[24,77,78,80,11,61,69],determinist:77,fals:[37,2,3,78,79,80,43,58,82,59,33,34,83,35,44],opinstancequerydata:78,ganeti_instance_be_auto_bal:2,offlin:[57,2,3,41,42,43,58,59,63,10,69,31,48,33,34,16,17,37,79,80,82,83,84],util:[29,0,55,37,77,64,4,24,78,67,32,33,34,16,61,68],print:[46,24,78,79,43,58,33,34,16,44],rapi_us:[34,3,77,79],candid:[0,23,3,41,43,58,59,44,9,68,48,13,34,16,37,77,79,80,54,82,22,84],worst:[48,78],fall:[29,68,80,10,34],veri:[0,23,3,4,41,5,59,61,28,64,66,69,24,48,13,15,33,34,83,37,77,78,80,11,82,21,22],rebuild:[34,19],strang:[56,69],enviroment:36,bridge_stp:55,ssl_client_s_dn_cn:13,mixedcas:5,brctl:55,hyp:28,emul:[51,34,64,41],sane:59,stderr:[2,36,59,80,34],node1:[46,82,43,37,2,79,38,58,44,55,59,33,21,28],node3:[37,2,43,58,82,59,33],parallelis:80,node5:[2,59],mcl_current:79,enterpris:28,altogeth:17,dfree:[38,43,58,85,55],tag1:[58,28],infinitesim:69,tag3:[58,28],drbd:[0,23,2,43,58,39,51,8,85,67,10,69,82,48,34,16,83,17,36,73,77,78,79,80,37,11,55,22,84],qmp:[12,34],eas:[36,79,80,55,34,16],sync:[36,37,40,77,78,79,80,43,59,34,16,17],past:63,syslog:34,zero:[36,0,1,2,64,5,58,81,82,49,33,34,16,61,83,69],pressur:11,design:[56,0,23,3,4,41,42,58,39,69,25,26,27,6,1,60,61,28,62,29,30,63,64,65,66,9,44,45,81,68,10,40,20,12,85,46,31,32,13,15,54,49,33,34,16,35,57,50,17,36,18,71,72,37,74,75,76,77,78,79,80,53,73,59,11,82,38,21,83,84,52,7],pass:[56,0,23,2,24,43,58,59,61,30,85,67,9,68,11,82,13,49,33,34,16,35,83,36,18,5,37,77,78,79,80,81,69,55,22,84,52],extp_param1:36,extp_param2:36,suboptim:[34,69],nbd:36,harden:22,deleg:[37,48,23,69,13],start_node_daemon:9,default_ialloc:58,soundhw:34,"11de":79,sun:37,sum:[48,77,5,28,34,16,69],advanc:[37,80,67,55,34,69],abl:[56,57,7,3,41,43,59,23,60,62,30,63,65,66,20,12,46,13,15,69,33,34,16,83,17,36,18,37,77,78,79,80,54,11,55,22,84],overload:[34,69],operatingsystem:28,ssconf_node_secondary_ip:34,pnode:[34,40,58],abbrevi:37,dhcpv6:37,intersect:23,sdc1:55,consecut:[79,4,50,28],deepli:56,method:[56,23,5,58,61,62,85,66,69,32,31,48,13,15,33,34,16,50,36,18,37,77,78,79,80,51,55,22],contrast:[37,34,80],movement:77,millisecond:16,hasn:[2,23,77],fping:[34,67,43],hash:[3,78,58,38,34,16,44],"5gb":64,unmodifi:33,exit_notmast:68,nic_vlan:66,lack:[30,18,54,40,79,80,28,34,83,84,69],modular:[12,80],"750gb":43,middl:79,morfeo:28,excess:0,ver:55,standard:[56,2,42,43,58,61,28,29,63,9,67,10,69,32,48,34,16,5,37,78,80,53,11],modifi:[56,0,23,2,3,24,43,58,39,59,60,69,62,29,30,8,63,85,65,66,81,68,20,46,31,41,48,14,15,49,34,57,50,17,36,18,37,77,78,79,80,53,19,11,55,38,22],valu:[56,0,2,42,5,58,57,59,60,28,62,8,85,66,9,45,81,20,12,46,47,82,31,32,14,69,33,34,16,35,18,43,37,77,78,79,80,53,51,19,11,55,38,21],evaltotru:58,search:[29,37,24,79,82,34,17],tweakabl:79,ahead:[37,77,79,69,63],nth:80,src_cert_fil:78,reason:[56,0,23,3,85,41,42,5,58,39,69,59,6,7,61,28,29,30,8,48,9,10,20,12,46,32,13,15,49,33,34,16,35,17,36,71,72,37,77,79,80,54,19,11,55,38,21,52],oper_vcpu:58,mac:[56,30,82,37,2,80,43,58,69,55,34,28],prior:[34,0,79],amount:[0,23,2,58,39,59,61,28,85,10,69,48,14,33,34,16,51,77,78,79,80,37,11,55,21,83],"9mb":0,isn:[37,34,79],redistributeconfig:79,reserved_lv:[34,58,69],pick:[34,85,80],codebas:[37,34,23,13],introductori:55,versioninfo:16,magnitud:80,believ:79,via:[56,0,23,2,3,41,43,58,61,62,8,64,67,9,73,68,10,11,46,82,24,48,13,34,50,17,36,18,5,37,77,78,79,80,51,81,69,55,22,52],shorthand:83,beparam:[37,34,58,79,80],root_path:[37,34,8,43],intermedi:[15,77,44,63],transit:[12,23,63,37,84,85,77,42,79,80,34,61,69],instance_os_typ:2,network_gateway6:2,readili:57,cafil:78,filenam:[37,82,34,22,61,52,28],inappropri:38,identify_default:58,famili:[34,43],heurist:[85,10,55],suddenli:54,decrement:16,establish:[56,48,3,32,77,80,43,34],enabled_user_shutdown:58,select:[36,48,18,37,82,4,77,78,79,13,43,58,55,33,34,16,80,28,17],cluster_repair_disk_s:37,matchobject:33,hexadecim:[43,50],proceed:[37,43,80,78,17],insserv:34,distinct:[36,20],rt_tabl:18,ctrl:[12,34],tackl:0,two:[56,0,23,2,3,4,42,5,58,39,59,6,7,60,61,28,29,8,63,85,45,68,40,69,12,48,82,32,15,49,33,34,16,35,50,17,36,18,43,37,77,78,79,80,54,19,55,38,21,83,84],coverag:[34,32,24,69],ganeti_pub_kei:3,zfp91c:43,ctotal:58,autonom:[16,79],taken:[56,0,23,31,3,78,80,14,39,69,11,34,21,57,52,20,17],initrd_path:[37,43,8,80],minor:[36,8,63,37,4,79,80,43,0,34,16,61],network_mac_prefix:2,reachabl:[37,34,3,59,56],flaw:[4,0],desir:[36,0,7,18,37,3,4,77,80,43,58,57,69,34,33,23,35,61,28,17],flap:[41,16,10],canon:5,hundr:[77,15,38,34,61,69],iallocator_script:37,problem:[56,0,3,41,43,58,59,61,28,30,8,63,85,45,40,11,12,48,32,15,34,16,5,37,77,79,80,54,69,55,21],customis:[29,37,2,24,79,15,34,69],runtime_memori:2,adapt:[0,3,32,24,48,79,58,34,16,40,69,85],flag:[68,37,2,3,85,24,77,78,43,11,82,59,34,16,80,64,20,17],sigkil:12,uncov:34,broke:34,particular:[12,56,23,37,79,3,41,28,80,5,67,84,20,38,34,16,10,22,11],op_group_set_param:[2,18],build_chroot:34,nic_count:[69,28,80],offload:34,cach:[34,16,77,61,64],sinst_list:58,none:[48,18,43,37,2,4,41,66,79,78,5,58,77,59,33,34,22,80,83,69,17],endpoint:[34,81],nodegroup1:[37,18],pycurl:[34,67,61,13],valuabl:3,nodegroup2:18,outlin:[68,79],dev:[56,8,31,37,2,64,24,78,79,43,67,55,61],histori:[34,85,24,80],blockdev:[34,58,85,28],remain:[12,30,0,23,54,63,37,64,48,78,79,80,43,15,69,59,38,34,68,61,20],paragraph:[37,77,16,48,47],opennod:28,edit:[8,37,19,55,38,34],caveat:[63,80,69,59],learn:55,abandon:79,deb:37,dec:34,obtain:[0,23,18,63,37,3,77,80,55,34,52,17],switch1:66,def:5,transcend:[51,11],omit:[18,37,32,80,59,34,28],prompt:59,dual:[2,80,61,77,34],greaterthanzero:58,scan:[55,80],challeng:4,ddump:24,printtestcas:5,templat:[39,1,5,58,0,27,28,29,8,64,68,69,46,82,31,34,17,36,71,72,37,77,80,81,11,55,38,21,85],dts_net_mirror:36,tabular:37,loadstat:68,minimum:[18,43,37,77,78,5,44,55,69,34,10,50,11],resync:[34,80,69,43],explor:0,luxid:[56,23,54,34,22,68],bandwith:34,action:[12,36,30,0,23,31,63,37,2,3,32,77,9,57,28,59,6,34,16,60,20],routing_table_200:18,low:[39,54,32,77,80,55,34,22,10],huge:[56,29,61,62,1],mfree:[62,43,85,38,58,55,33],"128m":43,interconnect:38,newlin:[33,5,79],secur:[56,0,1,3,25,26,28,29,30,8,85,81,68,20,34,54,77,78,79,80,19,55,38,22],programmat:[33,29,84],export_do_shutdown:2,mcl_futur:79,snippet:55,neede:23,reject:[34,68,69,20],dest_clust:78,strong:78,simpl:[23,4,24,42,43,61,44,30,8,64,67,28,68,11,48,33,34,16,17,5,37,77,78,79,80,69,82,38],nsupdat:37,plain_cert:78,snapshot:[39,37,64,80,54,34,61],regener:[37,3,19],job_status_waitlock:42,threat:44,op_network_disconnect:2,overcommit:11,our:[56,23,18,77,3,32,41,78,79,80,43,15,69,34,68,10,85,28],vlan:[34,58,0,66,43],variant:[85,78,58,5,9,79,34],sneak:40,reflect:[36,30,18,63,73,3,42,34,16],virtualsystemcollect:28,applicationpend:16,buffer:[56,64,78,79,13,69],numa:11,offset:[5,16,61],heartbeat:41,scm_right:30,associ:[56,23,37,2,48,24,42,79,80,51,11,33,34,16,61,77,20],nonetheless:79,set_serial_numb:44,stabil:[4,41,80],circumst:[34,23,69],github:50,zero_free_spac:58,ani:[56,0,23,2,3,4,24,42,5,58,39,69,59,6,7,61,28,62,83,8,63,64,65,45,68,10,40,20,12,47,31,41,48,13,15,54,49,33,34,16,35,57,50,17,36,18,43,37,77,78,79,80,51,81,11,55,38,21,22,84,85],onto:56,davem:43,proto:[16,23],ambigu:[33,60],caus:[0,23,2,43,58,61,28,8,64,67,20,12,48,33,34,16,50,37,77,79,80,82,38,21,83,84,85],callback:[35,80,13],opinstancemultialloc:83,call_upload_fil:65,rebalanc:[85,10,79],scsi:[34,55,80],basehttpserv:13,egg:[3,85],iscsi:36,logrot:[34,55],group_network_link:[2,18],sysctl:43,blktap2:[34,58],burn:43,check_privatekei:44,soon:[56,39,77,79,80,43,58,81,34,16,84,22,20,68],trade:3,kernel_arg:[37,43],held:[23,77,4,65,42,79,78,43,34,83,80],i386:79,through:[56,0,23,4,41,43,58,57,69,59,83,61,28,29,8,63,85,66,9,10,20,12,47,31,24,15,49,34,16,50,17,36,37,77,78,79,80,73,11,55,38,22,84,52],polymorph:5,reconnect:34,minmax:[58,82],variat:[37,0,79],suffer:[37,78,79,80,34,17],paramet:[56,0,1,2,5,58,39,69,59,23,60,61,28,62,83,8,85,66,9,20,48,47,31,32,14,15,54,49,33,34,16,57,50,36,18,43,37,77,78,79,80,53,51,81,11,55,38,22,52],src_node:[2,58],systemd:[34,68,25],job_id:[58,42,80],undrain:[37,34,63],exact:[23,82,37,48,80,55,33,34,16,61,69],epoch:[33,16,49],instance_reinstal:34,late:[54,80],resort:[38,56,80],wrt:[34,3,23,22,68],html:[61,67,24],rapidli:41,op_init_clust:2,bypass:0,curlopt_writefunct:13,pad:[16,49,13],might:[56,0,23,3,4,24,42,5,58,61,8,63,85,66,67,10,40,20,12,48,82,41,32,13,15,54,49,33,34,16,35,17,36,43,37,77,78,79,80,51,11,55,21,22,84],alter:[0,77,55,80],pae:[34,80],wouldn:[23,84,42,78,34,61],good:[0,3,4,41,43,61,8,67,69,31,32,13,15,16,17,5,37,77,79,80,55,38],"return":[56,39,7,2,40,41,42,5,58,59,6,23,61,30,45,20,47,82,48,33,34,16,35,36,37,77,78,79,80,55,38,84,52],vg_uuid:16,no_instal:[34,58],"22459cf8":43,sentenc:5,pollut:[78,79],chuid:77,configobject:33,oldnod:43,op_cluster_ip_turndown:2,somebodi:16,instance_primari:2,foo_bar_baz:5,shred:19,detach:[36,45,43],"_backend_typ":80,complain:[37,34,59,43],export_nod:2,gethostbynam:77,turndown:2,document:[56,0,23,2,3,4,24,42,76,5,58,39,69,25,26,27,6,1,60,61,28,62,29,30,8,63,64,65,66,45,81,68,10,20,12,46,82,31,41,32,13,14,15,70,49,34,16,35,57,50,17,36,18,71,43,37,74,75,72,77,78,79,80,53,73,59,11,55,38,22,84,7],ignore_offline_nod:58,troubleshoot:[37,43,80],sole:28,instruct:[29,46,37,64,48,67,8,55,34],authent:[56,31,78,79,80,43,58,34,22,61],tear:80,token:[3,22],osparams_secret:58,libghc:[67,24],undertak:0,should_run:82,ceas:23,found:[0,4,24,42,43,58,57,63,64,67,9,69,82,13,33,34,37,77,78,80,81,55,22,84,85],intervent:[37,16,8,59],add_mod:2,ifi:55,pcre:67,subsystem:[16,41,69],week:[37,44],instancesetparam:34,prescrib:16,weight:[14,16,48],a5ad:82,blank:5,lugroupassignnod:34,idea:[41,85,77,79,38,16,35,84],group_list:58,slowdown:64,heavi:[34,64,23,78,69],initrd:[37,34,8,55],bangpattern:5,connect:[56,0,23,2,3,43,58,80,61,66,9,45,68,12,82,48,54,34,16,50,36,18,37,77,78,79,67,51,81,55,38,22,52],stabl:[56,8,23,64,78,79,80,34,16,68],http:[56,29,47,23,55,31,37,78,67,13,5,58,51,50,34,1,16,80,61,22],thing:[30,23,37,48,24,79,80,5,58,15,55,68,69],todo:[85,48,77],orient:[29,77,43],hostnam:[56,46,18,3,79,15,55,38,34],archivejob:[78,80],voidspac:34,safeti:[56,8,23,63,37,64,80,34],oper_ram:58,syntacti:34,lambda:58,publish:79,footnot:55,recoomend:8,race:[12,34,23,84,80],health:[34,16,84,58,59],healti:16,req_submit_many_job:54,utf8:67,sparingli:[5,32],occurr:[11,80],file_nam:80,foreground:[12,68],qualifi:[5,55,63],assist:[56,4,79],sheepdog:77,proxi:[37,4,61,13],gluster_storage_dir:58,upon:[12,83,30,0,18,37,40,4,41,42,80,51,34,16,61,60,20],pcpu:[34,77],team:64,src_path:[2,58],gntconfd:77,pub:[19,79],std_ispec:69,quick:[29,82,37,24,80,5,67,15,55,34],ovfconvert:[21,67,28,34],source_cert_fil:78,rmem:69,dire:0,ask:[8,23,37,85,78,79,59,38,34],opinstancebulkadd:40,workstat:0,bash:[34,61,24,55],basi:[56,37,77,66,5,34],instance_uuid:58,luclusterverifygroup:[34,83],pyyaml:24,bring:[8,63,37,3,79,80,54,69,59,38,34,20],thread:[12,83,23,54,77,65,78,79,80,19,34,16,35,50],unhandl:43,exponenti:61,perhap:[56,0,78,17],csr:[61,44],unknownfield:33,set_issu:44,relocate_from:82,instanceshutdown:57,fallen:10,ganeti_instance_os_typ:2,name2:24,feed:77,pleas:[56,62,8,43,37,41,24,79,5,67,19,69,55,34,6,21,16,28],major:[63,37,4,77,42,79,78,43,80,34,16,35,68],notifi:[30,0,77,78,79,35,61],obviou:[5,16,41,85,11],lvm2:67,diskless:[46,37,85,80,58,15,34,21,28],exchang:[56,37,77,78,43,81,22],certfic:3,misc:34,number:[56,0,23,2,3,4,24,5,58,39,61,28,8,63,64,44,45,68,10,11,46,47,82,48,13,14,49,33,34,16,35,50,17,36,18,43,37,77,78,79,80,53,54,81,69,55,38,21,83],sptotal:58,mcpu:[34,83,32,65,78],"3de":13,x509v3:44,done:[0,23,2,3,4,41,43,58,57,61,28,83,8,63,64,65,66,9,68,40,11,24,33,34,16,50,17,36,37,77,78,79,80,54,19,55,38,21,22,52],unhealthi:48,preferred_lft:55,"262e":58,horribl:5,python2:[34,43],miss:[12,8,23,37,2,41,78,79,80,43,69,33,34,68,84,50,28],"40mb":0,obligatori:0,differ:[56,0,23,2,3,4,24,42,5,58,61,28,83,64,66,67,45,68,10,20,12,82,31,41,48,14,15,69,34,16,50,17,36,18,43,37,77,78,79,80,54,11,55,38,21,22,85],master_netmask:[2,58],guest:[56,37,64,55,34,11],pandoc:[34,24],recompil:55,interact:[56,48,23,37,41,85,4,24,77,78,54,69,33,34,16,80,44],construct:[32,4,78,80,5,69],all_disks_don:78,faq:56,zealou:34,expand:[79,13,55,33,34,16,80,69],accept:[56,57,7,42,43,58,60,61,44,85,28,68,69,48,34,83,36,5,37,77,78,79,80,20,82,21,22,84],mlock:[34,52],gpt:34,gid:34,idisk_provid:36,store:[56,23,3,58,61,44,30,64,66,45,68,69,12,31,33,34,16,36,18,37,77,78,79,80,19,55,38],adher:[34,24],assign:[56,30,18,31,37,60,77,80,43,58,81,69,82,34,38,21,16,50,11],option:[56,0,23,2,3,24,42,5,58,59,6,60,80,61,28,30,8,63,64,66,9,68,10,11,12,46,82,31,13,15,33,34,16,50,17,36,18,43,37,77,78,79,67,54,81,69,55,21,83,85],para:[51,56],blindli:80,compens:[54,69],instance2:[37,2,64,43,82,69],illeg:11,instance1:[46,37,64,78,43,82,69],dt_:34,instance7:43,instance4:[43,82],tasklet:[79,80],attract:10,fred:58,reinstal:[12,56,39,37,2,24,78,79,43,58,34,84],anoth:[56,23,2,3,4,24,42,43,58,59,7,60,61,30,65,11,12,46,48,13,15,33,34,16,35,36,18,5,37,77,78,79,80,54,69,21,83,84],kind:[36,23,37,2,64,42,79,80,58,55,33,47,16,69],scheme:[38,56,58,79],contrari:30,whenev:[8,23,3,77,80,5,84,11],remot:[23,2,42,58,51,61,29,64,20,48,13,15,49,34,16,36,54,77,78,80,37,22,52],gotten:[35,77],remov:[0,23,2,3,4,24,42,43,58,39,6,60,61,28,30,8,63,64,66,9,45,10,20,12,31,41,48,15,34,50,36,18,37,77,78,79,80,53,54,19,69,55,22,84,85],pictur:[61,1],riski:[8,84],onam:37,ca_kei:44,perfind:16,stp:55,str:[36,79],consumpt:[34,77,78,69],stale:[34,23,79,80],toward:[30,23,37,3,79,15,49,34,69],grei:38,netlink:12,opstatu:58,randomli:80,cleaner:[37,23,85,10,34],comput:[46,7,43,37,85,48,77,78,79,80,5,69,82,45,34,16,10,11,17],disk1:33,group2:58,beforehand:[62,65],defect:79,ceph:[29,1,31,36,77,67,55,27,34],packag:[56,8,18,31,63,37,64,24,78,79,43,67,19,69,55,34,21,68,50,28],opupdatenodegroupcach:77,expir:[34,78,79,80],f0af:37,opensusestudio:28,dedic:[23,37,64,78,14,9,55,34,61,11,17],"null":[47,37,2,58,82,16],max_cpu_ratio:77,"2ffc":18,lie:56,unintend:[34,63],relationship:79,lib:[2,3,43,58,44,8,63,85,9,67,81,46,55,15,34,36,37,77,79,80,19,82,38],hunit:24,hspace:[85,77,15,11,34,69],self:[56,0,18,84,3,41,78,80,81,34,22,61,44],violat:[56,34,58,23,11],"10f3e114232d":82,oper_st:[58,57],troublesom:4,undeclar:78,also:[56,0,23,2,3,24,42,5,58,39,59,60,69,28,62,83,8,63,64,65,67,9,45,68,10,40,20,12,46,82,31,41,32,13,15,54,49,33,34,16,35,57,50,17,36,18,43,37,77,78,79,80,51,19,11,55,38,21,22,84,85],build:[56,29,30,82,54,37,4,24,67,5,9,15,70,51,55,34,16,10,22],swapfil:43,localst:16,brace:[5,58],secondary_nod:[37,45],recurs:[37,48],vnc:[34,58,77,79,55],distribut:[56,0,23,3,24,28,8,63,65,67,68,69,31,34,16,36,37,78,79,80,19,55,38,22],autobal:[8,28],op_network_add:[2,18],previou:[56,0,7,3,4,42,5,6,23,8,63,67,69,49,33,34,16,35,17,37,77,79,80,54,19,84],reach:[56,0,23,37,79,80,55,6],react:0,capitalis:5,ifup:[37,34,56,55],prolifer:[54,10,79],plan:[56,0,23,31,37,4,77,78,79,80,38,44,55,69,33,34,16,84,54,28],disk_tot:69,nothing:0,alpha:40,addr:55,chkconfig:67,hereaft:[37,23],"_timestamp":45,quorum:[41,80],bug:[56,31,37,84,3,32,78,43,19,54,55,59,34,22,61,85],instance3:[43,82],op_group_evacu:2,clear:[0,23,37,2,48,32,77,80,5,58,15,69,34,84,11],opparam:34,cover:[30,39,7,85,77,78,79,80,69],equalorgreaterthanzero:58,destruct:[37,34,57,84],"2nd":34,ext:[37,34,58,85,36],part:[56,39,23,2,3,4,24,42,58,69,59,60,61,28,29,30,8,85,67,9,44,45,20,48,31,32,49,33,34,16,35,72,37,77,78,79,80,51,11,82,38,22,84],quickcheck2:24,clean:[0,23,5,77,24,79,80,43,58,57,55,34],pars:[30,37,78,79,13,54,58,82,34,80,61,28],x86_32:37,usual:[56,57,2,43,58,46,61,28,8,67,69,12,32,48,34,18,5,51,79,80,37,81,55],microsoft:28,respect:[85,31,63,37,2,3,48,77,61,66,59,55,45,34,16,78,10,68,69,80],foo555:58,sector:[16,0,69],test1:[37,18],wsgi:13,sample_provider2:36,canceljob:[78,80],sample_provider1:36,carefulli:[56,55,80],finer:34,consult:[77,82,79],comand:63,progressunit:16,session:[34,79],particularli:[56,29,3,0,23],checksum:[34,61,28],miller:43,ganeti_instance_nic0_mac:2,jobqueue_upd:80,reus:[0,23,64,80,43,34,16,61,69,17],fine:[23,37,77,79,80,43,15,20,55,69,61,28],find:[62,30,8,37,48,78,79,80,43,59,82,49,6,34,16,10,20],impact:[56,23,54,48,77,80,43,82,34,16,83,69],access:[56,0,23,3,42,43,58,61,44,29,30,64,66,28,45,32,47,82,31,48,15,34,16,36,37,77,78,79,80,51,81,55,38,22],firewal:[56,22,80],libnss:34,pretti:[21,61,24],bfd:69,merger:[6,34,79],writer:4,solut:[56,0,23,4,41,42,43,7,61,9,10,69,48,15,33,34,35,1,36,77,78,79,80,11,82,38,84,52],"0x2355f50":58,notifystart:78,couldn:[37,43,83,7],queu:[39,77,42,80,34,16,20],home:[37,2,78,13,34,61],factor:[39,23,48,42,0,61,69],curlopt_proxi:61,disksiz:80,represent:[18,63,79,80,45,33,16],std:[34,58,82],remedi:[0,80],key_nam:78,hit:[62,77],unus:[62,0,37,79,80,43,49,21,34,68],canonci:34,albeit:0,no_rememb:[34,58],"__file__":43,express:[37,5,69,55,49,33,16,20],cheaper:[34,69],drbd_helper:58,nativ:[34,67,68,55],max_tracked_job:58,simplist:37,tcp:[56,37,78,43,58,81,38,34,61],"3400m":82,network6:[37,58,18],grep:[37,43,8],desiderd:16,fillhv:80,network2:58,evacu:[0,7,37,2,64,48,77,79,80,43,58,82,34,35,10,84,69,17],restart:[56,0,23,2,57,61,8,63,9,68,69,12,46,34,37,77,79,80,51,19,55,22],network1:58,instance_secondari:2,pnode_uuid:58,syslogd:43,irrevers:37,qathreadgroup:34,instancenam:80,umount:37,rfc:[37,78,13,58,34,22,61,44],ssconf_hvparams_:34,common:[56,0,2,3,24,43,28,85,67,68,55,48,34,36,5,37,77,79,80,82,22,84],userspac:[12,31,67,55,38,34],srcversion:16,tix:24,wrote:15,commod:36,arp:[37,67],certif:[29,8,1,3,78,79,13,9,81,19,44,34,22,61,52,28],set:[56,0,23,2,3,4,24,5,58,57,59,7,80,61,28,62,83,8,63,64,65,66,9,44,81,10,40,20,46,82,31,32,13,15,69,33,34,16,50,17,36,18,43,37,77,78,79,67,19,11,55,38,21,22,84,85],dump:[56,0,64,4,78,80,55,22,61],taggabl:[77,45],ganeti:[56,73,0,1,2,3,4,24,42,76,5,58,39,69,25,26,27,6,7,60,80,61,28,62,29,23,8,59,63,48,65,66,9,44,45,81,68,10,40,20,64,12,85,46,82,31,41,32,30,13,14,15,54,49,33,34,16,35,57,50,17,36,18,71,43,37,74,75,72,77,78,79,67,53,51,83,19,11,55,38,21,22,84,52],fr5e:37,sensit:[56,55,3,80,82,22],startup:[12,30,0,37,2,4,65,78,79,80,51,58,15,19,55,34,68,69],"256mib":43,ara:22,see:[56,7,3,41,42,5,58,59,23,61,83,30,8,63,85,67,9,81,68,10,20,46,82,24,48,13,54,33,34,16,50,17,36,43,37,77,78,79,80,51,19,11,55,38,22],sed:37,bare:[5,65],disk0_meta:43,arg:[34,80],close:[56,39,23,77,79,80,5],pvm:[8,82,43,37,80,51,58,55,34,28],set_vers:44,simultan:[36,23,48,58,61,17],instance_nicn_network_uuid:2,inconveni:[37,0,49],op_instance_migr:[2,7,42],systemat:4,someth:[43,37,84,85,42,80,5,15,11,55,6,34,16,61,20],equalis:69,topmost:79,stall:[77,80],forcefulli:23,kpartx:[37,43,55],drbd2:43,readsnum:16,subscript:[51,34,78,69],experi:[38,56,0,78,80],ns1:78,altern:[12,36,0,1,37,77,3,24,58,79,80,5,56,15,84,55,38,23,61,50],signatur:[78,79,5,81,35,61],latin:34,syntact:[56,34,16,80],"0x24f6668":58,numer:[32,5,33,34,16,60],osparams_private_clust:58,"9aa6ce92":79,javascript:58,isol:[37,0,55,11],disallow:[37,84,48,20,55,34,61,28],hidden_o:58,lowercas:[37,16,47,78],gibibyt:80,frozenset:[5,36],op_instance_recreate_disk:2,opportunistic_lock:[34,58],ssh_root_kei:9,both:[56,0,23,3,4,24,43,58,57,7,60,28,62,30,8,64,67,9,81,68,11,82,48,13,15,34,16,50,17,36,5,37,77,78,79,80,54,19,69,55,21,84,85],last:[56,0,43,37,49,77,78,79,80,5,58,46,54,55,45,34,16,84,60,17],delimit:[2,80],getnodeinfo:79,hint:[43,0],alon:[18,48,80,59,34,16],event:[12,29,57,64,41,80,34],foreign:37,roman:34,speicif:6,alow:69,disksect:28,forgotten:[37,77,80],welcom:[29,34],bond:66,whole:[23,3,5,59,28,30,66,68,10,69,46,33,34,16,17,36,18,37,77,78,79,80,11,83],physdev:[37,43],load:[30,23,54,37,40,48,24,66,79,78,14,15,69,55,33,34,16,80,64,11],old_instance_nam:80,onward:[8,4],simpli:[56,23,7,63,37,77,3,48,41,78,79,80,43,67,15,81,34,21,61,69],splice:[61,24],figur:11,instanti:79,schedul:[23,37,84,80,43,49,34,16,10,11,17],i_pri_memori:82,uptod:34,header:[8,64,78,80,5,58,34,61],node_group:77,littl:[21,0,50,32,52],shutdown:[0,2,27,43,58,57,26,59,68,10,12,49,34,17,36,37,77,78,79,80,54,55,38],linux:[62,31,37,41,24,78,43,67,73,55,69,38,34,16,22,11,68],mistak:[37,34,80],bridg:[56,30,18,82,37,2,66,79,67,43,58,15,11,55,34,21,80,28],simpler:[12,8,54,4,42,79,78,43,33,80,28],backend:[39,23,43,58,61,28,30,63,64,45,68,69,13,15,49,34,16,36,18,37,79,80,51,81,21,84,85],mynode1:85,mynode3:85,unsuccess:[7,79],"30mb":34,compris:[37,48,23],help:[56,8,82,37,41,3,24,66,79,78,54,15,0,77,55,59,34,22,17],overlook:80,devic:[56,0,2,43,58,60,61,30,8,64,66,68,69,31,34,16,36,71,72,37,78,79,80,51,55,38,22,84,85],due:[56,0,23,3,4,24,42,43,58,61,28,30,63,67,40,11,46,31,15,34,83,37,77,78,79,80,54,69,55,38,22,84,52],empti:[0,7,2,42,5,58,23,30,85,12,32,55,48,49,33,34,16,37,77,78,79,80,82,84],x509_signkey_fil:78,runner:32,secret:[56,37,3,77,78,80,58,81,34,22,61],unlock:[65,79,80],jointli:56,op3:35,brick:38,instance_disk_templ:2,devis:80,luinstanceactivatedisk:77,strategi:[12,29,23,37,38,1],modern:0,autogen:24,setopt:61,fire:[20,80],delet:[36,30,0,23,18,3,77,66,79,80,58,11,45,34,16,64,20],imag:[56,36,0,37,2,64,80,43,58,55,21,34,22,61,28],shuffl:43,epytext:5,gap:34,coordin:[34,20,80],"44d3":58,corner:[34,40],func:5,demand:[54,77,80],ganeti_instance_primari:2,bitfield:18,opbackupprepar:61,cfgshell:37,dom0_vcpus_pin:55,e61fbc97:37,whilt:55,conception:20,look:[42,43,58,6,28,63,85,69,12,48,34,16,36,5,54,78,79,80,19,82,21,84],evac_mod:82,straight:[58,50,69],erron:[22,80],pessimist:23,durat:[83,77,80],"while":[56,0,7,2,3,4,24,42,43,58,39,23,60,61,44,8,63,65,10,20,46,82,31,48,13,54,69,33,34,16,35,36,18,37,77,78,79,80,51,11,55,38,84],runtask:78,unifi:[38,34,0,69,80],match:[56,0,7,2,3,24,43,58,59,61,44,9,69,55,33,34,50,37,77,79,80,82,84],behavior:[56,0,63,3,79,67,57,11,38,34,68,10,28,17],error:[0,2,3,4,24,42,5,58,57,59,6,61,28,62,30,8,63,85,9,44,40,11,47,41,32,33,34,16,50,36,18,43,37,77,78,79,80,38,21,83,84,52],greearb:43,loop:[12,64,80,43,58,34],pack:[21,10,28],subsect:56,propag:[0,77,79,80,58,16,68],xvzf:55,guestfwd:56,readd:[37,34,79,31,43],cpu_numb:16,zrci:43,technolog:[85,61,79,13],demon:8,activ:[0,2,41,43,58,57,61,29,8,63,68,69,13,15,34,16,37,77,78,79,80,19,11,22,84],unitari:69,costli:58,demot:[37,3,41,80,43,34],rid:[37,23,80],deamon:[53,34,23],availabilili:55,exclusive_storag:[34,85,11],unmount:38,fedora:[34,67,68],obsolet:[2,3,8,58,80],belong:[0,23,18,37,3,77,66,79,82,45,34,16,47,20],nanosecond:[16,49],node_list:58,shorter:77,read:[56,0,23,2,3,4,41,42,43,58,61,44,63,65,28,68,82,24,48,15,34,16,5,37,78,79,80,54,81,55,38,84],lengthi:69,decod:[9,58,80],nic0_ip:28,curle_range_error:61,custom_diskparam:58,disk0_siz:28,agnost:[30,55],conflict:[23,18,63,37,77,3,65,67,79,58,69,6,34,16,50,20],inotifi:[12,37,67,42],res1:58,concaten:66,ganeti_instance_nic_count:2,max_disk_usag:77,messsag:34,tmem:[51,69],wherea:[12,56,82,37,2,48,79,54,69,55,38,28],inflat:38,alert:[16,50,58],unintention:63,moment:[7,63,24,66,80,43,69,21,16,22,20],ganeti_hooks_path:2,lxc:[34,58,69,11],stripe:[34,69,11,79],libc6:55,impedi:80,robust:[36,0,23,54,80,34],lxm:67,wherev:68,specialis:2,stack:[37,3,77,79,80,61,69],en_u:[34,24],stateless:[37,41,16,23,80],travers:34,sha1:[3,44,28,78],equival:[56,30,18,80,37,24,42,78,34,35,84,17],discourag:34,eleg:61,unanim:0,entri:[30,0,82,37,3,77,79,43,9,46,19,55,59,33,34,16,50,20],spent:[16,0,61],honor:[34,7,77],pickl:34,person:[56,16,84,28,20],reservelv:34,useabl:[78,55],commonli:[77,28],elev:61,miicsdccahmgawibagi:78,iproute2:67,traffic:[56,0,78,43,55,34,22,69],fibrechannel:36,bog:0,nic_ip_pool:18,anybodi:23,weakest:22,explan:[21,7,79,29],key_selector:5,op_instance_remove_mddrbd:2,dts_ext_mirror:36,reduct:[0,1,69],opinstancesetparam:60,reserv:[62,30,23,18,37,61,77,79,80,58,69,55,49,34,10,11],debug_level:80,shape:20,qr_lock:[54,34],administ:78,openstack:[56,28],poller:34,coul:41,priorit:[77,80],move:[0,23,2,3,43,58,39,1,61,28,29,30,67,9,10,11,48,34,16,17,37,75,77,78,79,80,54,81,69,82,38,21,22,84,7],seriou:79,cur:37,received_t:58,disk0:[33,37],scenario:[56,37,77,80,15,55],disk2:33,disk3:33,pubkei:34,removedisk:45,theoret:[77,61,69,13],stabilis:[34,69],revok:3,"0x0000000a":50,realloc:82,snap:[5,67,34],input:[36,0,37,40,32,77,58,79,80,43,9,15,82,34,16,61,48],prealloc_wipe_disk:[34,58],subsequ:[56,79,78,55,80],ld_:34,launchpad:34,bin:[63,37,2,78,79,67,55,59,34,68,50],bio:43,disk_space_tot:82,transpar:[62,18,37,77,80,67,61,11],ipmi:[51,59],subfield:16,distrupt:37,unexpir:78,intuit:5,bia:79,custom_beparam:58,nginx:13,fdsk:69,bit:[77,24,42,79,15,55,34,22,50,20],base:[0,40,4,24,42,5,39,59,61,28,30,64,67,68,10,69,82,31,48,13,15,54,49,34,16,50,85,36,37,78,79,80,51,55,38,22,52],like:[56,0,23,2,4,41,5,58,39,6,61,28,30,63,85,67,44,45,68,10,11,12,48,31,32,13,49,33,34,16,35,17,36,43,37,77,78,79,80,69,55,38,21,22,84],getcommandoutput:34,resolver_error:58,lost:[56,63,37,80,43,15,69,34,44],semi:[69,55],docutil:47,signal:[12,0,23,63,77,78,79,58,34],whitespac:[33,5,58,78],resolv:[31,37,84,77,78,58,55,34,21,61,28],elaps:23,manifest:28,collect:[34,16],fake:[34,46,15,58],api:[29,23,80,37,52,77,42,79,13,5,58,82,49,33,34,16,78,61,22,20,68],diskn:37,flup:[61,13],modprob:55,encount:[0,84,77,21,83,61,52,28],luinstancequeri:34,often:[78,58,16,84,52,28],t30jmn:37,dest_cluster_nam:78,creation:[56,0,23,40,43,58,39,60,28,30,64,66,45,20,12,15,69,34,83,36,18,37,77,78,79,80,73,11,38,22,85],some:[56,0,23,2,40,24,42,5,58,39,69,83,7,61,28,29,30,8,63,85,67,9,44,68,10,20,12,46,48,13,49,33,34,16,35,57,50,17,36,18,43,37,77,78,79,80,54,11,55,38,21,22,84,52],back:[56,3,58,59,61,30,8,63,64,68,11,46,48,13,34,17,36,37,77,78,79,80,84],understood:[37,5,56],unspecifi:34,sampl:[1,13,55,34,68,61,44],remove_uid:58,sight:[77,80],mirror:[36,23,37,2,64,43,55,34,10],server:[56,1,3,43,58,59,23,61,29,64,67,81,47,13,33,34,16,36,18,37,77,78,79,80,53,51,19,55,38,22,52],collectori:16,insepar:80,other_valu:5,scale:[77,78,80,15,55,38],mknod:30,a_funct:5,go_her:16,exec:80,pep:[5,13],per:[0,2,3,24,58,46,61,44,85,66,28,68,69,12,48,47,82,32,15,34,16,35,50,17,36,37,77,78,79,80,55,22],recognit:34,substitut:[23,55],retri:[12,84,77,79,80,58,34,61],larg:[29,18,32,79,13,9,55,34,21,83,35,61],undon:63,recognis:34,buildbi:16,prof:24,executat:63,proc:[12,34,16,8,43],recogniz:57,cgi:[61,13],switchnam:66,gntnode:77,run:[56,0,7,2,3,4,24,42,43,58,39,59,23,61,28,30,8,63,48,65,67,9,81,68,40,20,12,46,82,31,41,32,13,14,15,54,69,34,16,57,50,17,36,37,77,78,79,80,53,51,19,11,55,38,22,84,64],reserved_count:58,pyopenssl:[67,44],instance6:43,unlik:[12,56,63,61,3,78,13,58,60,10],viabl:[12,36,56],sacrif:83,noteworti:28,step:[56,0,23,3,4,43,59,6,61,8,63,66,69,31,48,13,15,49,34,16,17,37,79,80,19,55],squeez:[34,10,79,55],prerequisit:[37,34,8,82,31],meantim:[40,77,42,58,38,34,61,11],wget:[58,61,55],shorten:[29,82,34],subtract:[62,11],crond:43,most:[56,0,23,2,4,24,5,58,59,61,28,29,64,67,9,44,20,12,48,32,13,14,15,69,33,34,16,43,37,77,78,79,80,81,11,55,21],coexist:4,materi:56,mem_siz:69,bgl:[77,83,65,69],plai:38,perk:0,idl:[78,69],versionful:34,ganeti_instance_disk_templ:2,bash_complet:34,block:[56,0,23,43,58,61,30,8,64,20,31,13,54,34,16,35,36,5,51,77,78,79,80,37,11,55,83,85],timewrit:16,instance_nicn_network_subnet6:2,repair:[8,72,37,77,3,48,41,79,80,43,58,59,34,16,84],instance_hv_x:2,primarili:[36,68,0,31],lifetim:[77,80],pythonpath:24,curlopt_maxconnect:61,within:[56,0,7,3,5,39,23,11,12,46,82,48,34,16,35,37,77,78,79,80,81,55,22],drain:[63,37,2,41,77,79,80,43,58,82,59,34,35,10,84,20,17],network_mod:58,import_index:80,gensometh:5,fqdn:[82,34,79,55,43],protocol_vers:58,chang:[56,0,23,2,3,4,24,42,43,58,39,69,59,83,1,60,61,28,62,29,30,8,63,64,66,9,44,45,68,10,40,20,12,85,48,82,31,41,32,13,14,15,54,49,33,34,16,35,57,50,17,36,18,37,77,78,79,80,53,51,81,11,55,38,21,22,84,52,7],artifici:[15,80,13],partof:68,getfd:30,characht:34,occupi:[30,18],inclus:[58,70,79],span:47,mask:[68,50,79],spam:34,declarelock:[65,23,80],adddisk:45,question:[12,56,0,59,83,35,69],submit:[39,23,80,37,40,4,77,42,58,78,43,9,57,54,33,34,83,35,84,75],custom:[56,0,82,37,41,4,24,79,80,53,15,55,45,38,34,61,69],adjac:16,doubt:[5,61],pocoo:34,sslv2:13,forward:[56,23,37,64,13,58,49,16,50,69,85],etch:[58,8,64,79],authorized_kei:[37,3,78,79,19,22],usr:[46,82,63,37,2,24,78,79,43,67,8,55,59,50],jobexecutor:42,properli:[56,30,57,23,63,37,41,78,79,80,43,54,34,28,17],repeatedli:23,lockless:77,osparams_priv:58,writeord:16,criteria:48,admin_st:[34,16,57,58,82],pwd:24,perman:[37,34,60,84,69],link:[56,62,23,18,63,37,67,79,78,43,58,55,34,28],sda:[64,8,80],sdb:[43,64,31,80],atom:[54,16,35,79,80],russian:13,don:[39,2,3,41,42,43,61,8,64,67,11,48,13,15,54,34,16,17,5,51,77,78,79,80,37,19,69,55,38,85],line:[23,2,3,43,58,61,28,30,67,10,20,82,15,49,33,34,16,50,36,5,37,77,78,79,80,19,69,55,21,22,52],mitig:[3,4,22,31],xendomains_sav:55,already_exist:58,info:[36,30,8,18,31,37,85,77,79,80,43,58,39,82,59,34,46,57,50,28],utc:43,"03af5da9dc50":43,utf:[34,24],nic_link:66,consist:[0,7,2,43,58,23,63,64,68,11,12,46,32,15,33,34,16,36,18,5,37,77,78,79,80,54,69,55,38,85],logfil:[79,80],simplif:69,prelud:5,free_memori:82,cim:28,destination_x509_ca:58,growth:37,"_mac":80,reorder:64,redistribut:[8,37,3,48,77,79,58,34],"4bea":43,highlight:[37,4],yyyi:56,similar:[0,2,3,24,43,58,61,28,8,9,44,10,69,12,13,34,5,37,77,78,79,80,81,11,82,83],signed_cert:78,intermitten:34,memtot:33,constant:[36,18,80,85,4,77,42,79,66,5,58,15,69,34,68,78,10,28],nic_:80,detachinstancedisk:45,backrefer:33,allocateport:79,new_primari:2,parser:34,unconf:8,doesn:[56,39,23,2,40,41,42,43,58,6,61,44,64,66,67,45,20,48,15,69,34,16,36,5,37,77,78,79,80,11,55,22,84,85],repres:[43,37,2,64,4,77,79,80,5,49,59,11,55,45,33,16,69,50,20,85],sxp:55,proper:[56,62,57,23,37,48,77,50,5,28,34,16,80,22,11],incomplet:[29,18,28,34],"1400m":82,differnet:[34,64],odditi:38,disktempl:28,nas2:36,ignore_secondari:[2,58],nas1:36,crypt:3,sequenti:[39,34,4,18,80],exportdisk:78,unnecessari:[23,79],nal:83,accross:[75,7],bracket:69,transport:[38,15,61,80],nat:[56,58,28],instance_memori:2,mock:[34,15,24,82,32],nice:[79,55,80],deseri:42,node2_nam:37,hcheck:34,gigabyt:[64,61,69,80],shared_file_storage_dir:58,spice_image_compress:34,resign:3,elsewher:48,meaning:[83,85],force_vari:58,evac:[58,48],score:[34,48,69],distro:34,unaffect:23,svn:34,infrequ:34,sparringli:69,noqueu:55,vice:[37,34,84,79],inaccuraci:34,nic3:33,nic0:33,confirm:[8,23,63,37,13,43,59,80,61],notion:[4,36,0],alphanumer:[37,0],tradeoff:0,depth:[34,77],came:[56,64],leak:[34,16,52],far:[30,63,54,3,13,58,69,16,80,85,44],fresh:[16,23],vsize:43,hello:5,node_sip:2,prototyp:[56,31],vnc_console_port:80,getaddrinfo:77,code:[56,0,1,2,40,4,24,42,5,58,39,59,23,61,44,30,63,64,65,9,45,20,12,41,32,13,15,54,33,34,16,35,83,85,36,18,37,77,78,79,80,51,69,82,38,22,84,52],req_wait_for_job_chang:78,edg:17,scratch:2,zeroing_timeout_per_mib:58,confd:[23,37,3,79,73,67,15,54,34,16,22,68],issue10882:61,vgextend:55,ip_address:78,overlap:[77,20,11],supervis:[34,22,68,36],urandom:78,untangl:54,unfulfil:67,cognit:80,op_group_remov:2,compact:18,privat:[56,37,3,77,58,78,9,81,34,22,61,44],ganeti_api_vers:80,last_resort:[58,77],vsctl:66,rsalt:79,shouldn:[2,42,78,43,58,15,69,49,83,11],base64:[34,67,18],friendli:18,simliar:58,granular:[16,78,80],migration_cap:34,evolv:36,becam:[84,42,52],diskinfo:[37,78],networksect:[21,28],breach:0,inst_list:58,xenbr0:55,sent:[12,56,0,23,37,3,78,79,80,58,34,16,47,61],inject:[56,34],xenbu:[56,43],deactiv:[37,2,58,43,34],unverifi:78,redistibut:3,rollback:[6,8,80,79,63],whichev:69,rc5:34,querygroup:34,nic_mode_ov:66,account:[36,0,7,18,14,37,48,4,77,80,5,58,15,69,25,82,34,21,10,11],subcommand:[37,59],graphic:28,volum:[36,31,37,64,79,80,43,58,69,55,38,34,16,22,11,85],removenod:78,rubi:58,untouch:[3,84],implicitli:18,lv_attr:34,runnabl:15,tri:[12,0,43,37,3,4,65,79,80,14,58,15,54,59,34,10,85,69],group_network_vlan:2,magic:[79,80],opt:59,setdiskid:34,scalabl:[12,23,64,77,78,79,80,34],fewer:[37,3,48,42,34,85],queryinst:34,replication_ip:37,smuggl:0,cgroup:11,dealt:80,snode_uuid:58,freed:[43,10],tlsv1_method:44,attachinstancedisk:45,claudia:28,malici:[56,34,0],impli:[36,0,58,9,15,11],cap:69,luclusterredistconf:79,clusternam:[58,55,80],natur:[12,0,77,78,11,69],get_subject:44,bootp:37,add_uid:58,jump:[5,63],node_tags_:2,debootrap:79,instance_nicn_network_gateway6:2,accomod:34,foldl:5,ifdown:55,valid_lft:55,secwritten:16,odd:69,append:[30,79,80,49,6,68,69],osp_:[36,78],compat:[56,1,3,4,42,58,23,61,29,8,63,64,66,68,11,82,32,33,34,50,18,79,80,55,38,83,85],index:[2,77,78,79,80,43,58,82,49,34,60,69],turn:[83,0,23,63,37,3,78,42,79,50,38,15,59,33,34,68,84,40,11,85],copyfil:[8,37,77,80,19,34],undetect:34,power:[56,84,3,41,58,15,59,34,10],compar:[36,48,3,4,77,78,79,80,34,16,11],outsmart:11,gigabit:0,affin:[34,50],henceforth:[83,61],"_config_lock":23,engin:13,experiment:[34,41,55,43],hostkei:43,bridge_port:55,obvious:[85,41],journal:[2,43],deduc:[43,82],can:[56,0,7,2,3,4,24,42,5,58,39,69,59,6,23,60,80,61,28,62,29,30,8,63,48,65,66,9,44,45,81,68,10,40,20,64,12,85,46,47,82,31,41,32,13,14,15,54,49,33,34,16,35,57,50,17,36,18,43,37,77,78,79,67,51,83,19,11,55,38,21,22,84,52],spice_password_fil:34,shelltestrunn:24,"_opentap":30,ration:34,runtime_mem:58,chose:79,acceler:34,despit:81,syncstatu:16,len:[34,67,78],bodi:[5,58,80,61,34],intercept:[0,78],let:[56,30,46,23,18,43,37,77,78,80,5],symlink:[63,79,67,55,34,22,52],ubuntu:[56,34,67,24,55],unpack:[56,28],vcluster:[46,39],safer:17,bdev:[38,36],win:[37,84],implicit:[34,68,48,77],obsolesc:36,convert:[29,23,37,24,78,79,80,55,34,33,21,28],mem_path:62,convers:[37,21,80,28,34],vbd:[43,64],overwritten:34,hypervisor:[56,0,1,2,3,43,58,39,23,28,62,30,64,66,67,11,12,46,82,15,34,16,50,18,51,77,78,79,80,37,81,69,55,38,22],conceiv:[37,80],larger:[37,14,62,34],ctx:44,later:[56,0,23,40,24,58,61,8,63,66,67,69,34,17,37,77,78,79,80,55,83,84,52],glusterf:[38,29,1,55,34],bootdata:43,cert:[44,28,78],temporaryreservationmanag:18,ssconf_node_primary_ip:34,rdb:[34,85],earli:[0,63,40,34,68,61],opinion:61,typic:[12,36,3,80,38,21,28],seg_pe_rang:16,extp_nam:36,chanc:[12,77,23],revoc:44,control:[56,0,2,3,5,58,6,60,61,30,9,68,69,12,48,34,50,36,37,78,80,20,83],lamda:5,harm:[3,0,63],danger:[56,0,37,65,41,43,55,34,16,52],apr:34,"_sre":33,app:49,aquir:34,gatewai:[56,18,37,13,58,55,34],apt:[37,67,24,55],"1aaf4716":43,"boolean":[0,48,77,58,80,9,82,59,33,34,83,20],pull:55,"512mib":[43,55],immut:[77,79],opcod:[0,7,2,40,42,5,58,61,63,65,9,69,32,49,33,34,16,35,51,77,78,79,80,37,20,82,83,84],tap:[37,34,30,64,56],ocf:41,redo:63,op_query_:80,cloud:[56,48,28],dump_certif:44,fed:77,feel:5,feb:34,usb:[56,21,28],commun:[12,56,0,23,2,3,32,77,79,80,43,58,82,59,38,34,22,61,84,44],doubl:[8,0,77,79,5,15,34],querytag:34,upgrad:[12,29,8,23,63,37,3,4,79,80,53,45,56,55,27,34,68,85],mydir:85,next:[30,23,63,37,3,48,77,42,79,13,43,67,34,80,20],websit:13,os_valid:56,all_nod:45,import_devic:80,spfree:[34,58],"791667d07800":43,kvmd:34,your_netmask:55,checker:[5,34],releaseuid:79,ganeti_rootdir:[46,15],remaind:36,sort:[5,48,77,84,34],masterfailov:[34,77],systemctl:68,comparison:[2,4,80,34],ssh_host_kei:9,mismatch:[37,34,50,43],sbin:[37,2,55,63],balanc:[62,40,48,24,66,79,14,11,69,38,34,16,10,83,28],backslash:[5,34],some_late_data:16,pkei:44,"transient":[54,34,80],"32gb":43,insensit:[34,58],name1:24,central:[33,37,16,66],osuf:24,focu:[39,77,17],greatli:[36,80],fan:59,"5fd6b69479c0":42,unacknowledg:16,reboot_typ:2,retriev:[56,3,78,80,58,33,34,35,52],vswitch:[66,27],augment:77,perceiv:[40,84],alia:34,critic:[34,78,59],autorepair:[37,84,16,41],tag:[39,18,37,2,48,41,66,80,5,58,82,34,16,10,84,28,17],timescal:77,your_broadcast_address:55,executor:[34,23,42,78],bidirect:[12,56],meet:59,exc:77,fetch:[57,23,31,3,4,78,58,16],"7ydj":43,proof:[34,79],point:[0,23,2,3,5,58,59,6,60,61,28,62,29,30,8,63,64,45,68,40,31,48,14,49,34,16,85,43,37,77,78,79,80,54,55,84,52],fcgiwrap:61,thenels:5,all_set:69,sharedlock:[65,77,78,79,80,83],slip:78,tar:[56,34,8,24,55],process:[56,0,23,42,5,58,39,61,44,30,8,63,65,67,9,28,68,10,20,12,31,13,34,16,35,50,36,37,77,78,79,80,53,54,11,55,83],lock:[0,23,3,42,58,39,59,1,29,65,73,45,69,48,32,33,34,35,54,77,78,79,80,37,20,83,84,52],migrate_l:2,candidate_pool_s:[58,80],src_imag:2,ganeti_op_target:2,haddock:[5,24],rapi:[56,39,23,3,4,58,0,60,61,44,8,9,68,40,69,48,13,15,49,33,34,35,17,37,77,78,79,80,51,81,22],execwithunuseduid:79,sligthli:2,ganeti_object_typ:2,tab:[5,24,78],"_path":80,instance_nicn_mac:2,onlin:[23,43,37,84,3,63,41,5,59,34,10,85,69,17],serial:[56,23,3,43,58,6,7,61,44,63,40,55,49,33,34,51,78,79,80,37,82,83],pawt:37,loopdevic:64,hvm_disk_typ:80,delai:[39,54,84,77,79,13,0,69,59,34,22,61,52,20],kib:[16,69],sip:58,forese:[80,63],admin_state_sourc:58,sit:[34,69],tamper:56,data_dir:2,vnc_password_fil:79,prv0:58,copyright:5,infeas:0,subdirectori:[56,34],instead:[56,0,23,3,4,24,5,58,57,59,60,61,44,63,64,9,28,45,81,10,11,12,82,48,33,34,16,35,50,36,37,77,78,79,80,54,19,69,55,83,84,85],ovftool:[21,28],weaken:[0,78],panic:80,inher:[3,41,80],source_handshak:58,migrateinst:34,everywher:[34,80,45],workerpool:77,nph:61,op_cluster_renam:[37,2],myvg:85,finterprint:22,stop:[56,39,2,24,43,57,61,8,63,64,68,69,12,46,31,41,15,49,34,16,37,77,78,79,80,53,54,55,22],realoc:82,surfac:[3,78,13],walk:[29,43],metavg:[34,85,69],inst:[5,50,28,34],attent:[0,65,43,55,34,83],share:[56,0,7,3,24,42,58,23,8,63,64,65,66,73,11,48,82,32,14,15,54,49,34,17,36,18,37,75,77,78,79,80,51,81,69,55,38,22,84,85],op_cod:2,netcat:[56,78],redund:[0,23,37,84,59,43,39,69,45,34,10,11,17],physic:[51,46,82,43,37,3,77,79,52,14,58,15,69,55,34,16,80,61,50,11],alloc:[0,2,40,43,58,57,59,29,64,10,69,48,34,16,83,36,18,37,77,79,80,51,11,82,38,22,85],drop:[78,79,9,33,34,22,61,68,17],essenti:[38,83,15],use_localtim:34,syscal:55,bind:[56,37,77,5,67,15,34,22,61],op_cluster_ip_turnup:2,correspond:[56,0,7,2,3,4,58,59,23,61,28,30,63,64,15,34,16,18,37,78,79,53,55,22],processor:[65,64,32,77,78,80,35,69],issu:[56,39,23,3,4,24,42,43,0,59,61,30,8,69,12,31,48,15,49,33,34,16,57,50,37,77,78,79,80,53,54,55,21,22,84],mainten:[7,37,77,55,49,34,16,20,17],temp:59,allow:[56,0,7,2,3,4,41,42,5,58,57,69,59,23,61,28,62,29,30,63,48,66,45,68,10,40,20,64,12,85,46,82,31,32,13,15,49,33,34,16,35,50,17,43,37,77,78,79,80,53,11,55,38,22,84,52],qcow2:28,fallback:[58,28],jobqueue_renam:80,elif:78,least:[56,0,23,2,3,4,41,42,58,59,61,28,68,20,48,32,15,34,16,36,18,37,77,79,80,54,69,55,84],ouput:34,setuptool:[67,24],export_index:80,imperson:81,balanced:10,templatehaskel:24,comma:[24,78,79,80,5,58,82,34,50],expanduidpool:79,blktap:[58,64,80],overful:34,avaibl:79,everybodi:20,bunch:40,perfect:48,job_info:58,outer:34,ispec:[34,69],chosen:[56,30,0,7,39,61,77,78,79,80,43,15,69,34,10,28],send:[12,56,0,23,31,37,78,79,13,54,58,59,34,22,80,61,50],certificateerror:34,src_node_uuid:58,early_releas:[34,58],infrastructur:[18,37,3,4,79,80,54,34,61,28],instance_disk_count:2,purg:80,therefor:[56,39,23,2,42,5,57,59,61,63,64,10,11,12,32,13,49,33,34,83,51,77,79,80,37,81,69,38,21,22,85],submitjob:[78,80],onreadystatechang:58,pinst_cnt:58,crucial:3,crash:[12,57,23,37,64,77,43,54,59,34,16,84,69],pure:[54,60,77,69,80],admin_down:[57,69],drbd0px:43,auto:[82,72,37,77,3,24,80,43,67,11,55,69,34,10,84,28],overal:[12,37,48,77,79],churn:42,dai:[34,61,19,78],auth:43,devel:[34,67],mention:[12,56,30,0,7,84,3,77,50,19,69,55,83,34,16,61,22,28],op_node_add:2,terminolog:[37,29,64,55],luinstancemov:34,fingerprint:[43,61],front:[34,77,79],bootload:[37,34],ganeti_hooks_phas:2,align:[5,32,80],"256m":43,getclient:33,gnutl:34,writefil:77,reestablish:56,somewher:[43,78],xvda1:[37,64],anyth:[43,3,32,80,38,58,55,6,16],mytest:24,unlimit:54,epip:34,otherkei:5,psutil:[34,67,50],trap:34,c_other:79,disk0_data:43,cluster1:[2,82],tracer:78,few:[29,0,37,77,24,67,79,78,5,58,15,19,69,33,34,80,84,81,11,17],secread:16,tolist:5,bump:[34,78],forcibl:[83,0],chunk:[77,61,28,13],"try":[56,0,23,3,4,41,43,58,59,44,62,85,67,68,10,11,48,34,16,50,5,37,77,78,79,80,69,55,22],ignore_consist:[2,58],remap:[56,50],networksend:16,"10g":64,restructuredtext:34,meta:[56,85,67,34,68,69],"static":[23,66,80,58,15,69,55,33,34,22,11],ec2:56,annot:45,mountpoint:[37,36,38],patch:[37,34,67,45],special:[0,23,2,41,42,5,58,39,61,30,64,65,15,33,34,35,37,77,78,79,80,38,83],out:[56,0,23,3,4,42,43,57,59,61,8,63,64,68,10,40,20,48,32,14,15,54,69,33,34,16,83,17,18,37,77,78,79,80,51,19,11,55,22,85],variabl:[56,57,2,24,43,58,60,68,69,46,15,34,36,18,5,54,78,79,80,37,11,55],lock_statu:34,soften:34,reload:[56,34,24],influenc:[37,36,80],singular:28,hconfd:34,bad:[0,43,37,40,41,78,80,5,55,34,16,11],facto:68,master_ip:[2,9],stub:[33,23],suitabl:[67,10,82,20],disappear:[56,16,80,63],replace_new_secondari:[43,58,7],hardwar:[36,0,23,51,43,37,3,80,14,15,28,55,34,83,21,16,69,64,11],saniti:[9,40,79],merg:[6,29,16,79,34],name_check:58,red:28,statist:[34,16,77],unallocat:0,shut:[12,0,37,61,78,80,43,58,57,59,34,10],footprint:[54,34,16],jessica:58,insid:[56,57,5,26,27,60,61,30,85,65,11,12,48,13,16,35,17,36,18,37,77,78,79,80,69,55,38,21],workflow:[34,80,69,28,78],stripe_s:79,cleartext:58,source_shutdown_timeout:58,undo:[37,79,63],font:43,standalon:[43,37,73,58,34,16],devnot:67,dictionari:[56,36,18,31,80,77,58,79,78,5,9,69,82,33,22,35,52,28],tempt:80,shun:41,thecollectoridentifi:16,afterward:[4,80,5,19,55,84],quo:3,log:[56,7,2,43,58,59,23,8,65,67,32,15,34,16,37,77,78,79,80,54,55,22,52],ganetiapierror:34,indent:[5,80,34],threads5:77,logilab:24,mem_tot:69,could:[56,0,7,2,3,4,42,43,58,39,59,23,61,44,85,10,20,12,48,32,13,15,69,33,34,16,83,36,18,37,77,78,79,80,54,19,11,55,38,22,84,52],diskread:16,put:[56,36,37,2,32,42,78,5,58,55,34,16,80,84,20,17],segreg:11,"10gib":34,david:43,counterpart:[85,24],length:[30,0,18,37,79,80,5,58,82,33,61],enforc:[36,0,64,13,5,69,34,50,11],indend:5,crl:44,outsid:[56,63,37,3,77,66,79,78,69,55,45,34,22,80,84,16,28,85],balloon:[0,51,69,55,34,11],serial_consol:55,retain:[23,79],timezon:34,distinguish:[12,36,0,3,48,79,80,56,49,38,16,40,85],addnod:[78,79],oob_program:34,unexpectedli:23,kernel_major:16,qualiti:[0,61],tbool:58,echo:[43,58,55],tier:[34,77,28,11],instance_diskn_:2,fignor:24,owner:[23,37,77,42,79,78,82,34,22],minmem:[37,34,43],getmirrorstatu:79,facil:[33,18],cluster_renam:37,organ:18,prioriti:[0,80,37,77,42,78,11,38,34,35,10,20],"long":[56,0,23,4,41,43,58,59,61,28,30,64,11,48,13,15,34,16,36,18,5,37,77,78,79,80,54,69,38],smaller:[39,18,54,64,48,77,78,80,8,32,34,50,69],seq:5,strict:[32,4,80,5,58,34,60],export_mod:2,licens:[34,28],sep:34,superfl:34,capac:[37,48,77,79,14,69,34,84,11,17],messag:[0,43,58,57,59,6,62,30,8,85,65,32,13,49,34,16,50,36,5,37,78,79,80,82,38,52],basicconstraint:44,togheth:65,attack:[0,3,78,79,13,34,22,52],disk_index:[34,58],op_instance_shutdown:2,volume_group:37,organis:[2,32],reevalu:20,"\u03bb":24,"final":[12,36,30,0,14,37,84,78,42,13,5,67,54,55,34,16,80,10,68,69],tag2:[58,28],ipv4:[56,18,37,77,58,34,61],abicloud:28,udp:[38,34,23,79],shell:[8,37,24,58,9,15,38,34],gear:[69,13],format_vers:16,highest:[56,37,77,79,80,58,11,84,20],rsa:[78,43,9,19,34,61],simplestor:79,biggest:[11,80],accompani:36,be_:80,underutil:0,enqueu:49,rst:[6,21,67,80,34],repect:2,exactli:[30,0,54,2,64,77,78,79,80,69,55,45,33,22,61,68,28],strictli:[38,77,55,11],blind:79,dt_plain:69,mechan:[12,56,0,23,51,84,85,48,77,66,79,80,58,69,55,34,16,61,60,11],dev_typ:79,ben:43,i_pri_up:82,addprimari:5,bloat:34,rsahostkeypub:19,op_instance_renam:2,emac:[5,24],structur:[56,0,23,2,4,42,5,28,63,9,69,13,15,49,33,34,16,54,77,78,79,80,51,20,82,38],querynod:[33,34],claim:[38,28],src_key_nam:78,sens:[0,23,18,63,37,85,4,77,66,79,67,58,20,69,80,11],becom:[56,0,3,43,58,61,28,9,48,33,34,16,17,36,18,5,37,77,78,79,80,22],histor:[46,80,58,19,33,69],sec:5,stricter:[34,22,52],other:[56,0,23,2,3,4,24,42,5,58,57,69,59,6,1,60,61,28,62,29,30,8,63,48,65,66,67,44,68,10,40,20,64,12,85,46,82,31,41,32,13,14,15,54,49,33,34,16,35,50,17,36,43,37,77,78,79,80,53,51,83,19,11,55,38,21,22,84,52],greater:[34,0,23,69,80],querylock:34,unencrypt:[22,0],counter:79,thereaft:34,pvcreat:55,deprec:[56,7,37,40,58,82,34],clearli:[38,32],fail:[56,0,23,2,3,4,41,42,43,58,39,59,61,62,30,64,65,67,68,40,69,82,48,54,33,34,16,35,50,5,51,77,78,79,80,37,55,83,84,52],ocfs2:36,interf:78,have:[56,0,23,2,3,4,24,42,76,5,58,57,69,25,26,27,6,7,60,80,61,28,83,30,8,59,63,48,65,66,9,44,45,81,68,10,40,20,64,12,85,46,47,82,41,32,13,15,54,49,33,34,16,35,50,17,36,18,71,43,37,74,75,72,77,78,79,67,53,73,19,11,55,38,21,22,84,52],disadvantag:[12,0,54,64,4,80],need:[56,73,0,23,2,3,4,24,42,5,57,59,7,80,61,28,30,8,63,64,66,9,44,45,81,68,10,40,11,12,85,82,31,41,48,15,49,33,34,16,83,17,36,43,37,77,78,79,67,53,51,19,69,55,38,21,22,84,52],element:[7,49,77,80,5,58,20,82,34,21,16,28],border:61,paramiko:[34,9,67],instance5:[43,82],pemfil:13,simplejson:67,min:[82,34,58,69,55],rout:[56,18,37,79,43,58,28,55,34,21,22,11],mib:[2,58],ipaddr:67,mid:36,innard:[35,42],mix:[34,80,69,55,79],unawar:16,iff_one_queu:34,best:[62,0,23,2,3,48,5,39,55,10,11],which:[56,0,23,2,3,4,24,42,5,58,39,59,83,7,80,61,28,29,30,8,63,48,65,66,9,45,81,68,10,40,20,64,12,85,46,82,31,41,32,13,15,54,69,33,34,16,35,57,50,17,36,18,43,37,77,78,79,67,51,19,11,55,38,21,22,84,52],discrep:37,jail:22,qa_job_util:34,viridian:34,divers:[4,0],singl:[56,0,23,2,4,42,43,58,59,6,61,28,63,65,66,9,68,10,20,12,46,82,31,48,15,33,34,16,35,50,17,5,37,77,78,79,80,54,81,69,55,38,83,84],uppercas:33,min_ispec:69,courtesi:0,regard:[2,3,41,77,80,43,15,69,34,21,22,84,85,28],led:[34,77],deploy:[4,18,37,48,77,38,69],x509extens:44,versa:[37,84,79],oracl:21,discov:[37,4,78,80,21,69],admin_up:34,insufficient_resourc:58,size_in_mb:28,gntadmin:77,hvm_pae:[34,80],amongst:[15,77],deploi:[37,64,67,55,80],mode:[56,23,2,40,41,42,43,58,7,28,66,69,82,31,48,34,16,83,17,36,18,37,77,78,79,80,51,81,55,21,22,52],segment:16,why:[0,23,54,49,42,57,55,34,38,7,16,61,52,28],group_network_mod:[2,18],minor_count:55,prove:[0,78],op_node_set_param:[2,42],placement:[18,37,40,77,79,82,34],dens:18,instig:0,gather:[23,37,48,43,9,34,16,61,28],stronger:[85,77,69],uri:[58,80],node_pip:2,face:[38,34,85,23,13],inde:[34,3],deni:2,file_driv:[34,58],blockdevsnapshot:34,yum:67,determin:[56,23,3,42,58,59,61,28,85,66,67,68,10,69,12,48,49,33,34,16,83,36,37,77,79,80,38,22],built:[43,37,3,85,78,79,13,5,15,49,33,34,16,61,64,69,68],constrain:[34,80,11,72],removeinstancedisk:45,modularli:55,fact:[12,18,51,2,3,4,77,80,54,69,21,22,10,11],gain:[56,0,3,80,83,44],epydoc:[5,24],"45173e82":43,assert:[4,34,0,32],mainloop:78,filetyp:64,verbos:[8,47,37,33,81,6,34,16],prof_o:24,ioemu:34,gennam:5,waitforchang:80,ecode_temp_nor:83,op_instance_reboot:2,envisag:77,new_vg_nam:2,requested_nod:82,chicken:[3,85],debat:69,dbu:56,anywai:[63,61,3,48,77,79,80,43,15,55,10,11,17],nonemptystr:58,subjectkeyidentifi:44,redirect:[54,78,79],textual:58,locat:[12,56,46,82,31,37,64,48,77,78,79,80,55,34,16,68],nois:34,fd_loop:64,tapx:22,dom0_max_vcpu:55,wreak:43,threateningli:77,prolong:79,won:[23,3,42,43,58,61,85,40,69,31,48,15,34,16,17,37,77,78,79,80,54,11,21,22,84],initramf:55,combo:22,ksm:11,spice:[34,3,58],akward:79,hope:[85,10],subdir:5,d_name:60,devnum:80,mtu:[34,55],contribut:67,example_monitor_host2:55,familiar:[56,7,37,78,5,55],sysv:68,pypi:[61,50],sd_listen_fd:68,autom:[8,23,37,59,41,78,79,80,43,69,49,6,34,16,44,17],ec018ffe72b8e75bb4d508ed5b6d079c:58,db8:18,hinotifi:67,expres:20,kbd:55,increas:[56,0,23,3,41,43,58,6,28,67,10,69,32,34,16,54,77,78,79,37,81,20,55,84],f0fac192:37,hotplug_if_poss:58,ganeti_instance_nic0_bridg:2,tbd:[41,31],endless:34,shr:77,enabl:[56,3,4,24,43,58,28,62,83,30,8,64,67,9,68,11,12,46,82,31,13,70,34,50,17,18,37,77,79,69,55,22,84,85],ancient:34,twice:[39,34,0,24,43],upper:[36,2,77,78,5,69],instance18:37,osp_ns1:78,storage_pool:[36,48],state:[56,0,1,3,4,41,42,43,58,39,69,59,6,23,60,61,44,62,30,63,64,65,66,9,45,68,10,40,20,12,85,48,31,32,13,14,54,49,33,34,16,35,57,83,17,18,37,77,78,79,80,53,51,11,22,84,52],whether:[56,0,23,2,3,4,5,58,57,61,44,63,85,9,69,12,48,13,33,34,16,35,83,36,37,77,78,79,80,54,82,22,84],cluster_tag:[2,82],integr:[54,1,31,37,77,3,4,41,80,73,67,15,25,55,34,16,68],partit:[0,71,72,37,85,48,43,73,55,38,34,16,61,11,17],usb_mous:34,grab:[0,65,77,66,79,80],builder:4,view:[57,37,64,48,77,78,80,54,38,34,16,83],conform:[2,58,77],legaci:[34,58],bridge_fd:55,"_total":69,googlecod:55,frame:77,knowledg:[37,38,22,78,80],orphan:[37,34,69,43],group_nam:[2,58,34],packet:[37,34,56,61],displai:[0,85,58,59,33,34],malfunct:34,"954bja":43,subresourc:58,full:[2,3,41,43,58,28,8,63,64,66,9,68,10,69,82,13,14,15,34,16,35,17,36,18,37,77,78,79,55,38,84],multipart:61,bytestr:[34,67],rc3:34,hsqueez:[29,1,25,26,34,10],xxxxx:18,ssconf_:77,master_candid:[37,2,3,79,43,58,82],statu:[56,57,23,2,3,41,42,43,58,69,59,61,63,11,47,48,49,33,34,16,35,50,17,36,72,37,77,79,80,20,82,22],wire:79,extend:[56,0,23,3,4,42,58,57,59,60,29,64,66,68,10,40,11,32,48,34,36,18,37,78,79,80,69,83,84,85],"881a":58,drive_del:30,pointer:45,boundari:[3,32,77,79,69],slaac:37,cours:[8,18,37,77,3,48,41,79,80,69,55,34,16,84,85,20],tend:[56,41,69],luxi:[56,23,80,51,78,77,42,13,43,15,54,33,34,22,35,69],favor:[34,30],written:[56,30,0,23,80,37,84,3,32,77,42,58,13,9,78,79,34,16,47,61],crude:69,progress:[56,0,37,42,80,54,11,16,28],neither:[0,37,3,78,79,5,39,21,61,69],lun:36,tent:54,conjoin:5,amem:69,secondary_ip:[37,58,82],bockdevic:34,extstorag:[37,34,73,36],parseabl:34,reinforc:44,syncer:[34,69],sow:[51,69,59],entir:[30,23,37,77,48,24,78,80,54,15,69,34,50,11],rare:[34,69,28,80],previous_log_seri:58,disconnect:[36,18,37,2,77,58],parenthesi:5,dmz:80,thank:34,ipolici:[55,85,58,69,82,34,11],mylist:5,revers:[34,59],succss:61,rtype:5,admin:[82,37,79,80,43,58,55,49,34,16,84],goal:[36,3,32,77,78,79,80,9,15,52,69,64],etx:80,equal:[0,7,5,2,63,77,58,79,80,14,9,46,28,82,69,33,22,61,20],vgcreat:55,configpars:5,etc:[56,23,2,24,43,58,60,30,8,63,48,67,45,11,64,46,31,32,15,54,49,33,34,16,50,36,18,5,37,77,78,79,80,51,19,69,55,38,22,84,52],admit:34,succeed:[38,84,82,59],grain:[34,23,20,80],equat:69,ialloc:[0,7,40,43,58,1,62,85,69,48,55,32,15,34,36,18,37,77,79,80,81,82,38,83],vfree:43,zeroing_imag:58,freeli:[56,77],sigterm:[34,63],minumum:16,noshutdown:37,comment:[37,5,58,55,59,34,69],unimpl:31,localcount:16,deconfigur:37,job_status_wait:42,primaryinst:33,hyphen:2,connectionst:16,chmod:[19,55],vgreduc:[37,34,80,79,43],dest_cert_fil:78,solv:[85,80,43,34,84,11],rpc:[56,57,23,3,61,30,8,85,65,9,45,31,32,13,15,34,16,35,17,73,77,78,79,80,54,19,22,84,52],inet:55,free_disk:82,pkgdatadir:34,diskwrit:16,rpm:59,uid:[34,22,30,58,79],operatingsystemsect:28,vgname:55,evalu:[77,42,79,78,5,11,16,20],yaml:[34,24],addition:[36,30,0,37,3,32,77,67,79,80,38,58,39,69,59,33,34,68,10,40,28],libdir:[34,8,82,63],compos:[12,5,3,48,80],abc:5,insuffici:[30,11],compon:[12,62,0,23,55,31,82,37,2,4,24,77,79,43,46,32,49,38,16,84,69],json:[56,8,23,18,80,37,40,59,58,79,13,5,9,67,82,49,34,16,47,69],besid:[37,3,48,80,82,34,50,69,85],treat:[30,42,78,58,59,34,68,80,69],vm_capabl:[37,2,77,58,15,82,34],unconfigur:[56,16],remove_reserved_ip:58,default_iallocator_param:58,doabl:[15,69],partial:[83,0,71,72,37,77,41,79,80,73,46,69,11,26,27,34,16,61,68,20,25],storage_typ:[58,48,85,31],disks_info:45,runlevel:43,wiomilli:16,upcom:37,presenc:[12,0,18,3,48,41,79,58,34,21,68,84],instance_nicn_:2,vmware:[21,28],bulk:[37,40,73,58,82,34],behalf:23,deep:[54,80],minim:[56,0,80,55,34,16,10],criterion:69,removeprimari:5,veth:78,hbal:[62,1,43,85,14,15,34,83,10,11],replic:[36,0,23,82,37,2,78,79,80,43,55,38,34,16,22,44,17],multi:[0,7,82,54,37,40,4,77,79,5,58,69,55,59,34,68,61,48,28,17],novel:77,autoarchivejob:78,usermode_help:[34,55],plain:[0,37,84,85,48,77,79,14,58,39,11,82,69,34,16,61,28,17],"12gb":43,hyperlink:[21,28],harder:[37,0,78,11,80],migrate_cleanup:2,keyout:[19,78],instanc:[56,73,0,23,2,3,4,41,5,58,39,69,26,27,83,1,60,61,28,62,29,30,8,63,48,65,66,67,44,45,81,10,40,20,12,85,46,82,31,32,13,14,15,54,49,33,34,16,35,57,50,17,36,18,43,37,74,75,72,77,78,79,80,53,51,59,11,55,38,21,22,84,64,7],defin:[56,57,23,2,4,42,58,59,6,80,61,44,64,66,9,68,20,32,15,69,34,16,50,36,18,37,77,78,79,67,11,82,22,85],ganeti_:2,suffix:[5,80,63],opshutdowninst:5,charaterist:84,glossari:[29,37,51,67,55,34],load_certificate_request:44,rbd:[1,31,37,85,67,58,55,38,34,16,84,17],repol:16,layer:[36,77,15,19,34,16,35,11],incooper:40,customiz:[56,34,79],op_instance_grow_disk:2,almost:[0,32,77,34,68,61],uncompromis:3,mac_prefix:58,mtime:[16,58],site:[36,82,37,2,55,34,22,69],docinput:34,unclean:34,pip:[33,58],initd:[67,55],motiv:7,substanti:[64,11],lightweight:[0,79],fiddl:55,incom:[56,77,3,61,22],revis:[8,79,63],unneed:[34,80],surprisingli:0,halt:[50,59],device_typ:30,recreateinstancedisk:34,parti:[56,48,78,81,34,22,61,44],ssconf_master_candidates_cert:8,priority_opt:34,replaceinstancedisk:34,member:[37,83,77,66],python:[23,2,4,24,42,43,58,61,30,8,63,67,12,32,13,15,33,34,50,18,5,54,79,80,55],compression_tool:58,updateexcltag:34,largest:48,fourcc:79,codepath:[34,80],"__version__":58,incl:[29,1,71,72,85,27],infer:[77,18],hv_kernel_arg:34,difficult:[56,23,37,4,65,42,79,80,5,15,44,34,61,11],bes_paramet:80,oneof:58,immedi:[0,23,63,37,3,42,79,80,57,16,68,11],slave:[36,55],context:[12,39,3,32,78,79,69,34,44],denot:[37,2,64,48,24,77,79,80,9,82,45,34],vpcu_ratio:11,expans:34,keepal:[34,78],target_group:[2,82],file_storage_dir:[34,58],struct:16,handi:59,phy:43,meta_data:56,sooner:34,usecas:21,auto_bal:[34,58,8,28,80],decoupl:[34,23],login:[43,22],reclam:48,cosmet:34,audit:16,dmesg:43,off:[0,7,82,37,77,3,41,78,80,58,55,59,34,68,84,50,17],disapear:84,nevertheless:[12,22],sre_pattern:33,colour:33,reboot_behavior:34,well:[56,0,23,3,4,41,42,58,39,61,28,30,63,64,66,67,68,20,12,31,24,48,13,15,34,16,57,83,17,18,37,77,78,79,80,53,54,81,69,55,38,22,84,85],versatil:42,thought:84,versionid:28,exampl:[56,73,0,23,2,3,4,24,42,5,58,69,59,1,80,61,28,29,8,63,64,66,9,44,68,20,12,46,82,41,32,13,15,54,49,33,34,16,35,50,36,18,43,37,77,78,79,67,51,19,11,55,38,21,84,85,7],command:[56,0,23,2,3,4,24,5,58,57,59,60,61,28,62,30,8,63,67,9,44,81,10,40,20,12,46,82,31,32,15,49,33,34,16,50,36,43,37,77,78,79,80,73,19,69,55,38,21,22,52],achiev:[12,56,68,0,18,63,37,3,4,79,69,34,60,48,20,64],choos:[12,36,30,0,63,37,77,64,48,41,78,79,80,55,34,17],undefin:59,is_primari:43,"0x24f66e0":58,stripecount:[34,69],loss:[37,64,80,43,34,84],piec:[54,3,79,13,49,80,84,28],latest:[56,29,40,80,55,34,20],regularli:[37,51],requestunuseduid:79,test3:18,test2:18,newest:21,paus:[8,63,37,6,34,20],export_vers:[58,28],less:[0,23,18,43,37,82,77,42,78,38,58,15,69,55,33,34,80,61,84,44],xen:[56,57,2,43,58,28,62,8,64,66,67,69,12,82,34,16,50,51,77,79,80,37,11,55,21,22],e90739d625b:34,aggress:[34,64],detail:[56,0,23,3,4,41,42,43,58,57,59,7,60,61,28,29,30,8,63,64,66,67,45,10,20,82,24,13,54,49,34,16,50,1,17,18,37,77,79,80,53,51,81,69,55,21,22,84],should:[56,0,23,2,3,4,24,42,5,58,39,59,6,7,60,80,61,28,30,8,63,48,65,66,9,45,81,68,20,12,85,46,82,41,32,13,14,15,54,69,33,34,16,35,50,17,36,18,43,37,77,78,79,67,51,19,11,55,38,21,83,84,64],trust:[38,34,22,78,56],interim:85,heavili:[36,23,41,77,78,79,69],monolith:77,drdb:28,"_but_":66,ganetisect:28,web:[58,78,55,13],rapid:23,amd64:[79,55],wee:80,tight:[9,79],cert_fil:78,a8d6:43,makefil:[34,24],aris:[12,30,0,78,16,61],script:[56,0,2,3,4,24,43,58,6,61,29,30,8,64,67,9,68,46,82,31,41,15,34,16,36,18,37,77,78,79,80,53,19,55,38,21,22,52],add:[56,0,23,2,3,41,42,5,58,39,59,60,80,28,62,30,8,64,66,9,45,10,40,20,12,46,82,31,32,14,15,69,33,34,16,36,18,43,37,77,78,79,67,53,51,11,55,38,22,84,85],cleanup:[12,57,37,78,79,80,43,58,49,34],remote_raid1:[34,8,80],newnam:77,citizen:45,freshest:16,iputil:67,suit:[4,77,48,24,79,80,82,34,69],adh:13,vdi:28,exot:34,always_failov:34,ganetilockmanag:83,unprivileg:[56,64,15],rememb:[34,58,8,79,69],minimalist:21,dest:[67,81],os_vari:34,fyi:[79,59],os_nam:58,arguabl:77,effortless:28,camelcas:5,punctuat:[33,5],realiz:[37,64],five:[37,34,32,77],know:[12,56,0,37,40,42,79,78,53,54,57,82,34,33,21,16,80,84,68,69,85],burden:78,redesign:[56,29,1,25,79],realis:[37,57],runcmd:78,imem:69,mkstemp:78,toe:80,suppos:[3,57,16,79,80],insert:[30,5,58,55,16,83],hv_state:[58,69],resid:[12,36,30,37,65,58,55,34,52],ganeti_instance_secondari:2,success:[36,7,37,2,3,48,41,42,79,80,58,81,84,82,38,34,68,61,40,28],request:[56,0,7,3,4,42,43,58,39,69,23,61,44,62,83,30,64,10,40,20,12,48,47,32,13,49,33,34,16,57,50,85,18,37,77,78,79,80,53,54,11,82,22,84,52],pinst_list:58,mergedwrit:16,ganeti_hostnam:46,instance_nic_count:2,opqueri:34,stagger:79,necessari:[56,0,23,3,42,58,61,28,30,8,63,12,46,15,33,34,17,37,78,79,80,53,55,38,83,84],lose:[8,37,3,79,80,34,84,17],async:80,resiz:[37,36,30,64,78],be_typ:80,soft:[63,37,43,58,34,20],page:[62,29,1,37,64,79,80,43,58,70,51,55,69,34,16,50,11],backlog:16,restructur:23,unreach:[23,2,67,43,58,33,34],exceed:59,didn:[23,37,78,79,81,34,61],responsetext:58,regist:[43,78,55],pydoc:5,gluster:[1,31,37,58,55,38,34],replace_on_secondari:[43,58],hail:[46,43,15,82,38,34,69,17],rtl8139:80,contin:61,"export":[56,0,23,2,3,41,42,5,58,1,61,44,29,8,64,67,28,69,82,24,48,13,15,49,34,16,36,43,37,74,77,78,79,80,81,55,21,83,84],readonli:[34,43],mlockal:[34,79],guarante:[0,80,37,2,3,4,42,79,13,58,78,69,34,60,35,40,28],meta_flush:79,mainli:[56,29,37,80,67,82,38],"0x2350668":58,tmp:[46,78],inst_spec:78,competitor:0,deboostrap:79,lead:[12,62,0,3,77,79,50,67,57,55,33,34,35,40,69,85],esp:13,broad:69,avoid:[0,23,3,42,5,57,59,61,30,85,65,68,10,69,33,34,11,83,17,77,78,79,80,20,55,21,22],octet:[43,61],reconsid:12,chapter:[4,0],ether:[34,55],leas:56,cheapli:[48,77],estim:[85,79,80,43,15,34,61,69],leav:[56,8,23,37,77,3,65,78,80,43,57,55,68,61,11],fe1e:55,remedei:67,overlai:[56,68],launch:[12,56,37,62,15,82,49,34],speak:[48,80,13],symbol:[67,80,18,55,63],forbid:60,masterd:[56,30,8,23,37,85,77,78,79,54,15,34,22,68],"95f1":37,constitut:80,investig:[54,84,78,43,15,34,21,61,28],throttl:0,"68f9":58,slight:[34,40,79],acronym:5,imaginari:58,usag:[0,58,6,28,85,67,10,69,46,33,34,16,50,18,51,77,78,79,80,37,81,11,55],ourselv:48,docstr:[5,34],vhost:34,host:[56,0,2,3,24,43,58,28,64,9,11,46,31,48,15,34,16,17,36,18,37,77,78,80,19,55,38,22],toggl:[37,80],xenstor:43,obei:[4,0,69],although:[62,36,18,85,4,77,78,79,69,55,28],so_peercr:34,hardlock:38,stage:[23,63,42,80,55,38,84,50],op_instance_reinstal:2,about:[56,0,23,2,3,42,5,58,69,60,61,28,62,29,30,8,63,64,68,20,12,48,82,32,15,49,33,34,16,35,17,36,37,77,78,79,80,81,11,55,38,21,22,84,85],pypars:[34,67],toolchain:34,socket:[12,30,23,51,77,78,13,54,34,16,80,61,22,68],column:[33,5],justif:28,blockag:23,dts_mirror:36,fear:55,lifecycl:0,dependend:64,discard:[77,78],idisk_param:36,"0d7d407c":58,addinst:79,synctarget:80,subset:[0,23,85,77,79,80,34,16,69],own:[56,0,23,3,5,57,44,9,67,28,68,11,48,15,49,34,16,37,77,78,79,80,69,55,38,22,52],reserved_memori:82,uncertain:55,submitt:[83,35,61],bashrc:24,easy_instal:[67,24],automat:[56,57,23,4,41,43,58,27,61,44,29,8,59,63,66,28,68,20,12,82,32,34,16,17,18,5,37,77,79,80,51,19,69,55,21,22,84],ext3:43,hooks_vers:2,automak:[34,24],doesnt:2,wait_for_sync:[58,83],"_executekvmcommand":30,mere:[9,32,20],virtualbox:[21,28],leverag:[39,4],x509_key_nam:58,oversubscription_ratio:69,curlopt_encod:61,transfer:[0,3,41,78,13,67,34,61,50],resource_not_uniqu:58,rotat:55,disk_count:[69,28,80],intellig:23,trigger:[32,77,4,41,79,49,34,16,84,68,17],downgrad:[8,63,3,4,53,45,34],inner:33,signx509certif:78,"var":[12,8,37,2,3,24,67,80,5,58,15,19,55,38,34,81],lds_drbd:79,extra_:24,object_typ:2,favorit:58,"function":[56,0,23,3,4,24,5,58,39,61,28,29,30,64,65,66,67,44,45,68,10,69,12,48,31,32,13,15,33,34,16,35,57,83,17,36,18,43,37,72,77,78,79,80,54,55,38,22,85],mtotal:[62,43,85,38,58,55,33],beta1:34,unexpect:34,guess:[69,55],subsum:85,beta0:34,wed:34,node_r:34,"100gib":69,remote_import:78,backtrac:34,uninstal:37,hooks_phas:2,overflow:34,inlin:5,ssh_kei:3,suppli:[56,0,78,79,67,34,69],succe:[30,39,23,2,4,41,77,79,80,58,34,35,50,69,17],made:[56,0,3,4,24,61,62,8,63,64,66,45,20,82,32,13,33,34,16,85,18,77,79,80,69,55,38,52],wise:[5,3,39,41,77],googlecom:61,helper:[56,46,18,32,58,0,55,59,38,34,83],rc4:[34,0],shrunk:85,rc6:34,rc0:34,rc1:[34,8],rc2:[34,8],relativejobid:58,logicalunit:[23,51,32,80,58,27],record:[51,30,37,4,5,58,59,69,49,34,10,11],below:[56,57,7,41,43,58,61,44,29,8,67,9,81,10,20,48,69,33,34,50,17,36,37,77,78,79,80,19,11,82,22],limit:[56,0,3,4,42,5,58,57,59,61,28,85,66,45,10,20,12,46,48,15,69,33,34,35,50,36,37,77,78,80,54,11,38,21],indefinit:[37,84],"8e950e3cec6854b0181fbc3a6058657701f2d458":43,lvm:[36,23,37,85,48,79,80,43,58,69,55,38,34,84,11],vol_metadata:36,start_t:58,trail:[71,72,5,49,34,16,61,20],gnt_node:3,"3mb":0,ssconf_online_nod:8,"catch":5,weakli:48,multip:69,astng:24,pin:[34,67,50,11,74],"int":[5,58,77,69,34],ganeti_instance_nic0_ip:2,your_gatewai:55,opbackupexport:[0,61,78],pid:[12,34,68,37,78],meaningless:69,"_jobqueuework":[65,78],twist:[34,42,80],jessi:67,implement:[56,73,0,23,2,3,4,41,42,58,57,69,25,26,27,83,1,60,61,28,62,29,30,63,64,66,67,44,45,68,40,20,12,46,31,13,15,54,49,33,34,16,50,17,36,18,71,72,37,74,75,76,77,78,79,80,53,51,11,82,38,22,84,85,7],ini:[21,28],xyz_filename_extens:5,luinstancecr:34,op_group_add:2,flight:[0,69],ing:[34,58],a1aa:43,probabl:[30,37,41,78,79,80,38,21,50,17],otherwis:[56,0,23,3,4,43,58,59,6,28,65,9,67,20,82,48,15,34,16,5,37,77,78,79,80,81,69,55,38,84],stopinst:78,mutual:[6,79,80],nic_typ:8,quot:5,getnodelist:79,acloc:34,guidanc:29,vol_siz:36,boot:[56,51,8,37,80,43,67,0,55,34,68],gitori:34,virtual:[56,0,2,3,58,57,61,37,28,29,30,64,11,46,14,15,34,50,36,73,74,77,78,79,80,51,69,55,21],expr2:5,ssconf:[23,37,2,3,77,79,80,53,9,38,34],expr1:5,bool:[33,5,58,69],futur:[56,39,23,3,24,58,0,1,61,28,8,63,85,66,44,68,20,31,41,32,33,34,16,35,17,18,37,77,78,79,80,53,19,11,38,21,84],branch:[34,4],varieti:[34,0,23,35],hpc:24,lc_all:34,haskell2010:5,opinstancecr:[40,78,80,34,83,61],instance_diskn_mod:2,fmem:69,stat:[38,34,16],dismiss:35,prealloc:34,opqueryfield:34,lunodeadd:3,setinfo:36,on_crash:57,tdsk:69,op_cluster_set_param:2,throughout:36,end_t:58,debian:[56,8,2,64,24,67,79,43,58,19,55,34,68],e1000:34,experienc:[29,67],qdisc:55,sphinx:[34,24],"__acquire_inn":83,"0x2350d70":58,reliabl:[0,23,37,48,4,80,54,15,34],collis:34,rule:[56,36,30,0,23,18,43,37,2,48,78,80,5,8,55,22,83,20],cpu:[0,2,43,58,25,61,28,30,67,10,69,82,48,14,34,16,50,51,74,77,37,11,55,21],unknown_ent:58,portion:[62,32,28],lift:[34,67,4],status:80,auxiliari:68,opmodifyinst:80,keycertsign:44,understand:[32,41,78,13,5,16,80,69],decemb:55,invari:[34,0]},objtypes:{},titles:["Instance move improvements","Design document drafts","Ganeti customisation using hooks","Improvements of Node Security","Multi-version tests","Code style guide","Merging clusters","Moving instances accross node groups","Upgrade notes","Design for adding a node to a cluster","HSqueeze tool","Partitioned Ganeti","KVM daemon","Design for replacing Ganeti’s HTTP server","Taking relative CPU speed into account","Design for virtual clusters support","Ganeti monitoring agent","HRoller tool","Network management","Cluster Keys Replacement","Filtering of jobs for the Ganeti job queue","OVF converter","Security in Ganeti","Ganeti daemons refactoring","Developer notes","Ganeti 2.12 design","Ganeti 2.11 design","Ganeti 2.10 design","Ganeti Instance Import/Export using Open Virtualization Format","Welcome to Ganeti’s documentation!","Hotplug","RADOS/Ceph support in Ganeti","Unit tests for cmdlib / LogicalUnit’s","Query version 2 design","News","Submitting jobs from logical units","Ganeti shared storage support","Ganeti administrator’s guide","GlusterFS Ganeti support","Performance tests for QA","Ganeti Bulk Create","Linux HA integration","Chained jobs","Ganeti walk-through","Design for a X509 Certificate Authority","Disks","Virtual cluster support","<tt class=\"docutils literal docutils literal\"><span class=\"pre\">/</span></tt>","Synchronising htools to Ganeti 2.3","Ganeti reason trail","Ganeti CPU Pinning","Glossary","Design for executing commands via RPC","Design for supporting custom SSH ports for nodes","Splitting the query and job execution paths","Ganeti installation tutorial","Ganeti OS installation redesign","Detection of user-initiated shutdown from inside an instance","Ganeti remote API","Ganeti Node OOB Management Framework","Design for adding UUID and name to devices","Design for import/export version 2","Huge Pages Support for Ganeti","Automatized Upgrade Procedure for Ganeti","File-based Storage","Ganeti locking","Support for Open vSwitch","Ganeti quick installation guide","Systemd integration","Resource model changes","Man pages","Ganeti 2.9 design","Ganeti 2.8 design","Ganeti 2.7 design","Ganeti 2.6 design","Ganeti 2.5 design","Ganeti 2.4 design","Ganeti 2.3 design","Ganeti 2.2 design","Ganeti 2.1 design","Ganeti 2.0 design","Moving instances between clusters","Ganeti automatic instance allocation","Design for parallelized instance creations and opportunistic locking","Instance auto-repair","Management of storage types and disk templates, incl. storage space reporting"],objnames:{},filenames:["design-move-instance-improvements","design-draft","hooks","design-node-security","design-multi-version-tests","dev-codestyle","cluster-merge","design-multi-reloc","upgrade","design-node-add","design-hsqueeze","design-partitioned","design-kvmd","design-http-server","design-cpu-speed","design-virtual-clusters","design-monitoring-agent","design-hroller","design-network","cluster-keys-replacement","design-optables","ovfconverter","security","design-daemons","devnotes","design-2.12","design-2.11","design-2.10","design-ovf-support","index","design-hotplug","design-ceph-ganeti-support","design-cmdlib-unittests","design-query2","news","design-lu-generated-jobs","design-shared-storage","admin","design-glusterfs-ganeti-support","design-performance-tests","design-bulk-create","design-linuxha","design-chained-jobs","walkthrough","design-x509-ca","design-disks","virtual-cluster","monitoring-query-format","design-htools-2.3","design-reason-trail","design-cpu-pinning","glossary","design-restricted-commands","design-ssh-ports","design-query-splitting","install","design-os","design-internal-shutdown","rapi","design-oob","design-device-uuid-name","design-impexp2","design-hugepages-support","design-upgrade","design-file-based-storage","locking","design-openvswitch","install-quick","design-systemd","design-resource-model","manpages","design-2.9","design-2.8","design-2.7","design-2.6","design-2.5","design-2.4","design-2.3","design-2.2","design-2.1","design-2.0","move-instance","iallocator","design-opportunistic-locking","design-autorepair","design-storagetypes"]})
\ No newline at end of file
diff -Nru ganeti-2.12.0/doc/html/security.html ganeti-2.12.3/doc/html/security.html
--- ganeti-2.12.0/doc/html/security.html	2014-10-10 11:56:59.000000000 +0300
+++ ganeti-2.12.3/doc/html/security.html	2015-04-29 11:14:23.000000000 +0300
@@ -8,7 +8,7 @@
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     
-    <title>Security in Ganeti — Ganeti 2.12.0 documentation</title>
+    <title>Security in Ganeti — Ganeti 2.12.3 documentation</title>
     
     <link rel="stylesheet" href="_static/style.css" type="text/css" />
     <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
@@ -16,7 +16,7 @@
     <script type="text/javascript">
       var DOCUMENTATION_OPTIONS = {
         URL_ROOT:    '',
-        VERSION:     '2.12.0',
+        VERSION:     '2.12.3',
         COLLAPSE_INDEX: false,
         FILE_SUFFIX: '.html',
         HAS_SOURCE:  true
@@ -25,7 +25,7 @@
     <script type="text/javascript" src="_static/jquery.js"></script>
     <script type="text/javascript" src="_static/underscore.js"></script>
     <script type="text/javascript" src="_static/doctools.js"></script>
-    <link rel="top" title="Ganeti 2.12.0 documentation" href="index.html" />
+    <link rel="top" title="Ganeti 2.12.3 documentation" href="index.html" />
     <link rel="next" title="Upgrade notes" href="upgrade.html" />
     <link rel="prev" title="Ganeti remote API" href="rapi.html" /> 
   </head>
@@ -39,7 +39,7 @@
         <li class="right" >
           <a href="rapi.html" title="Ganeti remote API"
              accesskey="P">previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>  
 
@@ -324,7 +324,7 @@
         <li class="right" >
           <a href="rapi.html" title="Ganeti remote API"
              >previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>
     <div class="footer">
diff -Nru ganeti-2.12.0/doc/html/_sources/admin.txt ganeti-2.12.3/doc/html/_sources/admin.txt
--- ganeti-2.12.0/doc/html/_sources/admin.txt	2014-10-10 11:56:40.000000000 +0300
+++ ganeti-2.12.3/doc/html/_sources/admin.txt	2015-04-29 11:14:04.000000000 +0300
@@ -1555,7 +1555,7 @@
 Note that the set of characters present in a tag and the maximum tag
 length are restricted. Currently the maximum length is 128 characters,
 there can be at most 4096 tags per object, and the set of characters is
-comprised by alphanumeric characters and additionally ``.+*/:@-``.
+comprised by alphanumeric characters and additionally ``.+*/:@-_``.
 
 Operations
 ++++++++++
diff -Nru ganeti-2.12.0/doc/html/_sources/design-daemons.txt ganeti-2.12.3/doc/html/_sources/design-daemons.txt
--- ganeti-2.12.0/doc/html/_sources/design-daemons.txt	2014-10-10 11:56:40.000000000 +0300
+++ ganeti-2.12.3/doc/html/_sources/design-daemons.txt	2015-04-29 11:14:04.000000000 +0300
@@ -175,7 +175,7 @@
 
 ``Configuration query daemon (RConfD)``
   It is written in Haskell, and it corresponds to the old ConfD. It will run on
-  all the master candidates and it will serve information about the the static
+  all the master candidates and it will serve information about the static
   configuration of the cluster (the one contained in ``config.data``). The
   provided information will be highly available (as in: a response will be
   available as long as a stable-enough connection between the client and at
@@ -351,12 +351,12 @@
 #. Only then the child process can replace itself by the actual job
    process.
 
-If the child process detect that the pipe is broken before receiving the
+If the child process detects that the pipe is broken before receiving the
 confirmation, it must terminate, not starting the actual job.
-This way, the actual job is only started if its ensured that its lock
+This way, the actual job is only started if it is ensured that its lock
 file name is written to the job file.
 
-If the Luxi daemon detect that the pipe is broken before successfully
+If the Luxi daemon detects that the pipe is broken before successfully
 sending the confirmation in step 4., it assumes that the job has failed.
 If the pipe gets broken after sending the confirmation, no further
 action is necessary. If the child doesn't receive the confirmation,
@@ -436,16 +436,10 @@
      methods to WConfD.
 
 Step 3:
-  #. Remove WConfD's RPC functions for obtaining/releasing the single
-     internal lock from Step 1.
-  #. Remove WConfD's RPC functions for sending/receiving the whole
-     configuration from Step 1.
+  In a later step, the impact of the config lock will be reduced by moving
+  it more and more into an internal detail of WConfD. This process will be
+  detailed in a forthcoming design document.
 
-Future aims:
-
--  Optionally refactor the RPC calls to reduce their number or improve their
-   efficiency (for example by obtaining a larger set of data instead of
-   querying items one by one).
 
 Locking
 +++++++
@@ -552,7 +546,7 @@
 in the queue. This is race free, as LuxiD will no longer touch the job file,
 once the job is started; a corollary of this is that the job also has to
 take care of replicating updates to the job file. LuxiD will watch job files for
-changes to determine when a job as cleanly finished. To determine jobs
+changes to determine when a job was cleanly finished. To determine jobs
 that died without having the chance of updating the job file, the `Job death
 detection`_ mechanism will be used.
 
diff -Nru ganeti-2.12.0/doc/html/_sources/design-file-based-storage.txt ganeti-2.12.3/doc/html/_sources/design-file-based-storage.txt
--- ganeti-2.12.0/doc/html/_sources/design-file-based-storage.txt	2014-10-10 11:56:40.000000000 +0300
+++ ganeti-2.12.3/doc/html/_sources/design-file-based-storage.txt	2015-04-29 11:14:04.000000000 +0300
@@ -21,7 +21,7 @@
 
 * reuse existing image files
 
-* allow Ganeti to initalize the cluster without checking for a volume
+* allow Ganeti to initialize the cluster without checking for a volume
   group (e.g. xenvg)
 
 Non Goals:
@@ -267,7 +267,7 @@
 Provided "dump/restore" is used in the "export" and "import" guest-os
 scripts, there are no modifications needed when file-based instances are
 exported/imported. If any other backup-tool (which requires access to
-the mounted file-system) is used then the image file can be temporaily
+the mounted file-system) is used then the image file can be temporarily
 mounted. This can be done in different ways:
 
 Mount a raw image file via loopback driver::
diff -Nru ganeti-2.12.0/doc/html/_sources/design-storagetypes.txt ganeti-2.12.3/doc/html/_sources/design-storagetypes.txt
--- ganeti-2.12.0/doc/html/_sources/design-storagetypes.txt	2014-10-10 11:56:40.000000000 +0300
+++ ganeti-2.12.3/doc/html/_sources/design-storagetypes.txt	2015-04-29 11:14:04.000000000 +0300
@@ -9,7 +9,7 @@
 
 Currently, there is no consistent management of different variants of storage
 in Ganeti. One direct consequence is that storage space reporting is currently
-broken for all storage that is not based on lvm technolgy. This design looks at
+broken for all storage that is not based on lvm technology. This design looks at
 the root causes and proposes a way to fix it.
 
 Proposed changes
@@ -233,7 +233,7 @@
 extended storage reporting capabilities. The user can specify a storage
 type using ``--storage-type``. If he requests storage information about
 a storage type which does not support space reporting, a warning is
-emitted. If no storage type is specified explicitely, ``gnt-node
+emitted. If no storage type is specified explicitly, ``gnt-node
 list-storage`` will try to report storage on the storage type of the
 default disk template. If the default disk template's storage type does
 not support space reporting, an error message is emitted.
diff -Nru ganeti-2.12.0/doc/html/_sources/install.txt ganeti-2.12.3/doc/html/_sources/install.txt
--- ganeti-2.12.0/doc/html/_sources/install.txt	2014-10-10 11:56:40.000000000 +0300
+++ ganeti-2.12.3/doc/html/_sources/install.txt	2015-04-29 11:14:04.000000000 +0300
@@ -286,9 +286,11 @@
 
    Then to configure it for Ganeti::
 
-     $ echo drbd minor_count=128 usermode_helper=/bin/true >> /etc/modules
+     $ echo "options drbd minor_count=128 usermode_helper=/bin/true" \
+        > /etc/modprobe.d/drbd.conf
+     $ echo "drbd" >> /etc/modules
      $ depmod -a
-     $ modprobe drbd minor_count=128 usermode_helper=/bin/true
+     $ modprobe drbd
 
    It is also recommended that you comment out the default resources (if any)
    in the ``/etc/drbd.conf`` file, so that the init script doesn't try to
@@ -612,7 +614,7 @@
 **Mandatory** on all nodes.
 
 It's now time to install the Ganeti software itself.  Download the
-source from the project page at `<http://code.google.com/p/ganeti/>`_,
+source from the project page at `<http://downloads.ganeti.org/releases/>`_,
 and install it (replace 2.6.0 with the latest version)::
 
   $ tar xvzf ganeti-%2.6.0%.tar.gz
diff -Nru ganeti-2.12.0/doc/html/_sources/news.txt ganeti-2.12.3/doc/html/_sources/news.txt
--- ganeti-2.12.0/doc/html/_sources/news.txt	2014-10-10 11:56:40.000000000 +0300
+++ ganeti-2.12.3/doc/html/_sources/news.txt	2015-04-29 11:14:04.000000000 +0300
@@ -5,6 +5,123 @@
 ====
 
 
+Version 2.12.3
+--------------
+
+*(Released Wed, 29 Apr 2015)*
+
+- Fixed Issue #1019: upgrade from 2.6.2 to 2.12 fails. cfgupgrade
+  doesn't migrate the config.data file properly
+- Fixed Issue 1023: Master master-capable option bug
+- Fixed Issue 1068: gnt-network info outputs wrong external reservations
+- Fixed Issue 1070: Upgrade of Ganeti 2.5.2 to 2.12.0 fails due to
+  missing UUIDs for disks
+- Fixed Issue 1073: ssconf_hvparams_* not distributed with ssconf
+
+Inherited from the 2.11 branch:
+
+- Fixed Issue 1032: Renew-crypto --new-node-certificates sometimes does not
+  complete.
+  The operation 'gnt-cluster renew-crypto --new-node-certificates' is
+  now more robust against intermitten reachability errors. Nodes that
+  are temporarily not reachable, are contacted with several retries.
+  Nodes which are marked as offline are omitted right away.
+
+Inherited from the 2.10 branch:
+
+- Fixed Issue 1057: master-failover succeeds, but IP remains assigned to
+  old master
+- Fixed Issue 1058: Python's os.minor() does not support devices with
+  high minor numbers
+- Fixed Issue 1059: Luxid fails if DNS returns an IPv6 address that does
+  not reverse resolve
+
+Known issues
+~~~~~~~~~~~~
+
+Pending since 2.12.2:
+
+- GHC 7.8 introduced some incompatible changes, so currently Ganeti
+  2.12. doesn't compile on GHC 7.8
+- Under certain conditions instance doesn't get unpaused after live
+  migration (issue #1050)
+- GlusterFS support breaks at upgrade to 2.12 - switches back to
+  shared-file (issue #1030)
+
+
+Version 2.12.2
+--------------
+
+*(Released Wed, 25 Mar 2015)*
+
+- Support for the lens Haskell library up to version 4.7 (issue #1028)
+- SSH keys are now distributed only to master and master candidates
+  (issue #377)
+- Improved performance for operations that frequently read the
+  cluster configuration
+- Improved robustness of spawning job processes that occasionally caused
+  newly-started jobs to timeout
+- Fixed race condition during cluster verify which occasionally caused
+  it to fail
+
+Inherited from the 2.11 branch:
+
+- Fix failing automatic glusterfs mounts (issue #984)
+- Fix watcher failing to read its status file after an upgrade
+  (issue #1022)
+- Improve Xen instance state handling, in particular of somewhat exotic
+  transitional states
+
+Inherited from the 2.10 branch:
+
+- Fix failing to change a diskless drbd instance to plain
+  (issue #1036)
+- Fixed issues with auto-upgrades from pre-2.6
+  (hv_state_static and disk_state_static)
+- Fix memory leak in the monitoring daemon
+
+Inherited from the 2.9 branch:
+
+- Fix file descriptor leak in Confd client
+
+Known issues
+~~~~~~~~~~~~
+
+- GHC 7.8 introduced some incompatible changes, so currently Ganeti
+  2.12. doesn't compile on GHC 7.8
+- Under certain conditions instance doesn't get unpaused after live
+  migration (issue #1050)
+- GlusterFS support breaks at upgrade to 2.12 - switches back to
+  shared-file (issue #1030)
+
+
+Version 2.12.1
+--------------
+
+*(Released Wed, 14 Jan 2015)*
+
+- Fix users under which the wconfd and metad daemons run (issue #976)
+- Clean up stale livelock files (issue #865)
+- Fix setting up the metadata daemon's network interface for Xen
+- Make watcher identify itself on disk activation
+- Add "ignore-ipolicy" option to gnt-instance grow-disk
+- Check disk size ipolicy during "gnt-instance grow-disk" (issue #995)
+
+Inherited from the 2.11 branch:
+
+- Fix counting votes when doing master failover (issue #962)
+- Fix broken haskell dependencies (issues #758 and #912)
+- Check if IPv6 is used directly when running SSH (issue #892)
+
+Inherited from the 2.10 branch:
+
+- Fix typo in gnt_cluster output (issue #1015)
+- Use the Python path detected at configure time in the top-level Python
+  scripts.
+- Fix check for sphinx-build from python2-sphinx
+- Properly check if an instance exists in 'gnt-instance console'
+
+
 Version 2.12.0
 --------------
 
@@ -176,6 +293,17 @@
 are listed in the latest 2.12 entry.
 
 
+Version 2.11.7
+--------------
+
+*(Released Fri, 17 Apr 2015)*
+
+- The operation 'gnt-cluster renew-crypto --new-node-certificates' is
+  now more robust against intermitten reachability errors. Nodes that
+  are temporarily not reachable, are contacted with several retries.
+  Nodes which are marked as offline are omitted right away.
+
+
 Version 2.11.6
 --------------
 
diff -Nru ganeti-2.12.0/doc/html/upgrade.html ganeti-2.12.3/doc/html/upgrade.html
--- ganeti-2.12.0/doc/html/upgrade.html	2014-10-10 11:56:59.000000000 +0300
+++ ganeti-2.12.3/doc/html/upgrade.html	2015-04-29 11:14:23.000000000 +0300
@@ -8,7 +8,7 @@
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     
-    <title>Upgrade notes — Ganeti 2.12.0 documentation</title>
+    <title>Upgrade notes — Ganeti 2.12.3 documentation</title>
     
     <link rel="stylesheet" href="_static/style.css" type="text/css" />
     <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
@@ -16,7 +16,7 @@
     <script type="text/javascript">
       var DOCUMENTATION_OPTIONS = {
         URL_ROOT:    '',
-        VERSION:     '2.12.0',
+        VERSION:     '2.12.3',
         COLLAPSE_INDEX: false,
         FILE_SUFFIX: '.html',
         HAS_SOURCE:  true
@@ -25,7 +25,7 @@
     <script type="text/javascript" src="_static/jquery.js"></script>
     <script type="text/javascript" src="_static/underscore.js"></script>
     <script type="text/javascript" src="_static/doctools.js"></script>
-    <link rel="top" title="Ganeti 2.12.0 documentation" href="index.html" />
+    <link rel="top" title="Ganeti 2.12.3 documentation" href="index.html" />
     <link rel="next" title="Virtual cluster support" href="virtual-cluster.html" />
     <link rel="prev" title="Security in Ganeti" href="security.html" /> 
   </head>
@@ -39,7 +39,7 @@
         <li class="right" >
           <a href="security.html" title="Security in Ganeti"
              accesskey="P">previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>  
 
@@ -574,7 +574,7 @@
         <li class="right" >
           <a href="security.html" title="Security in Ganeti"
              >previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>
     <div class="footer">
diff -Nru ganeti-2.12.0/doc/html/virtual-cluster.html ganeti-2.12.3/doc/html/virtual-cluster.html
--- ganeti-2.12.0/doc/html/virtual-cluster.html	2014-10-10 11:56:59.000000000 +0300
+++ ganeti-2.12.3/doc/html/virtual-cluster.html	2015-04-29 11:14:23.000000000 +0300
@@ -8,7 +8,7 @@
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     
-    <title>Virtual cluster support — Ganeti 2.12.0 documentation</title>
+    <title>Virtual cluster support — Ganeti 2.12.3 documentation</title>
     
     <link rel="stylesheet" href="_static/style.css" type="text/css" />
     <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
@@ -16,7 +16,7 @@
     <script type="text/javascript">
       var DOCUMENTATION_OPTIONS = {
         URL_ROOT:    '',
-        VERSION:     '2.12.0',
+        VERSION:     '2.12.3',
         COLLAPSE_INDEX: false,
         FILE_SUFFIX: '.html',
         HAS_SOURCE:  true
@@ -25,7 +25,7 @@
     <script type="text/javascript" src="_static/jquery.js"></script>
     <script type="text/javascript" src="_static/underscore.js"></script>
     <script type="text/javascript" src="_static/doctools.js"></script>
-    <link rel="top" title="Ganeti 2.12.0 documentation" href="index.html" />
+    <link rel="top" title="Ganeti 2.12.3 documentation" href="index.html" />
     <link rel="next" title="Ganeti walk-through" href="walkthrough.html" />
     <link rel="prev" title="Upgrade notes" href="upgrade.html" /> 
   </head>
@@ -39,7 +39,7 @@
         <li class="right" >
           <a href="upgrade.html" title="Upgrade notes"
              accesskey="P">previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>  
 
@@ -214,7 +214,7 @@
         <li class="right" >
           <a href="upgrade.html" title="Upgrade notes"
              >previous</a> |</li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>
     <div class="footer">
diff -Nru ganeti-2.12.0/doc/html/walkthrough.html ganeti-2.12.3/doc/html/walkthrough.html
--- ganeti-2.12.0/doc/html/walkthrough.html	2014-10-10 11:56:59.000000000 +0300
+++ ganeti-2.12.3/doc/html/walkthrough.html	2015-04-29 11:14:24.000000000 +0300
@@ -8,7 +8,7 @@
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     
-    <title>Ganeti walk-through — Ganeti 2.12.0 documentation</title>
+    <title>Ganeti walk-through — Ganeti 2.12.3 documentation</title>
     
     <link rel="stylesheet" href="_static/style.css" type="text/css" />
     <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
@@ -16,7 +16,7 @@
     <script type="text/javascript">
       var DOCUMENTATION_OPTIONS = {
         URL_ROOT:    '',
-        VERSION:     '2.12.0',
+        VERSION:     '2.12.3',
         COLLAPSE_INDEX: false,
         FILE_SUFFIX: '.html',
         HAS_SOURCE:  true
@@ -25,7 +25,7 @@
     <script type="text/javascript" src="_static/jquery.js"></script>
     <script type="text/javascript" src="_static/underscore.js"></script>
     <script type="text/javascript" src="_static/doctools.js"></script>
-    <link rel="top" title="Ganeti 2.12.0 documentation" href="index.html" />
+    <link rel="top" title="Ganeti 2.12.3 documentation" href="index.html" />
     <link rel="prev" title="Virtual cluster support" href="virtual-cluster.html" /> 
   </head>
   <body>
@@ -35,7 +35,7 @@
         <li class="right" style="margin-right: 10px">
           <a href="virtual-cluster.html" title="Virtual cluster support"
              accesskey="P">previous</a></li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>  
 
@@ -1197,7 +1197,7 @@
         <li class="right" style="margin-right: 10px">
           <a href="virtual-cluster.html" title="Virtual cluster support"
              >previous</a></li>
-        <li><a href="index.html">Ganeti 2.12.0 documentation</a> »</li> 
+        <li><a href="index.html">Ganeti 2.12.3 documentation</a> »</li> 
       </ul>
     </div>
     <div class="footer">
diff -Nru ganeti-2.12.0/doc/install.rst ganeti-2.12.3/doc/install.rst
--- ganeti-2.12.0/doc/install.rst	2014-10-06 18:10:35.000000000 +0300
+++ ganeti-2.12.3/doc/install.rst	2015-04-22 20:10:50.000000000 +0300
@@ -286,9 +286,11 @@
 
    Then to configure it for Ganeti::
 
-     $ echo drbd minor_count=128 usermode_helper=/bin/true >> /etc/modules
+     $ echo "options drbd minor_count=128 usermode_helper=/bin/true" \
+        > /etc/modprobe.d/drbd.conf
+     $ echo "drbd" >> /etc/modules
      $ depmod -a
-     $ modprobe drbd minor_count=128 usermode_helper=/bin/true
+     $ modprobe drbd
 
    It is also recommended that you comment out the default resources (if any)
    in the ``/etc/drbd.conf`` file, so that the init script doesn't try to
@@ -612,7 +614,7 @@
 **Mandatory** on all nodes.
 
 It's now time to install the Ganeti software itself.  Download the
-source from the project page at `<http://code.google.com/p/ganeti/>`_,
+source from the project page at `<http://downloads.ganeti.org/releases/>`_,
 and install it (replace 2.6.0 with the latest version)::
 
   $ tar xvzf ganeti-%2.6.0%.tar.gz
diff -Nru ganeti-2.12.0/doc/news.rst ganeti-2.12.3/doc/news.rst
--- ganeti-2.12.0/doc/news.rst	2014-10-10 11:52:19.000000000 +0300
+++ ganeti-2.12.3/doc/news.rst	2015-04-29 11:09:44.000000000 +0300
@@ -5,6 +5,123 @@
 ====
 
 
+Version 2.12.3
+--------------
+
+*(Released Wed, 29 Apr 2015)*
+
+- Fixed Issue #1019: upgrade from 2.6.2 to 2.12 fails. cfgupgrade
+  doesn't migrate the config.data file properly
+- Fixed Issue 1023: Master master-capable option bug
+- Fixed Issue 1068: gnt-network info outputs wrong external reservations
+- Fixed Issue 1070: Upgrade of Ganeti 2.5.2 to 2.12.0 fails due to
+  missing UUIDs for disks
+- Fixed Issue 1073: ssconf_hvparams_* not distributed with ssconf
+
+Inherited from the 2.11 branch:
+
+- Fixed Issue 1032: Renew-crypto --new-node-certificates sometimes does not
+  complete.
+  The operation 'gnt-cluster renew-crypto --new-node-certificates' is
+  now more robust against intermitten reachability errors. Nodes that
+  are temporarily not reachable, are contacted with several retries.
+  Nodes which are marked as offline are omitted right away.
+
+Inherited from the 2.10 branch:
+
+- Fixed Issue 1057: master-failover succeeds, but IP remains assigned to
+  old master
+- Fixed Issue 1058: Python's os.minor() does not support devices with
+  high minor numbers
+- Fixed Issue 1059: Luxid fails if DNS returns an IPv6 address that does
+  not reverse resolve
+
+Known issues
+~~~~~~~~~~~~
+
+Pending since 2.12.2:
+
+- GHC 7.8 introduced some incompatible changes, so currently Ganeti
+  2.12. doesn't compile on GHC 7.8
+- Under certain conditions instance doesn't get unpaused after live
+  migration (issue #1050)
+- GlusterFS support breaks at upgrade to 2.12 - switches back to
+  shared-file (issue #1030)
+
+
+Version 2.12.2
+--------------
+
+*(Released Wed, 25 Mar 2015)*
+
+- Support for the lens Haskell library up to version 4.7 (issue #1028)
+- SSH keys are now distributed only to master and master candidates
+  (issue #377)
+- Improved performance for operations that frequently read the
+  cluster configuration
+- Improved robustness of spawning job processes that occasionally caused
+  newly-started jobs to timeout
+- Fixed race condition during cluster verify which occasionally caused
+  it to fail
+
+Inherited from the 2.11 branch:
+
+- Fix failing automatic glusterfs mounts (issue #984)
+- Fix watcher failing to read its status file after an upgrade
+  (issue #1022)
+- Improve Xen instance state handling, in particular of somewhat exotic
+  transitional states
+
+Inherited from the 2.10 branch:
+
+- Fix failing to change a diskless drbd instance to plain
+  (issue #1036)
+- Fixed issues with auto-upgrades from pre-2.6
+  (hv_state_static and disk_state_static)
+- Fix memory leak in the monitoring daemon
+
+Inherited from the 2.9 branch:
+
+- Fix file descriptor leak in Confd client
+
+Known issues
+~~~~~~~~~~~~
+
+- GHC 7.8 introduced some incompatible changes, so currently Ganeti
+  2.12. doesn't compile on GHC 7.8
+- Under certain conditions instance doesn't get unpaused after live
+  migration (issue #1050)
+- GlusterFS support breaks at upgrade to 2.12 - switches back to
+  shared-file (issue #1030)
+
+
+Version 2.12.1
+--------------
+
+*(Released Wed, 14 Jan 2015)*
+
+- Fix users under which the wconfd and metad daemons run (issue #976)
+- Clean up stale livelock files (issue #865)
+- Fix setting up the metadata daemon's network interface for Xen
+- Make watcher identify itself on disk activation
+- Add "ignore-ipolicy" option to gnt-instance grow-disk
+- Check disk size ipolicy during "gnt-instance grow-disk" (issue #995)
+
+Inherited from the 2.11 branch:
+
+- Fix counting votes when doing master failover (issue #962)
+- Fix broken haskell dependencies (issues #758 and #912)
+- Check if IPv6 is used directly when running SSH (issue #892)
+
+Inherited from the 2.10 branch:
+
+- Fix typo in gnt_cluster output (issue #1015)
+- Use the Python path detected at configure time in the top-level Python
+  scripts.
+- Fix check for sphinx-build from python2-sphinx
+- Properly check if an instance exists in 'gnt-instance console'
+
+
 Version 2.12.0
 --------------
 
@@ -176,6 +293,17 @@
 are listed in the latest 2.12 entry.
 
 
+Version 2.11.7
+--------------
+
+*(Released Fri, 17 Apr 2015)*
+
+- The operation 'gnt-cluster renew-crypto --new-node-certificates' is
+  now more robust against intermitten reachability errors. Nodes that
+  are temporarily not reachable, are contacted with several retries.
+  Nodes which are marked as offline are omitted right away.
+
+
 Version 2.11.6
 --------------
 
diff -Nru ganeti-2.12.0/lib/backend.py ganeti-2.12.3/lib/backend.py
--- ganeti-2.12.0/lib/backend.py	2014-10-09 14:57:28.000000000 +0300
+++ ganeti-2.12.3/lib/backend.py	2015-04-29 11:09:35.000000000 +0300
@@ -575,6 +575,7 @@
     logging.exception("Error while removing cluster secrets")
 
   utils.StopDaemon(constants.CONFD)
+  utils.StopDaemon(constants.MOND)
   utils.StopDaemon(constants.KVMD)
 
   # Raise a custom exception (handled in ganeti-noded)
diff -Nru ganeti-2.12.0/lib/bootstrap.py ganeti-2.12.3/lib/bootstrap.py
--- ganeti-2.12.0/lib/bootstrap.py	2014-10-09 14:57:28.000000000 +0300
+++ ganeti-2.12.3/lib/bootstrap.py	2015-04-29 11:09:35.000000000 +0300
@@ -262,10 +262,11 @@
                              " %s seconds" % _DAEMON_READY_TIMEOUT)
 
 
-def _WaitForSshDaemon(hostname, port, family):
+def _WaitForSshDaemon(hostname, port):
   """Wait for SSH daemon to become responsive.
 
   """
+  family = ssconf.SimpleStore().GetPrimaryIPFamily()
   hostip = netutils.GetHostname(name=hostname, family=family).ip
 
   def _CheckSshDaemon():
@@ -345,9 +346,7 @@
   if port is None:
     port = netutils.GetDaemonPort(constants.SSH)
 
-  family = ssconf.SimpleStore().GetPrimaryIPFamily()
-  srun = ssh.SshRunner(cluster_name,
-                       ipv6=(family == netutils.IP6Address.family))
+  srun = ssh.SshRunner(cluster_name)
   scmd = srun.BuildCmd(node, constants.SSH_LOGIN_USER,
                        utils.ShellQuoteArgs(
                            utils.ShellCombineCommands(all_cmds)),
@@ -369,7 +368,7 @@
     raise errors.OpExecError("Command '%s' failed: %s" %
                              (result.cmd, result.fail_reason))
 
-  _WaitForSshDaemon(node, port, family)
+  _WaitForSshDaemon(node, port)
 
 
 def _InitFileStorageDir(file_storage_dir):
@@ -1010,6 +1009,7 @@
   @param no_voting: force the operation without remote nodes agreement
                       (dangerous)
 
+  @returns: the pair of an exit code and warnings to display
   """
   sstore = ssconf.SimpleStore()
 
@@ -1050,6 +1050,7 @@
   # end checks
 
   rcode = 0
+  warnings = []
 
   logging.info("Setting master to %s, old master: %s", new_master, old_master)
 
@@ -1103,24 +1104,30 @@
 
     msg = result.fail_msg
     if msg:
-      logging.warning("Could not disable the master IP: %s", msg)
+      warning = "Could not disable the master IP: %s" % (msg,)
+      logging.warning("%s", warning)
+      warnings.append(warning)
 
     result = runner.call_node_stop_master(old_master)
     msg = result.fail_msg
     if msg:
-      logging.error("Could not disable the master role on the old master"
-                    " %s, please disable manually: %s", old_master, msg)
+      warning = ("Could not disable the master role on the old master"
+                 " %s, please disable manually: %s" % (old_master, msg))
+      logging.error("%s", warning)
+      warnings.append(warning)
   except errors.ConfigurationError, err:
     logging.error("Error while trying to set the new master: %s",
                   str(err))
-    return 1
+    return 1, warnings
   finally:
     # stop WConfd again:
     result = utils.RunCmd([pathutils.DAEMON_UTIL, "stop", constants.WCONFD])
     if result.failed:
-      logging.error("Could not stop the configuration daemon,"
-                    " command %s had exitcode %s and error %s",
-                    result.cmd, result.exit_code, result.output)
+      warning = ("Could not stop the configuration daemon,"
+                 " command %s had exitcode %s and error %s"
+                 % (result.cmd, result.exit_code, result.output))
+      logging.error("%s", warning)
+      rcode = 1
 
   logging.info("Checking master IP non-reachability...")
 
@@ -1128,16 +1135,19 @@
   total_timeout = 30
 
   # Here we have a phase where no master should be running
-  def _check_ip():
-    if netutils.TcpPing(master_ip, constants.DEFAULT_NODED_PORT):
+  def _check_ip(expected):
+    if netutils.TcpPing(master_ip, constants.DEFAULT_NODED_PORT) != expected:
       raise utils.RetryAgain()
 
   try:
-    utils.Retry(_check_ip, (1, 1.5, 5), total_timeout)
+    utils.Retry(_check_ip, (1, 1.5, 5), total_timeout, args=[False])
   except utils.RetryTimeout:
-    logging.warning("The master IP is still reachable after %s seconds,"
-                    " continuing but activating the master on the current"
-                    " node will probably fail", total_timeout)
+    warning = ("The master IP is still reachable after %s seconds,"
+               " continuing but activating the master IP on the current"
+               " node will probably fail" % total_timeout)
+    logging.warning("%s", warning)
+    warnings.append(warning)
+    rcode = 1
 
   if jstore.CheckDrainFlag():
     logging.info("Undraining job queue")
@@ -1153,8 +1163,21 @@
                   " %s, please check: %s", new_master, msg)
     rcode = 1
 
+  # Finally verify that the new master managed to set up the master IP
+  # and warn if it didn't.
+  try:
+    utils.Retry(_check_ip, (1, 1.5, 5), total_timeout, args=[True])
+  except utils.RetryTimeout:
+    warning = ("The master IP did not come up within %s seconds; the"
+               " cluster should still be working and reachable via %s,"
+               " but not via the master IP address"
+               % (total_timeout, new_master))
+    logging.warning("%s", warning)
+    warnings.append(warning)
+    rcode = 1
+
   logging.info("Master failed over from %s to %s", old_master, new_master)
-  return rcode
+  return rcode, warnings
 
 
 def GetMaster():
@@ -1183,10 +1206,6 @@
   knows, whereas the number of entries in the list could be different
   (if some nodes vote for another master).
 
-  We remove ourselves from the list since we know that (bugs aside)
-  since we use the same source for configuration information for both
-  backend and boostrap, we'll always vote for ourselves.
-
   @type node_names: list
   @param node_names: the list of nodes to query for master info; the current
       node will be removed if it is in the list
@@ -1194,13 +1213,8 @@
   @return: list of (node, votes)
 
   """
-  myself = netutils.Hostname.GetSysName()
-  try:
-    node_names.remove(myself)
-  except ValueError:
-    pass
   if not node_names:
-    # no nodes left (eventually after removing myself)
+    # no nodes
     return []
   results = rpc.BootstrapRunner().call_master_node_name(node_names)
   if not isinstance(results, dict):
diff -Nru ganeti-2.12.0/lib/client/gnt_cluster.py ganeti-2.12.3/lib/client/gnt_cluster.py
--- ganeti-2.12.0/lib/client/gnt_cluster.py	2014-10-09 14:57:28.000000000 +0300
+++ ganeti-2.12.3/lib/client/gnt_cluster.py	2015-04-29 11:09:35.000000000 +0300
@@ -858,7 +858,10 @@
     if not AskUser(usertext):
       return 1
 
-  return bootstrap.MasterFailover(no_voting=opts.no_voting)
+  rvlaue, msgs = bootstrap.MasterFailover(no_voting=opts.no_voting)
+  for msg in msgs:
+    ToStderr(msg)
+  return rvlaue
 
 
 def MasterPing(opts, args):
@@ -2082,7 +2085,7 @@
   if not _RunCommandAndReport([pathutils.POST_UPGRADE, oldversion]):
     returnvalue = 1
 
-  ToStdout("Unpasuing the watcher.")
+  ToStdout("Unpausing the watcher.")
   if not _RunCommandAndReport(["gnt-cluster", "watcher", "continue"]):
     returnvalue = 1
 
diff -Nru ganeti-2.12.0/lib/client/gnt_instance.py ganeti-2.12.3/lib/client/gnt_instance.py
--- ganeti-2.12.0/lib/client/gnt_instance.py	2014-10-09 14:57:28.000000000 +0300
+++ ganeti-2.12.3/lib/client/gnt_instance.py	2015-04-29 11:09:35.000000000 +0300
@@ -608,7 +608,9 @@
   op = opcodes.OpInstanceGrowDisk(instance_name=instance,
                                   disk=disk, amount=amount,
                                   wait_for_sync=opts.wait_for_sync,
-                                  absolute=opts.absolute)
+                                  absolute=opts.absolute,
+                                  ignore_ipolicy=opts.ignore_ipolicy
+                                  )
   SubmitOrSend(op, opts)
   return 0
 
@@ -864,14 +866,17 @@
   cl = GetClient()
   try:
     cluster_name = cl.QueryConfigValues(["cluster_name"])[0]
-    ((console_data, oper_state), ) = \
-      cl.QueryInstances([instance_name], ["console", "oper_state"], False)
+    idata = cl.QueryInstances([instance_name], ["console", "oper_state"], False)
+    if not idata:
+      raise errors.OpPrereqError("Instance '%s' does not exist" % instance_name,
+                                 errors.ECODE_NOENT)
   finally:
     # Ensure client connection is closed while external commands are run
     cl.Close()
 
   del cl
 
+  ((console_data, oper_state), ) = idata
   if not console_data:
     if oper_state:
       # Instance is running
@@ -1638,7 +1643,8 @@
     GrowDisk,
     [ArgInstance(min=1, max=1), ArgUnknown(min=1, max=1),
      ArgUnknown(min=1, max=1)],
-    SUBMIT_OPTS + [NWSYNC_OPT, DRY_RUN_OPT, PRIORITY_OPT, ABSOLUTE_OPT],
+    SUBMIT_OPTS +
+    [NWSYNC_OPT, DRY_RUN_OPT, PRIORITY_OPT, ABSOLUTE_OPT, IGNORE_IPOLICY_OPT],
     "<instance> <disk> <size>", "Grow an instance's disk"),
   "change-group": (
     ChangeGroup, ARGS_ONE_INSTANCE,
diff -Nru ganeti-2.12.0/lib/client/gnt_network.py ganeti-2.12.3/lib/client/gnt_network.py
--- ganeti-2.12.0/lib/client/gnt_network.py	2014-10-07 17:45:37.000000000 +0300
+++ ganeti-2.12.3/lib/client/gnt_network.py	2015-04-28 11:13:10.000000000 +0300
@@ -241,9 +241,11 @@
     ToStdout("  Free: %d (%.2f%%)", free_count,
              100 * float(free_count) / float(size))
     ToStdout("  Usage map:")
+    lenmapping = len(mapping)
     idx = 0
-    for line in textwrap.wrap(mapping, width=64):
-      ToStdout("     %s %s %d", str(idx).rjust(3), line.ljust(64), idx + 63)
+    while idx < lenmapping:
+      line = mapping[idx: idx + 64]
+      ToStdout("     %s %s %d", str(idx).rjust(4), line.ljust(64), idx + 63)
       idx += 64
     ToStdout("         (X) used    (.) free")
 
diff -Nru ganeti-2.12.0/lib/cmdlib/cluster.py ganeti-2.12.3/lib/cmdlib/cluster.py
--- ganeti-2.12.0/lib/cmdlib/cluster.py	2014-10-09 14:57:28.000000000 +0300
+++ ganeti-2.12.3/lib/cmdlib/cluster.py	2015-04-29 11:09:35.000000000 +0300
@@ -110,33 +110,115 @@
   takes care of the renewal of the client SSL certificates.
 
   """
+  _MAX_NUM_RETRIES = 3
+
   def Exec(self, feedback_fn):
     master_uuid = self.cfg.GetMasterNode()
+    cluster = self.cfg.GetClusterInfo()
+
+    logging.debug("Renewing the master's SSL node certificate."
+                  " Master's UUID: %s.", master_uuid)
 
     server_digest = utils.GetCertificateDigest(
       cert_filename=pathutils.NODED_CERT_FILE)
+    logging.debug("SSL digest of the node certificate: %s.", server_digest)
     self.cfg.AddNodeToCandidateCerts("%s-SERVER" % master_uuid,
                                      server_digest)
+    logging.debug("Added master's digest as *-SERVER entry to configuration."
+                  " Current list of candidate certificates: %s.",
+                  str(cluster.candidate_certs))
     try:
       old_master_digest = utils.GetCertificateDigest(
         cert_filename=pathutils.NODED_CLIENT_CERT_FILE)
+      logging.debug("SSL digest of old master's SSL node certificate: %s.",
+                    old_master_digest)
       self.cfg.AddNodeToCandidateCerts("%s-OLDMASTER" % master_uuid,
                                        old_master_digest)
+      logging.debug("Added old master's node certificate digest to config"
+                    " as *-OLDMASTER. Current list of candidate certificates:"
+                    " %s.", str(cluster.candidate_certs))
     except IOError:
-      logging.info("No old certificate available.")
+      logging.info("No old master certificate available.")
 
-    new_master_digest = _UpdateMasterClientCert(self, self.cfg, master_uuid)
+    last_exception = None
+    for i in range(self._MAX_NUM_RETRIES):
+      try:
+        # Technically it should not be necessary to set the cert
+        # paths. However, due to a bug in the mock library, we
+        # have to do this to be able to test the function properly.
+        _UpdateMasterClientCert(
+            self, self.cfg, master_uuid,
+            client_cert=pathutils.NODED_CLIENT_CERT_FILE,
+            client_cert_tmp=pathutils.NODED_CLIENT_CERT_FILE_TMP)
+        logging.debug("Successfully renewed the master's node certificate.")
+        break
+      except errors.OpExecError as e:
+        logging.error("Renewing the master's SSL node certificate failed"
+                      " at attempt no. %s with error '%s'", str(i), e)
+        last_exception = e
+    else:
+      if last_exception:
+        feedback_fn("Could not renew the master's client SSL certificate."
+                    " Cleaning up. Error: %s." % last_exception)
+      # Cleaning up temporary certificates
+      self.cfg.RemoveNodeFromCandidateCerts("%s-SERVER" % master_uuid)
+      self.cfg.RemoveNodeFromCandidateCerts("%s-OLDMASTER" % master_uuid)
+      logging.debug("Cleaned up *-SERVER and *-OLDMASTER certificate from"
+                    " master candidate cert list. Current state of the"
+                    " list: %s.", str(cluster.candidate_certs))
+      try:
+        utils.RemoveFile(pathutils.NODED_CLIENT_CERT_FILE_TMP)
+      except IOError as e:
+        logging.debug("Could not clean up temporary node certificate of the"
+                      " master node. (Possibly because it was already removed"
+                      " properly.) Error: %s.", e)
+      return
 
-    self.cfg.AddNodeToCandidateCerts(master_uuid, new_master_digest)
+    node_errors = {}
     nodes = self.cfg.GetAllNodesInfo()
+    logging.debug("Renewing non-master nodes' node certificates.")
     for (node_uuid, node_info) in nodes.items():
+      if node_info.offline:
+        feedback_fn("* Skipping offline node %s" % node_info.name)
+        logging.debug("Skipping offline node %s (UUID: %s).",
+                      node_info.name, node_uuid)
+        continue
       if node_uuid != master_uuid:
-        new_digest = CreateNewClientCert(self, node_uuid)
-        if node_info.master_candidate:
-          self.cfg.AddNodeToCandidateCerts(node_uuid, new_digest)
+        logging.debug("Renewing node certificate of node '%s'.", node_uuid)
+        last_exception = None
+        for i in range(self._MAX_NUM_RETRIES):
+          try:
+            new_digest = CreateNewClientCert(self, node_uuid)
+            if node_info.master_candidate:
+              self.cfg.AddNodeToCandidateCerts(node_uuid,
+                                               new_digest)
+              logging.debug("Added the node's certificate to candidate"
+                            " certificate list. Current list: %s.",
+                            str(cluster.candidate_certs))
+            break
+          except errors.OpExecError as e:
+            last_exception = e
+            logging.error("Could not renew a non-master node's SSL node"
+                          " certificate at attempt no. %s. The node's UUID"
+                          " is %s, and the error was: %s.",
+                          str(i), node_uuid, e)
+        else:
+          if last_exception:
+            node_errors[node_uuid] = last_exception
+
+    if node_errors:
+      msg = ("Some nodes' SSL client certificates could not be renewed."
+             " Please make sure those nodes are reachable and rerun"
+             " the operation. The affected nodes and their errors are:\n")
+      for uuid, e in node_errors.items():
+        msg += "Node %s: %s\n" % (uuid, e)
+      feedback_fn(msg)
+
     self.cfg.RemoveNodeFromCandidateCerts("%s-SERVER" % master_uuid)
     self.cfg.RemoveNodeFromCandidateCerts("%s-OLDMASTER" % master_uuid)
-    # Trigger another update of the config now with the new master cert
+    logging.debug("Cleaned up *-SERVER and *-OLDMASTER certificate from"
+                  " master candidate cert list. Current state of the"
+                  " list: %s.", cluster.candidate_certs)
 
 
 class LUClusterActivateMasterIp(NoHooksLU):
@@ -199,6 +281,11 @@
   HPATH = "cluster-destroy"
   HTYPE = constants.HTYPE_CLUSTER
 
+  # Read by the job queue to detect when the cluster is gone and job files will
+  # never be available.
+  # FIXME: This variable should be removed together with the Python job queue.
+  clusterHasBeenDestroyed = False
+
   def BuildHooksEnv(self):
     """Build hooks env.
 
@@ -247,6 +334,12 @@
     result = self.rpc.call_node_deactivate_master_ip(master_params.uuid,
                                                      master_params, ems)
     result.Warn("Error disabling the master IP address", self.LogWarning)
+
+    self.wconfd.Client().PrepareClusterDestruction(self.wconfdcontext)
+
+    # signal to the job queue that the cluster is gone
+    LUClusterDestroy.clusterHasBeenDestroyed = True
+
     return master_params.uuid
 
 
@@ -3092,7 +3185,7 @@
     if test:
       nimg.hyp_fail = True
     else:
-      nimg.instances = [inst.uuid for (_, inst) in
+      nimg.instances = [uuid for (uuid, _) in
                         self.cfg.GetMultiInstanceInfoByName(idata)]
 
   def _UpdateNodeInfo(self, ninfo, nresult, nimg, vg_name):
diff -Nru ganeti-2.12.0/lib/cmdlib/common.py ganeti-2.12.3/lib/cmdlib/common.py
--- ganeti-2.12.0/lib/cmdlib/common.py	2014-10-09 14:57:28.000000000 +0300
+++ ganeti-2.12.3/lib/cmdlib/common.py	2015-04-29 11:09:35.000000000 +0300
@@ -602,6 +602,33 @@
   return ret + min_errs
 
 
+def ComputeIPolicyDiskSizesViolation(ipolicy, disk_sizes,
+                                     disk_template,
+                                     _compute_fn=_ComputeMinMaxSpec):
+  """Verifies ipolicy against provided disk sizes.
+
+  No other specs except the disk sizes, the number of disks and the disk
+  template are checked.
+
+  @type ipolicy: dict
+  @param ipolicy: The ipolicy
+  @type disk_sizes: list of ints
+  @param disk_sizes: Disk sizes of used disk (len must match C{disk_count})
+  @type disk_template: string
+  @param disk_template: The disk template of the instance
+  @param _compute_fn: The compute function (unittest only)
+  @return: A list of violations, or an empty list of no violations are found
+
+  """
+  return ComputeIPolicySpecViolation(ipolicy,
+                                     # mem_size, cpu_count, disk_count
+                                     None, None, len(disk_sizes),
+                                     None, disk_sizes, # nic_count, disk_sizes
+                                     None, # spindle_use
+                                     disk_template,
+                                     _compute_fn=_compute_fn)
+
+
 def ComputeIPolicyInstanceViolation(ipolicy, instance, cfg,
                                     _compute_fn=ComputeIPolicySpecViolation):
   """Compute if instance meets the specs of ipolicy.
diff -Nru ganeti-2.12.0/lib/cmdlib/instance.py ganeti-2.12.3/lib/cmdlib/instance.py
--- ganeti-2.12.0/lib/cmdlib/instance.py	2014-10-09 14:57:28.000000000 +0300
+++ ganeti-2.12.3/lib/cmdlib/instance.py	2015-04-29 11:09:35.000000000 +0300
@@ -485,7 +485,7 @@
     # set default file_driver if unset and required
     if (not self.op.file_driver and
         self.op.disk_template in constants.DTS_FILEBASED):
-      self.op.file_driver = constants.FD_LOOP
+      self.op.file_driver = constants.FD_DEFAULT
 
     ### Node/iallocator related checks
     CheckIAllocatorOrNode(self, "iallocator", "pnode")
@@ -3679,11 +3679,17 @@
 
     """
     secondary_nodes = self.cfg.GetInstanceSecondaryNodes(self.instance.uuid)
-    assert len(secondary_nodes) == 1
+
     assert self.instance.disk_template == constants.DT_DRBD8
+    assert len(secondary_nodes) == 1 or not self.instance.disks
 
     pnode_uuid = self.instance.primary_node
-    snode_uuid = secondary_nodes[0]
+
+    # it will not be possible to calculate the snode_uuid later
+    snode_uuid = None
+    if secondary_nodes:
+      snode_uuid = secondary_nodes[0]
+
     feedback_fn("Converting template to plain")
 
     disks = self.cfg.GetInstanceDisks(self.instance.uuid)
diff -Nru ganeti-2.12.0/lib/cmdlib/instance_storage.py ganeti-2.12.3/lib/cmdlib/instance_storage.py
--- ganeti-2.12.0/lib/cmdlib/instance_storage.py	2014-10-09 14:57:28.000000000 +0300
+++ ganeti-2.12.3/lib/cmdlib/instance_storage.py	2015-04-29 11:09:35.000000000 +0300
@@ -47,6 +47,7 @@
 from ganeti.cmdlib.base import LogicalUnit, NoHooksLU, Tasklet
 from ganeti.cmdlib.common import INSTANCE_DOWN, INSTANCE_NOT_RUNNING, \
   AnnotateDiskParams, CheckIAllocatorOrNode, ExpandNodeUuidAndName, \
+  ComputeIPolicyDiskSizesViolation, \
   CheckNodeOnline, CheckInstanceNodeGroups, CheckInstanceState, \
   IsExclusiveStorageEnabledNode, FindFaultyInstanceDisks, GetWantedNodes, \
   CheckDiskTemplateEnabled
@@ -1558,6 +1559,8 @@
 
     self._CheckDiskSpace(node_uuids, self.disk.ComputeGrowth(self.delta))
 
+    self._CheckIPolicy(self.target)
+
   def _CheckDiskSpace(self, node_uuids, req_vgspace):
     template = self.instance.disk_template
     if (template not in (constants.DTS_NO_FREE_SPACE_CHECK) and
@@ -1569,6 +1572,29 @@
       # the dry run performed in Exec() instead.
       CheckNodesFreeDiskPerVG(self, node_uuids, req_vgspace)
 
+  def _CheckIPolicy(self, target_size):
+    cluster = self.cfg.GetClusterInfo()
+    group_uuid = list(self.cfg.GetInstanceNodeGroups(self.op.instance_uuid,
+                                                     primary_only=True))[0]
+    group_info = self.cfg.GetNodeGroup(group_uuid)
+    ipolicy = ganeti.masterd.instance.CalculateGroupIPolicy(cluster,
+                                                            group_info)
+
+    disk_sizes = [disk.size if disk.uuid != self.disk.uuid else target_size
+                  for disk in self.cfg.GetInstanceDisks(self.op.instance_uuid)]
+
+    # The ipolicy checker below ignores None, so we only give it the disk size
+    res = ComputeIPolicyDiskSizesViolation(ipolicy, disk_sizes,
+                                           self.instance.disk_template)
+    if res:
+      msg = ("Growing disk %s violates policy: %s" %
+             (self.op.disk,
+              utils.CommaJoin(res)))
+      if self.op.ignore_ipolicy:
+        self.LogWarning(msg)
+      else:
+        raise errors.OpPrereqError(msg, errors.ECODE_INVAL)
+
   def Exec(self, feedback_fn):
     """Execute disk grow.
 
diff -Nru ganeti-2.12.0/lib/cmdlib/node.py ganeti-2.12.3/lib/cmdlib/node.py
--- ganeti-2.12.0/lib/cmdlib/node.py	2014-10-09 14:57:28.000000000 +0300
+++ ganeti-2.12.3/lib/cmdlib/node.py	2015-04-29 11:09:35.000000000 +0300
@@ -647,6 +647,9 @@
 
     # If we're no longer master capable, we'll demote ourselves from MC
     if self.op.master_capable is False and node.master_candidate:
+      if self.op.node_uuid == self.cfg.GetMasterNode():
+        raise errors.OpPrereqError("Master must remain master capable",
+                                   errors.ECODE_STATE)
       self.LogInfo("Demoting from master candidate")
       self.op.master_candidate = False
 
diff -Nru ganeti-2.12.0/lib/config.py ganeti-2.12.3/lib/config.py
--- ganeti-2.12.0/lib/config.py	2014-10-09 14:57:28.000000000 +0300
+++ ganeti-2.12.3/lib/config.py	2015-04-29 11:09:35.000000000 +0300
@@ -306,6 +306,9 @@
   def _ConfigData(self):
     return self._config_data
 
+  def OutDate(self):
+    self._config_data = None
+
   def _SetConfigData(self, cfg):
     self._config_data = cfg
 
@@ -1269,7 +1272,7 @@
       self._ConfigData().cluster.highest_used_port = port
     return port
 
-  @_ConfigSync()
+  @_ConfigSync(shared=1)
   def ComputeDRBDMap(self):
     """Compute the used DRBD minor/nodes.
 
@@ -2109,7 +2112,11 @@
     result = []
     for name in inst_names:
       instance = self._UnlockedGetInstanceInfoByName(name)
-      result.append((instance.uuid, instance))
+      if instance:
+        result.append((instance.uuid, instance))
+      else:
+        raise errors.ConfigurationError("Instance data of instance '%s'"
+                                        " not found." % name)
     return result
 
   @_ConfigSync(shared=1)
@@ -2796,18 +2803,27 @@
       # Upgrade configuration if needed
       self._UpgradeConfig(saveafter=True)
     else:
-      # poll until we acquire the lock
-      while True:
-        dict_data = \
-          self._wconfd.LockConfig(self._GetWConfdContext(), bool(shared))
-        logging.debug("Received config from WConfd.LockConfig [shared=%s]",
-                      bool(shared))
-        if dict_data is not None:
-          break
-        time.sleep(random.random())
+      if shared:
+        if self._config_data is None:
+          logging.debug("Requesting config, as I have no up-to-date copy")
+          dict_data = self._wconfd.ReadConfig()
+        else:
+          logging.debug("My config copy is up to date.")
+          dict_data = None
+      else:
+        # poll until we acquire the lock
+        while True:
+          dict_data = \
+              self._wconfd.LockConfig(self._GetWConfdContext(), bool(shared))
+          logging.debug("Received config from WConfd.LockConfig [shared=%s]",
+                        bool(shared))
+          if dict_data is not None:
+            break
+          time.sleep(random.random())
 
       try:
-        self._SetConfigData(objects.ConfigData.FromDict(dict_data))
+        if dict_data is not None:
+          self._SetConfigData(objects.ConfigData.FromDict(dict_data))
       except Exception, err:
         raise errors.ConfigurationError(err)
 
diff -Nru ganeti-2.12.0/lib/hypervisor/hv_base.py ganeti-2.12.3/lib/hypervisor/hv_base.py
--- ganeti-2.12.0/lib/hypervisor/hv_base.py	2014-10-09 14:57:28.000000000 +0300
+++ ganeti-2.12.3/lib/hypervisor/hv_base.py	2015-04-29 11:09:35.000000000 +0300
@@ -183,20 +183,20 @@
            NIC is not used in instance communication
 
   """
-  result = utils.RunCmd(["ip", "tuntap", "list"])
+  result = utils.RunCmd(["ip", "link", "show"])
 
   if result.failed:
     raise errors.HypervisorError("Failed to list TUN/TAP interfaces")
 
   idxs = set()
 
-  for line in result.output.splitlines():
-    parts = line.split(": ", 1)
+  for line in result.output.splitlines()[0::2]:
+    parts = line.split(": ")
 
     if len(parts) < 2:
       raise errors.HypervisorError("Failed to parse TUN/TAP interfaces")
 
-    r = re.match(r"gnt\.com\.([0-9]+)", parts[0])
+    r = re.match(r"gnt\.com\.([0-9]+)", parts[1])
 
     if r is not None:
       idxs.add(int(r.group(1)))
diff -Nru ganeti-2.12.0/lib/hypervisor/hv_xen.py ganeti-2.12.3/lib/hypervisor/hv_xen.py
--- ganeti-2.12.0/lib/hypervisor/hv_xen.py	2014-10-09 14:57:28.000000000 +0300
+++ ganeti-2.12.3/lib/hypervisor/hv_xen.py	2015-04-29 11:09:35.000000000 +0300
@@ -154,7 +154,7 @@
   return result
 
 
-def _GetAllInstanceList(fn, include_node, _timeout=5):
+def _GetAllInstanceList(fn, include_node, delays, timeout):
   """Return the list of instances including running and shutdown.
 
   See L{_RunInstanceList} and L{_ParseInstanceList} for parameter details.
@@ -162,7 +162,7 @@
   """
   instance_list_errors = []
   try:
-    lines = utils.Retry(_RunInstanceList, (0.3, 1.5, 1.0), _timeout,
+    lines = utils.Retry(_RunInstanceList, delays, timeout,
                         args=(fn, instance_list_errors))
   except utils.RetryTimeout:
     if instance_list_errors:
@@ -182,7 +182,7 @@
   """Determine whether an instance is running.
 
   An instance is running if it is in the following Xen states:
-  running, blocked, or paused.
+  running, blocked, paused, or dying (about to be destroyed / shutdown).
 
   For some strange reason, Xen once printed 'rb----' which does not make any
   sense because an instance cannot be both running and blocked.  Fortunately,
@@ -193,6 +193,9 @@
   to be scheduled to run.
   http://old-list-archives.xenproject.org/xen-users/2007-06/msg00849.html
 
+  A dying instance is about to be removed, but it is still consuming resources,
+  and counts as running.
+
   @type instance_info: string
   @param instance_info: Information about instance, as supplied by Xen.
   @rtype: bool
@@ -202,15 +205,51 @@
   return instance_info == "r-----" \
       or instance_info == "rb----" \
       or instance_info == "-b----" \
-      or instance_info == "--p---" \
+      or instance_info == "-----d" \
       or instance_info == "------"
 
 
 def _IsInstanceShutdown(instance_info):
-  return instance_info == "---s--"
+  """Determine whether the instance is shutdown.
+
+  An instance is shutdown when a user shuts it down from within, and we do not
+  remove domains to be able to detect that.
+
+  The dying state has been added as a precaution, as Xen's status reporting is
+  weird.
+
+  """
+  return instance_info == "---s--" \
+      or instance_info == "---s-d"
+
+
+def _IgnorePaused(instance_info):
+  """Removes information about whether a Xen state is paused from the state.
+
+  As it turns out, an instance can be reported as paused in almost any
+  condition. Paused instances can be paused, running instances can be paused for
+  scheduling, and any other condition can appear to be paused as a result of
+  races or improbable conditions in Xen's status reporting.
+  As we do not use Xen's pause commands in any way at the time, we can simply
+  ignore the paused field and save ourselves a lot of trouble.
+
+  Should we ever use the pause commands, several samples would be needed before
+  we could confirm the domain as paused.
+
+  """
+  return instance_info.replace('p', '-')
 
 
 def _XenToHypervisorInstanceState(instance_info):
+  """Maps Xen states to hypervisor states.
+
+  @type instance_info: string
+  @param instance_info: Information about instance, as supplied by Xen.
+  @rtype: L{hv_base.HvInstanceState}
+
+  """
+  instance_info = _IgnorePaused(instance_info)
+
   if _IsInstanceRunning(instance_info):
     return hv_base.HvInstanceState.RUNNING
   elif _IsInstanceShutdown(instance_info):
@@ -221,23 +260,23 @@
                                    instance_info)
 
 
-def _GetRunningInstanceList(fn, include_node, _timeout=5):
+def _GetRunningInstanceList(fn, include_node, delays, timeout):
   """Return the list of running instances.
 
   See L{_GetAllInstanceList} for parameter details.
 
   """
-  instances = _GetAllInstanceList(fn, include_node, _timeout)
+  instances = _GetAllInstanceList(fn, include_node, delays, timeout)
   return [i for i in instances if hv_base.HvInstanceState.IsRunning(i[4])]
 
 
-def _GetShutdownInstanceList(fn, include_node, _timeout=5):
+def _GetShutdownInstanceList(fn, include_node, delays, timeout):
   """Return the list of shutdown instances.
 
   See L{_GetAllInstanceList} for parameter details.
 
   """
-  instances = _GetAllInstanceList(fn, include_node, _timeout)
+  instances = _GetAllInstanceList(fn, include_node, delays, timeout)
   return [i for i in instances if hv_base.HvInstanceState.IsShutdown(i[4])]
 
 
@@ -424,6 +463,9 @@
   _NICS_DIR = _ROOT_DIR + "/nic" # contains NICs' info
   _DIRS = [_ROOT_DIR, _NICS_DIR]
 
+  _INSTANCE_LIST_DELAYS = (0.3, 1.5, 1.0)
+  _INSTANCE_LIST_TIMEOUT = 5
+
   ANCILLARY_FILES = [
     XEND_CONFIG_FILE,
     XL_CONFIG_FILE,
@@ -588,29 +630,32 @@
           (nic_type, constants.HT_HVM_VIF_IOEMU)
 
     for idx, nic in enumerate(instance.nics):
-      nic_str = "mac=%s%s" % (nic.mac, nic_type_str)
-
-      ip = getattr(nic, "ip", None)
-      if ip is not None:
-        nic_str += ", ip=%s" % ip
-
-      if nic.nicparams[constants.NIC_MODE] == constants.NIC_MODE_BRIDGED:
-        nic_str += ", bridge=%s" % nic.nicparams[constants.NIC_LINK]
-      elif nic.nicparams[constants.NIC_MODE] == constants.NIC_MODE_OVS:
-        nic_str += ", bridge=%s" % nic.nicparams[constants.NIC_LINK]
-        if nic.nicparams[constants.NIC_VLAN]:
-          nic_str += "%s" % nic.nicparams[constants.NIC_VLAN]
+      nic_args = {}
+      nic_args["mac"] = "%s%s" % (nic.mac, nic_type_str)
 
       if nic.name and \
             nic.name.startswith(constants.INSTANCE_COMMUNICATION_NIC_PREFIX):
         tap = hv_base.GenerateTapName()
-        nic_str += ", vifname=%s" % tap
+        nic_args["vifname"] = tap
+        nic_args["script"] = pathutils.XEN_VIF_METAD_SETUP
         nic.name = tap
+      else:
+        ip = getattr(nic, "ip", None)
+        if ip is not None:
+          nic_args["ip"] = ip
+
+        if nic.nicparams[constants.NIC_MODE] == constants.NIC_MODE_BRIDGED:
+          nic_args["bridge"] = nic.nicparams[constants.NIC_LINK]
+        elif nic.nicparams[constants.NIC_MODE] == constants.NIC_MODE_OVS:
+          nic_args["bridge"] = nic.nicparams[constants.NIC_LINK]
+          if nic.nicparams[constants.NIC_VLAN]:
+            nic_args["bridge"] += nic.nicparams[constants.NIC_VLAN]
 
-      if hvp[constants.HV_VIF_SCRIPT]:
-        nic_str += ", script=%s" % hvp[constants.HV_VIF_SCRIPT]
+        if hvp[constants.HV_VIF_SCRIPT]:
+          nic_args["script"] = hvp[constants.HV_VIF_SCRIPT]
 
-      vif_data.append("'%s'" % nic_str)
+      nic_str = ", ".join(["%s=%s" % p for p in nic_args.items()])
+      vif_data.append("'%s'" % (nic_str, ))
       self._WriteNICInfoFile(instance, idx, nic)
 
     config.write("vif = [%s]\n" % ",".join(vif_data))
@@ -674,7 +719,8 @@
 
     """
     return _GetAllInstanceList(lambda: self._RunXen(["list"], hvparams),
-                               include_node)
+                               include_node, delays=self._INSTANCE_LIST_DELAYS,
+                               timeout=self._INSTANCE_LIST_TIMEOUT)
 
   def ListInstances(self, hvparams=None):
     """Get the list of running instances.
@@ -688,7 +734,8 @@
     """
     instance_list = _GetRunningInstanceList(
       lambda: self._RunXen(["list"], hvparams),
-      False)
+      False, delays=self._INSTANCE_LIST_DELAYS,
+      timeout=self._INSTANCE_LIST_TIMEOUT)
     return [info[0] for info in instance_list]
 
   def GetInstanceInfo(self, instance_name, hvparams=None):
diff -Nru ganeti-2.12.0/lib/jqueue/__init__.py ganeti-2.12.3/lib/jqueue/__init__.py
--- ganeti-2.12.0/lib/jqueue/__init__.py	2014-10-09 14:57:28.000000000 +0300
+++ ganeti-2.12.3/lib/jqueue/__init__.py	2015-04-29 11:09:35.000000000 +0300
@@ -74,6 +74,7 @@
 from ganeti import qlang
 from ganeti import pathutils
 from ganeti import vcluster
+from ganeti.cmdlib import cluster
 
 
 JOBQUEUE_THREADS = 1
@@ -1396,6 +1397,7 @@
         data and other ganeti objects
 
     """
+    self.primary_jid = None
     self.context = context
     self._memcache = weakref.WeakValueDictionary()
     self._my_hostname = netutils.Hostname.GetSysName()
@@ -1442,6 +1444,12 @@
     Pick up a job that already is in the job queue and start/resume it.
 
     """
+    if self.primary_jid:
+      logging.warning("Job process asked to pick up %s, but already has %s",
+                      job_id, self.primary_jid)
+
+    self.primary_jid = int(job_id)
+
     job = self._LoadJobUnlocked(job_id)
 
     if job is None:
@@ -1779,6 +1787,16 @@
         break
 
     if not raw_data:
+      logging.debug("No data available for job %s", job_id)
+      if int(job_id) == self.primary_jid:
+        logging.warning("My own job file (%s) disappeared;"
+                        " this should only happy at cluster desctruction",
+                        job_id)
+        if mcpu.lusExecuting[0] == 0:
+          logging.warning("Not in execution; cleaning up myself due to missing"
+                          " job file")
+          logging.shutdown()
+          os._exit(1) # pylint: disable=W0212
       return None
 
     if writable is None:
@@ -1900,7 +1918,8 @@
     # Try to load from disk
     job = self.SafeLoadJobFromDisk(job_id, True, writable=False)
 
-    assert not job.writable, "Got writable job" # pylint: disable=E1101
+    if job:
+      assert not job.writable, "Got writable job" # pylint: disable=E1101
 
     if job:
       return job.CalcStatus()
@@ -1945,6 +1964,11 @@
     job = self.SafeLoadJobFromDisk(job_id, True, writable=False)
     if job is not None:
       return job.CalcStatus() in constants.JOBS_FINALIZED
+    elif cluster.LUClusterDestroy.clusterHasBeenDestroyed:
+      # FIXME: The above variable is a temporary workaround until the Python job
+      # queue is completely removed. When removing the job queue, also remove
+      # the variable from LUClusterDestroy.
+      return True
     else:
       return None
 
diff -Nru ganeti-2.12.0/lib/masterd/instance.py ganeti-2.12.3/lib/masterd/instance.py
--- ganeti-2.12.0/lib/masterd/instance.py	2014-10-09 14:57:28.000000000 +0300
+++ ganeti-2.12.3/lib/masterd/instance.py	2015-04-29 11:09:35.000000000 +0300
@@ -1277,14 +1277,22 @@
 
     assert len(dresults) == len(instance.disks)
 
-    self._feedback_fn("Finalizing export on %s" % dest_node.name)
-    result = self._lu.rpc.call_finalize_export(dest_node.uuid, instance,
-                                               self._snap_disks)
-    msg = result.fail_msg
-    fin_resu = not msg
-    if msg:
-      self._lu.LogWarning("Could not finalize export for instance %s"
-                          " on node %s: %s", instance.name, dest_node.name, msg)
+    # Finalize only if all the disks have been exported successfully
+    if all(dresults):
+      self._feedback_fn("Finalizing export on %s" % dest_node.name)
+      result = self._lu.rpc.call_finalize_export(dest_node.uuid, instance,
+                                                 self._snap_disks)
+      msg = result.fail_msg
+      fin_resu = not msg
+      if msg:
+        self._lu.LogWarning("Could not finalize export for instance %s"
+                            " on node %s: %s", instance.name, dest_node.name,
+                            msg)
+    else:
+      fin_resu = False
+      self._lu.LogWarning("Some disk exports have failed; there may be "
+                          "leftover data for instance %s on node %s",
+                          instance.name, dest_node.name)
 
     return (fin_resu, dresults)
 
diff -Nru ganeti-2.12.0/lib/mcpu.py ganeti-2.12.3/lib/mcpu.py
--- ganeti-2.12.0/lib/mcpu.py	2014-10-09 14:57:28.000000000 +0300
+++ ganeti-2.12.3/lib/mcpu.py	2015-04-29 11:09:35.000000000 +0300
@@ -57,6 +57,7 @@
 
 
 sighupReceived = [False]
+lusExecuting = [0]
 
 _OP_PREFIX = "Op"
 _LU_PREFIX = "LU"
@@ -412,6 +413,8 @@
     else:
       request = [[lock, "exclusive"] for lock in locks]
 
+    self.cfg.OutDate()
+
     if timeout is None:
       ## Note: once we are so desperate for locks to request them
       ## unconditionally, we no longer care about an original plan
@@ -485,6 +488,7 @@
 
     """
     write_count = self.cfg.write_count
+    lu.cfg.OutDate()
     lu.CheckPrereq()
 
     hm = self.BuildHooksManager(lu)
@@ -505,6 +509,7 @@
     else:
       submit_mj_fn = _FailingSubmitManyJobs
 
+    lusExecuting[0] += 1
     try:
       result = _ProcessResult(submit_mj_fn, lu.op, lu.Exec(self.Log))
       h_results = hm.RunPhase(constants.HOOKS_PHASE_POST)
@@ -512,6 +517,7 @@
                                 self.Log, result)
     finally:
       # FIXME: This needs locks if not lu_class.REQ_BGL
+      lusExecuting[0] -= 1
       if write_count != self.cfg.write_count:
         hm.RunConfigUpdate()
 
diff -Nru ganeti-2.12.0/lib/objects.py ganeti-2.12.3/lib/objects.py
--- ganeti-2.12.0/lib/objects.py	2014-10-09 14:57:28.000000000 +0300
+++ ganeti-2.12.3/lib/objects.py	2015-04-29 11:09:35.000000000 +0300
@@ -1753,6 +1753,12 @@
         raise errors.ConfigurationError(msg)
       self.ipolicy = FillIPolicy(constants.IPOLICY_DEFAULTS, self.ipolicy)
 
+    # hv_state_static added in 2.7
+    if self.hv_state_static is None:
+      self.hv_state_static = {}
+    if self.disk_state_static is None:
+      self.disk_state_static = {}
+
     if self.candidate_certs is None:
       self.candidate_certs = {}
 
diff -Nru ganeti-2.12.0/lib/pathutils.py ganeti-2.12.3/lib/pathutils.py
--- ganeti-2.12.0/lib/pathutils.py	2014-10-09 14:57:28.000000000 +0300
+++ ganeti-2.12.3/lib/pathutils.py	2015-04-29 11:09:35.000000000 +0300
@@ -69,6 +69,8 @@
 CFGUPGRADE = _constants.PKGLIBDIR + "/tools/cfgupgrade"
 POST_UPGRADE = _constants.PKGLIBDIR + "/tools/post-upgrade"
 ENSURE_DIRS = _constants.PKGLIBDIR + "/ensure-dirs"
+# Script to configure the metadata virtual network interface with Xen
+XEN_VIF_METAD_SETUP = _constants.PKGLIBDIR + "/vif-ganeti-metad"
 ETC_HOSTS = vcluster.ETC_HOSTS
 
 # Top-level paths
diff -Nru ganeti-2.12.0/lib/rpc/transport.py ganeti-2.12.3/lib/rpc/transport.py
--- ganeti-2.12.0/lib/rpc/transport.py	2014-10-10 11:10:35.000000000 +0300
+++ ganeti-2.12.3/lib/rpc/transport.py	2015-04-28 11:13:10.000000000 +0300
@@ -42,6 +42,8 @@
 import time
 
 from ganeti import constants
+import ganeti.errors
+from ganeti import ssconf
 from ganeti import utils
 from ganeti.rpc import errors
 
@@ -117,6 +119,15 @@
     except socket.error, err:
       error_code = err.args[0]
       if error_code in (errno.ENOENT, errno.ECONNREFUSED):
+        # Verify if we're acutally on the master node before trying
+        # again.
+        ss = ssconf.SimpleStore()
+        try:
+          master, myself = ssconf.GetMasterAndMyself(ss=ss)
+        except ganeti.errors.ConfigurationError:
+          raise errors.NoMasterError(address)
+        if master != myself:
+          raise errors.NoMasterError(address)
         raise utils.RetryAgain()
       elif error_code in (errno.EPERM, errno.EACCES):
         raise errors.PermissionError(address)
@@ -189,14 +200,15 @@
     return self.Recv()
 
   @staticmethod
-  def RetryOnNetworkError(fn, on_error, retries=5, wait_on_error=5):
+  def RetryOnNetworkError(fn, on_error, retries=15, wait_on_error=5):
     """Calls a given function, retrying if it fails on a network IO
     exception.
 
     This allows to re-establish a broken connection and retry an IO operation.
 
     The function receives one an integer argument stating the current retry
-    number, 0 being the first call, 1 being the retry.
+    number, 0 being the first call, 1 being the first retry, 2 the second,
+    and so on.
 
     If any exception occurs, on_error is invoked first with the exception given
     as an argument. Then, if the exception is a network exception, the function
@@ -206,14 +218,15 @@
     for try_no in range(0, retries):
       try:
         return fn(try_no)
-      except socket.error, ex:
+      except (socket.error, errors.ConnectionClosedError,
+              errors.TimeoutError) as ex:
         on_error(ex)
         # we retry on a network error, unless it's the last try
         if try_no == retries - 1:
           raise
         logging.error("Network error: %s, retring (retry attempt number %d)",
                       ex, try_no + 1)
-        time.sleep(wait_on_error)
+        time.sleep(wait_on_error * try_no)
       except Exception, ex:
         on_error(ex)
         raise
diff -Nru ganeti-2.12.0/lib/rpc_defs.py ganeti-2.12.3/lib/rpc_defs.py
--- ganeti-2.12.0/lib/rpc_defs.py	2014-10-09 14:57:28.000000000 +0300
+++ ganeti-2.12.3/lib/rpc_defs.py	2015-04-29 11:09:35.000000000 +0300
@@ -518,7 +518,7 @@
     ("ovs_name", None, "Name of the OpenvSwitch to create"),
     ("ovs_link", None, "Link of the OpenvSwitch to the outside"),
     ], None, None, "This will create and setup the OpenvSwitch"),
-  ("node_crypto_tokens", SINGLE, None, constants.RPC_TMO_NORMAL, [
+  ("node_crypto_tokens", SINGLE, None, constants.RPC_TMO_SLOW, [
     ("token_request", None,
      "List of tuples of requested crypto token types, actions"),
     ], None, None, "Handle crypto tokens of the node."),
diff -Nru ganeti-2.12.0/lib/serializer.py ganeti-2.12.3/lib/serializer.py
--- ganeti-2.12.0/lib/serializer.py	2014-10-07 17:45:37.000000000 +0300
+++ ganeti-2.12.3/lib/serializer.py	2015-04-28 11:13:10.000000000 +0300
@@ -253,10 +253,10 @@
     return self._item
 
   def __str__(self):
-    return "<%s>" % self._descr
+    return "<%s>" % (self._descr, )
 
   def __repr__(self):
-    return "Private(?, descr=%r)".format(self._descr)
+    return "Private(?, descr=%r)" % (self._descr, )
 
   # pylint: disable=W0212
   # If it doesn't access _item directly, the call will go through __getattr__
@@ -280,7 +280,7 @@
 
   def __call__(self, *args, **kwargs):
     return Private(self._item(*args, **kwargs),
-                   descr="%s()" % self._descr)
+                   descr="%s()" % (self._descr, ))
 
   # pylint: disable=R0201
   # While this could get away with being a function, it needs to be a method.
diff -Nru ganeti-2.12.0/lib/ssh.py ganeti-2.12.3/lib/ssh.py
--- ganeti-2.12.0/lib/ssh.py	2014-10-09 14:57:28.000000000 +0300
+++ ganeti-2.12.3/lib/ssh.py	2015-04-29 11:09:35.000000000 +0300
@@ -43,6 +43,7 @@
 from ganeti import pathutils
 from ganeti import vcluster
 from ganeti import compat
+from ganeti import ssconf
 
 
 def GetUserFiles(user, mkdir=False, dircheck=True, kind=constants.SSHK_DSA,
@@ -119,17 +120,16 @@
   """Wrapper for SSH commands.
 
   """
-  def __init__(self, cluster_name, ipv6=False):
+  def __init__(self, cluster_name):
     """Initializes this class.
 
     @type cluster_name: str
     @param cluster_name: name of the cluster
-    @type ipv6: bool
-    @param ipv6: If true, force ssh to use IPv6 addresses only
 
     """
     self.cluster_name = cluster_name
-    self.ipv6 = ipv6
+    family = ssconf.SimpleStore().GetPrimaryIPFamily()
+    self.ipv6 = (family == netutils.IP6Address.family)
 
   def _BuildSshOptions(self, batch, ask_key, use_cluster_key,
                        strict_host_check, private_key=None, quiet=True,
diff -Nru ganeti-2.12.0/lib/storage/bdev.py ganeti-2.12.3/lib/storage/bdev.py
--- ganeti-2.12.0/lib/storage/bdev.py	2014-10-09 14:57:28.000000000 +0300
+++ ganeti-2.12.3/lib/storage/bdev.py	2015-04-29 11:09:35.000000000 +0300
@@ -441,7 +441,15 @@
     """Parse one line of the lvs output used in L{_GetLvInfo}.
 
     """
-    elems = line.strip().rstrip(sep).split(sep)
+    elems = line.strip().split(sep)
+
+    # The previous iteration of code here assumed that LVM might put another
+    # separator to the right of the output. The PV info might be empty for
+    # thin volumes, so stripping off the separators might cut off the last
+    # empty element - do this instead.
+    if len(elems) == 7 and elems[-1] == "":
+      elems.pop()
+
     if len(elems) != 6:
       base.ThrowError("Can't parse LVS output, len(%s) != 6", str(elems))
 
@@ -466,12 +474,12 @@
       base.ThrowError("Can't parse the number of stripes: %s", err)
 
     pv_names = []
-    for pv in pvs.split(","):
-      m = re.match(cls._PARSE_PV_DEV_RE, pv)
-      if not m:
-        base.ThrowError("Can't parse this device list: %s", pvs)
-      pv_names.append(m.group(1))
-    assert len(pv_names) > 0
+    if pvs != "":
+      for pv in pvs.split(","):
+        m = re.match(cls._PARSE_PV_DEV_RE, pv)
+        if not m:
+          base.ThrowError("Can't parse this device list: %s", pvs)
+        pv_names.append(m.group(1))
 
     return (status, major, minor, pe_size, stripes, pv_names)
 
@@ -803,7 +811,7 @@
       return False
 
     self.major = os.major(st.st_rdev)
-    self.minor = os.minor(st.st_rdev)
+    self.minor = utils.osminor(st.st_rdev)
     self.attached = True
 
     return True
@@ -940,7 +948,7 @@
       return False
 
     self.major = os.major(st.st_rdev)
-    self.minor = os.minor(st.st_rdev)
+    self.minor = utils.osminor(st.st_rdev)
     self.attached = True
 
     return True
@@ -1307,7 +1315,7 @@
       return False
 
     self.major = os.major(st.st_rdev)
-    self.minor = os.minor(st.st_rdev)
+    self.minor = utils.osminor(st.st_rdev)
     self.attached = True
 
     return True
diff -Nru ganeti-2.12.0/lib/storage/gluster.py ganeti-2.12.3/lib/storage/gluster.py
--- ganeti-2.12.0/lib/storage/gluster.py	2014-10-06 18:10:35.000000000 +0300
+++ ganeti-2.12.3/lib/storage/gluster.py	2015-04-28 18:05:35.000000000 +0300
@@ -192,8 +192,8 @@
     @rtype: str
     """
 
-    return "{ip}:{port}:{volume}" \
-              .format(ip=self.server_ip, port=self.port, volume=self.volume)
+    return "-o server-port={port} {ip}:/{volume}" \
+              .format(port=self.port, ip=self.server_ip, volume=self.volume)
 
   def GetKVMMountString(self, path):
     """Return the string KVM needs to use this volume.
diff -Nru ganeti-2.12.0/lib/tools/burnin.py ganeti-2.12.3/lib/tools/burnin.py
--- ganeti-2.12.0/lib/tools/burnin.py	2014-10-09 14:57:28.000000000 +0300
+++ ganeti-2.12.3/lib/tools/burnin.py	2015-04-29 11:09:35.000000000 +0300
@@ -667,7 +667,8 @@
       for idx, growth in enumerate(self.disk_growth):
         if growth > 0:
           op = opcodes.OpInstanceGrowDisk(instance_name=instance, disk=idx,
-                                          amount=growth, wait_for_sync=True)
+                                          amount=growth, wait_for_sync=True,
+                                          ignore_ipolicy=True)
           Log("increase disk/%s by %s MB", idx, growth, indent=2)
           self.ExecOrQueue(instance, [op])
 
diff -Nru ganeti-2.12.0/lib/tools/node_daemon_setup.py ganeti-2.12.3/lib/tools/node_daemon_setup.py
--- ganeti-2.12.0/lib/tools/node_daemon_setup.py	2014-10-06 16:20:35.000000000 +0300
+++ ganeti-2.12.3/lib/tools/node_daemon_setup.py	2015-04-22 20:10:50.000000000 +0300
@@ -115,9 +115,8 @@
 
   # Check certificate with given key; this detects cases where the key given on
   # stdin doesn't match the certificate also given on stdin
-  x509_check_fn = utils.PrepareX509CertKeyCheck(cert, key)
   try:
-    x509_check_fn()
+    utils.X509CertKeyCheck(cert, key)
   except OpenSSL.SSL.Error:
     raise errors.X509CertError("(stdin)",
                                "Certificate is not signed with given key")
diff -Nru ganeti-2.12.0/lib/utils/storage.py ganeti-2.12.3/lib/utils/storage.py
--- ganeti-2.12.0/lib/utils/storage.py	2014-10-09 14:57:28.000000000 +0300
+++ ganeti-2.12.3/lib/utils/storage.py	2015-04-29 11:09:35.000000000 +0300
@@ -215,3 +215,13 @@
 
   for i in range(start, num_disks):
     yield prefix + _GetDiskSuffix(i)
+
+
+def osminor(dev):
+  """Return the device minor number from a raw device number.
+
+  This is a replacement for os.minor working around the issue that
+  Python's os.minor still has the old definition. See Ganeti issue
+  1058 for more details.
+  """
+  return (dev & 0xff) | ((dev >> 12) & ~0xff)
diff -Nru ganeti-2.12.0/lib/utils/x509.py ganeti-2.12.3/lib/utils/x509.py
--- ganeti-2.12.0/lib/utils/x509.py	2014-10-06 18:10:35.000000000 +0300
+++ ganeti-2.12.3/lib/utils/x509.py	2015-04-22 20:10:50.000000000 +0300
@@ -340,8 +340,8 @@
           OpenSSL.crypto.dump_certificate(OpenSSL.crypto.FILETYPE_PEM, cert))
 
 
-def PrepareX509CertKeyCheck(cert, key):
-  """Get function for verifying certificate with a certain private key.
+def X509CertKeyCheck(cert, key):
+  """Function for verifying certificate with a certain private key.
 
   @type key: OpenSSL.crypto.PKey
   @param key: Private key object
@@ -353,10 +353,9 @@
 
   """
   ctx = OpenSSL.SSL.Context(OpenSSL.SSL.TLSv1_METHOD)
-  ctx.use_privatekey(key)
   ctx.use_certificate(cert)
-
-  return ctx.check_privatekey
+  ctx.use_privatekey(key)
+  ctx.check_privatekey()
 
 
 def CheckNodeCertificate(cert, _noded_cert_file=pathutils.NODED_CERT_FILE):
@@ -396,9 +395,8 @@
                                "Unable to load private key: %s" % err)
 
   # Check consistency of server.pem file
-  check_fn = PrepareX509CertKeyCheck(noded_cert, noded_key)
   try:
-    check_fn()
+    X509CertKeyCheck(noded_cert, noded_key)
   except OpenSSL.SSL.Error:
     # This should never happen as it would mean the certificate in server.pem
     # is out of sync with the private key stored in the same file
@@ -406,9 +404,8 @@
                                "Certificate does not match with private key")
 
   # Check with supplied certificate with local key
-  check_fn = PrepareX509CertKeyCheck(cert, noded_key)
   try:
-    check_fn()
+    X509CertKeyCheck(cert, noded_key)
   except OpenSSL.SSL.Error:
     raise errors.GenericError("Given cluster certificate does not match"
                               " local key")
diff -Nru ganeti-2.12.0/lib/watcher/__init__.py ganeti-2.12.3/lib/watcher/__init__.py
--- ganeti-2.12.0/lib/watcher/__init__.py	2014-10-09 14:57:28.000000000 +0300
+++ ganeti-2.12.3/lib/watcher/__init__.py	2015-04-29 11:09:35.000000000 +0300
@@ -384,7 +384,11 @@
                    " or has offline secondaries", name)
       continue
 
-    job.append(opcodes.OpInstanceActivateDisks(instance_name=name))
+    op = opcodes.OpInstanceActivateDisks(instance_name=name)
+    op.reason = [(constants.OPCODE_REASON_SRC_WATCHER,
+                  "Activating disks for instance %s" % name,
+                  utils.EpochNano())]
+    job.append(op)
 
   if job:
     job_id = cli.SendJob(job, cl=cl)
diff -Nru ganeti-2.12.0/lib/watcher/state.py ganeti-2.12.3/lib/watcher/state.py
--- ganeti-2.12.0/lib/watcher/state.py	2014-10-06 18:10:35.000000000 +0300
+++ ganeti-2.12.3/lib/watcher/state.py	2015-04-22 20:10:50.000000000 +0300
@@ -197,7 +197,7 @@
     # Second, delete expired records
     earliest = time.time() - RETRY_EXPIRATION
     expired_instances = [i for i in idict
-                         if idict[i][KEY_RESTART_WHEN] < earliest]
+                         if idict[i].get(KEY_RESTART_WHEN, 0) < earliest]
     for inst in expired_instances:
       logging.debug("Expiring record for instance %s", inst)
       idict.pop(inst, None)
diff -Nru ganeti-2.12.0/lib/wconfd.py ganeti-2.12.3/lib/wconfd.py
--- ganeti-2.12.0/lib/wconfd.py	2014-10-07 17:45:37.000000000 +0300
+++ ganeti-2.12.3/lib/wconfd.py	2015-04-22 20:10:50.000000000 +0300
@@ -58,7 +58,7 @@
     cl.AbstractStubClient.__init__(self, timeouts, transport)
     stub.ClientRpcStub.__init__(self)
 
-    retries = 10
+    retries = 12
     for try_no in range(0, retries):
       try:
         self._InitTransport()
@@ -68,4 +68,4 @@
         if try_no == retries -1:
           raise
         logging.debug("Will retry")
-        time.sleep(10 * random.random())
+        time.sleep(try_no * 10 + 10 * random.random())
diff -Nru ganeti-2.12.0/Makefile.am ganeti-2.12.3/Makefile.am
--- ganeti-2.12.0/Makefile.am	2014-10-09 14:57:28.000000000 +0300
+++ ganeti-2.12.3/Makefile.am	2015-04-29 11:09:35.000000000 +0300
@@ -245,6 +245,7 @@
 	ganeti-[0-9]*.[0-9]*.[0-9]* \
 	doc/html/_* \
 	doc/man-html/_* \
+	tools/shebang \
 	autom4te.cache
 
 # some helper vars
@@ -271,6 +272,7 @@
 	$(addsuffix /*.o,$(HS_DIRS)) \
 	$(addsuffix /*.$(HTEST_SUFFIX)_hi,$(HS_DIRS)) \
 	$(addsuffix /*.$(HTEST_SUFFIX)_o,$(HS_DIRS)) \
+	hs-pkg-versions \
 	Makefile.ghc \
 	Makefile.ghc.bak \
 	$(PYTHON_BOOTSTRAP) \
@@ -295,9 +297,11 @@
 	tools/kvm-ifup-os \
 	tools/xen-ifup-os \
 	tools/vif-ganeti \
+	tools/vif-ganeti-metad \
 	tools/net-common \
 	tools/users-setup \
 	tools/vcluster-setup \
+	$(python_scripts_shebang) \
 	stamp-directories \
 	stamp-srclinks \
 	$(nodist_pkgpython_PYTHON) \
@@ -319,6 +323,9 @@
 	$(PYTHON_BOOTSTRAP) \
 	$(gnt_python_sbin_SCRIPTS)
 
+clean-local:
+	rm -rf tools/shebang
+
 HS_GENERATED_FILES = $(HS_PROGS) src/hluxid src/ganeti-luxid
 if ENABLE_CONFD
 HS_GENERATED_FILES += src/hconfd src/ganeti-confd
@@ -710,10 +717,13 @@
 HS_BUILT_TEST_HELPERS = $(HS_BIN_ROLES:%=test/hs/%) test/hs/hail
 
 HFLAGS = \
-	-O -Wall -Werror -isrc \
+	-O -Wall -isrc \
 	-fwarn-monomorphism-restriction \
 	-fwarn-tabs \
 	$(GHC_BYVERSION_FLAGS)
+if DEVELOPER_MODE
+HFLAGS += -Werror
+endif
 
 HTEST_SUFFIX = hpc
 HPROF_SUFFIX = prof
@@ -1162,38 +1172,71 @@
 
 HS_SRCS = $(HS_LIBTESTBUILT_SRCS)
 
+# select the last line of output and extract the version number,
+# padding with 0s if needed
+hs-pkg-versions:
+	ghc-pkg list --simple-output lens \
+	| sed -r -e '$$!d' \
+	  -e 's/^lens-([0-9]+(\.[0-9]+)*)/\1 0 0 0/' \
+	  -e 's/\./ /g' -e 's/([0-9]+) *([0-9]+) *([0-9]+) .*/\
+	      -DLENS_MAJOR=\1 -DLENS_MINOR=\2 -DLENS_REV=\3/' \
+	  -e 's/^\s*//' \
+	> $@
+	ghc-pkg list --simple-output monad-control \
+	| sed -r -e '$$!d' \
+	  -e 's/^monad-control-([0-9]+(\.[0-9]+)*)/\1 0 0 0/' \
+	  -e 's/\./ /g' -e 's/([0-9]+) *([0-9]+) *([0-9]+) .*/\
+	   -DMONAD_CONTROL_MAJOR=\1 -DMONAD_CONTROL_MINOR=\2 -DMONAD_CONTROL_REV=\3/'\
+	  -e 's/^\s*//' \
+	>> $@
+
 HS_MAKEFILE_GHC_SRCS = $(HS_SRC_PROGS:%=%.hs)
 if WANT_HSTESTS
 HS_MAKEFILE_GHC_SRCS += $(HS_TEST_PROGS:%=%.hs)
 endif
-Makefile.ghc: $(HS_MAKEFILE_GHC_SRCS) Makefile \
+Makefile.ghc: $(HS_MAKEFILE_GHC_SRCS) Makefile hs-pkg-versions \
               | $(built_base_sources) $(HS_BUILT_SRCS)
 	$(GHC) -M -dep-makefile $@ -dep-suffix $(HPROF_SUFFIX) \
 		-dep-suffix $(HTEST_SUFFIX) $(HFLAGS) -itest/hs \
+	  $(shell cat hs-pkg-versions) \
 		$(HS_PARALLEL3) $(HS_REGEX_PCRE) $(HEXTRA_COMBINED) $(HS_MAKEFILE_GHC_SRCS)
+# Since ghc -M does not generate dependency line for object files, dependencies
+# from a target executable seed object (e.g. src/hluxid.o) to objects which
+# finally will be linked to the target object (e.g. src/Ganeti/Daemon.o) are
+# missing in Makefile.ghc.
+# see: https://www.haskell.org/ghc/docs/7.6.2/html/users_guide/separate-compilation.html#makefile-dependencies
+# Following substitutions will add dependencies between object files which
+# corresponds to the interface file already there as a dependency for each
+# object listed in Makefile.ghc.
+# e.g. src/hluxid.o : src/Ganeti/Daemon.hi
+#        => src/hluxid.o : src/Ganeti/Daemon.hi src/Ganeti/Daemon.o
+	sed -i -r -e 's/([^ ]+)\.hi$$/\1.hi \1.o/' -e 's/([^ ]+)_hi$$/\1_hi \1_o/' $@
 
 @include_makefile_ghc@
 
-%.o:
+%.o: hs-pkg-versions
 	@echo '[GHC]: $@ <- $^'
 	@$(GHC) -c $(HFLAGS) \
+	  $(shell cat hs-pkg-versions) \
 		$(HS_PARALLEL3) $(HS_REGEX_PCRE) $(HEXTRA_COMBINED) $(@:%.o=%.hs)
 
 # For TH+profiling we need to compile twice: Once without profiling,
 # and then once with profiling. See
 # http://www.haskell.org/ghc/docs/7.0.4/html/users_guide/template-haskell.html#id636646
 if HPROFILE
-%.$(HPROF_SUFFIX)_o: %.o
+%.$(HPROF_SUFFIX)_o: %.o hs-pkg-versions
 	@echo '[GHC|prof]: $@ <- $^'
 	@$(GHC) -c $(HFLAGS) \
+	  $(shell cat hs-pkg-versions) \
 	  $(HPROFFLAGS) \
 		$(HS_PARALLEL3) $(HS_REGEX_PCRE) $(HEXTRA_COMBINED) \
 		$(@:%.$(HPROF_SUFFIX)_o=%.hs)
 endif
 
-%.$(HTEST_SUFFIX)_o:
+%.$(HTEST_SUFFIX)_o: hs-pkg-versions
 	@echo '[GHC|test]: $@ <- $^'
 	@$(GHC) -c $(HTEST_FLAGS) \
+	  $(shell cat hs-pkg-versions) \
 		$(HS_PARALLEL3) $(HS_REGEX_PCRE) $(HEXTRA_COMBINED) $(@:%.$(HTEST_SUFFIX)_o=%.hs)
 
 %.hi: %.o ;
@@ -1203,16 +1246,17 @@
 if HPROFILE
 $(HS_SRC_PROGS): %: %.$(HPROF_SUFFIX)_o | stamp-directories
 else
-$(HS_SRC_PROGS): %: %.o | stamp-directories
+$(HS_SRC_PROGS): %: %.o hs-pkg-versions | stamp-directories
 endif
 	@echo '[GHC-link]: $@'
 	$(GHC) $(HFLAGS) \
+	  $(shell cat hs-pkg-versions) \
 		$(HPROFFLAGS) \
 		$(HS_PARALLEL3) $(HS_REGEX_PCRE) $(HEXTRA_COMBINED) --make $(@:%=%.hs)
 	@rm -f $(notdir $@).tix
 	@touch "$@"
 
-$(HS_TEST_PROGS): %: %.$(HTEST_SUFFIX)_o \
+$(HS_TEST_PROGS): %: %.$(HTEST_SUFFIX)_o hs-pkg-versions \
 	                   | stamp-directories $(built_python_sources)
 	@if [ "$(HS_NODEV)" ]; then \
 	  echo "Error: cannot run unittests without the development" \
@@ -1221,6 +1265,7 @@
 	fi
 	@echo '[GHC-link|test]: $@'
 	$(GHC) $(HTEST_FLAGS) \
+	  $(shell cat hs-pkg-versions) \
 		$(HS_PARALLEL3) $(HS_REGEX_PCRE) $(HEXTRA_COMBINED) --make $(@:%=%.hs)
 	@rm -f $(notdir $@).tix
 	@touch "$@"
@@ -1270,20 +1315,31 @@
 	tools/post-upgrade \
 	tools/sanitize-config
 
+python_scripts_shebang = \
+	$(patsubst tools/%,tools/shebang/%, $(python_scripts))
+
+tools/shebang/%: tools/%
+	mkdir -p tools/shebang
+	head -1 $< | sed 's|#!/usr/bin/python|#!$(PYTHON)|' > $@
+	echo '# Generated file; do not edit.' >> $@
+	tail -n +2 $< >> $@
+
 dist_tools_SCRIPTS = \
 	tools/kvm-console-wrapper \
 	tools/master-ip-setup \
 	tools/xen-console-wrapper
 
 dist_tools_python_SCRIPTS = \
-	$(python_scripts) \
 	tools/burnin
 
 nodist_tools_python_SCRIPTS = \
-	tools/node-cleanup
+	tools/node-cleanup \
+        $(python_scripts_shebang)
 
-tools_python_basenames = $(patsubst tools/%,%,\
-	$(dist_tools_python_SCRIPTS) $(nodist_tools_python_SCRIPTS))
+tools_python_basenames = \
+	$(patsubst shebang/%,%,\
+	$(patsubst tools/%,%,\
+	$(dist_tools_python_SCRIPTS) $(nodist_tools_python_SCRIPTS)))
 
 nodist_tools_SCRIPTS = \
 	tools/users-setup \
@@ -1310,6 +1366,7 @@
 	tools/kvm-ifup-os \
 	tools/xen-ifup-os \
 	tools/vif-ganeti \
+	tools/vif-ganeti-metad \
 	tools/net-common \
 	$(HS_MYEXECLIB_PROGS)
 
@@ -1344,13 +1401,16 @@
 	daemons/daemon-util.in \
 	daemons/ganeti-cleaner.in \
 	$(pkglib_python_scripts) \
+	devel/build_chroot \
 	devel/upload \
 	devel/webserver \
 	tools/kvm-ifup.in \
 	tools/ifup-os.in \
 	tools/vif-ganeti.in \
+	tools/vif-ganeti-metad.in \
 	tools/net-common.in \
 	tools/vcluster-setup.in \
+        $(python_scripts) \
 	$(docinput) \
 	doc/html \
 	$(BUILT_EXAMPLES:%=%.in) \
@@ -1360,6 +1420,10 @@
 	doc/examples/gnt-debug/README \
 	doc/examples/gnt-debug/delay0.json \
 	doc/examples/gnt-debug/delay50.json \
+	doc/examples/systemd/ganeti-master.target \
+	doc/examples/systemd/ganeti-node.target \
+	doc/examples/systemd/ganeti.service \
+	doc/examples/systemd/ganeti.target \
 	doc/users/groupmemberships.in \
 	doc/users/groups.in \
 	doc/users/users.in \
@@ -1701,6 +1765,7 @@
 	test/py/cmdlib/testsupport/iallocator_mock.py \
 	test/py/cmdlib/testsupport/livelock_mock.py \
 	test/py/cmdlib/testsupport/netutils_mock.py \
+	test/py/cmdlib/testsupport/pathutils_mock.py \
 	test/py/cmdlib/testsupport/processor_mock.py \
 	test/py/cmdlib/testsupport/rpc_runner_mock.py \
 	test/py/cmdlib/testsupport/ssh_mock.py \
@@ -1859,6 +1924,10 @@
 	sed -f $(REPLACE_VARS_SED) < $< > $@
 	chmod +x $@
 
+tools/vif-ganeti-metad: tools/vif-ganeti-metad.in $(REPLACE_VARS_SED)
+	sed -f $(REPLACE_VARS_SED) < $< > $@
+	chmod +x $@
+
 tools/net-common: tools/net-common.in $(REPLACE_VARS_SED)
 	sed -f $(REPLACE_VARS_SED) < $< > $@
 	chmod +x $@
@@ -2084,8 +2153,8 @@
 	    -DMAN_PAGES="$$(for i in $(notdir $(man_MANS)); do \
 	                    echo -n "$$i" | sed -re 's/^(.*)\.([0-9]+)$$/("\1",\2):/g'; \
 	                    done)" \
-	    -DAF_INET4="$$(PYTHONPATH=. python $(PRINT_PY_CONSTANTS) AF_INET4)" \
-	    -DAF_INET6="$$(PYTHONPATH=. python $(PRINT_PY_CONSTANTS) AF_INET6)" \
+	    -DAF_INET4="$$(PYTHONPATH=. $(PYTHON) $(PRINT_PY_CONSTANTS) AF_INET4)" \
+	    -DAF_INET6="$$(PYTHONPATH=. $(PYTHON) $(PRINT_PY_CONSTANTS) AF_INET6)" \
 	$(abs_top_srcdir)/src/AutoConf.hs.in > $@
 
 lib/_vcsversion.py: Makefile vcs-version | stamp-directories
@@ -2194,7 +2263,7 @@
 $(PYTHON_BOOTSTRAP) $(gnt_scripts) $(gnt_python_sbin_SCRIPTS): Makefile | stamp-directories
 	test -n "$(MODULE)" || { echo Missing module; exit 1; }
 	set -e; \
-	{ echo '#!/usr/bin/python'; \
+	{ echo '#!${PYTHON}'; \
 	  echo '# This file is automatically generated, do not edit!'; \
 	  echo "# Edit $(MODULE) instead."; \
 	  echo; \
@@ -2276,7 +2345,8 @@
 .PHONY: check-local
 check-local: check-dirs check-news $(GENERATED_FILES)
 	$(CHECK_PYTHON_CODE) $(check_python_code)
-	PYTHONPATH=. $(CHECK_HEADER) $(check_python_code)
+	PYTHONPATH=. $(CHECK_HEADER) \
+	    $(filter-out $(GENERATED_FILES),$(check_python_code))
 	$(CHECK_VERSION) $(VERSION) $(top_srcdir)/NEWS
 	PYTHONPATH=. $(RUN_IN_TEMPDIR) $(CURDIR)/$(CHECK_IMPORTS) . $(standalone_python_modules)
 	error= ; \
@@ -2322,6 +2392,14 @@
 	@rm -f htest.tix
 	./test/hs/htest
 
+.PHONY: py-tests
+py-tests: $(python_tests) ganeti $(built_python_sources)
+	error=; \
+	for file in $(python_tests); \
+	  do if ! $(TESTS_ENVIRONMENT) $$file; then error=1; fi; \
+	done; \
+	test -z "$$error"
+
 .PHONY: hs-shell-%
 hs-shell-%: test/hs/hpc-htools test/hs/hpc-mon-collector \
             $(HS_BUILT_TEST_HELPERS)
@@ -2572,10 +2650,11 @@
 	  $(HS_LIBTESTBUILT_SRCS)
 
 .PHONY: TAGS
-TAGS: $(GENERATED_FILES)
+TAGS: $(GENERATED_FILES) hs-pkg-versions
 	rm -f TAGS
 	$(GHC) -e ":etags TAGS_hs" -v0 \
 	  $(filter-out -O -Werror,$(HFLAGS)) \
+	  $(shell cat hs-pkg-versions) \
 		-osuf tags.o \
 		-hisuf tags.hi \
     -lcurl \
@@ -2673,4 +2752,9 @@
 
 -include ./Makefile.local
 
+# support inspecting the value of a make variable
+
+print-%:
+	@echo $($*)
+
 # vim: set noet :
diff -Nru ganeti-2.12.0/Makefile.in ganeti-2.12.3/Makefile.in
--- ganeti-2.12.0/Makefile.in	2014-10-10 11:52:14.000000000 +0300
+++ ganeti-2.12.3/Makefile.in	2015-04-29 11:09:38.000000000 +0300
@@ -62,27 +62,28 @@
 @ENABLE_CONFD_TRUE at am__append_4 = src/hconfd
 @ENABLE_MOND_TRUE at am__append_5 = src/ganeti-mond
 @ENABLE_METADATA_TRUE at am__append_6 = src/ganeti-metad
- at HCOVERAGE_TRUE@am__append_7 = -fhpc
- at HTEST_TRUE@am__append_8 = -DTEST
- at HAS_SPHINX_TRUE@@MANPAGES_IN_DOC_TRUE at am__append_9 = doc/man-html
- at HAS_SPHINX_TRUE@@MANPAGES_IN_DOC_FALSE at am__append_10 = doc/html
- at WANT_HSTESTS_TRUE@am__append_11 = $(HS_TEST_PROGS:%=%.hs)
- at ENABLE_CONFD_TRUE@am__append_12 = src/ganeti-confd
- at ENABLE_MOND_TRUE@am__append_13 = src/ganeti-mond
- at ENABLE_METADATA_TRUE@am__append_14 = src/ganeti-metad
- at PY_UNIT_TRUE@am__append_15 = $(python_tests)
- at WANT_HSTESTS_TRUE@am__append_16 = $(haskell_tests)
- at WANT_HSTESTS_TRUE@am__append_17 = test/hs/offline-test.sh
- at WANT_HSTESTS_TRUE@am__append_18 = \
+ at DEVELOPER_MODE_TRUE@am__append_7 = -Werror
+ at HCOVERAGE_TRUE@am__append_8 = -fhpc
+ at HTEST_TRUE@am__append_9 = -DTEST
+ at HAS_SPHINX_TRUE@@MANPAGES_IN_DOC_TRUE at am__append_10 = doc/man-html
+ at HAS_SPHINX_TRUE@@MANPAGES_IN_DOC_FALSE at am__append_11 = doc/html
+ at WANT_HSTESTS_TRUE@am__append_12 = $(HS_TEST_PROGS:%=%.hs)
+ at ENABLE_CONFD_TRUE@am__append_13 = src/ganeti-confd
+ at ENABLE_MOND_TRUE@am__append_14 = src/ganeti-mond
+ at ENABLE_METADATA_TRUE@am__append_15 = src/ganeti-metad
+ at PY_UNIT_TRUE@am__append_16 = $(python_tests)
+ at WANT_HSTESTS_TRUE@am__append_17 = $(haskell_tests)
+ at WANT_HSTESTS_TRUE@am__append_18 = test/hs/offline-test.sh
+ at WANT_HSTESTS_TRUE@am__append_19 = \
 @WANT_HSTESTS_TRUE@	test/hs/hpc-htools \
 @WANT_HSTESTS_TRUE@	test/hs/hpc-mon-collector \
 @WANT_HSTESTS_TRUE@	$(HS_BUILT_TEST_HELPERS)
 
- at PY_UNIT_TRUE@am__append_19 = $(python_tests) $(python_test_support)
- at HAS_PEP8_TRUE@am__append_20 = pep8
- at HAS_HLINT_TRUE@am__append_21 = hlint
- at HS_UNIT_TRUE@am__append_22 = hs-coverage
- at PY_UNIT_TRUE@am__append_23 = py-coverage
+ at PY_UNIT_TRUE@am__append_20 = $(python_tests) $(python_test_support)
+ at HAS_PEP8_TRUE@am__append_21 = pep8
+ at HAS_HLINT_TRUE@am__append_22 = hlint
+ at HS_UNIT_TRUE@am__append_23 = hs-coverage
+ at PY_UNIT_TRUE@am__append_24 = py-coverage
 subdir = .
 DIST_COMMON = README $(am__configure_deps) $(client_PYTHON) \
 	$(cmdlib_PYTHON) $(confd_PYTHON) $(dist_ifup_SCRIPTS) \
@@ -210,6 +211,7 @@
 CYGPATH_W = @CYGPATH_W@
 DAEMONS_GROUP = @DAEMONS_GROUP@
 DEFS = @DEFS@
+DEVELOPER_MODE = @DEVELOPER_MODE@
 DISK_SEPARATOR = @DISK_SEPARATOR@
 DOT = @DOT@
 DRBD_BARRIERS = @DRBD_BARRIERS@
@@ -578,6 +580,7 @@
 	ganeti-[0-9]*.[0-9]*.[0-9]* \
 	doc/html/_* \
 	doc/man-html/_* \
+	tools/shebang \
 	autom4te.cache
 
 
@@ -601,6 +604,7 @@
 	$(addsuffix /*.o,$(HS_DIRS)) \
 	$(addsuffix /*.$(HTEST_SUFFIX)_hi,$(HS_DIRS)) \
 	$(addsuffix /*.$(HTEST_SUFFIX)_o,$(HS_DIRS)) \
+	hs-pkg-versions \
 	Makefile.ghc \
 	Makefile.ghc.bak \
 	$(PYTHON_BOOTSTRAP) \
@@ -625,9 +629,11 @@
 	tools/kvm-ifup-os \
 	tools/xen-ifup-os \
 	tools/vif-ganeti \
+	tools/vif-ganeti-metad \
 	tools/net-common \
 	tools/users-setup \
 	tools/vcluster-setup \
+	$(python_scripts_shebang) \
 	stamp-directories \
 	stamp-srclinks \
 	$(nodist_pkgpython_PYTHON) \
@@ -1009,9 +1015,9 @@
 HS_SRC_PROGS = $(filter-out test/%,$(HS_ALL_PROGS))
 HS_PROG_SRCS = $(patsubst %,%.hs,$(HS_DEFAULT_PROGS)) src/mon-collector.hs
 HS_BUILT_TEST_HELPERS = $(HS_BIN_ROLES:%=test/hs/%) test/hs/hail
-HFLAGS = -O -Wall -Werror -isrc -fwarn-monomorphism-restriction \
-	-fwarn-tabs $(GHC_BYVERSION_FLAGS) $(am__append_7) \
-	$(am__append_8)
+HFLAGS = -O -Wall -isrc -fwarn-monomorphism-restriction -fwarn-tabs \
+	$(GHC_BYVERSION_FLAGS) $(am__append_7) $(am__append_8) \
+	$(am__append_9)
 HTEST_SUFFIX = hpc
 HPROF_SUFFIX = prof
 @HPROFILE_TRUE at HPROFFLAGS = -prof -fprof-auto-top -osuf $(HPROF_SUFFIX)_o \
@@ -1281,7 +1287,7 @@
 # distributed)
 noinst_DATA = $(BUILT_EXAMPLES) doc/examples/bash_completion \
 	doc/examples/bash_completion-debug $(userspecs) $(manhtml) \
-	$(am__append_9) $(am__append_10)
+	$(am__append_10) $(am__append_11)
 gnt_scripts = \
 	scripts/gnt-backup \
 	scripts/gnt-cluster \
@@ -1337,13 +1343,13 @@
 
 bin_SCRIPTS = $(HS_BIN_PROGS)
 HS_SRCS = $(HS_LIBTESTBUILT_SRCS)
-HS_MAKEFILE_GHC_SRCS = $(HS_SRC_PROGS:%=%.hs) $(am__append_11)
+HS_MAKEFILE_GHC_SRCS = $(HS_SRC_PROGS:%=%.hs) $(am__append_12)
 dist_sbin_SCRIPTS = \
 	tools/ganeti-listrunner
 
 nodist_sbin_SCRIPTS = daemons/ganeti-cleaner src/ganeti-kvmd \
-	src/ganeti-luxid src/ganeti-wconfd $(am__append_12) \
-	$(am__append_13) $(am__append_14)
+	src/ganeti-luxid src/ganeti-wconfd $(am__append_13) \
+	$(am__append_14) $(am__append_15)
 
 # strip path prefixes off the sbin scripts
 all_sbin_scripts = \
@@ -1363,20 +1369,25 @@
 	tools/post-upgrade \
 	tools/sanitize-config
 
+python_scripts_shebang = \
+	$(patsubst tools/%,tools/shebang/%, $(python_scripts))
+
 dist_tools_SCRIPTS = \
 	tools/kvm-console-wrapper \
 	tools/master-ip-setup \
 	tools/xen-console-wrapper
 
 dist_tools_python_SCRIPTS = \
-	$(python_scripts) \
 	tools/burnin
 
 nodist_tools_python_SCRIPTS = \
-	tools/node-cleanup
+	tools/node-cleanup \
+        $(python_scripts_shebang)
 
-tools_python_basenames = $(patsubst tools/%,%,\
-	$(dist_tools_python_SCRIPTS) $(nodist_tools_python_SCRIPTS))
+tools_python_basenames = \
+	$(patsubst shebang/%,%,\
+	$(patsubst tools/%,%,\
+	$(dist_tools_python_SCRIPTS) $(nodist_tools_python_SCRIPTS)))
 
 nodist_tools_SCRIPTS = \
 	tools/users-setup \
@@ -1402,6 +1413,7 @@
 	tools/kvm-ifup-os \
 	tools/xen-ifup-os \
 	tools/vif-ganeti \
+	tools/vif-ganeti-metad \
 	tools/net-common \
 	$(HS_MYEXECLIB_PROGS)
 
@@ -1437,13 +1449,16 @@
 	daemons/daemon-util.in \
 	daemons/ganeti-cleaner.in \
 	$(pkglib_python_scripts) \
+	devel/build_chroot \
 	devel/upload \
 	devel/webserver \
 	tools/kvm-ifup.in \
 	tools/ifup-os.in \
 	tools/vif-ganeti.in \
+	tools/vif-ganeti-metad.in \
 	tools/net-common.in \
 	tools/vcluster-setup.in \
+        $(python_scripts) \
 	$(docinput) \
 	doc/html \
 	$(BUILT_EXAMPLES:%=%.in) \
@@ -1453,6 +1468,10 @@
 	doc/examples/gnt-debug/README \
 	doc/examples/gnt-debug/delay0.json \
 	doc/examples/gnt-debug/delay50.json \
+	doc/examples/systemd/ganeti-master.target \
+	doc/examples/systemd/ganeti-node.target \
+	doc/examples/systemd/ganeti.service \
+	doc/examples/systemd/ganeti.target \
 	doc/users/groupmemberships.in \
 	doc/users/groups.in \
 	doc/users/users.in \
@@ -1793,6 +1812,7 @@
 	test/py/cmdlib/testsupport/iallocator_mock.py \
 	test/py/cmdlib/testsupport/livelock_mock.py \
 	test/py/cmdlib/testsupport/netutils_mock.py \
+	test/py/cmdlib/testsupport/pathutils_mock.py \
 	test/py/cmdlib/testsupport/processor_mock.py \
 	test/py/cmdlib/testsupport/rpc_runner_mock.py \
 	test/py/cmdlib/testsupport/ssh_mock.py \
@@ -1806,9 +1826,9 @@
 	test/py/systemd_unittest.bash \
 	test/py/ganeti-cleaner_unittest.bash \
 	test/py/import-export_unittest.bash test/py/cli-test.bash \
-	test/py/bash_completion.bash $(am__append_15) $(am__append_17)
-nodist_TESTS = $(am__append_16)
-check_SCRIPTS = $(am__append_18)
+	test/py/bash_completion.bash $(am__append_16) $(am__append_18)
+nodist_TESTS = $(am__append_17)
+check_SCRIPTS = $(am__append_19)
 TESTS = $(dist_TESTS) $(nodist_TESTS)
 
 # Environment for all tests
@@ -1832,7 +1852,7 @@
 	$(rpc_stub_PYTHON) $(pytools_PYTHON) $(http_PYTHON) \
 	$(confd_PYTHON) $(masterd_PYTHON) $(impexpd_PYTHON) \
 	$(utils_PYTHON) $(watcher_PYTHON) $(noinst_PYTHON) \
-	$(qa_scripts) $(am__append_19)
+	$(qa_scripts) $(am__append_20)
 srclink_files = \
 	man/footer.rst \
 	test/py/check-cert-expired_unittest.bash \
@@ -1915,12 +1935,12 @@
 LINT_OPTS_ALL = $(LINT_OPTS) \
   $(addprefix --disable=,$(LINT_DISABLE))
 
-LINT_TARGETS = pylint pylint-qa pylint-test $(am__append_20) \
-	$(am__append_21)
+LINT_TARGETS = pylint pylint-qa pylint-test $(am__append_21) \
+	$(am__append_22)
 
 # FIXME: remove ignore "Use void" when GHC 6.x is deprecated
 HLINT_EXCLUDES = src/Ganeti/THH.hs test/hs/hpc-htools.hs
-COVERAGE_TESTS = $(am__append_22) $(am__append_23)
+COVERAGE_TESTS = $(am__append_23) $(am__append_24)
 all: all-am
 
 .SUFFIXES:
@@ -3624,7 +3644,7 @@
 	-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
 clean: clean-am
 
-clean-am: clean-generic mostlyclean-am
+clean-am: clean-generic clean-local mostlyclean-am
 
 distclean: distclean-am
 	-rm -f $(am__CONFIG_DISTCLEAN_FILES)
@@ -3732,11 +3752,11 @@
 .MAKE: check-am install-am install-exec-am install-strip
 
 .PHONY: all all-am am--refresh check check-TESTS check-am check-local \
-	clean clean-generic dist dist-all dist-bzip2 dist-gzip \
-	dist-hook dist-lzip dist-lzma dist-shar dist-tarZ dist-xz \
-	dist-zip distcheck distclean distclean-generic distcleancheck \
-	distdir distuninstallcheck dvi dvi-am html html-am info \
-	info-am install install-am install-binSCRIPTS \
+	clean clean-generic clean-local dist dist-all dist-bzip2 \
+	dist-gzip dist-hook dist-lzip dist-lzma dist-shar dist-tarZ \
+	dist-xz dist-zip distcheck distclean distclean-generic \
+	distcleancheck distdir distuninstallcheck dvi dvi-am html \
+	html-am info info-am install install-am install-binSCRIPTS \
 	install-clientPYTHON install-cmdlibPYTHON install-confdPYTHON \
 	install-data install-data-am install-dist_ifupSCRIPTS \
 	install-dist_sbinSCRIPTS install-dist_toolsSCRIPTS \
@@ -3788,6 +3808,9 @@
 maintainer-clean-local:
 	rm -rf $(BUILDTIME_DIRS)
 
+clean-local:
+	rm -rf tools/shebang
+
 # Generating the RPC wrappers depends on many things, so make sure
 # it's built at the end of the built sources
 lib/_generated_rpc.py: | $(built_base_sources) $(built_python_base_sources)
@@ -3878,32 +3901,65 @@
 	for role in $(HS_BIN_ROLES); do \
 	  $(LN_S) -f htools $(DESTDIR)$(bindir)/$$role ; \
 	done
-Makefile.ghc: $(HS_MAKEFILE_GHC_SRCS) Makefile \
+
+# select the last line of output and extract the version number,
+# padding with 0s if needed
+hs-pkg-versions:
+	ghc-pkg list --simple-output lens \
+	| sed -r -e '$$!d' \
+	  -e 's/^lens-([0-9]+(\.[0-9]+)*)/\1 0 0 0/' \
+	  -e 's/\./ /g' -e 's/([0-9]+) *([0-9]+) *([0-9]+) .*/\
+	      -DLENS_MAJOR=\1 -DLENS_MINOR=\2 -DLENS_REV=\3/' \
+	  -e 's/^\s*//' \
+	> $@
+	ghc-pkg list --simple-output monad-control \
+	| sed -r -e '$$!d' \
+	  -e 's/^monad-control-([0-9]+(\.[0-9]+)*)/\1 0 0 0/' \
+	  -e 's/\./ /g' -e 's/([0-9]+) *([0-9]+) *([0-9]+) .*/\
+	   -DMONAD_CONTROL_MAJOR=\1 -DMONAD_CONTROL_MINOR=\2 -DMONAD_CONTROL_REV=\3/'\
+	  -e 's/^\s*//' \
+	>> $@
+Makefile.ghc: $(HS_MAKEFILE_GHC_SRCS) Makefile hs-pkg-versions \
               | $(built_base_sources) $(HS_BUILT_SRCS)
 	$(GHC) -M -dep-makefile $@ -dep-suffix $(HPROF_SUFFIX) \
 		-dep-suffix $(HTEST_SUFFIX) $(HFLAGS) -itest/hs \
+	  $(shell cat hs-pkg-versions) \
 		$(HS_PARALLEL3) $(HS_REGEX_PCRE) $(HEXTRA_COMBINED) $(HS_MAKEFILE_GHC_SRCS)
+# Since ghc -M does not generate dependency line for object files, dependencies
+# from a target executable seed object (e.g. src/hluxid.o) to objects which
+# finally will be linked to the target object (e.g. src/Ganeti/Daemon.o) are
+# missing in Makefile.ghc.
+# see: https://www.haskell.org/ghc/docs/7.6.2/html/users_guide/separate-compilation.html#makefile-dependencies
+# Following substitutions will add dependencies between object files which
+# corresponds to the interface file already there as a dependency for each
+# object listed in Makefile.ghc.
+# e.g. src/hluxid.o : src/Ganeti/Daemon.hi
+#        => src/hluxid.o : src/Ganeti/Daemon.hi src/Ganeti/Daemon.o
+	sed -i -r -e 's/([^ ]+)\.hi$$/\1.hi \1.o/' -e 's/([^ ]+)_hi$$/\1_hi \1_o/' $@
 
 @include_makefile_ghc@
 
-%.o:
+%.o: hs-pkg-versions
 	@echo '[GHC]: $@ <- $^'
 	@$(GHC) -c $(HFLAGS) \
+	  $(shell cat hs-pkg-versions) \
 		$(HS_PARALLEL3) $(HS_REGEX_PCRE) $(HEXTRA_COMBINED) $(@:%.o=%.hs)
 
 # For TH+profiling we need to compile twice: Once without profiling,
 # and then once with profiling. See
 # http://www.haskell.org/ghc/docs/7.0.4/html/users_guide/template-haskell.html#id636646
- at HPROFILE_TRUE@%.$(HPROF_SUFFIX)_o: %.o
+ at HPROFILE_TRUE@%.$(HPROF_SUFFIX)_o: %.o hs-pkg-versions
 @HPROFILE_TRUE@	@echo '[GHC|prof]: $@ <- $^'
 @HPROFILE_TRUE@	@$(GHC) -c $(HFLAGS) \
+ at HPROFILE_TRUE@	  $(shell cat hs-pkg-versions) \
 @HPROFILE_TRUE@	  $(HPROFFLAGS) \
 @HPROFILE_TRUE@		$(HS_PARALLEL3) $(HS_REGEX_PCRE) $(HEXTRA_COMBINED) \
 @HPROFILE_TRUE@		$(@:%.$(HPROF_SUFFIX)_o=%.hs)
 
-%.$(HTEST_SUFFIX)_o:
+%.$(HTEST_SUFFIX)_o: hs-pkg-versions
 	@echo '[GHC|test]: $@ <- $^'
 	@$(GHC) -c $(HTEST_FLAGS) \
+	  $(shell cat hs-pkg-versions) \
 		$(HS_PARALLEL3) $(HS_REGEX_PCRE) $(HEXTRA_COMBINED) $(@:%.$(HTEST_SUFFIX)_o=%.hs)
 
 %.hi: %.o ;
@@ -3911,15 +3967,16 @@
 %.$(HPROF_SUFFIX)_hi: %.$(HPROF_SUFFIX)_o ;
 
 @HPROFILE_TRUE@$(HS_SRC_PROGS): %: %.$(HPROF_SUFFIX)_o | stamp-directories
- at HPROFILE_FALSE@$(HS_SRC_PROGS): %: %.o | stamp-directories
+ at HPROFILE_FALSE@$(HS_SRC_PROGS): %: %.o hs-pkg-versions | stamp-directories
 	@echo '[GHC-link]: $@'
 	$(GHC) $(HFLAGS) \
+	  $(shell cat hs-pkg-versions) \
 		$(HPROFFLAGS) \
 		$(HS_PARALLEL3) $(HS_REGEX_PCRE) $(HEXTRA_COMBINED) --make $(@:%=%.hs)
 	@rm -f $(notdir $@).tix
 	@touch "$@"
 
-$(HS_TEST_PROGS): %: %.$(HTEST_SUFFIX)_o \
+$(HS_TEST_PROGS): %: %.$(HTEST_SUFFIX)_o hs-pkg-versions \
 	                   | stamp-directories $(built_python_sources)
 	@if [ "$(HS_NODEV)" ]; then \
 	  echo "Error: cannot run unittests without the development" \
@@ -3928,6 +3985,7 @@
 	fi
 	@echo '[GHC-link|test]: $@'
 	$(GHC) $(HTEST_FLAGS) \
+	  $(shell cat hs-pkg-versions) \
 		$(HS_PARALLEL3) $(HS_REGEX_PCRE) $(HEXTRA_COMBINED) --make $(@:%=%.hs)
 	@rm -f $(notdir $@).tix
 	@touch "$@"
@@ -3937,6 +3995,12 @@
 
 @ENABLE_CONFD_TRUE at src/ganeti-confd: src/hconfd
 @ENABLE_CONFD_TRUE@	cp -f $< $@
+
+tools/shebang/%: tools/%
+	mkdir -p tools/shebang
+	head -1 $< | sed 's|#!/usr/bin/python|#!$(PYTHON)|' > $@
+	echo '# Generated file; do not edit.' >> $@
+	tail -n +2 $< >> $@
 # test dependency
 @WANT_HSTESTS_TRUE at test/hs/offline-test.sh: test/hs/hpc-htools test/hs/hpc-mon-collector
 
@@ -3964,6 +4028,10 @@
 	sed -f $(REPLACE_VARS_SED) < $< > $@
 	chmod +x $@
 
+tools/vif-ganeti-metad: tools/vif-ganeti-metad.in $(REPLACE_VARS_SED)
+	sed -f $(REPLACE_VARS_SED) < $< > $@
+	chmod +x $@
+
 tools/net-common: tools/net-common.in $(REPLACE_VARS_SED)
 	sed -f $(REPLACE_VARS_SED) < $< > $@
 	chmod +x $@
@@ -4181,8 +4249,8 @@
 	    -DMAN_PAGES="$$(for i in $(notdir $(man_MANS)); do \
 	                    echo -n "$$i" | sed -re 's/^(.*)\.([0-9]+)$$/("\1",\2):/g'; \
 	                    done)" \
-	    -DAF_INET4="$$(PYTHONPATH=. python $(PRINT_PY_CONSTANTS) AF_INET4)" \
-	    -DAF_INET6="$$(PYTHONPATH=. python $(PRINT_PY_CONSTANTS) AF_INET6)" \
+	    -DAF_INET4="$$(PYTHONPATH=. $(PYTHON) $(PRINT_PY_CONSTANTS) AF_INET4)" \
+	    -DAF_INET6="$$(PYTHONPATH=. $(PYTHON) $(PRINT_PY_CONSTANTS) AF_INET6)" \
 	$(abs_top_srcdir)/src/AutoConf.hs.in > $@
 
 lib/_vcsversion.py: Makefile vcs-version | stamp-directories
@@ -4288,7 +4356,7 @@
 $(PYTHON_BOOTSTRAP) $(gnt_scripts) $(gnt_python_sbin_SCRIPTS): Makefile | stamp-directories
 	test -n "$(MODULE)" || { echo Missing module; exit 1; }
 	set -e; \
-	{ echo '#!/usr/bin/python'; \
+	{ echo '#!${PYTHON}'; \
 	  echo '# This file is automatically generated, do not edit!'; \
 	  echo "# Edit $(MODULE) instead."; \
 	  echo; \
@@ -4370,7 +4438,8 @@
 .PHONY: check-local
 check-local: check-dirs check-news $(GENERATED_FILES)
 	$(CHECK_PYTHON_CODE) $(check_python_code)
-	PYTHONPATH=. $(CHECK_HEADER) $(check_python_code)
+	PYTHONPATH=. $(CHECK_HEADER) \
+	    $(filter-out $(GENERATED_FILES),$(check_python_code))
 	$(CHECK_VERSION) $(VERSION) $(top_srcdir)/NEWS
 	PYTHONPATH=. $(RUN_IN_TEMPDIR) $(CURDIR)/$(CHECK_IMPORTS) . $(standalone_python_modules)
 	error= ; \
@@ -4416,6 +4485,14 @@
 	@rm -f htest.tix
 	./test/hs/htest
 
+.PHONY: py-tests
+py-tests: $(python_tests) ganeti $(built_python_sources)
+	error=; \
+	for file in $(python_tests); \
+	  do if ! $(TESTS_ENVIRONMENT) $$file; then error=1; fi; \
+	done; \
+	test -z "$$error"
+
 .PHONY: hs-shell-%
 hs-shell-%: test/hs/hpc-htools test/hs/hpc-mon-collector \
             $(HS_BUILT_TEST_HELPERS)
@@ -4622,10 +4699,11 @@
 	  $(HS_LIBTESTBUILT_SRCS)
 
 .PHONY: TAGS
-TAGS: $(GENERATED_FILES)
+TAGS: $(GENERATED_FILES) hs-pkg-versions
 	rm -f TAGS
 	$(GHC) -e ":etags TAGS_hs" -v0 \
 	  $(filter-out -O -Werror,$(HFLAGS)) \
+	  $(shell cat hs-pkg-versions) \
 		-osuf tags.o \
 		-hisuf tags.hi \
     -lcurl \
@@ -4715,6 +4793,11 @@
 
 -include ./Makefile.local
 
+# support inspecting the value of a make variable
+
+print-%:
+	@echo $($*)
+
 # vim: set noet :
 
 # Tell versions [3.59,3.63) of GNU make to not export all variables.
diff -Nru ganeti-2.12.0/man/gnt-backup.8.in ganeti-2.12.3/man/gnt-backup.8.in
--- ganeti-2.12.0/man/gnt-backup.8.in	2014-10-10 11:53:59.000000000 +0300
+++ ganeti-2.12.3/man/gnt-backup.8.in	2015-04-29 11:11:22.000000000 +0300
@@ -72,9 +72,8 @@
 former determining the minimum time to wait, and the latter how much
 longer to wait per MiB of data the instance has.
 .PP
-The exit code of the command is 0 if all disks were backed up
-successfully, 1 if no data was backed up or if the configuration export
-failed, and 2 if just some of the disks failed to backup.
+Should the snapshotting or transfer of any of the instance disks fail,
+the backup will not complete and any previous backups will be preserved.
 The exact details of the failures will be shown during the command
 execution (and will be stored in the job log).
 It is recommended that for any non-zero exit code, the backup is
diff -Nru ganeti-2.12.0/man/gnt-backup.gen ganeti-2.12.3/man/gnt-backup.gen
--- ganeti-2.12.0/man/gnt-backup.gen	2014-10-10 11:53:57.000000000 +0300
+++ ganeti-2.12.3/man/gnt-backup.gen	2015-04-29 11:11:20.000000000 +0300
@@ -62,13 +62,12 @@
 determining the minimum time to wait, and the latter how much longer
 to wait per MiB of data the instance has.
 
-The exit code of the command is 0 if all disks were backed up
-successfully, 1 if no data was backed up or if the configuration
-export failed, and 2 if just some of the disks failed to backup.
-The exact details of the failures will be shown during the command
-execution (and will be stored in the job log). It is recommended
-that for any non-zero exit code, the backup is considered invalid,
-and retried.
+Should the snapshotting or transfer of any of the instance disks
+fail, the backup will not complete and any previous backups will be
+preserved. The exact details of the failures will be shown during the
+command execution (and will be stored in the job log). It is
+recommended that for any non-zero exit code, the backup is considered
+invalid, and retried.
 
 See **ganeti**\(7) for a description of ``--submit`` and other common
 options.
diff -Nru ganeti-2.12.0/man/gnt-backup.html.in ganeti-2.12.3/man/gnt-backup.html.in
--- ganeti-2.12.0/man/gnt-backup.html.in	2014-10-10 11:53:58.000000000 +0300
+++ ganeti-2.12.3/man/gnt-backup.html.in	2015-04-29 11:11:22.000000000 +0300
@@ -42,7 +42,7 @@
 <p>The <code>--noshutdown</code> option will create a snapshot disk of the instance without shutting it down first. While this is faster and involves no downtime, it cannot be guaranteed that the instance data will be in a consistent state in the exported dump.</p>
 <p>The <code>--remove</code> option can be used to remove the instance after it was exported. This is useful to make one last backup before removing the instance.</p>
 <p>The <code>--zero-free-space</code> option can be used to zero the free space of the instance prior to exporting it, saving space if compression is used. The <code>--zeroing-timeout-fixed</code> and <code>--zeroing-timeout-per-mib</code> options control the timeout, the former determining the minimum time to wait, and the latter how much longer to wait per MiB of data the instance has.</p>
-<p>The exit code of the command is 0 if all disks were backed up successfully, 1 if no data was backed up or if the configuration export failed, and 2 if just some of the disks failed to backup. The exact details of the failures will be shown during the command execution (and will be stored in the job log). It is recommended that for any non-zero exit code, the backup is considered invalid, and retried.</p>
+<p>Should the snapshotting or transfer of any of the instance disks fail, the backup will not complete and any previous backups will be preserved. The exact details of the failures will be shown during the command execution (and will be stored in the job log). It is recommended that for any non-zero exit code, the backup is considered invalid, and retried.</p>
 <p>See <strong>ganeti</strong>(7) for a description of <code>--submit</code> and other common options.</p>
 <p>Example:</p>
 <pre><code># gnt-backup export -n node1.example.com instance3.example.com</code></pre>
diff -Nru ganeti-2.12.0/man/gnt-backup.rst ganeti-2.12.3/man/gnt-backup.rst
--- ganeti-2.12.0/man/gnt-backup.rst	2014-10-07 17:45:37.000000000 +0300
+++ ganeti-2.12.3/man/gnt-backup.rst	2015-04-28 18:05:35.000000000 +0300
@@ -62,13 +62,12 @@
 determining the minimum time to wait, and the latter how much longer
 to wait per MiB of data the instance has.
 
-The exit code of the command is 0 if all disks were backed up
-successfully, 1 if no data was backed up or if the configuration
-export failed, and 2 if just some of the disks failed to backup.
-The exact details of the failures will be shown during the command
-execution (and will be stored in the job log). It is recommended
-that for any non-zero exit code, the backup is considered invalid,
-and retried.
+Should the snapshotting or transfer of any of the instance disks
+fail, the backup will not complete and any previous backups will be
+preserved. The exact details of the failures will be shown during the
+command execution (and will be stored in the job log). It is
+recommended that for any non-zero exit code, the backup is considered
+invalid, and retried.
 
 See **ganeti**\(7) for a description of ``--submit`` and other common
 options.
diff -Nru ganeti-2.12.0/man/gnt-cluster.8.in ganeti-2.12.3/man/gnt-cluster.8.in
--- ganeti-2.12.0/man/gnt-cluster.8.in	2014-10-10 11:53:59.000000000 +0300
+++ ganeti-2.12.3/man/gnt-cluster.8.in	2015-04-29 11:11:23.000000000 +0300
@@ -96,7 +96,7 @@
 .IP
 .nf
 \f[C]
-#\ gnt-cluster\ -n\ node1.example.com\ -n\ node2.example.com\ copyfile\ /tmp/test
+#\ gnt-cluster\ copyfile\ -n\ node1.example.com\ -n\ node2.example.com\ /tmp/test
 \f[]
 .fi
 .PP
diff -Nru ganeti-2.12.0/man/gnt-cluster.gen ganeti-2.12.3/man/gnt-cluster.gen
--- ganeti-2.12.0/man/gnt-cluster.gen	2014-10-10 11:53:57.000000000 +0300
+++ ganeti-2.12.3/man/gnt-cluster.gen	2015-04-29 11:11:20.000000000 +0300
@@ -84,7 +84,7 @@
 copy to be done over the replication network (only matters if the
 primary/secondary IPs are different). Example::
 
-    # gnt-cluster -n node1.example.com -n node2.example.com copyfile /tmp/test
+    # gnt-cluster copyfile -n node1.example.com -n node2.example.com /tmp/test
 
 This will copy the file /tmp/test from the current node to the two
 named nodes.
diff -Nru ganeti-2.12.0/man/gnt-cluster.html.in ganeti-2.12.3/man/gnt-cluster.html.in
--- ganeti-2.12.0/man/gnt-cluster.html.in	2014-10-10 11:53:58.000000000 +0300
+++ ganeti-2.12.3/man/gnt-cluster.html.in	2015-04-29 11:11:22.000000000 +0300
@@ -77,7 +77,7 @@
 <h2 id="copyfile"><a href="#TOC">COPYFILE</a></h2>
 <p><strong>copyfile</strong> [--use-replication-network] [-n <em>node</em>] [-g <em>group</em>]<br />{<em>file</em>}</p>
 <p>Copies a file to all or to some nodes. The argument specifies the source file (on the current system), the <code>-n</code> argument specifies the target node, or nodes if the option is given multiple times. If <code>-n</code> is not given at all, the file will be copied to all nodes. The <code>-g</code> option can be used to only select nodes in a specific node group. Passing the <code>--use-replication-network</code> option will cause the copy to be done over the replication network (only matters if the primary/secondary IPs are different). Example:</p>
-<pre><code># gnt-cluster -n node1.example.com -n node2.example.com copyfile /tmp/test</code></pre>
+<pre><code># gnt-cluster copyfile -n node1.example.com -n node2.example.com /tmp/test</code></pre>
 <p>This will copy the file /tmp/test from the current node to the two named nodes.</p>
 <h2 id="deactivate-master-ip"><a href="#TOC">DEACTIVATE-MASTER-IP</a></h2>
 <p><strong>deactivate-master-ip</strong> [--yes]</p>
diff -Nru ganeti-2.12.0/man/gnt-cluster.rst ganeti-2.12.3/man/gnt-cluster.rst
--- ganeti-2.12.0/man/gnt-cluster.rst	2014-10-07 17:45:37.000000000 +0300
+++ ganeti-2.12.3/man/gnt-cluster.rst	2015-04-29 11:09:35.000000000 +0300
@@ -84,7 +84,7 @@
 copy to be done over the replication network (only matters if the
 primary/secondary IPs are different). Example::
 
-    # gnt-cluster -n node1.example.com -n node2.example.com copyfile /tmp/test
+    # gnt-cluster copyfile -n node1.example.com -n node2.example.com /tmp/test
 
 This will copy the file /tmp/test from the current node to the two
 named nodes.
diff -Nru ganeti-2.12.0/man/gnt-instance.8.in ganeti-2.12.3/man/gnt-instance.8.in
--- ganeti-2.12.0/man/gnt-instance.8.in	2014-10-10 11:53:59.000000000 +0300
+++ ganeti-2.12.3/man/gnt-instance.8.in	2015-04-29 11:11:23.000000000 +0300
@@ -202,7 +202,7 @@
 The NICs of the instances can be specified via the \f[C]--net\f[]
 option.
 By default, one NIC is created for the instance, with a random MAC, and
-set up according the the cluster level NIC parameters.
+set up according to the cluster level NIC parameters.
 Each NIC can take these parameters (all optional):
 .TP
 .B mac
@@ -220,7 +220,7 @@
 this NIC is meant to be connected to the said network.
 \f[C]--no-conflicts-check\f[] can be used to override this check.
 The special value \f[B]pool\f[] causes Ganeti to select an IP from the
-the network the NIC is or will be connected to.
+network the NIC is or will be connected to.
 One can pick an externally reserved IP of a network along with
 \f[C]--no-conflict-check\f[].
 Note that this IP cannot be assigned to any other instance until it gets
diff -Nru ganeti-2.12.0/man/gnt-instance.gen ganeti-2.12.3/man/gnt-instance.gen
--- ganeti-2.12.0/man/gnt-instance.gen	2014-10-10 11:53:57.000000000 +0300
+++ ganeti-2.12.3/man/gnt-instance.gen	2015-04-29 11:11:21.000000000 +0300
@@ -125,7 +125,7 @@
 
 The NICs of the instances can be specified via the ``--net``
 option. By default, one NIC is created for the instance, with a
-random MAC, and set up according the the cluster level NIC
+random MAC, and set up according to the cluster level NIC
 parameters. Each NIC can take these parameters (all optional):
 
 mac
@@ -140,7 +140,7 @@
     passed in the **network** parameter if this NIC is meant to be
     connected to the said network. ``--no-conflicts-check`` can be used
     to override this check. The special value **pool** causes Ganeti to
-    select an IP from the the network the NIC is or will be connected to.
+    select an IP from the network the NIC is or will be connected to.
     One can pick an externally reserved IP of a network along with
     ``--no-conflict-check``. Note that this IP cannot be assigned to
     any other instance until it gets released.
diff -Nru ganeti-2.12.0/man/gnt-instance.html.in ganeti-2.12.3/man/gnt-instance.html.in
--- ganeti-2.12.0/man/gnt-instance.html.in	2014-10-10 11:53:59.000000000 +0300
+++ ganeti-2.12.3/man/gnt-instance.html.in	2015-04-29 11:11:23.000000000 +0300
@@ -113,13 +113,13 @@
 <p>The <code>--no-ip-check</code> skips the checks that are done to see if the instance's IP is not already alive (i.e. reachable from the master node).</p>
 <p>The <code>--no-name-check</code> skips the check for the instance name via the resolver (e.g. in DNS or /etc/hosts, depending on your setup). Since the name check is used to compute the IP address, if you pass this option you must also pass the <code>--no-ip-check</code> option.</p>
 <p>If you don't want the instance to automatically start after creation, this is possible via the <code>--no-start</code> option. This will leave the instance down until a subsequent <strong>gnt-instance start</strong> command.</p>
-<p>The NICs of the instances can be specified via the <code>--net</code> option. By default, one NIC is created for the instance, with a random MAC, and set up according the the cluster level NIC parameters. Each NIC can take these parameters (all optional):</p>
+<p>The NICs of the instances can be specified via the <code>--net</code> option. By default, one NIC is created for the instance, with a random MAC, and set up according to the cluster level NIC parameters. Each NIC can take these parameters (all optional):</p>
 <dl>
 <dt>mac</dt>
 <dd><p>either a value or 'generate' to generate a new unique MAC</p>
 </dd>
 <dt>ip</dt>
-<dd><p>specifies the IP address assigned to the instance from the Ganeti side (this is not necessarily what the instance will use, but what the node expects the instance to use). Note that if an IP in the range of a network configured with <strong>gnt-network</strong>(8) is used, and the NIC is not already connected to it, this network has to be passed in the <strong>network</strong> parameter if this NIC is meant to be connected to the said network. <code>--no-conflicts-check</code> can be used to override this check. The special value <strong>pool</strong> causes Ganeti to select an IP from the the network the NIC is or will be connected to. One can pick an externally reserved IP of a network along with <code>--no-conflict-check</code>. Note that this IP cannot be assigned to any other instance until it gets released.</p>
+<dd><p>specifies the IP address assigned to the instance from the Ganeti side (this is not necessarily what the instance will use, but what the node expects the instance to use). Note that if an IP in the range of a network configured with <strong>gnt-network</strong>(8) is used, and the NIC is not already connected to it, this network has to be passed in the <strong>network</strong> parameter if this NIC is meant to be connected to the said network. <code>--no-conflicts-check</code> can be used to override this check. The special value <strong>pool</strong> causes Ganeti to select an IP from the network the NIC is or will be connected to. One can pick an externally reserved IP of a network along with <code>--no-conflict-check</code>. Note that this IP cannot be assigned to any other instance until it gets released.</p>
 </dd>
 <dt>mode</dt>
 <dd><p>specifies the connection mode for this NIC: routed, bridged or openvswitch.</p>
diff -Nru ganeti-2.12.0/man/gnt-instance.rst ganeti-2.12.3/man/gnt-instance.rst
--- ganeti-2.12.0/man/gnt-instance.rst	2014-10-09 14:57:28.000000000 +0300
+++ ganeti-2.12.3/man/gnt-instance.rst	2015-04-29 11:09:35.000000000 +0300
@@ -125,7 +125,7 @@
 
 The NICs of the instances can be specified via the ``--net``
 option. By default, one NIC is created for the instance, with a
-random MAC, and set up according the the cluster level NIC
+random MAC, and set up according to the cluster level NIC
 parameters. Each NIC can take these parameters (all optional):
 
 mac
@@ -140,7 +140,7 @@
     passed in the **network** parameter if this NIC is meant to be
     connected to the said network. ``--no-conflicts-check`` can be used
     to override this check. The special value **pool** causes Ganeti to
-    select an IP from the the network the NIC is or will be connected to.
+    select an IP from the network the NIC is or will be connected to.
     One can pick an externally reserved IP of a network along with
     ``--no-conflict-check``. Note that this IP cannot be assigned to
     any other instance until it gets released.
diff -Nru ganeti-2.12.0/NEWS ganeti-2.12.3/NEWS
--- ganeti-2.12.0/NEWS	2014-10-10 11:10:35.000000000 +0300
+++ ganeti-2.12.3/NEWS	2015-04-29 11:09:35.000000000 +0300
@@ -2,6 +2,123 @@
 ====
 
 
+Version 2.12.3
+--------------
+
+*(Released Wed, 29 Apr 2015)*
+
+- Fixed Issue #1019: upgrade from 2.6.2 to 2.12 fails. cfgupgrade
+  doesn't migrate the config.data file properly
+- Fixed Issue 1023: Master master-capable option bug
+- Fixed Issue 1068: gnt-network info outputs wrong external reservations
+- Fixed Issue 1070: Upgrade of Ganeti 2.5.2 to 2.12.0 fails due to
+  missing UUIDs for disks
+- Fixed Issue 1073: ssconf_hvparams_* not distributed with ssconf
+
+Inherited from the 2.11 branch:
+
+- Fixed Issue 1032: Renew-crypto --new-node-certificates sometimes does not
+  complete.
+  The operation 'gnt-cluster renew-crypto --new-node-certificates' is
+  now more robust against intermitten reachability errors. Nodes that
+  are temporarily not reachable, are contacted with several retries.
+  Nodes which are marked as offline are omitted right away.
+
+Inherited from the 2.10 branch:
+
+- Fixed Issue 1057: master-failover succeeds, but IP remains assigned to
+  old master
+- Fixed Issue 1058: Python's os.minor() does not support devices with
+  high minor numbers
+- Fixed Issue 1059: Luxid fails if DNS returns an IPv6 address that does
+  not reverse resolve
+
+Known issues
+~~~~~~~~~~~~
+
+Pending since 2.12.2:
+
+- GHC 7.8 introduced some incompatible changes, so currently Ganeti
+  2.12. doesn't compile on GHC 7.8
+- Under certain conditions instance doesn't get unpaused after live
+  migration (issue #1050)
+- GlusterFS support breaks at upgrade to 2.12 - switches back to
+  shared-file (issue #1030)
+
+
+Version 2.12.2
+--------------
+
+*(Released Wed, 25 Mar 2015)*
+
+- Support for the lens Haskell library up to version 4.7 (issue #1028)
+- SSH keys are now distributed only to master and master candidates
+  (issue #377)
+- Improved performance for operations that frequently read the
+  cluster configuration
+- Improved robustness of spawning job processes that occasionally caused
+  newly-started jobs to timeout
+- Fixed race condition during cluster verify which occasionally caused
+  it to fail
+
+Inherited from the 2.11 branch:
+
+- Fix failing automatic glusterfs mounts (issue #984)
+- Fix watcher failing to read its status file after an upgrade
+  (issue #1022)
+- Improve Xen instance state handling, in particular of somewhat exotic
+  transitional states
+
+Inherited from the 2.10 branch:
+
+- Fix failing to change a diskless drbd instance to plain
+  (issue #1036)
+- Fixed issues with auto-upgrades from pre-2.6
+  (hv_state_static and disk_state_static)
+- Fix memory leak in the monitoring daemon
+
+Inherited from the 2.9 branch:
+
+- Fix file descriptor leak in Confd client
+
+Known issues
+~~~~~~~~~~~~
+
+- GHC 7.8 introduced some incompatible changes, so currently Ganeti
+  2.12. doesn't compile on GHC 7.8
+- Under certain conditions instance doesn't get unpaused after live
+  migration (issue #1050)
+- GlusterFS support breaks at upgrade to 2.12 - switches back to
+  shared-file (issue #1030)
+
+
+Version 2.12.1
+--------------
+
+*(Released Wed, 14 Jan 2015)*
+
+- Fix users under which the wconfd and metad daemons run (issue #976)
+- Clean up stale livelock files (issue #865)
+- Fix setting up the metadata daemon's network interface for Xen
+- Make watcher identify itself on disk activation
+- Add "ignore-ipolicy" option to gnt-instance grow-disk
+- Check disk size ipolicy during "gnt-instance grow-disk" (issue #995)
+
+Inherited from the 2.11 branch:
+
+- Fix counting votes when doing master failover (issue #962)
+- Fix broken haskell dependencies (issues #758 and #912)
+- Check if IPv6 is used directly when running SSH (issue #892)
+
+Inherited from the 2.10 branch:
+
+- Fix typo in gnt_cluster output (issue #1015)
+- Use the Python path detected at configure time in the top-level Python
+  scripts.
+- Fix check for sphinx-build from python2-sphinx
+- Properly check if an instance exists in 'gnt-instance console'
+
+
 Version 2.12.0
 --------------
 
@@ -173,6 +290,17 @@
 are listed in the latest 2.12 entry.
 
 
+Version 2.11.7
+--------------
+
+*(Released Fri, 17 Apr 2015)*
+
+- The operation 'gnt-cluster renew-crypto --new-node-certificates' is
+  now more robust against intermitten reachability errors. Nodes that
+  are temporarily not reachable, are contacted with several retries.
+  Nodes which are marked as offline are omitted right away.
+
+
 Version 2.11.6
 --------------
 
diff -Nru ganeti-2.12.0/qa/ganeti-qa.py ganeti-2.12.3/qa/ganeti-qa.py
--- ganeti-2.12.0/qa/ganeti-qa.py	2014-10-09 14:57:28.000000000 +0300
+++ ganeti-2.12.3/qa/ganeti-qa.py	2015-04-29 11:09:35.000000000 +0300
@@ -859,8 +859,17 @@
 
 
 def RunMonitoringTests():
-  if qa_config.TestEnabled("mon-collector"):
-    RunTest(qa_monitoring.TestInstStatusCollector)
+  RunTestIf("mon-collector", qa_monitoring.TestInstStatusCollector)
+
+
+PARALLEL_TEST_DICT = {
+  "parallel-failover": qa_performance.TestParallelInstanceFailover,
+  "parallel-migration": qa_performance.TestParallelInstanceMigration,
+  "parallel-replace-disks": qa_performance.TestParallelInstanceReplaceDisks,
+  "parallel-reboot": qa_performance.TestParallelInstanceReboot,
+  "parallel-reinstall": qa_performance.TestParallelInstanceReinstall,
+  "parallel-rename": qa_performance.TestParallelInstanceRename,
+  }
 
 
 def RunPerformanceTests():
@@ -888,21 +897,20 @@
     if qa_config.IsTemplateSupported(constants.DT_PLAIN):
       RunTest(qa_performance.TestParallelPlainInstanceCreationPerformance)
 
-    if qa_config.IsTemplateSupported(constants.DT_DRBD8):
-      inodes = qa_config.AcquireManyNodes(2)
+  # Preparations need to be made only if some of these tests are enabled
+  if qa_config.IsTemplateSupported(constants.DT_DRBD8) and \
+     qa_config.TestEnabled(qa_config.Either(PARALLEL_TEST_DICT.keys())):
+    inodes = qa_config.AcquireManyNodes(2)
+    try:
+      instance = qa_instance.TestInstanceAddWithDrbdDisk(inodes)
       try:
-        instance = qa_instance.TestInstanceAddWithDrbdDisk(inodes)
-        try:
-          RunTest(qa_performance.TestParallelInstanceFailover, instance)
-          RunTest(qa_performance.TestParallelInstanceMigration, instance)
-          RunTest(qa_performance.TestParallelInstanceReplaceDisks, instance)
-          RunTest(qa_performance.TestParallelInstanceReboot, instance)
-          RunTest(qa_performance.TestParallelInstanceReinstall, instance)
-          RunTest(qa_performance.TestParallelInstanceRename, instance)
-        finally:
-          instance.Release()
+        for (test_name, test_fn) in PARALLEL_TEST_DICT.items():
+          RunTestIf(test_name, test_fn, instance)
       finally:
-        qa_config.ReleaseManyNodes(inodes)
+        instance.Release()
+      qa_instance.TestInstanceRemove(instance)
+    finally:
+      qa_config.ReleaseManyNodes(inodes)
 
 
 def RunQa():
diff -Nru ganeti-2.12.0/qa/qa_cluster.py ganeti-2.12.3/qa/qa_cluster.py
--- ganeti-2.12.0/qa/qa_cluster.py	2014-10-09 14:57:28.000000000 +0300
+++ ganeti-2.12.3/qa/qa_cluster.py	2015-04-29 11:09:35.000000000 +0300
@@ -47,10 +47,12 @@
 import qa_daemon
 import qa_error
 import qa_instance
+import qa_job_utils
 import qa_logging
 import qa_utils
 
-from qa_utils import AssertEqual, AssertCommand, GetCommandOutput
+from qa_utils import AssertEqual, AssertCommand, GetCommandOutput, \
+                     CheckFileUnmodified
 
 
 # Prefix for LVM volumes created by QA code during tests
@@ -149,8 +151,9 @@
   cvcmd = "gnt-cluster verify"
   mnode = qa_config.GetMasterNode()
   if errors or warnings or no_warnings:
-    cvout = GetCommandOutput(mnode.primary, cvcmd + " --error-codes",
-                             fail=(fail or errors))
+    with CheckFileUnmodified(mnode.primary, pathutils.CLUSTER_CONF_FILE):
+      cvout = GetCommandOutput(mnode.primary, cvcmd + " --error-codes",
+                               fail=(fail or errors))
     print cvout
     (act_errs, act_warns) = _GetCVErrorCodes(cvout)
     if errors:
@@ -161,7 +164,8 @@
       _CheckVerifyNoWarnings(act_warns, no_warnings)
 
   else:
-    AssertCommand(cvcmd, fail=fail, node=mnode)
+    with CheckFileUnmodified(mnode.primary, pathutils.CLUSTER_CONF_FILE):
+      AssertCommand(cvcmd, fail=fail, node=mnode)
 
 
 # data for testing failures due to bad keys/values for disk parameters
@@ -364,24 +368,25 @@
   # Unless --all is given master is not allowed to be in the list
   AssertCommand(["gnt-cluster", "epo", "-f", master.primary], fail=True)
 
-  # This shouldn't fail
-  AssertCommand(["gnt-cluster", "epo", "-f", "--all"])
-
-  # All instances should have been stopped now
-  result_output = GetCommandOutput(master.primary,
-                                   "gnt-instance list --no-headers -o status")
-  # ERROR_down because the instance is stopped but not recorded as such
-  AssertEqual(compat.all(status == "ERROR_down"
-                         for status in result_output.splitlines()), True)
-
-  # Now start everything again
-  AssertCommand(["gnt-cluster", "epo", "--on", "-f", "--all"])
-
-  # All instances should have been started now
-  result_output = GetCommandOutput(master.primary,
-                                   "gnt-instance list --no-headers -o status")
-  AssertEqual(compat.all(status == "running"
-                         for status in result_output.splitlines()), True)
+  with qa_job_utils.PausedWatcher():
+    # This shouldn't fail
+    AssertCommand(["gnt-cluster", "epo", "-f", "--all"])
+
+    # All instances should have been stopped now
+    result_output = GetCommandOutput(master.primary,
+                                     "gnt-instance list --no-headers -o status")
+    # ERROR_down because the instance is stopped but not recorded as such
+    AssertEqual(compat.all(status == "ERROR_down"
+                           for status in result_output.splitlines()), True)
+
+    # Now start everything again
+    AssertCommand(["gnt-cluster", "epo", "--on", "-f", "--all"])
+
+    # All instances should have been started now
+    result_output = GetCommandOutput(master.primary,
+                                     "gnt-instance list --no-headers -o status")
+    AssertEqual(compat.all(status == "running"
+                           for status in result_output.splitlines()), True)
 
 
 def TestClusterVerify():
diff -Nru ganeti-2.12.0/qa/qa_instance.py ganeti-2.12.3/qa/qa_instance.py
--- ganeti-2.12.0/qa/qa_instance.py	2014-10-09 14:57:28.000000000 +0300
+++ ganeti-2.12.3/qa/qa_instance.py	2015-04-29 11:09:35.000000000 +0300
@@ -566,6 +566,25 @@
   AssertCommand(["gnt-instance", "info", instance.name])
 
 
+def _TestKVMHotplug(instance):
+  """Tests hotplug modification commands, noting that they
+
+  """
+  args_to_try = [
+    ["--net", "-1:add", "--hotplug"],
+    ["--net", "-1:modify,mac=aa:bb:cc:dd:ee:ff", "--hotplug", "--force"],
+    ["--net", "-1:remove", "--hotplug"],
+    ["--disk", "-1:add,size=1G", "--hotplug"],
+    ["--disk", "-1:remove", "--hotplug"],
+  ]
+  for alist in args_to_try:
+    _, stdout, stderr = \
+      AssertCommand(["gnt-instance", "modify"] + alist + [instance.name])
+    if "failed" in stdout or "failed" in stderr:
+      raise qa_error.Error("Hotplugging command failed; please check output"
+                           " for further information")
+
+
 @InstanceCheck(INST_UP, INST_UP, FIRST_ARG)
 def TestInstanceModify(instance):
   """gnt-instance modify"""
@@ -611,16 +630,7 @@
       ])
   elif default_hv == constants.HT_KVM and \
     qa_config.TestEnabled("instance-device-hotplug"):
-    # FIXME: Fix issue 885 and then re-enable the tests below
-    #args.extend([
-    #  ["--net", "-1:add", "--hotplug"],
-    #  ["--net", "-1:modify,mac=aa:bb:cc:dd:ee:ff", "--hotplug", "--force"],
-    #  ["--net", "-1:remove", "--hotplug"],
-    #  ])
-    args.extend([
-      ["--disk", "-1:add,size=1G", "--hotplug"],
-      ["--disk", "-1:remove", "--hotplug"],
-      ])
+    _TestKVMHotplug(instance)
 
   url = "http://example.com/busybox.img"
   args.extend([
diff -Nru ganeti-2.12.0/qa/qa_job_utils.py ganeti-2.12.3/qa/qa_job_utils.py
--- ganeti-2.12.0/qa/qa_job_utils.py	2014-10-07 17:45:37.000000000 +0300
+++ ganeti-2.12.3/qa/qa_job_utils.py	2015-04-29 11:09:35.000000000 +0300
@@ -43,6 +43,7 @@
 from ganeti.utils import retry
 
 import qa_config
+import qa_logging
 import qa_error
 
 from qa_utils import AssertCommand, GetCommandOutput, GetObjectInfo
@@ -311,6 +312,26 @@
       thread.reraise()
 
 
+class PausedWatcher(object):
+  """Pauses the watcher for the duration of the inner code
+
+  """
+  def __enter__(self):
+    AssertCommand(["gnt-cluster", "watcher", "pause", "12h"])
+
+  def __exit__(self, _ex_type, ex_value, _ex_traceback):
+    try:
+      AssertCommand(["gnt-cluster", "watcher", "continue"])
+    except qa_error.Error, err:
+      # If an exception happens during 'continue', re-raise it only if there
+      # is no exception from the inner block:
+      if ex_value is None:
+        raise
+      else:
+        print qa_logging.FormatError('Re-enabling watcher failed: %s' %
+                                     (err, ))
+
+
 # TODO: Can this be done as a decorator? Implement as needed.
 def RunWithLocks(fn, locks, timeout, block, *args, **kwargs):
   """ Runs the given function, acquiring a set of locks beforehand.
diff -Nru ganeti-2.12.0/qa/qa_utils.py ganeti-2.12.3/qa/qa_utils.py
--- ganeti-2.12.0/qa/qa_utils.py	2014-10-09 14:57:28.000000000 +0300
+++ ganeti-2.12.3/qa/qa_utils.py	2015-04-29 11:09:35.000000000 +0300
@@ -32,6 +32,7 @@
 
 """
 
+import contextlib
 import copy
 import datetime
 import operator
@@ -152,13 +153,33 @@
                          (cmdstr, nodename, rcode))
 
 
+def _PrintCommandOutput(stdout, stderr):
+  """Prints the output of commands, minimizing wasted space.
+
+  @type stdout: string
+  @type stderr: string
+
+  """
+  if stdout:
+    stdout_clean = stdout.rstrip('\n')
+    if stderr:
+      print "Stdout was:\n%s" % stdout_clean
+    else:
+      print stdout_clean
+
+  if stderr:
+    print "Stderr was:"
+    print >> sys.stderr, stderr.rstrip('\n')
+
+
 def AssertCommand(cmd, fail=False, node=None, log_cmd=True, max_seconds=None):
   """Checks that a remote command succeeds.
 
   @param cmd: either a string (the command to execute) or a list (to
       be converted using L{utils.ShellQuoteArgs} into a string)
-  @type fail: boolean
-  @param fail: if the command is expected to fail instead of succeeding
+  @type fail: boolean or None
+  @param fail: if the command is expected to fail instead of succeeding,
+               or None if we don't care
   @param node: if passed, it should be the node on which the command
       should be executed, instead of the master node (can be either a
       dict or a string)
@@ -167,7 +188,7 @@
   @type max_seconds: double
   @param max_seconds: fail if the command takes more than C{max_seconds}
       seconds
-  @return: the return code of the command
+  @return: the return code, stdout and stderr of the command
   @raise qa_error.Error: if the command fails when it shouldn't or vice versa
 
   """
@@ -182,9 +203,18 @@
     cmdstr = utils.ShellQuoteArgs(cmd)
 
   start = datetime.datetime.now()
-  rcode = StartSSH(nodename, cmdstr, log_cmd=log_cmd).wait()
+  popen = StartSSH(nodename, cmdstr, log_cmd=log_cmd)
+  # Run the command
+  stdout, stderr = popen.communicate()
+  rcode = popen.returncode
   duration_seconds = TimedeltaToTotalSeconds(datetime.datetime.now() - start)
-  _AssertRetCode(rcode, fail, cmdstr, nodename)
+
+  try:
+    if fail is not None:
+      _AssertRetCode(rcode, fail, cmdstr, nodename)
+  finally:
+    if log_cmd:
+      _PrintCommandOutput(stdout, stderr)
 
   if max_seconds is not None:
     if duration_seconds > max_seconds:
@@ -192,7 +222,7 @@
         "Cmd '%s' took %f seconds, maximum of %f was exceeded" %
         (cmdstr, duration_seconds, max_seconds))
 
-  return rcode
+  return rcode, stdout, stderr
 
 
 def AssertRedirectedCommand(cmd, fail=False, node=None, log_cmd=True):
@@ -298,7 +328,8 @@
 
   """
   return StartLocalCommand(GetSSHCommand(node, cmd, strict=strict),
-                           _nolog_opts=True, log_cmd=log_cmd)
+                           _nolog_opts=True, log_cmd=log_cmd,
+                           stdout=subprocess.PIPE, stderr=subprocess.PIPE)
 
 
 def StartMultiplexer(node):
@@ -458,6 +489,32 @@
   return result
 
 
+ at contextlib.contextmanager
+def CheckFileUnmodified(node, filename):
+  """Checks that the content of a given file remains the same after running a
+  wrapped code.
+
+  @type node: string
+  @param node: node the command should run on
+  @type filename: string
+  @param filename: absolute filename to check
+
+  """
+  cmd = utils.ShellQuoteArgs(["sha1sum", MakeNodePath(node, filename)])
+
+  def Read():
+    return GetCommandOutput(node, cmd).strip()
+
+  # read the configuration
+  before = Read()
+  yield
+  # check that the configuration hasn't changed
+  after = Read()
+  if before != after:
+    raise qa_error.Error("File '%s' has changed unexpectedly on node %s"
+                         " during the last operation" % (filename, node))
+
+
 def ResolveInstanceName(instance):
   """Gets the full name of an instance.
 
@@ -572,10 +629,10 @@
                   fail=True)
 
   # Check exit code for listing unknown field
-  AssertEqual(AssertRedirectedCommand([cmd, "list",
-                                       "--output=field/does/not/exist"],
-                                      fail=True),
-              constants.EXIT_UNKNOWN_FIELD)
+  rcode, _, _ = AssertRedirectedCommand([cmd, "list",
+                                         "--output=field/does/not/exist"],
+                                        fail=True)
+  AssertEqual(rcode, constants.EXIT_UNKNOWN_FIELD)
 
 
 def GenericQueryFieldsTest(cmd, fields):
@@ -593,9 +650,9 @@
               utils.NiceSort(fields))
 
   # Check exit code for listing unknown field
-  AssertEqual(AssertCommand([cmd, "list-fields", "field/does/not/exist"],
-                            fail=True),
-              constants.EXIT_UNKNOWN_FIELD)
+  rcode, _, _ = AssertCommand([cmd, "list-fields", "field/does/not/exist"],
+                              fail=True)
+  AssertEqual(rcode, constants.EXIT_UNKNOWN_FIELD)
 
 
 def AddToEtcHosts(hostnames):
diff -Nru ganeti-2.12.0/src/Ganeti/BasicTypes.hs ganeti-2.12.3/src/Ganeti/BasicTypes.hs
--- ganeti-2.12.0/src/Ganeti/BasicTypes.hs	2014-10-09 14:57:28.000000000 +0300
+++ ganeti-2.12.3/src/Ganeti/BasicTypes.hs	2015-04-29 11:09:35.000000000 +0300
@@ -2,6 +2,8 @@
 {-# LANGUAGE FlexibleContexts #-}
 {-# LANGUAGE MultiParamTypeClasses #-}
 {-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE UndecidableInstances #-}
+{-# LANGUAGE CPP #-}
 
 {-
 
@@ -44,6 +46,7 @@
   , toError
   , toErrorBase
   , toErrorStr
+  , tryError
   , Error(..) -- re-export from Control.Monad.Error
   , MonadIO(..) -- re-export from Control.Monad.IO.Class
   , isOk
@@ -72,6 +75,14 @@
   , emptyListSet
   ) where
 
+-- The following macro is just a temporary solution for 2.12 and 2.13.
+-- Since 2.14 cabal creates proper macros for all dependencies.
+#define MIN_VERSION_monad_control(maj,min,rev) \
+  (((maj)<MONAD_CONTROL_MAJOR)|| \
+   (((maj)==MONAD_CONTROL_MAJOR)&&((min)<=MONAD_CONTROL_MINOR))|| \
+   (((maj)==MONAD_CONTROL_MAJOR)&&((min)==MONAD_CONTROL_MINOR)&& \
+    ((rev)<=MONAD_CONTROL_REV)))
+
 import Control.Applicative
 import Control.Exception (try)
 import Control.Monad
@@ -196,18 +207,33 @@
                    . (try :: IO a -> IO (Either IOError a))
 
 instance (Error a) => MonadTransControl (ResultT a) where
+#if MIN_VERSION_monad_control(1,0,0)
+-- Needs Undecidable instances
+  type StT (ResultT a) b = GenericResult a b
+  liftWith f = ResultT . liftM return $ f runResultT
+  restoreT = ResultT
+#else
   newtype StT (ResultT a) b = StResultT { runStResultT :: GenericResult a b }
   liftWith f = ResultT . liftM return $ f (liftM StResultT . runResultT)
   restoreT = ResultT . liftM runStResultT
+#endif
   {-# INLINE liftWith #-}
   {-# INLINE restoreT #-}
 
 instance (Error a, MonadBaseControl IO m)
          => MonadBaseControl IO (ResultT a m) where
+#if MIN_VERSION_monad_control(1,0,0)
+-- Needs Undecidable instances
+  type StM (ResultT a m) b
+    = ComposeSt (ResultT a) m b
+  liftBaseWith = defaultLiftBaseWith
+  restoreM = defaultRestoreM
+#else
   newtype StM (ResultT a m) b
     = StMResultT { runStMResultT :: ComposeSt (ResultT a) m b }
   liftBaseWith = defaultLiftBaseWith StMResultT
   restoreM = defaultRestoreM runStMResultT
+#endif
   {-# INLINE liftBaseWith #-}
   {-# INLINE restoreM #-}
 
@@ -251,6 +277,13 @@
 toErrorStr :: (MonadError e m, Error e) => Result a -> m a
 toErrorStr = withError strMsg
 
+-- | Run a given computation and if an error occurs, return it as `Left` of
+-- `Either`.
+-- This is a generalized version of 'try'.
+tryError :: (MonadError e m) => m a -> m (Either e a)
+tryError = flip catchError (return . Left) . liftM Right
+{-# INLINE tryError #-}
+
 -- | Converts a monadic result with a 'String' message into
 -- a 'ResultT' with an arbitrary 'Error'.
 --
diff -Nru ganeti-2.12.0/src/Ganeti/Confd/Client.hs ganeti-2.12.3/src/Ganeti/Confd/Client.hs
--- ganeti-2.12.0/src/Ganeti/Confd/Client.hs	2014-10-06 16:20:35.000000000 +0300
+++ ganeti-2.12.3/src/Ganeti/Confd/Client.hs	2015-04-22 20:10:50.000000000 +0300
@@ -38,6 +38,7 @@
   ) where
 
 import Control.Concurrent
+import Control.Exception (bracket)
 import Control.Monad
 import Data.List
 import Data.Maybe
@@ -130,9 +131,10 @@
   addr <- resolveAddr (fromIntegral port) host
   (af_family, sockaddr) <-
     exitIfBad "Unable to resolve the IP address" addr
-  s <- S.socket af_family S.Datagram S.defaultProtocol
-  _ <- S.sendTo s completeMsg sockaddr
-  replyMsg <- S.recv s C.maxUdpDataSize
+  replyMsg <- bracket (S.socket af_family S.Datagram S.defaultProtocol) S.sClose
+                $ \s -> do
+    _ <- S.sendTo s completeMsg sockaddr
+    S.recv s C.maxUdpDataSize
   parsedReply <-
     if C.confdMagicFourcc `isPrefixOf` replyMsg
       then return . parseReply hmac (drop 4 replyMsg) $ confdRqRsalt request
diff -Nru ganeti-2.12.0/src/Ganeti/Confd/Server.hs ganeti-2.12.3/src/Ganeti/Confd/Server.hs
--- ganeti-2.12.0/src/Ganeti/Confd/Server.hs	2014-10-09 14:57:28.000000000 +0300
+++ ganeti-2.12.3/src/Ganeti/Confd/Server.hs	2015-04-29 11:09:35.000000000 +0300
@@ -310,6 +310,7 @@
 prepMain :: PrepFn (S.Family, S.SockAddr) PrepResult
 prepMain _ (af_family, bindaddr) = do
   s <- S.socket af_family S.Datagram S.defaultProtocol
+  S.setSocketOption s S.ReuseAddr 1
   S.bindSocket s bindaddr
   cref <- newIORef (Bad "Configuration not yet loaded")
   return (s, cref)
diff -Nru ganeti-2.12.0/src/Ganeti/Config.hs ganeti-2.12.3/src/Ganeti/Config.hs
--- ganeti-2.12.0/src/Ganeti/Config.hs	2014-10-09 14:57:28.000000000 +0300
+++ ganeti-2.12.3/src/Ganeti/Config.hs	2015-04-29 11:09:35.000000000 +0300
@@ -311,7 +311,7 @@
 getFilledInstHvParams :: [String] -> ConfigData -> Instance -> HvParams
 getFilledInstHvParams globals cfg inst =
   -- First get the defaults of the parent
-  let hvName = hypervisorToRaw . instHypervisor $ inst
+  let hvName = instHypervisor inst
       hvParamMap = fromContainer . clusterHvparams $ configCluster cfg
       parentHvParams = maybe M.empty fromContainer $ M.lookup hvName hvParamMap
   -- Then the os defaults for the given hypervisor
diff -Nru ganeti-2.12.0/src/Ganeti/Constants.hs ganeti-2.12.3/src/Ganeti/Constants.hs
--- ganeti-2.12.0/src/Ganeti/Constants.hs	2014-10-09 14:57:28.000000000 +0300
+++ ganeti-2.12.3/src/Ganeti/Constants.hs	2015-04-29 11:09:35.000000000 +0300
@@ -4126,6 +4126,10 @@
 wconfdDefRwto :: Int
 wconfdDefRwto = 60
 
+-- | The prefix of the WConfD livelock file name
+wconfdLivelockPrefix :: String
+wconfdLivelockPrefix = "wconf-daemon"
+
 -- * Confd
 
 confdProtocolVersion :: Int
diff -Nru ganeti-2.12.0/src/Ganeti/Daemon.hs ganeti-2.12.3/src/Ganeti/Daemon.hs
--- ganeti-2.12.0/src/Ganeti/Daemon.hs	2014-10-08 15:45:38.000000000 +0300
+++ ganeti-2.12.3/src/Ganeti/Daemon.hs	2015-04-28 15:47:28.000000000 +0300
@@ -340,10 +340,10 @@
 vClusterHostNameEnvVar = "GANETI_HOSTNAME"
 
 -- | Get the real full qualified host name.
-getFQDN' :: IO String
-getFQDN' = do
+getFQDN' :: Maybe Socket.AddrInfo -> IO String
+getFQDN' hints = do
   hostname <- getHostName
-  addrInfos <- Socket.getAddrInfo Nothing (Just hostname) Nothing
+  addrInfos <- Socket.getAddrInfo hints (Just hostname) Nothing
   let address = listToMaybe addrInfos >>= (Just . Socket.addrAddress)
   case address of
     Just a -> do
@@ -351,9 +351,10 @@
       return (fromMaybe hostname fqdn)
     Nothing -> return hostname
 
--- | Return the full qualified host name, honoring the vcluster setup.
-getFQDN :: IO String
-getFQDN = do
+-- | Return the full qualified host name, honoring the vcluster setup
+-- and hints on the preferred socket type or protocol.
+getFQDNwithHints :: Maybe Socket.AddrInfo -> IO String
+getFQDNwithHints hints = do
   let ioErrorToNothing :: IOError -> IO (Maybe String)
       ioErrorToNothing _ = return Nothing
   vcluster_node <- Control.Exception.catch
@@ -361,7 +362,16 @@
                      ioErrorToNothing
   case vcluster_node of
     Just node_name -> return node_name
-    Nothing -> getFQDN'
+    Nothing -> getFQDN' hints
+
+-- | Return the full qualified host name, honoring the vcluster setup.
+getFQDN :: IO String
+getFQDN = do
+  familyresult <- Ssconf.getPrimaryIPFamily Nothing
+  getFQDNwithHints
+    $ genericResult (const Nothing)
+        (\family -> Just $ Socket.defaultHints { Socket.addrFamily = family })
+        familyresult
 
 -- | Returns if the current node is the master node.
 isMaster :: IO Bool
diff -Nru ganeti-2.12.0/src/Ganeti/DataCollectors/Types.hs ganeti-2.12.3/src/Ganeti/DataCollectors/Types.hs
--- ganeti-2.12.0/src/Ganeti/DataCollectors/Types.hs	2014-10-09 14:57:28.000000000 +0300
+++ ganeti-2.12.3/src/Ganeti/DataCollectors/Types.hs	2015-04-29 11:09:35.000000000 +0300
@@ -49,6 +49,8 @@
   , getCategoryName
   ) where
 
+import Control.DeepSeq (NFData, rnf)
+import Control.Seq (using, seqFoldable, rdeepseq)
 import Data.Char
 import Data.Ratio
 import qualified Data.Map as Map
@@ -135,9 +137,28 @@
     then Ok DCVerBuiltin else Ok . DCVersion $ fromJSString s
   readJSON v = fail $ "Invalid JSON value " ++ show v ++ " for type DCVersion"
 
--- | Type for the value field of the above map.
+-- | Type for the value field of the `CollectorMap` below.
 data CollectorData = CPULoadData (Seq.Seq (Integer, [Int]))
 
+{-
+
+Naturally, we want to make CollectorData an instance of NFData as
+follows.
+
+instance NFData CollectorData where
+  rnf (CPULoadData x) = rnf x
+
+However, Seq.Seq only became an instance of NFData in version 0.5.0.0
+of containers (Released 2012). So, for the moment, we use a generic
+way to reduce to normal form. In later versions of Ganeti, where we
+have the infra structure to do so, we will choose implementation depending
+on the version of the containers library available.
+
+-}
+
+instance NFData CollectorData where
+  rnf (CPULoadData x) =  (x `using` seqFoldable rdeepseq) `seq` ()
+
 -- | Type for the map storing the data of the statefull DataCollectors.
 type CollectorMap = Map.Map String CollectorData
 
diff -Nru ganeti-2.12.0/src/Ganeti/HTools/CLI.hs ganeti-2.12.3/src/Ganeti/HTools/CLI.hs
--- ganeti-2.12.0/src/Ganeti/HTools/CLI.hs	2014-10-09 14:57:28.000000000 +0300
+++ ganeti-2.12.3/src/Ganeti/HTools/CLI.hs	2015-04-29 11:09:35.000000000 +0300
@@ -144,7 +144,7 @@
   , optAcceptExisting :: Bool        -- ^ accept existing N+1 violations
   , optMonD        :: Bool           -- ^ Query MonDs
   , optMonDFile    :: Maybe FilePath -- ^ Optional file with data provided
-                                     -- ^ by MonDs
+                                     -- by MonDs
   , optEvacMode    :: Bool           -- ^ Enable evacuation mode
   , optRestrictedMigrate :: Bool     -- ^ Disallow replace-primary moves
   , optExInst      :: [String]       -- ^ Instances to be excluded
diff -Nru ganeti-2.12.0/src/Ganeti/HTools/Cluster.hs ganeti-2.12.3/src/Ganeti/HTools/Cluster.hs
--- ganeti-2.12.0/src/Ganeti/HTools/Cluster.hs	2014-10-09 14:57:28.000000000 +0300
+++ ganeti-2.12.3/src/Ganeti/HTools/Cluster.hs	2015-04-29 11:09:35.000000000 +0300
@@ -940,7 +940,7 @@
       sortedSols = sortMGResults goodSols
   in case sortedSols of
        [] -> Bad $ if null groups'
-                     then "no groups for evacuation: allowed groups was" ++
+                     then "no groups for evacuation: allowed groups was " ++
                           show allowed_gdxs ++ ", all groups: " ++
                           show (map fst groups)
                      else intercalate ", " all_msgs
diff -Nru ganeti-2.12.0/src/Ganeti/HTools/Program/Hroller.hs ganeti-2.12.3/src/Ganeti/HTools/Program/Hroller.hs
--- ganeti-2.12.0/src/Ganeti/HTools/Program/Hroller.hs	2014-10-06 16:20:35.000000000 +0300
+++ ganeti-2.12.3/src/Ganeti/HTools/Program/Hroller.hs	2015-04-22 20:10:50.000000000 +0300
@@ -409,7 +409,7 @@
                            sortBy (flip compare `on` length . fst) $
                            nodesRebootGroups
       confToMoveNames =
-        map (Instance.name *** (Node.name *** flip (>>=) (return . Node.name)))
+        map (Instance.name *** (Node.name *** (=<<) (return . Node.name)))
         . getMoves (nlf, ilf)
       namesAndMoves = map (map Node.name *** confToMoveNames) outputRebootGroups
 
diff -Nru ganeti-2.12.0/src/Ganeti/Hypervisor/Xen/Types.hs ganeti-2.12.3/src/Ganeti/Hypervisor/Xen/Types.hs
--- ganeti-2.12.0/src/Ganeti/Hypervisor/Xen/Types.hs	2014-10-06 16:20:35.000000000 +0300
+++ ganeti-2.12.3/src/Ganeti/Hypervisor/Xen/Types.hs	2015-04-22 20:10:50.000000000 +0300
@@ -66,7 +66,7 @@
 -- | Instance of FromLispConfig for Int.
 instance FromLispConfig Int where
   fromLispConfig (LCDouble d) = Ok $ floor d
-  fromLispConfig (LCList (LCString _:LCDouble d:[])) = Ok $ floor d
+  fromLispConfig (LCList [LCString _, LCDouble d]) = Ok $ floor d
   fromLispConfig c =
     Bad $ "Unable to extract a Int from this configuration: "
       ++ show c
@@ -74,7 +74,7 @@
 -- | Instance of FromLispConfig for Double.
 instance FromLispConfig Double where
   fromLispConfig (LCDouble d) = Ok d
-  fromLispConfig (LCList (LCString _:LCDouble d:[])) = Ok d
+  fromLispConfig (LCList [LCString _, LCDouble d]) = Ok d
   fromLispConfig c =
     Bad $ "Unable to extract a Double from this configuration: "
       ++ show c
@@ -82,7 +82,7 @@
 -- | Instance of FromLispConfig for String
 instance FromLispConfig String where
   fromLispConfig (LCString s) = Ok s
-  fromLispConfig (LCList (LCString _:LCString s:[])) = Ok s
+  fromLispConfig (LCList [LCString _, LCString s]) = Ok s
   fromLispConfig c =
     Bad $ "Unable to extract a String from this configuration: "
       ++ show c
diff -Nru ganeti-2.12.0/src/Ganeti/JSON.hs ganeti-2.12.3/src/Ganeti/JSON.hs
--- ganeti-2.12.0/src/Ganeti/JSON.hs	2014-10-09 14:57:28.000000000 +0300
+++ ganeti-2.12.3/src/Ganeti/JSON.hs	2015-04-29 11:09:35.000000000 +0300
@@ -68,6 +68,7 @@
   , ArrayObject(..)
   , HasStringRepr(..)
   , GenericContainer(..)
+  , emptyContainer
   , Container
   , MaybeForJSON(..)
   , TimeAsDoubleJSON(..)
@@ -327,6 +328,10 @@
 instance F.Traversable (GenericContainer a) where
   traverse f = fmap GenericContainer . F.traverse f . fromContainer
 
+-- | The empty container.
+emptyContainer :: GenericContainer a b
+emptyContainer = GenericContainer Map.empty
+
 -- | Type alias for string keys.
 type Container = GenericContainer String
 
diff -Nru ganeti-2.12.0/src/Ganeti/Lens.hs ganeti-2.12.3/src/Ganeti/Lens.hs
--- ganeti-2.12.0/src/Ganeti/Lens.hs	2014-10-07 17:45:37.000000000 +0300
+++ ganeti-2.12.3/src/Ganeti/Lens.hs	2015-04-28 18:05:35.000000000 +0300
@@ -1,4 +1,4 @@
-{-# LANGUAGE RankNTypes #-}
+{-# LANGUAGE RankNTypes, CPP #-}
 
 {-| Provides all lens-related functions.
 
@@ -44,6 +44,14 @@
   , atSet
   ) where
 
+
+-- The following macro is just a temporary solution for 2.12 and 2.13.
+-- Since 2.14 cabal creates proper macros for all dependencies.
+#define MIN_VERSION_lens(maj,min,rev) \
+  (((maj)<LENS_MAJOR)|| \
+   (((maj)==LENS_MAJOR)&&((min)<=LENS_MINOR))|| \
+   (((maj)==LENS_MAJOR)&&((min)==LENS_MINOR)&&((rev)<=LENS_REV)))
+
 import Control.Applicative ((<$>), WrappedMonad(..))
 import Control.Lens
 import Control.Monad
@@ -64,8 +72,19 @@
 makeCustomLensesFiltered f = makeLensesWith customRules
   where
     customRules :: LensRules
-    customRules = set lensField (fmap lensFieldName . mfilter f . Just)
-                      defaultRules
+    customRules = set lensField nameFun lensRules
+#if MIN_VERSION_lens(4,5,0)
+    nameFun :: Name -> [Name] -> Name -> [DefName]
+    nameFun _ _ = liftM (TopName . mkName) . nameFilter . nameBase
+#elif MIN_VERSION_lens(4,4,0)
+    nameFun :: [Name] -> Name -> [DefName]
+    nameFun _ = liftM (TopName . mkName) . nameFilter . nameBase
+#else
+    nameFun :: String -> Maybe String
+    nameFun = nameFilter
+#endif
+    nameFilter :: (MonadPlus m) => String -> m String
+    nameFilter = liftM lensFieldName . mfilter f . return
 
 -- | Create lenses for all fields of a given data type.
 makeCustomLenses :: Name -> Q [Dec]
@@ -93,7 +112,7 @@
 mapMOf2 k f = unwrapMonad . traverseOf2 k (WrapMonad . f)
 
 -- | A helper lens over sets.
--- While a similar lens exists in the package (as @Lens' Set (Maybe ())@@),
+-- While a similar lens exists in the package (as @Lens' Set (Maybe ())@),
 -- it's available only in most recent versions.
 -- And using @Bool@ instead of @Maybe ()@ is more convenient.
 atSet :: (Ord a) => a -> Lens' (S.Set a) Bool
diff -Nru ganeti-2.12.0/src/Ganeti/Logging/WriterLog.hs ganeti-2.12.3/src/Ganeti/Logging/WriterLog.hs
--- ganeti-2.12.0/src/Ganeti/Logging/WriterLog.hs	2014-10-09 14:57:28.000000000 +0300
+++ ganeti-2.12.3/src/Ganeti/Logging/WriterLog.hs	2015-04-29 11:09:35.000000000 +0300
@@ -1,5 +1,5 @@
 {-# LANGUAGE FlexibleInstances, FlexibleContexts, TypeFamilies,
-             MultiParamTypeClasses #-}
+             MultiParamTypeClasses, UndecidableInstances, CPP #-}
 
 {-| A pure implementation of MonadLog using MonadWriter
 
@@ -45,6 +45,14 @@
   , execWriterLog
   ) where
 
+-- The following macro is just a temporary solution for 2.12 and 2.13.
+-- Since 2.14 cabal creates proper macros for all dependencies.
+#define MIN_VERSION_monad_control(maj,min,rev) \
+  (((maj)<MONAD_CONTROL_MAJOR)|| \
+   (((maj)==MONAD_CONTROL_MAJOR)&&((min)<=MONAD_CONTROL_MINOR))|| \
+   (((maj)==MONAD_CONTROL_MAJOR)&&((min)==MONAD_CONTROL_MINOR)&& \
+    ((rev)<=MONAD_CONTROL_REV)))
+
 import Control.Applicative
 import Control.Monad
 import Control.Monad.Base
@@ -132,19 +140,35 @@
   lift = WriterLogT . lift
 
 instance MonadTransControl WriterLogT where
+#if MIN_VERSION_monad_control(1,0,0)
+-- Needs Undecidable instances
+    type StT WriterLogT a = (a, LogSeq)
+    liftWith f = WriterLogT . WriterT $ liftM (\x -> (x, mempty))
+                              (f runWriterLogT)
+    restoreT = WriterLogT . WriterT
+#else
     newtype StT WriterLogT a =
       StWriterLog { unStWriterLog :: (a, LogSeq) }
     liftWith f = WriterLogT . WriterT $ liftM (\x -> (x, mempty))
                               (f $ liftM StWriterLog . runWriterLogT)
     restoreT = WriterLogT . WriterT . liftM unStWriterLog
+#endif
     {-# INLINE liftWith #-}
     {-# INLINE restoreT #-}
 
 instance (MonadBaseControl IO m)
          => MonadBaseControl IO (WriterLogT m) where
+#if MIN_VERSION_monad_control(1,0,0)
+-- Needs Undecidable instances
+  type StM (WriterLogT m) a
+    = ComposeSt WriterLogT m a
+  liftBaseWith = defaultLiftBaseWith
+  restoreM = defaultRestoreM
+#else
   newtype StM (WriterLogT m) a
     = StMWriterLog { runStMWriterLog :: ComposeSt WriterLogT m a }
   liftBaseWith = defaultLiftBaseWith StMWriterLog
   restoreM = defaultRestoreM runStMWriterLog
+#endif
   {-# INLINE liftBaseWith #-}
   {-# INLINE restoreM #-}
diff -Nru ganeti-2.12.0/src/Ganeti/Metad/Config.hs ganeti-2.12.3/src/Ganeti/Metad/Config.hs
--- ganeti-2.12.0/src/Ganeti/Metad/Config.hs	2014-10-07 17:45:37.000000000 +0300
+++ ganeti-2.12.3/src/Ganeti/Metad/Config.hs	2015-04-22 20:10:50.000000000 +0300
@@ -71,8 +71,9 @@
 -- data structure containing all parameters and their visibility.
 --
 -- Example:
---   { "os-image": ["http://example.com/disk.img", "public"],
---     "os-password": ["mypassword", "secret"] }
+--
+-- > { "os-image": ["http://example.com/disk.img", "public"],
+-- >   "os-password": ["mypassword", "secret"] }
 makeInstanceParams
   :: JSObject JSValue -> JSObject JSValue -> JSObject JSValue -> JSValue
 makeInstanceParams pub priv sec =
diff -Nru ganeti-2.12.0/src/Ganeti/Metad/ConfigServer.hs ganeti-2.12.3/src/Ganeti/Metad/ConfigServer.hs
--- ganeti-2.12.0/src/Ganeti/Metad/ConfigServer.hs	2014-10-07 17:45:37.000000000 +0300
+++ ganeti-2.12.3/src/Ganeti/Metad/ConfigServer.hs	2015-04-28 15:47:28.000000000 +0300
@@ -38,11 +38,10 @@
 import Control.Exception (try, finally)
 import Control.Monad (unless)
 import Text.JSON
-import System.FilePath ((</>))
 import System.IO.Error (isEOFError)
 
 import Ganeti.Path as Path
-import Ganeti.Daemon (DaemonOptions)
+import Ganeti.Daemon (DaemonOptions, cleanupSocket, describeError)
 import qualified Ganeti.Logging as Logging
 import Ganeti.Runtime (GanetiDaemon(..))
 import Ganeti.UDSServer (Client, ConnectConfig(..), Server, ServerConfig(..))
@@ -51,11 +50,6 @@
 import Ganeti.Metad.Config as Config
 import Ganeti.Metad.Types (InstanceParams)
 
-metadSocket :: IO FilePath
-metadSocket =
-  do dir <- Path.socketDir
-     return $ dir </> "ganeti-metad"
-
 -- | Update the configuration with the received instance parameters.
 updateConfig :: MVar InstanceParams -> String -> IO ()
 updateConfig config str =
@@ -97,8 +91,11 @@
      acceptClients config server
 
 start :: DaemonOptions -> MVar InstanceParams -> IO ()
-start _ config =
-  do server <- UDSServer.connectServer metadConfig True =<< metadSocket
+start _ config = do
+     socket_path <- Path.defaultMetadSocket
+     cleanupSocket socket_path
+     server <- describeError "binding to the socket" Nothing (Just socket_path)
+               $ UDSServer.connectServer metadConfig True socket_path
      finally
        (acceptClients config server)
        (UDSServer.closeServer server)
diff -Nru ganeti-2.12.0/src/Ganeti/Monitoring/Server.hs ganeti-2.12.3/src/Ganeti/Monitoring/Server.hs
--- ganeti-2.12.0/src/Ganeti/Monitoring/Server.hs	2014-10-09 14:57:28.000000000 +0300
+++ ganeti-2.12.3/src/Ganeti/Monitoring/Server.hs	2015-04-29 11:09:35.000000000 +0300
@@ -41,6 +41,8 @@
   ) where
 
 import Control.Applicative
+import Control.DeepSeq (force)
+import Control.Exception.Base (evaluate)
 import Control.Monad
 import Control.Monad.IO.Class
 import Data.ByteString.Char8 hiding (map, filter, find)
@@ -252,6 +254,7 @@
       let name = dName collector
           existing = Map.lookup name m
       new_data <- update existing
+      _ <- evaluate $ force new_data
       return $ Map.insert name new_data m
 
 -- | Invokes collect for each data collector.
diff -Nru ganeti-2.12.0/src/Ganeti/Objects.hs ganeti-2.12.3/src/Ganeti/Objects.hs
--- ganeti-2.12.0/src/Ganeti/Objects.hs	2014-10-09 14:57:28.000000000 +0300
+++ ganeti-2.12.3/src/Ganeti/Objects.hs	2015-04-29 11:09:35.000000000 +0300
@@ -354,7 +354,7 @@
   showsPrec _ (LogicalVolume g v) =
     showString g . showString "/" . showString v
 
--- | Check the constraints for a VG/LV names (except the @/dev/@ check).
+-- | Check the constraints for a VG/LV names (except the @\/dev\/@ check).
 instance Validatable LogicalVolume where
   validate (LogicalVolume g v) = do
       let vgn = "Volume group name"
@@ -761,7 +761,7 @@
 ipFamilyToVersion IpFamilyV6 = C.ip6Version
 
 -- | Cluster HvParams (hvtype to hvparams mapping).
-type ClusterHvParams = Container HvParams
+type ClusterHvParams = GenericContainer Hypervisor HvParams
 
 -- | Cluster Os-HvParams (os to hvparams mapping).
 type OsHvParams = Container ClusterHvParams
@@ -848,8 +848,10 @@
   , simpleField "primary_ip_family"              [t| IpFamily               |]
   , simpleField "prealloc_wipe_disks"            [t| Bool                   |]
   , simpleField "ipolicy"                        [t| FilledIPolicy          |]
-  , simpleField "hv_state_static"                [t| HypervisorState        |]
-  , simpleField "disk_state_static"              [t| DiskState              |]
+  , defaultField [| emptyContainer |] $
+    simpleField "hv_state_static"                [t| HypervisorState        |]
+  , defaultField [| emptyContainer |] $
+    simpleField "disk_state_static"              [t| DiskState              |]
   , simpleField "enabled_disk_templates"         [t| [DiskTemplate]         |]
   , simpleField "candidate_certs"                [t| CandidateCertificates  |]
   , simpleField "max_running_jobs"               [t| Int                    |]
diff -Nru ganeti-2.12.0/src/Ganeti/OpCodes.hs ganeti-2.12.3/src/Ganeti/OpCodes.hs
--- ganeti-2.12.0/src/Ganeti/OpCodes.hs	2014-10-09 14:57:28.000000000 +0300
+++ ganeti-2.12.3/src/Ganeti/OpCodes.hs	2015-04-29 11:09:35.000000000 +0300
@@ -692,6 +692,7 @@
      , pDiskIndex
      , pDiskChgAmount
      , pDiskChgAbsolute
+     , pIgnoreIpolicy
      ],
      "instance_name")
   , ("OpInstanceChangeGroup",
diff -Nru ganeti-2.12.0/src/Ganeti/Path.hs ganeti-2.12.3/src/Ganeti/Path.hs
--- ganeti-2.12.0/src/Ganeti/Path.hs	2014-10-07 17:45:37.000000000 +0300
+++ ganeti-2.12.3/src/Ganeti/Path.hs	2015-04-22 20:10:50.000000000 +0300
@@ -42,6 +42,7 @@
   , livelockFile
   , defaultQuerySocket
   , defaultWConfdSocket
+  , defaultMetadSocket
   , confdHmacKey
   , clusterConfFile
   , lockStatusFile
@@ -123,6 +124,10 @@
 defaultWConfdSocket :: IO FilePath
 defaultWConfdSocket = socketDir `pjoin` "ganeti-wconfd"
 
+-- | The default MetaD socket for communication.
+defaultMetadSocket :: IO FilePath
+defaultMetadSocket = socketDir `pjoin` "ganeti-metad"
+
 -- | Path to file containing confd's HMAC key.
 confdHmacKey :: IO FilePath
 confdHmacKey = dataDirP "hmac.key"
diff -Nru ganeti-2.12.0/src/Ganeti/Query/Common.hs ganeti-2.12.3/src/Ganeti/Query/Common.hs
--- ganeti-2.12.0/src/Ganeti/Query/Common.hs	2014-10-07 17:45:37.000000000 +0300
+++ ganeti-2.12.3/src/Ganeti/Query/Common.hs	2015-04-28 18:05:35.000000000 +0300
@@ -259,7 +259,7 @@
 getHvParamsFromCluster :: ConfigData -> Hypervisor -> HvParams
 getHvParamsFromCluster cfg hv =
   fromMaybe (GenericContainer Map.empty) .
-    Map.lookup (hypervisorToRaw hv) .
+    Map.lookup hv .
       fromContainer . clusterHvparams $ configCluster cfg
 
 -- | Given an alias list and a field list, copies field definitions under a
diff -Nru ganeti-2.12.0/src/Ganeti/Query/Exec.hs ganeti-2.12.3/src/Ganeti/Query/Exec.hs
--- ganeti-2.12.0/src/Ganeti/Query/Exec.hs	2014-10-09 14:57:28.000000000 +0300
+++ ganeti-2.12.3/src/Ganeti/Query/Exec.hs	2015-04-29 11:09:35.000000000 +0300
@@ -60,20 +60,19 @@
   , forkJobProcess
   ) where
 
-import Control.Concurrent
-import Control.Exception.Lifted (onException)
+import Control.Concurrent (rtsSupportsBoundThreads)
+import Control.Concurrent.Lifted (threadDelay)
 import Control.Monad
 import Control.Monad.Error
-import Control.Monad.Trans.Maybe
 import Data.Functor
 import qualified Data.Map as M
 import Data.Maybe (listToMaybe, mapMaybe)
 import System.Directory (getDirectoryContents)
 import System.Environment
-import System.IO.Error (tryIOError)
+import System.IO.Error (tryIOError, annotateIOError, modifyIOError)
 import System.Posix.Process
 import System.Posix.IO
-import System.Posix.Signals (sigTERM, signalProcess)
+import System.Posix.Signals (sigABRT, sigKILL, sigTERM, signalProcess)
 import System.Posix.Types (Fd, ProcessID)
 import System.Time
 import Text.Printf
@@ -114,6 +113,14 @@
     filterReadable :: (Read a) => [String] -> [a]
     filterReadable = mapMaybe (fmap fst . listToMaybe . reads)
 
+
+-- | Catches a potential `IOError` and sets its description via
+-- `annotateIOError`. This makes exceptions more informative when they
+-- are thrown from an unnamed `Handle`.
+rethrowAnnotateIOError :: String -> IO a -> IO a
+rethrowAnnotateIOError desc =
+  modifyIOError (\e -> annotateIOError e desc Nothing Nothing)
+
 -- Code that is executed in a @fork at -ed process and that the replaces iteself
 -- with the actual job process
 runJobProcess :: JobId -> Client -> IO ()
@@ -201,61 +208,69 @@
                   -- and process id in the job file
                -> ResultT e IO (FilePath, ProcessID)
 forkJobProcess jid luxiLivelock update = do
+  let jidStr = show . fromJobId $ jid
+
   logDebug $ "Setting the lockfile temporarily to " ++ luxiLivelock
+             ++ " for job " ++ jidStr
   update luxiLivelock
 
   -- Due to a bug in GHC forking process, we want to retry,
   -- if the forked process fails to start.
   -- If it fails later on, the failure is handled by 'ResultT'
   -- and no retry is performed.
-  let execWriterLogInside =
-        MaybeT . ResultT . execWriterLogT . runResultT . runMaybeT
-  resultOpt <- retryMaybeN C.luxidRetryForkCount
+  let execWriterLogInside = ResultT . execWriterLogT . runResultT
+  retryErrorN C.luxidRetryForkCount
                $ \tryNo -> execWriterLogInside $ do
     let maxWaitUS = 2^(tryNo - 1) * C.luxidRetryForkStepUS
     when (tryNo >= 2) . liftIO $ delayRandom (0, maxWaitUS)
 
     (pid, master) <- liftIO $ forkWithPipe connectConfig (runJobProcess jid)
 
+    let jobLogPrefix = "[start:job-" ++ jidStr ++ ",pid=" ++ show pid ++ "] "
+        logDebugJob = logDebug . (jobLogPrefix ++)
+
+    logDebugJob "Forked a new process"
+
+    let killIfAlive [] = return ()
+        killIfAlive (sig : sigs) = do
+          logDebugJob "Getting the status of the process"
+          status <- tryError . liftIO $ getProcessStatus False True pid
+          case status of
+            Left e -> logDebugJob $ "Job process already gone: " ++ show e
+            Right (Just s) -> logDebugJob $ "Child process status: " ++ show s
+            Right Nothing -> do
+                logDebugJob $ "Child process running, killing by " ++ show sig
+                liftIO $ signalProcess sig pid
+                unless (null sigs) $ do
+                  threadDelay 100000 -- wait for 0.1s and check again
+                  killIfAlive sigs
+
     let onError = do
-          logDebug "Closing the pipe to the client"
+          logDebugJob "Closing the pipe to the client"
           withErrorLogAt WARNING "Closing the communication pipe failed"
               (liftIO (closeClient master)) `orElse` return ()
-          logDebug $ "Getting the status of job process "
-                     ++ show (fromJobId jid)
-          status <- liftIO $ getProcessStatus False True pid
-          case status of
-            Just s -> logDebug $ "Child process (job " ++ show (fromJobId jid)
-                                  ++ ") status: " ++ show s
-            Nothing -> do
-                      logDebug $ "Child process (job " ++ show (fromJobId jid)
-                                  ++ ") running, killing by SIGTERM"
-                      liftIO $ signalProcess sigTERM pid
-
-    flip onException onError $ do
-      let recv = liftIO $ recvMsg master
-          send = liftIO . sendMsg master
-      logDebug "Getting the lockfile of the client"
-      lockfile <- recv `orElse` mzero
+          killIfAlive [sigTERM, sigABRT, sigKILL]
+
+    flip catchError (\e -> onError >> throwError e)
+      $ do
+      let annotatedIO msg k = do
+            logDebugJob msg
+            liftIO $ rethrowAnnotateIOError (jobLogPrefix ++ msg) k
+      let recv msg = annotatedIO msg (recvMsg master)
+          send msg x = annotatedIO msg (sendMsg master x)
 
-      logDebug $ "Setting the lockfile to the final " ++ lockfile
+      lockfile <- recv "Getting the lockfile of the client"
+
+      logDebugJob $ "Setting the lockfile to the final " ++ lockfile
       toErrorBase $ update lockfile
-      logDebug "Confirming the client it can start"
-      send ""
+      send "Confirming the client it can start" ""
 
       -- from now on, we communicate with the job's Python process
 
-      logDebug "Waiting for the job to ask for the job id"
-      _ <- recv
-      logDebug "Writing job id to the client"
-      send . show $ fromJobId jid
-
-      logDebug "Waiting for the job to ask for the lock file name"
-      _ <- recv
-      logDebug "Writing the lock file name to the client"
-      send lockfile
+      _ <- recv "Waiting for the job to ask for the job id"
+      send "Writing job id to the client" jidStr
 
-      return (lockfile, pid)
+      _ <- recv "Waiting for the job to ask for the lock file name"
+      send "Writing the lock file name to the client" lockfile
 
-  maybe (failError "Unable to start the client process\
-                   \ - fork timed out repeatedly") return resultOpt
+      return (lockfile, pid)
diff -Nru ganeti-2.12.0/src/Ganeti/Query/Instance.hs ganeti-2.12.3/src/Ganeti/Query/Instance.hs
--- ganeti-2.12.0/src/Ganeti/Query/Instance.hs	2014-10-07 17:45:37.000000000 +0300
+++ ganeti-2.12.3/src/Ganeti/Query/Instance.hs	2015-04-28 18:05:35.000000000 +0300
@@ -875,7 +875,7 @@
 getHypervisorSpecs cfg instances =
   let hvs = nub . map instHypervisor $ instances
       hvParamMap = (fromContainer . clusterHvparams . configCluster $ cfg)
-  in zip hvs . map ((Map.!) hvParamMap . hypervisorToRaw) $ hvs
+  in zip hvs . map ((Map.!) hvParamMap) $ hvs
 
 -- | Collect live data from RPC query if enabled.
 collectLiveData :: Bool        -- ^ Live queries allowed
diff -Nru ganeti-2.12.0/src/Ganeti/Query/Network.hs ganeti-2.12.3/src/Ganeti/Query/Network.hs
--- ganeti-2.12.0/src/Ganeti/Query/Network.hs	2014-10-07 17:45:37.000000000 +0300
+++ ganeti-2.12.3/src/Ganeti/Query/Network.hs	2015-04-28 18:05:35.000000000 +0300
@@ -44,11 +44,12 @@
 
 import qualified Data.Map as Map
 import Data.Maybe (fromMaybe, mapMaybe)
-import Data.List (find, foldl', intercalate)
+import Data.List (find, intercalate)
 
 import Ganeti.JSON
 import Ganeti.Network
 import Ganeti.Objects
+import qualified Ganeti.Objects.BitArray as BA
 import Ganeti.Query.Language
 import Ganeti.Query.Common
 import Ganeti.Query.Types
@@ -165,24 +166,17 @@
 -- | Computes the reservations list for a network.
 --
 -- This doesn't use the netmask for validation of the length, instead
--- simply iterating over the reservations string.
-getReservations :: Ip4Network -> String -> [Ip4Address]
-getReservations net =
-  reverse .
-  fst .
-  foldl' (\(accu, addr) c ->
-            let addr' = nextIp4Address addr
-                accu' = case c of
-                          '1' -> addr:accu
-                          '0' -> accu
-                          _ -> -- FIXME: the reservations string
-                               -- should be a proper type
-                               accu
-            in (accu', addr')) ([], ip4netAddr net)
+-- simply iterating over the reservations.
+getReservations :: Ip4Network -> Maybe AddressPool -> [Ip4Address]
+getReservations _ Nothing = []
+getReservations net (Just pool) =
+  map snd . filter fst
+  $ zip (BA.toList . apReservations $ pool)
+        (iterate nextIp4Address $ ip4netAddr net)
 
 -- | Computes the external reservations as string for a network.
 getExtReservationsString :: Network -> ResultEntry
 getExtReservationsString net =
   let addrs = getReservations (networkNetwork net)
-              (maybe "" show $ networkExtReservations net)
+                              (networkExtReservations net)
   in rsNormal . intercalate ", " $ map show addrs
diff -Nru ganeti-2.12.0/src/Ganeti/Query/Server.hs ganeti-2.12.3/src/Ganeti/Query/Server.hs
--- ganeti-2.12.0/src/Ganeti/Query/Server.hs	2014-10-09 14:57:28.000000000 +0300
+++ ganeti-2.12.3/src/Ganeti/Query/Server.hs	2015-04-29 11:09:35.000000000 +0300
@@ -495,4 +495,4 @@
 
   finally
     (forever $ U.listener (luxiHandler (qlock, jq, creader)) server)
-    (closeServer server)
+    (closeServer server >> removeFile qlockFile)
diff -Nru ganeti-2.12.0/src/Ganeti/Rpc.hs ganeti-2.12.3/src/Ganeti/Rpc.hs
--- ganeti-2.12.0/src/Ganeti/Rpc.hs	2014-10-07 17:45:37.000000000 +0300
+++ ganeti-2.12.3/src/Ganeti/Rpc.hs	2015-04-22 20:10:50.000000000 +0300
@@ -119,6 +119,7 @@
 import System.Posix.Files ( modificationTime, accessTime, fileOwner
                           , fileGroup, fileMode, getFileStatus)
 
+import Network.BSD (getServiceByName, servicePort)
 import Network.Curl hiding (content)
 import qualified Ganeti.Path as P
 
@@ -201,23 +202,22 @@
 isIpV6 = (':' `elem`)
 
 -- | Prepare url for the HTTP request.
-prepareUrl :: (RpcCall a) => Node -> a -> String
-prepareUrl node call =
+prepareUrl :: (RpcCall a) => Int -> Node -> a -> String
+prepareUrl port node call =
   let node_ip = nodePrimaryIp node
       node_address = if isIpV6 node_ip
                      then "[" ++ node_ip ++ "]"
                      else node_ip
-      port = C.defaultNodedPort
       path_prefix = "https://" ++ node_address ++ ":" ++ show port
   in path_prefix ++ "/" ++ rpcCallName call
 
 -- | Create HTTP request for a given node provided it is online,
 -- otherwise create empty response.
-prepareHttpRequest :: (RpcCall a) => [CurlOption] -> Node -> a
+prepareHttpRequest :: (RpcCall a) => Int -> [CurlOption] -> Node -> a
                    -> ERpcError HttpClientRequest
-prepareHttpRequest opts node call
+prepareHttpRequest port opts node call
   | rpcCallAcceptOffline call || not (nodeOffline node) =
-      Right HttpClientRequest { requestUrl  = prepareUrl node call
+      Right HttpClientRequest { requestUrl  = prepareUrl port node call
                               , requestData = rpcCallData node call
                               , requestOpts = opts ++ curlOpts
                               }
@@ -269,21 +269,28 @@
   , CurlCAInfo cert_path
   ]
 
+-- | Determine to port to call noded at.
+getNodedPort :: IO Int
+getNodedPort = withDefaultOnIOError C.defaultNodedPort
+               . liftM (fromIntegral . servicePort)
+               $ getServiceByName C.noded "tcp"
+
 -- | Execute multiple RPC calls in parallel
 executeRpcCalls :: (Rpc a b) => [(Node, a)] -> IO [(Node, ERpcError b)]
 executeRpcCalls nodeCalls = do
+  port <- getNodedPort
   cert_file <- P.nodedCertFile
   client_cert_file_name <- P.nodedClientCertFile
   client_file_exists <- doesFileExist client_cert_file_name
-  -- FIXME: This is needed to ensure upgradability to 2.11
-  -- Remove in 2.12.
+  -- This is needed to allow upgrades from 2.10 or earlier;
+  -- note that Ganeti supports jump-upgrades.
   let client_cert_file = if client_file_exists
                          then client_cert_file_name
                          else cert_file
       (nodes, calls) = unzip nodeCalls
       opts = map (getOptionsForCall cert_file client_cert_file) calls
       opts_urls = zipWith3 (\n c o ->
-                         case prepareHttpRequest o n c of
+                         case prepareHttpRequest port o n c of
                            Left v -> Left v
                            Right request ->
                              Right (CurlPostFields [requestData request]:
diff -Nru ganeti-2.12.0/src/Ganeti/Ssconf.hs ganeti-2.12.3/src/Ganeti/Ssconf.hs
--- ganeti-2.12.0/src/Ganeti/Ssconf.hs	2014-10-07 17:45:37.000000000 +0300
+++ ganeti-2.12.3/src/Ganeti/Ssconf.hs	2015-04-28 11:13:10.000000000 +0300
@@ -38,6 +38,7 @@
   ( SSKey(..)
   , sSKeyToRaw
   , sSKeyFromRaw
+  , hvparamsSSKey
   , getPrimaryIPFamily
   , parseNodesVmCapable
   , getNodesVmCapable
@@ -53,6 +54,7 @@
   , emptySSConf
   ) where
 
+import Control.Arrow ((&&&))
 import Control.Applicative ((<$>))
 import Control.Exception
 import Control.Monad (forM, liftM)
@@ -83,40 +85,61 @@
 sSFilePrefix :: FilePath
 sSFilePrefix = C.ssconfFileprefix
 
-$(declareSADT "SSKey"
-  [ ("SSClusterName",          'C.ssClusterName)
-  , ("SSClusterTags",          'C.ssClusterTags)
-  , ("SSFileStorageDir",       'C.ssFileStorageDir)
-  , ("SSSharedFileStorageDir", 'C.ssSharedFileStorageDir)
-  , ("SSGlusterStorageDir",    'C.ssGlusterStorageDir)
-  , ("SSMasterCandidates",     'C.ssMasterCandidates)
-  , ("SSMasterCandidatesIps",  'C.ssMasterCandidatesIps)
-  , ("SSMasterCandidatesCerts",'C.ssMasterCandidatesCerts)
-  , ("SSMasterIp",             'C.ssMasterIp)
-  , ("SSMasterNetdev",         'C.ssMasterNetdev)
-  , ("SSMasterNetmask",        'C.ssMasterNetmask)
-  , ("SSMasterNode",           'C.ssMasterNode)
-  , ("SSNodeList",             'C.ssNodeList)
-  , ("SSNodePrimaryIps",       'C.ssNodePrimaryIps)
-  , ("SSNodeSecondaryIps",     'C.ssNodeSecondaryIps)
-  , ("SSNodeVmCapable",        'C.ssNodeVmCapable)
-  , ("SSOfflineNodes",         'C.ssOfflineNodes)
-  , ("SSOnlineNodes",          'C.ssOnlineNodes)
-  , ("SSPrimaryIpFamily",      'C.ssPrimaryIpFamily)
-  , ("SSInstanceList",         'C.ssInstanceList)
-  , ("SSReleaseVersion",       'C.ssReleaseVersion)
-  , ("SSHypervisorList",       'C.ssHypervisorList)
-  , ("SSMaintainNodeHealth",   'C.ssMaintainNodeHealth)
-  , ("SSUidPool",              'C.ssUidPool)
-  , ("SSNodegroups",           'C.ssNodegroups)
-  , ("SSNetworks",             'C.ssNetworks)
-  , ("SSEnabledUserShutdown",  'C.ssEnabledUserShutdown)
-  ])
+$(declareLADT ''String "SSKey" (
+  [ ("SSClusterName",           C.ssClusterName)
+  , ("SSClusterTags",           C.ssClusterTags)
+  , ("SSFileStorageDir",        C.ssFileStorageDir)
+  , ("SSSharedFileStorageDir",  C.ssSharedFileStorageDir)
+  , ("SSGlusterStorageDir",     C.ssGlusterStorageDir)
+  , ("SSMasterCandidates",      C.ssMasterCandidates)
+  , ("SSMasterCandidatesIps",   C.ssMasterCandidatesIps)
+  , ("SSMasterCandidatesCerts", C.ssMasterCandidatesCerts)
+  , ("SSMasterIp",              C.ssMasterIp)
+  , ("SSMasterNetdev",          C.ssMasterNetdev)
+  , ("SSMasterNetmask",         C.ssMasterNetmask)
+  , ("SSMasterNode",            C.ssMasterNode)
+  , ("SSNodeList",              C.ssNodeList)
+  , ("SSNodePrimaryIps",        C.ssNodePrimaryIps)
+  , ("SSNodeSecondaryIps",      C.ssNodeSecondaryIps)
+  , ("SSNodeVmCapable",         C.ssNodeVmCapable)
+  , ("SSOfflineNodes",          C.ssOfflineNodes)
+  , ("SSOnlineNodes",           C.ssOnlineNodes)
+  , ("SSPrimaryIpFamily",       C.ssPrimaryIpFamily)
+  , ("SSInstanceList",          C.ssInstanceList)
+  , ("SSReleaseVersion",        C.ssReleaseVersion)
+  , ("SSHypervisorList",        C.ssHypervisorList)
+  , ("SSMaintainNodeHealth",    C.ssMaintainNodeHealth)
+  , ("SSUidPool",               C.ssUidPool)
+  , ("SSNodegroups",            C.ssNodegroups)
+  , ("SSNetworks",              C.ssNetworks)
+  , ("SSEnabledUserShutdown",   C.ssEnabledUserShutdown)
+  ] ++
+  -- Automatically generate SSHvparamsXxx for each hypervisor type:
+  map ((("SSHvparams" ++) . show)
+       &&& ((C.ssHvparamsPref ++) . Types.hypervisorToRaw))
+    [minBound..maxBound]
+  ))
 
 instance HasStringRepr SSKey where
   fromStringRepr = sSKeyFromRaw
   toStringRepr = sSKeyToRaw
 
+-- | For a given hypervisor get the corresponding SSConf key that contains its
+-- parameters.
+--
+-- The corresponding SSKeys are generated automatically by TH, but since we
+-- don't have convenient infrastructure for generating this function, it's just
+-- manual. All constructors must be given explicitly so that adding another
+-- hypervisor will trigger "incomplete pattern" warning and force the
+-- corresponding addition.
+hvparamsSSKey :: Types.Hypervisor -> SSKey
+hvparamsSSKey Types.Kvm = SSHvparamsKvm
+hvparamsSSKey Types.XenPvm = SSHvparamsXenPvm
+hvparamsSSKey Types.Chroot = SSHvparamsChroot
+hvparamsSSKey Types.XenHvm = SSHvparamsXenHvm
+hvparamsSSKey Types.Lxc = SSHvparamsLxc
+hvparamsSSKey Types.Fake = SSHvparamsFake
+
 -- | Convert a ssconf key into a (full) file path.
 keyToFilename :: FilePath     -- ^ Config path root
               -> SSKey        -- ^ Ssconf key
diff -Nru ganeti-2.12.0/src/Ganeti/THH/HsRPC.hs ganeti-2.12.3/src/Ganeti/THH/HsRPC.hs
--- ganeti-2.12.0/src/Ganeti/THH/HsRPC.hs	2014-10-09 14:57:28.000000000 +0300
+++ ganeti-2.12.3/src/Ganeti/THH/HsRPC.hs	2015-04-29 11:09:35.000000000 +0300
@@ -1,4 +1,5 @@
-{-# LANGUAGE TemplateHaskell, FunctionalDependencies, FlexibleContexts #-}
+{-# LANGUAGE TemplateHaskell, FunctionalDependencies, FlexibleContexts, CPP,
+             TypeFamilies, UndecidableInstances #-}
 -- {-# OPTIONS_GHC -fno-warn-warnings-deprecations #-}
 
 {-| Creates a client out of list of RPC server components.
@@ -42,11 +43,20 @@
   , mkRpcCalls
   ) where
 
+-- The following macro is just a temporary solution for 2.12 and 2.13.
+-- Since 2.14 cabal creates proper macros for all dependencies.
+#define MIN_VERSION_monad_control(maj,min,rev) \
+  (((maj)<MONAD_CONTROL_MAJOR)|| \
+   (((maj)==MONAD_CONTROL_MAJOR)&&((min)<=MONAD_CONTROL_MINOR))|| \
+   (((maj)==MONAD_CONTROL_MAJOR)&&((min)==MONAD_CONTROL_MINOR)&& \
+    ((rev)<=MONAD_CONTROL_REV)))
+
 import Control.Applicative
 import Control.Monad
 import Control.Monad.Base
 import Control.Monad.Error
 import Control.Monad.Reader
+import Control.Monad.Trans.Control
 import Language.Haskell.TH
 import qualified Text.JSON as J
 
@@ -87,6 +97,21 @@
   catchError (RpcClientMonad k) h =
     RpcClientMonad (catchError k (runRpcClientMonad . h))
 
+instance MonadBaseControl IO RpcClientMonad where
+#if MIN_VERSION_monad_control(1,0,0)
+-- Needs Undecidable instances
+  type StM RpcClientMonad b = StM (ReaderT Client ResultG) b
+  liftBaseWith f = RpcClientMonad . liftBaseWith
+                   $ \r -> f (r . runRpcClientMonad)
+  restoreM = RpcClientMonad . restoreM
+#else
+  newtype StM RpcClientMonad b = StMRpcClientMonad
+    { runStMRpcClientMonad :: StM (ReaderT Client ResultG) b }
+  liftBaseWith f = RpcClientMonad . liftBaseWith
+                   $ \r -> f (liftM StMRpcClientMonad . r . runRpcClientMonad)
+  restoreM = RpcClientMonad . restoreM . runStMRpcClientMonad
+#endif
+
 -- * The TH functions to construct RPC client functions from RPC server ones
 
 -- | Given a client run a given client RPC action.
diff -Nru ganeti-2.12.0/src/Ganeti/Utils/Livelock.hs ganeti-2.12.3/src/Ganeti/Utils/Livelock.hs
--- ganeti-2.12.0/src/Ganeti/Utils/Livelock.hs	2014-10-07 17:45:37.000000000 +0300
+++ ganeti-2.12.3/src/Ganeti/Utils/Livelock.hs	2015-04-22 20:10:50.000000000 +0300
@@ -35,13 +35,15 @@
 module Ganeti.Utils.Livelock
   ( Livelock
   , mkLivelockFile
+  , listLiveLocks
   , isDead
   ) where
 
 import qualified Control.Exception as E
 import Control.Monad
 import Control.Monad.Error
-import System.Directory (doesFileExist)
+import System.Directory (doesFileExist, getDirectoryContents)
+import System.FilePath.Posix ((</>))
 import System.IO
 import System.Posix.IO
 import System.Posix.Types (Fd)
@@ -49,7 +51,7 @@
 
 import Ganeti.BasicTypes
 import Ganeti.Logging
-import Ganeti.Path (livelockFile)
+import Ganeti.Path (livelockFile, livelockDir)
 import Ganeti.Utils (lockFile)
 
 type Livelock = FilePath
@@ -68,6 +70,16 @@
           Ok fd     -> return fd
   return (fd, lockfile)
 
+-- | List currently existing livelocks. Underapproximate if
+-- some error occurs.
+listLiveLocks :: IO [FilePath]
+listLiveLocks =
+  fmap (genericResult (const [] :: IOError -> [FilePath]) id)
+  . runResultT . liftIO $ do
+    dir <- livelockDir
+    entries <- getDirectoryContents dir
+    filterM doesFileExist $ map (dir </>) entries
+
 -- | Detect whether a the process identified by the given path
 -- does not exist any more. This function never fails and only
 -- returns True if it has positive knowledge that the process
diff -Nru ganeti-2.12.0/src/Ganeti/Utils/MonadPlus.hs ganeti-2.12.3/src/Ganeti/Utils/MonadPlus.hs
--- ganeti-2.12.0/src/Ganeti/Utils/MonadPlus.hs	2014-10-09 14:57:28.000000000 +0300
+++ ganeti-2.12.3/src/Ganeti/Utils/MonadPlus.hs	2015-04-29 11:09:35.000000000 +0300
@@ -35,9 +35,11 @@
 module Ganeti.Utils.MonadPlus
   ( mretryN
   , retryMaybeN
+  , retryErrorN
   ) where
 
 import Control.Monad
+import Control.Monad.Error
 import Control.Monad.Trans.Maybe
 
 -- | Retries the given action up to @n@ times.
@@ -49,3 +51,12 @@
 -- The action signals failure by 'mzero'.
 retryMaybeN :: (Monad m) => Int -> (Int -> MaybeT m a) -> m (Maybe a)
 retryMaybeN = (runMaybeT .) . mretryN
+
+-- | Retries the given action up to @n@ times until it succeeds.
+-- If all actions fail, the error of the last one is returned.
+-- The action is always run at least once, even if @n@ is less than 1.
+retryErrorN :: (MonadError e m) => Int -> (Int -> m a) -> m a
+retryErrorN n f = loop 1
+  where
+    loop i | i < n      = catchError (f i) (const $ loop (i + 1))
+           | otherwise  = f i
diff -Nru ganeti-2.12.0/src/Ganeti/Utils/Statistics.hs ganeti-2.12.3/src/Ganeti/Utils/Statistics.hs
--- ganeti-2.12.0/src/Ganeti/Utils/Statistics.hs	2014-10-07 17:45:37.000000000 +0300
+++ ganeti-2.12.3/src/Ganeti/Utils/Statistics.hs	2015-04-22 20:10:50.000000000 +0300
@@ -80,7 +80,7 @@
 updateStatistics (StdDevStatistics n s var) (x, y) =
   let !ds = y - x
       !dss = y * y - x * x
-      !dnnvar = n * dss - (2 * s + ds) * ds
+      !dnnvar = (n * dss - 2 * s * ds) - ds * ds
       !s' = s + ds
       !var' = max 0 $ var + dnnvar / (n * n)
   in StdDevStatistics n s' var'
diff -Nru ganeti-2.12.0/src/Ganeti/Utils.hs ganeti-2.12.3/src/Ganeti/Utils.hs
--- ganeti-2.12.0/src/Ganeti/Utils.hs	2014-10-09 14:57:28.000000000 +0300
+++ ganeti-2.12.3/src/Ganeti/Utils.hs	2015-04-29 11:09:35.000000000 +0300
@@ -1,4 +1,4 @@
-{-# LANGUAGE FlexibleContexts #-}
+{-# LANGUAGE FlexibleContexts, ScopedTypeVariables #-}
 
 {-| Utility functions. -}
 
@@ -78,6 +78,7 @@
   , setOwnerWGroupR
   , formatOrdinal
   , tryAndLogIOError
+  , withDefaultOnIOError
   , lockFile
   , FStat
   , nullFStat
@@ -217,8 +218,8 @@
 
 -- | Parse results from readsPrec.
 parseChoices :: Monad m => String -> String -> [(a, String)] -> m a
-parseChoices _ _ ((v, ""):[]) = return v
-parseChoices name s ((_, e):[]) =
+parseChoices _ _ [(v, "")] = return v
+parseChoices name s [(_, e)] =
     fail $ name ++ ": leftover characters when parsing '"
            ++ s ++ "': '" ++ e ++ "'"
 parseChoices name s _ = fail $ name ++ ": cannot parse string '" ++ s ++ "'"
@@ -341,6 +342,12 @@
        return . Bad $ combinedmsg)
    (return . okfn)
 
+-- | Try an IO interaction and return a default value if the interaction
+-- throws an IOError.
+withDefaultOnIOError :: a -> IO a -> IO a
+withDefaultOnIOError a io =
+  try io >>= either (\ (_ :: IOError) -> return a) return
+
 -- | Print a warning, but do not exit.
 warn :: String -> IO ()
 warn = hPutStrLn stderr . (++) "Warning: "
diff -Nru ganeti-2.12.0/src/Ganeti/WConfd/ConfigVerify.hs ganeti-2.12.3/src/Ganeti/WConfd/ConfigVerify.hs
--- ganeti-2.12.0/src/Ganeti/WConfd/ConfigVerify.hs	2014-10-07 17:45:37.000000000 +0300
+++ ganeti-2.12.3/src/Ganeti/WConfd/ConfigVerify.hs	2015-04-28 18:05:35.000000000 +0300
@@ -99,11 +99,10 @@
     reportIf (null enabledHvs)
          "enabled hypervisors list doesn't have any entries"
     -- we don't need to check for invalid HVS as they would fail to parse
-    let missingHvp = S.fromList (map hypervisorToRaw enabledHvs)
-                      S.\\ keysSet hvParams
+    let missingHvp = S.fromList enabledHvs S.\\ keysSet hvParams
     reportIf (not $ S.null missingHvp)
            $ "hypervisor parameters missing for the enabled hypervisor(s) "
-             ++ (commaJoin . S.toList $ missingHvp)
+             ++ (commaJoin . map hypervisorToRaw . S.toList $ missingHvp)
 
     let enabledDiskTemplates = clusterEnabledDiskTemplates cluster
     reportIf (null enabledDiskTemplates)
diff -Nru ganeti-2.12.0/src/Ganeti/WConfd/Core.hs ganeti-2.12.3/src/Ganeti/WConfd/Core.hs
--- ganeti-2.12.0/src/Ganeti/WConfd/Core.hs	2014-10-07 17:45:37.000000000 +0300
+++ ganeti-2.12.3/src/Ganeti/WConfd/Core.hs	2015-04-29 11:09:35.000000000 +0300
@@ -41,19 +41,28 @@
 module Ganeti.WConfd.Core where
 
 import Control.Arrow ((&&&))
+import Control.Concurrent (myThreadId)
+import Control.Lens.Setter (set)
 import Control.Monad (liftM, unless, when)
 import qualified Data.Map as M
 import qualified Data.Set as S
 import Language.Haskell.TH (Name)
+import System.Posix.Process (getProcessID)
 import qualified System.Random as Rand
 
 import Ganeti.BasicTypes
+import qualified Ganeti.Constants as C
 import qualified Ganeti.JSON as J
 import qualified Ganeti.Locking.Allocation as L
-import Ganeti.Locking.Locks ( GanetiLocks(ConfigLock), LockLevel(LevelConfig)
-                            , lockLevel, LockLevel, ClientId )
+import Ganeti.Logging (logDebug)
+import Ganeti.Locking.Locks ( GanetiLocks(ConfigLock, BGL)
+                            , LockLevel(LevelConfig)
+                            , lockLevel, LockLevel
+                            , ClientType(ClientOther), ClientId(..) )
 import qualified Ganeti.Locking.Waiting as LW
 import Ganeti.Objects (ConfigData, DRBDSecret, LogicalVolume, Ip4Address)
+import Ganeti.Objects.Lens (configClusterL, clusterMasterNodeL)
+import Ganeti.WConfd.ConfigState (csConfigDataL)
 import qualified Ganeti.WConfd.ConfigVerify as V
 import Ganeti.WConfd.Language
 import Ganeti.WConfd.Monad
@@ -75,10 +84,9 @@
          . failError $ "Requested lock " ++ show state
                        ++ " on the configuration missing"
 
--- | Read the configuration, checking that a shared lock is held.
--- If not, the call fails.
-readConfig :: ClientId -> WConfdMonad ConfigData
-readConfig ident = checkConfigLock ident L.OwnShared >> CW.readConfig
+-- | Read the configuration.
+readConfig :: WConfdMonad ConfigData
+readConfig = CW.readConfig
 
 -- | Write the configuration, checking that an exclusive lock is held.
 -- If not, the call fails.
@@ -310,10 +318,44 @@
 guardedOpportunisticLockUnion count cid req =
   modifyLockWaiting $ LW.guardedOpportunisticLockUnion count cid req
 
+-- * Prepareation for cluster destruction
+
+-- | Prepare daemon for cluster destruction. This consists of
+-- verifying that the requester owns the BGL exclusively, transfering the BGL
+-- to WConfD itself, and modifying the configuration so that no
+-- node is the master any more. Note that, since we own the BGL exclusively,
+-- we can safely modify the configuration, as no other process can request
+-- changes.
+prepareClusterDestruction :: ClientId -> WConfdMonad ()
+prepareClusterDestruction cid = do
+  la <- readLockAllocation
+  unless (L.holdsLock cid BGL L.OwnExclusive la)
+    . failError $ "Cluster destruction requested without owning BGL exclusively"
+  logDebug $ "preparing cluster destruction as requested by " ++ show cid
+  -- transfer BGL to ourselfs. The do this, by adding a super-priority waiting
+  -- request and then releasing the BGL of the requestor.
+  dh <- daemonHandle
+  pid <- liftIO getProcessID
+  tid <- liftIO myThreadId
+  let mycid = ClientId { ciIdentifier = ClientOther $ "wconfd-" ++ show tid
+                       , ciLockFile = dhLivelock dh
+                       , ciPid = pid
+                       }
+  _ <- modifyLockWaiting $ LW.updateLocksWaiting
+                           (fromIntegral C.opPrioHighest - 1) mycid
+                           [L.requestExclusive BGL]
+  _ <- modifyLockWaiting $ LW.updateLocks cid [L.requestRelease BGL]
+  -- To avoid beeing restarted we change the configuration to a no-master
+  -- state.
+  modifyConfigState $ (,) ()
+    . set (csConfigDataL . configClusterL . clusterMasterNodeL) ""
+
+
 -- * The list of all functions exported to RPC.
 
 exportedFunctions :: [Name]
 exportedFunctions = [ 'echo
+                    , 'prepareClusterDestruction
                     -- config
                     , 'readConfig
                     , 'writeConfig
diff -Nru ganeti-2.12.0/src/Ganeti/WConfd/DeathDetection.hs ganeti-2.12.3/src/Ganeti/WConfd/DeathDetection.hs
--- ganeti-2.12.0/src/Ganeti/WConfd/DeathDetection.hs	2014-10-07 17:45:37.000000000 +0300
+++ ganeti-2.12.3/src/Ganeti/WConfd/DeathDetection.hs	2015-04-29 11:09:35.000000000 +0300
@@ -66,10 +66,13 @@
 cleanupLocksTask = forever . runResultT $ do
   logDebug "Death detection timer fired"
   owners <- liftM L.lockOwners readLockAllocation
+  mylivelock <- liftM dhLivelock daemonHandle
   logDebug $ "Current lock owners: " ++ show owners
   let cleanupIfDead owner = do
         let fpath = ciLockFile owner
-        died <- liftIO (isDead fpath)
+        died <- if fpath == mylivelock
+                  then return False
+                  else liftIO (isDead fpath)
         when died $ do
           logInfo $ show owner ++ " died, releasing locks and reservations"
           persCleanup persistentTempRes owner
@@ -78,4 +81,16 @@
                :: WConfdMonad (Either IOError ())
           return ()
   mapM_ cleanupIfDead owners
+  remainingFiles <- liftIO listLiveLocks
+  logDebug $ "Livelockfiles remaining: " ++ show remainingFiles
+  let cleanupStaleIfDead fpath = do
+        died <- if fpath == mylivelock
+                  then return False
+                  else liftIO (isDead fpath)
+        when died $ do
+          logInfo $ "Cleaning up stale file " ++ fpath
+          _ <- liftIO . E.try $ removeFile fpath
+               :: WConfdMonad (Either IOError ())
+          return ()
+  mapM_ cleanupStaleIfDead remainingFiles
   liftIO $ threadDelay cleanupInterval
diff -Nru ganeti-2.12.0/src/Ganeti/WConfd/Monad.hs ganeti-2.12.3/src/Ganeti/WConfd/Monad.hs
--- ganeti-2.12.0/src/Ganeti/WConfd/Monad.hs	2014-10-09 14:57:28.000000000 +0300
+++ ganeti-2.12.3/src/Ganeti/WConfd/Monad.hs	2015-04-29 11:09:35.000000000 +0300
@@ -1,5 +1,5 @@
-{-# LANGUAGE MultiParamTypeClasses, TypeFamilies #-}
-{-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE MultiParamTypeClasses, TypeFamilies,
+             TemplateHaskell, CPP, UndecidableInstances #-}
 
 {-| All RPC calls are run within this monad.
 
@@ -46,6 +46,7 @@
 module Ganeti.WConfd.Monad
   ( DaemonHandle
   , dhConfigPath
+  , dhLivelock
   , mkDaemonHandle
   , WConfdMonadInt
   , runWConfdMonadInt
@@ -64,6 +65,14 @@
   , readTempResState
   ) where
 
+-- The following macro is just a temporary solution for 2.12 and 2.13.
+-- Since 2.14 cabal creates proper macros for all dependencies.
+#define MIN_VERSION_monad_control(maj,min,rev) \
+  (((maj)<MONAD_CONTROL_MAJOR)|| \
+   (((maj)==MONAD_CONTROL_MAJOR)&&((min)<=MONAD_CONTROL_MINOR))|| \
+   (((maj)==MONAD_CONTROL_MAJOR)&&((min)==MONAD_CONTROL_MINOR)&& \
+    ((rev)<=MONAD_CONTROL_REV)))
+
 import Control.Applicative
 import Control.Arrow ((&&&), second)
 import Control.Monad
@@ -92,6 +101,7 @@
 import Ganeti.Objects (ConfigData)
 import Ganeti.Utils.AsyncWorker
 import Ganeti.Utils.IORef
+import Ganeti.Utils.Livelock (Livelock)
 import Ganeti.WConfd.ConfigState
 import Ganeti.WConfd.TempRes
 
@@ -116,6 +126,7 @@
   , dhSaveConfigWorker :: AsyncWorker Any ()
   , dhSaveLocksWorker :: AsyncWorker () ()
   , dhSaveTempResWorker :: AsyncWorker () ()
+  , dhLivelock :: Livelock
   }
 
 mkDaemonHandle :: FilePath
@@ -138,10 +149,12 @@
                -> (IO TempResState -> ResultG (AsyncWorker () ()))
                   -- ^ A function that creates a worker that asynchronously
                   -- saves the temporary reservations state.
+               -> Livelock
                -> ResultG DaemonHandle
 mkDaemonHandle cpath cstat lstat trstat
                saveWorkerFn distMCsWorkerFn distSSConfWorkerFn
-               saveLockWorkerFn saveTempResWorkerFn = do
+               saveLockWorkerFn saveTempResWorkerFn
+               livelock = do
   ds <- newIORef $ DaemonState cstat lstat trstat
   let readConfigIO = dsConfigState `liftM` readIORef ds :: IO ConfigState
 
@@ -155,6 +168,7 @@
   saveTempResWorker <- saveTempResWorkerFn $ dsTempRes `liftM` readIORef ds
 
   return $ DaemonHandle ds cpath saveWorker saveLockWorker saveTempResWorker
+                        livelock
 
 -- * The monad and its instances
 
@@ -184,11 +198,19 @@
   liftBase = WConfdMonadInt . liftBase
 
 instance MonadBaseControl IO WConfdMonadInt where
+#if MIN_VERSION_monad_control(1,0,0)
+-- Needs Undecidable instances
+  type StM WConfdMonadInt b = StM WConfdMonadIntType b
+  liftBaseWith f = WConfdMonadInt . liftBaseWith
+                   $ \r -> f (r . getWConfdMonadInt)
+  restoreM = WConfdMonadInt . restoreM
+#else
   newtype StM WConfdMonadInt b = StMWConfdMonadInt
     { runStMWConfdMonadInt :: StM WConfdMonadIntType b }
   liftBaseWith f = WConfdMonadInt . liftBaseWith
                    $ \r -> f (liftM StMWConfdMonadInt . r . getWConfdMonadInt)
   restoreM = WConfdMonadInt . restoreM . runStMWConfdMonadInt
+#endif
 
 instance MonadLog WConfdMonadInt where
   logAt p = WConfdMonadInt . logAt p
@@ -238,14 +260,14 @@
   when modified $ do
     if distSync
       then do
-        logDebug "Triggering config write\
-                 \ together with full synchronous distribution"
+        logDebug $ "Triggering config write" ++
+                   " together with full synchronous distribution"
         liftBase . triggerAndWait (Any True) . dhSaveConfigWorker $ dh
         logDebug "Config write and distribution finished"
       else do
         -- trigger the config. saving worker and wait for it
-        logDebug "Triggering config write\
-                 \ and asynchronous distribution"
+        logDebug $ "Triggering config write" ++
+                   " and asynchronous distribution"
         liftBase . triggerAndWait (Any False) . dhSaveConfigWorker $ dh
     return ()
   return r
diff -Nru ganeti-2.12.0/src/Ganeti/WConfd/Server.hs ganeti-2.12.3/src/Ganeti/WConfd/Server.hs
--- ganeti-2.12.0/src/Ganeti/WConfd/Server.hs	2014-10-09 14:57:28.000000000 +0300
+++ ganeti-2.12.3/src/Ganeti/WConfd/Server.hs	2015-04-29 11:09:35.000000000 +0300
@@ -46,15 +46,16 @@
 import Control.Monad.Error
 
 import Ganeti.BasicTypes
+import qualified Ganeti.Constants as C
 import Ganeti.Daemon
 import Ganeti.Daemon.Utils (handleMasterVerificationOptions)
 import Ganeti.Logging (logDebug)
 import qualified Ganeti.Path as Path
 import Ganeti.THH.RPC
 import Ganeti.UDSServer
-
 import Ganeti.Errors (formatError)
 import Ganeti.Runtime
+import Ganeti.Utils.Livelock (mkLivelockFile)
 import Ganeti.WConfd.ConfigState
 import Ganeti.WConfd.ConfigVerify
 import Ganeti.WConfd.ConfigWriter
@@ -93,6 +94,7 @@
     verifyConfigErr cdata
     lock <- readPersistent persistentLocks
     tempres <- readPersistent persistentTempRes
+    (_, livelock) <- mkLivelockFile C.wconfdLivelockPrefix
     mkDaemonHandle conf_file
                    (mkConfigState cdata)
                    lock
@@ -102,6 +104,7 @@
                    distSSConfAsyncTask
                    (writePersistentAsyncTask persistentLocks)
                    (writePersistentAsyncTask persistentTempRes)
+                   livelock
 
   return (s, dh)
 
diff -Nru ganeti-2.12.0/src/Ganeti/WConfd/Ssconf.hs ganeti-2.12.3/src/Ganeti/WConfd/Ssconf.hs
--- ganeti-2.12.0/src/Ganeti/WConfd/Ssconf.hs	2014-10-07 17:45:37.000000000 +0300
+++ ganeti-2.12.3/src/Ganeti/WConfd/Ssconf.hs	2015-04-28 18:05:35.000000000 +0300
@@ -42,10 +42,11 @@
   , mkSSConf
   ) where
 
-import Control.Arrow ((&&&))
+import Control.Arrow ((&&&), first, second)
 import Data.Foldable (Foldable(..), toList)
 import Data.List (partition)
 import qualified Data.Map as M
+import qualified Text.JSON as J
 
 import Ganeti.BasicTypes
 import Ganeti.Config
@@ -56,8 +57,34 @@
 import Ganeti.Utils
 import Ganeti.Types
 
+eqPair :: (String, String) -> String
+eqPair (x, y) = x ++ "=" ++ y
+
+mkSSConfHvparams :: Cluster -> [(Hypervisor, [String])]
+mkSSConfHvparams cluster = map (id &&& hvparams) [minBound..maxBound]
+  where
+    hvparams :: Hypervisor -> [String]
+    hvparams h = maybe [] hvparamsStrings
+                 $ lookupContainer Nothing h (clusterHvparams cluster)
+
+    -- | Convert a collection of hypervisor parameters to strings in the form
+    -- @key=value at .
+    hvparamsStrings :: HvParams -> [String]
+    hvparamsStrings =
+      map (eqPair . second hvparamShow) . M.toList . fromContainer
+
+    -- | Convert a hypervisor parameter in its JSON representation to a String.
+    -- Strings, numbers and booleans are just printed (without quotes), booleans
+    -- printed as @True@/@False@ and other JSON values (should they exist) as
+    -- their JSON representations.
+    hvparamShow :: J.JSValue -> String
+    hvparamShow (J.JSString s) = J.fromJSString s
+    hvparamShow (J.JSRational _ r) = J.showJSRational r []
+    hvparamShow (J.JSBool b) = show b
+    hvparamShow x = J.encode x
+
 mkSSConf :: ConfigData -> SSConf
-mkSSConf cdata = SSConf $ M.fromList
+mkSSConf cdata = SSConf . M.fromList $
     [ (SSClusterName, return $ clusterClusterName cluster)
     , (SSClusterTags, toList $ tagsOf cluster)
     , (SSFileStorageDir, return $ clusterFileStorageDir cluster)
@@ -71,7 +98,7 @@
     , (SSMasterNetdev, return $ clusterMasterNetdev cluster)
     , (SSMasterNetmask, return . show $ clusterMasterNetmask cluster)
     , (SSMasterNode, return
-                     . genericResult (error "Master node not found") nodeName
+                     . genericResult (const "NO MASTER") nodeName
                      . getNode cdata $ clusterMasterNode cluster)
     , (SSNodeList, mapLines nodeName nodes)
     , (SSNodePrimaryIps, mapLines (spcPair . (nodeName &&& nodePrimaryIp))
@@ -99,11 +126,11 @@
                    . configNetworks $ cdata)
     , (SSEnabledUserShutdown, return . show . clusterEnabledUserShutdown
                               $ cluster)
-    ]
+    ] ++
+    map (first hvparamsSSKey) (mkSSConfHvparams cluster)
   where
     mapLines :: (Foldable f) => (a -> String) -> f a -> [String]
     mapLines f = map f . toList
-    eqPair (x, y) = x ++ "=" ++ y
     spcPair (x, y) = x ++ " " ++ y
     toPairs = M.assocs . fromContainer
 
diff -Nru ganeti-2.12.0/test/data/cluster_config_2.11.json ganeti-2.12.3/test/data/cluster_config_2.11.json
--- ganeti-2.12.0/test/data/cluster_config_2.11.json	2014-10-07 17:45:37.000000000 +0300
+++ ganeti-2.12.3/test/data/cluster_config_2.11.json	2015-04-28 11:13:10.000000000 +0300
@@ -328,7 +328,8 @@
                                 "5c390722-6a7a-4bb4-9cef-98d896a8e6b1.disk0_data"
                             ],
                             "params": {},
-                            "size": 1024
+                            "size": 1024,
+                            "uuid": "55b3fa41-2bfe-4aef-ac32-fbf3be06a242"
                         },
                         {
                             "dev_type": "plain",
@@ -337,7 +338,8 @@
                                 "5c390722-6a7a-4bb4-9cef-98d896a8e6b1.disk0_meta"
                             ],
                             "params": {},
-                            "size": 128
+                            "size": 128,
+                            "uuid": "33eff786-0152-4653-8fc8-ea280fea9297"
                         }
                     ],
                     "dev_type": "drbd",
diff -Nru ganeti-2.12.0/test/hs/Test/Ganeti/HTools/Cluster.hs ganeti-2.12.3/test/hs/Test/Ganeti/HTools/Cluster.hs
--- ganeti-2.12.0/test/hs/Test/Ganeti/HTools/Cluster.hs	2014-10-09 14:57:28.000000000 +0300
+++ ganeti-2.12.3/test/hs/Test/Ganeti/HTools/Cluster.hs	2015-04-29 11:09:35.000000000 +0300
@@ -39,6 +39,7 @@
 
 import Test.QuickCheck hiding (Result)
 
+import Control.Monad (liftM)
 import qualified Data.IntMap as IntMap
 import Data.Maybe
 
@@ -168,7 +169,8 @@
 prop_CanTieredAlloc :: Property
 prop_CanTieredAlloc =
   forAll (choose (2, 5)) $ \count ->
-  forAll (genOnlineNode `suchThat` isNodeBig 4) $ \node ->
+  forAll (liftM (Node.setPolicy Types.defIPolicy)
+            (genOnlineNode `suchThat` isNodeBig 5)) $ \node ->
   forAll (genInstanceMaybeBiggerThanNode node) $ \inst ->
   let nl = makeSmallCluster node count
       il = Container.empty
diff -Nru ganeti-2.12.0/test/hs/Test/Ganeti/HTools/Instance.hs ganeti-2.12.3/test/hs/Test/Ganeti/HTools/Instance.hs
--- ganeti-2.12.0/test/hs/Test/Ganeti/HTools/Instance.hs	2014-10-07 17:45:37.000000000 +0300
+++ ganeti-2.12.3/test/hs/Test/Ganeti/HTools/Instance.hs	2015-04-28 18:05:35.000000000 +0300
@@ -49,6 +49,7 @@
 import Control.Monad (liftM)
 import Test.QuickCheck hiding (Result)
 
+import Test.Ganeti.TestHTools (nullISpec)
 import Test.Ganeti.TestHelper
 import Test.Ganeti.TestCommon
 import Test.Ganeti.HTools.Types ()
@@ -62,25 +63,32 @@
 
 -- * Arbitrary instances
 
--- | Generates a random instance with maximum disk/mem/cpu values.
-genInstanceSmallerThan :: Int -> Int -> Int -> Maybe Int ->
-                          Gen Instance.Instance
-genInstanceSmallerThan lim_mem lim_dsk lim_cpu lim_spin = do
+-- | Generates a random instance with maximum and minimum disk/mem/cpu values.
+genInstanceWithin :: Int -> Int -> Int -> Int
+                  -> Int -> Int -> Int -> Maybe Int
+                  -> Gen Instance.Instance
+genInstanceWithin min_mem min_dsk min_cpu min_spin
+                  max_mem max_dsk max_cpu max_spin = do
   name <- genFQDN
-  mem <- choose (0, lim_mem)
-  dsk <- choose (0, lim_dsk)
+  mem <- choose (min_mem, max_mem)
+  dsk <- choose (min_dsk, max_dsk)
   run_st <- arbitrary
   pn <- arbitrary
   sn <- arbitrary
-  vcpus <- choose (0, lim_cpu)
+  vcpus <- choose (min_cpu, max_cpu)
   dt <- arbitrary
-  spindles <- case lim_spin of
-    Nothing -> genMaybe $ choose (0, maxSpindles)
-    Just ls -> liftM Just $ choose (0, ls)
+  spindles <- case max_spin of
+    Nothing -> genMaybe $ choose (min_spin, maxSpindles)
+    Just ls -> liftM Just $ choose (min_spin, ls)
   let disk = Instance.Disk dsk spindles
   return $ Instance.create
     name mem dsk [disk] vcpus run_st [] True pn sn dt 1 []
 
+-- | Generate an instance with maximum disk/mem/cpu values.
+genInstanceSmallerThan :: Int -> Int -> Int -> Maybe Int
+                       -> Gen Instance.Instance
+genInstanceSmallerThan = genInstanceWithin 0 0 0 0
+
 -- | Generates an instance smaller than a node.
 genInstanceSmallerThanNode :: Node.Node -> Gen Instance.Instance
 genInstanceSmallerThanNode node =
@@ -92,12 +100,20 @@
                           else Nothing)
 
 -- | Generates an instance possibly bigger than a node.
+-- In any case, that instance will be bigger than the node's ipolicy's lower
+-- bound.
 genInstanceMaybeBiggerThanNode :: Node.Node -> Gen Instance.Instance
 genInstanceMaybeBiggerThanNode node =
-  genInstanceSmallerThan (Node.availMem  node + Types.unitMem * 2)
-                         (Node.availDisk node + Types.unitDsk * 3)
-                         (Node.availCpu  node + Types.unitCpu * 4)
-                         (if Node.exclStorage node
+  let minISpec = runListHead nullISpec Types.minMaxISpecsMinSpec
+                 . Types.iPolicyMinMaxISpecs $ Node.iPolicy node
+  in genInstanceWithin (Types.iSpecMemorySize minISpec)
+                       (Types.iSpecDiskSize minISpec)
+                       (Types.iSpecCpuCount minISpec)
+                       (Types.iSpecSpindleUse minISpec)
+                       (Node.availMem  node + Types.unitMem * 2)
+                       (Node.availDisk node + Types.unitDsk * 3)
+                       (Node.availCpu  node + Types.unitCpu * 4)
+                       (if Node.exclStorage node
                           then Just $ Node.fSpindles node +
                                Types.unitSpindle * 5
                           else Nothing)
diff -Nru ganeti-2.12.0/test/hs/Test/Ganeti/Hypervisor/Xen/XmParser.hs ganeti-2.12.3/test/hs/Test/Ganeti/Hypervisor/Xen/XmParser.hs
--- ganeti-2.12.0/test/hs/Test/Ganeti/Hypervisor/Xen/XmParser.hs	2014-10-06 16:20:35.000000000 +0300
+++ ganeti-2.12.3/test/hs/Test/Ganeti/Hypervisor/Xen/XmParser.hs	2015-04-28 18:05:35.000000000 +0300
@@ -86,7 +86,7 @@
 -- | Determines conservatively whether a string could be a number.
 canBeNumber :: String -> Bool
 canBeNumber [] = False
-canBeNumber (c:[]) = canBeNumberChar c
+canBeNumber [c] = canBeNumberChar c
 canBeNumber (c:xs) = canBeNumberChar c && canBeNumber xs
 
 -- | Determines whether a char can be part of the string representation of a
diff -Nru ganeti-2.12.0/test/hs/Test/Ganeti/Objects.hs ganeti-2.12.3/test/hs/Test/Ganeti/Objects.hs
--- ganeti-2.12.0/test/hs/Test/Ganeti/Objects.hs	2014-10-09 14:57:28.000000000 +0300
+++ ganeti-2.12.3/test/hs/Test/Ganeti/Objects.hs	2015-04-29 11:09:35.000000000 +0300
@@ -242,6 +242,10 @@
 instance Arbitrary OsHvParams where
   arbitrary = return $ GenericContainer Map.empty
 
+-- | No real arbitrary instance for 'GroupDiskParams' yet.
+instance Arbitrary GroupDiskParams where
+  arbitrary = return $ GenericContainer Map.empty
+
 instance Arbitrary ClusterNicParams where
   arbitrary = (GenericContainer . Map.singleton C.ppDefault) <$> arbitrary
 
@@ -315,7 +319,8 @@
   grp <- arbitrary
   let guuid = groupUuid grp
       nodes' = zipWith (\n idx ->
-                          let newname = nodeName n ++ "-" ++ show idx
+                          let newname = takeWhile (/= '.') (nodeName n)
+                                        ++ "-" ++ show idx
                           in (newname, n { nodeGroup = guuid,
                                            nodeName = newname}))
                nodes [(1::Int)..]
diff -Nru ganeti-2.12.0/test/hs/Test/Ganeti/OpCodes.hs ganeti-2.12.3/test/hs/Test/Ganeti/OpCodes.hs
--- ganeti-2.12.0/test/hs/Test/Ganeti/OpCodes.hs	2014-10-09 14:57:28.000000000 +0300
+++ ganeti-2.12.3/test/hs/Test/Ganeti/OpCodes.hs	2015-04-29 11:09:35.000000000 +0300
@@ -390,7 +390,7 @@
           <*> arbitrary                       -- instance_communication
       "OP_INSTANCE_GROW_DISK" ->
         OpCodes.OpInstanceGrowDisk <$> genFQDN <*> return Nothing <*>
-          arbitrary <*> arbitrary <*> arbitrary <*> arbitrary
+          arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary
       "OP_INSTANCE_CHANGE_GROUP" ->
         OpCodes.OpInstanceChangeGroup <$> genFQDN <*> return Nothing <*>
           arbitrary <*> genMaybe genNameNE <*>
diff -Nru ganeti-2.12.0/test/hs/Test/Ganeti/TestHTools.hs ganeti-2.12.3/test/hs/Test/Ganeti/TestHTools.hs
--- ganeti-2.12.0/test/hs/Test/Ganeti/TestHTools.hs	2014-10-06 16:20:35.000000000 +0300
+++ ganeti-2.12.3/test/hs/Test/Ganeti/TestHTools.hs	2015-04-28 18:05:35.000000000 +0300
@@ -36,6 +36,7 @@
 
 module Test.Ganeti.TestHTools
   ( nullIPolicy
+  , nullISpec
   , defGroup
   , defGroupList
   , defGroupAssoc
@@ -58,17 +59,21 @@
 
 -- * Helpers
 
+-- | An ISpec with 0 resources.
+nullISpec :: Types.ISpec
+nullISpec = Types.ISpec { Types.iSpecMemorySize = 0
+                        , Types.iSpecCpuCount   = 0
+                        , Types.iSpecDiskSize   = 0
+                        , Types.iSpecDiskCount  = 0
+                        , Types.iSpecNicCount   = 0
+                        , Types.iSpecSpindleUse = 0
+                        }
+
 -- | Null iPolicy, and by null we mean very liberal.
 nullIPolicy :: Types.IPolicy
 nullIPolicy = Types.IPolicy
   { Types.iPolicyMinMaxISpecs = [Types.MinMaxISpecs
-    { Types.minMaxISpecsMinSpec = Types.ISpec { Types.iSpecMemorySize = 0
-                                              , Types.iSpecCpuCount   = 0
-                                              , Types.iSpecDiskSize   = 0
-                                              , Types.iSpecDiskCount  = 0
-                                              , Types.iSpecNicCount   = 0
-                                              , Types.iSpecSpindleUse = 0
-                                              }
+    { Types.minMaxISpecsMinSpec = nullISpec
     , Types.minMaxISpecsMaxSpec = Types.ISpec
       { Types.iSpecMemorySize = maxBound
       , Types.iSpecCpuCount   = maxBound
diff -Nru ganeti-2.12.0/test/hs/Test/Ganeti/Utils/Statistics.hs ganeti-2.12.3/test/hs/Test/Ganeti/Utils/Statistics.hs
--- ganeti-2.12.0/test/hs/Test/Ganeti/Utils/Statistics.hs	2014-10-07 17:45:37.000000000 +0300
+++ ganeti-2.12.3/test/hs/Test/Ganeti/Utils/Statistics.hs	2015-04-28 18:05:35.000000000 +0300
@@ -58,7 +58,7 @@
       direct = stdDev modified
   in printTestCase ("Value computed by update " ++ show with_update
                     ++ " differs too much from correct value " ++ show direct)
-                   (abs (with_update - direct) < 1e-12)
+                   (abs (with_update - direct) < 1e-10)
 
 testSuite "Utils/Statistics"
   [ 'prop_stddev_update
diff -Nru ganeti-2.12.0/test/py/cmdlib/cluster_unittest.py ganeti-2.12.3/test/py/cmdlib/cluster_unittest.py
--- ganeti-2.12.0/test/py/cmdlib/cluster_unittest.py	2014-10-09 14:57:28.000000000 +0300
+++ ganeti-2.12.3/test/py/cmdlib/cluster_unittest.py	2015-04-29 11:09:35.000000000 +0300
@@ -38,6 +38,8 @@
 import unittest
 import operator
 import re
+import shutil
+import os
 
 from ganeti.cmdlib import cluster
 from ganeti import constants
@@ -2251,5 +2253,252 @@
     self.assertEqual(1, len(result["jobs"]))
 
 
+class TestLUClusterRenewCrypto(CmdlibTestCase):
+
+  def setUp(self):
+    super(TestLUClusterRenewCrypto, self).setUp()
+    self._node_cert = self._CreateTempFile()
+    shutil.copy(testutils.TestDataFilename("cert1.pem"), self._node_cert)
+    self._client_node_cert = self._CreateTempFile()
+    shutil.copy(testutils.TestDataFilename("cert2.pem"), self._client_node_cert)
+    self._client_node_cert_tmp = self._CreateTempFile()
+
+  def tearDown(self):
+    super(TestLUClusterRenewCrypto, self).tearDown()
+
+  def _GetFakeDigest(self, uuid):
+    """Creates a fake SSL digest depending on the UUID of a node.
+
+    @type uuid: string
+    @param uuid: node UUID
+    @returns: a string impersonating a SSL digest
+
+    """
+    return "FA:KE:%s:%s:%s:%s" % (uuid[0:2], uuid[2:4], uuid[4:6], uuid[6:8])
+
+  def _InitPathutils(self, pathutils):
+    """Patch pathutils to point to temporary files.
+
+    """
+    pathutils.NODED_CERT_FILE = self._node_cert
+    pathutils.NODED_CLIENT_CERT_FILE = self._client_node_cert
+    pathutils.NODED_CLIENT_CERT_FILE_TMP = \
+        self._client_node_cert_tmp
+
+  def _AssertCertFiles(self, pathutils):
+    """Check if the correct certificates exist and don't exist on the master.
+
+    """
+    self.assertTrue(os.path.exists(pathutils.NODED_CERT_FILE))
+    self.assertTrue(os.path.exists(pathutils.NODED_CLIENT_CERT_FILE))
+    self.assertFalse(os.path.exists(pathutils.NODED_CLIENT_CERT_FILE_TMP))
+
+  def _CompletelySuccessfulRpc(self, node_uuid, _):
+    """Fake RPC call which always returns successfully.
+
+    """
+    return self.RpcResultsBuilder() \
+        .CreateSuccessfulNodeResult(node_uuid,
+            [(constants.CRYPTO_TYPE_SSL_DIGEST,
+              self._GetFakeDigest(node_uuid))])
+
+  @patchPathutils("cluster")
+  def testSuccessfulCase(self, pathutils):
+    self._InitPathutils(pathutils)
+
+    # create a few non-master, online nodes
+    num_nodes = 3
+    for _ in range(num_nodes):
+      self.cfg.AddNewNode()
+    self.rpc.call_node_crypto_tokens = self._CompletelySuccessfulRpc
+
+    op = opcodes.OpClusterRenewCrypto()
+    self.ExecOpCode(op)
+
+    self._AssertCertFiles(pathutils)
+
+    # Check if we have the correct digests in the configuration
+    cluster = self.cfg.GetClusterInfo()
+    self.assertEqual(num_nodes + 1, len(cluster.candidate_certs))
+    nodes = self.cfg.GetAllNodesInfo()
+    for (node_uuid, _) in nodes.items():
+      expected_digest = self._GetFakeDigest(node_uuid)
+      self.assertEqual(expected_digest, cluster.candidate_certs[node_uuid])
+
+  @patchPathutils("cluster")
+  def testMasterFails(self, pathutils):
+    self._InitPathutils(pathutils)
+
+    # make sure the RPC calls are failing for all nodes
+    master_uuid = self.cfg.GetMasterNode()
+    self.rpc.call_node_crypto_tokens.return_value = self.RpcResultsBuilder() \
+        .CreateFailedNodeResult(master_uuid)
+
+    op = opcodes.OpClusterRenewCrypto()
+    self.ExecOpCode(op)
+
+    self._AssertCertFiles(pathutils)
+
+    # Check if we correctly have no candidate certificates
+    cluster = self.cfg.GetClusterInfo()
+    self.assertFalse(cluster.candidate_certs)
+
+  def _partiallyFailingRpc(self, node_uuid, _):
+    if node_uuid == self._failed_node:
+      return self.RpcResultsBuilder() \
+        .CreateFailedNodeResult(node_uuid)
+    else:
+      return self.RpcResultsBuilder() \
+        .CreateSuccessfulNodeResult(node_uuid,
+          [(constants.CRYPTO_TYPE_SSL_DIGEST, self._GetFakeDigest(node_uuid))])
+
+  @patchPathutils("cluster")
+  def testNonMasterFails(self, pathutils):
+    self._InitPathutils(pathutils)
+
+    # create a few non-master, online nodes
+    num_nodes = 3
+    for _ in range(num_nodes):
+      self.cfg.AddNewNode()
+    nodes = self.cfg.GetAllNodesInfo()
+
+    # pick one node as the failing one
+    master_uuid = self.cfg.GetMasterNode()
+    self._failed_node = [node_uuid for node_uuid in nodes
+                         if node_uuid != master_uuid][1]
+    self.rpc.call_node_crypto_tokens = self._partiallyFailingRpc
+
+    op = opcodes.OpClusterRenewCrypto()
+    self.ExecOpCode(op)
+
+    self._AssertCertFiles(pathutils)
+
+    # Check if we have the correct digests in the configuration
+    cluster = self.cfg.GetClusterInfo()
+    # There should be one digest missing.
+    self.assertEqual(num_nodes, len(cluster.candidate_certs))
+    nodes = self.cfg.GetAllNodesInfo()
+    for (node_uuid, _) in nodes.items():
+      if node_uuid == self._failed_node:
+        self.assertTrue(node_uuid not in cluster.candidate_certs)
+      else:
+        expected_digest = self._GetFakeDigest(node_uuid)
+        self.assertEqual(expected_digest, cluster.candidate_certs[node_uuid])
+
+  @patchPathutils("cluster")
+  def testOfflineNodes(self, pathutils):
+    self._InitPathutils(pathutils)
+
+    # create a few non-master, online nodes
+    num_nodes = 3
+    offline_index = 1
+    for i in range(num_nodes):
+      # Pick one node to be offline.
+      self.cfg.AddNewNode(offline=(i==offline_index))
+    self.rpc.call_node_crypto_tokens = self._CompletelySuccessfulRpc
+
+    op = opcodes.OpClusterRenewCrypto()
+    self.ExecOpCode(op)
+
+    self._AssertCertFiles(pathutils)
+
+    # Check if we have the correct digests in the configuration
+    cluster = self.cfg.GetClusterInfo()
+    # There should be one digest missing.
+    self.assertEqual(num_nodes, len(cluster.candidate_certs))
+    nodes = self.cfg.GetAllNodesInfo()
+    for (node_uuid, node_info) in nodes.items():
+      if node_info.offline == True:
+        self.assertTrue(node_uuid not in cluster.candidate_certs)
+      else:
+        expected_digest = self._GetFakeDigest(node_uuid)
+        self.assertEqual(expected_digest, cluster.candidate_certs[node_uuid])
+
+  def _RpcSuccessfulAfterRetries(self, node_uuid, _):
+    if self._retries < self._max_retries:
+      self._retries += 1
+      return self.RpcResultsBuilder() \
+        .CreateFailedNodeResult(node_uuid)
+    else:
+      return self.RpcResultsBuilder() \
+        .CreateSuccessfulNodeResult(node_uuid,
+          [(constants.CRYPTO_TYPE_SSL_DIGEST, self._GetFakeDigest(node_uuid))])
+
+  @patchPathutils("cluster")
+  def testMasterRetriesSuccess(self, pathutils):
+    self._InitPathutils(pathutils)
+
+    self._max_retries = 2
+    self._retries = 0
+    self.rpc.call_node_crypto_tokens = self._RpcSuccessfulAfterRetries
+
+    op = opcodes.OpClusterRenewCrypto()
+    self.ExecOpCode(op)
+
+    self._AssertCertFiles(pathutils)
+
+    cluster = self.cfg.GetClusterInfo()
+    master_uuid = self.cfg.GetMasterNode()
+    self.assertTrue(self._GetFakeDigest(master_uuid)
+                    in cluster.candidate_certs.values())
+
+  @patchPathutils("cluster")
+  def testMasterRetriesFail(self, pathutils):
+    self._InitPathutils(pathutils)
+
+    self._max_retries = 5
+    self._retries = 0
+    self.rpc.call_node_crypto_tokens = self._RpcSuccessfulAfterRetries
+
+    op = opcodes.OpClusterRenewCrypto()
+    self.ExecOpCode(op)
+
+    self._AssertCertFiles(pathutils)
+
+    cluster = self.cfg.GetClusterInfo()
+    self.assertFalse(cluster.candidate_certs)
+
+  def _RpcSuccessfulAfterRetriesNonMaster(self, node_uuid, _):
+    if self._retries < self._max_retries and node_uuid != self._master_uuid:
+      self._retries += 1
+      return self.RpcResultsBuilder() \
+        .CreateFailedNodeResult(node_uuid)
+    else:
+      return self.RpcResultsBuilder() \
+        .CreateSuccessfulNodeResult(node_uuid,
+          [(constants.CRYPTO_TYPE_SSL_DIGEST, self._GetFakeDigest(node_uuid))])
+
+  def _NonMasterRetries(self, pathutils, max_retries):
+    self._InitPathutils(pathutils)
+
+    self._master_uuid = self.cfg.GetMasterNode()
+    self._max_retries = max_retries
+    self._retries = 0
+    self.rpc.call_node_crypto_tokens = self._RpcSuccessfulAfterRetriesNonMaster
+
+    # Add one non-master node
+    self.cfg.AddNewNode()
+
+    op = opcodes.OpClusterRenewCrypto()
+    self.ExecOpCode(op)
+
+    self._AssertCertFiles(pathutils)
+
+    return self.cfg.GetClusterInfo()
+
+  @patchPathutils("cluster")
+  def testNonMasterRetriesSuccess(self, pathutils):
+    cluster = self._NonMasterRetries(pathutils, 2)
+    self.assertEqual(2, len(cluster.candidate_certs.values()))
+
+  @patchPathutils("cluster")
+  def testNonMasterRetriesFail(self, pathutils):
+    cluster = self._NonMasterRetries(pathutils, 5)
+
+    # Only the master digest should be in the cert list
+    self.assertEqual(1, len(cluster.candidate_certs.values()))
+    self.assertTrue(self._master_uuid in cluster.candidate_certs)
+
+
 if __name__ == "__main__":
   testutils.GanetiTestProgram()
diff -Nru ganeti-2.12.0/test/py/cmdlib/cmdlib_unittest.py ganeti-2.12.3/test/py/cmdlib/cmdlib_unittest.py
--- ganeti-2.12.0/test/py/cmdlib/cmdlib_unittest.py	2014-10-07 17:45:37.000000000 +0300
+++ ganeti-2.12.3/test/py/cmdlib/cmdlib_unittest.py	2015-04-28 18:05:35.000000000 +0300
@@ -557,6 +557,80 @@
     AssertComputeViolation(ipolicy1, 1)
 
 
+class TestComputeIPolicyDiskSizesViolation(unittest.TestCase):
+  # Minimal policy accepted by _ComputeIPolicyDiskSizesViolation()
+  _MICRO_IPOL = {
+    constants.IPOLICY_DTS: [constants.DT_PLAIN, constants.DT_DISKLESS],
+    constants.ISPECS_MINMAX: [NotImplemented],
+    }
+
+  def test(self):
+    compute_fn = _ValidateComputeMinMaxSpec
+    ret = common.ComputeIPolicyDiskSizesViolation(self._MICRO_IPOL, [1024],
+                                                  constants.DT_PLAIN,
+                                                  _compute_fn=compute_fn)
+    self.assertEqual(ret, [])
+
+  def testDiskFull(self):
+    compute_fn = _NoDiskComputeMinMaxSpec
+    ret = common.ComputeIPolicyDiskSizesViolation(self._MICRO_IPOL, [1024],
+                                                  constants.DT_PLAIN,
+                                                  _compute_fn=compute_fn)
+    self.assertEqual(ret, [constants.ISPEC_DISK_COUNT])
+
+  def testDiskLess(self):
+    compute_fn = _NoDiskComputeMinMaxSpec
+    ret = common.ComputeIPolicyDiskSizesViolation(self._MICRO_IPOL, [],
+                                                  constants.DT_DISKLESS,
+                                                  _compute_fn=compute_fn)
+    self.assertEqual(ret, [])
+
+  def testWrongTemplates(self):
+    compute_fn = _ValidateComputeMinMaxSpec
+    ret = common.ComputeIPolicyDiskSizesViolation(self._MICRO_IPOL, [1024],
+                                                  constants.DT_DRBD8,
+                                                  _compute_fn=compute_fn)
+    self.assertEqual(len(ret), 1)
+    self.assertTrue("Disk template" in ret[0])
+
+  def _AssertComputeViolation(self, ipolicy, disk_sizes, disk_template,
+                              violations):
+    ret = common.ComputeIPolicyDiskSizesViolation(ipolicy, disk_sizes,
+                                                  disk_template)
+    self.assertEqual(len(ret), violations)
+
+  def testWithIPolicy(self):
+    mem_size = 2048
+    cpu_count = 2
+    disk_count = 1
+    disk_sizes = [512]
+    nic_count = 1
+    spindle_use = 4
+    disk_template = "mytemplate"
+    ispec = {
+      constants.ISPEC_MEM_SIZE: mem_size,
+      constants.ISPEC_CPU_COUNT: cpu_count,
+      constants.ISPEC_DISK_COUNT: disk_count,
+      constants.ISPEC_DISK_SIZE: disk_sizes[0],
+      constants.ISPEC_NIC_COUNT: nic_count,
+      constants.ISPEC_SPINDLE_USE: spindle_use,
+      }
+
+    ipolicy = {
+      constants.ISPECS_MINMAX: [{
+        constants.ISPECS_MIN: ispec,
+        constants.ISPECS_MAX: ispec,
+        }],
+      constants.IPOLICY_DTS: [disk_template],
+      }
+
+    self._AssertComputeViolation(ipolicy, [512], disk_template, 0)
+    self._AssertComputeViolation(ipolicy, [], disk_template, 1)
+    self._AssertComputeViolation(ipolicy, [512, 512], disk_template, 1)
+    self._AssertComputeViolation(ipolicy, [511], disk_template, 1)
+    self._AssertComputeViolation(ipolicy, [513], disk_template, 1)
+
+
 class _StubComputeIPolicySpecViolation:
   def __init__(self, mem_size, cpu_count, disk_count, nic_count, disk_sizes,
                spindle_use, disk_template):
diff -Nru ganeti-2.12.0/test/py/cmdlib/group_unittest.py ganeti-2.12.3/test/py/cmdlib/group_unittest.py
--- ganeti-2.12.0/test/py/cmdlib/group_unittest.py	2014-10-06 18:10:35.000000000 +0300
+++ ganeti-2.12.3/test/py/cmdlib/group_unittest.py	2015-04-22 20:10:50.000000000 +0300
@@ -148,6 +148,7 @@
 
   @withLockedLU
   def testCheckAssignmentForSplitInstances(self, lu):
+    self.cfg._OpenConfig(True)
     g1 = self.cfg.AddNewNodeGroup()
     g2 = self.cfg.AddNewNodeGroup()
     g3 = self.cfg.AddNewNodeGroup()
diff -Nru ganeti-2.12.0/test/py/cmdlib/instance_unittest.py ganeti-2.12.3/test/py/cmdlib/instance_unittest.py
--- ganeti-2.12.0/test/py/cmdlib/instance_unittest.py	2014-10-09 14:57:28.000000000 +0300
+++ ganeti-2.12.3/test/py/cmdlib/instance_unittest.py	2015-04-29 11:09:35.000000000 +0300
@@ -2394,6 +2394,30 @@
                          disk_template=constants.DT_PLAIN)
     self.ExecOpCode(op)
 
+  def testConvertDisklessDRBDToPlain(self):
+    self.cfg.SetIPolicyField(
+      constants.ISPECS_MIN, constants.ISPEC_DISK_COUNT, 0)
+    self.inst.disks = []
+    self.inst.disk_template = constants.DT_DRBD8
+
+    op = self.CopyOpCode(self.op,
+                         disk_template=constants.DT_PLAIN)
+    self.ExecOpCode(op)
+
+    self.assertEqual(self.inst.disk_template, constants.DT_PLAIN)
+
+  def testConvertDisklessPlainToDRBD(self):
+    self.cfg.SetIPolicyField(
+      constants.ISPECS_MIN, constants.ISPEC_DISK_COUNT, 0)
+    self.inst.disks = []
+    self.inst.disk_template = constants.DT_PLAIN
+
+    op = self.CopyOpCode(self.op,
+                         disk_template=constants.DT_DRBD8,
+                         remote_node=self.snode.name)
+    self.ExecOpCode(op)
+
+    self.assertEqual(self.inst.disk_template, constants.DT_DRBD8)
 
 class TestLUInstanceChangeGroup(CmdlibTestCase):
   def setUp(self):
diff -Nru ganeti-2.12.0/test/py/cmdlib/testsupport/config_mock.py ganeti-2.12.3/test/py/cmdlib/testsupport/config_mock.py
--- ganeti-2.12.0/test/py/cmdlib/testsupport/config_mock.py	2014-10-09 14:57:28.000000000 +0300
+++ ganeti-2.12.3/test/py/cmdlib/testsupport/config_mock.py	2015-04-29 11:09:35.000000000 +0300
@@ -581,6 +581,26 @@
   def _UnlockedReleaseDRBDMinors(self, inst_uuid):
     pass
 
+  def SetIPolicyField(self, category, field, value):
+    """Set a value of a desired ipolicy field.
+
+    @type category: one of L{constants.ISPECS_MAX}, L{constants.ISPECS_MIN},
+      L{constants.ISPECS_STD}
+    @param category: Whether to change the default value, or the upper or lower
+      bound.
+    @type field: string
+    @param field: The field to change.
+    @type value: any
+    @param value: The value to assign.
+
+    """
+    if category not in [constants.ISPECS_MAX, constants.ISPECS_MIN,
+                        constants.ISPECS_STD]:
+      raise ValueError("Invalid ipolicy category %s" % category)
+
+    ipolicy_dict = self.GetClusterInfo().ipolicy[constants.ISPECS_MINMAX][0]
+    ipolicy_dict[category][field] = value
+
   def _CreateConfig(self):
     self._config_data = objects.ConfigData(
       version=constants.CONFIG_VERSION,
diff -Nru ganeti-2.12.0/test/py/cmdlib/testsupport/__init__.py ganeti-2.12.3/test/py/cmdlib/testsupport/__init__.py
--- ganeti-2.12.0/test/py/cmdlib/testsupport/__init__.py	2014-10-07 17:45:37.000000000 +0300
+++ ganeti-2.12.3/test/py/cmdlib/testsupport/__init__.py	2015-04-28 18:05:35.000000000 +0300
@@ -40,6 +40,7 @@
 from cmdlib.testsupport.utils_mock import patchUtils
 from cmdlib.testsupport.netutils_mock import patchNetutils, HostnameMock
 from cmdlib.testsupport.processor_mock import ProcessorMock
+from cmdlib.testsupport.pathutils_mock import patchPathutils
 from cmdlib.testsupport.rpc_runner_mock import CreateRpcRunnerMock, \
   RpcResultsBuilder
 from cmdlib.testsupport.ssh_mock import patchSsh
@@ -54,6 +55,7 @@
            "patchUtils",
            "patchNetutils",
            "patchSsh",
+           "patchPathutils",
            "ProcessorMock",
            "RpcResultsBuilder",
            "LiveLockMock",
diff -Nru ganeti-2.12.0/test/py/cmdlib/testsupport/pathutils_mock.py ganeti-2.12.3/test/py/cmdlib/testsupport/pathutils_mock.py
--- ganeti-2.12.0/test/py/cmdlib/testsupport/pathutils_mock.py	1970-01-01 02:00:00.000000000 +0200
+++ ganeti-2.12.3/test/py/cmdlib/testsupport/pathutils_mock.py	2015-04-22 20:10:50.000000000 +0300
@@ -0,0 +1,48 @@
+#
+#
+
+# Copyright (C) 2015 Google Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# 1. Redistributions of source code must retain the above copyright notice,
+# this list of conditions and the following disclaimer.
+#
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+# IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+"""Support for mocking the ssh module"""
+
+
+from cmdlib.testsupport.util import patchModule
+
+
+# pylint: disable=C0103
+def patchPathutils(module_under_test):
+  """Patches the L{ganeti.pathutils} module for tests.
+
+  This function is meant to be used as a decorator for test methods.
+
+  @type module_under_test: string
+  @param module_under_test: the module within cmdlib which is tested. The
+        "ganeti.cmdlib" prefix is optional.
+
+  """
+  return patchModule(module_under_test, "pathutils")
diff -Nru ganeti-2.12.0/test/py/cmdlib/testsupport/wconfd_mock.py ganeti-2.12.3/test/py/cmdlib/testsupport/wconfd_mock.py
--- ganeti-2.12.0/test/py/cmdlib/testsupport/wconfd_mock.py	2014-10-07 17:45:37.000000000 +0300
+++ ganeti-2.12.3/test/py/cmdlib/testsupport/wconfd_mock.py	2015-04-28 18:05:35.000000000 +0300
@@ -74,6 +74,9 @@
       self.wconfdmock.mylocks[lockrq[0]] = lockrq[1]
     return [lockrq[0] for lockrq in req]
 
+  def PrepareClusterDestruction(self, _cid):
+    pass
+
 
 class WConfdMock(object):
   """Mock calls to WConfD.
diff -Nru ganeti-2.12.0/test/py/ganeti.hypervisor.hv_xen_unittest.py ganeti-2.12.3/test/py/ganeti.hypervisor.hv_xen_unittest.py
--- ganeti-2.12.0/test/py/ganeti.hypervisor.hv_xen_unittest.py	2014-10-09 14:57:28.000000000 +0300
+++ ganeti-2.12.3/test/py/ganeti.hypervisor.hv_xen_unittest.py	2015-04-29 11:09:35.000000000 +0300
@@ -169,6 +169,36 @@
         self.fail("Exception was not raised")
 
 
+class TestInstanceStateParsing(unittest.TestCase):
+  def testRunningStates(self):
+    states = [
+      "r-----",
+      "r-p---",
+      "rb----",
+      "rbp---",
+      "-b----",
+      "-bp---",
+      "-----d",
+      "--p--d",
+      "------",
+      "--p---",
+    ]
+    for state in states:
+      self.assertEqual(hv_xen._XenToHypervisorInstanceState(state),
+                       hv_base.HvInstanceState.RUNNING)
+
+  def testShutdownStates(self):
+    states = [
+      "---s--",
+      "--ps--",
+      "---s-d",
+      "--ps-d",
+    ]
+    for state in states:
+      self.assertEqual(hv_xen._XenToHypervisorInstanceState(state),
+                       hv_base.HvInstanceState.SHUTDOWN)
+
+
 class TestGetInstanceList(testutils.GanetiTestCase):
   def _Fail(self):
     return utils.RunResult(constants.EXIT_FAILURE, None,
@@ -178,7 +208,8 @@
   def testTimeout(self):
     fn = testutils.CallCounter(self._Fail)
     try:
-      hv_xen._GetRunningInstanceList(fn, False, _timeout=0.1)
+      hv_xen._GetRunningInstanceList(fn, False, delays=(0.02, 1.0, 0.03),
+                                     timeout=0.1)
     except errors.HypervisorError, err:
       self.assertTrue("timeout exceeded" in str(err))
     else:
@@ -196,7 +227,8 @@
 
     fn = testutils.CallCounter(compat.partial(self._Success, data))
 
-    result = hv_xen._GetRunningInstanceList(fn, True, _timeout=0.1)
+    result = hv_xen._GetRunningInstanceList(fn, True, delays=(0.02, 1.0, 0.03),
+                                            timeout=0.1)
 
     self.assertEqual(len(result), 4)
 
@@ -554,6 +586,12 @@
 
     self.vncpw = "".join(random.sample(string.ascii_letters, 10))
 
+    self._xen_delay = self.TARGET._INSTANCE_LIST_DELAYS
+    self.TARGET._INSTANCE_LIST_DELAYS = (0.01, 1.0, 0.05)
+
+    self._list_timeout = self.TARGET._INSTANCE_LIST_TIMEOUT
+    self.TARGET._INSTANCE_LIST_TIMEOUT = 0.1
+
     self.vncpw_path = utils.PathJoin(self.tmpdir, "vncpw")
     utils.WriteFile(self.vncpw_path, data=self.vncpw)
 
@@ -562,6 +600,9 @@
 
     shutil.rmtree(self.tmpdir)
 
+    self.TARGET._INSTANCE_LIST_DELAYS = self._xen_delay
+    self.TARGET._INSTANCE_LIST_TIMEOUT = self._list_timeout
+
   def _GetHv(self, run_cmd=NotImplemented):
     return self.TARGET(_cfgdir=self.tmpdir, _run_cmd_fn=run_cmd, _cmd=self.CMD)
 
diff -Nru ganeti-2.12.0/test/py/ganeti.storage.bdev_unittest.py ganeti-2.12.3/test/py/ganeti.storage.bdev_unittest.py
--- ganeti-2.12.0/test/py/ganeti.storage.bdev_unittest.py	2014-10-09 14:57:28.000000000 +0300
+++ ganeti-2.12.3/test/py/ganeti.storage.bdev_unittest.py	2015-04-29 11:09:35.000000000 +0300
@@ -219,6 +219,8 @@
       ("-wi-a-", 253, 7, 4096.00, 4, ["/dev/abc"]),
       ("-ri-a-", 253, 4, 4.00, 5, ["/dev/abc", "/dev/def"]),
       ("-wc-ao", 15, 18, 4096.00, 32, ["/dev/abc", "/dev/def", "/dev/ghi0"]),
+      # Physical devices might be missing with thin volumes
+      ("twc-ao", 15, 18, 4096.00, 32, []),
       ]
     for exp in true_out:
       for sep in "#;|":
diff -Nru ganeti-2.12.0/test/py/ganeti.storage.gluster_unittest.py ganeti-2.12.3/test/py/ganeti.storage.gluster_unittest.py
--- ganeti-2.12.0/test/py/ganeti.storage.gluster_unittest.py	2014-10-06 18:10:35.000000000 +0300
+++ ganeti-2.12.3/test/py/ganeti.storage.gluster_unittest.py	2015-04-22 20:10:50.000000000 +0300
@@ -119,7 +119,7 @@
                                           vol_name="testvol")
     self.assertEqual(
       vol_1._GetFUSEMountString(),
-      "203.0.113.42:24007:testvol"
+      "-o server-port=24007 203.0.113.42:/testvol"
     )
 
     vol_2 = TestGlusterVolume._MakeVolume(addr=TestGlusterVolume.testAddrIpv[6],
@@ -128,7 +128,7 @@
     # This _ought_ to work. https://bugzilla.redhat.com/show_bug.cgi?id=764188
     self.assertEqual(
       vol_2._GetFUSEMountString(),
-      "2001:db8:0:74:65:28:6:69:24007:testvol"
+      "-o server-port=24007 2001:db8:0:74:65:28:6:69:/testvol"
     )
 
     vol_3 = TestGlusterVolume._MakeVolume(addr="localhost",
@@ -136,7 +136,8 @@
                                           vol_name="testvol")
     fuseMountString = vol_3._GetFUSEMountString()
     self.assertTrue(fuseMountString in
-                    ["127.0.0.1:9001:testvol", "::1:9001:testvol"],
+                    ["-o server-port=9001 127.0.0.1:/testvol",
+                     "-o server-port=9001 ::1:/testvol"],
                     msg="%s not testvol on localhost:9001" % (fuseMountString,))
 
 
diff -Nru ganeti-2.12.0/tools/cfgupgrade ganeti-2.12.3/tools/cfgupgrade
--- ganeti-2.12.0/tools/cfgupgrade	2014-10-09 14:57:28.000000000 +0300
+++ ganeti-2.12.3/tools/cfgupgrade	2015-04-29 11:09:35.000000000 +0300
@@ -241,6 +241,14 @@
         nic["network"] = uuid
 
 
+def AssignUuid(disk):
+  if not "uuid" in disk:
+    disk["uuid"] = utils.io.NewUUID()
+  if "children" in disk:
+    for d in disk["children"]:
+      AssignUuid(d)
+
+
 def _ConvertDiskAndCheckMissingSpindles(iobj, instance):
   missing_spindles = False
   if "disks" not in iobj:
@@ -265,8 +273,7 @@
       if not "spindles" in dobj:
         missing_spindles = True
 
-      if not "uuid" in dobj:
-        dobj["uuid"] = utils.io.NewUUID()
+      AssignUuid(dobj)
   return missing_spindles
 
 
diff -Nru ganeti-2.12.0/tools/ifup-os.in ganeti-2.12.3/tools/ifup-os.in
--- ganeti-2.12.0/tools/ifup-os.in	2014-10-07 17:45:37.000000000 +0300
+++ ganeti-2.12.3/tools/ifup-os.in	2015-04-22 20:10:50.000000000 +0300
@@ -37,7 +37,7 @@
 #
 # This script also controls the DHCP server that leases IP address for
 # instances, i.e., the NICs inside the instances, not the TAP
-# interfaces.  The DHCP server is started and restarted (or reHUPed)
+# interfaces.  The DHCP server is started and restarted
 # as necessary and always with up-to-date configuration files.
 #
 # This script expects the following environment variables
@@ -68,56 +68,35 @@
 # TAP network interfaces to monitor or IP addresses to lease, the DHCP
 # server is terminated through 'SIGTERM'.
 #
-# If there are still instances running, then:
-#  - if the DHCP server is running, a 'SIGHUP' will be sent to the
-#    dnsmasq process which will cause the configuration file to be
-#    re-read, while keeping the process running
-#  - if the DHCP server is not running, it will be started, and the
-#    configuration file will be passed it
+# If there are still instances running, it will be restarted and the
+# configuration file will be passed it.
 function restart_dnsmasq {
-  SIGNAL=
-
-  if [ -z "$ALIVE_INTERFACES" -o -z "$ALIVE_LEASES" ]
-  then
-      SIGNAL=TERM
-  else
-      SIGNAL=HUP
-  fi
-
-  RUNNING=
+  local RUNNING=
+  local PID
 
   if [ -f "$DNSMASQ_PID" ]
   then
       PID=$(cat $DNSMASQ_PID)
       if [ -n "$PID" ] && ps -p "$PID"
       then
-	  RUNNING=yes
+          RUNNING=yes
       fi
   fi
 
-  KILLED=
-
   if [ "$RUNNING" = yes ]
   then
-      kill -$SIGNAL $PID
-
-      if [ "$SIGNAL" = TERM ]
-      then
-	  KILLED=yes
-      fi
-  fi
-
-  if [ "$KILLED" = yes ]
-  then
+      kill -TERM $PID
+      # wait for the process to die
+      while kill -0 $PID 2>/dev/null
+      do
+          sleep 1
+      done
       rm -f $DNSMASQ_PID
   fi
 
-  if [ "$RUNNING" != yes -o "$KILLED" == yes ]
+  if [ -n "$ALIVE_INTERFACES" -a -n "$ALIVE_LEASES" ]
   then
-      if [ -n "$ALIVE_INTERFACES" -a -n "$ALIVE_LEASES" ]
-      then
-	  dnsmasq -C $DNSMASQ_CONF
-      fi
+      dnsmasq -C $DNSMASQ_CONF
   fi
 
   return 0
diff -Nru ganeti-2.12.0/tools/kvm-ifup-os ganeti-2.12.3/tools/kvm-ifup-os
--- ganeti-2.12.0/tools/kvm-ifup-os	2014-10-10 11:52:19.000000000 +0300
+++ ganeti-2.12.3/tools/kvm-ifup-os	2015-04-29 11:09:44.000000000 +0300
@@ -37,7 +37,7 @@
 #
 # This script also controls the DHCP server that leases IP address for
 # instances, i.e., the NICs inside the instances, not the TAP
-# interfaces.  The DHCP server is started and restarted (or reHUPed)
+# interfaces.  The DHCP server is started and restarted
 # as necessary and always with up-to-date configuration files.
 #
 # This script expects the following environment variables
@@ -68,56 +68,35 @@
 # TAP network interfaces to monitor or IP addresses to lease, the DHCP
 # server is terminated through 'SIGTERM'.
 #
-# If there are still instances running, then:
-#  - if the DHCP server is running, a 'SIGHUP' will be sent to the
-#    dnsmasq process which will cause the configuration file to be
-#    re-read, while keeping the process running
-#  - if the DHCP server is not running, it will be started, and the
-#    configuration file will be passed it
+# If there are still instances running, it will be restarted and the
+# configuration file will be passed it.
 function restart_dnsmasq {
-  SIGNAL=
-
-  if [ -z "$ALIVE_INTERFACES" -o -z "$ALIVE_LEASES" ]
-  then
-      SIGNAL=TERM
-  else
-      SIGNAL=HUP
-  fi
-
-  RUNNING=
+  local RUNNING=
+  local PID
 
   if [ -f "$DNSMASQ_PID" ]
   then
       PID=$(cat $DNSMASQ_PID)
       if [ -n "$PID" ] && ps -p "$PID"
       then
-	  RUNNING=yes
+          RUNNING=yes
       fi
   fi
 
-  KILLED=
-
   if [ "$RUNNING" = yes ]
   then
-      kill -$SIGNAL $PID
-
-      if [ "$SIGNAL" = TERM ]
-      then
-	  KILLED=yes
-      fi
-  fi
-
-  if [ "$KILLED" = yes ]
-  then
+      kill -TERM $PID
+      # wait for the process to die
+      while kill -0 $PID 2>/dev/null
+      do
+          sleep 1
+      done
       rm -f $DNSMASQ_PID
   fi
 
-  if [ "$RUNNING" != yes -o "$KILLED" == yes ]
+  if [ -n "$ALIVE_INTERFACES" -a -n "$ALIVE_LEASES" ]
   then
-      if [ -n "$ALIVE_INTERFACES" -a -n "$ALIVE_LEASES" ]
-      then
-	  dnsmasq -C $DNSMASQ_CONF
-      fi
+      dnsmasq -C $DNSMASQ_CONF
   fi
 
   return 0
diff -Nru ganeti-2.12.0/tools/move-instance ganeti-2.12.3/tools/move-instance
--- ganeti-2.12.0/tools/move-instance	2014-10-07 17:45:37.000000000 +0300
+++ ganeti-2.12.3/tools/move-instance	2015-04-28 18:05:35.000000000 +0300
@@ -510,7 +510,7 @@
                                     mrt.move.dest_disk_template,
                                     mrt.src_instinfo, mrt.src_expinfo,
                                     mrt.move.hvparams, mrt.move.beparams,
-                                    mrt.move.beparams, mrt.move.nics,
+                                    mrt.move.osparams, mrt.move.nics,
                                     is_attempt_opportunistic
                                     )
 
diff -Nru ganeti-2.12.0/tools/vif-ganeti-metad.in ganeti-2.12.3/tools/vif-ganeti-metad.in
--- ganeti-2.12.0/tools/vif-ganeti-metad.in	1970-01-01 02:00:00.000000000 +0200
+++ ganeti-2.12.3/tools/vif-ganeti-metad.in	2015-04-22 20:10:50.000000000 +0300
@@ -0,0 +1,70 @@
+#!/bin/sh
+#
+
+# Copyright (C) 2014 Google Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# 1. Redistributions of source code must retain the above copyright notice,
+# this list of conditions and the following disclaimer.
+#
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+# IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+# This Xen vif setup script does the bare minimum required to set up the
+# interface during instance creation. The rest of the process is carried out by
+# the ifup-os script.
+
+set -e
+
+xenstore_read() {
+  if ! xenstore-read "$XENBUS_PATH/$1" 2>/dev/null ; then
+    echo "$2"
+  fi
+}
+
+xenstore_write() {
+  xenstore-write "$XENBUS_PATH/$1" "$2"
+}
+
+log() {
+  local level="$1" ; shift
+  logger -p daemon."${level}" -t "$0" -- "$@"
+}
+
+: "${XENBUS_PATH:?}" "${vif:?}"
+
+vifname=$(xenstore_read "vifname" "")
+if [ -n "$vifname" ] ; then
+  if [ "$1" = "online" ] && ! ip link show "$vifname" >/dev/null >&2 ; then
+    log debug "Renaming interface ${vif} to ${vifname}"
+    ip link set "$vif" name "$vifname"
+  fi
+  vif="$vifname"
+fi
+
+case "$1" in
+  online)
+    # Tell Xen we're connected
+    xenstore_write "hotplug-status" "connected"
+    ;;
+  offline)
+    ifconfig "$vif" down || true
+    ;;
+esac
diff -Nru ganeti-2.12.0/tools/xen-ifup-os ganeti-2.12.3/tools/xen-ifup-os
--- ganeti-2.12.0/tools/xen-ifup-os	2014-10-10 11:52:19.000000000 +0300
+++ ganeti-2.12.3/tools/xen-ifup-os	2015-04-29 11:09:44.000000000 +0300
@@ -37,7 +37,7 @@
 #
 # This script also controls the DHCP server that leases IP address for
 # instances, i.e., the NICs inside the instances, not the TAP
-# interfaces.  The DHCP server is started and restarted (or reHUPed)
+# interfaces.  The DHCP server is started and restarted
 # as necessary and always with up-to-date configuration files.
 #
 # This script expects the following environment variables
@@ -68,56 +68,35 @@
 # TAP network interfaces to monitor or IP addresses to lease, the DHCP
 # server is terminated through 'SIGTERM'.
 #
-# If there are still instances running, then:
-#  - if the DHCP server is running, a 'SIGHUP' will be sent to the
-#    dnsmasq process which will cause the configuration file to be
-#    re-read, while keeping the process running
-#  - if the DHCP server is not running, it will be started, and the
-#    configuration file will be passed it
+# If there are still instances running, it will be restarted and the
+# configuration file will be passed it.
 function restart_dnsmasq {
-  SIGNAL=
-
-  if [ -z "$ALIVE_INTERFACES" -o -z "$ALIVE_LEASES" ]
-  then
-      SIGNAL=TERM
-  else
-      SIGNAL=HUP
-  fi
-
-  RUNNING=
+  local RUNNING=
+  local PID
 
   if [ -f "$DNSMASQ_PID" ]
   then
       PID=$(cat $DNSMASQ_PID)
       if [ -n "$PID" ] && ps -p "$PID"
       then
-	  RUNNING=yes
+          RUNNING=yes
       fi
   fi
 
-  KILLED=
-
   if [ "$RUNNING" = yes ]
   then
-      kill -$SIGNAL $PID
-
-      if [ "$SIGNAL" = TERM ]
-      then
-	  KILLED=yes
-      fi
-  fi
-
-  if [ "$KILLED" = yes ]
-  then
+      kill -TERM $PID
+      # wait for the process to die
+      while kill -0 $PID 2>/dev/null
+      do
+          sleep 1
+      done
       rm -f $DNSMASQ_PID
   fi
 
-  if [ "$RUNNING" != yes -o "$KILLED" == yes ]
+  if [ -n "$ALIVE_INTERFACES" -a -n "$ALIVE_LEASES" ]
   then
-      if [ -n "$ALIVE_INTERFACES" -a -n "$ALIVE_LEASES" ]
-      then
-	  dnsmasq -C $DNSMASQ_CONF
-      fi
+      dnsmasq -C $DNSMASQ_CONF
   fi
 
   return 0
diff -Nru ganeti-2.12.0/vcs-version ganeti-2.12.3/vcs-version
--- ganeti-2.12.0/vcs-version	2014-10-10 11:52:17.000000000 +0300
+++ ganeti-2.12.3/vcs-version	2015-04-29 11:09:41.000000000 +0300
@@ -1 +1 @@
-v2.12.0
+v2.12.3
-------------- next part --------------
diff -Nru ganeti-2.12.0/configure ganeti-2.12.3/configure
--- ganeti-2.12.0/configure	2014-10-10 11:52:13.000000000 +0300
+++ ganeti-2.12.3/configure	2015-04-29 11:09:37.000000000 +0300
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for ganeti 2.12.0.
+# Generated by GNU Autoconf 2.69 for ganeti 2.12.3.
 #
 # Report bugs to <ganeti at googlegroups.com>.
 #
@@ -579,8 +579,8 @@
 # Identity of this package.
 PACKAGE_NAME='ganeti'
 PACKAGE_TARNAME='ganeti'
-PACKAGE_VERSION='2.12.0'
-PACKAGE_STRING='ganeti 2.12.0'
+PACKAGE_VERSION='2.12.3'
+PACKAGE_STRING='ganeti 2.12.3'
 PACKAGE_BUGREPORT='ganeti at googlegroups.com'
 PACKAGE_URL=''
 
@@ -695,6 +695,9 @@
 EXPORT_DIR
 SSH_INITD_SCRIPT
 HEXTRA_CONFIGURE
+DEVELOPER_MODE_FALSE
+DEVELOPER_MODE_TRUE
+DEVELOPER_MODE
 HTEST_FALSE
 HTEST_TRUE
 HTEST
@@ -787,6 +790,7 @@
 enable_haskell_profiling
 enable_haskell_coverage
 enable_haskell_tests
+enable_developer_mode
 with_haskell_flags
 with_ssh_initscript
 with_export_dir
@@ -1378,7 +1382,7 @@
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures ganeti 2.12.0 to adapt to many kinds of systems.
+\`configure' configures ganeti 2.12.3 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1444,7 +1448,7 @@
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of ganeti 2.12.0:";;
+     short | recursive ) echo "Configuration of ganeti 2.12.3:";;
    esac
   cat <<\_ACEOF
 
@@ -1464,6 +1468,9 @@
                           disabled)
   --enable-haskell-tests  enable additinal Haskell development test code
                           (default: disabled)
+  --enable-developer-mode do a developper build with additional checks and
+                          fatal warnings; this is implied by enabling the
+                          haskell tests
   --enable-drbd-barriers  enable the DRBD barriers functionality by default
                           (>= 8.0.12) (default: enabled)
   --enable-syslog         enable use of syslog (default: disabled), one of
@@ -1632,7 +1639,7 @@
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-ganeti configure 2.12.0
+ganeti configure 2.12.3
 generated by GNU Autoconf 2.69
 
 Copyright (C) 2012 Free Software Foundation, Inc.
@@ -1649,7 +1656,7 @@
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by ganeti $as_me 2.12.0, which was
+It was created by ganeti $as_me 2.12.3, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   $ $0 $@
@@ -2465,7 +2472,7 @@
 
 # Define the identity of the package.
  PACKAGE='ganeti'
- VERSION='2.12.0'
+ VERSION='2.12.3'
 
 
 cat >>confdefs.h <<_ACEOF
@@ -2591,10 +2598,10 @@
 
 VERSION_MINOR=12
 
-VERSION_REVISION=0
+VERSION_REVISION=3
 
 
-VERSION_FULL=2.12.0
+VERSION_FULL=2.12.3
 
 
 BINDIR=$bindir
@@ -2729,6 +2736,31 @@
 fi
 
 
+# --enable-developer-mode
+# Check whether --enable-developer-mode was given.
+if test "${enable_developer_mode+set}" = set; then :
+  enableval=$enable_developer_mode; if test "$enableval" != no; then
+      DEVELOPER_MODE=yes
+    else
+      DEVELOPER_MODE=no
+    fi
+
+else
+  DEVELOPER_MODE=no
+
+fi
+
+DEVELOPER_MODE=$DEVELOPER_MODE
+
+ if test "$DEVELOPER_MODE" = yes -o "$HTEST" = yes; then
+  DEVELOPER_MODE_TRUE=
+  DEVELOPER_MODE_FALSE='#'
+else
+  DEVELOPER_MODE_TRUE='#'
+  DEVELOPER_MODE_FALSE=
+fi
+
+
 # --with-haskell-flags=
 
 # Check whether --with-haskell-flags was given.
@@ -3016,11 +3048,11 @@
   withval=$with_group_prefix; group_rapi="${withval}rapi";
    group_admin="${withval}admin";
    group_confd="${withval}confd";
-   group_wconfd="${withval}wconfd";
+   group_wconfd="${withval}masterd";
    group_kvmd="$group_default";
    group_luxid="${withval}luxid";
    group_masterd="${withval}masterd";
-   group_metad="${withval}metad";
+   group_metad="$group_default";
    group_noded="$group_default";
    group_daemons="${withval}daemons";
    group_mond="$group_default"
@@ -3334,7 +3366,7 @@
   # Note: Character classes ([...]) need to be double quoted due to autoconf
   # using m4
   elif ! echo "$sphinxver" | grep -q -E \
-       '^Sphinx[[:space:]]+(\(sphinx-build\)[[:space:]]+|v)[1-9]\>'; then
+       '^Sphinx([[:space:]]+|\(sphinx-build[1-9]?\)|v)*[1-9]\>'; then
     as_fn_error $? "Sphinx 1.0 or higher is required" "$LINENO" 5
   fi
 fi
@@ -5665,6 +5697,10 @@
   as_fn_error $? "conditional \"HTEST\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
+if test -z "${DEVELOPER_MODE_TRUE}" && test -z "${DEVELOPER_MODE_FALSE}"; then
+  as_fn_error $? "conditional \"DEVELOPER_MODE\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
 if test -z "${USE_BACKUP_DIR_TRUE}" && test -z "${USE_BACKUP_DIR_FALSE}"; then
   as_fn_error $? "conditional \"USE_BACKUP_DIR\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
@@ -6114,7 +6150,7 @@
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by ganeti $as_me 2.12.0, which was
+This file was extended by ganeti $as_me 2.12.3, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -6167,7 +6203,7 @@
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
-ganeti config.status 2.12.0
+ganeti config.status 2.12.3
 configured by $0, generated by GNU Autoconf 2.69,
   with options \\"\$ac_cs_config\\"
 
diff -Nru ganeti-2.12.0/configure.ac ganeti-2.12.3/configure.ac
--- ganeti-2.12.0/configure.ac	2014-10-09 14:57:28.000000000 +0300
+++ ganeti-2.12.3/configure.ac	2015-04-29 11:09:35.000000000 +0300
@@ -1,7 +1,7 @@
 # Configure script for Ganeti
 m4_define([gnt_version_major], [2])
 m4_define([gnt_version_minor], [12])
-m4_define([gnt_version_revision], [0])
+m4_define([gnt_version_revision], [3])
 m4_define([gnt_version_suffix], [])
 m4_define([gnt_version_full],
           m4_format([%d.%d.%d%s],
@@ -108,6 +108,24 @@
 AC_SUBST(HTEST, $HTEST)
 AM_CONDITIONAL([HTEST], [test "$HTEST" = yes])
 
+# --enable-developer-mode
+AC_ARG_ENABLE([developer-mode],
+  [AS_HELP_STRING([--enable-developer-mode],
+                  m4_normalize([do a developper build with additional
+                  checks and fatal warnings; this is implied by enabling
+                  the haskell tests]))],
+  [[if test "$enableval" != no; then
+      DEVELOPER_MODE=yes
+    else
+      DEVELOPER_MODE=no
+    fi
+  ]],
+  [DEVELOPER_MODE=no
+  ])
+AC_SUBST(DEVELOPER_MODE, $DEVELOPER_MODE)
+AM_CONDITIONAL([DEVELOPER_MODE],
+               [test "$DEVELOPER_MODE" = yes -o "$HTEST" = yes])
+
 # --with-haskell-flags=
 AC_ARG_WITH([haskell-flags],
   [AS_HELP_STRING([--with-haskell-flags=FLAGS],
@@ -338,11 +356,11 @@
   [group_rapi="${withval}rapi";
    group_admin="${withval}admin";
    group_confd="${withval}confd";
-   group_wconfd="${withval}wconfd";
+   group_wconfd="${withval}masterd";
    group_kvmd="$group_default";
    group_luxid="${withval}luxid";
    group_masterd="${withval}masterd";
-   group_metad="${withval}metad";
+   group_metad="$group_default";
    group_noded="$group_default";
    group_daemons="${withval}daemons";
    group_mond="$group_default"],
@@ -494,7 +512,7 @@
   # Note: Character classes ([...]) need to be double quoted due to autoconf
   # using m4
   elif ! echo "$sphinxver" | grep -q -E \
-       '^Sphinx[[[:space:]]]+(\(sphinx-build\)[[[:space:]]]+|v)[[1-9]]\>'; then
+       '^Sphinx([[[:space:]]]+|\(sphinx-build[[1-9]]?\)|v)*[[1-9]]\>'; then
     AC_MSG_ERROR([Sphinx 1.0 or higher is required])
   fi
 fi
diff -Nru ganeti-2.12.0/debian/changelog ganeti-2.12.3/debian/changelog
--- ganeti-2.12.0/debian/changelog	2014-10-18 01:07:33.000000000 +0300
+++ ganeti-2.12.3/debian/changelog	2015-04-29 15:16:06.000000000 +0300
@@ -1,3 +1,59 @@
+ganeti (2.12.3-0+deb8u1) jessie; urgency=medium
+
+  [ Apollon Oikonomopoulos ]
+  * New upstream bugfix release (see /usr/share/doc/ganeti/NEWS.gz):
+    Fixes in 2.12.1:
+      + Clean up stale livelock files
+      + Fix setting up the metadata daemon's network interface for Xen
+      + Make the watcher visible on the reason trail on disk activation
+      + Allow `gnt-instance grow-disk' to ignore instance policy
+      + Fix counting votes when doing master failover
+      + Properly check for IPv6 use before making an SSH connection
+      + Properly check if an instance exists in `gnt-instance console'
+
+    Fixes in 2.12.2:
+      + Detect and report non-master status on socket connection errors
+        (closes: #783388, #781084)
+      + SSH keys are now distributed only to master and master candidates
+      + Improve performance for operations with frequent configuration reads
+      + Improve robustness of spawning job processes, fixing timeouts
+      + Fix a race condition that caused cluster verify to fail
+      + Fix failing automatic glusterfs mounts
+      + Fix watcher failing to read its status file on upgrade
+      + Fix Xen instance state handling, taking transitional states into
+        account (closes: #776772)
+      + Fix conversion of diskless DRBD instances to plain
+      + Fix upgrades from pre-2.6 versions, by handling hv_state_static and
+        disk_state_static configuration fields
+      + Fix a memory leak in the monitoring daemon
+      + Fix a file descriptor leak in the ConfD client
+
+    Fixes in 2.12.3:
+      + Fix config.data upgrade issues from older versions (closes: #783186)
+      + Do not allow the master node to lose its master capability
+      + Properly display externally reserved IPs in `gnt-network info' output
+      + Properly distribute ssconf_hvparams_* using ssconf
+      + Improve `gnt-cluster renew-crypto' robustness against node
+        reachability errors
+      + Make sure the master IP is always removed from the old master after
+        master-failover
+      + Work around Python's os.minor() not supporting devices with high
+        (> 255) minor numbers (closes: #782073)
+      + Fix Luxid failure when DNS returns an IPv6 address that does not
+        reverse resolve
+  * Drop fix-wconfd-metad patch, merged upstream.
+  * d/copyright: adjust copyright years
+
+  [ Gregory Potamianos ]
+  * molly-guard: detect master status and warn when attempting to shutdown or
+    reboot the master node.
+
+  [ Debconf translations ]
+  * Dutch (Frans Spiesschaert, closes: #765856)
+  * Swedish (Martin Bagge, closes: #769870)
+
+ -- Apollon Oikonomopoulos <apoikos at debian.org>  Wed, 29 Apr 2015 14:06:45 +0300
+
 ganeti (2.12.0-3) unstable; urgency=medium
 
   * Use proper groups for wconfd and metad (closes: #765764).
diff -Nru ganeti-2.12.0/debian/copyright ganeti-2.12.3/debian/copyright
--- ganeti-2.12.0/debian/copyright	2014-10-18 01:07:33.000000000 +0300
+++ ganeti-2.12.3/debian/copyright	2015-04-29 15:16:06.000000000 +0300
@@ -3,12 +3,12 @@
 Source: http://code.google.com/p/ganeti
 
 Files: *
-Copyright: Copyright (c) 2006-2014 Google Inc.
+Copyright: Copyright (c) 2006-2015 Google Inc.
 License: BSD-2-Clause
 
 Files: debian/*
 Copyright: Copyright (c) 2007 Leonardo Rodrigues de Mello <l at lmello.eu.org>
-           Copyright (c) 2007-2013 Debian Ganeti Team <pkg-ganeti at lists.alioth.debian.org>
+           Copyright (c) 2007-2015 Debian Ganeti Team <pkg-ganeti at lists.alioth.debian.org>
 License: GPL-2+
 
 Files: doc/html/_static/basic.css
diff -Nru ganeti-2.12.0/debian/molly-guard-helper ganeti-2.12.3/debian/molly-guard-helper
--- ganeti-2.12.0/debian/molly-guard-helper	2014-10-18 01:07:33.000000000 +0300
+++ ganeti-2.12.3/debian/molly-guard-helper	2015-04-29 15:16:06.000000000 +0300
@@ -71,12 +71,23 @@
             sys.stderr.write("W: unable to list %s instances: %s\n" %
                              (hv_type, str(err)))
 
-    if instances:
-        sys.stdout.write("W: The following Ganeti instances will be"
-                         " terminated abnormally if you %s this system:\n" %
-                         action)
-        for instance in sorted(instances):
-            sys.stdout.write("   - %s\n" % instance)
+    current_master = conf.GetMasterNode()
+
+    node_is_current_master = False
+    if hostname == current_master:
+        node_is_current_master = True
+
+    if instances or node_is_current_master:
+        if instances:
+            sys.stdout.write("W: The following Ganeti instances will be"
+                             " terminated abnormally if you %s this system:\n" %
+                             action)
+            for instance in sorted(instances):
+                sys.stdout.write("   - %s\n" % instance)
+
+        if node_is_current_master:
+            sys.stdout.write("W: This system is the current Ganeti master"
+                             " for this cluster\n")
 
         try:
             response = raw_input("Type YES to %s the system: " % action)
diff -Nru ganeti-2.12.0/debian/patches/fix-wconfd-metad ganeti-2.12.3/debian/patches/fix-wconfd-metad
--- ganeti-2.12.0/debian/patches/fix-wconfd-metad	2014-10-18 01:07:33.000000000 +0300
+++ ganeti-2.12.3/debian/patches/fix-wconfd-metad	1970-01-01 02:00:00.000000000 +0200
@@ -1,28 +0,0 @@
-commit 62d0ee90a1a16aa20af2c84cf37a0686c4bfd99d
-Author: Apollon Oikonomopoulos <apoikos at gmail.com>
-Date:   Sat Oct 18 00:42:32 2014 +0300
-
-    Really run wconfd as masterd and metad as root
-    
-    Commits 9decc439eb4 and 4ddce51deb were incomplete, missing the relevant
-    group specifications. Since the decision was made to run wconfd as
-    masterd and metad as root, we use the respective existing groups.
-    
-    Signed-off-by: Apollon Oikonomopoulos <apoikos at gmail.com>
-
---- a/configure
-+++ b/configure
-@@ -3016,11 +3016,11 @@
-   withval=$with_group_prefix; group_rapi="${withval}rapi";
-    group_admin="${withval}admin";
-    group_confd="${withval}confd";
--   group_wconfd="${withval}wconfd";
-+   group_wconfd="${withval}masterd";
-    group_kvmd="$group_default";
-    group_luxid="${withval}luxid";
-    group_masterd="${withval}masterd";
--   group_metad="${withval}metad";
-+   group_metad="$group_default";
-    group_noded="$group_default";
-    group_daemons="${withval}daemons";
-    group_mond="$group_default"
diff -Nru ganeti-2.12.0/debian/patches/series ganeti-2.12.3/debian/patches/series
--- ganeti-2.12.0/debian/patches/series	2014-10-18 01:07:33.000000000 +0300
+++ ganeti-2.12.3/debian/patches/series	2015-04-29 15:16:06.000000000 +0300
@@ -2,4 +2,3 @@
 cfgupgrade12-remove-old-ssconf.patch
 0003-Disable-local-checks-during-build.patch
 do-not-backup-export-dir.patch
-fix-wconfd-metad
diff -Nru ganeti-2.12.0/debian/po/nl.po ganeti-2.12.3/debian/po/nl.po
--- ganeti-2.12.0/debian/po/nl.po	1970-01-01 02:00:00.000000000 +0200
+++ ganeti-2.12.3/debian/po/nl.po	2015-04-29 15:16:06.000000000 +0300
@@ -0,0 +1,57 @@
+# Dutch translation of ganeti debconf templates.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the ganeti package.
+# Frans Spiesschaert <Frans.Spiesschaert at yucom.be>, 2014.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: ganeti\n"
+"Report-Msgid-Bugs-To: ganeti at packages.debian.org\n"
+"POT-Creation-Date: 2014-04-08 08:41+0200\n"
+"PO-Revision-Date: 2014-10-06 12:04+0200\n"
+"Last-Translator: Frans Spiesschaert <Frans.Spiesschaert at yucom.be>\n"
+"Language-Team: Debian Dutch l10n Team <debian-l10n-dutch at lists.debian.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. Type: boolean
+#. Description
+#: ../templates/versioned.templates:2001
+msgid "Abort ${package} removal?"
+msgstr "Verwijderen van ${package} afbreken?"
+
+#. Type: boolean
+#. Description
+#: ../templates/versioned.templates:2001
+msgid ""
+"You are attempting to remove ${package}, but it seems that the running "
+"Ganeti version is still ${version}."
+msgstr ""
+"U probeert ${package} te verwijderen, maar het ziet er naar uit dat de "
+"actieve versie van Ganeti nog altijd ${version} is."
+
+#. Type: boolean
+#. Description
+#: ../templates/versioned.templates:2001
+msgid ""
+"This can happen if you upgrade the ganeti package to a new minor version, "
+"but have not run \"gnt-cluster upgrade\" yet. Removing ${package} will cause "
+"Ganeti to stop functioning correctly."
+msgstr ""
+"Dit fenomeen kan zich voordoen als u het pakket ganeti opwaardeert naar een "
+"nieuwe onderversie, maar nog niet de opdracht \"gnt-cluster upgrade\" "
+"uitgevoerd heeft. Als u ${package} verwijdert zal Ganeti niet langer correct "
+"functioneren."
+
+#. Type: boolean
+#. Description
+#: ../templates/versioned.templates:2001
+msgid ""
+"It is highly recommended to abort the removal now and upgrade the cluster "
+"before removing ${package}."
+msgstr ""
+"Het wordt stellig aanbevolen om nu het verwijderen af te breken en eerst de "
+"cluster op te waarderen voor u ${package} verwijdert."
diff -Nru ganeti-2.12.0/debian/po/sv.po ganeti-2.12.3/debian/po/sv.po
--- ganeti-2.12.0/debian/po/sv.po	1970-01-01 02:00:00.000000000 +0200
+++ ganeti-2.12.3/debian/po/sv.po	2015-04-29 15:16:06.000000000 +0300
@@ -0,0 +1,57 @@
+# Translation of ganeti debconf template to Swedish
+# Copyright (C) 2014 Martin Bagge <brother at bsnet.se>
+# This file is distributed under the same license as the ganeti package.
+#
+# Martin Bagge <brother at bsnet.se>, 2014
+msgid ""
+msgstr ""
+"Project-Id-Version: ganeti\n"
+"Report-Msgid-Bugs-To: ganeti at packages.debian.org\n"
+"POT-Creation-Date: 2014-04-08 08:41+0200\n"
+"PO-Revision-Date: 2014-11-17 09:44+0100\n"
+"Last-Translator: Martin Bagge / brother <brother at bsnet.se>\n"
+"Language-Team: Swedish <debian-l10n-swedish at lists.debian.org>\n"
+"Language: sv\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Poedit 1.6.10\n"
+
+#. Type: boolean
+#. Description
+#: ../templates/versioned.templates:2001
+msgid "Abort ${package} removal?"
+msgstr "Avbryt radering av ${package}?"
+
+#. Type: boolean
+#. Description
+#: ../templates/versioned.templates:2001
+msgid ""
+"You are attempting to remove ${package}, but it seems that the running "
+"Ganeti version is still ${version}."
+msgstr ""
+"Du försöker ta bort ${package} men det verkar som att Ganeti kör version "
+"${version} fortfarande."
+
+#. Type: boolean
+#. Description
+#: ../templates/versioned.templates:2001
+msgid ""
+"This can happen if you upgrade the ganeti package to a new minor version, "
+"but have not run \"gnt-cluster upgrade\" yet. Removing ${package} will cause "
+"Ganeti to stop functioning correctly."
+msgstr ""
+"Detta kan inträffa vid en mindre uppdatering av ganeti-paketet utan att ha "
+"kört \"gnt-cluster upgrade\" än. Tas ${package} bort kommer Ganeti att sluta "
+"fungera korrekt."
+
+#. Type: boolean
+#. Description
+#: ../templates/versioned.templates:2001
+msgid ""
+"It is highly recommended to abort the removal now and upgrade the cluster "
+"before removing ${package}."
+msgstr ""
+"En stark rekommendation är att avbryta raderingen nu och uppgradera klustret "
+"innan ${package} tas bort."
diff -Nru ganeti-2.12.0/devel/build_chroot ganeti-2.12.3/devel/build_chroot
diff -Nru ganeti-2.12.0/doc/admin.rst ganeti-2.12.3/doc/admin.rst
diff -Nru ganeti-2.12.0/doc/design-daemons.rst ganeti-2.12.3/doc/design-daemons.rst
diff -Nru ganeti-2.12.0/doc/design-file-based-storage.rst ganeti-2.12.3/doc/design-file-based-storage.rst
diff -Nru ganeti-2.12.0/doc/design-storagetypes.rst ganeti-2.12.3/doc/design-storagetypes.rst
diff -Nru ganeti-2.12.0/doc/examples/systemd/ganeti-master.target ganeti-2.12.3/doc/examples/systemd/ganeti-master.target
diff -Nru ganeti-2.12.0/doc/examples/systemd/ganeti-node.target ganeti-2.12.3/doc/examples/systemd/ganeti-node.target
diff -Nru ganeti-2.12.0/doc/examples/systemd/ganeti.service ganeti-2.12.3/doc/examples/systemd/ganeti.service
diff -Nru ganeti-2.12.0/doc/examples/systemd/ganeti.target ganeti-2.12.3/doc/examples/systemd/ganeti.target
diff -Nru ganeti-2.12.0/doc/html/admin.html ganeti-2.12.3/doc/html/admin.html
diff -Nru ganeti-2.12.0/doc/html/cluster-keys-replacement.html ganeti-2.12.3/doc/html/cluster-keys-replacement.html
diff -Nru ganeti-2.12.0/doc/html/cluster-merge.html ganeti-2.12.3/doc/html/cluster-merge.html
diff -Nru ganeti-2.12.0/doc/html/design-2.0.html ganeti-2.12.3/doc/html/design-2.0.html
diff -Nru ganeti-2.12.0/doc/html/design-2.10.html ganeti-2.12.3/doc/html/design-2.10.html
diff -Nru ganeti-2.12.0/doc/html/design-2.11.html ganeti-2.12.3/doc/html/design-2.11.html
diff -Nru ganeti-2.12.0/doc/html/design-2.12.html ganeti-2.12.3/doc/html/design-2.12.html
diff -Nru ganeti-2.12.0/doc/html/design-2.1.html ganeti-2.12.3/doc/html/design-2.1.html
diff -Nru ganeti-2.12.0/doc/html/design-2.2.html ganeti-2.12.3/doc/html/design-2.2.html
diff -Nru ganeti-2.12.0/doc/html/design-2.3.html ganeti-2.12.3/doc/html/design-2.3.html
diff -Nru ganeti-2.12.0/doc/html/design-2.4.html ganeti-2.12.3/doc/html/design-2.4.html
diff -Nru ganeti-2.12.0/doc/html/design-2.5.html ganeti-2.12.3/doc/html/design-2.5.html
diff -Nru ganeti-2.12.0/doc/html/design-2.6.html ganeti-2.12.3/doc/html/design-2.6.html
diff -Nru ganeti-2.12.0/doc/html/design-2.7.html ganeti-2.12.3/doc/html/design-2.7.html
diff -Nru ganeti-2.12.0/doc/html/design-2.8.html ganeti-2.12.3/doc/html/design-2.8.html
diff -Nru ganeti-2.12.0/doc/html/design-2.9.html ganeti-2.12.3/doc/html/design-2.9.html
diff -Nru ganeti-2.12.0/doc/html/design-autorepair.html ganeti-2.12.3/doc/html/design-autorepair.html
diff -Nru ganeti-2.12.0/doc/html/design-bulk-create.html ganeti-2.12.3/doc/html/design-bulk-create.html
diff -Nru ganeti-2.12.0/doc/html/design-ceph-ganeti-support.html ganeti-2.12.3/doc/html/design-ceph-ganeti-support.html
diff -Nru ganeti-2.12.0/doc/html/design-chained-jobs.html ganeti-2.12.3/doc/html/design-chained-jobs.html
diff -Nru ganeti-2.12.0/doc/html/design-cmdlib-unittests.html ganeti-2.12.3/doc/html/design-cmdlib-unittests.html
diff -Nru ganeti-2.12.0/doc/html/design-cpu-pinning.html ganeti-2.12.3/doc/html/design-cpu-pinning.html
diff -Nru ganeti-2.12.0/doc/html/design-cpu-speed.html ganeti-2.12.3/doc/html/design-cpu-speed.html
diff -Nru ganeti-2.12.0/doc/html/design-daemons.html ganeti-2.12.3/doc/html/design-daemons.html
diff -Nru ganeti-2.12.0/doc/html/design-device-uuid-name.html ganeti-2.12.3/doc/html/design-device-uuid-name.html
diff -Nru ganeti-2.12.0/doc/html/design-disks.html ganeti-2.12.3/doc/html/design-disks.html
diff -Nru ganeti-2.12.0/doc/html/design-draft.html ganeti-2.12.3/doc/html/design-draft.html
diff -Nru ganeti-2.12.0/doc/html/design-file-based-storage.html ganeti-2.12.3/doc/html/design-file-based-storage.html
diff -Nru ganeti-2.12.0/doc/html/design-glusterfs-ganeti-support.html ganeti-2.12.3/doc/html/design-glusterfs-ganeti-support.html
diff -Nru ganeti-2.12.0/doc/html/design-hotplug.html ganeti-2.12.3/doc/html/design-hotplug.html
diff -Nru ganeti-2.12.0/doc/html/design-hroller.html ganeti-2.12.3/doc/html/design-hroller.html
diff -Nru ganeti-2.12.0/doc/html/design-hsqueeze.html ganeti-2.12.3/doc/html/design-hsqueeze.html
diff -Nru ganeti-2.12.0/doc/html/design-htools-2.3.html ganeti-2.12.3/doc/html/design-htools-2.3.html
diff -Nru ganeti-2.12.0/doc/html/design-http-server.html ganeti-2.12.3/doc/html/design-http-server.html
diff -Nru ganeti-2.12.0/doc/html/design-hugepages-support.html ganeti-2.12.3/doc/html/design-hugepages-support.html
diff -Nru ganeti-2.12.0/doc/html/design-impexp2.html ganeti-2.12.3/doc/html/design-impexp2.html
diff -Nru ganeti-2.12.0/doc/html/design-internal-shutdown.html ganeti-2.12.3/doc/html/design-internal-shutdown.html
diff -Nru ganeti-2.12.0/doc/html/design-kvmd.html ganeti-2.12.3/doc/html/design-kvmd.html
diff -Nru ganeti-2.12.0/doc/html/design-linuxha.html ganeti-2.12.3/doc/html/design-linuxha.html
diff -Nru ganeti-2.12.0/doc/html/design-lu-generated-jobs.html ganeti-2.12.3/doc/html/design-lu-generated-jobs.html
diff -Nru ganeti-2.12.0/doc/html/design-monitoring-agent.html ganeti-2.12.3/doc/html/design-monitoring-agent.html
diff -Nru ganeti-2.12.0/doc/html/design-move-instance-improvements.html ganeti-2.12.3/doc/html/design-move-instance-improvements.html
diff -Nru ganeti-2.12.0/doc/html/design-multi-reloc.html ganeti-2.12.3/doc/html/design-multi-reloc.html
diff -Nru ganeti-2.12.0/doc/html/design-multi-version-tests.html ganeti-2.12.3/doc/html/design-multi-version-tests.html
diff -Nru ganeti-2.12.0/doc/html/design-network.html ganeti-2.12.3/doc/html/design-network.html
diff -Nru ganeti-2.12.0/doc/html/design-node-add.html ganeti-2.12.3/doc/html/design-node-add.html
diff -Nru ganeti-2.12.0/doc/html/design-node-security.html ganeti-2.12.3/doc/html/design-node-security.html
diff -Nru ganeti-2.12.0/doc/html/design-oob.html ganeti-2.12.3/doc/html/design-oob.html
diff -Nru ganeti-2.12.0/doc/html/design-openvswitch.html ganeti-2.12.3/doc/html/design-openvswitch.html
diff -Nru ganeti-2.12.0/doc/html/design-opportunistic-locking.html ganeti-2.12.3/doc/html/design-opportunistic-locking.html
diff -Nru ganeti-2.12.0/doc/html/design-optables.html ganeti-2.12.3/doc/html/design-optables.html
diff -Nru ganeti-2.12.0/doc/html/design-os.html ganeti-2.12.3/doc/html/design-os.html
diff -Nru ganeti-2.12.0/doc/html/design-ovf-support.html ganeti-2.12.3/doc/html/design-ovf-support.html
diff -Nru ganeti-2.12.0/doc/html/design-partitioned.html ganeti-2.12.3/doc/html/design-partitioned.html
diff -Nru ganeti-2.12.0/doc/html/design-performance-tests.html ganeti-2.12.3/doc/html/design-performance-tests.html
diff -Nru ganeti-2.12.0/doc/html/design-query2.html ganeti-2.12.3/doc/html/design-query2.html
diff -Nru ganeti-2.12.0/doc/html/design-query-splitting.html ganeti-2.12.3/doc/html/design-query-splitting.html
diff -Nru ganeti-2.12.0/doc/html/design-reason-trail.html ganeti-2.12.3/doc/html/design-reason-trail.html
diff -Nru ganeti-2.12.0/doc/html/design-resource-model.html ganeti-2.12.3/doc/html/design-resource-model.html
diff -Nru ganeti-2.12.0/doc/html/design-restricted-commands.html ganeti-2.12.3/doc/html/design-restricted-commands.html
diff -Nru ganeti-2.12.0/doc/html/design-shared-storage.html ganeti-2.12.3/doc/html/design-shared-storage.html
diff -Nru ganeti-2.12.0/doc/html/design-ssh-ports.html ganeti-2.12.3/doc/html/design-ssh-ports.html
diff -Nru ganeti-2.12.0/doc/html/design-storagetypes.html ganeti-2.12.3/doc/html/design-storagetypes.html
diff -Nru ganeti-2.12.0/doc/html/design-systemd.html ganeti-2.12.3/doc/html/design-systemd.html
diff -Nru ganeti-2.12.0/doc/html/design-upgrade.html ganeti-2.12.3/doc/html/design-upgrade.html
diff -Nru ganeti-2.12.0/doc/html/design-virtual-clusters.html ganeti-2.12.3/doc/html/design-virtual-clusters.html
diff -Nru ganeti-2.12.0/doc/html/design-x509-ca.html ganeti-2.12.3/doc/html/design-x509-ca.html
diff -Nru ganeti-2.12.0/doc/html/dev-codestyle.html ganeti-2.12.3/doc/html/dev-codestyle.html
diff -Nru ganeti-2.12.0/doc/html/devnotes.html ganeti-2.12.3/doc/html/devnotes.html
diff -Nru ganeti-2.12.0/doc/html/glossary.html ganeti-2.12.3/doc/html/glossary.html
diff -Nru ganeti-2.12.0/doc/html/hooks.html ganeti-2.12.3/doc/html/hooks.html
diff -Nru ganeti-2.12.0/doc/html/iallocator.html ganeti-2.12.3/doc/html/iallocator.html
diff -Nru ganeti-2.12.0/doc/html/index.html ganeti-2.12.3/doc/html/index.html
diff -Nru ganeti-2.12.0/doc/html/install.html ganeti-2.12.3/doc/html/install.html
diff -Nru ganeti-2.12.0/doc/html/install-quick.html ganeti-2.12.3/doc/html/install-quick.html
diff -Nru ganeti-2.12.0/doc/html/locking.html ganeti-2.12.3/doc/html/locking.html
diff -Nru ganeti-2.12.0/doc/html/manpages.html ganeti-2.12.3/doc/html/manpages.html
diff -Nru ganeti-2.12.0/doc/html/monitoring-query-format.html ganeti-2.12.3/doc/html/monitoring-query-format.html
diff -Nru ganeti-2.12.0/doc/html/move-instance.html ganeti-2.12.3/doc/html/move-instance.html
diff -Nru ganeti-2.12.0/doc/html/news.html ganeti-2.12.3/doc/html/news.html
diff -Nru ganeti-2.12.0/doc/html/ovfconverter.html ganeti-2.12.3/doc/html/ovfconverter.html
diff -Nru ganeti-2.12.0/doc/html/rapi.html ganeti-2.12.3/doc/html/rapi.html
diff -Nru ganeti-2.12.0/doc/html/search.html ganeti-2.12.3/doc/html/search.html
diff -Nru ganeti-2.12.0/doc/html/searchindex.js ganeti-2.12.3/doc/html/searchindex.js
diff -Nru ganeti-2.12.0/doc/html/security.html ganeti-2.12.3/doc/html/security.html
diff -Nru ganeti-2.12.0/doc/html/_sources/admin.txt ganeti-2.12.3/doc/html/_sources/admin.txt
diff -Nru ganeti-2.12.0/doc/html/_sources/design-daemons.txt ganeti-2.12.3/doc/html/_sources/design-daemons.txt
diff -Nru ganeti-2.12.0/doc/html/_sources/design-file-based-storage.txt ganeti-2.12.3/doc/html/_sources/design-file-based-storage.txt
diff -Nru ganeti-2.12.0/doc/html/_sources/design-storagetypes.txt ganeti-2.12.3/doc/html/_sources/design-storagetypes.txt
diff -Nru ganeti-2.12.0/doc/html/_sources/install.txt ganeti-2.12.3/doc/html/_sources/install.txt
diff -Nru ganeti-2.12.0/doc/html/_sources/news.txt ganeti-2.12.3/doc/html/_sources/news.txt
diff -Nru ganeti-2.12.0/doc/html/upgrade.html ganeti-2.12.3/doc/html/upgrade.html
diff -Nru ganeti-2.12.0/doc/html/virtual-cluster.html ganeti-2.12.3/doc/html/virtual-cluster.html
diff -Nru ganeti-2.12.0/doc/html/walkthrough.html ganeti-2.12.3/doc/html/walkthrough.html
diff -Nru ganeti-2.12.0/doc/install.rst ganeti-2.12.3/doc/install.rst
diff -Nru ganeti-2.12.0/doc/news.rst ganeti-2.12.3/doc/news.rst
diff -Nru ganeti-2.12.0/lib/backend.py ganeti-2.12.3/lib/backend.py
--- ganeti-2.12.0/lib/backend.py	2014-10-09 14:57:28.000000000 +0300
+++ ganeti-2.12.3/lib/backend.py	2015-04-29 11:09:35.000000000 +0300
@@ -575,6 +575,7 @@
     logging.exception("Error while removing cluster secrets")
 
   utils.StopDaemon(constants.CONFD)
+  utils.StopDaemon(constants.MOND)
   utils.StopDaemon(constants.KVMD)
 
   # Raise a custom exception (handled in ganeti-noded)
diff -Nru ganeti-2.12.0/lib/bootstrap.py ganeti-2.12.3/lib/bootstrap.py
--- ganeti-2.12.0/lib/bootstrap.py	2014-10-09 14:57:28.000000000 +0300
+++ ganeti-2.12.3/lib/bootstrap.py	2015-04-29 11:09:35.000000000 +0300
@@ -262,10 +262,11 @@
                              " %s seconds" % _DAEMON_READY_TIMEOUT)
 
 
-def _WaitForSshDaemon(hostname, port, family):
+def _WaitForSshDaemon(hostname, port):
   """Wait for SSH daemon to become responsive.
 
   """
+  family = ssconf.SimpleStore().GetPrimaryIPFamily()
   hostip = netutils.GetHostname(name=hostname, family=family).ip
 
   def _CheckSshDaemon():
@@ -345,9 +346,7 @@
   if port is None:
     port = netutils.GetDaemonPort(constants.SSH)
 
-  family = ssconf.SimpleStore().GetPrimaryIPFamily()
-  srun = ssh.SshRunner(cluster_name,
-                       ipv6=(family == netutils.IP6Address.family))
+  srun = ssh.SshRunner(cluster_name)
   scmd = srun.BuildCmd(node, constants.SSH_LOGIN_USER,
                        utils.ShellQuoteArgs(
                            utils.ShellCombineCommands(all_cmds)),
@@ -369,7 +368,7 @@
     raise errors.OpExecError("Command '%s' failed: %s" %
                              (result.cmd, result.fail_reason))
 
-  _WaitForSshDaemon(node, port, family)
+  _WaitForSshDaemon(node, port)
 
 
 def _InitFileStorageDir(file_storage_dir):
@@ -1010,6 +1009,7 @@
   @param no_voting: force the operation without remote nodes agreement
                       (dangerous)
 
+  @returns: the pair of an exit code and warnings to display
   """
   sstore = ssconf.SimpleStore()
 
@@ -1050,6 +1050,7 @@
   # end checks
 
   rcode = 0
+  warnings = []
 
   logging.info("Setting master to %s, old master: %s", new_master, old_master)
 
@@ -1103,24 +1104,30 @@
 
     msg = result.fail_msg
     if msg:
-      logging.warning("Could not disable the master IP: %s", msg)
+      warning = "Could not disable the master IP: %s" % (msg,)
+      logging.warning("%s", warning)
+      warnings.append(warning)
 
     result = runner.call_node_stop_master(old_master)
     msg = result.fail_msg
     if msg:
-      logging.error("Could not disable the master role on the old master"
-                    " %s, please disable manually: %s", old_master, msg)
+      warning = ("Could not disable the master role on the old master"
+                 " %s, please disable manually: %s" % (old_master, msg))
+      logging.error("%s", warning)
+      warnings.append(warning)
   except errors.ConfigurationError, err:
     logging.error("Error while trying to set the new master: %s",
                   str(err))
-    return 1
+    return 1, warnings
   finally:
     # stop WConfd again:
     result = utils.RunCmd([pathutils.DAEMON_UTIL, "stop", constants.WCONFD])
     if result.failed:
-      logging.error("Could not stop the configuration daemon,"
-                    " command %s had exitcode %s and error %s",
-                    result.cmd, result.exit_code, result.output)
+      warning = ("Could not stop the configuration daemon,"
+                 " command %s had exitcode %s and error %s"
+                 % (result.cmd, result.exit_code, result.output))
+      logging.error("%s", warning)
+      rcode = 1
 
   logging.info("Checking master IP non-reachability...")
 
@@ -1128,16 +1135,19 @@
   total_timeout = 30
 
   # Here we have a phase where no master should be running
-  def _check_ip():
-    if netutils.TcpPing(master_ip, constants.DEFAULT_NODED_PORT):
+  def _check_ip(expected):
+    if netutils.TcpPing(master_ip, constants.DEFAULT_NODED_PORT) != expected:
       raise utils.RetryAgain()
 
   try:
-    utils.Retry(_check_ip, (1, 1.5, 5), total_timeout)
+    utils.Retry(_check_ip, (1, 1.5, 5), total_timeout, args=[False])
   except utils.RetryTimeout:
-    logging.warning("The master IP is still reachable after %s seconds,"
-                    " continuing but activating the master on the current"
-                    " node will probably fail", total_timeout)
+    warning = ("The master IP is still reachable after %s seconds,"
+               " continuing but activating the master IP on the current"
+               " node will probably fail" % total_timeout)
+    logging.warning("%s", warning)
+    warnings.append(warning)
+    rcode = 1
 
   if jstore.CheckDrainFlag():
     logging.info("Undraining job queue")
@@ -1153,8 +1163,21 @@
                   " %s, please check: %s", new_master, msg)
     rcode = 1
 
+  # Finally verify that the new master managed to set up the master IP
+  # and warn if it didn't.
+  try:
+    utils.Retry(_check_ip, (1, 1.5, 5), total_timeout, args=[True])
+  except utils.RetryTimeout:
+    warning = ("The master IP did not come up within %s seconds; the"
+               " cluster should still be working and reachable via %s,"
+               " but not via the master IP address"
+               % (total_timeout, new_master))
+    logging.warning("%s", warning)
+    warnings.append(warning)
+    rcode = 1
+
   logging.info("Master failed over from %s to %s", old_master, new_master)
-  return rcode
+  return rcode, warnings
 
 
 def GetMaster():
@@ -1183,10 +1206,6 @@
   knows, whereas the number of entries in the list could be different
   (if some nodes vote for another master).
 
-  We remove ourselves from the list since we know that (bugs aside)
-  since we use the same source for configuration information for both
-  backend and boostrap, we'll always vote for ourselves.
-
   @type node_names: list
   @param node_names: the list of nodes to query for master info; the current
       node will be removed if it is in the list
@@ -1194,13 +1213,8 @@
   @return: list of (node, votes)
 
   """
-  myself = netutils.Hostname.GetSysName()
-  try:
-    node_names.remove(myself)
-  except ValueError:
-    pass
   if not node_names:
-    # no nodes left (eventually after removing myself)
+    # no nodes
     return []
   results = rpc.BootstrapRunner().call_master_node_name(node_names)
   if not isinstance(results, dict):
diff -Nru ganeti-2.12.0/lib/client/gnt_cluster.py ganeti-2.12.3/lib/client/gnt_cluster.py
--- ganeti-2.12.0/lib/client/gnt_cluster.py	2014-10-09 14:57:28.000000000 +0300
+++ ganeti-2.12.3/lib/client/gnt_cluster.py	2015-04-29 11:09:35.000000000 +0300
@@ -858,7 +858,10 @@
     if not AskUser(usertext):
       return 1
 
-  return bootstrap.MasterFailover(no_voting=opts.no_voting)
+  rvlaue, msgs = bootstrap.MasterFailover(no_voting=opts.no_voting)
+  for msg in msgs:
+    ToStderr(msg)
+  return rvlaue
 
 
 def MasterPing(opts, args):
@@ -2082,7 +2085,7 @@
   if not _RunCommandAndReport([pathutils.POST_UPGRADE, oldversion]):
     returnvalue = 1
 
-  ToStdout("Unpasuing the watcher.")
+  ToStdout("Unpausing the watcher.")
   if not _RunCommandAndReport(["gnt-cluster", "watcher", "continue"]):
     returnvalue = 1
 
diff -Nru ganeti-2.12.0/lib/client/gnt_instance.py ganeti-2.12.3/lib/client/gnt_instance.py
--- ganeti-2.12.0/lib/client/gnt_instance.py	2014-10-09 14:57:28.000000000 +0300
+++ ganeti-2.12.3/lib/client/gnt_instance.py	2015-04-29 11:09:35.000000000 +0300
@@ -608,7 +608,9 @@
   op = opcodes.OpInstanceGrowDisk(instance_name=instance,
                                   disk=disk, amount=amount,
                                   wait_for_sync=opts.wait_for_sync,
-                                  absolute=opts.absolute)
+                                  absolute=opts.absolute,
+                                  ignore_ipolicy=opts.ignore_ipolicy
+                                  )
   SubmitOrSend(op, opts)
   return 0
 
@@ -864,14 +866,17 @@
   cl = GetClient()
   try:
     cluster_name = cl.QueryConfigValues(["cluster_name"])[0]
-    ((console_data, oper_state), ) = \
-      cl.QueryInstances([instance_name], ["console", "oper_state"], False)
+    idata = cl.QueryInstances([instance_name], ["console", "oper_state"], False)
+    if not idata:
+      raise errors.OpPrereqError("Instance '%s' does not exist" % instance_name,
+                                 errors.ECODE_NOENT)
   finally:
     # Ensure client connection is closed while external commands are run
     cl.Close()
 
   del cl
 
+  ((console_data, oper_state), ) = idata
   if not console_data:
     if oper_state:
       # Instance is running
@@ -1638,7 +1643,8 @@
     GrowDisk,
     [ArgInstance(min=1, max=1), ArgUnknown(min=1, max=1),
      ArgUnknown(min=1, max=1)],
-    SUBMIT_OPTS + [NWSYNC_OPT, DRY_RUN_OPT, PRIORITY_OPT, ABSOLUTE_OPT],
+    SUBMIT_OPTS +
+    [NWSYNC_OPT, DRY_RUN_OPT, PRIORITY_OPT, ABSOLUTE_OPT, IGNORE_IPOLICY_OPT],
     "<instance> <disk> <size>", "Grow an instance's disk"),
   "change-group": (
     ChangeGroup, ARGS_ONE_INSTANCE,
diff -Nru ganeti-2.12.0/lib/client/gnt_network.py ganeti-2.12.3/lib/client/gnt_network.py
--- ganeti-2.12.0/lib/client/gnt_network.py	2014-10-07 17:45:37.000000000 +0300
+++ ganeti-2.12.3/lib/client/gnt_network.py	2015-04-28 11:13:10.000000000 +0300
@@ -241,9 +241,11 @@
     ToStdout("  Free: %d (%.2f%%)", free_count,
              100 * float(free_count) / float(size))
     ToStdout("  Usage map:")
+    lenmapping = len(mapping)
     idx = 0
-    for line in textwrap.wrap(mapping, width=64):
-      ToStdout("     %s %s %d", str(idx).rjust(3), line.ljust(64), idx + 63)
+    while idx < lenmapping:
+      line = mapping[idx: idx + 64]
+      ToStdout("     %s %s %d", str(idx).rjust(4), line.ljust(64), idx + 63)
       idx += 64
     ToStdout("         (X) used    (.) free")
 
diff -Nru ganeti-2.12.0/lib/cmdlib/cluster.py ganeti-2.12.3/lib/cmdlib/cluster.py
--- ganeti-2.12.0/lib/cmdlib/cluster.py	2014-10-09 14:57:28.000000000 +0300
+++ ganeti-2.12.3/lib/cmdlib/cluster.py	2015-04-29 11:09:35.000000000 +0300
@@ -110,33 +110,115 @@
   takes care of the renewal of the client SSL certificates.
 
   """
+  _MAX_NUM_RETRIES = 3
+
   def Exec(self, feedback_fn):
     master_uuid = self.cfg.GetMasterNode()
+    cluster = self.cfg.GetClusterInfo()
+
+    logging.debug("Renewing the master's SSL node certificate."
+                  " Master's UUID: %s.", master_uuid)
 
     server_digest = utils.GetCertificateDigest(
       cert_filename=pathutils.NODED_CERT_FILE)
+    logging.debug("SSL digest of the node certificate: %s.", server_digest)
     self.cfg.AddNodeToCandidateCerts("%s-SERVER" % master_uuid,
                                      server_digest)
+    logging.debug("Added master's digest as *-SERVER entry to configuration."
+                  " Current list of candidate certificates: %s.",
+                  str(cluster.candidate_certs))
     try:
       old_master_digest = utils.GetCertificateDigest(
         cert_filename=pathutils.NODED_CLIENT_CERT_FILE)
+      logging.debug("SSL digest of old master's SSL node certificate: %s.",
+                    old_master_digest)
       self.cfg.AddNodeToCandidateCerts("%s-OLDMASTER" % master_uuid,
                                        old_master_digest)
+      logging.debug("Added old master's node certificate digest to config"
+                    " as *-OLDMASTER. Current list of candidate certificates:"
+                    " %s.", str(cluster.candidate_certs))
     except IOError:
-      logging.info("No old certificate available.")
+      logging.info("No old master certificate available.")
 
-    new_master_digest = _UpdateMasterClientCert(self, self.cfg, master_uuid)
+    last_exception = None
+    for i in range(self._MAX_NUM_RETRIES):
+      try:
+        # Technically it should not be necessary to set the cert
+        # paths. However, due to a bug in the mock library, we
+        # have to do this to be able to test the function properly.
+        _UpdateMasterClientCert(
+            self, self.cfg, master_uuid,
+            client_cert=pathutils.NODED_CLIENT_CERT_FILE,
+            client_cert_tmp=pathutils.NODED_CLIENT_CERT_FILE_TMP)
+        logging.debug("Successfully renewed the master's node certificate.")
+        break
+      except errors.OpExecError as e:
+        logging.error("Renewing the master's SSL node certificate failed"
+                      " at attempt no. %s with error '%s'", str(i), e)
+        last_exception = e
+    else:
+      if last_exception:
+        feedback_fn("Could not renew the master's client SSL certificate."
+                    " Cleaning up. Error: %s." % last_exception)
+      # Cleaning up temporary certificates
+      self.cfg.RemoveNodeFromCandidateCerts("%s-SERVER" % master_uuid)
+      self.cfg.RemoveNodeFromCandidateCerts("%s-OLDMASTER" % master_uuid)
+      logging.debug("Cleaned up *-SERVER and *-OLDMASTER certificate from"
+                    " master candidate cert list. Current state of the"
+                    " list: %s.", str(cluster.candidate_certs))
+      try:
+        utils.RemoveFile(pathutils.NODED_CLIENT_CERT_FILE_TMP)
+      except IOError as e:
+        logging.debug("Could not clean up temporary node certificate of the"
+                      " master node. (Possibly because it was already removed"
+                      " properly.) Error: %s.", e)
+      return
 
-    self.cfg.AddNodeToCandidateCerts(master_uuid, new_master_digest)
+    node_errors = {}
     nodes = self.cfg.GetAllNodesInfo()
+    logging.debug("Renewing non-master nodes' node certificates.")
     for (node_uuid, node_info) in nodes.items():
+      if node_info.offline:
+        feedback_fn("* Skipping offline node %s" % node_info.name)
+        logging.debug("Skipping offline node %s (UUID: %s).",
+                      node_info.name, node_uuid)
+        continue
       if node_uuid != master_uuid:
-        new_digest = CreateNewClientCert(self, node_uuid)
-        if node_info.master_candidate:
-          self.cfg.AddNodeToCandidateCerts(node_uuid, new_digest)
+        logging.debug("Renewing node certificate of node '%s'.", node_uuid)
+        last_exception = None
+        for i in range(self._MAX_NUM_RETRIES):
+          try:
+            new_digest = CreateNewClientCert(self, node_uuid)
+            if node_info.master_candidate:
+              self.cfg.AddNodeToCandidateCerts(node_uuid,
+                                               new_digest)
+              logging.debug("Added the node's certificate to candidate"
+                            " certificate list. Current list: %s.",
+                            str(cluster.candidate_certs))
+            break
+          except errors.OpExecError as e:
+            last_exception = e
+            logging.error("Could not renew a non-master node's SSL node"
+                          " certificate at attempt no. %s. The node's UUID"
+                          " is %s, and the error was: %s.",
+                          str(i), node_uuid, e)
+        else:
+          if last_exception:
+            node_errors[node_uuid] = last_exception
+
+    if node_errors:
+      msg = ("Some nodes' SSL client certificates could not be renewed."
+             " Please make sure those nodes are reachable and rerun"
+             " the operation. The affected nodes and their errors are:\n")
+      for uuid, e in node_errors.items():
+        msg += "Node %s: %s\n" % (uuid, e)
+      feedback_fn(msg)
+
     self.cfg.RemoveNodeFromCandidateCerts("%s-SERVER" % master_uuid)
     self.cfg.RemoveNodeFromCandidateCerts("%s-OLDMASTER" % master_uuid)
-    # Trigger another update of the config now with the new master cert
+    logging.debug("Cleaned up *-SERVER and *-OLDMASTER certificate from"
+                  " master candidate cert list. Current state of the"
+                  " list: %s.", cluster.candidate_certs)
 
 
 class LUClusterActivateMasterIp(NoHooksLU):
@@ -199,6 +281,11 @@
   HPATH = "cluster-destroy"
   HTYPE = constants.HTYPE_CLUSTER
 
+  # Read by the job queue to detect when the cluster is gone and job files will
+  # never be available.
+  # FIXME: This variable should be removed together with the Python job queue.
+  clusterHasBeenDestroyed = False
+
   def BuildHooksEnv(self):
     """Build hooks env.
 
@@ -247,6 +334,12 @@
     result = self.rpc.call_node_deactivate_master_ip(master_params.uuid,
                                                      master_params, ems)
     result.Warn("Error disabling the master IP address", self.LogWarning)
+
+    self.wconfd.Client().PrepareClusterDestruction(self.wconfdcontext)
+
+    # signal to the job queue that the cluster is gone
+    LUClusterDestroy.clusterHasBeenDestroyed = True
+
     return master_params.uuid
 
 
@@ -3092,7 +3185,7 @@
     if test:
       nimg.hyp_fail = True
     else:
-      nimg.instances = [inst.uuid for (_, inst) in
+      nimg.instances = [uuid for (uuid, _) in
                         self.cfg.GetMultiInstanceInfoByName(idata)]
 
   def _UpdateNodeInfo(self, ninfo, nresult, nimg, vg_name):
diff -Nru ganeti-2.12.0/lib/cmdlib/common.py ganeti-2.12.3/lib/cmdlib/common.py
--- ganeti-2.12.0/lib/cmdlib/common.py	2014-10-09 14:57:28.000000000 +0300
+++ ganeti-2.12.3/lib/cmdlib/common.py	2015-04-29 11:09:35.000000000 +0300
@@ -602,6 +602,33 @@
   return ret + min_errs
 
 
+def ComputeIPolicyDiskSizesViolation(ipolicy, disk_sizes,
+                                     disk_template,
+                                     _compute_fn=_ComputeMinMaxSpec):
+  """Verifies ipolicy against provided disk sizes.
+
+  No other specs except the disk sizes, the number of disks and the disk
+  template are checked.
+
+  @type ipolicy: dict
+  @param ipolicy: The ipolicy
+  @type disk_sizes: list of ints
+  @param disk_sizes: Disk sizes of used disk (len must match C{disk_count})
+  @type disk_template: string
+  @param disk_template: The disk template of the instance
+  @param _compute_fn: The compute function (unittest only)
+  @return: A list of violations, or an empty list of no violations are found
+
+  """
+  return ComputeIPolicySpecViolation(ipolicy,
+                                     # mem_size, cpu_count, disk_count
+                                     None, None, len(disk_sizes),
+                                     None, disk_sizes, # nic_count, disk_sizes
+                                     None, # spindle_use
+                                     disk_template,
+                                     _compute_fn=_compute_fn)
+
+
 def ComputeIPolicyInstanceViolation(ipolicy, instance, cfg,
                                     _compute_fn=ComputeIPolicySpecViolation):
   """Compute if instance meets the specs of ipolicy.
diff -Nru ganeti-2.12.0/lib/cmdlib/instance.py ganeti-2.12.3/lib/cmdlib/instance.py
--- ganeti-2.12.0/lib/cmdlib/instance.py	2014-10-09 14:57:28.000000000 +0300
+++ ganeti-2.12.3/lib/cmdlib/instance.py	2015-04-29 11:09:35.000000000 +0300
@@ -485,7 +485,7 @@
     # set default file_driver if unset and required
     if (not self.op.file_driver and
         self.op.disk_template in constants.DTS_FILEBASED):
-      self.op.file_driver = constants.FD_LOOP
+      self.op.file_driver = constants.FD_DEFAULT
 
     ### Node/iallocator related checks
     CheckIAllocatorOrNode(self, "iallocator", "pnode")
@@ -3679,11 +3679,17 @@
 
     """
     secondary_nodes = self.cfg.GetInstanceSecondaryNodes(self.instance.uuid)
-    assert len(secondary_nodes) == 1
+
     assert self.instance.disk_template == constants.DT_DRBD8
+    assert len(secondary_nodes) == 1 or not self.instance.disks
 
     pnode_uuid = self.instance.primary_node
-    snode_uuid = secondary_nodes[0]
+
+    # it will not be possible to calculate the snode_uuid later
+    snode_uuid = None
+    if secondary_nodes:
+      snode_uuid = secondary_nodes[0]
+
     feedback_fn("Converting template to plain")
 
     disks = self.cfg.GetInstanceDisks(self.instance.uuid)
diff -Nru ganeti-2.12.0/lib/cmdlib/instance_storage.py ganeti-2.12.3/lib/cmdlib/instance_storage.py
--- ganeti-2.12.0/lib/cmdlib/instance_storage.py	2014-10-09 14:57:28.000000000 +0300
+++ ganeti-2.12.3/lib/cmdlib/instance_storage.py	2015-04-29 11:09:35.000000000 +0300
@@ -47,6 +47,7 @@
 from ganeti.cmdlib.base import LogicalUnit, NoHooksLU, Tasklet
 from ganeti.cmdlib.common import INSTANCE_DOWN, INSTANCE_NOT_RUNNING, \
   AnnotateDiskParams, CheckIAllocatorOrNode, ExpandNodeUuidAndName, \
+  ComputeIPolicyDiskSizesViolation, \
   CheckNodeOnline, CheckInstanceNodeGroups, CheckInstanceState, \
   IsExclusiveStorageEnabledNode, FindFaultyInstanceDisks, GetWantedNodes, \
   CheckDiskTemplateEnabled
@@ -1558,6 +1559,8 @@
 
     self._CheckDiskSpace(node_uuids, self.disk.ComputeGrowth(self.delta))
 
+    self._CheckIPolicy(self.target)
+
   def _CheckDiskSpace(self, node_uuids, req_vgspace):
     template = self.instance.disk_template
     if (template not in (constants.DTS_NO_FREE_SPACE_CHECK) and
@@ -1569,6 +1572,29 @@
       # the dry run performed in Exec() instead.
       CheckNodesFreeDiskPerVG(self, node_uuids, req_vgspace)
 
+  def _CheckIPolicy(self, target_size):
+    cluster = self.cfg.GetClusterInfo()
+    group_uuid = list(self.cfg.GetInstanceNodeGroups(self.op.instance_uuid,
+                                                     primary_only=True))[0]
+    group_info = self.cfg.GetNodeGroup(group_uuid)
+    ipolicy = ganeti.masterd.instance.CalculateGroupIPolicy(cluster,
+                                                            group_info)
+
+    disk_sizes = [disk.size if disk.uuid != self.disk.uuid else target_size
+                  for disk in self.cfg.GetInstanceDisks(self.op.instance_uuid)]
+
+    # The ipolicy checker below ignores None, so we only give it the disk size
+    res = ComputeIPolicyDiskSizesViolation(ipolicy, disk_sizes,
+                                           self.instance.disk_template)
+    if res:
+      msg = ("Growing disk %s violates policy: %s" %
+             (self.op.disk,
+              utils.CommaJoin(res)))
+      if self.op.ignore_ipolicy:
+        self.LogWarning(msg)
+      else:
+        raise errors.OpPrereqError(msg, errors.ECODE_INVAL)
+
   def Exec(self, feedback_fn):
     """Execute disk grow.
 
diff -Nru ganeti-2.12.0/lib/cmdlib/node.py ganeti-2.12.3/lib/cmdlib/node.py
--- ganeti-2.12.0/lib/cmdlib/node.py	2014-10-09 14:57:28.000000000 +0300
+++ ganeti-2.12.3/lib/cmdlib/node.py	2015-04-29 11:09:35.000000000 +0300
@@ -647,6 +647,9 @@
 
     # If we're no longer master capable, we'll demote ourselves from MC
     if self.op.master_capable is False and node.master_candidate:
+      if self.op.node_uuid == self.cfg.GetMasterNode():
+        raise errors.OpPrereqError("Master must remain master capable",
+                                   errors.ECODE_STATE)
       self.LogInfo("Demoting from master candidate")
       self.op.master_candidate = False
 
diff -Nru ganeti-2.12.0/lib/config.py ganeti-2.12.3/lib/config.py
--- ganeti-2.12.0/lib/config.py	2014-10-09 14:57:28.000000000 +0300
+++ ganeti-2.12.3/lib/config.py	2015-04-29 11:09:35.000000000 +0300
@@ -306,6 +306,9 @@
   def _ConfigData(self):
     return self._config_data
 
+  def OutDate(self):
+    self._config_data = None
+
   def _SetConfigData(self, cfg):
     self._config_data = cfg
 
@@ -1269,7 +1272,7 @@
       self._ConfigData().cluster.highest_used_port = port
     return port
 
-  @_ConfigSync()
+  @_ConfigSync(shared=1)
   def ComputeDRBDMap(self):
     """Compute the used DRBD minor/nodes.
 
@@ -2109,7 +2112,11 @@
     result = []
     for name in inst_names:
       instance = self._UnlockedGetInstanceInfoByName(name)
-      result.append((instance.uuid, instance))
+      if instance:
+        result.append((instance.uuid, instance))
+      else:
+        raise errors.ConfigurationError("Instance data of instance '%s'"
+                                        " not found." % name)
     return result
 
   @_ConfigSync(shared=1)
@@ -2796,18 +2803,27 @@
       # Upgrade configuration if needed
       self._UpgradeConfig(saveafter=True)
     else:
-      # poll until we acquire the lock
-      while True:
-        dict_data = \
-          self._wconfd.LockConfig(self._GetWConfdContext(), bool(shared))
-        logging.debug("Received config from WConfd.LockConfig [shared=%s]",
-                      bool(shared))
-        if dict_data is not None:
-          break
-        time.sleep(random.random())
+      if shared:
+        if self._config_data is None:
+          logging.debug("Requesting config, as I have no up-to-date copy")
+          dict_data = self._wconfd.ReadConfig()
+        else:
+          logging.debug("My config copy is up to date.")
+          dict_data = None
+      else:
+        # poll until we acquire the lock
+        while True:
+          dict_data = \
+              self._wconfd.LockConfig(self._GetWConfdContext(), bool(shared))
+          logging.debug("Received config from WConfd.LockConfig [shared=%s]",
+                        bool(shared))
+          if dict_data is not None:
+            break
+          time.sleep(random.random())
 
       try:
-        self._SetConfigData(objects.ConfigData.FromDict(dict_data))
+        if dict_data is not None:
+          self._SetConfigData(objects.ConfigData.FromDict(dict_data))
       except Exception, err:
         raise errors.ConfigurationError(err)
 
diff -Nru ganeti-2.12.0/lib/hypervisor/hv_base.py ganeti-2.12.3/lib/hypervisor/hv_base.py
--- ganeti-2.12.0/lib/hypervisor/hv_base.py	2014-10-09 14:57:28.000000000 +0300
+++ ganeti-2.12.3/lib/hypervisor/hv_base.py	2015-04-29 11:09:35.000000000 +0300
@@ -183,20 +183,20 @@
            NIC is not used in instance communication
 
   """
-  result = utils.RunCmd(["ip", "tuntap", "list"])
+  result = utils.RunCmd(["ip", "link", "show"])
 
   if result.failed:
     raise errors.HypervisorError("Failed to list TUN/TAP interfaces")
 
   idxs = set()
 
-  for line in result.output.splitlines():
-    parts = line.split(": ", 1)
+  for line in result.output.splitlines()[0::2]:
+    parts = line.split(": ")
 
     if len(parts) < 2:
       raise errors.HypervisorError("Failed to parse TUN/TAP interfaces")
 
-    r = re.match(r"gnt\.com\.([0-9]+)", parts[0])
+    r = re.match(r"gnt\.com\.([0-9]+)", parts[1])
 
     if r is not None:
       idxs.add(int(r.group(1)))
diff -Nru ganeti-2.12.0/lib/hypervisor/hv_xen.py ganeti-2.12.3/lib/hypervisor/hv_xen.py
--- ganeti-2.12.0/lib/hypervisor/hv_xen.py	2014-10-09 14:57:28.000000000 +0300
+++ ganeti-2.12.3/lib/hypervisor/hv_xen.py	2015-04-29 11:09:35.000000000 +0300
@@ -154,7 +154,7 @@
   return result
 
 
-def _GetAllInstanceList(fn, include_node, _timeout=5):
+def _GetAllInstanceList(fn, include_node, delays, timeout):
   """Return the list of instances including running and shutdown.
 
   See L{_RunInstanceList} and L{_ParseInstanceList} for parameter details.
@@ -162,7 +162,7 @@
   """
   instance_list_errors = []
   try:
-    lines = utils.Retry(_RunInstanceList, (0.3, 1.5, 1.0), _timeout,
+    lines = utils.Retry(_RunInstanceList, delays, timeout,
                         args=(fn, instance_list_errors))
   except utils.RetryTimeout:
     if instance_list_errors:
@@ -182,7 +182,7 @@
   """Determine whether an instance is running.
 
   An instance is running if it is in the following Xen states:
-  running, blocked, or paused.
+  running, blocked, paused, or dying (about to be destroyed / shutdown).
 
   For some strange reason, Xen once printed 'rb----' which does not make any
   sense because an instance cannot be both running and blocked.  Fortunately,
@@ -193,6 +193,9 @@
   to be scheduled to run.
   http://old-list-archives.xenproject.org/xen-users/2007-06/msg00849.html
 
+  A dying instance is about to be removed, but it is still consuming resources,
+  and counts as running.
+
   @type instance_info: string
   @param instance_info: Information about instance, as supplied by Xen.
   @rtype: bool
@@ -202,15 +205,51 @@
   return instance_info == "r-----" \
       or instance_info == "rb----" \
       or instance_info == "-b----" \
-      or instance_info == "--p---" \
+      or instance_info == "-----d" \
       or instance_info == "------"
 
 
 def _IsInstanceShutdown(instance_info):
-  return instance_info == "---s--"
+  """Determine whether the instance is shutdown.
+
+  An instance is shutdown when a user shuts it down from within, and we do not
+  remove domains to be able to detect that.
+
+  The dying state has been added as a precaution, as Xen's status reporting is
+  weird.
+
+  """
+  return instance_info == "---s--" \
+      or instance_info == "---s-d"
+
+
+def _IgnorePaused(instance_info):
+  """Removes information about whether a Xen state is paused from the state.
+
+  As it turns out, an instance can be reported as paused in almost any
+  condition. Paused instances can be paused, running instances can be paused for
+  scheduling, and any other condition can appear to be paused as a result of
+  races or improbable conditions in Xen's status reporting.
+  As we do not use Xen's pause commands in any way at the time, we can simply
+  ignore the paused field and save ourselves a lot of trouble.
+
+  Should we ever use the pause commands, several samples would be needed before
+  we could confirm the domain as paused.
+
+  """
+  return instance_info.replace('p', '-')
 
 
 def _XenToHypervisorInstanceState(instance_info):
+  """Maps Xen states to hypervisor states.
+
+  @type instance_info: string
+  @param instance_info: Information about instance, as supplied by Xen.
+  @rtype: L{hv_base.HvInstanceState}
+
+  """
+  instance_info = _IgnorePaused(instance_info)
+
   if _IsInstanceRunning(instance_info):
     return hv_base.HvInstanceState.RUNNING
   elif _IsInstanceShutdown(instance_info):
@@ -221,23 +260,23 @@
                                    instance_info)
 
 
-def _GetRunningInstanceList(fn, include_node, _timeout=5):
+def _GetRunningInstanceList(fn, include_node, delays, timeout):
   """Return the list of running instances.
 
   See L{_GetAllInstanceList} for parameter details.
 
   """
-  instances = _GetAllInstanceList(fn, include_node, _timeout)
+  instances = _GetAllInstanceList(fn, include_node, delays, timeout)
   return [i for i in instances if hv_base.HvInstanceState.IsRunning(i[4])]
 
 
-def _GetShutdownInstanceList(fn, include_node, _timeout=5):
+def _GetShutdownInstanceList(fn, include_node, delays, timeout):
   """Return the list of shutdown instances.
 
   See L{_GetAllInstanceList} for parameter details.
 
   """
-  instances = _GetAllInstanceList(fn, include_node, _timeout)
+  instances = _GetAllInstanceList(fn, include_node, delays, timeout)
   return [i for i in instances if hv_base.HvInstanceState.IsShutdown(i[4])]
 
 
@@ -424,6 +463,9 @@
   _NICS_DIR = _ROOT_DIR + "/nic" # contains NICs' info
   _DIRS = [_ROOT_DIR, _NICS_DIR]
 
+  _INSTANCE_LIST_DELAYS = (0.3, 1.5, 1.0)
+  _INSTANCE_LIST_TIMEOUT = 5
+
   ANCILLARY_FILES = [
     XEND_CONFIG_FILE,
     XL_CONFIG_FILE,
@@ -588,29 +630,32 @@
           (nic_type, constants.HT_HVM_VIF_IOEMU)
 
     for idx, nic in enumerate(instance.nics):
-      nic_str = "mac=%s%s" % (nic.mac, nic_type_str)
-
-      ip = getattr(nic, "ip", None)
-      if ip is not None:
-        nic_str += ", ip=%s" % ip
-
-      if nic.nicparams[constants.NIC_MODE] == constants.NIC_MODE_BRIDGED:
-        nic_str += ", bridge=%s" % nic.nicparams[constants.NIC_LINK]
-      elif nic.nicparams[constants.NIC_MODE] == constants.NIC_MODE_OVS:
-        nic_str += ", bridge=%s" % nic.nicparams[constants.NIC_LINK]
-        if nic.nicparams[constants.NIC_VLAN]:
-          nic_str += "%s" % nic.nicparams[constants.NIC_VLAN]
+      nic_args = {}
+      nic_args["mac"] = "%s%s" % (nic.mac, nic_type_str)
 
       if nic.name and \
             nic.name.startswith(constants.INSTANCE_COMMUNICATION_NIC_PREFIX):
         tap = hv_base.GenerateTapName()
-        nic_str += ", vifname=%s" % tap
+        nic_args["vifname"] = tap
+        nic_args["script"] = pathutils.XEN_VIF_METAD_SETUP
         nic.name = tap
+      else:
+        ip = getattr(nic, "ip", None)
+        if ip is not None:
+          nic_args["ip"] = ip
+
+        if nic.nicparams[constants.NIC_MODE] == constants.NIC_MODE_BRIDGED:
+          nic_args["bridge"] = nic.nicparams[constants.NIC_LINK]
+        elif nic.nicparams[constants.NIC_MODE] == constants.NIC_MODE_OVS:
+          nic_args["bridge"] = nic.nicparams[constants.NIC_LINK]
+          if nic.nicparams[constants.NIC_VLAN]:
+            nic_args["bridge"] += nic.nicparams[constants.NIC_VLAN]
 
-      if hvp[constants.HV_VIF_SCRIPT]:
-        nic_str += ", script=%s" % hvp[constants.HV_VIF_SCRIPT]
+        if hvp[constants.HV_VIF_SCRIPT]:
+          nic_args["script"] = hvp[constants.HV_VIF_SCRIPT]
 
-      vif_data.append("'%s'" % nic_str)
+      nic_str = ", ".join(["%s=%s" % p for p in nic_args.items()])
+      vif_data.append("'%s'" % (nic_str, ))
       self._WriteNICInfoFile(instance, idx, nic)
 
     config.write("vif = [%s]\n" % ",".join(vif_data))
@@ -674,7 +719,8 @@
 
     """
     return _GetAllInstanceList(lambda: self._RunXen(["list"], hvparams),
-                               include_node)
+                               include_node, delays=self._INSTANCE_LIST_DELAYS,
+                               timeout=self._INSTANCE_LIST_TIMEOUT)
 
   def ListInstances(self, hvparams=None):
     """Get the list of running instances.
@@ -688,7 +734,8 @@
     """
     instance_list = _GetRunningInstanceList(
       lambda: self._RunXen(["list"], hvparams),
-      False)
+      False, delays=self._INSTANCE_LIST_DELAYS,
+      timeout=self._INSTANCE_LIST_TIMEOUT)
     return [info[0] for info in instance_list]
 
   def GetInstanceInfo(self, instance_name, hvparams=None):
diff -Nru ganeti-2.12.0/lib/jqueue/__init__.py ganeti-2.12.3/lib/jqueue/__init__.py
--- ganeti-2.12.0/lib/jqueue/__init__.py	2014-10-09 14:57:28.000000000 +0300
+++ ganeti-2.12.3/lib/jqueue/__init__.py	2015-04-29 11:09:35.000000000 +0300
@@ -74,6 +74,7 @@
 from ganeti import qlang
 from ganeti import pathutils
 from ganeti import vcluster
+from ganeti.cmdlib import cluster
 
 
 JOBQUEUE_THREADS = 1
@@ -1396,6 +1397,7 @@
         data and other ganeti objects
 
     """
+    self.primary_jid = None
     self.context = context
     self._memcache = weakref.WeakValueDictionary()
     self._my_hostname = netutils.Hostname.GetSysName()
@@ -1442,6 +1444,12 @@
     Pick up a job that already is in the job queue and start/resume it.
 
     """
+    if self.primary_jid:
+      logging.warning("Job process asked to pick up %s, but already has %s",
+                      job_id, self.primary_jid)
+
+    self.primary_jid = int(job_id)
+
     job = self._LoadJobUnlocked(job_id)
 
     if job is None:
@@ -1779,6 +1787,16 @@
         break
 
     if not raw_data:
+      logging.debug("No data available for job %s", job_id)
+      if int(job_id) == self.primary_jid:
+        logging.warning("My own job file (%s) disappeared;"
+                        " this should only happy at cluster desctruction",
+                        job_id)
+        if mcpu.lusExecuting[0] == 0:
+          logging.warning("Not in execution; cleaning up myself due to missing"
+                          " job file")
+          logging.shutdown()
+          os._exit(1) # pylint: disable=W0212
       return None
 
     if writable is None:
@@ -1900,7 +1918,8 @@
     # Try to load from disk
     job = self.SafeLoadJobFromDisk(job_id, True, writable=False)
 
-    assert not job.writable, "Got writable job" # pylint: disable=E1101
+    if job:
+      assert not job.writable, "Got writable job" # pylint: disable=E1101
 
     if job:
       return job.CalcStatus()
@@ -1945,6 +1964,11 @@
     job = self.SafeLoadJobFromDisk(job_id, True, writable=False)
     if job is not None:
       return job.CalcStatus() in constants.JOBS_FINALIZED
+    elif cluster.LUClusterDestroy.clusterHasBeenDestroyed:
+      # FIXME: The above variable is a temporary workaround until the Python job
+      # queue is completely removed. When removing the job queue, also remove
+      # the variable from LUClusterDestroy.
+      return True
     else:
       return None
 
diff -Nru ganeti-2.12.0/lib/masterd/instance.py ganeti-2.12.3/lib/masterd/instance.py
--- ganeti-2.12.0/lib/masterd/instance.py	2014-10-09 14:57:28.000000000 +0300
+++ ganeti-2.12.3/lib/masterd/instance.py	2015-04-29 11:09:35.000000000 +0300
@@ -1277,14 +1277,22 @@
 
     assert len(dresults) == len(instance.disks)
 
-    self._feedback_fn("Finalizing export on %s" % dest_node.name)
-    result = self._lu.rpc.call_finalize_export(dest_node.uuid, instance,
-                                               self._snap_disks)
-    msg = result.fail_msg
-    fin_resu = not msg
-    if msg:
-      self._lu.LogWarning("Could not finalize export for instance %s"
-                          " on node %s: %s", instance.name, dest_node.name, msg)
+    # Finalize only if all the disks have been exported successfully
+    if all(dresults):
+      self._feedback_fn("Finalizing export on %s" % dest_node.name)
+      result = self._lu.rpc.call_finalize_export(dest_node.uuid, instance,
+                                                 self._snap_disks)
+      msg = result.fail_msg
+      fin_resu = not msg
+      if msg:
+        self._lu.LogWarning("Could not finalize export for instance %s"
+                            " on node %s: %s", instance.name, dest_node.name,
+                            msg)
+    else:
+      fin_resu = False
+      self._lu.LogWarning("Some disk exports have failed; there may be "
+                          "leftover data for instance %s on node %s",
+                          instance.name, dest_node.name)
 
     return (fin_resu, dresults)
 
diff -Nru ganeti-2.12.0/lib/mcpu.py ganeti-2.12.3/lib/mcpu.py
--- ganeti-2.12.0/lib/mcpu.py	2014-10-09 14:57:28.000000000 +0300
+++ ganeti-2.12.3/lib/mcpu.py	2015-04-29 11:09:35.000000000 +0300
@@ -57,6 +57,7 @@
 
 
 sighupReceived = [False]
+lusExecuting = [0]
 
 _OP_PREFIX = "Op"
 _LU_PREFIX = "LU"
@@ -412,6 +413,8 @@
     else:
       request = [[lock, "exclusive"] for lock in locks]
 
+    self.cfg.OutDate()
+
     if timeout is None:
       ## Note: once we are so desperate for locks to request them
       ## unconditionally, we no longer care about an original plan
@@ -485,6 +488,7 @@
 
     """
     write_count = self.cfg.write_count
+    lu.cfg.OutDate()
     lu.CheckPrereq()
 
     hm = self.BuildHooksManager(lu)
@@ -505,6 +509,7 @@
     else:
       submit_mj_fn = _FailingSubmitManyJobs
 
+    lusExecuting[0] += 1
     try:
       result = _ProcessResult(submit_mj_fn, lu.op, lu.Exec(self.Log))
       h_results = hm.RunPhase(constants.HOOKS_PHASE_POST)
@@ -512,6 +517,7 @@
                                 self.Log, result)
     finally:
       # FIXME: This needs locks if not lu_class.REQ_BGL
+      lusExecuting[0] -= 1
       if write_count != self.cfg.write_count:
         hm.RunConfigUpdate()
 
diff -Nru ganeti-2.12.0/lib/objects.py ganeti-2.12.3/lib/objects.py
--- ganeti-2.12.0/lib/objects.py	2014-10-09 14:57:28.000000000 +0300
+++ ganeti-2.12.3/lib/objects.py	2015-04-29 11:09:35.000000000 +0300
@@ -1753,6 +1753,12 @@
         raise errors.ConfigurationError(msg)
       self.ipolicy = FillIPolicy(constants.IPOLICY_DEFAULTS, self.ipolicy)
 
+    # hv_state_static added in 2.7
+    if self.hv_state_static is None:
+      self.hv_state_static = {}
+    if self.disk_state_static is None:
+      self.disk_state_static = {}
+
     if self.candidate_certs is None:
       self.candidate_certs = {}
 
diff -Nru ganeti-2.12.0/lib/pathutils.py ganeti-2.12.3/lib/pathutils.py
--- ganeti-2.12.0/lib/pathutils.py	2014-10-09 14:57:28.000000000 +0300
+++ ganeti-2.12.3/lib/pathutils.py	2015-04-29 11:09:35.000000000 +0300
@@ -69,6 +69,8 @@
 CFGUPGRADE = _constants.PKGLIBDIR + "/tools/cfgupgrade"
 POST_UPGRADE = _constants.PKGLIBDIR + "/tools/post-upgrade"
 ENSURE_DIRS = _constants.PKGLIBDIR + "/ensure-dirs"
+# Script to configure the metadata virtual network interface with Xen
+XEN_VIF_METAD_SETUP = _constants.PKGLIBDIR + "/vif-ganeti-metad"
 ETC_HOSTS = vcluster.ETC_HOSTS
 
 # Top-level paths
diff -Nru ganeti-2.12.0/lib/rpc/transport.py ganeti-2.12.3/lib/rpc/transport.py
--- ganeti-2.12.0/lib/rpc/transport.py	2014-10-10 11:10:35.000000000 +0300
+++ ganeti-2.12.3/lib/rpc/transport.py	2015-04-28 11:13:10.000000000 +0300
@@ -42,6 +42,8 @@
 import time
 
 from ganeti import constants
+import ganeti.errors
+from ganeti import ssconf
 from ganeti import utils
 from ganeti.rpc import errors
 
@@ -117,6 +119,15 @@
     except socket.error, err:
       error_code = err.args[0]
       if error_code in (errno.ENOENT, errno.ECONNREFUSED):
+        # Verify if we're acutally on the master node before trying
+        # again.
+        ss = ssconf.SimpleStore()
+        try:
+          master, myself = ssconf.GetMasterAndMyself(ss=ss)
+        except ganeti.errors.ConfigurationError:
+          raise errors.NoMasterError(address)
+        if master != myself:
+          raise errors.NoMasterError(address)
         raise utils.RetryAgain()
       elif error_code in (errno.EPERM, errno.EACCES):
         raise errors.PermissionError(address)
@@ -189,14 +200,15 @@
     return self.Recv()
 
   @staticmethod
-  def RetryOnNetworkError(fn, on_error, retries=5, wait_on_error=5):
+  def RetryOnNetworkError(fn, on_error, retries=15, wait_on_error=5):
     """Calls a given function, retrying if it fails on a network IO
     exception.
 
     This allows to re-establish a broken connection and retry an IO operation.
 
     The function receives one an integer argument stating the current retry
-    number, 0 being the first call, 1 being the retry.
+    number, 0 being the first call, 1 being the first retry, 2 the second,
+    and so on.
 
     If any exception occurs, on_error is invoked first with the exception given
     as an argument. Then, if the exception is a network exception, the function
@@ -206,14 +218,15 @@
     for try_no in range(0, retries):
       try:
         return fn(try_no)
-      except socket.error, ex:
+      except (socket.error, errors.ConnectionClosedError,
+              errors.TimeoutError) as ex:
         on_error(ex)
         # we retry on a network error, unless it's the last try
         if try_no == retries - 1:
           raise
         logging.error("Network error: %s, retring (retry attempt number %d)",
                       ex, try_no + 1)
-        time.sleep(wait_on_error)
+        time.sleep(wait_on_error * try_no)
       except Exception, ex:
         on_error(ex)
         raise
diff -Nru ganeti-2.12.0/lib/rpc_defs.py ganeti-2.12.3/lib/rpc_defs.py
--- ganeti-2.12.0/lib/rpc_defs.py	2014-10-09 14:57:28.000000000 +0300
+++ ganeti-2.12.3/lib/rpc_defs.py	2015-04-29 11:09:35.000000000 +0300
@@ -518,7 +518,7 @@
     ("ovs_name", None, "Name of the OpenvSwitch to create"),
     ("ovs_link", None, "Link of the OpenvSwitch to the outside"),
     ], None, None, "This will create and setup the OpenvSwitch"),
-  ("node_crypto_tokens", SINGLE, None, constants.RPC_TMO_NORMAL, [
+  ("node_crypto_tokens", SINGLE, None, constants.RPC_TMO_SLOW, [
     ("token_request", None,
      "List of tuples of requested crypto token types, actions"),
     ], None, None, "Handle crypto tokens of the node."),
diff -Nru ganeti-2.12.0/lib/serializer.py ganeti-2.12.3/lib/serializer.py
--- ganeti-2.12.0/lib/serializer.py	2014-10-07 17:45:37.000000000 +0300
+++ ganeti-2.12.3/lib/serializer.py	2015-04-28 11:13:10.000000000 +0300
@@ -253,10 +253,10 @@
     return self._item
 
   def __str__(self):
-    return "<%s>" % self._descr
+    return "<%s>" % (self._descr, )
 
   def __repr__(self):
-    return "Private(?, descr=%r)".format(self._descr)
+    return "Private(?, descr=%r)" % (self._descr, )
 
   # pylint: disable=W0212
   # If it doesn't access _item directly, the call will go through __getattr__
@@ -280,7 +280,7 @@
 
   def __call__(self, *args, **kwargs):
     return Private(self._item(*args, **kwargs),
-                   descr="%s()" % self._descr)
+                   descr="%s()" % (self._descr, ))
 
   # pylint: disable=R0201
   # While this could get away with being a function, it needs to be a method.
diff -Nru ganeti-2.12.0/lib/ssh.py ganeti-2.12.3/lib/ssh.py
--- ganeti-2.12.0/lib/ssh.py	2014-10-09 14:57:28.000000000 +0300
+++ ganeti-2.12.3/lib/ssh.py	2015-04-29 11:09:35.000000000 +0300
@@ -43,6 +43,7 @@
 from ganeti import pathutils
 from ganeti import vcluster
 from ganeti import compat
+from ganeti import ssconf
 
 
 def GetUserFiles(user, mkdir=False, dircheck=True, kind=constants.SSHK_DSA,
@@ -119,17 +120,16 @@
   """Wrapper for SSH commands.
 
   """
-  def __init__(self, cluster_name, ipv6=False):
+  def __init__(self, cluster_name):
     """Initializes this class.
 
     @type cluster_name: str
     @param cluster_name: name of the cluster
-    @type ipv6: bool
-    @param ipv6: If true, force ssh to use IPv6 addresses only
 
     """
     self.cluster_name = cluster_name
-    self.ipv6 = ipv6
+    family = ssconf.SimpleStore().GetPrimaryIPFamily()
+    self.ipv6 = (family == netutils.IP6Address.family)
 
   def _BuildSshOptions(self, batch, ask_key, use_cluster_key,
                        strict_host_check, private_key=None, quiet=True,
diff -Nru ganeti-2.12.0/lib/storage/bdev.py ganeti-2.12.3/lib/storage/bdev.py
--- ganeti-2.12.0/lib/storage/bdev.py	2014-10-09 14:57:28.000000000 +0300
+++ ganeti-2.12.3/lib/storage/bdev.py	2015-04-29 11:09:35.000000000 +0300
@@ -441,7 +441,15 @@
     """Parse one line of the lvs output used in L{_GetLvInfo}.
 
     """
-    elems = line.strip().rstrip(sep).split(sep)
+    elems = line.strip().split(sep)
+
+    # The previous iteration of code here assumed that LVM might put another
+    # separator to the right of the output. The PV info might be empty for
+    # thin volumes, so stripping off the separators might cut off the last
+    # empty element - do this instead.
+    if len(elems) == 7 and elems[-1] == "":
+      elems.pop()
+
     if len(elems) != 6:
       base.ThrowError("Can't parse LVS output, len(%s) != 6", str(elems))
 
@@ -466,12 +474,12 @@
       base.ThrowError("Can't parse the number of stripes: %s", err)
 
     pv_names = []
-    for pv in pvs.split(","):
-      m = re.match(cls._PARSE_PV_DEV_RE, pv)
-      if not m:
-        base.ThrowError("Can't parse this device list: %s", pvs)
-      pv_names.append(m.group(1))
-    assert len(pv_names) > 0
+    if pvs != "":
+      for pv in pvs.split(","):
+        m = re.match(cls._PARSE_PV_DEV_RE, pv)
+        if not m:
+          base.ThrowError("Can't parse this device list: %s", pvs)
+        pv_names.append(m.group(1))
 
     return (status, major, minor, pe_size, stripes, pv_names)
 
@@ -803,7 +811,7 @@
       return False
 
     self.major = os.major(st.st_rdev)
-    self.minor = os.minor(st.st_rdev)
+    self.minor = utils.osminor(st.st_rdev)
     self.attached = True
 
     return True
@@ -940,7 +948,7 @@
       return False
 
     self.major = os.major(st.st_rdev)
-    self.minor = os.minor(st.st_rdev)
+    self.minor = utils.osminor(st.st_rdev)
     self.attached = True
 
     return True
@@ -1307,7 +1315,7 @@
       return False
 
     self.major = os.major(st.st_rdev)
-    self.minor = os.minor(st.st_rdev)
+    self.minor = utils.osminor(st.st_rdev)
     self.attached = True
 
     return True
diff -Nru ganeti-2.12.0/lib/storage/gluster.py ganeti-2.12.3/lib/storage/gluster.py
--- ganeti-2.12.0/lib/storage/gluster.py	2014-10-06 18:10:35.000000000 +0300
+++ ganeti-2.12.3/lib/storage/gluster.py	2015-04-28 18:05:35.000000000 +0300
@@ -192,8 +192,8 @@
     @rtype: str
     """
 
-    return "{ip}:{port}:{volume}" \
-              .format(ip=self.server_ip, port=self.port, volume=self.volume)
+    return "-o server-port={port} {ip}:/{volume}" \
+              .format(port=self.port, ip=self.server_ip, volume=self.volume)
 
   def GetKVMMountString(self, path):
     """Return the string KVM needs to use this volume.
diff -Nru ganeti-2.12.0/lib/tools/burnin.py ganeti-2.12.3/lib/tools/burnin.py
--- ganeti-2.12.0/lib/tools/burnin.py	2014-10-09 14:57:28.000000000 +0300
+++ ganeti-2.12.3/lib/tools/burnin.py	2015-04-29 11:09:35.000000000 +0300
@@ -667,7 +667,8 @@
       for idx, growth in enumerate(self.disk_growth):
         if growth > 0:
           op = opcodes.OpInstanceGrowDisk(instance_name=instance, disk=idx,
-                                          amount=growth, wait_for_sync=True)
+                                          amount=growth, wait_for_sync=True,
+                                          ignore_ipolicy=True)
           Log("increase disk/%s by %s MB", idx, growth, indent=2)
           self.ExecOrQueue(instance, [op])
 
diff -Nru ganeti-2.12.0/lib/tools/node_daemon_setup.py ganeti-2.12.3/lib/tools/node_daemon_setup.py
--- ganeti-2.12.0/lib/tools/node_daemon_setup.py	2014-10-06 16:20:35.000000000 +0300
+++ ganeti-2.12.3/lib/tools/node_daemon_setup.py	2015-04-22 20:10:50.000000000 +0300
@@ -115,9 +115,8 @@
 
   # Check certificate with given key; this detects cases where the key given on
   # stdin doesn't match the certificate also given on stdin
-  x509_check_fn = utils.PrepareX509CertKeyCheck(cert, key)
   try:
-    x509_check_fn()
+    utils.X509CertKeyCheck(cert, key)
   except OpenSSL.SSL.Error:
     raise errors.X509CertError("(stdin)",
                                "Certificate is not signed with given key")
diff -Nru ganeti-2.12.0/lib/utils/storage.py ganeti-2.12.3/lib/utils/storage.py
--- ganeti-2.12.0/lib/utils/storage.py	2014-10-09 14:57:28.000000000 +0300
+++ ganeti-2.12.3/lib/utils/storage.py	2015-04-29 11:09:35.000000000 +0300
@@ -215,3 +215,13 @@
 
   for i in range(start, num_disks):
     yield prefix + _GetDiskSuffix(i)
+
+
+def osminor(dev):
+  """Return the device minor number from a raw device number.
+
+  This is a replacement for os.minor working around the issue that
+  Python's os.minor still has the old definition. See Ganeti issue
+  1058 for more details.
+  """
+  return (dev & 0xff) | ((dev >> 12) & ~0xff)
diff -Nru ganeti-2.12.0/lib/utils/x509.py ganeti-2.12.3/lib/utils/x509.py
--- ganeti-2.12.0/lib/utils/x509.py	2014-10-06 18:10:35.000000000 +0300
+++ ganeti-2.12.3/lib/utils/x509.py	2015-04-22 20:10:50.000000000 +0300
@@ -340,8 +340,8 @@
           OpenSSL.crypto.dump_certificate(OpenSSL.crypto.FILETYPE_PEM, cert))
 
 
-def PrepareX509CertKeyCheck(cert, key):
-  """Get function for verifying certificate with a certain private key.
+def X509CertKeyCheck(cert, key):
+  """Function for verifying certificate with a certain private key.
 
   @type key: OpenSSL.crypto.PKey
   @param key: Private key object
@@ -353,10 +353,9 @@
 
   """
   ctx = OpenSSL.SSL.Context(OpenSSL.SSL.TLSv1_METHOD)
-  ctx.use_privatekey(key)
   ctx.use_certificate(cert)
-
-  return ctx.check_privatekey
+  ctx.use_privatekey(key)
+  ctx.check_privatekey()
 
 
 def CheckNodeCertificate(cert, _noded_cert_file=pathutils.NODED_CERT_FILE):
@@ -396,9 +395,8 @@
                                "Unable to load private key: %s" % err)
 
   # Check consistency of server.pem file
-  check_fn = PrepareX509CertKeyCheck(noded_cert, noded_key)
   try:
-    check_fn()
+    X509CertKeyCheck(noded_cert, noded_key)
   except OpenSSL.SSL.Error:
     # This should never happen as it would mean the certificate in server.pem
     # is out of sync with the private key stored in the same file
@@ -406,9 +404,8 @@
                                "Certificate does not match with private key")
 
   # Check with supplied certificate with local key
-  check_fn = PrepareX509CertKeyCheck(cert, noded_key)
   try:
-    check_fn()
+    X509CertKeyCheck(cert, noded_key)
   except OpenSSL.SSL.Error:
     raise errors.GenericError("Given cluster certificate does not match"
                               " local key")
diff -Nru ganeti-2.12.0/lib/watcher/__init__.py ganeti-2.12.3/lib/watcher/__init__.py
--- ganeti-2.12.0/lib/watcher/__init__.py	2014-10-09 14:57:28.000000000 +0300
+++ ganeti-2.12.3/lib/watcher/__init__.py	2015-04-29 11:09:35.000000000 +0300
@@ -384,7 +384,11 @@
                    " or has offline secondaries", name)
       continue
 
-    job.append(opcodes.OpInstanceActivateDisks(instance_name=name))
+    op = opcodes.OpInstanceActivateDisks(instance_name=name)
+    op.reason = [(constants.OPCODE_REASON_SRC_WATCHER,
+                  "Activating disks for instance %s" % name,
+                  utils.EpochNano())]
+    job.append(op)
 
   if job:
     job_id = cli.SendJob(job, cl=cl)
diff -Nru ganeti-2.12.0/lib/watcher/state.py ganeti-2.12.3/lib/watcher/state.py
--- ganeti-2.12.0/lib/watcher/state.py	2014-10-06 18:10:35.000000000 +0300
+++ ganeti-2.12.3/lib/watcher/state.py	2015-04-22 20:10:50.000000000 +0300
@@ -197,7 +197,7 @@
     # Second, delete expired records
     earliest = time.time() - RETRY_EXPIRATION
     expired_instances = [i for i in idict
-                         if idict[i][KEY_RESTART_WHEN] < earliest]
+                         if idict[i].get(KEY_RESTART_WHEN, 0) < earliest]
     for inst in expired_instances:
       logging.debug("Expiring record for instance %s", inst)
       idict.pop(inst, None)
diff -Nru ganeti-2.12.0/lib/wconfd.py ganeti-2.12.3/lib/wconfd.py
--- ganeti-2.12.0/lib/wconfd.py	2014-10-07 17:45:37.000000000 +0300
+++ ganeti-2.12.3/lib/wconfd.py	2015-04-22 20:10:50.000000000 +0300
@@ -58,7 +58,7 @@
     cl.AbstractStubClient.__init__(self, timeouts, transport)
     stub.ClientRpcStub.__init__(self)
 
-    retries = 10
+    retries = 12
     for try_no in range(0, retries):
       try:
         self._InitTransport()
@@ -68,4 +68,4 @@
         if try_no == retries -1:
           raise
         logging.debug("Will retry")
-        time.sleep(10 * random.random())
+        time.sleep(try_no * 10 + 10 * random.random())
diff -Nru ganeti-2.12.0/Makefile.am ganeti-2.12.3/Makefile.am
--- ganeti-2.12.0/Makefile.am	2014-10-09 14:57:28.000000000 +0300
+++ ganeti-2.12.3/Makefile.am	2015-04-29 11:09:35.000000000 +0300
@@ -245,6 +245,7 @@
 	ganeti-[0-9]*.[0-9]*.[0-9]* \
 	doc/html/_* \
 	doc/man-html/_* \
+	tools/shebang \
 	autom4te.cache
 
 # some helper vars
@@ -271,6 +272,7 @@
 	$(addsuffix /*.o,$(HS_DIRS)) \
 	$(addsuffix /*.$(HTEST_SUFFIX)_hi,$(HS_DIRS)) \
 	$(addsuffix /*.$(HTEST_SUFFIX)_o,$(HS_DIRS)) \
+	hs-pkg-versions \
 	Makefile.ghc \
 	Makefile.ghc.bak \
 	$(PYTHON_BOOTSTRAP) \
@@ -295,9 +297,11 @@
 	tools/kvm-ifup-os \
 	tools/xen-ifup-os \
 	tools/vif-ganeti \
+	tools/vif-ganeti-metad \
 	tools/net-common \
 	tools/users-setup \
 	tools/vcluster-setup \
+	$(python_scripts_shebang) \
 	stamp-directories \
 	stamp-srclinks \
 	$(nodist_pkgpython_PYTHON) \
@@ -319,6 +323,9 @@
 	$(PYTHON_BOOTSTRAP) \
 	$(gnt_python_sbin_SCRIPTS)
 
+clean-local:
+	rm -rf tools/shebang
+
 HS_GENERATED_FILES = $(HS_PROGS) src/hluxid src/ganeti-luxid
 if ENABLE_CONFD
 HS_GENERATED_FILES += src/hconfd src/ganeti-confd
@@ -710,10 +717,13 @@
 HS_BUILT_TEST_HELPERS = $(HS_BIN_ROLES:%=test/hs/%) test/hs/hail
 
 HFLAGS = \
-	-O -Wall -Werror -isrc \
+	-O -Wall -isrc \
 	-fwarn-monomorphism-restriction \
 	-fwarn-tabs \
 	$(GHC_BYVERSION_FLAGS)
+if DEVELOPER_MODE
+HFLAGS += -Werror
+endif
 
 HTEST_SUFFIX = hpc
 HPROF_SUFFIX = prof
@@ -1162,38 +1172,71 @@
 
 HS_SRCS = $(HS_LIBTESTBUILT_SRCS)
 
+# select the last line of output and extract the version number,
+# padding with 0s if needed
+hs-pkg-versions:
+	ghc-pkg list --simple-output lens \
+	| sed -r -e '$$!d' \
+	  -e 's/^lens-([0-9]+(\.[0-9]+)*)/\1 0 0 0/' \
+	  -e 's/\./ /g' -e 's/([0-9]+) *([0-9]+) *([0-9]+) .*/\
+	      -DLENS_MAJOR=\1 -DLENS_MINOR=\2 -DLENS_REV=\3/' \
+	  -e 's/^\s*//' \
+	> $@
+	ghc-pkg list --simple-output monad-control \
+	| sed -r -e '$$!d' \
+	  -e 's/^monad-control-([0-9]+(\.[0-9]+)*)/\1 0 0 0/' \
+	  -e 's/\./ /g' -e 's/([0-9]+) *([0-9]+) *([0-9]+) .*/\
+	   -DMONAD_CONTROL_MAJOR=\1 -DMONAD_CONTROL_MINOR=\2 -DMONAD_CONTROL_REV=\3/'\
+	  -e 's/^\s*//' \
+	>> $@
+
 HS_MAKEFILE_GHC_SRCS = $(HS_SRC_PROGS:%=%.hs)
 if WANT_HSTESTS
 HS_MAKEFILE_GHC_SRCS += $(HS_TEST_PROGS:%=%.hs)
 endif
-Makefile.ghc: $(HS_MAKEFILE_GHC_SRCS) Makefile \
+Makefile.ghc: $(HS_MAKEFILE_GHC_SRCS) Makefile hs-pkg-versions \
               | $(built_base_sources) $(HS_BUILT_SRCS)
 	$(GHC) -M -dep-makefile $@ -dep-suffix $(HPROF_SUFFIX) \
 		-dep-suffix $(HTEST_SUFFIX) $(HFLAGS) -itest/hs \
+	  $(shell cat hs-pkg-versions) \
 		$(HS_PARALLEL3) $(HS_REGEX_PCRE) $(HEXTRA_COMBINED) $(HS_MAKEFILE_GHC_SRCS)
+# Since ghc -M does not generate dependency line for object files, dependencies
+# from a target executable seed object (e.g. src/hluxid.o) to objects which
+# finally will be linked to the target object (e.g. src/Ganeti/Daemon.o) are
+# missing in Makefile.ghc.
+# see: https://www.haskell.org/ghc/docs/7.6.2/html/users_guide/separate-compilation.html#makefile-dependencies
+# Following substitutions will add dependencies between object files which
+# corresponds to the interface file already there as a dependency for each
+# object listed in Makefile.ghc.
+# e.g. src/hluxid.o : src/Ganeti/Daemon.hi
+#        => src/hluxid.o : src/Ganeti/Daemon.hi src/Ganeti/Daemon.o
+	sed -i -r -e 's/([^ ]+)\.hi$$/\1.hi \1.o/' -e 's/([^ ]+)_hi$$/\1_hi \1_o/' $@
 
 @include_makefile_ghc@
 
-%.o:
+%.o: hs-pkg-versions
 	@echo '[GHC]: $@ <- $^'
 	@$(GHC) -c $(HFLAGS) \
+	  $(shell cat hs-pkg-versions) \
 		$(HS_PARALLEL3) $(HS_REGEX_PCRE) $(HEXTRA_COMBINED) $(@:%.o=%.hs)
 
 # For TH+profiling we need to compile twice: Once without profiling,
 # and then once with profiling. See
 # http://www.haskell.org/ghc/docs/7.0.4/html/users_guide/template-haskell.html#id636646
 if HPROFILE
-%.$(HPROF_SUFFIX)_o: %.o
+%.$(HPROF_SUFFIX)_o: %.o hs-pkg-versions
 	@echo '[GHC|prof]: $@ <- $^'
 	@$(GHC) -c $(HFLAGS) \
+	  $(shell cat hs-pkg-versions) \
 	  $(HPROFFLAGS) \
 		$(HS_PARALLEL3) $(HS_REGEX_PCRE) $(HEXTRA_COMBINED) \
 		$(@:%.$(HPROF_SUFFIX)_o=%.hs)
 endif
 
-%.$(HTEST_SUFFIX)_o:
+%.$(HTEST_SUFFIX)_o: hs-pkg-versions
 	@echo '[GHC|test]: $@ <- $^'
 	@$(GHC) -c $(HTEST_FLAGS) \
+	  $(shell cat hs-pkg-versions) \
 		$(HS_PARALLEL3) $(HS_REGEX_PCRE) $(HEXTRA_COMBINED) $(@:%.$(HTEST_SUFFIX)_o=%.hs)
 
 %.hi: %.o ;
@@ -1203,16 +1246,17 @@
 if HPROFILE
 $(HS_SRC_PROGS): %: %.$(HPROF_SUFFIX)_o | stamp-directories
 else
-$(HS_SRC_PROGS): %: %.o | stamp-directories
+$(HS_SRC_PROGS): %: %.o hs-pkg-versions | stamp-directories
 endif
 	@echo '[GHC-link]: $@'
 	$(GHC) $(HFLAGS) \
+	  $(shell cat hs-pkg-versions) \
 		$(HPROFFLAGS) \
 		$(HS_PARALLEL3) $(HS_REGEX_PCRE) $(HEXTRA_COMBINED) --make $(@:%=%.hs)
 	@rm -f $(notdir $@).tix
 	@touch "$@"
 
-$(HS_TEST_PROGS): %: %.$(HTEST_SUFFIX)_o \
+$(HS_TEST_PROGS): %: %.$(HTEST_SUFFIX)_o hs-pkg-versions \
 	                   | stamp-directories $(built_python_sources)
 	@if [ "$(HS_NODEV)" ]; then \
 	  echo "Error: cannot run unittests without the development" \
@@ -1221,6 +1265,7 @@
 	fi
 	@echo '[GHC-link|test]: $@'
 	$(GHC) $(HTEST_FLAGS) \
+	  $(shell cat hs-pkg-versions) \
 		$(HS_PARALLEL3) $(HS_REGEX_PCRE) $(HEXTRA_COMBINED) --make $(@:%=%.hs)
 	@rm -f $(notdir $@).tix
 	@touch "$@"
@@ -1270,20 +1315,31 @@
 	tools/post-upgrade \
 	tools/sanitize-config
 
+python_scripts_shebang = \
+	$(patsubst tools/%,tools/shebang/%, $(python_scripts))
+
+tools/shebang/%: tools/%
+	mkdir -p tools/shebang
+	head -1 $< | sed 's|#!/usr/bin/python|#!$(PYTHON)|' > $@
+	echo '# Generated file; do not edit.' >> $@
+	tail -n +2 $< >> $@
+
 dist_tools_SCRIPTS = \
 	tools/kvm-console-wrapper \
 	tools/master-ip-setup \
 	tools/xen-console-wrapper
 
 dist_tools_python_SCRIPTS = \
-	$(python_scripts) \
 	tools/burnin
 
 nodist_tools_python_SCRIPTS = \
-	tools/node-cleanup
+	tools/node-cleanup \
+        $(python_scripts_shebang)
 
-tools_python_basenames = $(patsubst tools/%,%,\
-	$(dist_tools_python_SCRIPTS) $(nodist_tools_python_SCRIPTS))
+tools_python_basenames = \
+	$(patsubst shebang/%,%,\
+	$(patsubst tools/%,%,\
+	$(dist_tools_python_SCRIPTS) $(nodist_tools_python_SCRIPTS)))
 
 nodist_tools_SCRIPTS = \
 	tools/users-setup \
@@ -1310,6 +1366,7 @@
 	tools/kvm-ifup-os \
 	tools/xen-ifup-os \
 	tools/vif-ganeti \
+	tools/vif-ganeti-metad \
 	tools/net-common \
 	$(HS_MYEXECLIB_PROGS)
 
@@ -1344,13 +1401,16 @@
 	daemons/daemon-util.in \
 	daemons/ganeti-cleaner.in \
 	$(pkglib_python_scripts) \
+	devel/build_chroot \
 	devel/upload \
 	devel/webserver \
 	tools/kvm-ifup.in \
 	tools/ifup-os.in \
 	tools/vif-ganeti.in \
+	tools/vif-ganeti-metad.in \
 	tools/net-common.in \
 	tools/vcluster-setup.in \
+        $(python_scripts) \
 	$(docinput) \
 	doc/html \
 	$(BUILT_EXAMPLES:%=%.in) \
@@ -1360,6 +1420,10 @@
 	doc/examples/gnt-debug/README \
 	doc/examples/gnt-debug/delay0.json \
 	doc/examples/gnt-debug/delay50.json \
+	doc/examples/systemd/ganeti-master.target \
+	doc/examples/systemd/ganeti-node.target \
+	doc/examples/systemd/ganeti.service \
+	doc/examples/systemd/ganeti.target \
 	doc/users/groupmemberships.in \
 	doc/users/groups.in \
 	doc/users/users.in \
@@ -1701,6 +1765,7 @@
 	test/py/cmdlib/testsupport/iallocator_mock.py \
 	test/py/cmdlib/testsupport/livelock_mock.py \
 	test/py/cmdlib/testsupport/netutils_mock.py \
+	test/py/cmdlib/testsupport/pathutils_mock.py \
 	test/py/cmdlib/testsupport/processor_mock.py \
 	test/py/cmdlib/testsupport/rpc_runner_mock.py \
 	test/py/cmdlib/testsupport/ssh_mock.py \
@@ -1859,6 +1924,10 @@
 	sed -f $(REPLACE_VARS_SED) < $< > $@
 	chmod +x $@
 
+tools/vif-ganeti-metad: tools/vif-ganeti-metad.in $(REPLACE_VARS_SED)
+	sed -f $(REPLACE_VARS_SED) < $< > $@
+	chmod +x $@
+
 tools/net-common: tools/net-common.in $(REPLACE_VARS_SED)
 	sed -f $(REPLACE_VARS_SED) < $< > $@
 	chmod +x $@
@@ -2084,8 +2153,8 @@
 	    -DMAN_PAGES="$$(for i in $(notdir $(man_MANS)); do \
 	                    echo -n "$$i" | sed -re 's/^(.*)\.([0-9]+)$$/("\1",\2):/g'; \
 	                    done)" \
-	    -DAF_INET4="$$(PYTHONPATH=. python $(PRINT_PY_CONSTANTS) AF_INET4)" \
-	    -DAF_INET6="$$(PYTHONPATH=. python $(PRINT_PY_CONSTANTS) AF_INET6)" \
+	    -DAF_INET4="$$(PYTHONPATH=. $(PYTHON) $(PRINT_PY_CONSTANTS) AF_INET4)" \
+	    -DAF_INET6="$$(PYTHONPATH=. $(PYTHON) $(PRINT_PY_CONSTANTS) AF_INET6)" \
 	$(abs_top_srcdir)/src/AutoConf.hs.in > $@
 
 lib/_vcsversion.py: Makefile vcs-version | stamp-directories
@@ -2194,7 +2263,7 @@
 $(PYTHON_BOOTSTRAP) $(gnt_scripts) $(gnt_python_sbin_SCRIPTS): Makefile | stamp-directories
 	test -n "$(MODULE)" || { echo Missing module; exit 1; }
 	set -e; \
-	{ echo '#!/usr/bin/python'; \
+	{ echo '#!${PYTHON}'; \
 	  echo '# This file is automatically generated, do not edit!'; \
 	  echo "# Edit $(MODULE) instead."; \
 	  echo; \
@@ -2276,7 +2345,8 @@
 .PHONY: check-local
 check-local: check-dirs check-news $(GENERATED_FILES)
 	$(CHECK_PYTHON_CODE) $(check_python_code)
-	PYTHONPATH=. $(CHECK_HEADER) $(check_python_code)
+	PYTHONPATH=. $(CHECK_HEADER) \
+	    $(filter-out $(GENERATED_FILES),$(check_python_code))
 	$(CHECK_VERSION) $(VERSION) $(top_srcdir)/NEWS
 	PYTHONPATH=. $(RUN_IN_TEMPDIR) $(CURDIR)/$(CHECK_IMPORTS) . $(standalone_python_modules)
 	error= ; \
@@ -2322,6 +2392,14 @@
 	@rm -f htest.tix
 	./test/hs/htest
 
+.PHONY: py-tests
+py-tests: $(python_tests) ganeti $(built_python_sources)
+	error=; \
+	for file in $(python_tests); \
+	  do if ! $(TESTS_ENVIRONMENT) $$file; then error=1; fi; \
+	done; \
+	test -z "$$error"
+
 .PHONY: hs-shell-%
 hs-shell-%: test/hs/hpc-htools test/hs/hpc-mon-collector \
             $(HS_BUILT_TEST_HELPERS)
@@ -2572,10 +2650,11 @@
 	  $(HS_LIBTESTBUILT_SRCS)
 
 .PHONY: TAGS
-TAGS: $(GENERATED_FILES)
+TAGS: $(GENERATED_FILES) hs-pkg-versions
 	rm -f TAGS
 	$(GHC) -e ":etags TAGS_hs" -v0 \
 	  $(filter-out -O -Werror,$(HFLAGS)) \
+	  $(shell cat hs-pkg-versions) \
 		-osuf tags.o \
 		-hisuf tags.hi \
     -lcurl \
@@ -2673,4 +2752,9 @@
 
 -include ./Makefile.local
 
+# support inspecting the value of a make variable
+
+print-%:
+	@echo $($*)
+
 # vim: set noet :
diff -Nru ganeti-2.12.0/Makefile.in ganeti-2.12.3/Makefile.in
--- ganeti-2.12.0/Makefile.in	2014-10-10 11:52:14.000000000 +0300
+++ ganeti-2.12.3/Makefile.in	2015-04-29 11:09:38.000000000 +0300
@@ -62,27 +62,28 @@
 @ENABLE_CONFD_TRUE at am__append_4 = src/hconfd
 @ENABLE_MOND_TRUE at am__append_5 = src/ganeti-mond
 @ENABLE_METADATA_TRUE at am__append_6 = src/ganeti-metad
- at HCOVERAGE_TRUE@am__append_7 = -fhpc
- at HTEST_TRUE@am__append_8 = -DTEST
- at HAS_SPHINX_TRUE@@MANPAGES_IN_DOC_TRUE at am__append_9 = doc/man-html
- at HAS_SPHINX_TRUE@@MANPAGES_IN_DOC_FALSE at am__append_10 = doc/html
- at WANT_HSTESTS_TRUE@am__append_11 = $(HS_TEST_PROGS:%=%.hs)
- at ENABLE_CONFD_TRUE@am__append_12 = src/ganeti-confd
- at ENABLE_MOND_TRUE@am__append_13 = src/ganeti-mond
- at ENABLE_METADATA_TRUE@am__append_14 = src/ganeti-metad
- at PY_UNIT_TRUE@am__append_15 = $(python_tests)
- at WANT_HSTESTS_TRUE@am__append_16 = $(haskell_tests)
- at WANT_HSTESTS_TRUE@am__append_17 = test/hs/offline-test.sh
- at WANT_HSTESTS_TRUE@am__append_18 = \
+ at DEVELOPER_MODE_TRUE@am__append_7 = -Werror
+ at HCOVERAGE_TRUE@am__append_8 = -fhpc
+ at HTEST_TRUE@am__append_9 = -DTEST
+ at HAS_SPHINX_TRUE@@MANPAGES_IN_DOC_TRUE at am__append_10 = doc/man-html
+ at HAS_SPHINX_TRUE@@MANPAGES_IN_DOC_FALSE at am__append_11 = doc/html
+ at WANT_HSTESTS_TRUE@am__append_12 = $(HS_TEST_PROGS:%=%.hs)
+ at ENABLE_CONFD_TRUE@am__append_13 = src/ganeti-confd
+ at ENABLE_MOND_TRUE@am__append_14 = src/ganeti-mond
+ at ENABLE_METADATA_TRUE@am__append_15 = src/ganeti-metad
+ at PY_UNIT_TRUE@am__append_16 = $(python_tests)
+ at WANT_HSTESTS_TRUE@am__append_17 = $(haskell_tests)
+ at WANT_HSTESTS_TRUE@am__append_18 = test/hs/offline-test.sh
+ at WANT_HSTESTS_TRUE@am__append_19 = \
 @WANT_HSTESTS_TRUE@	test/hs/hpc-htools \
 @WANT_HSTESTS_TRUE@	test/hs/hpc-mon-collector \
 @WANT_HSTESTS_TRUE@	$(HS_BUILT_TEST_HELPERS)
 
- at PY_UNIT_TRUE@am__append_19 = $(python_tests) $(python_test_support)
- at HAS_PEP8_TRUE@am__append_20 = pep8
- at HAS_HLINT_TRUE@am__append_21 = hlint
- at HS_UNIT_TRUE@am__append_22 = hs-coverage
- at PY_UNIT_TRUE@am__append_23 = py-coverage
+ at PY_UNIT_TRUE@am__append_20 = $(python_tests) $(python_test_support)
+ at HAS_PEP8_TRUE@am__append_21 = pep8
+ at HAS_HLINT_TRUE@am__append_22 = hlint
+ at HS_UNIT_TRUE@am__append_23 = hs-coverage
+ at PY_UNIT_TRUE@am__append_24 = py-coverage
 subdir = .
 DIST_COMMON = README $(am__configure_deps) $(client_PYTHON) \
 	$(cmdlib_PYTHON) $(confd_PYTHON) $(dist_ifup_SCRIPTS) \
@@ -210,6 +211,7 @@
 CYGPATH_W = @CYGPATH_W@
 DAEMONS_GROUP = @DAEMONS_GROUP@
 DEFS = @DEFS@
+DEVELOPER_MODE = @DEVELOPER_MODE@
 DISK_SEPARATOR = @DISK_SEPARATOR@
 DOT = @DOT@
 DRBD_BARRIERS = @DRBD_BARRIERS@
@@ -578,6 +580,7 @@
 	ganeti-[0-9]*.[0-9]*.[0-9]* \
 	doc/html/_* \
 	doc/man-html/_* \
+	tools/shebang \
 	autom4te.cache
 
 
@@ -601,6 +604,7 @@
 	$(addsuffix /*.o,$(HS_DIRS)) \
 	$(addsuffix /*.$(HTEST_SUFFIX)_hi,$(HS_DIRS)) \
 	$(addsuffix /*.$(HTEST_SUFFIX)_o,$(HS_DIRS)) \
+	hs-pkg-versions \
 	Makefile.ghc \
 	Makefile.ghc.bak \
 	$(PYTHON_BOOTSTRAP) \
@@ -625,9 +629,11 @@
 	tools/kvm-ifup-os \
 	tools/xen-ifup-os \
 	tools/vif-ganeti \
+	tools/vif-ganeti-metad \
 	tools/net-common \
 	tools/users-setup \
 	tools/vcluster-setup \
+	$(python_scripts_shebang) \
 	stamp-directories \
 	stamp-srclinks \
 	$(nodist_pkgpython_PYTHON) \
@@ -1009,9 +1015,9 @@
 HS_SRC_PROGS = $(filter-out test/%,$(HS_ALL_PROGS))
 HS_PROG_SRCS = $(patsubst %,%.hs,$(HS_DEFAULT_PROGS)) src/mon-collector.hs
 HS_BUILT_TEST_HELPERS = $(HS_BIN_ROLES:%=test/hs/%) test/hs/hail
-HFLAGS = -O -Wall -Werror -isrc -fwarn-monomorphism-restriction \
-	-fwarn-tabs $(GHC_BYVERSION_FLAGS) $(am__append_7) \
-	$(am__append_8)
+HFLAGS = -O -Wall -isrc -fwarn-monomorphism-restriction -fwarn-tabs \
+	$(GHC_BYVERSION_FLAGS) $(am__append_7) $(am__append_8) \
+	$(am__append_9)
 HTEST_SUFFIX = hpc
 HPROF_SUFFIX = prof
 @HPROFILE_TRUE at HPROFFLAGS = -prof -fprof-auto-top -osuf $(HPROF_SUFFIX)_o \
@@ -1281,7 +1287,7 @@
 # distributed)
 noinst_DATA = $(BUILT_EXAMPLES) doc/examples/bash_completion \
 	doc/examples/bash_completion-debug $(userspecs) $(manhtml) \
-	$(am__append_9) $(am__append_10)
+	$(am__append_10) $(am__append_11)
 gnt_scripts = \
 	scripts/gnt-backup \
 	scripts/gnt-cluster \
@@ -1337,13 +1343,13 @@
 
 bin_SCRIPTS = $(HS_BIN_PROGS)
 HS_SRCS = $(HS_LIBTESTBUILT_SRCS)
-HS_MAKEFILE_GHC_SRCS = $(HS_SRC_PROGS:%=%.hs) $(am__append_11)
+HS_MAKEFILE_GHC_SRCS = $(HS_SRC_PROGS:%=%.hs) $(am__append_12)
 dist_sbin_SCRIPTS = \
 	tools/ganeti-listrunner
 
 nodist_sbin_SCRIPTS = daemons/ganeti-cleaner src/ganeti-kvmd \
-	src/ganeti-luxid src/ganeti-wconfd $(am__append_12) \
-	$(am__append_13) $(am__append_14)
+	src/ganeti-luxid src/ganeti-wconfd $(am__append_13) \
+	$(am__append_14) $(am__append_15)
 
 # strip path prefixes off the sbin scripts
 all_sbin_scripts = \
@@ -1363,20 +1369,25 @@
 	tools/post-upgrade \
 	tools/sanitize-config
 
+python_scripts_shebang = \
+	$(patsubst tools/%,tools/shebang/%, $(python_scripts))
+
 dist_tools_SCRIPTS = \
 	tools/kvm-console-wrapper \
 	tools/master-ip-setup \
 	tools/xen-console-wrapper
 
 dist_tools_python_SCRIPTS = \
-	$(python_scripts) \
 	tools/burnin
 
 nodist_tools_python_SCRIPTS = \
-	tools/node-cleanup
+	tools/node-cleanup \
+        $(python_scripts_shebang)
 
-tools_python_basenames = $(patsubst tools/%,%,\
-	$(dist_tools_python_SCRIPTS) $(nodist_tools_python_SCRIPTS))
+tools_python_basenames = \
+	$(patsubst shebang/%,%,\
+	$(patsubst tools/%,%,\
+	$(dist_tools_python_SCRIPTS) $(nodist_tools_python_SCRIPTS)))
 
 nodist_tools_SCRIPTS = \
 	tools/users-setup \
@@ -1402,6 +1413,7 @@
 	tools/kvm-ifup-os \
 	tools/xen-ifup-os \
 	tools/vif-ganeti \
+	tools/vif-ganeti-metad \
 	tools/net-common \
 	$(HS_MYEXECLIB_PROGS)
 
@@ -1437,13 +1449,16 @@
 	daemons/daemon-util.in \
 	daemons/ganeti-cleaner.in \
 	$(pkglib_python_scripts) \
+	devel/build_chroot \
 	devel/upload \
 	devel/webserver \
 	tools/kvm-ifup.in \
 	tools/ifup-os.in \
 	tools/vif-ganeti.in \
+	tools/vif-ganeti-metad.in \
 	tools/net-common.in \
 	tools/vcluster-setup.in \
+        $(python_scripts) \
 	$(docinput) \
 	doc/html \
 	$(BUILT_EXAMPLES:%=%.in) \
@@ -1453,6 +1468,10 @@
 	doc/examples/gnt-debug/README \
 	doc/examples/gnt-debug/delay0.json \
 	doc/examples/gnt-debug/delay50.json \
+	doc/examples/systemd/ganeti-master.target \
+	doc/examples/systemd/ganeti-node.target \
+	doc/examples/systemd/ganeti.service \
+	doc/examples/systemd/ganeti.target \
 	doc/users/groupmemberships.in \
 	doc/users/groups.in \
 	doc/users/users.in \
@@ -1793,6 +1812,7 @@
 	test/py/cmdlib/testsupport/iallocator_mock.py \
 	test/py/cmdlib/testsupport/livelock_mock.py \
 	test/py/cmdlib/testsupport/netutils_mock.py \
+	test/py/cmdlib/testsupport/pathutils_mock.py \
 	test/py/cmdlib/testsupport/processor_mock.py \
 	test/py/cmdlib/testsupport/rpc_runner_mock.py \
 	test/py/cmdlib/testsupport/ssh_mock.py \
@@ -1806,9 +1826,9 @@
 	test/py/systemd_unittest.bash \
 	test/py/ganeti-cleaner_unittest.bash \
 	test/py/import-export_unittest.bash test/py/cli-test.bash \
-	test/py/bash_completion.bash $(am__append_15) $(am__append_17)
-nodist_TESTS = $(am__append_16)
-check_SCRIPTS = $(am__append_18)
+	test/py/bash_completion.bash $(am__append_16) $(am__append_18)
+nodist_TESTS = $(am__append_17)
+check_SCRIPTS = $(am__append_19)
 TESTS = $(dist_TESTS) $(nodist_TESTS)
 
 # Environment for all tests
@@ -1832,7 +1852,7 @@
 	$(rpc_stub_PYTHON) $(pytools_PYTHON) $(http_PYTHON) \
 	$(confd_PYTHON) $(masterd_PYTHON) $(impexpd_PYTHON) \
 	$(utils_PYTHON) $(watcher_PYTHON) $(noinst_PYTHON) \
-	$(qa_scripts) $(am__append_19)
+	$(qa_scripts) $(am__append_20)
 srclink_files = \
 	man/footer.rst \
 	test/py/check-cert-expired_unittest.bash \
@@ -1915,12 +1935,12 @@
 LINT_OPTS_ALL = $(LINT_OPTS) \
   $(addprefix --disable=,$(LINT_DISABLE))
 
-LINT_TARGETS = pylint pylint-qa pylint-test $(am__append_20) \
-	$(am__append_21)
+LINT_TARGETS = pylint pylint-qa pylint-test $(am__append_21) \
+	$(am__append_22)
 
 # FIXME: remove ignore "Use void" when GHC 6.x is deprecated
 HLINT_EXCLUDES = src/Ganeti/THH.hs test/hs/hpc-htools.hs
-COVERAGE_TESTS = $(am__append_22) $(am__append_23)
+COVERAGE_TESTS = $(am__append_23) $(am__append_24)
 all: all-am
 
 .SUFFIXES:
@@ -3624,7 +3644,7 @@
 	-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
 clean: clean-am
 
-clean-am: clean-generic mostlyclean-am
+clean-am: clean-generic clean-local mostlyclean-am
 
 distclean: distclean-am
 	-rm -f $(am__CONFIG_DISTCLEAN_FILES)
@@ -3732,11 +3752,11 @@
 .MAKE: check-am install-am install-exec-am install-strip
 
 .PHONY: all all-am am--refresh check check-TESTS check-am check-local \
-	clean clean-generic dist dist-all dist-bzip2 dist-gzip \
-	dist-hook dist-lzip dist-lzma dist-shar dist-tarZ dist-xz \
-	dist-zip distcheck distclean distclean-generic distcleancheck \
-	distdir distuninstallcheck dvi dvi-am html html-am info \
-	info-am install install-am install-binSCRIPTS \
+	clean clean-generic clean-local dist dist-all dist-bzip2 \
+	dist-gzip dist-hook dist-lzip dist-lzma dist-shar dist-tarZ \
+	dist-xz dist-zip distcheck distclean distclean-generic \
+	distcleancheck distdir distuninstallcheck dvi dvi-am html \
+	html-am info info-am install install-am install-binSCRIPTS \
 	install-clientPYTHON install-cmdlibPYTHON install-confdPYTHON \
 	install-data install-data-am install-dist_ifupSCRIPTS \
 	install-dist_sbinSCRIPTS install-dist_toolsSCRIPTS \
@@ -3788,6 +3808,9 @@
 maintainer-clean-local:
 	rm -rf $(BUILDTIME_DIRS)
 
+clean-local:
+	rm -rf tools/shebang
+
 # Generating the RPC wrappers depends on many things, so make sure
 # it's built at the end of the built sources
 lib/_generated_rpc.py: | $(built_base_sources) $(built_python_base_sources)
@@ -3878,32 +3901,65 @@
 	for role in $(HS_BIN_ROLES); do \
 	  $(LN_S) -f htools $(DESTDIR)$(bindir)/$$role ; \
 	done
-Makefile.ghc: $(HS_MAKEFILE_GHC_SRCS) Makefile \
+
+# select the last line of output and extract the version number,
+# padding with 0s if needed
+hs-pkg-versions:
+	ghc-pkg list --simple-output lens \
+	| sed -r -e '$$!d' \
+	  -e 's/^lens-([0-9]+(\.[0-9]+)*)/\1 0 0 0/' \
+	  -e 's/\./ /g' -e 's/([0-9]+) *([0-9]+) *([0-9]+) .*/\
+	      -DLENS_MAJOR=\1 -DLENS_MINOR=\2 -DLENS_REV=\3/' \
+	  -e 's/^\s*//' \
+	> $@
+	ghc-pkg list --simple-output monad-control \
+	| sed -r -e '$$!d' \
+	  -e 's/^monad-control-([0-9]+(\.[0-9]+)*)/\1 0 0 0/' \
+	  -e 's/\./ /g' -e 's/([0-9]+) *([0-9]+) *([0-9]+) .*/\
+	   -DMONAD_CONTROL_MAJOR=\1 -DMONAD_CONTROL_MINOR=\2 -DMONAD_CONTROL_REV=\3/'\
+	  -e 's/^\s*//' \
+	>> $@
+Makefile.ghc: $(HS_MAKEFILE_GHC_SRCS) Makefile hs-pkg-versions \
               | $(built_base_sources) $(HS_BUILT_SRCS)
 	$(GHC) -M -dep-makefile $@ -dep-suffix $(HPROF_SUFFIX) \
 		-dep-suffix $(HTEST_SUFFIX) $(HFLAGS) -itest/hs \
+	  $(shell cat hs-pkg-versions) \
 		$(HS_PARALLEL3) $(HS_REGEX_PCRE) $(HEXTRA_COMBINED) $(HS_MAKEFILE_GHC_SRCS)
+# Since ghc -M does not generate dependency line for object files, dependencies
+# from a target executable seed object (e.g. src/hluxid.o) to objects which
+# finally will be linked to the target object (e.g. src/Ganeti/Daemon.o) are
+# missing in Makefile.ghc.
+# see: https://www.haskell.org/ghc/docs/7.6.2/html/users_guide/separate-compilation.html#makefile-dependencies
+# Following substitutions will add dependencies between object files which
+# corresponds to the interface file already there as a dependency for each
+# object listed in Makefile.ghc.
+# e.g. src/hluxid.o : src/Ganeti/Daemon.hi
+#        => src/hluxid.o : src/Ganeti/Daemon.hi src/Ganeti/Daemon.o
+	sed -i -r -e 's/([^ ]+)\.hi$$/\1.hi \1.o/' -e 's/([^ ]+)_hi$$/\1_hi \1_o/' $@
 
 @include_makefile_ghc@
 
-%.o:
+%.o: hs-pkg-versions
 	@echo '[GHC]: $@ <- $^'
 	@$(GHC) -c $(HFLAGS) \
+	  $(shell cat hs-pkg-versions) \
 		$(HS_PARALLEL3) $(HS_REGEX_PCRE) $(HEXTRA_COMBINED) $(@:%.o=%.hs)
 
 # For TH+profiling we need to compile twice: Once without profiling,
 # and then once with profiling. See
 # http://www.haskell.org/ghc/docs/7.0.4/html/users_guide/template-haskell.html#id636646
- at HPROFILE_TRUE@%.$(HPROF_SUFFIX)_o: %.o
+ at HPROFILE_TRUE@%.$(HPROF_SUFFIX)_o: %.o hs-pkg-versions
 @HPROFILE_TRUE@	@echo '[GHC|prof]: $@ <- $^'
 @HPROFILE_TRUE@	@$(GHC) -c $(HFLAGS) \
+ at HPROFILE_TRUE@	  $(shell cat hs-pkg-versions) \
 @HPROFILE_TRUE@	  $(HPROFFLAGS) \
 @HPROFILE_TRUE@		$(HS_PARALLEL3) $(HS_REGEX_PCRE) $(HEXTRA_COMBINED) \
 @HPROFILE_TRUE@		$(@:%.$(HPROF_SUFFIX)_o=%.hs)
 
-%.$(HTEST_SUFFIX)_o:
+%.$(HTEST_SUFFIX)_o: hs-pkg-versions
 	@echo '[GHC|test]: $@ <- $^'
 	@$(GHC) -c $(HTEST_FLAGS) \
+	  $(shell cat hs-pkg-versions) \
 		$(HS_PARALLEL3) $(HS_REGEX_PCRE) $(HEXTRA_COMBINED) $(@:%.$(HTEST_SUFFIX)_o=%.hs)
 
 %.hi: %.o ;
@@ -3911,15 +3967,16 @@
 %.$(HPROF_SUFFIX)_hi: %.$(HPROF_SUFFIX)_o ;
 
 @HPROFILE_TRUE@$(HS_SRC_PROGS): %: %.$(HPROF_SUFFIX)_o | stamp-directories
- at HPROFILE_FALSE@$(HS_SRC_PROGS): %: %.o | stamp-directories
+ at HPROFILE_FALSE@$(HS_SRC_PROGS): %: %.o hs-pkg-versions | stamp-directories
 	@echo '[GHC-link]: $@'
 	$(GHC) $(HFLAGS) \
+	  $(shell cat hs-pkg-versions) \
 		$(HPROFFLAGS) \
 		$(HS_PARALLEL3) $(HS_REGEX_PCRE) $(HEXTRA_COMBINED) --make $(@:%=%.hs)
 	@rm -f $(notdir $@).tix
 	@touch "$@"
 
-$(HS_TEST_PROGS): %: %.$(HTEST_SUFFIX)_o \
+$(HS_TEST_PROGS): %: %.$(HTEST_SUFFIX)_o hs-pkg-versions \
 	                   | stamp-directories $(built_python_sources)
 	@if [ "$(HS_NODEV)" ]; then \
 	  echo "Error: cannot run unittests without the development" \
@@ -3928,6 +3985,7 @@
 	fi
 	@echo '[GHC-link|test]: $@'
 	$(GHC) $(HTEST_FLAGS) \
+	  $(shell cat hs-pkg-versions) \
 		$(HS_PARALLEL3) $(HS_REGEX_PCRE) $(HEXTRA_COMBINED) --make $(@:%=%.hs)
 	@rm -f $(notdir $@).tix
 	@touch "$@"
@@ -3937,6 +3995,12 @@
 
 @ENABLE_CONFD_TRUE at src/ganeti-confd: src/hconfd
 @ENABLE_CONFD_TRUE@	cp -f $< $@
+
+tools/shebang/%: tools/%
+	mkdir -p tools/shebang
+	head -1 $< | sed 's|#!/usr/bin/python|#!$(PYTHON)|' > $@
+	echo '# Generated file; do not edit.' >> $@
+	tail -n +2 $< >> $@
 # test dependency
 @WANT_HSTESTS_TRUE at test/hs/offline-test.sh: test/hs/hpc-htools test/hs/hpc-mon-collector
 
@@ -3964,6 +4028,10 @@
 	sed -f $(REPLACE_VARS_SED) < $< > $@
 	chmod +x $@
 
+tools/vif-ganeti-metad: tools/vif-ganeti-metad.in $(REPLACE_VARS_SED)
+	sed -f $(REPLACE_VARS_SED) < $< > $@
+	chmod +x $@
+
 tools/net-common: tools/net-common.in $(REPLACE_VARS_SED)
 	sed -f $(REPLACE_VARS_SED) < $< > $@
 	chmod +x $@
@@ -4181,8 +4249,8 @@
 	    -DMAN_PAGES="$$(for i in $(notdir $(man_MANS)); do \
 	                    echo -n "$$i" | sed -re 's/^(.*)\.([0-9]+)$$/("\1",\2):/g'; \
 	                    done)" \
-	    -DAF_INET4="$$(PYTHONPATH=. python $(PRINT_PY_CONSTANTS) AF_INET4)" \
-	    -DAF_INET6="$$(PYTHONPATH=. python $(PRINT_PY_CONSTANTS) AF_INET6)" \
+	    -DAF_INET4="$$(PYTHONPATH=. $(PYTHON) $(PRINT_PY_CONSTANTS) AF_INET4)" \
+	    -DAF_INET6="$$(PYTHONPATH=. $(PYTHON) $(PRINT_PY_CONSTANTS) AF_INET6)" \
 	$(abs_top_srcdir)/src/AutoConf.hs.in > $@
 
 lib/_vcsversion.py: Makefile vcs-version | stamp-directories
@@ -4288,7 +4356,7 @@
 $(PYTHON_BOOTSTRAP) $(gnt_scripts) $(gnt_python_sbin_SCRIPTS): Makefile | stamp-directories
 	test -n "$(MODULE)" || { echo Missing module; exit 1; }
 	set -e; \
-	{ echo '#!/usr/bin/python'; \
+	{ echo '#!${PYTHON}'; \
 	  echo '# This file is automatically generated, do not edit!'; \
 	  echo "# Edit $(MODULE) instead."; \
 	  echo; \
@@ -4370,7 +4438,8 @@
 .PHONY: check-local
 check-local: check-dirs check-news $(GENERATED_FILES)
 	$(CHECK_PYTHON_CODE) $(check_python_code)
-	PYTHONPATH=. $(CHECK_HEADER) $(check_python_code)
+	PYTHONPATH=. $(CHECK_HEADER) \
+	    $(filter-out $(GENERATED_FILES),$(check_python_code))
 	$(CHECK_VERSION) $(VERSION) $(top_srcdir)/NEWS
 	PYTHONPATH=. $(RUN_IN_TEMPDIR) $(CURDIR)/$(CHECK_IMPORTS) . $(standalone_python_modules)
 	error= ; \
@@ -4416,6 +4485,14 @@
 	@rm -f htest.tix
 	./test/hs/htest
 
+.PHONY: py-tests
+py-tests: $(python_tests) ganeti $(built_python_sources)
+	error=; \
+	for file in $(python_tests); \
+	  do if ! $(TESTS_ENVIRONMENT) $$file; then error=1; fi; \
+	done; \
+	test -z "$$error"
+
 .PHONY: hs-shell-%
 hs-shell-%: test/hs/hpc-htools test/hs/hpc-mon-collector \
             $(HS_BUILT_TEST_HELPERS)
@@ -4622,10 +4699,11 @@
 	  $(HS_LIBTESTBUILT_SRCS)
 
 .PHONY: TAGS
-TAGS: $(GENERATED_FILES)
+TAGS: $(GENERATED_FILES) hs-pkg-versions
 	rm -f TAGS
 	$(GHC) -e ":etags TAGS_hs" -v0 \
 	  $(filter-out -O -Werror,$(HFLAGS)) \
+	  $(shell cat hs-pkg-versions) \
 		-osuf tags.o \
 		-hisuf tags.hi \
     -lcurl \
@@ -4715,6 +4793,11 @@
 
 -include ./Makefile.local
 
+# support inspecting the value of a make variable
+
+print-%:
+	@echo $($*)
+
 # vim: set noet :
 
 # Tell versions [3.59,3.63) of GNU make to not export all variables.
diff -Nru ganeti-2.12.0/man/gnt-backup.8.in ganeti-2.12.3/man/gnt-backup.8.in
diff -Nru ganeti-2.12.0/man/gnt-backup.gen ganeti-2.12.3/man/gnt-backup.gen
diff -Nru ganeti-2.12.0/man/gnt-backup.html.in ganeti-2.12.3/man/gnt-backup.html.in
diff -Nru ganeti-2.12.0/man/gnt-backup.rst ganeti-2.12.3/man/gnt-backup.rst
diff -Nru ganeti-2.12.0/man/gnt-cluster.8.in ganeti-2.12.3/man/gnt-cluster.8.in
diff -Nru ganeti-2.12.0/man/gnt-cluster.gen ganeti-2.12.3/man/gnt-cluster.gen
diff -Nru ganeti-2.12.0/man/gnt-cluster.html.in ganeti-2.12.3/man/gnt-cluster.html.in
diff -Nru ganeti-2.12.0/man/gnt-cluster.rst ganeti-2.12.3/man/gnt-cluster.rst
diff -Nru ganeti-2.12.0/man/gnt-instance.8.in ganeti-2.12.3/man/gnt-instance.8.in
diff -Nru ganeti-2.12.0/man/gnt-instance.gen ganeti-2.12.3/man/gnt-instance.gen
diff -Nru ganeti-2.12.0/man/gnt-instance.html.in ganeti-2.12.3/man/gnt-instance.html.in
diff -Nru ganeti-2.12.0/man/gnt-instance.rst ganeti-2.12.3/man/gnt-instance.rst
diff -Nru ganeti-2.12.0/NEWS ganeti-2.12.3/NEWS
--- ganeti-2.12.0/NEWS	2014-10-10 11:10:35.000000000 +0300
+++ ganeti-2.12.3/NEWS	2015-04-29 11:09:35.000000000 +0300
@@ -2,6 +2,123 @@
 ====
 
 
+Version 2.12.3
+--------------
+
+*(Released Wed, 29 Apr 2015)*
+
+- Fixed Issue #1019: upgrade from 2.6.2 to 2.12 fails. cfgupgrade
+  doesn't migrate the config.data file properly
+- Fixed Issue 1023: Master master-capable option bug
+- Fixed Issue 1068: gnt-network info outputs wrong external reservations
+- Fixed Issue 1070: Upgrade of Ganeti 2.5.2 to 2.12.0 fails due to
+  missing UUIDs for disks
+- Fixed Issue 1073: ssconf_hvparams_* not distributed with ssconf
+
+Inherited from the 2.11 branch:
+
+- Fixed Issue 1032: Renew-crypto --new-node-certificates sometimes does not
+  complete.
+  The operation 'gnt-cluster renew-crypto --new-node-certificates' is
+  now more robust against intermitten reachability errors. Nodes that
+  are temporarily not reachable, are contacted with several retries.
+  Nodes which are marked as offline are omitted right away.
+
+Inherited from the 2.10 branch:
+
+- Fixed Issue 1057: master-failover succeeds, but IP remains assigned to
+  old master
+- Fixed Issue 1058: Python's os.minor() does not support devices with
+  high minor numbers
+- Fixed Issue 1059: Luxid fails if DNS returns an IPv6 address that does
+  not reverse resolve
+
+Known issues
+~~~~~~~~~~~~
+
+Pending since 2.12.2:
+
+- GHC 7.8 introduced some incompatible changes, so currently Ganeti
+  2.12. doesn't compile on GHC 7.8
+- Under certain conditions instance doesn't get unpaused after live
+  migration (issue #1050)
+- GlusterFS support breaks at upgrade to 2.12 - switches back to
+  shared-file (issue #1030)
+
+
+Version 2.12.2
+--------------
+
+*(Released Wed, 25 Mar 2015)*
+
+- Support for the lens Haskell library up to version 4.7 (issue #1028)
+- SSH keys are now distributed only to master and master candidates
+  (issue #377)
+- Improved performance for operations that frequently read the
+  cluster configuration
+- Improved robustness of spawning job processes that occasionally caused
+  newly-started jobs to timeout
+- Fixed race condition during cluster verify which occasionally caused
+  it to fail
+
+Inherited from the 2.11 branch:
+
+- Fix failing automatic glusterfs mounts (issue #984)
+- Fix watcher failing to read its status file after an upgrade
+  (issue #1022)
+- Improve Xen instance state handling, in particular of somewhat exotic
+  transitional states
+
+Inherited from the 2.10 branch:
+
+- Fix failing to change a diskless drbd instance to plain
+  (issue #1036)
+- Fixed issues with auto-upgrades from pre-2.6
+  (hv_state_static and disk_state_static)
+- Fix memory leak in the monitoring daemon
+
+Inherited from the 2.9 branch:
+
+- Fix file descriptor leak in Confd client
+
+Known issues
+~~~~~~~~~~~~
+
+- GHC 7.8 introduced some incompatible changes, so currently Ganeti
+  2.12. doesn't compile on GHC 7.8
+- Under certain conditions instance doesn't get unpaused after live
+  migration (issue #1050)
+- GlusterFS support breaks at upgrade to 2.12 - switches back to
+  shared-file (issue #1030)
+
+
+Version 2.12.1
+--------------
+
+*(Released Wed, 14 Jan 2015)*
+
+- Fix users under which the wconfd and metad daemons run (issue #976)
+- Clean up stale livelock files (issue #865)
+- Fix setting up the metadata daemon's network interface for Xen
+- Make watcher identify itself on disk activation
+- Add "ignore-ipolicy" option to gnt-instance grow-disk
+- Check disk size ipolicy during "gnt-instance grow-disk" (issue #995)
+
+Inherited from the 2.11 branch:
+
+- Fix counting votes when doing master failover (issue #962)
+- Fix broken haskell dependencies (issues #758 and #912)
+- Check if IPv6 is used directly when running SSH (issue #892)
+
+Inherited from the 2.10 branch:
+
+- Fix typo in gnt_cluster output (issue #1015)
+- Use the Python path detected at configure time in the top-level Python
+  scripts.
+- Fix check for sphinx-build from python2-sphinx
+- Properly check if an instance exists in 'gnt-instance console'
+
+
 Version 2.12.0
 --------------
 
@@ -173,6 +290,17 @@
 are listed in the latest 2.12 entry.
 
 
+Version 2.11.7
+--------------
+
+*(Released Fri, 17 Apr 2015)*
+
+- The operation 'gnt-cluster renew-crypto --new-node-certificates' is
+  now more robust against intermitten reachability errors. Nodes that
+  are temporarily not reachable, are contacted with several retries.
+  Nodes which are marked as offline are omitted right away.
+
+
 Version 2.11.6
 --------------
 
diff -Nru ganeti-2.12.0/qa/ganeti-qa.py ganeti-2.12.3/qa/ganeti-qa.py
diff -Nru ganeti-2.12.0/qa/qa_cluster.py ganeti-2.12.3/qa/qa_cluster.py
diff -Nru ganeti-2.12.0/qa/qa_instance.py ganeti-2.12.3/qa/qa_instance.py
diff -Nru ganeti-2.12.0/qa/qa_job_utils.py ganeti-2.12.3/qa/qa_job_utils.py
diff -Nru ganeti-2.12.0/qa/qa_utils.py ganeti-2.12.3/qa/qa_utils.py
diff -Nru ganeti-2.12.0/src/Ganeti/BasicTypes.hs ganeti-2.12.3/src/Ganeti/BasicTypes.hs
--- ganeti-2.12.0/src/Ganeti/BasicTypes.hs	2014-10-09 14:57:28.000000000 +0300
+++ ganeti-2.12.3/src/Ganeti/BasicTypes.hs	2015-04-29 11:09:35.000000000 +0300
@@ -2,6 +2,8 @@
 {-# LANGUAGE FlexibleContexts #-}
 {-# LANGUAGE MultiParamTypeClasses #-}
 {-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE UndecidableInstances #-}
+{-# LANGUAGE CPP #-}
 
 {-
 
@@ -44,6 +46,7 @@
   , toError
   , toErrorBase
   , toErrorStr
+  , tryError
   , Error(..) -- re-export from Control.Monad.Error
   , MonadIO(..) -- re-export from Control.Monad.IO.Class
   , isOk
@@ -72,6 +75,14 @@
   , emptyListSet
   ) where
 
+-- The following macro is just a temporary solution for 2.12 and 2.13.
+-- Since 2.14 cabal creates proper macros for all dependencies.
+#define MIN_VERSION_monad_control(maj,min,rev) \
+  (((maj)<MONAD_CONTROL_MAJOR)|| \
+   (((maj)==MONAD_CONTROL_MAJOR)&&((min)<=MONAD_CONTROL_MINOR))|| \
+   (((maj)==MONAD_CONTROL_MAJOR)&&((min)==MONAD_CONTROL_MINOR)&& \
+    ((rev)<=MONAD_CONTROL_REV)))
+
 import Control.Applicative
 import Control.Exception (try)
 import Control.Monad
@@ -196,18 +207,33 @@
                    . (try :: IO a -> IO (Either IOError a))
 
 instance (Error a) => MonadTransControl (ResultT a) where
+#if MIN_VERSION_monad_control(1,0,0)
+-- Needs Undecidable instances
+  type StT (ResultT a) b = GenericResult a b
+  liftWith f = ResultT . liftM return $ f runResultT
+  restoreT = ResultT
+#else
   newtype StT (ResultT a) b = StResultT { runStResultT :: GenericResult a b }
   liftWith f = ResultT . liftM return $ f (liftM StResultT . runResultT)
   restoreT = ResultT . liftM runStResultT
+#endif
   {-# INLINE liftWith #-}
   {-# INLINE restoreT #-}
 
 instance (Error a, MonadBaseControl IO m)
          => MonadBaseControl IO (ResultT a m) where
+#if MIN_VERSION_monad_control(1,0,0)
+-- Needs Undecidable instances
+  type StM (ResultT a m) b
+    = ComposeSt (ResultT a) m b
+  liftBaseWith = defaultLiftBaseWith
+  restoreM = defaultRestoreM
+#else
   newtype StM (ResultT a m) b
     = StMResultT { runStMResultT :: ComposeSt (ResultT a) m b }
   liftBaseWith = defaultLiftBaseWith StMResultT
   restoreM = defaultRestoreM runStMResultT
+#endif
   {-# INLINE liftBaseWith #-}
   {-# INLINE restoreM #-}
 
@@ -251,6 +277,13 @@
 toErrorStr :: (MonadError e m, Error e) => Result a -> m a
 toErrorStr = withError strMsg
 
+-- | Run a given computation and if an error occurs, return it as `Left` of
+-- `Either`.
+-- This is a generalized version of 'try'.
+tryError :: (MonadError e m) => m a -> m (Either e a)
+tryError = flip catchError (return . Left) . liftM Right
+{-# INLINE tryError #-}
+
 -- | Converts a monadic result with a 'String' message into
 -- a 'ResultT' with an arbitrary 'Error'.
 --
diff -Nru ganeti-2.12.0/src/Ganeti/Confd/Client.hs ganeti-2.12.3/src/Ganeti/Confd/Client.hs
--- ganeti-2.12.0/src/Ganeti/Confd/Client.hs	2014-10-06 16:20:35.000000000 +0300
+++ ganeti-2.12.3/src/Ganeti/Confd/Client.hs	2015-04-22 20:10:50.000000000 +0300
@@ -38,6 +38,7 @@
   ) where
 
 import Control.Concurrent
+import Control.Exception (bracket)
 import Control.Monad
 import Data.List
 import Data.Maybe
@@ -130,9 +131,10 @@
   addr <- resolveAddr (fromIntegral port) host
   (af_family, sockaddr) <-
     exitIfBad "Unable to resolve the IP address" addr
-  s <- S.socket af_family S.Datagram S.defaultProtocol
-  _ <- S.sendTo s completeMsg sockaddr
-  replyMsg <- S.recv s C.maxUdpDataSize
+  replyMsg <- bracket (S.socket af_family S.Datagram S.defaultProtocol) S.sClose
+                $ \s -> do
+    _ <- S.sendTo s completeMsg sockaddr
+    S.recv s C.maxUdpDataSize
   parsedReply <-
     if C.confdMagicFourcc `isPrefixOf` replyMsg
       then return . parseReply hmac (drop 4 replyMsg) $ confdRqRsalt request
diff -Nru ganeti-2.12.0/src/Ganeti/Confd/Server.hs ganeti-2.12.3/src/Ganeti/Confd/Server.hs
--- ganeti-2.12.0/src/Ganeti/Confd/Server.hs	2014-10-09 14:57:28.000000000 +0300
+++ ganeti-2.12.3/src/Ganeti/Confd/Server.hs	2015-04-29 11:09:35.000000000 +0300
@@ -310,6 +310,7 @@
 prepMain :: PrepFn (S.Family, S.SockAddr) PrepResult
 prepMain _ (af_family, bindaddr) = do
   s <- S.socket af_family S.Datagram S.defaultProtocol
+  S.setSocketOption s S.ReuseAddr 1
   S.bindSocket s bindaddr
   cref <- newIORef (Bad "Configuration not yet loaded")
   return (s, cref)
diff -Nru ganeti-2.12.0/src/Ganeti/Config.hs ganeti-2.12.3/src/Ganeti/Config.hs
--- ganeti-2.12.0/src/Ganeti/Config.hs	2014-10-09 14:57:28.000000000 +0300
+++ ganeti-2.12.3/src/Ganeti/Config.hs	2015-04-29 11:09:35.000000000 +0300
@@ -311,7 +311,7 @@
 getFilledInstHvParams :: [String] -> ConfigData -> Instance -> HvParams
 getFilledInstHvParams globals cfg inst =
   -- First get the defaults of the parent
-  let hvName = hypervisorToRaw . instHypervisor $ inst
+  let hvName = instHypervisor inst
       hvParamMap = fromContainer . clusterHvparams $ configCluster cfg
       parentHvParams = maybe M.empty fromContainer $ M.lookup hvName hvParamMap
   -- Then the os defaults for the given hypervisor
diff -Nru ganeti-2.12.0/src/Ganeti/Constants.hs ganeti-2.12.3/src/Ganeti/Constants.hs
--- ganeti-2.12.0/src/Ganeti/Constants.hs	2014-10-09 14:57:28.000000000 +0300
+++ ganeti-2.12.3/src/Ganeti/Constants.hs	2015-04-29 11:09:35.000000000 +0300
@@ -4126,6 +4126,10 @@
 wconfdDefRwto :: Int
 wconfdDefRwto = 60
 
+-- | The prefix of the WConfD livelock file name
+wconfdLivelockPrefix :: String
+wconfdLivelockPrefix = "wconf-daemon"
+
 -- * Confd
 
 confdProtocolVersion :: Int
diff -Nru ganeti-2.12.0/src/Ganeti/Daemon.hs ganeti-2.12.3/src/Ganeti/Daemon.hs
--- ganeti-2.12.0/src/Ganeti/Daemon.hs	2014-10-08 15:45:38.000000000 +0300
+++ ganeti-2.12.3/src/Ganeti/Daemon.hs	2015-04-28 15:47:28.000000000 +0300
@@ -340,10 +340,10 @@
 vClusterHostNameEnvVar = "GANETI_HOSTNAME"
 
 -- | Get the real full qualified host name.
-getFQDN' :: IO String
-getFQDN' = do
+getFQDN' :: Maybe Socket.AddrInfo -> IO String
+getFQDN' hints = do
   hostname <- getHostName
-  addrInfos <- Socket.getAddrInfo Nothing (Just hostname) Nothing
+  addrInfos <- Socket.getAddrInfo hints (Just hostname) Nothing
   let address = listToMaybe addrInfos >>= (Just . Socket.addrAddress)
   case address of
     Just a -> do
@@ -351,9 +351,10 @@
       return (fromMaybe hostname fqdn)
     Nothing -> return hostname
 
--- | Return the full qualified host name, honoring the vcluster setup.
-getFQDN :: IO String
-getFQDN = do
+-- | Return the full qualified host name, honoring the vcluster setup
+-- and hints on the preferred socket type or protocol.
+getFQDNwithHints :: Maybe Socket.AddrInfo -> IO String
+getFQDNwithHints hints = do
   let ioErrorToNothing :: IOError -> IO (Maybe String)
       ioErrorToNothing _ = return Nothing
   vcluster_node <- Control.Exception.catch
@@ -361,7 +362,16 @@
                      ioErrorToNothing
   case vcluster_node of
     Just node_name -> return node_name
-    Nothing -> getFQDN'
+    Nothing -> getFQDN' hints
+
+-- | Return the full qualified host name, honoring the vcluster setup.
+getFQDN :: IO String
+getFQDN = do
+  familyresult <- Ssconf.getPrimaryIPFamily Nothing
+  getFQDNwithHints
+    $ genericResult (const Nothing)
+        (\family -> Just $ Socket.defaultHints { Socket.addrFamily = family })
+        familyresult
 
 -- | Returns if the current node is the master node.
 isMaster :: IO Bool
diff -Nru ganeti-2.12.0/src/Ganeti/DataCollectors/Types.hs ganeti-2.12.3/src/Ganeti/DataCollectors/Types.hs
--- ganeti-2.12.0/src/Ganeti/DataCollectors/Types.hs	2014-10-09 14:57:28.000000000 +0300
+++ ganeti-2.12.3/src/Ganeti/DataCollectors/Types.hs	2015-04-29 11:09:35.000000000 +0300
@@ -49,6 +49,8 @@
   , getCategoryName
   ) where
 
+import Control.DeepSeq (NFData, rnf)
+import Control.Seq (using, seqFoldable, rdeepseq)
 import Data.Char
 import Data.Ratio
 import qualified Data.Map as Map
@@ -135,9 +137,28 @@
     then Ok DCVerBuiltin else Ok . DCVersion $ fromJSString s
   readJSON v = fail $ "Invalid JSON value " ++ show v ++ " for type DCVersion"
 
--- | Type for the value field of the above map.
+-- | Type for the value field of the `CollectorMap` below.
 data CollectorData = CPULoadData (Seq.Seq (Integer, [Int]))
 
+{-
+
+Naturally, we want to make CollectorData an instance of NFData as
+follows.
+
+instance NFData CollectorData where
+  rnf (CPULoadData x) = rnf x
+
+However, Seq.Seq only became an instance of NFData in version 0.5.0.0
+of containers (Released 2012). So, for the moment, we use a generic
+way to reduce to normal form. In later versions of Ganeti, where we
+have the infra structure to do so, we will choose implementation depending
+on the version of the containers library available.
+
+-}
+
+instance NFData CollectorData where
+  rnf (CPULoadData x) =  (x `using` seqFoldable rdeepseq) `seq` ()
+
 -- | Type for the map storing the data of the statefull DataCollectors.
 type CollectorMap = Map.Map String CollectorData
 
diff -Nru ganeti-2.12.0/src/Ganeti/HTools/CLI.hs ganeti-2.12.3/src/Ganeti/HTools/CLI.hs
--- ganeti-2.12.0/src/Ganeti/HTools/CLI.hs	2014-10-09 14:57:28.000000000 +0300
+++ ganeti-2.12.3/src/Ganeti/HTools/CLI.hs	2015-04-29 11:09:35.000000000 +0300
@@ -144,7 +144,7 @@
   , optAcceptExisting :: Bool        -- ^ accept existing N+1 violations
   , optMonD        :: Bool           -- ^ Query MonDs
   , optMonDFile    :: Maybe FilePath -- ^ Optional file with data provided
-                                     -- ^ by MonDs
+                                     -- by MonDs
   , optEvacMode    :: Bool           -- ^ Enable evacuation mode
   , optRestrictedMigrate :: Bool     -- ^ Disallow replace-primary moves
   , optExInst      :: [String]       -- ^ Instances to be excluded
diff -Nru ganeti-2.12.0/src/Ganeti/HTools/Cluster.hs ganeti-2.12.3/src/Ganeti/HTools/Cluster.hs
--- ganeti-2.12.0/src/Ganeti/HTools/Cluster.hs	2014-10-09 14:57:28.000000000 +0300
+++ ganeti-2.12.3/src/Ganeti/HTools/Cluster.hs	2015-04-29 11:09:35.000000000 +0300
@@ -940,7 +940,7 @@
       sortedSols = sortMGResults goodSols
   in case sortedSols of
        [] -> Bad $ if null groups'
-                     then "no groups for evacuation: allowed groups was" ++
+                     then "no groups for evacuation: allowed groups was " ++
                           show allowed_gdxs ++ ", all groups: " ++
                           show (map fst groups)
                      else intercalate ", " all_msgs
diff -Nru ganeti-2.12.0/src/Ganeti/HTools/Program/Hroller.hs ganeti-2.12.3/src/Ganeti/HTools/Program/Hroller.hs
--- ganeti-2.12.0/src/Ganeti/HTools/Program/Hroller.hs	2014-10-06 16:20:35.000000000 +0300
+++ ganeti-2.12.3/src/Ganeti/HTools/Program/Hroller.hs	2015-04-22 20:10:50.000000000 +0300
@@ -409,7 +409,7 @@
                            sortBy (flip compare `on` length . fst) $
                            nodesRebootGroups
       confToMoveNames =
-        map (Instance.name *** (Node.name *** flip (>>=) (return . Node.name)))
+        map (Instance.name *** (Node.name *** (=<<) (return . Node.name)))
         . getMoves (nlf, ilf)
       namesAndMoves = map (map Node.name *** confToMoveNames) outputRebootGroups
 
diff -Nru ganeti-2.12.0/src/Ganeti/Hypervisor/Xen/Types.hs ganeti-2.12.3/src/Ganeti/Hypervisor/Xen/Types.hs
--- ganeti-2.12.0/src/Ganeti/Hypervisor/Xen/Types.hs	2014-10-06 16:20:35.000000000 +0300
+++ ganeti-2.12.3/src/Ganeti/Hypervisor/Xen/Types.hs	2015-04-22 20:10:50.000000000 +0300
@@ -66,7 +66,7 @@
 -- | Instance of FromLispConfig for Int.
 instance FromLispConfig Int where
   fromLispConfig (LCDouble d) = Ok $ floor d
-  fromLispConfig (LCList (LCString _:LCDouble d:[])) = Ok $ floor d
+  fromLispConfig (LCList [LCString _, LCDouble d]) = Ok $ floor d
   fromLispConfig c =
     Bad $ "Unable to extract a Int from this configuration: "
       ++ show c
@@ -74,7 +74,7 @@
 -- | Instance of FromLispConfig for Double.
 instance FromLispConfig Double where
   fromLispConfig (LCDouble d) = Ok d
-  fromLispConfig (LCList (LCString _:LCDouble d:[])) = Ok d
+  fromLispConfig (LCList [LCString _, LCDouble d]) = Ok d
   fromLispConfig c =
     Bad $ "Unable to extract a Double from this configuration: "
       ++ show c
@@ -82,7 +82,7 @@
 -- | Instance of FromLispConfig for String
 instance FromLispConfig String where
   fromLispConfig (LCString s) = Ok s
-  fromLispConfig (LCList (LCString _:LCString s:[])) = Ok s
+  fromLispConfig (LCList [LCString _, LCString s]) = Ok s
   fromLispConfig c =
     Bad $ "Unable to extract a String from this configuration: "
       ++ show c
diff -Nru ganeti-2.12.0/src/Ganeti/JSON.hs ganeti-2.12.3/src/Ganeti/JSON.hs
--- ganeti-2.12.0/src/Ganeti/JSON.hs	2014-10-09 14:57:28.000000000 +0300
+++ ganeti-2.12.3/src/Ganeti/JSON.hs	2015-04-29 11:09:35.000000000 +0300
@@ -68,6 +68,7 @@
   , ArrayObject(..)
   , HasStringRepr(..)
   , GenericContainer(..)
+  , emptyContainer
   , Container
   , MaybeForJSON(..)
   , TimeAsDoubleJSON(..)
@@ -327,6 +328,10 @@
 instance F.Traversable (GenericContainer a) where
   traverse f = fmap GenericContainer . F.traverse f . fromContainer
 
+-- | The empty container.
+emptyContainer :: GenericContainer a b
+emptyContainer = GenericContainer Map.empty
+
 -- | Type alias for string keys.
 type Container = GenericContainer String
 
diff -Nru ganeti-2.12.0/src/Ganeti/Lens.hs ganeti-2.12.3/src/Ganeti/Lens.hs
--- ganeti-2.12.0/src/Ganeti/Lens.hs	2014-10-07 17:45:37.000000000 +0300
+++ ganeti-2.12.3/src/Ganeti/Lens.hs	2015-04-28 18:05:35.000000000 +0300
@@ -1,4 +1,4 @@
-{-# LANGUAGE RankNTypes #-}
+{-# LANGUAGE RankNTypes, CPP #-}
 
 {-| Provides all lens-related functions.
 
@@ -44,6 +44,14 @@
   , atSet
   ) where
 
+
+-- The following macro is just a temporary solution for 2.12 and 2.13.
+-- Since 2.14 cabal creates proper macros for all dependencies.
+#define MIN_VERSION_lens(maj,min,rev) \
+  (((maj)<LENS_MAJOR)|| \
+   (((maj)==LENS_MAJOR)&&((min)<=LENS_MINOR))|| \
+   (((maj)==LENS_MAJOR)&&((min)==LENS_MINOR)&&((rev)<=LENS_REV)))
+
 import Control.Applicative ((<$>), WrappedMonad(..))
 import Control.Lens
 import Control.Monad
@@ -64,8 +72,19 @@
 makeCustomLensesFiltered f = makeLensesWith customRules
   where
     customRules :: LensRules
-    customRules = set lensField (fmap lensFieldName . mfilter f . Just)
-                      defaultRules
+    customRules = set lensField nameFun lensRules
+#if MIN_VERSION_lens(4,5,0)
+    nameFun :: Name -> [Name] -> Name -> [DefName]
+    nameFun _ _ = liftM (TopName . mkName) . nameFilter . nameBase
+#elif MIN_VERSION_lens(4,4,0)
+    nameFun :: [Name] -> Name -> [DefName]
+    nameFun _ = liftM (TopName . mkName) . nameFilter . nameBase
+#else
+    nameFun :: String -> Maybe String
+    nameFun = nameFilter
+#endif
+    nameFilter :: (MonadPlus m) => String -> m String
+    nameFilter = liftM lensFieldName . mfilter f . return
 
 -- | Create lenses for all fields of a given data type.
 makeCustomLenses :: Name -> Q [Dec]
@@ -93,7 +112,7 @@
 mapMOf2 k f = unwrapMonad . traverseOf2 k (WrapMonad . f)
 
 -- | A helper lens over sets.
--- While a similar lens exists in the package (as @Lens' Set (Maybe ())@@),
+-- While a similar lens exists in the package (as @Lens' Set (Maybe ())@),
 -- it's available only in most recent versions.
 -- And using @Bool@ instead of @Maybe ()@ is more convenient.
 atSet :: (Ord a) => a -> Lens' (S.Set a) Bool
diff -Nru ganeti-2.12.0/src/Ganeti/Logging/WriterLog.hs ganeti-2.12.3/src/Ganeti/Logging/WriterLog.hs
--- ganeti-2.12.0/src/Ganeti/Logging/WriterLog.hs	2014-10-09 14:57:28.000000000 +0300
+++ ganeti-2.12.3/src/Ganeti/Logging/WriterLog.hs	2015-04-29 11:09:35.000000000 +0300
@@ -1,5 +1,5 @@
 {-# LANGUAGE FlexibleInstances, FlexibleContexts, TypeFamilies,
-             MultiParamTypeClasses #-}
+             MultiParamTypeClasses, UndecidableInstances, CPP #-}
 
 {-| A pure implementation of MonadLog using MonadWriter
 
@@ -45,6 +45,14 @@
   , execWriterLog
   ) where
 
+-- The following macro is just a temporary solution for 2.12 and 2.13.
+-- Since 2.14 cabal creates proper macros for all dependencies.
+#define MIN_VERSION_monad_control(maj,min,rev) \
+  (((maj)<MONAD_CONTROL_MAJOR)|| \
+   (((maj)==MONAD_CONTROL_MAJOR)&&((min)<=MONAD_CONTROL_MINOR))|| \
+   (((maj)==MONAD_CONTROL_MAJOR)&&((min)==MONAD_CONTROL_MINOR)&& \
+    ((rev)<=MONAD_CONTROL_REV)))
+
 import Control.Applicative
 import Control.Monad
 import Control.Monad.Base
@@ -132,19 +140,35 @@
   lift = WriterLogT . lift
 
 instance MonadTransControl WriterLogT where
+#if MIN_VERSION_monad_control(1,0,0)
+-- Needs Undecidable instances
+    type StT WriterLogT a = (a, LogSeq)
+    liftWith f = WriterLogT . WriterT $ liftM (\x -> (x, mempty))
+                              (f runWriterLogT)
+    restoreT = WriterLogT . WriterT
+#else
     newtype StT WriterLogT a =
       StWriterLog { unStWriterLog :: (a, LogSeq) }
     liftWith f = WriterLogT . WriterT $ liftM (\x -> (x, mempty))
                               (f $ liftM StWriterLog . runWriterLogT)
     restoreT = WriterLogT . WriterT . liftM unStWriterLog
+#endif
     {-# INLINE liftWith #-}
     {-# INLINE restoreT #-}
 
 instance (MonadBaseControl IO m)
          => MonadBaseControl IO (WriterLogT m) where
+#if MIN_VERSION_monad_control(1,0,0)
+-- Needs Undecidable instances
+  type StM (WriterLogT m) a
+    = ComposeSt WriterLogT m a
+  liftBaseWith = defaultLiftBaseWith
+  restoreM = defaultRestoreM
+#else
   newtype StM (WriterLogT m) a
     = StMWriterLog { runStMWriterLog :: ComposeSt WriterLogT m a }
   liftBaseWith = defaultLiftBaseWith StMWriterLog
   restoreM = defaultRestoreM runStMWriterLog
+#endif
   {-# INLINE liftBaseWith #-}
   {-# INLINE restoreM #-}
diff -Nru ganeti-2.12.0/src/Ganeti/Metad/Config.hs ganeti-2.12.3/src/Ganeti/Metad/Config.hs
--- ganeti-2.12.0/src/Ganeti/Metad/Config.hs	2014-10-07 17:45:37.000000000 +0300
+++ ganeti-2.12.3/src/Ganeti/Metad/Config.hs	2015-04-22 20:10:50.000000000 +0300
@@ -71,8 +71,9 @@
 -- data structure containing all parameters and their visibility.
 --
 -- Example:
---   { "os-image": ["http://example.com/disk.img", "public"],
---     "os-password": ["mypassword", "secret"] }
+--
+-- > { "os-image": ["http://example.com/disk.img", "public"],
+-- >   "os-password": ["mypassword", "secret"] }
 makeInstanceParams
   :: JSObject JSValue -> JSObject JSValue -> JSObject JSValue -> JSValue
 makeInstanceParams pub priv sec =
diff -Nru ganeti-2.12.0/src/Ganeti/Metad/ConfigServer.hs ganeti-2.12.3/src/Ganeti/Metad/ConfigServer.hs
--- ganeti-2.12.0/src/Ganeti/Metad/ConfigServer.hs	2014-10-07 17:45:37.000000000 +0300
+++ ganeti-2.12.3/src/Ganeti/Metad/ConfigServer.hs	2015-04-28 15:47:28.000000000 +0300
@@ -38,11 +38,10 @@
 import Control.Exception (try, finally)
 import Control.Monad (unless)
 import Text.JSON
-import System.FilePath ((</>))
 import System.IO.Error (isEOFError)
 
 import Ganeti.Path as Path
-import Ganeti.Daemon (DaemonOptions)
+import Ganeti.Daemon (DaemonOptions, cleanupSocket, describeError)
 import qualified Ganeti.Logging as Logging
 import Ganeti.Runtime (GanetiDaemon(..))
 import Ganeti.UDSServer (Client, ConnectConfig(..), Server, ServerConfig(..))
@@ -51,11 +50,6 @@
 import Ganeti.Metad.Config as Config
 import Ganeti.Metad.Types (InstanceParams)
 
-metadSocket :: IO FilePath
-metadSocket =
-  do dir <- Path.socketDir
-     return $ dir </> "ganeti-metad"
-
 -- | Update the configuration with the received instance parameters.
 updateConfig :: MVar InstanceParams -> String -> IO ()
 updateConfig config str =
@@ -97,8 +91,11 @@
      acceptClients config server
 
 start :: DaemonOptions -> MVar InstanceParams -> IO ()
-start _ config =
-  do server <- UDSServer.connectServer metadConfig True =<< metadSocket
+start _ config = do
+     socket_path <- Path.defaultMetadSocket
+     cleanupSocket socket_path
+     server <- describeError "binding to the socket" Nothing (Just socket_path)
+               $ UDSServer.connectServer metadConfig True socket_path
      finally
        (acceptClients config server)
        (UDSServer.closeServer server)
diff -Nru ganeti-2.12.0/src/Ganeti/Monitoring/Server.hs ganeti-2.12.3/src/Ganeti/Monitoring/Server.hs
--- ganeti-2.12.0/src/Ganeti/Monitoring/Server.hs	2014-10-09 14:57:28.000000000 +0300
+++ ganeti-2.12.3/src/Ganeti/Monitoring/Server.hs	2015-04-29 11:09:35.000000000 +0300
@@ -41,6 +41,8 @@
   ) where
 
 import Control.Applicative
+import Control.DeepSeq (force)
+import Control.Exception.Base (evaluate)
 import Control.Monad
 import Control.Monad.IO.Class
 import Data.ByteString.Char8 hiding (map, filter, find)
@@ -252,6 +254,7 @@
       let name = dName collector
           existing = Map.lookup name m
       new_data <- update existing
+      _ <- evaluate $ force new_data
       return $ Map.insert name new_data m
 
 -- | Invokes collect for each data collector.
diff -Nru ganeti-2.12.0/src/Ganeti/Objects.hs ganeti-2.12.3/src/Ganeti/Objects.hs
--- ganeti-2.12.0/src/Ganeti/Objects.hs	2014-10-09 14:57:28.000000000 +0300
+++ ganeti-2.12.3/src/Ganeti/Objects.hs	2015-04-29 11:09:35.000000000 +0300
@@ -354,7 +354,7 @@
   showsPrec _ (LogicalVolume g v) =
     showString g . showString "/" . showString v
 
--- | Check the constraints for a VG/LV names (except the @/dev/@ check).
+-- | Check the constraints for a VG/LV names (except the @\/dev\/@ check).
 instance Validatable LogicalVolume where
   validate (LogicalVolume g v) = do
       let vgn = "Volume group name"
@@ -761,7 +761,7 @@
 ipFamilyToVersion IpFamilyV6 = C.ip6Version
 
 -- | Cluster HvParams (hvtype to hvparams mapping).
-type ClusterHvParams = Container HvParams
+type ClusterHvParams = GenericContainer Hypervisor HvParams
 
 -- | Cluster Os-HvParams (os to hvparams mapping).
 type OsHvParams = Container ClusterHvParams
@@ -848,8 +848,10 @@
   , simpleField "primary_ip_family"              [t| IpFamily               |]
   , simpleField "prealloc_wipe_disks"            [t| Bool                   |]
   , simpleField "ipolicy"                        [t| FilledIPolicy          |]
-  , simpleField "hv_state_static"                [t| HypervisorState        |]
-  , simpleField "disk_state_static"              [t| DiskState              |]
+  , defaultField [| emptyContainer |] $
+    simpleField "hv_state_static"                [t| HypervisorState        |]
+  , defaultField [| emptyContainer |] $
+    simpleField "disk_state_static"              [t| DiskState              |]
   , simpleField "enabled_disk_templates"         [t| [DiskTemplate]         |]
   , simpleField "candidate_certs"                [t| CandidateCertificates  |]
   , simpleField "max_running_jobs"               [t| Int                    |]
diff -Nru ganeti-2.12.0/src/Ganeti/OpCodes.hs ganeti-2.12.3/src/Ganeti/OpCodes.hs
--- ganeti-2.12.0/src/Ganeti/OpCodes.hs	2014-10-09 14:57:28.000000000 +0300
+++ ganeti-2.12.3/src/Ganeti/OpCodes.hs	2015-04-29 11:09:35.000000000 +0300
@@ -692,6 +692,7 @@
      , pDiskIndex
      , pDiskChgAmount
      , pDiskChgAbsolute
+     , pIgnoreIpolicy
      ],
      "instance_name")
   , ("OpInstanceChangeGroup",
diff -Nru ganeti-2.12.0/src/Ganeti/Path.hs ganeti-2.12.3/src/Ganeti/Path.hs
--- ganeti-2.12.0/src/Ganeti/Path.hs	2014-10-07 17:45:37.000000000 +0300
+++ ganeti-2.12.3/src/Ganeti/Path.hs	2015-04-22 20:10:50.000000000 +0300
@@ -42,6 +42,7 @@
   , livelockFile
   , defaultQuerySocket
   , defaultWConfdSocket
+  , defaultMetadSocket
   , confdHmacKey
   , clusterConfFile
   , lockStatusFile
@@ -123,6 +124,10 @@
 defaultWConfdSocket :: IO FilePath
 defaultWConfdSocket = socketDir `pjoin` "ganeti-wconfd"
 
+-- | The default MetaD socket for communication.
+defaultMetadSocket :: IO FilePath
+defaultMetadSocket = socketDir `pjoin` "ganeti-metad"
+
 -- | Path to file containing confd's HMAC key.
 confdHmacKey :: IO FilePath
 confdHmacKey = dataDirP "hmac.key"
diff -Nru ganeti-2.12.0/src/Ganeti/Query/Common.hs ganeti-2.12.3/src/Ganeti/Query/Common.hs
--- ganeti-2.12.0/src/Ganeti/Query/Common.hs	2014-10-07 17:45:37.000000000 +0300
+++ ganeti-2.12.3/src/Ganeti/Query/Common.hs	2015-04-28 18:05:35.000000000 +0300
@@ -259,7 +259,7 @@
 getHvParamsFromCluster :: ConfigData -> Hypervisor -> HvParams
 getHvParamsFromCluster cfg hv =
   fromMaybe (GenericContainer Map.empty) .
-    Map.lookup (hypervisorToRaw hv) .
+    Map.lookup hv .
       fromContainer . clusterHvparams $ configCluster cfg
 
 -- | Given an alias list and a field list, copies field definitions under a
diff -Nru ganeti-2.12.0/src/Ganeti/Query/Exec.hs ganeti-2.12.3/src/Ganeti/Query/Exec.hs
--- ganeti-2.12.0/src/Ganeti/Query/Exec.hs	2014-10-09 14:57:28.000000000 +0300
+++ ganeti-2.12.3/src/Ganeti/Query/Exec.hs	2015-04-29 11:09:35.000000000 +0300
@@ -60,20 +60,19 @@
   , forkJobProcess
   ) where
 
-import Control.Concurrent
-import Control.Exception.Lifted (onException)
+import Control.Concurrent (rtsSupportsBoundThreads)
+import Control.Concurrent.Lifted (threadDelay)
 import Control.Monad
 import Control.Monad.Error
-import Control.Monad.Trans.Maybe
 import Data.Functor
 import qualified Data.Map as M
 import Data.Maybe (listToMaybe, mapMaybe)
 import System.Directory (getDirectoryContents)
 import System.Environment
-import System.IO.Error (tryIOError)
+import System.IO.Error (tryIOError, annotateIOError, modifyIOError)
 import System.Posix.Process
 import System.Posix.IO
-import System.Posix.Signals (sigTERM, signalProcess)
+import System.Posix.Signals (sigABRT, sigKILL, sigTERM, signalProcess)
 import System.Posix.Types (Fd, ProcessID)
 import System.Time
 import Text.Printf
@@ -114,6 +113,14 @@
     filterReadable :: (Read a) => [String] -> [a]
     filterReadable = mapMaybe (fmap fst . listToMaybe . reads)
 
+
+-- | Catches a potential `IOError` and sets its description via
+-- `annotateIOError`. This makes exceptions more informative when they
+-- are thrown from an unnamed `Handle`.
+rethrowAnnotateIOError :: String -> IO a -> IO a
+rethrowAnnotateIOError desc =
+  modifyIOError (\e -> annotateIOError e desc Nothing Nothing)
+
 -- Code that is executed in a @fork at -ed process and that the replaces iteself
 -- with the actual job process
 runJobProcess :: JobId -> Client -> IO ()
@@ -201,61 +208,69 @@
                   -- and process id in the job file
                -> ResultT e IO (FilePath, ProcessID)
 forkJobProcess jid luxiLivelock update = do
+  let jidStr = show . fromJobId $ jid
+
   logDebug $ "Setting the lockfile temporarily to " ++ luxiLivelock
+             ++ " for job " ++ jidStr
   update luxiLivelock
 
   -- Due to a bug in GHC forking process, we want to retry,
   -- if the forked process fails to start.
   -- If it fails later on, the failure is handled by 'ResultT'
   -- and no retry is performed.
-  let execWriterLogInside =
-        MaybeT . ResultT . execWriterLogT . runResultT . runMaybeT
-  resultOpt <- retryMaybeN C.luxidRetryForkCount
+  let execWriterLogInside = ResultT . execWriterLogT . runResultT
+  retryErrorN C.luxidRetryForkCount
                $ \tryNo -> execWriterLogInside $ do
     let maxWaitUS = 2^(tryNo - 1) * C.luxidRetryForkStepUS
     when (tryNo >= 2) . liftIO $ delayRandom (0, maxWaitUS)
 
     (pid, master) <- liftIO $ forkWithPipe connectConfig (runJobProcess jid)
 
+    let jobLogPrefix = "[start:job-" ++ jidStr ++ ",pid=" ++ show pid ++ "] "
+        logDebugJob = logDebug . (jobLogPrefix ++)
+
+    logDebugJob "Forked a new process"
+
+    let killIfAlive [] = return ()
+        killIfAlive (sig : sigs) = do
+          logDebugJob "Getting the status of the process"
+          status <- tryError . liftIO $ getProcessStatus False True pid
+          case status of
+            Left e -> logDebugJob $ "Job process already gone: " ++ show e
+            Right (Just s) -> logDebugJob $ "Child process status: " ++ show s
+            Right Nothing -> do
+                logDebugJob $ "Child process running, killing by " ++ show sig
+                liftIO $ signalProcess sig pid
+                unless (null sigs) $ do
+                  threadDelay 100000 -- wait for 0.1s and check again
+                  killIfAlive sigs
+
     let onError = do
-          logDebug "Closing the pipe to the client"
+          logDebugJob "Closing the pipe to the client"
           withErrorLogAt WARNING "Closing the communication pipe failed"
               (liftIO (closeClient master)) `orElse` return ()
-          logDebug $ "Getting the status of job process "
-                     ++ show (fromJobId jid)
-          status <- liftIO $ getProcessStatus False True pid
-          case status of
-            Just s -> logDebug $ "Child process (job " ++ show (fromJobId jid)
-                                  ++ ") status: " ++ show s
-            Nothing -> do
-                      logDebug $ "Child process (job " ++ show (fromJobId jid)
-                                  ++ ") running, killing by SIGTERM"
-                      liftIO $ signalProcess sigTERM pid
-
-    flip onException onError $ do
-      let recv = liftIO $ recvMsg master
-          send = liftIO . sendMsg master
-      logDebug "Getting the lockfile of the client"
-      lockfile <- recv `orElse` mzero
+          killIfAlive [sigTERM, sigABRT, sigKILL]
+
+    flip catchError (\e -> onError >> throwError e)
+      $ do
+      let annotatedIO msg k = do
+            logDebugJob msg
+            liftIO $ rethrowAnnotateIOError (jobLogPrefix ++ msg) k
+      let recv msg = annotatedIO msg (recvMsg master)
+          send msg x = annotatedIO msg (sendMsg master x)
 
-      logDebug $ "Setting the lockfile to the final " ++ lockfile
+      lockfile <- recv "Getting the lockfile of the client"
+
+      logDebugJob $ "Setting the lockfile to the final " ++ lockfile
       toErrorBase $ update lockfile
-      logDebug "Confirming the client it can start"
-      send ""
+      send "Confirming the client it can start" ""
 
       -- from now on, we communicate with the job's Python process
 
-      logDebug "Waiting for the job to ask for the job id"
-      _ <- recv
-      logDebug "Writing job id to the client"
-      send . show $ fromJobId jid
-
-      logDebug "Waiting for the job to ask for the lock file name"
-      _ <- recv
-      logDebug "Writing the lock file name to the client"
-      send lockfile
+      _ <- recv "Waiting for the job to ask for the job id"
+      send "Writing job id to the client" jidStr
 
-      return (lockfile, pid)
+      _ <- recv "Waiting for the job to ask for the lock file name"
+      send "Writing the lock file name to the client" lockfile
 
-  maybe (failError "Unable to start the client process\
-                   \ - fork timed out repeatedly") return resultOpt
+      return (lockfile, pid)
diff -Nru ganeti-2.12.0/src/Ganeti/Query/Instance.hs ganeti-2.12.3/src/Ganeti/Query/Instance.hs
--- ganeti-2.12.0/src/Ganeti/Query/Instance.hs	2014-10-07 17:45:37.000000000 +0300
+++ ganeti-2.12.3/src/Ganeti/Query/Instance.hs	2015-04-28 18:05:35.000000000 +0300
@@ -875,7 +875,7 @@
 getHypervisorSpecs cfg instances =
   let hvs = nub . map instHypervisor $ instances
       hvParamMap = (fromContainer . clusterHvparams . configCluster $ cfg)
-  in zip hvs . map ((Map.!) hvParamMap . hypervisorToRaw) $ hvs
+  in zip hvs . map ((Map.!) hvParamMap) $ hvs
 
 -- | Collect live data from RPC query if enabled.
 collectLiveData :: Bool        -- ^ Live queries allowed
diff -Nru ganeti-2.12.0/src/Ganeti/Query/Network.hs ganeti-2.12.3/src/Ganeti/Query/Network.hs
--- ganeti-2.12.0/src/Ganeti/Query/Network.hs	2014-10-07 17:45:37.000000000 +0300
+++ ganeti-2.12.3/src/Ganeti/Query/Network.hs	2015-04-28 18:05:35.000000000 +0300
@@ -44,11 +44,12 @@
 
 import qualified Data.Map as Map
 import Data.Maybe (fromMaybe, mapMaybe)
-import Data.List (find, foldl', intercalate)
+import Data.List (find, intercalate)
 
 import Ganeti.JSON
 import Ganeti.Network
 import Ganeti.Objects
+import qualified Ganeti.Objects.BitArray as BA
 import Ganeti.Query.Language
 import Ganeti.Query.Common
 import Ganeti.Query.Types
@@ -165,24 +166,17 @@
 -- | Computes the reservations list for a network.
 --
 -- This doesn't use the netmask for validation of the length, instead
--- simply iterating over the reservations string.
-getReservations :: Ip4Network -> String -> [Ip4Address]
-getReservations net =
-  reverse .
-  fst .
-  foldl' (\(accu, addr) c ->
-            let addr' = nextIp4Address addr
-                accu' = case c of
-                          '1' -> addr:accu
-                          '0' -> accu
-                          _ -> -- FIXME: the reservations string
-                               -- should be a proper type
-                               accu
-            in (accu', addr')) ([], ip4netAddr net)
+-- simply iterating over the reservations.
+getReservations :: Ip4Network -> Maybe AddressPool -> [Ip4Address]
+getReservations _ Nothing = []
+getReservations net (Just pool) =
+  map snd . filter fst
+  $ zip (BA.toList . apReservations $ pool)
+        (iterate nextIp4Address $ ip4netAddr net)
 
 -- | Computes the external reservations as string for a network.
 getExtReservationsString :: Network -> ResultEntry
 getExtReservationsString net =
   let addrs = getReservations (networkNetwork net)
-              (maybe "" show $ networkExtReservations net)
+                              (networkExtReservations net)
   in rsNormal . intercalate ", " $ map show addrs
diff -Nru ganeti-2.12.0/src/Ganeti/Query/Server.hs ganeti-2.12.3/src/Ganeti/Query/Server.hs
--- ganeti-2.12.0/src/Ganeti/Query/Server.hs	2014-10-09 14:57:28.000000000 +0300
+++ ganeti-2.12.3/src/Ganeti/Query/Server.hs	2015-04-29 11:09:35.000000000 +0300
@@ -495,4 +495,4 @@
 
   finally
     (forever $ U.listener (luxiHandler (qlock, jq, creader)) server)
-    (closeServer server)
+    (closeServer server >> removeFile qlockFile)
diff -Nru ganeti-2.12.0/src/Ganeti/Rpc.hs ganeti-2.12.3/src/Ganeti/Rpc.hs
--- ganeti-2.12.0/src/Ganeti/Rpc.hs	2014-10-07 17:45:37.000000000 +0300
+++ ganeti-2.12.3/src/Ganeti/Rpc.hs	2015-04-22 20:10:50.000000000 +0300
@@ -119,6 +119,7 @@
 import System.Posix.Files ( modificationTime, accessTime, fileOwner
                           , fileGroup, fileMode, getFileStatus)
 
+import Network.BSD (getServiceByName, servicePort)
 import Network.Curl hiding (content)
 import qualified Ganeti.Path as P
 
@@ -201,23 +202,22 @@
 isIpV6 = (':' `elem`)
 
 -- | Prepare url for the HTTP request.
-prepareUrl :: (RpcCall a) => Node -> a -> String
-prepareUrl node call =
+prepareUrl :: (RpcCall a) => Int -> Node -> a -> String
+prepareUrl port node call =
   let node_ip = nodePrimaryIp node
       node_address = if isIpV6 node_ip
                      then "[" ++ node_ip ++ "]"
                      else node_ip
-      port = C.defaultNodedPort
       path_prefix = "https://" ++ node_address ++ ":" ++ show port
   in path_prefix ++ "/" ++ rpcCallName call
 
 -- | Create HTTP request for a given node provided it is online,
 -- otherwise create empty response.
-prepareHttpRequest :: (RpcCall a) => [CurlOption] -> Node -> a
+prepareHttpRequest :: (RpcCall a) => Int -> [CurlOption] -> Node -> a
                    -> ERpcError HttpClientRequest
-prepareHttpRequest opts node call
+prepareHttpRequest port opts node call
   | rpcCallAcceptOffline call || not (nodeOffline node) =
-      Right HttpClientRequest { requestUrl  = prepareUrl node call
+      Right HttpClientRequest { requestUrl  = prepareUrl port node call
                               , requestData = rpcCallData node call
                               , requestOpts = opts ++ curlOpts
                               }
@@ -269,21 +269,28 @@
   , CurlCAInfo cert_path
   ]
 
+-- | Determine to port to call noded at.
+getNodedPort :: IO Int
+getNodedPort = withDefaultOnIOError C.defaultNodedPort
+               . liftM (fromIntegral . servicePort)
+               $ getServiceByName C.noded "tcp"
+
 -- | Execute multiple RPC calls in parallel
 executeRpcCalls :: (Rpc a b) => [(Node, a)] -> IO [(Node, ERpcError b)]
 executeRpcCalls nodeCalls = do
+  port <- getNodedPort
   cert_file <- P.nodedCertFile
   client_cert_file_name <- P.nodedClientCertFile
   client_file_exists <- doesFileExist client_cert_file_name
-  -- FIXME: This is needed to ensure upgradability to 2.11
-  -- Remove in 2.12.
+  -- This is needed to allow upgrades from 2.10 or earlier;
+  -- note that Ganeti supports jump-upgrades.
   let client_cert_file = if client_file_exists
                          then client_cert_file_name
                          else cert_file
       (nodes, calls) = unzip nodeCalls
       opts = map (getOptionsForCall cert_file client_cert_file) calls
       opts_urls = zipWith3 (\n c o ->
-                         case prepareHttpRequest o n c of
+                         case prepareHttpRequest port o n c of
                            Left v -> Left v
                            Right request ->
                              Right (CurlPostFields [requestData request]:
diff -Nru ganeti-2.12.0/src/Ganeti/Ssconf.hs ganeti-2.12.3/src/Ganeti/Ssconf.hs
--- ganeti-2.12.0/src/Ganeti/Ssconf.hs	2014-10-07 17:45:37.000000000 +0300
+++ ganeti-2.12.3/src/Ganeti/Ssconf.hs	2015-04-28 11:13:10.000000000 +0300
@@ -38,6 +38,7 @@
   ( SSKey(..)
   , sSKeyToRaw
   , sSKeyFromRaw
+  , hvparamsSSKey
   , getPrimaryIPFamily
   , parseNodesVmCapable
   , getNodesVmCapable
@@ -53,6 +54,7 @@
   , emptySSConf
   ) where
 
+import Control.Arrow ((&&&))
 import Control.Applicative ((<$>))
 import Control.Exception
 import Control.Monad (forM, liftM)
@@ -83,40 +85,61 @@
 sSFilePrefix :: FilePath
 sSFilePrefix = C.ssconfFileprefix
 
-$(declareSADT "SSKey"
-  [ ("SSClusterName",          'C.ssClusterName)
-  , ("SSClusterTags",          'C.ssClusterTags)
-  , ("SSFileStorageDir",       'C.ssFileStorageDir)
-  , ("SSSharedFileStorageDir", 'C.ssSharedFileStorageDir)
-  , ("SSGlusterStorageDir",    'C.ssGlusterStorageDir)
-  , ("SSMasterCandidates",     'C.ssMasterCandidates)
-  , ("SSMasterCandidatesIps",  'C.ssMasterCandidatesIps)
-  , ("SSMasterCandidatesCerts",'C.ssMasterCandidatesCerts)
-  , ("SSMasterIp",             'C.ssMasterIp)
-  , ("SSMasterNetdev",         'C.ssMasterNetdev)
-  , ("SSMasterNetmask",        'C.ssMasterNetmask)
-  , ("SSMasterNode",           'C.ssMasterNode)
-  , ("SSNodeList",             'C.ssNodeList)
-  , ("SSNodePrimaryIps",       'C.ssNodePrimaryIps)
-  , ("SSNodeSecondaryIps",     'C.ssNodeSecondaryIps)
-  , ("SSNodeVmCapable",        'C.ssNodeVmCapable)
-  , ("SSOfflineNodes",         'C.ssOfflineNodes)
-  , ("SSOnlineNodes",          'C.ssOnlineNodes)
-  , ("SSPrimaryIpFamily",      'C.ssPrimaryIpFamily)
-  , ("SSInstanceList",         'C.ssInstanceList)
-  , ("SSReleaseVersion",       'C.ssReleaseVersion)
-  , ("SSHypervisorList",       'C.ssHypervisorList)
-  , ("SSMaintainNodeHealth",   'C.ssMaintainNodeHealth)
-  , ("SSUidPool",              'C.ssUidPool)
-  , ("SSNodegroups",           'C.ssNodegroups)
-  , ("SSNetworks",             'C.ssNetworks)
-  , ("SSEnabledUserShutdown",  'C.ssEnabledUserShutdown)
-  ])
+$(declareLADT ''String "SSKey" (
+  [ ("SSClusterName",           C.ssClusterName)
+  , ("SSClusterTags",           C.ssClusterTags)
+  , ("SSFileStorageDir",        C.ssFileStorageDir)
+  , ("SSSharedFileStorageDir",  C.ssSharedFileStorageDir)
+  , ("SSGlusterStorageDir",     C.ssGlusterStorageDir)
+  , ("SSMasterCandidates",      C.ssMasterCandidates)
+  , ("SSMasterCandidatesIps",   C.ssMasterCandidatesIps)
+  , ("SSMasterCandidatesCerts", C.ssMasterCandidatesCerts)
+  , ("SSMasterIp",              C.ssMasterIp)
+  , ("SSMasterNetdev",          C.ssMasterNetdev)
+  , ("SSMasterNetmask",         C.ssMasterNetmask)
+  , ("SSMasterNode",            C.ssMasterNode)
+  , ("SSNodeList",              C.ssNodeList)
+  , ("SSNodePrimaryIps",        C.ssNodePrimaryIps)
+  , ("SSNodeSecondaryIps",      C.ssNodeSecondaryIps)
+  , ("SSNodeVmCapable",         C.ssNodeVmCapable)
+  , ("SSOfflineNodes",          C.ssOfflineNodes)
+  , ("SSOnlineNodes",           C.ssOnlineNodes)
+  , ("SSPrimaryIpFamily",       C.ssPrimaryIpFamily)
+  , ("SSInstanceList",          C.ssInstanceList)
+  , ("SSReleaseVersion",        C.ssReleaseVersion)
+  , ("SSHypervisorList",        C.ssHypervisorList)
+  , ("SSMaintainNodeHealth",    C.ssMaintainNodeHealth)
+  , ("SSUidPool",               C.ssUidPool)
+  , ("SSNodegroups",            C.ssNodegroups)
+  , ("SSNetworks",              C.ssNetworks)
+  , ("SSEnabledUserShutdown",   C.ssEnabledUserShutdown)
+  ] ++
+  -- Automatically generate SSHvparamsXxx for each hypervisor type:
+  map ((("SSHvparams" ++) . show)
+       &&& ((C.ssHvparamsPref ++) . Types.hypervisorToRaw))
+    [minBound..maxBound]
+  ))
 
 instance HasStringRepr SSKey where
   fromStringRepr = sSKeyFromRaw
   toStringRepr = sSKeyToRaw
 
+-- | For a given hypervisor get the corresponding SSConf key that contains its
+-- parameters.
+--
+-- The corresponding SSKeys are generated automatically by TH, but since we
+-- don't have convenient infrastructure for generating this function, it's just
+-- manual. All constructors must be given explicitly so that adding another
+-- hypervisor will trigger "incomplete pattern" warning and force the
+-- corresponding addition.
+hvparamsSSKey :: Types.Hypervisor -> SSKey
+hvparamsSSKey Types.Kvm = SSHvparamsKvm
+hvparamsSSKey Types.XenPvm = SSHvparamsXenPvm
+hvparamsSSKey Types.Chroot = SSHvparamsChroot
+hvparamsSSKey Types.XenHvm = SSHvparamsXenHvm
+hvparamsSSKey Types.Lxc = SSHvparamsLxc
+hvparamsSSKey Types.Fake = SSHvparamsFake
+
 -- | Convert a ssconf key into a (full) file path.
 keyToFilename :: FilePath     -- ^ Config path root
               -> SSKey        -- ^ Ssconf key
diff -Nru ganeti-2.12.0/src/Ganeti/THH/HsRPC.hs ganeti-2.12.3/src/Ganeti/THH/HsRPC.hs
--- ganeti-2.12.0/src/Ganeti/THH/HsRPC.hs	2014-10-09 14:57:28.000000000 +0300
+++ ganeti-2.12.3/src/Ganeti/THH/HsRPC.hs	2015-04-29 11:09:35.000000000 +0300
@@ -1,4 +1,5 @@
-{-# LANGUAGE TemplateHaskell, FunctionalDependencies, FlexibleContexts #-}
+{-# LANGUAGE TemplateHaskell, FunctionalDependencies, FlexibleContexts, CPP,
+             TypeFamilies, UndecidableInstances #-}
 -- {-# OPTIONS_GHC -fno-warn-warnings-deprecations #-}
 
 {-| Creates a client out of list of RPC server components.
@@ -42,11 +43,20 @@
   , mkRpcCalls
   ) where
 
+-- The following macro is just a temporary solution for 2.12 and 2.13.
+-- Since 2.14 cabal creates proper macros for all dependencies.
+#define MIN_VERSION_monad_control(maj,min,rev) \
+  (((maj)<MONAD_CONTROL_MAJOR)|| \
+   (((maj)==MONAD_CONTROL_MAJOR)&&((min)<=MONAD_CONTROL_MINOR))|| \
+   (((maj)==MONAD_CONTROL_MAJOR)&&((min)==MONAD_CONTROL_MINOR)&& \
+    ((rev)<=MONAD_CONTROL_REV)))
+
 import Control.Applicative
 import Control.Monad
 import Control.Monad.Base
 import Control.Monad.Error
 import Control.Monad.Reader
+import Control.Monad.Trans.Control
 import Language.Haskell.TH
 import qualified Text.JSON as J
 
@@ -87,6 +97,21 @@
   catchError (RpcClientMonad k) h =
     RpcClientMonad (catchError k (runRpcClientMonad . h))
 
+instance MonadBaseControl IO RpcClientMonad where
+#if MIN_VERSION_monad_control(1,0,0)
+-- Needs Undecidable instances
+  type StM RpcClientMonad b = StM (ReaderT Client ResultG) b
+  liftBaseWith f = RpcClientMonad . liftBaseWith
+                   $ \r -> f (r . runRpcClientMonad)
+  restoreM = RpcClientMonad . restoreM
+#else
+  newtype StM RpcClientMonad b = StMRpcClientMonad
+    { runStMRpcClientMonad :: StM (ReaderT Client ResultG) b }
+  liftBaseWith f = RpcClientMonad . liftBaseWith
+                   $ \r -> f (liftM StMRpcClientMonad . r . runRpcClientMonad)
+  restoreM = RpcClientMonad . restoreM . runStMRpcClientMonad
+#endif
+
 -- * The TH functions to construct RPC client functions from RPC server ones
 
 -- | Given a client run a given client RPC action.
diff -Nru ganeti-2.12.0/src/Ganeti/Utils/Livelock.hs ganeti-2.12.3/src/Ganeti/Utils/Livelock.hs
--- ganeti-2.12.0/src/Ganeti/Utils/Livelock.hs	2014-10-07 17:45:37.000000000 +0300
+++ ganeti-2.12.3/src/Ganeti/Utils/Livelock.hs	2015-04-22 20:10:50.000000000 +0300
@@ -35,13 +35,15 @@
 module Ganeti.Utils.Livelock
   ( Livelock
   , mkLivelockFile
+  , listLiveLocks
   , isDead
   ) where
 
 import qualified Control.Exception as E
 import Control.Monad
 import Control.Monad.Error
-import System.Directory (doesFileExist)
+import System.Directory (doesFileExist, getDirectoryContents)
+import System.FilePath.Posix ((</>))
 import System.IO
 import System.Posix.IO
 import System.Posix.Types (Fd)
@@ -49,7 +51,7 @@
 
 import Ganeti.BasicTypes
 import Ganeti.Logging
-import Ganeti.Path (livelockFile)
+import Ganeti.Path (livelockFile, livelockDir)
 import Ganeti.Utils (lockFile)
 
 type Livelock = FilePath
@@ -68,6 +70,16 @@
           Ok fd     -> return fd
   return (fd, lockfile)
 
+-- | List currently existing livelocks. Underapproximate if
+-- some error occurs.
+listLiveLocks :: IO [FilePath]
+listLiveLocks =
+  fmap (genericResult (const [] :: IOError -> [FilePath]) id)
+  . runResultT . liftIO $ do
+    dir <- livelockDir
+    entries <- getDirectoryContents dir
+    filterM doesFileExist $ map (dir </>) entries
+
 -- | Detect whether a the process identified by the given path
 -- does not exist any more. This function never fails and only
 -- returns True if it has positive knowledge that the process
diff -Nru ganeti-2.12.0/src/Ganeti/Utils/MonadPlus.hs ganeti-2.12.3/src/Ganeti/Utils/MonadPlus.hs
--- ganeti-2.12.0/src/Ganeti/Utils/MonadPlus.hs	2014-10-09 14:57:28.000000000 +0300
+++ ganeti-2.12.3/src/Ganeti/Utils/MonadPlus.hs	2015-04-29 11:09:35.000000000 +0300
@@ -35,9 +35,11 @@
 module Ganeti.Utils.MonadPlus
   ( mretryN
   , retryMaybeN
+  , retryErrorN
   ) where
 
 import Control.Monad
+import Control.Monad.Error
 import Control.Monad.Trans.Maybe
 
 -- | Retries the given action up to @n@ times.
@@ -49,3 +51,12 @@
 -- The action signals failure by 'mzero'.
 retryMaybeN :: (Monad m) => Int -> (Int -> MaybeT m a) -> m (Maybe a)
 retryMaybeN = (runMaybeT .) . mretryN
+
+-- | Retries the given action up to @n@ times until it succeeds.
+-- If all actions fail, the error of the last one is returned.
+-- The action is always run at least once, even if @n@ is less than 1.
+retryErrorN :: (MonadError e m) => Int -> (Int -> m a) -> m a
+retryErrorN n f = loop 1
+  where
+    loop i | i < n      = catchError (f i) (const $ loop (i + 1))
+           | otherwise  = f i
diff -Nru ganeti-2.12.0/src/Ganeti/Utils/Statistics.hs ganeti-2.12.3/src/Ganeti/Utils/Statistics.hs
--- ganeti-2.12.0/src/Ganeti/Utils/Statistics.hs	2014-10-07 17:45:37.000000000 +0300
+++ ganeti-2.12.3/src/Ganeti/Utils/Statistics.hs	2015-04-22 20:10:50.000000000 +0300
@@ -80,7 +80,7 @@
 updateStatistics (StdDevStatistics n s var) (x, y) =
   let !ds = y - x
       !dss = y * y - x * x
-      !dnnvar = n * dss - (2 * s + ds) * ds
+      !dnnvar = (n * dss - 2 * s * ds) - ds * ds
       !s' = s + ds
       !var' = max 0 $ var + dnnvar / (n * n)
   in StdDevStatistics n s' var'
diff -Nru ganeti-2.12.0/src/Ganeti/Utils.hs ganeti-2.12.3/src/Ganeti/Utils.hs
--- ganeti-2.12.0/src/Ganeti/Utils.hs	2014-10-09 14:57:28.000000000 +0300
+++ ganeti-2.12.3/src/Ganeti/Utils.hs	2015-04-29 11:09:35.000000000 +0300
@@ -1,4 +1,4 @@
-{-# LANGUAGE FlexibleContexts #-}
+{-# LANGUAGE FlexibleContexts, ScopedTypeVariables #-}
 
 {-| Utility functions. -}
 
@@ -78,6 +78,7 @@
   , setOwnerWGroupR
   , formatOrdinal
   , tryAndLogIOError
+  , withDefaultOnIOError
   , lockFile
   , FStat
   , nullFStat
@@ -217,8 +218,8 @@
 
 -- | Parse results from readsPrec.
 parseChoices :: Monad m => String -> String -> [(a, String)] -> m a
-parseChoices _ _ ((v, ""):[]) = return v
-parseChoices name s ((_, e):[]) =
+parseChoices _ _ [(v, "")] = return v
+parseChoices name s [(_, e)] =
     fail $ name ++ ": leftover characters when parsing '"
            ++ s ++ "': '" ++ e ++ "'"
 parseChoices name s _ = fail $ name ++ ": cannot parse string '" ++ s ++ "'"
@@ -341,6 +342,12 @@
        return . Bad $ combinedmsg)
    (return . okfn)
 
+-- | Try an IO interaction and return a default value if the interaction
+-- throws an IOError.
+withDefaultOnIOError :: a -> IO a -> IO a
+withDefaultOnIOError a io =
+  try io >>= either (\ (_ :: IOError) -> return a) return
+
 -- | Print a warning, but do not exit.
 warn :: String -> IO ()
 warn = hPutStrLn stderr . (++) "Warning: "
diff -Nru ganeti-2.12.0/src/Ganeti/WConfd/ConfigVerify.hs ganeti-2.12.3/src/Ganeti/WConfd/ConfigVerify.hs
--- ganeti-2.12.0/src/Ganeti/WConfd/ConfigVerify.hs	2014-10-07 17:45:37.000000000 +0300
+++ ganeti-2.12.3/src/Ganeti/WConfd/ConfigVerify.hs	2015-04-28 18:05:35.000000000 +0300
@@ -99,11 +99,10 @@
     reportIf (null enabledHvs)
          "enabled hypervisors list doesn't have any entries"
     -- we don't need to check for invalid HVS as they would fail to parse
-    let missingHvp = S.fromList (map hypervisorToRaw enabledHvs)
-                      S.\\ keysSet hvParams
+    let missingHvp = S.fromList enabledHvs S.\\ keysSet hvParams
     reportIf (not $ S.null missingHvp)
            $ "hypervisor parameters missing for the enabled hypervisor(s) "
-             ++ (commaJoin . S.toList $ missingHvp)
+             ++ (commaJoin . map hypervisorToRaw . S.toList $ missingHvp)
 
     let enabledDiskTemplates = clusterEnabledDiskTemplates cluster
     reportIf (null enabledDiskTemplates)
diff -Nru ganeti-2.12.0/src/Ganeti/WConfd/Core.hs ganeti-2.12.3/src/Ganeti/WConfd/Core.hs
--- ganeti-2.12.0/src/Ganeti/WConfd/Core.hs	2014-10-07 17:45:37.000000000 +0300
+++ ganeti-2.12.3/src/Ganeti/WConfd/Core.hs	2015-04-29 11:09:35.000000000 +0300
@@ -41,19 +41,28 @@
 module Ganeti.WConfd.Core where
 
 import Control.Arrow ((&&&))
+import Control.Concurrent (myThreadId)
+import Control.Lens.Setter (set)
 import Control.Monad (liftM, unless, when)
 import qualified Data.Map as M
 import qualified Data.Set as S
 import Language.Haskell.TH (Name)
+import System.Posix.Process (getProcessID)
 import qualified System.Random as Rand
 
 import Ganeti.BasicTypes
+import qualified Ganeti.Constants as C
 import qualified Ganeti.JSON as J
 import qualified Ganeti.Locking.Allocation as L
-import Ganeti.Locking.Locks ( GanetiLocks(ConfigLock), LockLevel(LevelConfig)
-                            , lockLevel, LockLevel, ClientId )
+import Ganeti.Logging (logDebug)
+import Ganeti.Locking.Locks ( GanetiLocks(ConfigLock, BGL)
+                            , LockLevel(LevelConfig)
+                            , lockLevel, LockLevel
+                            , ClientType(ClientOther), ClientId(..) )
 import qualified Ganeti.Locking.Waiting as LW
 import Ganeti.Objects (ConfigData, DRBDSecret, LogicalVolume, Ip4Address)
+import Ganeti.Objects.Lens (configClusterL, clusterMasterNodeL)
+import Ganeti.WConfd.ConfigState (csConfigDataL)
 import qualified Ganeti.WConfd.ConfigVerify as V
 import Ganeti.WConfd.Language
 import Ganeti.WConfd.Monad
@@ -75,10 +84,9 @@
          . failError $ "Requested lock " ++ show state
                        ++ " on the configuration missing"
 
--- | Read the configuration, checking that a shared lock is held.
--- If not, the call fails.
-readConfig :: ClientId -> WConfdMonad ConfigData
-readConfig ident = checkConfigLock ident L.OwnShared >> CW.readConfig
+-- | Read the configuration.
+readConfig :: WConfdMonad ConfigData
+readConfig = CW.readConfig
 
 -- | Write the configuration, checking that an exclusive lock is held.
 -- If not, the call fails.
@@ -310,10 +318,44 @@
 guardedOpportunisticLockUnion count cid req =
   modifyLockWaiting $ LW.guardedOpportunisticLockUnion count cid req
 
+-- * Prepareation for cluster destruction
+
+-- | Prepare daemon for cluster destruction. This consists of
+-- verifying that the requester owns the BGL exclusively, transfering the BGL
+-- to WConfD itself, and modifying the configuration so that no
+-- node is the master any more. Note that, since we own the BGL exclusively,
+-- we can safely modify the configuration, as no other process can request
+-- changes.
+prepareClusterDestruction :: ClientId -> WConfdMonad ()
+prepareClusterDestruction cid = do
+  la <- readLockAllocation
+  unless (L.holdsLock cid BGL L.OwnExclusive la)
+    . failError $ "Cluster destruction requested without owning BGL exclusively"
+  logDebug $ "preparing cluster destruction as requested by " ++ show cid
+  -- transfer BGL to ourselfs. The do this, by adding a super-priority waiting
+  -- request and then releasing the BGL of the requestor.
+  dh <- daemonHandle
+  pid <- liftIO getProcessID
+  tid <- liftIO myThreadId
+  let mycid = ClientId { ciIdentifier = ClientOther $ "wconfd-" ++ show tid
+                       , ciLockFile = dhLivelock dh
+                       , ciPid = pid
+                       }
+  _ <- modifyLockWaiting $ LW.updateLocksWaiting
+                           (fromIntegral C.opPrioHighest - 1) mycid
+                           [L.requestExclusive BGL]
+  _ <- modifyLockWaiting $ LW.updateLocks cid [L.requestRelease BGL]
+  -- To avoid beeing restarted we change the configuration to a no-master
+  -- state.
+  modifyConfigState $ (,) ()
+    . set (csConfigDataL . configClusterL . clusterMasterNodeL) ""
+
+
 -- * The list of all functions exported to RPC.
 
 exportedFunctions :: [Name]
 exportedFunctions = [ 'echo
+                    , 'prepareClusterDestruction
                     -- config
                     , 'readConfig
                     , 'writeConfig
diff -Nru ganeti-2.12.0/src/Ganeti/WConfd/DeathDetection.hs ganeti-2.12.3/src/Ganeti/WConfd/DeathDetection.hs
--- ganeti-2.12.0/src/Ganeti/WConfd/DeathDetection.hs	2014-10-07 17:45:37.000000000 +0300
+++ ganeti-2.12.3/src/Ganeti/WConfd/DeathDetection.hs	2015-04-29 11:09:35.000000000 +0300
@@ -66,10 +66,13 @@
 cleanupLocksTask = forever . runResultT $ do
   logDebug "Death detection timer fired"
   owners <- liftM L.lockOwners readLockAllocation
+  mylivelock <- liftM dhLivelock daemonHandle
   logDebug $ "Current lock owners: " ++ show owners
   let cleanupIfDead owner = do
         let fpath = ciLockFile owner
-        died <- liftIO (isDead fpath)
+        died <- if fpath == mylivelock
+                  then return False
+                  else liftIO (isDead fpath)
         when died $ do
           logInfo $ show owner ++ " died, releasing locks and reservations"
           persCleanup persistentTempRes owner
@@ -78,4 +81,16 @@
                :: WConfdMonad (Either IOError ())
           return ()
   mapM_ cleanupIfDead owners
+  remainingFiles <- liftIO listLiveLocks
+  logDebug $ "Livelockfiles remaining: " ++ show remainingFiles
+  let cleanupStaleIfDead fpath = do
+        died <- if fpath == mylivelock
+                  then return False
+                  else liftIO (isDead fpath)
+        when died $ do
+          logInfo $ "Cleaning up stale file " ++ fpath
+          _ <- liftIO . E.try $ removeFile fpath
+               :: WConfdMonad (Either IOError ())
+          return ()
+  mapM_ cleanupStaleIfDead remainingFiles
   liftIO $ threadDelay cleanupInterval
diff -Nru ganeti-2.12.0/src/Ganeti/WConfd/Monad.hs ganeti-2.12.3/src/Ganeti/WConfd/Monad.hs
--- ganeti-2.12.0/src/Ganeti/WConfd/Monad.hs	2014-10-09 14:57:28.000000000 +0300
+++ ganeti-2.12.3/src/Ganeti/WConfd/Monad.hs	2015-04-29 11:09:35.000000000 +0300
@@ -1,5 +1,5 @@
-{-# LANGUAGE MultiParamTypeClasses, TypeFamilies #-}
-{-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE MultiParamTypeClasses, TypeFamilies,
+             TemplateHaskell, CPP, UndecidableInstances #-}
 
 {-| All RPC calls are run within this monad.
 
@@ -46,6 +46,7 @@
 module Ganeti.WConfd.Monad
   ( DaemonHandle
   , dhConfigPath
+  , dhLivelock
   , mkDaemonHandle
   , WConfdMonadInt
   , runWConfdMonadInt
@@ -64,6 +65,14 @@
   , readTempResState
   ) where
 
+-- The following macro is just a temporary solution for 2.12 and 2.13.
+-- Since 2.14 cabal creates proper macros for all dependencies.
+#define MIN_VERSION_monad_control(maj,min,rev) \
+  (((maj)<MONAD_CONTROL_MAJOR)|| \
+   (((maj)==MONAD_CONTROL_MAJOR)&&((min)<=MONAD_CONTROL_MINOR))|| \
+   (((maj)==MONAD_CONTROL_MAJOR)&&((min)==MONAD_CONTROL_MINOR)&& \
+    ((rev)<=MONAD_CONTROL_REV)))
+
 import Control.Applicative
 import Control.Arrow ((&&&), second)
 import Control.Monad
@@ -92,6 +101,7 @@
 import Ganeti.Objects (ConfigData)
 import Ganeti.Utils.AsyncWorker
 import Ganeti.Utils.IORef
+import Ganeti.Utils.Livelock (Livelock)
 import Ganeti.WConfd.ConfigState
 import Ganeti.WConfd.TempRes
 
@@ -116,6 +126,7 @@
   , dhSaveConfigWorker :: AsyncWorker Any ()
   , dhSaveLocksWorker :: AsyncWorker () ()
   , dhSaveTempResWorker :: AsyncWorker () ()
+  , dhLivelock :: Livelock
   }
 
 mkDaemonHandle :: FilePath
@@ -138,10 +149,12 @@
                -> (IO TempResState -> ResultG (AsyncWorker () ()))
                   -- ^ A function that creates a worker that asynchronously
                   -- saves the temporary reservations state.
+               -> Livelock
                -> ResultG DaemonHandle
 mkDaemonHandle cpath cstat lstat trstat
                saveWorkerFn distMCsWorkerFn distSSConfWorkerFn
-               saveLockWorkerFn saveTempResWorkerFn = do
+               saveLockWorkerFn saveTempResWorkerFn
+               livelock = do
   ds <- newIORef $ DaemonState cstat lstat trstat
   let readConfigIO = dsConfigState `liftM` readIORef ds :: IO ConfigState
 
@@ -155,6 +168,7 @@
   saveTempResWorker <- saveTempResWorkerFn $ dsTempRes `liftM` readIORef ds
 
   return $ DaemonHandle ds cpath saveWorker saveLockWorker saveTempResWorker
+                        livelock
 
 -- * The monad and its instances
 
@@ -184,11 +198,19 @@
   liftBase = WConfdMonadInt . liftBase
 
 instance MonadBaseControl IO WConfdMonadInt where
+#if MIN_VERSION_monad_control(1,0,0)
+-- Needs Undecidable instances
+  type StM WConfdMonadInt b = StM WConfdMonadIntType b
+  liftBaseWith f = WConfdMonadInt . liftBaseWith
+                   $ \r -> f (r . getWConfdMonadInt)
+  restoreM = WConfdMonadInt . restoreM
+#else
   newtype StM WConfdMonadInt b = StMWConfdMonadInt
     { runStMWConfdMonadInt :: StM WConfdMonadIntType b }
   liftBaseWith f = WConfdMonadInt . liftBaseWith
                    $ \r -> f (liftM StMWConfdMonadInt . r . getWConfdMonadInt)
   restoreM = WConfdMonadInt . restoreM . runStMWConfdMonadInt
+#endif
 
 instance MonadLog WConfdMonadInt where
   logAt p = WConfdMonadInt . logAt p
@@ -238,14 +260,14 @@
   when modified $ do
     if distSync
       then do
-        logDebug "Triggering config write\
-                 \ together with full synchronous distribution"
+        logDebug $ "Triggering config write" ++
+                   " together with full synchronous distribution"
         liftBase . triggerAndWait (Any True) . dhSaveConfigWorker $ dh
         logDebug "Config write and distribution finished"
       else do
         -- trigger the config. saving worker and wait for it
-        logDebug "Triggering config write\
-                 \ and asynchronous distribution"
+        logDebug $ "Triggering config write" ++
+                   " and asynchronous distribution"
         liftBase . triggerAndWait (Any False) . dhSaveConfigWorker $ dh
     return ()
   return r
diff -Nru ganeti-2.12.0/src/Ganeti/WConfd/Server.hs ganeti-2.12.3/src/Ganeti/WConfd/Server.hs
--- ganeti-2.12.0/src/Ganeti/WConfd/Server.hs	2014-10-09 14:57:28.000000000 +0300
+++ ganeti-2.12.3/src/Ganeti/WConfd/Server.hs	2015-04-29 11:09:35.000000000 +0300
@@ -46,15 +46,16 @@
 import Control.Monad.Error
 
 import Ganeti.BasicTypes
+import qualified Ganeti.Constants as C
 import Ganeti.Daemon
 import Ganeti.Daemon.Utils (handleMasterVerificationOptions)
 import Ganeti.Logging (logDebug)
 import qualified Ganeti.Path as Path
 import Ganeti.THH.RPC
 import Ganeti.UDSServer
-
 import Ganeti.Errors (formatError)
 import Ganeti.Runtime
+import Ganeti.Utils.Livelock (mkLivelockFile)
 import Ganeti.WConfd.ConfigState
 import Ganeti.WConfd.ConfigVerify
 import Ganeti.WConfd.ConfigWriter
@@ -93,6 +94,7 @@
     verifyConfigErr cdata
     lock <- readPersistent persistentLocks
     tempres <- readPersistent persistentTempRes
+    (_, livelock) <- mkLivelockFile C.wconfdLivelockPrefix
     mkDaemonHandle conf_file
                    (mkConfigState cdata)
                    lock
@@ -102,6 +104,7 @@
                    distSSConfAsyncTask
                    (writePersistentAsyncTask persistentLocks)
                    (writePersistentAsyncTask persistentTempRes)
+                   livelock
 
   return (s, dh)
 
diff -Nru ganeti-2.12.0/src/Ganeti/WConfd/Ssconf.hs ganeti-2.12.3/src/Ganeti/WConfd/Ssconf.hs
--- ganeti-2.12.0/src/Ganeti/WConfd/Ssconf.hs	2014-10-07 17:45:37.000000000 +0300
+++ ganeti-2.12.3/src/Ganeti/WConfd/Ssconf.hs	2015-04-28 18:05:35.000000000 +0300
@@ -42,10 +42,11 @@
   , mkSSConf
   ) where
 
-import Control.Arrow ((&&&))
+import Control.Arrow ((&&&), first, second)
 import Data.Foldable (Foldable(..), toList)
 import Data.List (partition)
 import qualified Data.Map as M
+import qualified Text.JSON as J
 
 import Ganeti.BasicTypes
 import Ganeti.Config
@@ -56,8 +57,34 @@
 import Ganeti.Utils
 import Ganeti.Types
 
+eqPair :: (String, String) -> String
+eqPair (x, y) = x ++ "=" ++ y
+
+mkSSConfHvparams :: Cluster -> [(Hypervisor, [String])]
+mkSSConfHvparams cluster = map (id &&& hvparams) [minBound..maxBound]
+  where
+    hvparams :: Hypervisor -> [String]
+    hvparams h = maybe [] hvparamsStrings
+                 $ lookupContainer Nothing h (clusterHvparams cluster)
+
+    -- | Convert a collection of hypervisor parameters to strings in the form
+    -- @key=value at .
+    hvparamsStrings :: HvParams -> [String]
+    hvparamsStrings =
+      map (eqPair . second hvparamShow) . M.toList . fromContainer
+
+    -- | Convert a hypervisor parameter in its JSON representation to a String.
+    -- Strings, numbers and booleans are just printed (without quotes), booleans
+    -- printed as @True@/@False@ and other JSON values (should they exist) as
+    -- their JSON representations.
+    hvparamShow :: J.JSValue -> String
+    hvparamShow (J.JSString s) = J.fromJSString s
+    hvparamShow (J.JSRational _ r) = J.showJSRational r []
+    hvparamShow (J.JSBool b) = show b
+    hvparamShow x = J.encode x
+
 mkSSConf :: ConfigData -> SSConf
-mkSSConf cdata = SSConf $ M.fromList
+mkSSConf cdata = SSConf . M.fromList $
     [ (SSClusterName, return $ clusterClusterName cluster)
     , (SSClusterTags, toList $ tagsOf cluster)
     , (SSFileStorageDir, return $ clusterFileStorageDir cluster)
@@ -71,7 +98,7 @@
     , (SSMasterNetdev, return $ clusterMasterNetdev cluster)
     , (SSMasterNetmask, return . show $ clusterMasterNetmask cluster)
     , (SSMasterNode, return
-                     . genericResult (error "Master node not found") nodeName
+                     . genericResult (const "NO MASTER") nodeName
                      . getNode cdata $ clusterMasterNode cluster)
     , (SSNodeList, mapLines nodeName nodes)
     , (SSNodePrimaryIps, mapLines (spcPair . (nodeName &&& nodePrimaryIp))
@@ -99,11 +126,11 @@
                    . configNetworks $ cdata)
     , (SSEnabledUserShutdown, return . show . clusterEnabledUserShutdown
                               $ cluster)
-    ]
+    ] ++
+    map (first hvparamsSSKey) (mkSSConfHvparams cluster)
   where
     mapLines :: (Foldable f) => (a -> String) -> f a -> [String]
     mapLines f = map f . toList
-    eqPair (x, y) = x ++ "=" ++ y
     spcPair (x, y) = x ++ " " ++ y
     toPairs = M.assocs . fromContainer
 
diff -Nru ganeti-2.12.0/test/data/cluster_config_2.11.json ganeti-2.12.3/test/data/cluster_config_2.11.json
diff -Nru ganeti-2.12.0/test/hs/Test/Ganeti/HTools/Cluster.hs ganeti-2.12.3/test/hs/Test/Ganeti/HTools/Cluster.hs
diff -Nru ganeti-2.12.0/test/hs/Test/Ganeti/HTools/Instance.hs ganeti-2.12.3/test/hs/Test/Ganeti/HTools/Instance.hs
diff -Nru ganeti-2.12.0/test/hs/Test/Ganeti/Hypervisor/Xen/XmParser.hs ganeti-2.12.3/test/hs/Test/Ganeti/Hypervisor/Xen/XmParser.hs
diff -Nru ganeti-2.12.0/test/hs/Test/Ganeti/Objects.hs ganeti-2.12.3/test/hs/Test/Ganeti/Objects.hs
diff -Nru ganeti-2.12.0/test/hs/Test/Ganeti/OpCodes.hs ganeti-2.12.3/test/hs/Test/Ganeti/OpCodes.hs
diff -Nru ganeti-2.12.0/test/hs/Test/Ganeti/TestHTools.hs ganeti-2.12.3/test/hs/Test/Ganeti/TestHTools.hs
diff -Nru ganeti-2.12.0/test/hs/Test/Ganeti/Utils/Statistics.hs ganeti-2.12.3/test/hs/Test/Ganeti/Utils/Statistics.hs
diff -Nru ganeti-2.12.0/test/py/cmdlib/cluster_unittest.py ganeti-2.12.3/test/py/cmdlib/cluster_unittest.py
diff -Nru ganeti-2.12.0/test/py/cmdlib/cmdlib_unittest.py ganeti-2.12.3/test/py/cmdlib/cmdlib_unittest.py
diff -Nru ganeti-2.12.0/test/py/cmdlib/group_unittest.py ganeti-2.12.3/test/py/cmdlib/group_unittest.py
diff -Nru ganeti-2.12.0/test/py/cmdlib/instance_unittest.py ganeti-2.12.3/test/py/cmdlib/instance_unittest.py
diff -Nru ganeti-2.12.0/test/py/cmdlib/testsupport/config_mock.py ganeti-2.12.3/test/py/cmdlib/testsupport/config_mock.py
diff -Nru ganeti-2.12.0/test/py/cmdlib/testsupport/__init__.py ganeti-2.12.3/test/py/cmdlib/testsupport/__init__.py
diff -Nru ganeti-2.12.0/test/py/cmdlib/testsupport/pathutils_mock.py ganeti-2.12.3/test/py/cmdlib/testsupport/pathutils_mock.py
diff -Nru ganeti-2.12.0/test/py/cmdlib/testsupport/wconfd_mock.py ganeti-2.12.3/test/py/cmdlib/testsupport/wconfd_mock.py
diff -Nru ganeti-2.12.0/test/py/ganeti.hypervisor.hv_xen_unittest.py ganeti-2.12.3/test/py/ganeti.hypervisor.hv_xen_unittest.py
diff -Nru ganeti-2.12.0/test/py/ganeti.storage.bdev_unittest.py ganeti-2.12.3/test/py/ganeti.storage.bdev_unittest.py
diff -Nru ganeti-2.12.0/test/py/ganeti.storage.gluster_unittest.py ganeti-2.12.3/test/py/ganeti.storage.gluster_unittest.py
diff -Nru ganeti-2.12.0/tools/cfgupgrade ganeti-2.12.3/tools/cfgupgrade
--- ganeti-2.12.0/tools/cfgupgrade	2014-10-09 14:57:28.000000000 +0300
+++ ganeti-2.12.3/tools/cfgupgrade	2015-04-29 11:09:35.000000000 +0300
@@ -241,6 +241,14 @@
         nic["network"] = uuid
 
 
+def AssignUuid(disk):
+  if not "uuid" in disk:
+    disk["uuid"] = utils.io.NewUUID()
+  if "children" in disk:
+    for d in disk["children"]:
+      AssignUuid(d)
+
+
 def _ConvertDiskAndCheckMissingSpindles(iobj, instance):
   missing_spindles = False
   if "disks" not in iobj:
@@ -265,8 +273,7 @@
       if not "spindles" in dobj:
         missing_spindles = True
 
-      if not "uuid" in dobj:
-        dobj["uuid"] = utils.io.NewUUID()
+      AssignUuid(dobj)
   return missing_spindles
 
 
diff -Nru ganeti-2.12.0/tools/ifup-os.in ganeti-2.12.3/tools/ifup-os.in
--- ganeti-2.12.0/tools/ifup-os.in	2014-10-07 17:45:37.000000000 +0300
+++ ganeti-2.12.3/tools/ifup-os.in	2015-04-22 20:10:50.000000000 +0300
@@ -37,7 +37,7 @@
 #
 # This script also controls the DHCP server that leases IP address for
 # instances, i.e., the NICs inside the instances, not the TAP
-# interfaces.  The DHCP server is started and restarted (or reHUPed)
+# interfaces.  The DHCP server is started and restarted
 # as necessary and always with up-to-date configuration files.
 #
 # This script expects the following environment variables
@@ -68,56 +68,35 @@
 # TAP network interfaces to monitor or IP addresses to lease, the DHCP
 # server is terminated through 'SIGTERM'.
 #
-# If there are still instances running, then:
-#  - if the DHCP server is running, a 'SIGHUP' will be sent to the
-#    dnsmasq process which will cause the configuration file to be
-#    re-read, while keeping the process running
-#  - if the DHCP server is not running, it will be started, and the
-#    configuration file will be passed it
+# If there are still instances running, it will be restarted and the
+# configuration file will be passed it.
 function restart_dnsmasq {
-  SIGNAL=
-
-  if [ -z "$ALIVE_INTERFACES" -o -z "$ALIVE_LEASES" ]
-  then
-      SIGNAL=TERM
-  else
-      SIGNAL=HUP
-  fi
-
-  RUNNING=
+  local RUNNING=
+  local PID
 
   if [ -f "$DNSMASQ_PID" ]
   then
       PID=$(cat $DNSMASQ_PID)
       if [ -n "$PID" ] && ps -p "$PID"
       then
-	  RUNNING=yes
+          RUNNING=yes
       fi
   fi
 
-  KILLED=
-
   if [ "$RUNNING" = yes ]
   then
-      kill -$SIGNAL $PID
-
-      if [ "$SIGNAL" = TERM ]
-      then
-	  KILLED=yes
-      fi
-  fi
-
-  if [ "$KILLED" = yes ]
-  then
+      kill -TERM $PID
+      # wait for the process to die
+      while kill -0 $PID 2>/dev/null
+      do
+          sleep 1
+      done
       rm -f $DNSMASQ_PID
   fi
 
-  if [ "$RUNNING" != yes -o "$KILLED" == yes ]
+  if [ -n "$ALIVE_INTERFACES" -a -n "$ALIVE_LEASES" ]
   then
-      if [ -n "$ALIVE_INTERFACES" -a -n "$ALIVE_LEASES" ]
-      then
-	  dnsmasq -C $DNSMASQ_CONF
-      fi
+      dnsmasq -C $DNSMASQ_CONF
   fi
 
   return 0
diff -Nru ganeti-2.12.0/tools/kvm-ifup-os ganeti-2.12.3/tools/kvm-ifup-os
--- ganeti-2.12.0/tools/kvm-ifup-os	2014-10-10 11:52:19.000000000 +0300
+++ ganeti-2.12.3/tools/kvm-ifup-os	2015-04-29 11:09:44.000000000 +0300
@@ -37,7 +37,7 @@
 #
 # This script also controls the DHCP server that leases IP address for
 # instances, i.e., the NICs inside the instances, not the TAP
-# interfaces.  The DHCP server is started and restarted (or reHUPed)
+# interfaces.  The DHCP server is started and restarted
 # as necessary and always with up-to-date configuration files.
 #
 # This script expects the following environment variables
@@ -68,56 +68,35 @@
 # TAP network interfaces to monitor or IP addresses to lease, the DHCP
 # server is terminated through 'SIGTERM'.
 #
-# If there are still instances running, then:
-#  - if the DHCP server is running, a 'SIGHUP' will be sent to the
-#    dnsmasq process which will cause the configuration file to be
-#    re-read, while keeping the process running
-#  - if the DHCP server is not running, it will be started, and the
-#    configuration file will be passed it
+# If there are still instances running, it will be restarted and the
+# configuration file will be passed it.
 function restart_dnsmasq {
-  SIGNAL=
-
-  if [ -z "$ALIVE_INTERFACES" -o -z "$ALIVE_LEASES" ]
-  then
-      SIGNAL=TERM
-  else
-      SIGNAL=HUP
-  fi
-
-  RUNNING=
+  local RUNNING=
+  local PID
 
   if [ -f "$DNSMASQ_PID" ]
   then
       PID=$(cat $DNSMASQ_PID)
       if [ -n "$PID" ] && ps -p "$PID"
       then
-	  RUNNING=yes
+          RUNNING=yes
       fi
   fi
 
-  KILLED=
-
   if [ "$RUNNING" = yes ]
   then
-      kill -$SIGNAL $PID
-
-      if [ "$SIGNAL" = TERM ]
-      then
-	  KILLED=yes
-      fi
-  fi
-
-  if [ "$KILLED" = yes ]
-  then
+      kill -TERM $PID
+      # wait for the process to die
+      while kill -0 $PID 2>/dev/null
+      do
+          sleep 1
+      done
       rm -f $DNSMASQ_PID
   fi
 
-  if [ "$RUNNING" != yes -o "$KILLED" == yes ]
+  if [ -n "$ALIVE_INTERFACES" -a -n "$ALIVE_LEASES" ]
   then
-      if [ -n "$ALIVE_INTERFACES" -a -n "$ALIVE_LEASES" ]
-      then
-	  dnsmasq -C $DNSMASQ_CONF
-      fi
+      dnsmasq -C $DNSMASQ_CONF
   fi
 
   return 0
diff -Nru ganeti-2.12.0/tools/move-instance ganeti-2.12.3/tools/move-instance
--- ganeti-2.12.0/tools/move-instance	2014-10-07 17:45:37.000000000 +0300
+++ ganeti-2.12.3/tools/move-instance	2015-04-28 18:05:35.000000000 +0300
@@ -510,7 +510,7 @@
                                     mrt.move.dest_disk_template,
                                     mrt.src_instinfo, mrt.src_expinfo,
                                     mrt.move.hvparams, mrt.move.beparams,
-                                    mrt.move.beparams, mrt.move.nics,
+                                    mrt.move.osparams, mrt.move.nics,
                                     is_attempt_opportunistic
                                     )
 
diff -Nru ganeti-2.12.0/tools/vif-ganeti-metad.in ganeti-2.12.3/tools/vif-ganeti-metad.in
--- ganeti-2.12.0/tools/vif-ganeti-metad.in	1970-01-01 02:00:00.000000000 +0200
+++ ganeti-2.12.3/tools/vif-ganeti-metad.in	2015-04-22 20:10:50.000000000 +0300
@@ -0,0 +1,70 @@
+#!/bin/sh
+#
+
+# Copyright (C) 2014 Google Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# 1. Redistributions of source code must retain the above copyright notice,
+# this list of conditions and the following disclaimer.
+#
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+# IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+# This Xen vif setup script does the bare minimum required to set up the
+# interface during instance creation. The rest of the process is carried out by
+# the ifup-os script.
+
+set -e
+
+xenstore_read() {
+  if ! xenstore-read "$XENBUS_PATH/$1" 2>/dev/null ; then
+    echo "$2"
+  fi
+}
+
+xenstore_write() {
+  xenstore-write "$XENBUS_PATH/$1" "$2"
+}
+
+log() {
+  local level="$1" ; shift
+  logger -p daemon."${level}" -t "$0" -- "$@"
+}
+
+: "${XENBUS_PATH:?}" "${vif:?}"
+
+vifname=$(xenstore_read "vifname" "")
+if [ -n "$vifname" ] ; then
+  if [ "$1" = "online" ] && ! ip link show "$vifname" >/dev/null >&2 ; then
+    log debug "Renaming interface ${vif} to ${vifname}"
+    ip link set "$vif" name "$vifname"
+  fi
+  vif="$vifname"
+fi
+
+case "$1" in
+  online)
+    # Tell Xen we're connected
+    xenstore_write "hotplug-status" "connected"
+    ;;
+  offline)
+    ifconfig "$vif" down || true
+    ;;
+esac
diff -Nru ganeti-2.12.0/tools/xen-ifup-os ganeti-2.12.3/tools/xen-ifup-os
--- ganeti-2.12.0/tools/xen-ifup-os	2014-10-10 11:52:19.000000000 +0300
+++ ganeti-2.12.3/tools/xen-ifup-os	2015-04-29 11:09:44.000000000 +0300
@@ -37,7 +37,7 @@
 #
 # This script also controls the DHCP server that leases IP address for
 # instances, i.e., the NICs inside the instances, not the TAP
-# interfaces.  The DHCP server is started and restarted (or reHUPed)
+# interfaces.  The DHCP server is started and restarted
 # as necessary and always with up-to-date configuration files.
 #
 # This script expects the following environment variables
@@ -68,56 +68,35 @@
 # TAP network interfaces to monitor or IP addresses to lease, the DHCP
 # server is terminated through 'SIGTERM'.
 #
-# If there are still instances running, then:
-#  - if the DHCP server is running, a 'SIGHUP' will be sent to the
-#    dnsmasq process which will cause the configuration file to be
-#    re-read, while keeping the process running
-#  - if the DHCP server is not running, it will be started, and the
-#    configuration file will be passed it
+# If there are still instances running, it will be restarted and the
+# configuration file will be passed it.
 function restart_dnsmasq {
-  SIGNAL=
-
-  if [ -z "$ALIVE_INTERFACES" -o -z "$ALIVE_LEASES" ]
-  then
-      SIGNAL=TERM
-  else
-      SIGNAL=HUP
-  fi
-
-  RUNNING=
+  local RUNNING=
+  local PID
 
   if [ -f "$DNSMASQ_PID" ]
   then
       PID=$(cat $DNSMASQ_PID)
       if [ -n "$PID" ] && ps -p "$PID"
       then
-	  RUNNING=yes
+          RUNNING=yes
       fi
   fi
 
-  KILLED=
-
   if [ "$RUNNING" = yes ]
   then
-      kill -$SIGNAL $PID
-
-      if [ "$SIGNAL" = TERM ]
-      then
-	  KILLED=yes
-      fi
-  fi
-
-  if [ "$KILLED" = yes ]
-  then
+      kill -TERM $PID
+      # wait for the process to die
+      while kill -0 $PID 2>/dev/null
+      do
+          sleep 1
+      done
       rm -f $DNSMASQ_PID
   fi
 
-  if [ "$RUNNING" != yes -o "$KILLED" == yes ]
+  if [ -n "$ALIVE_INTERFACES" -a -n "$ALIVE_LEASES" ]
   then
-      if [ -n "$ALIVE_INTERFACES" -a -n "$ALIVE_LEASES" ]
-      then
-	  dnsmasq -C $DNSMASQ_CONF
-      fi
+      dnsmasq -C $DNSMASQ_CONF
   fi
 
   return 0
diff -Nru ganeti-2.12.0/vcs-version ganeti-2.12.3/vcs-version
--- ganeti-2.12.0/vcs-version	2014-10-10 11:52:17.000000000 +0300
+++ ganeti-2.12.3/vcs-version	2015-04-29 11:09:41.000000000 +0300
@@ -1 +1 @@
-v2.12.0
+v2.12.3
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: Digital signature
URL: <http://lists.alioth.debian.org/pipermail/pkg-ganeti-devel/attachments/20150429/979e88b9/attachment-0001.sig>


More information about the Pkg-ganeti-devel mailing list