Updated Branches:
  refs/heads/trunk e9c19145c -> 58a3eac93

AMBARI-3516. Resource management. Centos packages erase/update does not work. 
(Andrew Onischuk via mahadev)


Project: http://git-wip-us.apache.org/repos/asf/incubator-ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-ambari/commit/58a3eac9
Tree: http://git-wip-us.apache.org/repos/asf/incubator-ambari/tree/58a3eac9
Diff: http://git-wip-us.apache.org/repos/asf/incubator-ambari/diff/58a3eac9

Branch: refs/heads/trunk
Commit: 58a3eac93c74c9ef433c4cb8491666d82e5f6fa3
Parents: e9c1914
Author: Mahadev Konar <[email protected]>
Authored: Fri Oct 18 08:41:19 2013 -0700
Committer: Mahadev Konar <[email protected]>
Committed: Fri Oct 18 08:41:19 2013 -0700

----------------------------------------------------------------------
 .../providers/package/__init__.py               | 67 +++++---------------
 .../providers/package/yumrpm.py                 | 53 ++++------------
 .../resource_management/resources/packaging.py  |  2 +-
 3 files changed, 30 insertions(+), 92 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/58a3eac9/ambari-agent/src/main/python/resource_management/providers/package/__init__.py
----------------------------------------------------------------------
diff --git 
a/ambari-agent/src/main/python/resource_management/providers/package/__init__.py
 
b/ambari-agent/src/main/python/resource_management/providers/package/__init__.py
index 5862921..db83c62 100644
--- 
a/ambari-agent/src/main/python/resource_management/providers/package/__init__.py
+++ 
b/ambari-agent/src/main/python/resource_management/providers/package/__init__.py
@@ -4,66 +4,33 @@ from resource_management.providers import Provider
 
 class PackageProvider(Provider):
   def __init__(self, *args, **kwargs):
-    super(PackageProvider, self).__init__(*args, **kwargs)
-    self.get_current_status()
-
-  def get_current_status(self):
-    raise NotImplementedError()
-
+    super(PackageProvider, self).__init__(*args, **kwargs)   
+  
   def install_package(self, name, version):
     raise NotImplementedError()
-
   def remove_package(self, name):
     raise NotImplementedError()
-
-  def purge_package(self, name):
-    raise NotImplementedError()
-
   def upgrade_package(self, name, version):
     raise NotImplementedError()
 
   def action_install(self):
