File 0002-Add-ZypperPackagerMixin-to-guestagent.patch of Package openstack-trove-doc
From 97bc56cdad3527340c1d5ff3a8997ebea2c3d81d Mon Sep 17 00:00:00 2001
From: Thomas Bechtold <tbechtold@suse.com>
Date: Tue, 6 Sep 2016 16:23:44 +0200
Subject: [PATCH 2/2] Add ZypperPackagerMixin to guestagent
SUSE uses zypper as package manager. zypper is also based on RPM so
reuse the RPMPackagerMixin for zypper.
Change-Id: Iafc5589860cdbb2575d080197b86e548a63fc23d
---
trove/guestagent/pkg.py | 46 ++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 46 insertions(+)
Index: trove-7.0.0.0b3.dev89/trove/guestagent/pkg.py
===================================================================
--- trove-7.0.0.0b3.dev89.orig/trove/guestagent/pkg.py
+++ trove-7.0.0.0b3.dev89/trove/guestagent/pkg.py
@@ -255,6 +255,49 @@ class RedhatPackagerMixin(RPMPackagerMix
return OK
+class ZypperPackagerMixin(RPMPackagerMixin):
+ def _install(self, packages, time_out):
+ """Attempts to install packages.
+
+ Returns OK if the packages are installed or a result code if a
+ recoverable-error occurred.
+ Raises an exception if a non-recoverable error or timeout occurs.
+
+ """
+ cmd = "sudo zypper --quiet --non-interactive --no-gpg-checks " \
+ "--auto-agree-with-licenses install %s" % " ".join(packages)
+ output_expects = [
+ '\[sudo\] password for .*:',
+ 'No provider of (.*) found.'
+ ]
+ LOG.debug("Running package install command: %s" % cmd)
+ i, match = self.pexpect_run(cmd, output_expects, time_out)
+ if i == 0:
+ raise PkgPermissionError("Invalid permissions.")
+ elif i == 1:
+ raise PkgNotFoundError("Could not find pkg %s" % match.group(1))
+ return OK
+
+ def _remove(self, package_name, time_out):
+ """Removes a package.
+
+ Returns OK if the package is removed successfully or a result code if a
+ recoverable-error occurs.
+ Raises an exception if a non-recoverable error or timeout occurs.
+
+ """
+ cmd = "sudo zypper --quiet --non-interactive --no-gpg-checks " \
+ "rm %s" % package_name
+ LOG.debug("Running package remove command: %s" % cmd)
+ output_expects = [
+ '\[sudo\] password for .*:'
+ ]
+ i, match = self.pexpect_run(cmd, output_expects, time_out)
+ if i == 0:
+ raise PkgPermissionError("Invalid permissions.")
+ return OK
+
+
class DebianPackagerMixin(BasePackagerMixin):
def _fix(self, time_out):
@@ -440,6 +483,9 @@ class DebianPackagerMixin(BasePackagerMi
if operating_system.get_os() == operating_system.REDHAT:
class Package(RedhatPackagerMixin):
pass
+elif operating_system.get_os() == operating_system.SUSE:
+ class Package(ZypperPackagerMixin):
+ pass
else:
class Package(DebianPackagerMixin):
pass