def init(self):
        os.umask(
            0o022
        )  # umc umask is too restrictive for app center as it creates a lot of files in docker containers
        self.ucr = ucr_instance()

        self.update_applications_done = False
        install_opener(self.ucr)
        self._is_working = False

        try:
            self.package_manager = PackageManager(
                info_handler=MODULE.process,
                step_handler=None,
                error_handler=MODULE.warn,
                lock=False,
            )
        except SystemError as exc:
            MODULE.error(str(exc))
            raise umcm.UMC_Error(str(exc), status=500)
        self.package_manager.set_finished(
        )  # currently not working. accepting new tasks
        get_package_manager._package_manager = self.package_manager

        # build cache
        _update_modules()
        get_action('list').get_apps()

        # not initialize here: error prone due to network errors and also kinda slow
        self._uu = None
        self._cm = None

        # in order to set the correct locale
        locale.setlocale(locale.LC_ALL, str(self.locale))

        try:
            log_to_logfile()
        except IOError:
            pass

        # connect univention.appcenter.log to the progress-method
        handler = ProgressInfoHandler(self.package_manager)
        handler.setLevel(logging.INFO)
        get_base_logger().addHandler(handler)

        percentage = ProgressPercentageHandler(self.package_manager)
        percentage.setLevel(logging.DEBUG)
        get_base_logger().getChild('actions.install.progress').addHandler(
            percentage)
        get_base_logger().getChild('actions.upgrade.progress').addHandler(
            percentage)
        get_base_logger().getChild('actions.remove.progress').addHandler(
            percentage)
Exemplo n.º 2
0
    def _register_attributes(self, app, args):
        # FIXME: there is no better lib function than this snippet
        schema_file = app.get_share_file('schema')
        if os.path.exists(schema_file):
            self.log('Registering schema %s' % schema_file)
            lo, pos = self._get_ldap_connection(args)
            with self._get_password_file(args) as password_file:
                create_recursive_container(
                    'cn=ldapschema,cn=univention,%s' % ucr_get('ldap/base'),
                    lo, pos)
                if app.automatic_schema_creation:
                    schema_obj = UniventionLDAPSchema(ucr_instance())
                    userdn = self._get_userdn(args)
                    udm_passthrough_options = [
                        '--binddn', userdn, '--bindpwdfile', password_file
                    ]
                    opts = Values()
                    opts.packagename = 'appcenter-app-%s' % app.id
                    opts.packageversion = app.version
                    opts.ucsversionstart = None
                    opts.ucsversionend = None
                    os.environ['UNIVENTION_APP_IDENTIFIER'] = app.id
                    try:
                        schema_obj.register(schema_file, opts,
                                            udm_passthrough_options)
                    except SystemExit as exc:
                        if exc.code == 4:
                            self.warn(
                                'A newer version of %s has already been registered. Skipping...'
                                % schema_file)
                        else:
                            raise RegisterSchemaFailed(exc.code)
                    else:
                        if not schema_obj.wait_for_activation():
                            raise RegisterSchemaFileFailed(schema_file)
                    finally:
                        if 'UNIVENTION_APP_IDENTIFIER' in os.environ:
                            del os.environ['UNIVENTION_APP_IDENTIFIER']

                # and this is what should be there after one line of lib.register_schema(schema_file)
                app = app.get_app_cache_obj().copy(
                    locale='en').find_by_component_id(app.component_id)
                attributes, __, options = get_extended_attributes(app)
                for option in options:
                    self.log('Registering option %s' % option.name)
                    create_extended_option(option, app, lo, pos)
                if attributes:
                    for i, attribute in enumerate(attributes):
                        self.log('Registering attribute %s' % attribute.name)
                        create_extended_attribute(attribute, app, i + 1, lo,
                                                  pos)
Exemplo n.º 3
0
 def setup_parser(self, parser):
     interfaces = Interfaces(ucr_instance())
     ip_address = interfaces.get_default_ip_address()
     if ip_address:
         default_ip_address = ip_address.ip
     else:
         default_ip_address = '127.0.0.1'
     super(DevSetupLocalAppcenter, self).setup_parser(parser)
     parser.add_argument(
         '--appcenter-host',
         default=default_ip_address,
         help='The hostname of the new App Center. Default: %(default)s')
     parser.add_argument(
         '--revert',
         action='store_true',
         help='Reverts the changes of a previous dev-setup-local-appcenter')
Exemplo n.º 4
0
	def init(self):
		os.umask(0o022)  # umc umask is too restrictive for app center as it creates a lot of files in docker containers
		self.ucr = ucr_instance()

		self.update_applications_done = False
		util.install_opener(self.ucr)
		self._remote_progress = {}

		try:
			self.package_manager = PackageManager(
				info_handler=MODULE.process,
				step_handler=None,
				error_handler=MODULE.warn,
				lock=False,
			)
		except SystemError as exc:
			MODULE.error(str(exc))
			raise umcm.UMC_Error(str(exc), status=500)
		self.package_manager.set_finished()  # currently not working. accepting new tasks
		self.uu = UniventionUpdater(False)
		self.component_manager = util.ComponentManager(self.ucr, self.uu)
		get_package_manager._package_manager = self.package_manager

		# in order to set the correct locale for Application
		locale.setlocale(locale.LC_ALL, str(self.locale))

		try:
			log_to_logfile()
		except IOError:
			pass

		# connect univention.appcenter.log to the progress-method
		handler = ProgressInfoHandler(self.package_manager)
		handler.setLevel(logging.INFO)
		get_base_logger().addHandler(handler)

		percentage = ProgressPercentageHandler(self.package_manager)
		percentage.setLevel(logging.DEBUG)
		get_base_logger().getChild('actions.install.progress').addHandler(percentage)
		get_base_logger().getChild('actions.upgrade.progress').addHandler(percentage)
		get_base_logger().getChild('actions.remove.progress').addHandler(percentage)