From: Travis Rhoden Date: Thu, 16 Jul 2015 01:14:38 +0000 (+0000) Subject: [RM-12259] Add classes for Yum and DNF package managers X-Git-Tag: v1.5.26~3^2~5 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=09138eeb0a0c112ca48f0bc06d3a218851396faf;p=ceph-deploy.git [RM-12259] Add classes for Yum and DNF package managers Introduce Yum and DNF classes that extend a base RPMManager class that contains all the commonalities between Yum and DNF. Signed-off-by: Travis Rhoden --- diff --git a/ceph_deploy/util/pkg_managers.py b/ceph_deploy/util/pkg_managers.py index 40e3bbd..20ab161 100644 --- a/ceph_deploy/util/pkg_managers.py +++ b/ceph_deploy/util/pkg_managers.py @@ -177,3 +177,102 @@ def zypper_refresh(conn): conn, cmd ) + + +class PackageManager(object): + """ + Base class for all Package Managers + """ + + def __init__(self, remote_conn): + self.remote_info = remote_conn + self.remote_conn = remote_conn.conn + + def _run(self, cmd): + return remoto.process.run( + self.remote_conn, + cmd + ) + + def install(self, packages): + """Install packages on remote node""" + raise NotImplementedError() + + def remove(self, packages): + """Uninstall packages on remote node""" + raise NotImplementedError() + + def clean(self): + """Clean metadata/cache""" + raise NotImplementedError() + + +class RPMManagerBase(PackageManager): + """ + Base class to hold common pieces of Yum and DNF + """ + + executable = None + + def install(self, packages): + if isinstance(packages, str): + packages = [packages] + + cmd = [ + self.executable, + '-y', + 'install', + ] + cmd.extend(packages) + return self._run(cmd) + + def remove(self, packages): + if isinstance(packages, str): + packages = [packages] + + cmd = [ + self.executable, + '-y', + '-q', + 'remove', + ] + cmd.extend(packages) + return self._run(cmd) + + def clean(self, item=None): + item = item or 'all' + cmd = [ + self.executable, + 'clean', + item, + ] + + return self._run(cmd) + + +class DNF(RPMManagerBase): + """ + The DNF Package manager + """ + + executable = 'dnf' + + def install_priorities_plugin(self): + # DNF supports priorities natively + pass + + +class Yum(RPMManagerBase): + """ + The Yum Package manager + """ + + executable = 'yum' + + def install_priorities_plugin(self): + package_name = 'yum-plugin-priorities' + + if self.remote_info.normalized_name == 'centos': + if self.remote_info.normalized_release.int_major != 6: + package_name = 'yum-priorities' + self.install(package_name)