def __init__(self, check_access=True): UniventionUpdater.__init__(self, check_access) self.log = logging.getLogger('updater.Mirror') self.log.addHandler(NullHandler()) self.repository_path = self.configRegistry.get( 'repository/mirror/basepath', '/var/lib/univention-repository' ) version_end = self.configRegistry.get('repository/mirror/version/end') or self.current_version self.version_end = UCS_Version(version_end) version_start = self.configRegistry.get('repository/mirror/version/start') or (self.version_major, 0, 0) self.version_start = UCS_Version(version_start) # set architectures to mirror archs = self.configRegistry.get( 'repository/mirror/architectures', '' ) if archs: self.architectures = archs.split( ' ' )
def mirror_update_scripts(self): '''mirrors the preup.sh and postup.sh scripts''' start = self.version_start end = self.version_end parts = self.parts archs = ('all', ) repos = self._iterate_version_repositories(start, end, parts, archs) # returns generator start_errata = UCS_Version((start.major, start.minor, 1)) # errata updates start with 'errata1' end_errata = UCS_Version( (end.major, end.minor, 999)) # get all available for mirror errata = self._iterate_errata_repositories(start_errata, end_errata, parts, archs) # returns generator components = self.get_components(only_localmirror_enabled=True) comp = self._iterate_component_repositories( components, start, end, archs, for_mirror_list=True) # returns generator all_repos = itertools.chain( repos, errata, comp) # concatenate all generators into a single one for server, struct, phase, path, script in UniventionUpdater.get_sh_files( all_repos, self.script_verify): self.log.info('Mirroring %s:%r/%s to %s', server, struct, phase, path) assert script is not None, 'No script' # use prefix if defined - otherwise file will be stored in wrong directory if server.prefix: filename = os.path.join(self.repository_path, 'mirror', server.prefix, path) else: filename = os.path.join(self.repository_path, 'mirror', path) # Check disabled, otherwise files won't get refetched if they change on upstream server # if os.path.exists(filename): # ud.debug(ud.NETWORK, ud.ALL, "Script already exists, skipping: %s" % filename) # continue makedirs(os.path.dirname(filename)) fd = open(filename, "w") try: fd.write(script) ud.debug(ud.ADMIN, ud.INFO, "Successfully mirrored: %s" % filename) finally: fd.close()
def __init__(self, check_access=True): """ Create new mirror with settings from UCR. :param bool check_access: Check if repository server is reachable on init. :raises ConfigurationError: if configured server is not available immediately. """ UniventionUpdater.__init__(self, check_access) self.log = logging.getLogger('updater.Mirror') self.log.addHandler(NullHandler()) self.repository_path = self.configRegistry.get( 'repository/mirror/basepath', '/var/lib/univention-repository') version_end = self.configRegistry.get( 'repository/mirror/version/end') or self.current_version self.version_end = UCS_Version(version_end) version_start = self.configRegistry.get( 'repository/mirror/version/start') or (self.version_major, 0, 0) self.version_start = UCS_Version(version_start) # set architectures to mirror archs = self.configRegistry.get('repository/mirror/architectures', '') if archs: self.architectures = archs.split(' ')
def mirror_update_scripts( self ): '''mirrors the preup.sh and postup.sh scripts''' start = self.version_start end = self.version_end parts = self.parts archs = ('all',) repos = self._iterate_version_repositories(start, end, parts, archs) # returns generator start_errata = UCS_Version((start.major, start.minor, 1)) # errata updates start with 'errata1' end_errata = UCS_Version((end.major, end.minor, 999)) # get all available for mirror errata = self._iterate_errata_repositories(start_errata, end_errata, parts, archs) # returns generator components = self.get_components() comp = self._iterate_component_repositories(components, start, end, archs, for_mirror_list=True) # returns generator all_repos = itertools.chain(repos, errata, comp) # concatenate all generators into a single one for server, struct, phase, path, script in UniventionUpdater.get_sh_files(all_repos): self.log.info('Mirroring %s:%r/%s to %s', server, struct, phase, path) assert script is not None, 'No script' # use prefix if defined - otherwise file will be stored in wrong directory if server.prefix: filename = os.path.join(self.repository_path, 'mirror', server.prefix, path) else: filename = os.path.join(self.repository_path, 'mirror', path) # Check disabled, otherwise files won't get refetched if they change on upstream server #if os.path.exists(filename): # ud.debug(ud.NETWORK, ud.ALL, "Script already exists, skipping: %s" % filename) # continue dirname = os.path.dirname(filename) try: os.makedirs(dirname, 0755) except OSError, ex: if ex.errno != errno.EEXIST: raise fd = open(filename, "w") try: fd.write(script) ud.debug(ud.ADMIN, ud.INFO, "Successfully mirrored script: %s" % filename) finally: fd.close()