def assign_repositories_to_channel(self, channel_label, delete_repos=None, add_repos=None): backend = SQLBackend() self.unlink_all_repos(channel_label, custom_only=True) repos = self.list_associated_repos(channel_label) changed = 0 if delete_repos: for to_delete in delete_repos: if to_delete in repos: repos.remove(to_delete) log(0, "Removing repository '%s' from channel." % to_delete) changed += 1 else: log2(0, 0, "WARNING: Repository '%s' is not attached to channel." % to_delete, stream=sys.stderr) if add_repos: for to_add in add_repos: if to_add not in repos: repos.append(to_add) log(0, "Attaching repository '%s' to channel." % to_add) changed += 1 else: log2(0, 0, "WARNING: Repository '%s' is already attached to channel." % to_add, stream=sys.stderr) # If there are any repositories intended to be attached to channel if repos: content_sources_batch = self.get_content_sources_import_batch( channel_label, backend, repos=sorted(repos)) for content_source in content_sources_batch: content_source['channels'] = [channel_label] importer = ContentSourcesImport(content_sources_batch, backend) importer.run() else: # Make sure everything is unlinked self.unlink_all_repos(channel_label) return changed
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 _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 = [] try: dist_map = self.channel_dist_mapping[label] for item in dist_map: d = DistChannelMap() for k in item: d[k] = item[k] d['channel'] = label dists.append(d) except KeyError: pass channel_object['dists'] = dists channel_object['release'] = releases sources = self._get_content_sources(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 _update_repositories(self): """Setup SSL credential to access repositories We do this in 2 steps: 1. Fetching provided repositories from manifest - URL contains variables to substitute 2. Assigning one certificate/key set to each repository""" # First delete all repositories from previously used manifests self._remove_repositories() backend = SQLBackend() type_id = backend.lookupContentSourceType('yum') # Lookup CA cert ca_cert = satCerts.lookup_cert(constants.CA_CERT_NAME, None) ca_cert_id = int(ca_cert['id']) content_sources_batch = {} for entitlement in self.manifest.get_all_entitlements(): # Lookup SSL certificates and keys creds = entitlement.get_credentials() client_cert = satCerts.lookup_cert( constants.CLIENT_CERT_PREFIX + creds.get_id(), None) client_key = satCerts.lookup_cert( constants.CLIENT_KEY_PREFIX + creds.get_id(), None) client_cert_id = int(client_cert['id']) client_key_id = int(client_key['id']) content_source_ssl = ContentSourceSsl() content_source_ssl['ssl_ca_cert_id'] = ca_cert_id content_source_ssl['ssl_client_cert_id'] = client_cert_id content_source_ssl['ssl_client_key_id'] = client_key_id # Loop provided products for product in entitlement.get_products(): repositories = product.get_repositories() for repository in repositories: if repository not in content_sources_batch: content_source = ContentSource() content_source[ 'label'] = constants.MANIFEST_REPOSITORY_DB_PREFIX + repository content_source['source_url'] = repositories[repository] content_source['org_id'] = None content_source['type_id'] = type_id content_source['ssl-sets'] = [content_source_ssl] content_sources_batch[repository] = content_source # There may be more SSL certs to one repository, append it elif content_source_ssl not in content_sources_batch[ repository]['ssl-sets']: content_sources_batch[repository]['ssl-sets'].append( content_source_ssl) importer = ContentSourcesImport(list(content_sources_batch.values()), backend) importer.run()
def _update_repositories(self): """Setup SSL credential to access repositories We do this in 2 steps: 1. Fetching provided repositories from manifest - URL contains variables to substitute 2. Assigning one certificate/key set to each repository""" # First delete all repositories from previously used manifests self._remove_repositories() backend = SQLBackend() type_id = backend.lookupContentSourceType('yum') # Lookup CA cert ca_cert = satCerts.lookup_cert(constants.CA_CERT_NAME, None) ca_cert_id = int(ca_cert['id']) content_sources_batch = {} for entitlement in self.manifest.get_all_entitlements(): # Lookup SSL certificates and keys creds = entitlement.get_credentials() client_cert = satCerts.lookup_cert(constants.CLIENT_CERT_PREFIX + creds.get_id(), None) client_key = satCerts.lookup_cert(constants.CLIENT_KEY_PREFIX + creds.get_id(), None) client_cert_id = int(client_cert['id']) client_key_id = int(client_key['id']) content_source_ssl = ContentSourceSsl() content_source_ssl['ssl_ca_cert_id'] = ca_cert_id content_source_ssl['ssl_client_cert_id'] = client_cert_id content_source_ssl['ssl_client_key_id'] = client_key_id # Loop provided products for product in entitlement.get_products(): repositories = product.get_repositories() for repository in repositories: if repository not in content_sources_batch: content_source = ContentSource() content_source['label'] = constants.MANIFEST_REPOSITORY_DB_PREFIX + repository content_source['source_url'] = repositories[repository] content_source['org_id'] = None content_source['type_id'] = type_id content_source['ssl-sets'] = [content_source_ssl] content_sources_batch[repository] = content_source # There may be more SSL certs to one repository, append it elif content_source_ssl not in content_sources_batch[repository]['ssl-sets']: content_sources_batch[repository]['ssl-sets'].append(content_source_ssl) importer = ContentSourcesImport(content_sources_batch.values(), backend) importer.run()