def _upgrade_docker(self, app, args): install = get_action('install')() action_args = install._build_namespace( _namespace=args, app=app, set_vars=self._get_configure_settings(self.old_app, filter_action=False), send_info=False, skip_checks=['must_not_be_installed']) if install.call_with_namespace(action_args): app_cache = Apps() for _app in app_cache.get_all_apps(): if _app.plugin_of == app.id and _app.is_installed(): _app = app_cache.find(_app.id, latest=True) if _app.docker: _old_app = self.old_app self._upgrade_docker(_app, args) self.old_app = _old_app remove = get_action('remove')() action_args = remove._build_namespace( _namespace=args, app=self.old_app, send_info=False, skip_checks=['must_not_be_depended_on']) remove._remove_app(self.old_app, action_args) if remove._unregister_component(self.old_app): update_packages() self._call_join_script( app, args ) # run again in case remove() called an installed unjoin script self.old_app = app
def install(self): packages = self._get_software_packages() if packages: if packages_are_installed(packages, strict=False): mark_packages_as_manually_installed(packages) else: database_logger.info('Installing/upgrading %s' % ', '.join(packages)) update_packages() if not install_packages(packages): raise DatabaseCreationFailed('Could not install software packages')
def _install_app(self, app, args): if self._register_component(app): update_packages() if app.default_packages_master: if ucr_get('server/role') == 'domaincontroller_master': self._install_master_packages(app) self.percentage = 30 for host, is_master in find_hosts_for_master_packages(): self._install_only_master_packages_remotely( app, host, is_master, args) if ucr_get('server/role') == 'domaincontroller_backup': self._install_master_packages(app) self.percentage = 30 ret = self._install_packages(app.get_packages()) self.percentage = 80 return ret
def _do_it(self, app, args): if not self._remove_app(app, args): raise RemoveFailed() self.percentage = 45 self._unregister_app(app, args) self.percentage = 50 self._unregister_attributes(app, args) self.percentage = 60 if self._unregister_component(app): update_packages() self.percentage = 70 self._unregister_files(app) self.percentage = 80 self._call_unjoin_script(app, args) if not app.docker: ucr_save({'appcenter/prudence/docker/%s' % app.id: 'yes'})
def _install_master_packages(self, app, unregister_if_uninstalled=False): old_app = Apps().find(app.id) was_installed = old_app.is_installed() if self._register_component(app): update_packages() ret = self._install_packages(app.default_packages_master) if was_installed: if old_app != app: self.log('Re-registering component for %s' % old_app) if self._register_component(old_app): update_packages() elif unregister_if_uninstalled: self.log('Unregistering component for %s' % app) if self._unregister_component(app): update_packages() return ret
def _install_packages_dry_run(self, app, args, with_dist_upgrade): original_app = Apps().find(app.id) if original_app.is_installed(): was_installed = True else: was_installed = False self.log('Dry run for %s' % app) if self._register_component(app): self.debug('Updating packages') update_packages() self.debug('Component %s registered' % app.component_id) pkgs = self._get_packages_for_dry_run(app, args) self.debug('Dry running with %r' % pkgs) ret = install_packages_dry_run(pkgs) if with_dist_upgrade: upgrade_ret = dist_upgrade_dry_run() ret['install'] = sorted( set(ret['install']).union(set(upgrade_ret['install']))) ret['remove'] = sorted( set(ret['remove']).union(set(upgrade_ret['remove']))) ret['broken'] = sorted( set(ret['broken']).union(set(upgrade_ret['broken']))) if args.install_master_packages_remotely: # TODO: should test remotely self.log('Not testing package changes of remote packages!') pass if args.dry_run or ret['broken']: if was_installed: if self._register_component(original_app): self.debug('Updating packages') update_packages() self.debug('Component %s reregistered' % original_app.component_id) else: if self._unregister_component(app): self.debug('Updating packages') update_packages() self.debug('Component %s unregistered' % app.component_id) return ret