--- virtinst/urlfetcher.py | 38 ++++++++++++++++++++++++++++++++------ 1 file changed, 32 insertions(+), 6 deletions(-) diff --git a/virtinst/urlfetcher.py b/virtinst/urlfetcher.py index 1288668a..3d197afd 100644 --- a/virtinst/urlfetcher.py +++ b/virtinst/urlfetcher.py @@ -305,11 +305,7 @@ class _MountedURLFetcher(_LocalURLFetcher): if self.location.startswith("nfs:"): cmd = [mountcmd, "-o", "ro", self.location[4:], self._srcdir] else: - if stat.S_ISBLK(os.stat(self.location)[stat.ST_MODE]): - mountopt = "ro" - else: - mountopt = "ro,loop" - cmd = [mountcmd, "-o", mountopt, self.location, self._srcdir] + cmd = [mountcmd, "-o", "ro", self.location, self._srcdir] logging.debug("mount cmd: %s", cmd) if not self._in_test_suite: @@ -338,6 +334,33 @@ class _MountedURLFetcher(_LocalURLFetcher): self._mounted = False +class _ISOURLFetcher(_URLFetcher): + _cache_file_list = None + + def _make_full_url(self, filename): + return "/" + filename + + def _grabber(self, url): + """ + Use isoinfo to grab the file + """ + print "_grabber: filename", url + output = subprocess.check_output( + ["isoinfo", "-J", "-i", self.location, "-x", url]) + return io.BytesIO(output), len(output) + + def _hasFile(self, filename): + """ + Use isoinfo to list and search for the file + """ + if not self._cache_file_list: + output = subprocess.check_output( + ["isoinfo", "-J", "-i", self.location, "-f"]) + self._cache_file_list = output.splitlines(False) + + return filename in self._cache_file_list + + def fetcherForURI(uri, *args, **kwargs): if uri.startswith("http://") or uri.startswith("https://"): fclass = _HTTPURLFetcher @@ -348,9 +371,12 @@ def fetcherForURI(uri, *args, **kwargs): elif os.path.isdir(uri): # Pointing to a local tree fclass = _LocalURLFetcher + elif stat.S_ISBLK(os.stat(uri)[stat.ST_MODE]): + # Pointing to a block device + fclass = _MountedURLFetcher else: # Pointing to a path, like an .iso to mount - fclass = _MountedURLFetcher + fclass = _ISOURLFetcher return fclass(uri, *args, **kwargs) -- 2.14.1 _______________________________________________ virt-tools-list mailing list virt-tools-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/virt-tools-list