File paa_fix_driver_install_detect.patch of Package python-azure-agent.6404

--- azurelinuxagent/pa/rdma/suse.py.orig
+++ azurelinuxagent/pa/rdma/suse.py
@@ -18,7 +18,6 @@
 #
 
 import glob
-import os
 import azurelinuxagent.common.logger as logger
 import azurelinuxagent.common.utils.shellutil as shellutil
 from azurelinuxagent.common.rdma import RDMAHandler
@@ -37,8 +36,10 @@ class SUSERDMAHandler(RDMAHandler):
             return
         zypper_install = 'zypper -n in %s'
         zypper_install_noref = 'zypper -n --no-refresh in %s'
+        zypper_lock = 'zypper addlock %s'
         zypper_remove = 'zypper -n rm %s'
         zypper_search = 'zypper -n se -s %s'
+        zypper_unlock = 'zypper removelock %s'
         package_name = 'msft-rdma-kmp-default'
         cmd = zypper_search % package_name
         status, repo_package_info = shellutil.run_get_output(cmd)
@@ -54,13 +55,23 @@ class SUSERDMAHandler(RDMAHandler):
                 installed = sections[0].strip()
                 version = sections[3].strip()
                 driver_package_versions.append(version)
-                if fw_version in version and installed == 'i':
+                if (
+                        fw_version in version
+                        and len(installed) >= 1
+                        and installed[0] == 'i'
+                ):
                     info_msg = 'RDMA: Matching driver package "%s-%s" '
                     info_msg += 'is already installed, nothing to do.'
                     logger.info(info_msg % (package_name, version))
                     return True
-                if installed == 'i':
+                if len(installed) >= 1 and installed[0] == 'i':
+                    # A driver with a different version is installed
                     driver_package_installed = True
+                    cmd = zypper_unlock % package_name
+                    result = shellutil.run(cmd)
+                    info_msg = 'Driver with different version installed '
+                    info_msg += 'unlocked package "%s".'
+                    logger.info(info_msg % (package_name))
 
         # If we get here the driver package is installed but the
         # version doesn't match or no package is installed
@@ -80,7 +91,7 @@ class SUSERDMAHandler(RDMAHandler):
 
         logger.info("RDMA: looking for fw version %s in packages" % fw_version)
         for entry in driver_package_versions:
-            if not fw_version in version:
+            if fw_version not in entry:
                 logger.info("Package '%s' is not a match." % entry)
             else:
                 logger.info("Package '%s' is a match. Installing." % entry)
@@ -94,6 +105,11 @@ class SUSERDMAHandler(RDMAHandler):
                 msg = 'RDMA: Successfully installed "%s" from '
                 msg += 'configured repositories'
                 logger.info(msg % complete_name)
+                # Lock the package so it does not accidentally get updated
+                cmd = zypper_lock % package_name
+                result = shellutil.run(cmd)
+                info_msg = 'Applied lock to "%s"' % package_name
+                logger.info(info_msg)
                 if not self.load_driver_module() or requires_reboot:
                     self.reboot_system()
                 return True
@@ -119,6 +135,11 @@ class SUSERDMAHandler(RDMAHandler):
                     msg = 'RDMA: Successfully installed "%s" from '
                     msg += 'local package cache'
                     logger.info(msg % (local_package))
+                    # Lock the package so it does not accidentally get updated
+                    cmd = zypper_lock % package_name
+                    result = shellutil.run(cmd)
+                    info_msg = 'Applied lock to "%s"' % package_name
+                    logger.info(info_msg)
                     if not self.load_driver_module() or requires_reboot:
                         self.reboot_system()
                     return True
openSUSE Build Service is sponsored by