[rhel7-branch 9/29] Add platform specific group selection (#884385)

bcl installerbot-noreply at redhat.com
Tue Jun 2 00:31:10 UTC 2015


From: "Brian C. Lane" <bcl at redhat.com>

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.

Resolves: rhbz#884385

(cherry picked from commit 06f531eb3a2d31e5a622581f099fb93be780e193)

Related: rhbz#1196721
---
 pyanaconda/iutil.py                | 19 +++++++++++++++++++
 pyanaconda/packaging/__init__.py   | 11 +++++++++++
 pyanaconda/packaging/yumpayload.py |  2 +-
 3 files changed, 31 insertions(+), 1 deletion(-)

diff --git a/pyanaconda/iutil.py b/pyanaconda/iutil.py
index 61e5ec9..6c6a12d 100644
--- a/pyanaconda/iutil.py
+++ b/pyanaconda/iutil.py
@@ -937,3 +937,22 @@ def ipmi_report(event):
     execWithCapture("ipmitool", ["sel", "add", path])
 
     os.remove(path)
+
+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: Empty string or a group id for the detected platform
+        :rtype: 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 df9b55c..4ed4e97 100644
--- a/pyanaconda/packaging/__init__.py
+++ b/pyanaconda/packaging/__init__.py
@@ -741,6 +741,17 @@ def preInstall(self, packages=None, groups=None):
         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/yumpayload.py b/pyanaconda/packaging/yumpayload.py
index 19d8661..37209de 100644
--- a/pyanaconda/packaging/yumpayload.py
+++ b/pyanaconda/packaging/yumpayload.py
@@ -1348,7 +1348,7 @@ def selectRequiredPackages(self):
 
     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


-- 
To view this commit on github, visit https://github.com/rhinstaller/anaconda/commit/49533569e2a45842958a880876a55d3e3c447d93


More information about the anaconda-patches mailing list