diff options
author | Radostin Stoyanov <rstoyanov1@gmail.com> | 2017-08-03 14:13:04 +0100 |
---|---|---|
committer | Radostin Stoyanov <rstoyanov1@gmail.com> | 2017-08-03 14:29:45 +0100 |
commit | b3023c77387b6e738011eef7def6e04d081d19f2 (patch) | |
tree | 16ef6eaa1303cda83a556d78b05059b888f7c04e /src/virtBootstrap | |
parent | 29d66930f4f4772db12fa1fec9ad88b52901050a (diff) | |
download | virt-bootstrap.git-b3023c77387b6e738011eef7def6e04d081d19f2.tar.gz virt-bootstrap.git-b3023c77387b6e738011eef7def6e04d081d19f2.tar.xz virt-bootstrap.git-b3023c77387b6e738011eef7def6e04d081d19f2.zip |
Split 'sources' module into files
Improve readability by spliting the 'sources' module into separate
files. Each file contains only one class.
In addition update the mock statements in the unit tests to match these
changes.
Add recursive-include in MANIFEST.in to include virtBootstrap.sources
module.
Update the unit tests to match these changes.
Diffstat (limited to 'src/virtBootstrap')
-rw-r--r-- | src/virtBootstrap/sources/__init__.py | 26 | ||||
-rw-r--r-- | src/virtBootstrap/sources/docker_source.py (renamed from src/virtBootstrap/sources.py) | 53 | ||||
-rw-r--r-- | src/virtBootstrap/sources/file_source.py | 79 |
3 files changed, 108 insertions, 50 deletions
diff --git a/src/virtBootstrap/sources/__init__.py b/src/virtBootstrap/sources/__init__.py new file mode 100644 index 0000000..e891e9b --- /dev/null +++ b/src/virtBootstrap/sources/__init__.py @@ -0,0 +1,26 @@ +""" +sources - Class definitions which process container image or + tarball to extract the root file system in destination + directory or qcow2 image. + + Authors: + Radostin Stoyanov <rstoyanov1@gmail.com> + + Copyright (c) 2017 Radostin Stoyanov + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. +""" + +from virtBootstrap.sources.file_source import FileSource +from virtBootstrap.sources.docker_source import DockerSource diff --git a/src/virtBootstrap/sources.py b/src/virtBootstrap/sources/docker_source.py index 40b66f9..54d8903 100644 --- a/src/virtBootstrap/sources.py +++ b/src/virtBootstrap/sources/docker_source.py @@ -16,8 +16,9 @@ # along with this program. If not, see <http://www.gnu.org/licenses/>. """ -Class definitions which process container image or -archive from source and unpack them in destination directory. +DockerSource aim is to download container image from Docker registry and +extract the layers of root file system into destination directory or qcow2 +image with backing chains. """ import select @@ -35,54 +36,6 @@ from virtBootstrap import utils logger = logging.getLogger(__name__) -class FileSource(object): - """ - Extract root filesystem from file. - """ - def __init__(self, **kwargs): - """ - Bootstrap root filesystem from tarball - - @param uri: Path to tar archive file. - @param fmt: Format used to store image [dir, qcow2] - @param progress: Instance of the progress module - """ - self.path = kwargs['uri'].path - self.output_format = kwargs.get('fmt', utils.DEFAULT_OUTPUT_FORMAT) - self.progress = kwargs['progress'].update_progress - - def unpack(self, dest): - """ - Safely extract root filesystem from tarball - - @param dest: Directory path where the files to be extraced - """ - - if not os.path.isfile(self.path): - raise Exception('Invalid file source "%s"' % self.path) - - if self.output_format == 'dir': - self.progress("Extracting files into destination directory", - value=0, logger=logger) - utils.safe_untar(self.path, dest) - - elif self.output_format == 'qcow2': - # Remove the old path - file_name = os.path.basename(self.path) - qcow2_file = os.path.realpath('{}/{}.qcow2'.format(dest, - file_name)) - - self.progress("Extracting files into qcow2 image", value=0, - logger=logger) - utils.create_qcow2(self.path, qcow2_file) - else: - raise Exception("Unknown format:" + self.output_format) - - self.progress("Extraction completed successfully!", value=100, - logger=logger) - logger.info("Files are stored in: " + dest) - - class DockerSource(object): """ Extract files from Docker image diff --git a/src/virtBootstrap/sources/file_source.py b/src/virtBootstrap/sources/file_source.py new file mode 100644 index 0000000..c02f735 --- /dev/null +++ b/src/virtBootstrap/sources/file_source.py @@ -0,0 +1,79 @@ +# Authors: Cedric Bosdonnat <cbosdonnat@suse.com> +# +# Copyright (C) 2017 SUSE, Inc. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# This program 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 General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +""" +FileSource aim is to extract root filesystem from tar archive to destination +directory or qcow2 image. +""" + +import os +import logging + +from virtBootstrap import utils + + +# pylint: disable=invalid-name +# Create logger +logger = logging.getLogger(__name__) + + +class FileSource(object): + """ + Extract root filesystem from file. + """ + def __init__(self, **kwargs): + """ + Bootstrap root filesystem from tarball + + @param uri: Path to tar archive file. + @param fmt: Format used to store image [dir, qcow2] + @param progress: Instance of the progress module + """ + self.path = kwargs['uri'].path + self.output_format = kwargs.get('fmt', utils.DEFAULT_OUTPUT_FORMAT) + self.progress = kwargs['progress'].update_progress + + def unpack(self, dest): + """ + Safely extract root filesystem from tarball + + @param dest: Directory path where the files to be extraced + """ + + if not os.path.isfile(self.path): + raise Exception('Invalid file source "%s"' % self.path) + + if self.output_format == 'dir': + self.progress("Extracting files into destination directory", + value=0, logger=logger) + utils.safe_untar(self.path, dest) + + elif self.output_format == 'qcow2': + # Remove the old path + file_name = os.path.basename(self.path) + qcow2_file = os.path.realpath('{}/{}.qcow2'.format(dest, + file_name)) + + self.progress("Extracting files into qcow2 image", value=0, + logger=logger) + utils.create_qcow2(self.path, qcow2_file) + else: + raise Exception("Unknown format:" + self.output_format) + + self.progress("Extraction completed successfully!", value=100, + logger=logger) + logger.info("Files are stored in: " + dest) |