From: Eren Yagdiran <erenyagdiran(a)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(a)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