[libvirt] [PATCH sandbox v5 09/20] Image: Add get_command function to Source

Daniel P. Berrange berrange at redhat.com
Tue Sep 8 16:29:40 UTC 2015


From: Eren Yagdiran <erenyagdiran at gmail.com>

Provide a way to know how a template can be started depending on the used source
DockerSource will need to parse the topmost config file in order to find the igniter command

Signed-off-by: Daniel P. Berrange <berrange at redhat.com>
---
 libvirt-sandbox/image/sources/DockerSource.py | 31 +++++++++++++++++++++++++++
 libvirt-sandbox/image/sources/Source.py       | 12 +++++++++++
 2 files changed, 43 insertions(+)

diff --git a/libvirt-sandbox/image/sources/DockerSource.py b/libvirt-sandbox/image/sources/DockerSource.py
index ab18b52..2607011 100644
--- a/libvirt-sandbox/image/sources/DockerSource.py
+++ b/libvirt-sandbox/image/sources/DockerSource.py
@@ -29,6 +29,16 @@ import os
 import subprocess
 import shutil
 
+class DockerConfParser():
+
+    def __init__(self,jsonfile):
+        with open(jsonfile) as json_file:
+            self.json_data = json.load(json_file)
+    def getCommand(self):
+        return self.json_data['config']['Cmd']
+    def getEntrypoint(self):
+        return self.json_data['config']['Entrypoint']
+
 class DockerSource(Source):
 
     www_auth_username = None
@@ -345,5 +355,26 @@ class DockerSource(Source):
                     parent = None
             imagetagid = parent
 
+    def _get_template_data(self, templatename, templatedir):
+        imageList = self._get_image_list(templatename, templatedir)
+        toplayer = imageList[0]
+        diskfile = templatedir + "/" + toplayer + "/template.qcow2"
+        configfile = templatedir + "/" + toplayer + "/template.json"
+        return configfile, diskfile
+
+    def get_command(self, templatename, templatedir, userargs):
+        configfile, diskfile = self._get_template_data(templatename, templatedir)
+        configParser = DockerConfParser(configfile)
+        cmd = configParser.getCommand()
+        entrypoint = configParser.getEntrypoint()
+        if entrypoint is None:
+            entrypoint = []
+        if cmd is None:
+            cmd = []
+        if userargs is not None and len(userargs) > 0:
+            return entrypoint + userargs
+        else:
+            return entrypoint + cmd
+
 def debug(msg):
     sys.stderr.write(msg)
diff --git a/libvirt-sandbox/image/sources/Source.py b/libvirt-sandbox/image/sources/Source.py
index 4aea5c9..4305d0b 100644
--- a/libvirt-sandbox/image/sources/Source.py
+++ b/libvirt-sandbox/image/sources/Source.py
@@ -71,3 +71,15 @@ class Source():
         Delete all local files associated with the template
         """
         pass
+
+    @abstractmethod
+    def get_command(self, templatename, templatedir, userargs):
+        """
+        :param templatename: name of the template image to query
+        :param templatedir: local directory path in which templates are stored
+        :param userargs: user specified arguments to run
+
+        Get the command line to invoke in the container. If userargs
+        is specified, then this should override the default args in
+        the image"""
+        pass
-- 
2.4.3




More information about the libvir-list mailing list