def audit(self, pdc): # Query the data sources git_groups = list(self.atomic_component_groups_from_git(pdc)) pdc_groups = [ group for group in get_paged(pdc['component-groups']._) if group['group_type'] == self.group_type ] # Invert the lists of dicts into dicts of lists invert = lambda collection: dict([(group['release'], [ component['name'] for component in group['components'] ]) for group in collection]) git_groups = invert(git_groups) pdc_groups = invert(pdc_groups) # Associate the two by release and normalize present, absent = {}, {} for release in set(git_groups.keys() + pdc_groups.keys()): # Convert each group to a set left = set(git_groups.get(release, [])) right = set(pdc_groups.get(release, [])) # Find and store their difference present[release] = right - left absent[release] = left - right # If the diff is empty, remove the key so we don't trigger an alert if not present[release]: del present[release] if not absent[release]: del absent[release] return present, absent
def audit(self, pdc): # Query the data sources git_groups = list(self.atomic_component_groups_from_git(pdc)) pdc_groups = [ group for group in get_paged(pdc['component-groups']._) if group['group_type'] == self.group_type ] # Invert the lists of dicts into dicts of lists invert = lambda collection: dict([( group['release'], [component['name'] for component in group['components']] ) for group in collection ]) git_groups = invert(git_groups) pdc_groups = invert(pdc_groups) # Associate the two by release and normalize present, absent = {}, {} for release in set(git_groups.keys() + pdc_groups.keys()): # Convert each group to a set left = set(git_groups.get(release, [])) right = set(pdc_groups.get(release, [])) # Find and store their difference present[release] = right - left absent[release] = left - right # If the diff is empty, remove the key so we don't trigger an alert if not present[release]: del present[release] if not absent[release]: del absent[release] return present, absent
def audit(self, pdc): pkgdb_packages = pdcupdater.services.pkgdb_packages( self.pkgdb_url, extra=True) pdc_packages = get_paged(pdc['release-components']._) # normalize the two lists pkgdb_packages = set( ( package['name'], pdcupdater.utils.pkgdb2release(collection), collection['branchname'] ) for package in pkgdb_packages for collection in package['collections'] ) pdc_packages = set( (p['name'], p['release']['release_id'], p['dist_git_branch']) for p in pdc_packages ) # use set operators to determine the difference present = pdc_packages - pkgdb_packages absent = pkgdb_packages - pdc_packages return present, absent
def global_component_info(self, args, global_component_id=None): global_component_id = global_component_id or args.global_component_id global_component = self.client['global-components'][global_component_id]._() component_contacts = get_paged(self.client['global-component-contacts']._, component=global_component['name']) update_component_contacts(global_component, component_contacts) if args.json: print json.dumps(global_component) return fmt = '{:20} {}' print fmt.format('ID', global_component['id']) print fmt.format('Name', global_component['name']) print fmt.format('Dist Git Path', global_component['dist_git_path'] or '') print fmt.format('Dist Git URL', global_component['dist_git_web_url'] or '') if global_component['labels']: print 'Labels:' for label in global_component['labels']: print ''.join(['\t', label['name']]) if global_component['upstream']: print 'Upstream:' for key in ('homepage', 'scm_type', 'scm_url'): print ''.join(['\t', key, ':', '\t', global_component['upstream'][key]]) if global_component['contacts']: print 'Contacts:' for global_component_contact in global_component['contacts']: print ''.join(['\tRole:\t', global_component_contact['role']]) for name in ('username', 'mail_name'): if name in global_component_contact['contact']: print ''.join(['\t\tName:\t', global_component_contact['contact'][name]]) print ''.join(['\t\tEmail:\t', global_component_contact['contact']['email']])
def list_build_image(self, args): filters = extract_arguments(args) build_images = get_paged(self.client['build-images']._, **filters) if args.json: print json.dumps(list(build_images)) return self._print_build_image_list(build_images, args.show_md5)
def _initialize_basics(pdc): """ Gotta have these before we can really do anything... """ arches = [dict(name=name) for name in ["armhfp", "i386", "x86_64"]] pdc_arches = list(pdc_client.get_paged(pdc['arches']._)) for arch in arches: if arch not in pdc_arches: log.info("Creating arch %r." % arch['name']) pdc['arches']._(arch)
def image_list(self, args): filters = extract_arguments(args) images = get_paged(self.client.images._, **filters) if args.json: print json.dumps(list(images)) return self._print_image_list(images, args.show_sha256)
def rpm_list(self, args): filters = extract_arguments(args, prefix='filter_') if not filters: self.subparsers.choices.get('list').error('At least some filter must be used.') rpms = get_paged(self.client.rpms._, **filters) if args.json: print json.dumps(list(rpms)) return for rpm in rpms: print '{id:10} {name:45} {epoch}:{version}-{release}.{arch}'.format(**rpm)
def list_global_component_contacts(self, args): filters = extract_arguments(args, prefix='filter_') if not filters: self.subparsers.choices.get('list').error('At least some filter must be used.') global_component_contacts = get_paged(self.client['global-component-contacts']._, **filters) if args.json: print json.dumps(list(global_component_contacts)) return if global_component_contacts: print_component_contacts(global_component_contacts)
def audit(self, pdc): pkgdb_packages = pdcupdater.services.pkgdb_packages(self.pkgdb_url) pdc_packages = get_paged(pdc['global-components']._) # normalize the two lists pkgdb_packages = set([p['name'] for p in pkgdb_packages]) pdc_packages = set([p['name'] for p in pdc_packages]) # use set operators to determine the difference present = pdc_packages - pkgdb_packages absent = pkgdb_packages - pdc_packages return present, absent
def list_global_component_contacts(self, args): filters = extract_arguments(args, prefix='filter_') if not filters: self.subparsers.choices.get('list').error( 'At least some filter must be used.') global_component_contacts = get_paged( self.client['global-component-contacts']._, **filters) if args.json: print json.dumps(list(global_component_contacts)) return if global_component_contacts: print_component_contacts(global_component_contacts)
def global_component_info(self, args, global_component_id=None): if not global_component_id: global_component_id = self._get_component_id( args.global_component_name) if not global_component_id: self.subparsers.choices.get('info').error( "This global component doesn't exist.\n") global_component = self.client['global-components'][ global_component_id]._() component_contacts = get_paged( self.client['global-component-contacts']._, component=global_component['name']) update_component_contacts(global_component, component_contacts) if args.json: print json.dumps(global_component) return fmt = '{0:20} {1}' print fmt.format('ID', global_component['id']) print fmt.format('Name', global_component['name']) print fmt.format('Dist Git Path', global_component['dist_git_path'] or '') print fmt.format('Dist Git URL', global_component['dist_git_web_url'] or '') if global_component['labels']: print 'Labels:' for label in global_component['labels']: print ''.join(['\t', label['name']]) if global_component['upstream']: print 'Upstream:' for key in ('homepage', 'scm_type', 'scm_url'): print ''.join( ['\t', key, ':', '\t', global_component['upstream'][key]]) if global_component['contacts']: print 'Contacts:' for global_component_contact in global_component['contacts']: print ''.join(['\tRole:\t', global_component_contact['role']]) for name in ('username', 'mail_name'): if name in global_component_contact['contact']: print ''.join([ '\t\tName:\t', global_component_contact['contact'][name] ]) print ''.join([ '\t\tEmail:\t', global_component_contact['contact']['email'] ])
def audit(self, pdc): # Query the data sources old_composes = pdcupdater.services.old_composes(self.old_composes_url) pdc_composes = get_paged(pdc['composes']._) # normalize the two lists old_composes = set([idx for branch, idx, url in old_composes]) pdc_composes = set([c['compose_id'] for c in pdc_composes]) # use set operators to determine the difference present = pdc_composes - old_composes absent = old_composes - pdc_composes return present, absent
def list_composes(self, args): filters = {} if not args.deleted: filters['deleted'] = False else: filters['deleted'] = args.deleted composes = get_paged(self.client.composes._, **filters) if args.json: print json.dumps(list(composes)) return for compose in composes: print compose['compose_id']
def audit(self, pdc): # Query the data sources koji_rpms = sum(self._gather_koji_rpms(), []) pdc_rpms = get_paged(pdc['rpms']._) # Normalize the lists before comparing them. koji_rpms = set([json.dumps(r, sort_keys=True) for r in koji_rpms]) pdc_rpms = set([json.dumps(r, sort_keys=True) for r in pdc_rpms]) # use set operators to determine the difference present = pdc_rpms - koji_rpms absent = koji_rpms - pdc_rpms return present, absent
def audit(self, pdc): # Query the data sources fas_persons = pdcupdater.services.fas_persons(**self.fas_config) pdc_persons = get_paged(pdc['persons']._) # normalize the two lists fas_persons = set([p['username'] for p in fas_persons]) pdc_persons = set([p['username'] for p in pdc_persons]) # use set operators to determine the difference present = pdc_persons - fas_persons absent = fas_persons - pdc_persons return present, absent
def get_group_pk(pdc, target_group): """ Return the primary key int identifier for a component group. """ # List all of our component groups groups = pdc_client.get_paged(pdc['component-groups']._) ignored_keys = ['components'] for group in groups: # Iterate over them until we find "the one" if all([ group[key] == target_group[key] for key in target_group if key not in ignored_keys ]): return group['id'] # If we can't find it, then complain. raise ValueError("Could not find matching group for %r" % target_group)
def list_releases(self, args): filters = {} if args.inactive: filters['active'] = False elif not args.all: filters['active'] = True releases = get_paged(self.client.releases._, **filters) if args.json: print json.dumps(list(releases)) return fmt = '{:25} {:35} {}' for release in releases: print fmt.format(release['release_id'], release['name'], 'active' if release['active'] else 'inactive')
def list_releases(self, args): filters = {} if args.inactive: filters['active'] = False elif not args.all: filters['active'] = True releases = get_paged(self.client.releases._, **filters) if args.json: print json.dumps(list(releases)) return fmt = '{0:25} {1:35} {2}' for release in releases: print fmt.format(release['release_id'], release['name'], 'active' if release['active'] else 'inactive')
def delete_matched_release_component_contact(self, args): filters = extract_arguments(args, prefix='filter_') if not filters: self.subparsers.choices.get('delete-match').error('At least some filter must be used.') release_component_contacts = get_paged(self.client['release-component-contacts']._, **filters) release_component_contacts = list(release_component_contacts) match_count = len(release_component_contacts) if match_count == 1: self.client['release-component-contacts' ][release_component_contacts[0]['id']]._("DELETE", {}) elif match_count < 1: print "No match, nothing to do." else: print "Multi matches, please delete via ID or provide more restrictions." print_component_contacts(release_component_contacts)
def release_component_info(self, args, release_component_id=None): if not release_component_id: release_component_id = self._get_release_component_id(args.release, args.name) if not release_component_id: self.subparsers.choices.get('info').error("This release component doesn't exist.\n") args.release_component_id = release_component_id if 'include_inactive_release' in args and args.include_inactive_release: release_component = self.client['release-components'][release_component_id]._( include_inactive_release=args.include_inactive_release) else: release_component = self.client['release-components'][release_component_id]._() release_id = self._get_release_id(release_component) component_contacts = get_paged(self.client['release-component-contacts']._, component=release_component['name'], release=release_id) update_component_contacts(release_component, component_contacts) if args.json: print json.dumps(release_component) return fmt = '{0:20} {1}' print fmt.format('ID', release_component['id']) print fmt.format('Name', release_component['name']) print fmt.format('Release ID', release_id) print fmt.format('Global Component', release_component['global_component']) print fmt.format('Bugzilla Component', release_component['bugzilla_component']['name'] if release_component['bugzilla_component'] else '') print fmt.format('Brew Package', release_component['brew_package'] or '') print fmt.format('Dist Git Branch', release_component['dist_git_branch'] or '') print fmt.format('Dist Git URL', release_component['dist_git_web_url'] or '') print fmt.format('Activity', 'active' if release_component['active'] else 'inactive') print fmt.format('Type', release_component['type']) print fmt.format('Srpm Name', release_component['srpm']['name'] if release_component['srpm'] else 'null') if release_component['contacts']: print 'Contacts:' for release_component_contact in release_component['contacts']: print ''.join(['\tRole:\t', release_component_contact['role']]) for name in ('username', 'mail_name'): if name in release_component_contact['contact']: print ''.join(['\t\tName:\t', release_component_contact['contact'][name]]) print ''.join(['\t\tEmail:\t', release_component_contact['contact']['email']])
def delete_matched_release_component_contact(self, args): filters = extract_arguments(args, prefix='filter_') if not filters: self.subparsers.choices.get('delete-match').error( 'At least some filter must be used.') release_component_contacts = get_paged( self.client['release-component-contacts']._, **filters) release_component_contacts = list(release_component_contacts) match_count = len(release_component_contacts) if match_count == 1: self.client['release-component-contacts'][ release_component_contacts[0]['id']]._("DELETE", {}) elif match_count < 1: print "No match, nothing to do." else: print "Multi matches, please delete via ID or provide more restrictions." print_component_contacts(release_component_contacts)
def audit(self, pdc): pkgdb_packages = pdcupdater.services.pkgdb_packages(self.pkgdb_url, extra=True) pdc_packages = get_paged(pdc['release-components']._) # normalize the two lists pkgdb_packages = set( (package['name'], pdcupdater.utils.pkgdb2release(collection), collection['branchname']) for package in pkgdb_packages for collection in package['collections']) pdc_packages = set( (p['name'], p['release']['release_id'], p['dist_git_branch']) for p in pdc_packages) # use set operators to determine the difference present = pdc_packages - pkgdb_packages absent = pkgdb_packages - pdc_packages return present, absent
def list_release_components(self, args): filters = extract_arguments(args, prefix='filter_') if not filters: self.subparsers.choices.get('list').error('At least some filter must be used.') if 'include_inactive_release' in args and args.include_inactive_release: filters['include_inactive_release'] = True release_components = get_paged(self.client['release-components']._, **filters) if args.json: print json.dumps(list(release_components)) return if release_components: for release_component in release_components: release_id = self._get_release_id(release_component) print '{:<10} {:25} {}'.format( release_component['id'], release_id, release_component['name'])
def list_release_components(self, args): filters = extract_arguments(args, prefix='filter_') if not filters: self.subparsers.choices.get('list').error( 'At least some filter must be used.') if 'include_inactive_release' in args and args.include_inactive_release: filters['include_inactive_release'] = True release_components = get_paged(self.client['release-components']._, **filters) if args.json: print json.dumps(list(release_components)) return if release_components: for release_component in release_components: release_id = self._get_release_id(release_component) print '{0:<10} {1:25} {2}'.format(release_component['id'], release_id, release_component['name'])
def release_info(self, args, release_id=None): release_id = release_id or args.release_id release = self.client.releases[release_id]._() variants = get_paged(self.client['release-variants']._, release=release_id) if args.json: release['variants'] = list(variants) print json.dumps(release) return fmt = '{0:20} {1}' print fmt.format('Release ID', release['release_id']) print fmt.format('Name', release['name']) print fmt.format('Short Name', release['short']) print fmt.format('Version', release['version']) print fmt.format('Release Type', release['release_type']) print fmt.format('Product Version', release['product_version'] or '') print fmt.format('Base Product', release['base_product'] or '') print fmt.format('Activity', 'active' if release['active'] else 'inactive') print fmt.format('Integrated With', release['integrated_with'] or '') # Call plugins self.run_hook('release_info', release) if release['bugzilla']: print '\nBugzilla' print fmt.format('Product', release['bugzilla']['product']) if release['dist_git']: print '\nDist Git' print fmt.format('Branch', release['dist_git']['branch']) print '\nVariants' fmt = '{0:25} {1:20} {2:20} {3:15} {4}' print fmt.format('UID', 'ID', 'Name', 'Type', 'Arches') for variant in variants: print fmt.format(variant['uid'], variant['id'], variant['name'], variant['type'], ', '.join(variant['arches']))
def release_info(self, args, release_id=None): release_id = release_id or args.release_id release = self.client.releases[release_id]._() variants = get_paged(self.client['release-variants']._, release=release_id) if args.json: release['variants'] = list(variants) print json.dumps(release) return fmt = '{:20} {}' print fmt.format('Release ID', release['release_id']) print fmt.format('Name', release['name']) print fmt.format('Short Name', release['short']) print fmt.format('Version', release['version']) print fmt.format('Release Type', release['release_type']) print fmt.format('Product Version', release['product_version'] or '') print fmt.format('Base Product', release['base_product'] or '') print fmt.format('Activity', 'active' if release['active'] else 'inactive') print fmt.format('Integrated With', release['integrated_with'] or '') # Call plugins self.run_hook('release_info', release) if release['bugzilla']: print '\nBugzilla' print fmt.format('Product', release['bugzilla']['product']) if release['dist_git']: print '\nDist Git' print fmt.format('Branch', release['dist_git']['branch']) print '\nVariants' fmt = '{:25} {:20} {:20} {:15} {}' print fmt.format('UID', 'ID', 'Name', 'Type', 'Arches') for variant in variants: print fmt.format(variant['uid'], variant['id'], variant['name'], variant['type'], ', '.join(variant['arches']))
def release_component_info(self, args, release_component_id=None): if not release_component_id: release_component_id = self._get_release_component_id( args.release, args.name) if not release_component_id: self.subparsers.choices.get('info').error( "This release component doesn't exist.\n") args.release_component_id = release_component_id if 'include_inactive_release' in args and args.include_inactive_release: release_component = self.client['release-components'][ release_component_id]._( include_inactive_release=args.include_inactive_release) else: release_component = self.client['release-components'][ release_component_id]._() release_id = self._get_release_id(release_component) component_contacts = get_paged( self.client['release-component-contacts']._, component=release_component['name'], release=release_id) update_component_contacts(release_component, component_contacts) if args.json: print json.dumps(release_component) return fmt = '{0:20} {1}' print fmt.format('ID', release_component['id']) print fmt.format('Name', release_component['name']) print fmt.format('Release ID', release_id) print fmt.format('Global Component', release_component['global_component']) print fmt.format( 'Bugzilla Component', release_component['bugzilla_component']['name'] if release_component['bugzilla_component'] else '') print fmt.format('Brew Package', release_component['brew_package'] or '') print fmt.format('Dist Git Branch', release_component['dist_git_branch'] or '') print fmt.format('Dist Git URL', release_component['dist_git_web_url'] or '') print fmt.format( 'Activity', 'active' if release_component['active'] else 'inactive') print fmt.format('Type', release_component['type']) print fmt.format( 'Srpm Name', release_component['srpm']['name'] if release_component['srpm'] else 'null') if release_component['contacts']: print 'Contacts:' for release_component_contact in release_component['contacts']: print ''.join(['\tRole:\t', release_component_contact['role']]) for name in ('username', 'mail_name'): if name in release_component_contact['contact']: print ''.join([ '\t\tName:\t', release_component_contact['contact'][name] ]) print ''.join([ '\t\tEmail:\t', release_component_contact['contact']['email'] ])