Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
openSUSE:Step:15-SP4
virt-manager.10841
virtman-show-suse-install-repos.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File virtman-show-suse-install-repos.patch of Package virt-manager.10841
Enhancement that gets installation repos from zypper. These locations are then presented as potential installation sources when creating a VM. Index: virt-manager-1.5.1/virtManager/create.py =================================================================== --- virt-manager-1.5.1.orig/virtManager/create.py +++ virt-manager-1.5.1/virtManager/create.py @@ -424,7 +424,13 @@ class vmmCreate(vmmGObjectUI): self.widget("install-url-entry").set_text("") self.widget("install-url-options").set_expanded(False) urlmodel = self.widget("install-url-combo").get_model() - _populate_media_model(urlmodel, self.config.get_media_urls()) + urllist = self.config.get_media_urls() + (index, inst_repos) = util.getInstallRepos() + for u in urllist: + if u in inst_repos: + inst_repos.remove(u) + media_urllist = urllist + inst_repos + _populate_media_model(urlmodel, media_urllist) self._set_distro_labels("-", "-") # Install import Index: virt-manager-1.5.1/virtinst/util.py =================================================================== --- virt-manager-1.5.1.orig/virtinst/util.py +++ virt-manager-1.5.1/virtinst/util.py @@ -23,9 +23,12 @@ import os import random import re import sys +import subprocess +from subprocess import Popen, PIPE import libvirt +_host_repo_url = None def listify(l): if l is None: @@ -312,3 +315,57 @@ def make_meter(quiet): if quiet: return progress.BaseMeter() return progress.TextMeter(fo=sys.stdout) + +def getHostInstallSource(): + global _host_repo_url + if _host_repo_url is not None: + return _host_repo_url + if os.geteuid() != 0: + return None + + (_,zypper_output) = lookupZypperRepos() + if len(zypper_output): + _host_repo_url = zypper_output[0] + return _host_repo_url + return None + +def lookupZypperRepos(dom0_inst_source=None): + try: + env = os.environ.copy() + env['LC_ALL'] = 'C' + cmd = ['/usr/bin/zypper', 'lr', '-u', '-P', '-E'] + p = subprocess.Popen(cmd, stdout=PIPE, stderr=PIPE, env=env) + stdout, stderr = p.communicate() + zypper_output = stdout.decode() + zypper_list = zypper_output.split("\n") + zypper_header = [x.strip(' ') for x in zypper_list[0].split("|")] + uri_index = zypper_header.index("URI") + except: + inst_source = [] + if dom0_inst_source: + inst_source = [dom0_inst_source] + return (0, inst_source) + + index_dom0 = -1 + number_of_sources = 0 + zypper_output = [] + for repo in zypper_list: + repo = [x.strip(' ') for x in repo.split("|")] + if len(repo) >= uri_index: + str = repo[uri_index] + if str.startswith('ftp://') or str.startswith('http://') or str.startswith('nfs://') or str.startswith('smb://'): + zypper_output.append(str) + if dom0_inst_source is not None and str == dom0_inst_source: + index_dom0 = number_of_sources + number_of_sources += 1 + + if index_dom0 == -1 and dom0_inst_source: + index_dom0 = 0 + zypper_output.insert(0, dom0_inst_source) + return (index_dom0, zypper_output) + +def getInstallRepos(): + if os.geteuid() != 0: + return (0, []) + return lookupZypperRepos(getHostInstallSource()) +
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor