You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by ma...@apache.org on 2013/10/18 17:39:49 UTC
git commit: AMBARI-3516. Resource management. Centos packages
erase/update does not work. (Andrew Onischuk via mahadev)
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 <ma...@apache.org>
Authored: Fri Oct 18 08:41:19 2013 -0700
Committer: Mahadev Konar <ma...@apache.org>
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=[])