[Pkg-ganeti-devel] [ganeti] 75/165: Add Python client for the metadata daemon

Apollon Oikonomopoulos apoikos at moszumanska.debian.org
Tue Aug 11 13:53:14 UTC 2015


This is an automated email from the git hooks/post-receive script.

apoikos pushed a commit to branch master
in repository ganeti.

commit ac8fd2bbe18b8e304e78c4d734bdb3f051998bb0
Author: Petr Pudlak <pudlak at google.com>
Date:   Mon Mar 2 19:16:42 2015 +0100

    Add Python client for the metadata daemon
    
    The client is formed by combining the generated stub with the abstract
    client implementation.
    
    Signed-off-by: Petr Pudlak <pudlak at google.com>
    Reviewed-by: Klaus Aehlig <aehlig at google.com>
---
 Makefile.am  |  1 +
 lib/metad.py | 87 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 88 insertions(+)

diff --git a/Makefile.am b/Makefile.am
index 6058238..4a7a60b 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -455,6 +455,7 @@ pkgpython_PYTHON = \
 	lib/locking.py \
 	lib/luxi.py \
 	lib/mcpu.py \
+	lib/metad.py \
 	lib/netutils.py \
 	lib/objects.py \
 	lib/opcodes_base.py \
diff --git a/lib/metad.py b/lib/metad.py
new file mode 100644
index 0000000..deb4d66
--- /dev/null
+++ b/lib/metad.py
@@ -0,0 +1,87 @@
+#
+#
+
+# 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.
+
+
+"""Module for the Metad protocol
+
+"""
+
+import logging
+import random
+import time
+
+from ganeti import constants
+from ganeti import errors
+import ganeti.rpc.client as cl
+from ganeti.rpc.transport import Transport
+from ganeti.rpc import errors
+
+
+# If the metadata daemon is disabled, there is no stub generated for it.
+# So import the module and define the client class only if enabled, otherwise
+# just generate an empty placeholder class.
+if constants.ENABLE_METAD:
+  import ganeti.rpc.stub.metad as stub
+
+  class Client(cl.AbstractStubClient, stub.ClientRpcStub):
+    """High-level Metad client implementation.
+
+    This uses a backing Transport-like class on top of which it
+    implements data serialization/deserialization.
+
+    """
+    def __init__(self, timeouts=None, transport=Transport):
+      """Constructor for the Client class.
+
+      Arguments are the same as for L{AbstractClient}.
+
+      """
+      cl.AbstractStubClient.__init__(self, timeouts, transport)
+      stub.ClientRpcStub.__init__(self)
+
+      retries = 12
+      for try_no in range(0, retries):
+        try:
+          self._InitTransport()
+          return
+        except errors.TimeoutError:
+          logging.debug("Timout trying to connect to MetaD")
+          if try_no == retries - 1:
+            raise
+          logging.debug("Will retry")
+          time.sleep(try_no * 10 + 10 * random.random())
+
+else:
+  class Client(object):
+    """An empty client representation that just throws an exception.
+
+    """
+    def __init__(self, _timeouts=None, _transport=None):
+      raise errors.ProgrammerError("The metadata deamon is disabled, yet"
+                                   " the client has been called")

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-ganeti/ganeti.git



More information about the Pkg-ganeti-devel mailing list