[master/rhel7] Add platform specific group selection (#884385)
Brian C. Lane
bcl at redhat.com
Tue Jul 22 21:10:07 UTC 2014
Virtualization platforms would like to have their packages installed
automatically when running inside them. This uses systemd-detect-virt to
identify the platform and creates a group id to be selected by prefixing
it with "platform-" so that, for example, running on kvm will result in
a group named "platform-kvm" being selected if it exists.
---
pyanaconda/iutil.py | 18 ++++++++++++++++++
pyanaconda/packaging/__init__.py | 11 +++++++++++
pyanaconda/packaging/dnfpayload.py | 2 +-
pyanaconda/packaging/yumpayload.py | 2 +-
4 files changed, 31 insertions(+), 2 deletions(-)
diff --git a/pyanaconda/iutil.py b/pyanaconda/iutil.py
index 642e7b0..325270d 100644
--- a/pyanaconda/iutil.py
+++ b/pyanaconda/iutil.py
@@ -878,3 +878,21 @@ def xprogressive_delay():
while True:
yield 0.25*(2**counter)
counter += 1
+
+def get_platform_groupid():
+ """ Return a platform group id string
+
+ This runs systemd-detect-virt and if the result is not 'none' it
+ prefixes the lower case result with "platform-" for use as a group id.
+
+ :returns: str
+ """
+ try:
+ platform = execWithCapture("systemd-detect-virt", []).strip()
+ except (IOError, AttributeError):
+ return ""
+
+ if platform == "none":
+ return ""
+
+ return "platform-"+platform.lower()
diff --git a/pyanaconda/packaging/__init__.py b/pyanaconda/packaging/__init__.py
index c368e0d..d235183 100644
--- a/pyanaconda/packaging/__init__.py
+++ b/pyanaconda/packaging/__init__.py
@@ -725,6 +725,17 @@ class PackagePayload(Payload):
else:
self.rpmMacros.append(('__file_context_path', '%{nil}'))
+ # Add platform specific group
+ groupid = iutil.get_platform_groupid()
+ if groupid and groupid in self.groups:
+ if isinstance(groups, list):
+ log.info("Adding platform group %s", groupid)
+ groups.append(groupid)
+ else:
+ log.warning("Could not add %s to groups, not a list.", groupid)
+ elif groupid:
+ log.warning("Platform group %s not available.", groupid)
+
@property
def kernelPackages(self):
if "kernel" in self.data.packages.excludedList:
diff --git a/pyanaconda/packaging/dnfpayload.py b/pyanaconda/packaging/dnfpayload.py
index 64f7433..4efc524 100644
--- a/pyanaconda/packaging/dnfpayload.py
+++ b/pyanaconda/packaging/dnfpayload.py
@@ -556,7 +556,7 @@ class DNFPayload(packaging.PackagePayload):
return list(gids)
def preInstall(self, packages=None, groups=None):
- super(DNFPayload, self).preInstall()
+ super(DNFPayload, self).preInstall(packages, groups)
self.requiredPackages = packages
self.requiredGroups = groups
self.addDriverRepos()
diff --git a/pyanaconda/packaging/yumpayload.py b/pyanaconda/packaging/yumpayload.py
index 6dca7f6..67f7a02 100644
--- a/pyanaconda/packaging/yumpayload.py
+++ b/pyanaconda/packaging/yumpayload.py
@@ -1332,7 +1332,7 @@ reposdir=%s
def preInstall(self, packages=None, groups=None):
""" Perform pre-installation tasks. """
- super(YumPayload, self).preInstall()
+ super(YumPayload, self).preInstall(packages, groups)
progressQ.send_message(_("Starting package installation process"))
self.requiredPackages = packages
--
1.9.3
More information about the anaconda-patches
mailing list