-    if self.resource.version != None and self.resource.version != 
self.current_version:
-      install_version = self.resource.version
-    elif self.current_version is None:
-      install_version = self.candidate_version
-    else:
-      return
-
-    if not install_version:
-      raise Fail(
-        "No version specified, and no candidate version available for package 
%s." % self.resource.package_name)
-
-    self.log.info(
-      "Install %s version %s (resource %s, current %s, candidate %s) location 
%s",
-      self.resource.package_name, install_version, self.resource.version,
-      self.current_version, self.candidate_version, self.resource.location)
-
-    status = self.install_package(self.resource.location, install_version)
-    if status:
-      self.resource.updated()
+    package_name = self.get_package_name_with_version()
+    self.log.info("Installing package %s", package_name)
+    self.install_package(package_name)
 
   def action_upgrade(self):
-    if self.current_version != self.candidate_version:
-      orig_version = self.current_version or "uninstalled"
-      self.log.info("Upgrading %s from version %s to %s",
-                    str(self.resource), orig_version, self.candidate_version)
-
-      status = self.upgrade_package(self.resource.location,
-                                    self.candidate_version)
-      if status:
-        self.resource.updated()
+    package_name = self.get_package_name_with_version()
+    self.log.info("Upgrading package %s", package_name)
+    self.upgrade_package(package_name)
 
   def action_remove(self):
-    if self.current_version:
-      self.log.info("Remove %s version %s", self.resource.package_name,
-                    self.current_version)
-      self.remove_package(self.resource.package_name)
-      self.resource.updated()
+    package_name = self.get_package_name_with_version()
+    self.log.info("Removing package %s", package_name)
+    self.remove_package(package_name)
 
-  def action_purge(self):
-    if self.current_version:
-      self.log.info("Purging %s version %s", self.resource.package_name,
-                    self.current_version)
-      self.purge_package(self.resource.package_name)
-      self.resource.updated()
+  def get_package_name_with_version(self):
+    if self.resource.version:
+      return self.resource.package_name + '-' + self.resource.version
+    else:
+      return self.resource.package_name
+    

http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/58a3eac9/ambari-agent/src/main/python/resource_management/providers/package/yumrpm.py
----------------------------------------------------------------------
diff --git 
a/ambari-agent/src/main/python/resource_management/providers/package/yumrpm.py 
b/ambari-agent/src/main/python/resource_management/providers/package/yumrpm.py
index 9bea01c..277e308 100644
--- 
a/ambari-agent/src/main/python/resource_management/providers/package/yumrpm.py
+++ 
b/ambari-agent/src/main/python/resource_management/providers/package/yumrpm.py
@@ -1,46 +1,17 @@
 from resource_management.providers.package import PackageProvider
-import yum
-
-
-class DummyCallback(object):
-  def event(self, state, data=None):
-    pass
+from subprocess import STDOUT, PIPE, check_call
 
+INSTALL_CMD = "/usr/bin/yum -d 0 -e 0 -y install %s"
+REMOVE_CMD = "/usr/bin/yum -d 0 -e 0 -y erase %s"
 
 class YumProvider(PackageProvider):
-  def get_current_status(self):
-    self.candidate_version = None
-    self.current_version = None
-    yb = yum.YumBase()
-    yb.doConfigSetup()
-    yb.doTsSetup()
-    yb.doRpmDBSetup()
-    for pkg in yb.rpmdb.returnPackages():
-      if pkg.name == self.resource.package_name:
-        self.current_version = pkg.version
-        self.log.debug("Current version of %s is %s" % (
-        self.resource.package_name, self.current_version))
-    searchlist = ['name', 'version']
-    args = [self.resource.package_name]
-    matching = yb.searchPackages(searchlist, args)
-    for po in matching:
-      if po.name == self.resource.package_name:
-        self.candidate_version = po.version
-        self.log.debug("Candidate version of %s is %s" % (
-        self.resource.package_name, self.current_version))
-
-  def install_package(self, name, version):
-    yb = yum.YumBase()
-    yb.doGenericSetup()
-    yb.doRepoSetup()
-    #TODO: Handle locks not being available
-    yb.doLock()
-    yb.install(pattern=name)
-    yb.buildTransaction()
-    #yb.conf.setattr('assumeyes',True)
-    yb.processTransaction(callback=DummyCallback())
-    yb.closeRpmDB()
-    yb.doUnlock()
+  def install_package(self, name):
+    return 0 == check_call(INSTALL_CMD % (name),
+                      shell=True, stdout=PIPE, stderr=STDOUT)
 
-  def upgrade_package(self, name, version):
-    return self.install_package(name, version)
+  def upgrade_package(self, name):
+    return self.install_package(name)
+  
+  def remove_package(self, name):
+    return 0 == check_call(REMOVE_CMD % (name),
+                           shell=True, stdout=PIPE, stderr=STDOUT)    

http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/58a3eac9/ambari-agent/src/main/python/resource_management/resources/packaging.py
----------------------------------------------------------------------
diff --git 
a/ambari-agent/src/main/python/resource_management/resources/packaging.py 
b/ambari-agent/src/main/python/resource_management/resources/packaging.py
index c86454c..d615ea5 100644
--- a/ambari-agent/src/main/python/resource_management/resources/packaging.py
+++ b/ambari-agent/src/main/python/resource_management/resources/packaging.py
@@ -8,5 +8,5 @@ class Package(Resource):
   package_name = ResourceArgument(default=lambda obj: obj.name)
   location = ResourceArgument(default=lambda obj: obj.package_name)
   version = ResourceArgument()
-  actions = ["install", "upgrade", "remove", "purge"]
+  actions = ["install", "upgrade", "remove"]
   build_vars = ForcedListArgument(default=[])

Reply via email to