virt-manager/virtman-show-suse-install-repos.patch
Charles Arnold 544164a095 - Update to virt-manager 1.4.1
virt-manager-1.4.1.tar.bz2
  * storage/nodedev event API support (Jovanka Gulicoska)
  * UI options for enabling spice GL (Marc-André Lureau)
  * Add default virtio-rng /dev/urandom for supported guest OS
  * Cloning and rename support for UEFI VMs (Pavel Hrdina)
  * libguestfs inspection UI improvements (Pino Toscano)
  * virt-install: Add –qemu-commandline
  * virt-install: Add –network vhostuser (Chen Hanxiao)
  * virt-install: Add –sysinfo (Charles Arnold)
- Dropped the following patches contained in new tarball
  0425975f-use-virDomainMigrate3-API.patch
  0910c8dc-black-display-if-graphic-mode-vnc-and-listen-type-none.patch
  1d2cd306-Fix-incorrect-usage-of-virtio-input.patch
  2df8dc39-detect-whether-IP-address-comes-from-DHCP-server.patch
  559e813b-xmlbuilder-02.patch
  561f5cd3-drop-xenmigr-scheme-from-Xen-migration-URI.patch
  5a11cf07-virt-manager-generates-invalid-guest-XML.patch
  617b9271-dont-return-virtio1.0-net-as-valid-device-name.patch
  63784f4d-document-new-sysinfo-option.patch
  6daff68a-fix-italian-lang-file.patch
  7962672c-fix-error-checking-extra_args.patch
  835ddc5f-xmlbuilder-04.patch
  a3206f89-Add-the-sysinfo-option.patch
  a931a1a6-xmlbuilder-03.patch
  b08647c2-xmlbuilder-05.patch
  b31c0b44-Add-classes-for-defining-SMBios-information.patch
  b4858842-fix-bad-version-check-regression.patch
  b8dccf6a-fix-connection-to-remote-spice-with-password.patch
  c5ce0ab5-connection-fix-transport-detection.patch

OBS-URL: https://build.opensuse.org/package/show/Virtualization/virt-manager?expand=0&rev=341
2017-03-09 19:10:48 +00:00

143 lines
5.5 KiB
Diff

Enhancement that gets the hosts installation location from
install.inf and also collects the repos provided by zypper.
These locations are then presented as potential installation
locations when creating a VM.
Index: virt-manager-1.4.1/virtManager/create.py
===================================================================
--- virt-manager-1.4.1.orig/virtManager/create.py
+++ virt-manager-1.4.1/virtManager/create.py
@@ -403,7 +403,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.4.1/virtinst/util.py
===================================================================
--- virt-manager-1.4.1.orig/virtinst/util.py
+++ virt-manager-1.4.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:
@@ -343,3 +346,101 @@ 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
+
+ if os.path.exists('/var/lib/YaST2/install.inf'):
+ server_ip = server_name = server_dir = inst_mode = None
+ f = open('/var/lib/YaST2/install.inf')
+ lines = f.readlines()
+ f.close()
+ # Newer install.inf files use RepoURL. Older versions require parsing more fields
+ for line in lines:
+ if line.startswith('RepoURL:'):
+ repo_url = line[:-1].split('?', 1)[0]
+ repo_url = repo_url.split(' ')
+ if len(repo_url) > 1:
+ if repo_url[1].startswith('ftp:') or repo_url[1].startswith('http:') or \
+ repo_url[1].startswith('smb:') or repo_url[1].startswith('nfs:'):
+ _host_repo_url = repo_url[1]
+ return repo_url[1]
+ return None
+ elif line.startswith('InstMode:'):
+ inst_mode = line[:-1].split('?', 1)[0]
+ inst_mode = inst_mode.split(' ')
+ inst_mode = inst_mode[1]
+ if inst_mode != 'ftp' and inst_mode != 'http' and inst_mode != 'smb' and inst_mode != 'nfs':
+ return None
+ elif line.startswith('ServerIP:'):
+ server_ip = line[:-1].split('?', 1)[0]
+ server_ip = server_ip.split(' ')
+ server_ip = server_ip[1]
+ elif line.startswith('ServerName:'):
+ server_name = line[:-1].split('?', 1)[0]
+ server_name = server_name.split(' ')
+ server_name = server_name[1]
+ elif line.startswith('Serverdir:'):
+ server_dir = line[:-1].split('?', 1)[0]
+ server_dir = server_dir.split(' ')
+ server_dir = server_dir[1]
+ if inst_mode:
+ repo_url = inst_mode + "://"
+ if server_name:
+ repo_url = repo_url + server_name + "/"
+ if server_dir:
+ repo_url = repo_url + server_dir
+ elif server_ip:
+ repo_url = repo_url + server_ip + "/"
+ if server_dir:
+ repo_url = repo_url + server_dir
+ _host_repo_url = repo_url
+ return repo_url
+ return None
+
+def getInstallRepos(enabled_sources_only = True):
+ if os.geteuid() != 0:
+ return (0, [])
+ dom0_inst_source = getHostInstallSource()
+ try:
+ env = os.environ.copy()
+ env['LC_ALL'] = 'C'
+ if enabled_sources_only is True:
+ cmd = ['/usr/bin/zypper', 'lr', '-u', '-E']
+ else:
+ cmd = ['/usr/bin/zypper', 'lr', '-u']
+ p = subprocess.Popen(cmd, stdout=PIPE, stderr=PIPE, env=env)
+ stdout, stderr = p.communicate()
+ zypper_output = stdout
+ 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)
+
+