def _populateChannels(self, channels): l = [] for channel in channels: dict = {'label': channel} obj = Channel() obj.populate(dict) l.append(obj) self['channels'] = l
def _update_channels_metadata(self, channels): # First populate rhnProductName table self._update_product_names(channels) backend = SQLBackend() channels_batch = [] content_sources_batch = [] for label in channels: channel = self.channel_metadata[label] channel_object = Channel() for k in channel.keys(): channel_object[k] = channel[k] family_object = ChannelFamily() family_object['label'] = self.channel_to_family[label] channel_object['families'] = [family_object] channel_object['label'] = label channel_object['basedir'] = '/' # Backend expects product_label named as product_name # To have correct value in rhnChannelProduct and reference # to rhnProductName in rhnChannel channel_object['product_name'] = channel['product_label'] dists = [] releases = [] # Distribution/Release channel mapping available if label in self.channel_dist_mapping: dist_map = self.channel_dist_mapping[label] for item in dist_map: if item['eus_release']: r = ReleaseChannelMap() r['product'] = item['os'] r['version'] = item['release'] r['release'] = item['eus_release'] r['channel_arch'] = item['channel_arch'] releases.append(r) else: d = DistChannelMap() for k in item: d[k] = item[k] dists.append(d) channel_object['dists'] = dists channel_object['release'] = releases sources = self.cdn_repository_manager.get_content_sources_import_batch(label, backend) content_sources_batch.extend(sources) channel_object['content-sources'] = sources channels_batch.append(channel_object) importer = ContentSourcesImport(content_sources_batch, backend) importer.run() importer = ChannelImport(channels_batch, backend) importer.run()
def _channelPackageSubscription(self, authobj, info): # Authorize the org id passed authobj.authzOrg(info) packageList = info.get('packages') or [] if not packageList: log_debug(1, "No packages found; done") return 0 if 'channels' not in info or not info['channels']: log_debug(1, "No channels found; done") return 0 channelList = info['channels'] authobj.authzChannels(channelList) # Have to turn the channel list into a list of Channel objects channelList = [Channel().populate({'label': x}) for x in channelList] # Since we're dealing with superusers, we allow them to change the org # id # XXX check if we don't open ourselves too much (misa 20030422) org_id = info.get('orgId') if org_id == '': org_id = None batch = Collection() package_keys = ['name', 'version', 'release', 'epoch', 'arch'] for package in packageList: for k in package_keys: if k not in package: raise Exception("Missing key %s" % k) if k == 'epoch': if package[k] is not None: if package[k] == '': package[k] = None else: package[k] = str(package[k]) else: package[k] = str(package[k]) if package['arch'] == 'src' or package['arch'] == 'nosrc': # Source package - no reason to continue continue _checksum_sql_filter = "" if 'md5sum' in package: # for old rhnpush compatibility package['checksum_type'] = 'md5' package['checksum'] = package['md5sum'] exec_args = { 'name': package['name'], 'pkg_epoch': package['epoch'], 'pkg_version': package['version'], 'pkg_rel': package['release'], 'pkg_arch': package['arch'], 'orgid': org_id } if 'checksum' in package and CFG.ENABLE_NVREA: _checksum_sql_filter = """and c.checksum = :checksum and c.checksum_type = :checksum_type""" exec_args.update({ 'checksum_type': package['checksum_type'], 'checksum': package['checksum'] }) h = rhnSQL.prepare(self._get_pkg_info_query % _checksum_sql_filter) h.execute(**exec_args) row = h.fetchone_dict() package['checksum_type'] = row['checksum_type'] package['checksum'] = row['checksum'] package['org_id'] = org_id package['channels'] = channelList batch.append(IncompletePackage().populate(package)) caller = "server.app.channelPackageSubscription" backend = SQLBackend() importer = ChannelPackageSubscription(batch, backend, caller=caller) try: importer.run() except IncompatibleArchError: e = sys.exc_info()[1] raise_with_tb(rhnFault(50, string.join(e.args), explain=0), sys.exc_info()[2]) except InvalidChannelError: e = sys.exc_info()[1] raise_with_tb(rhnFault(50, str(e), explain=0), sys.exc_info()[2]) affected_channels = importer.affected_channels log_debug(3, "Computing errata cache for systems affected by channels", affected_channels) schedule_errata_cache_update(affected_channels) rhnSQL.commit() return 0