From 5d4f03b9b9442b67e333eaf40d2844189121cca7 Mon Sep 17 00:00:00 2001 From: Matt Prahl Date: Thu, 13 Apr 2017 12:29:56 -0400 Subject: [PATCH] Add a package owner email alias script to use Pagure instead of PkgDB and stop querying FAS in staging As part of the Modularity project, we've decided that we need to have different package branches with different lifecycles. To read more about this, please view this document: https://fedoraproject.org/wiki/Infrastructure/Factory2/Focus/ArbitraryBranching. To enable this, we've decided to rely on Pagure and PDC for package information instead of PkgDB. This commit is an attempt to modify an existing script that queried PkgDB and FAS for packager emails with one that uses the new architecture described above. Also, instead of querying FAS for email information, we've decided to use the email alias USER@fedoraproject.org. This will be a performance increase and protect us against FAS API changes. --- .../files/owner-email-from-pagure.py | 38 +++++++++++++++++++ roles/packager_alias/tasks/main.yml | 35 +++++++++++++---- 2 files changed, 66 insertions(+), 7 deletions(-) create mode 100644 roles/packager_alias/files/owner-email-from-pagure.py diff --git a/roles/packager_alias/files/owner-email-from-pagure.py b/roles/packager_alias/files/owner-email-from-pagure.py new file mode 100644 index 0000000000..a28dfb9786 --- /dev/null +++ b/roles/packager_alias/files/owner-email-from-pagure.py @@ -0,0 +1,38 @@ +#!/usr/bin/python -tt + +""" +This script is ran as a cronjob and bastion. + +Its goal is to generate all the -owner email aliases we provide +""" + +import requests + +# TODO: Change me +pagure_url = 'http://127.0.0.1:5000' +pagure_group_url = pagure_url + '/api/0/group/{group}' +pagure_projects_url = pagure_url + '/api/0/projects' +pagure_projects = requests.get(pagure_projects_url).json()['projects'] +project_to_email = {} + +for project in pagure_projects: + users = set(project['access_users']['owner']) | \ + set(project['access_users']['admin']) | \ + set(project['access_users']['commit']) + groups = set() + for group_kind in ('admin', 'commit'): + for group in project['access_groups'][group_kind]: + groups.add(group) + + for group in groups: + group_members = requests.get( + pagure_group_url.format(group=group)).json()['members'] + users = users | set(group_members) + + # Use the @fedoraproject.org email alias instead of looking their email up + # in FAS + project_to_email[project['name']] = \ + ['{0}@fedoraproject.org'.format(user) for user in users] + +for project, emails in project_to_email.items(): + print('{0}: {1}'.format(project, ','.join(sorted(emails)))) diff --git a/roles/packager_alias/tasks/main.yml b/roles/packager_alias/tasks/main.yml index 759d8b777d..050e4c0a9c 100644 --- a/roles/packager_alias/tasks/main.yml +++ b/roles/packager_alias/tasks/main.yml @@ -1,13 +1,34 @@ --- # Email alias set-up +- name: Install the Python script to get the -owner email alias (non-staging) + copy: + src: owner-email.py + dest: /usr/local/bin/owner-email.py + owner: root + group: root + mode: 0755 + when: env != 'staging' + tags: + - install -- name: Install the script generating the -owner email alias - copy: src={{ item.file }} - dest={{ item.dest }} - owner=root group=root mode=0755 - with_items: - - { file: owner-email.py, dest: /usr/local/bin/owner-email.py } - - { file: package-owner-aliases.sh, dest: /etc/cron.hourly/package-owner-aliases.sh } +- name: Install the Python script to get the -owner email alias (staging) + copy: + src: owner-email-from-pagure.py + dest: /usr/local/bin/owner-email.py + owner: root + group: root + mode: 0755 + when: env == 'staging' + tags: + - install + +- name: Install the script to generate the -owner email alias + copy: + src: package-owner-aliases.sh + dest: /etc/cron.hourly/package-owner-aliases.sh + owner: root + group: root + mode: 0755 tags: - install