Source code for cfd_package.types
from cfd.pool import function_registry
from cfd.types import CFDType
from cfd_package.package_managers import package_manager_registry
import logging
logger = logging.getLogger("cfd")
[docs]class CFDPackage(CFDType):
"""
CFDPackage is a generic type to describe a package to be installed on system using a package manager registered in
the package manager registry.
Example::
CFDPackage("nginx", ensure=True, package_manager='apt-get', version='1.0')
"""
def __init__(self, package_name, ensure=True, package_manager=None, version=None):
self.package_name = package_name
self.ensure = ensure
self.package_manager = package_manager
self.version = version
def as_dict(self):
return {
'package_name': self.package_name,
'package_manager': self.package_manager,
'ensure': self.ensure,
'version': self.version
}
def execute(self, facts):
package_manager = self.package_manager
if not package_manager:
if facts['osfamily'] == 'Debian':
package_manager = 'apt-get'
package_manager_class = package_manager_registry[package_manager]()
if self.ensure:
logger.info("Installing %s %s" % (self.package_name, "version %s" % self.version if self.version else ''))
package_manager_class.install(self.package_name, version=self.version)
else:
if package_manager_class.version(self.package_name):
logger.info("Uninstalling %s" % self.package_name)
package_manager_class.uninstall(self.package_name)
function_registry.register(CFDPackage)