def _apt_get_dry_run(action, pkgs):
    apt_args = _apt_args()
    logger = LogCatcher(package_logger)
    success = call_process(['/usr/bin/apt-get'] + apt_args + [action, '-s'] +
                           pkgs,
                           logger=logger).returncode == 0
    install, remove, broken = [], [], []
    install_regex = re.compile('^(Inst) ([^ ]*?) \((.*?) ')
    upgrade_remove_regex = re.compile('^(Remv|Inst) ([^ ]*?) \[(.*?)\]')
    for line in logger.stdout():
        for regex in [install_regex, upgrade_remove_regex]:
            match = regex.match(line)
            if match:
                operation, pkg_name, version = match.groups()
                if operation == 'Inst':
                    install.append(pkg_name)
                elif operation == 'Remv':
                    remove.append(pkg_name)
                break
    if not success:
        for pkg in pkgs:
            if action == 'install' and pkg not in install:
                broken.append(pkg)
            if action == 'remove' and pkg not in remove:
                broken.append(pkg)
    return dict(zip(['install', 'remove', 'broken'],
                    [install, remove, broken]))
Ejemplo n.º 2
0
 def _update_converter_service(self, app):
     listener_file = '/usr/lib/univention-directory-listener/system/%s.py' % app.id
     if os.path.exists(listener_file):
         logger = LogCatcher()
         self._subprocess([
             'systemctl', 'is-enabled',
             'univention-appcenter-listener-converter@%s.service' % app.id
         ], logger)
         if list(logger.stdout()) == ['enabled']:
             self._subprocess([
                 'systemctl', 'restart',
                 'univention-appcenter-listener-converter@%s.service' %
                 app.id
             ])
         else:
             self._subprocess([
                 'systemctl', 'enable',
                 'univention-appcenter-listener-converter@%s.service' %
                 app.id
             ])
             self._subprocess([
                 'systemctl', 'start',
                 'univention-appcenter-listener-converter@%s.service' %
                 app.id
             ])
     else:
         self._subprocess([
             'systemctl', 'stop',
             'univention-appcenter-listener-converter@%s.service' % app.id
         ])
         self._subprocess([
             'systemctl', 'disable',
             'univention-appcenter-listener-converter@%s.service' % app.id
         ])
Ejemplo n.º 3
0
	def execute(self, query):
		logger = LogCatcher()
		process = call_process_as('postgres', ['/usr/bin/psql', '-tc', query], logger=logger)
		if process.returncode:
			for level, msg in logger.logs:
				if level == 'OUT':
					database_logger.info(msg)
				elif level == 'ERR':
					database_logger.warn(msg)
			raise DatabaseError('Returncode %s for query' % process.returncode)
		return list(logger.stdout())