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]))
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 ])
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())