From: Eren Yagdiran <erenyagdiran(a)gmail.com>
Define a 'Source' class which is an abstract base to use for
different template repository sources. Initially there will be
a docker source which can talk to the Docker repository REST
API, but others may follow.
Signed-off-by: Daniel P. Berrange <berrange(a)redhat.com>
---
.gitignore | 1 +
configure.ac | 1 +
libvirt-sandbox/image/Makefile.am | 2 ++
libvirt-sandbox/image/cli.py | 15 ++++++++------
libvirt-sandbox/image/sources/Makefile.am | 8 ++++++++
libvirt-sandbox/image/sources/Source.py | 33 +++++++++++++++++++++++++++++++
libvirt-sandbox/image/sources/__init__.py | 0
7 files changed, 54 insertions(+), 6 deletions(-)
mode change 100644 => 100755 libvirt-sandbox/image/cli.py
create mode 100644 libvirt-sandbox/image/sources/Makefile.am
create mode 100644 libvirt-sandbox/image/sources/Source.py
create mode 100644 libvirt-sandbox/image/sources/__init__.py
diff --git a/.gitignore b/.gitignore
index f77ea12..390d65c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -42,6 +42,7 @@ libvirt-sandbox/LibvirtSandbox-1.0.typelib
*.lo
*.la
*.o
+*.pyc
*~
libvirt-sandbox/libvirt-sandbox-init-lxc
libvirt-sandbox/libvirt-sandbox-init-common
diff --git a/configure.ac b/configure.ac
index a8376ca..92d65f4 100644
--- a/configure.ac
+++ b/configure.ac
@@ -130,6 +130,7 @@ AC_OUTPUT(Makefile
libvirt-sandbox/Makefile
libvirt-sandbox/tests/Makefile
libvirt-sandbox/image/Makefile
+ libvirt-sandbox/image/sources/Makefile
bin/Makefile
examples/Makefile
docs/Makefile
diff --git a/libvirt-sandbox/image/Makefile.am b/libvirt-sandbox/image/Makefile.am
index 7c8da51..344a881 100644
--- a/libvirt-sandbox/image/Makefile.am
+++ b/libvirt-sandbox/image/Makefile.am
@@ -1,4 +1,6 @@
+SUBDIRS = sources
+
pythonsandboxdir = $(pythondir)/libvirt_sandbox
pythonsandbox_DATA = __init__.py
diff --git a/libvirt-sandbox/image/cli.py b/libvirt-sandbox/image/cli.py
old mode 100644
new mode 100755
index ea04820..3bf7d58
--- a/libvirt-sandbox/image/cli.py
+++ b/libvirt-sandbox/image/cli.py
@@ -1,5 +1,5 @@
#!/usr/bin/python -Es
-#
+# -*- coding: utf-8 -*-
# Authors: Daniel P. Berrange <berrange(a)redhat.com>
# Eren Yagdiran <erenyagdiran(a)gmail.com>
#
@@ -32,11 +32,14 @@ import sys
import urllib2
import subprocess
-default_index_server = "index.docker.io"
-default_template_dir = "/var/lib/libvirt/templates"
-
-debug = True
-verbose = True
+import importlib
+def dynamic_source_loader(name):
+ name = name[0].upper() + name[1:]
+ modname = "libvirt_sandbox.image.sources." + name + "Source"
+ mod = importlib.import_module(modname)
+ classname = name + "Source"
+ classimpl = getattr(mod, classname)
+ return classimpl()
gettext.bindtextdomain("libvirt-sandbox", "/usr/share/locale")
gettext.textdomain("libvirt-sandbox")
diff --git a/libvirt-sandbox/image/sources/Makefile.am
b/libvirt-sandbox/image/sources/Makefile.am
new file mode 100644
index 0000000..48d0f33
--- /dev/null
+++ b/libvirt-sandbox/image/sources/Makefile.am
@@ -0,0 +1,8 @@
+
+pythonimagedir = $(pythondir)/libvirt_sandbox/image/sources
+pythonimage_DATA = \
+ __init__.py \
+ Source.py \
+ $(NULL)
+
+EXTRA_DIST = $(pythonimage_DATA)
diff --git a/libvirt-sandbox/image/sources/Source.py
b/libvirt-sandbox/image/sources/Source.py
new file mode 100644
index 0000000..f12b0eb
--- /dev/null
+++ b/libvirt-sandbox/image/sources/Source.py
@@ -0,0 +1,33 @@
+#!/usr/bin/python
+# -*- coding: utf-8 -*-
+#
+# Copyright (C) 2015 Universitat Politècnica de Catalunya.
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+#
+# Author: Eren Yagdiran <erenyagdiran(a)gmail.com>
+
+from abc import ABCMeta, abstractmethod
+
+class Source():
+ '''The Source class defines the base interface for
+ all image provider source implementations. An image
+ provide source is able to download templates from
+ a repository, convert them to a host specific image
+ format and report commands used to invoke them.'''
+
+ __metaclass__ = ABCMeta
+ def __init__(self):
+ pass
diff --git a/libvirt-sandbox/image/sources/__init__.py
b/libvirt-sandbox/image/sources/__init__.py
new file mode 100644
index 0000000..e69de29
--
2.4.3