From 5da315864c179578963fe25df34a9c795290e996 Mon Sep 17 00:00:00 2001 From: Pierre-Yves Chibon Date: Thu, 31 Jul 2014 13:34:53 +0200 Subject: [PATCH] Create a new module: packager_alias containing the scripts to create the -owner aliases --- roles/packager_alias/files/owner-email.py | 79 +++++++++++++++++++ .../files/package-owner-aliases.sh | 15 ++++ roles/packager_alias/tasks/main.yml | 13 +++ 3 files changed, 107 insertions(+) create mode 100755 roles/packager_alias/files/owner-email.py create mode 100755 roles/packager_alias/files/package-owner-aliases.sh create mode 100644 roles/packager_alias/tasks/main.yml diff --git a/roles/packager_alias/files/owner-email.py b/roles/packager_alias/files/owner-email.py new file mode 100755 index 0000000000..7e35299aac --- /dev/null +++ b/roles/packager_alias/files/owner-email.py @@ -0,0 +1,79 @@ +#!/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 os +import sys +import urllib2 +from fedora.client import BaseClient, ServerError, AuthError +import ConfigParser +import requests + +config = ConfigParser.ConfigParser() +config.read('/etc/fas.conf') + + +pkgdb_url = 'https://admin.fedoraproject.org/pkgdb' +fas = BaseClient('https://admin.fedoraproject.org/accounts', + username=config.get('global', 'login').strip('"'), + password=config.get('global', 'password').strip('"')) + +try: + pkgdb_data = requests.get('%s/api/notify/?format=json' % pkgdb_url, + verify=False).json() + fas_data = fas.send_request('/user/email_list', auth=True) + fas_groups = fas.send_request( + '/group/type_list', auth=True, req_params={'grptype': 'pkgdb'}) +except ServerError, e: + print >> sys.stderr, '%s' % e + sys.exit(1) +except AuthError, e: + print >> sys.stderr, '%s: %s' % (e.exc, e.message) + sys.exit(1) +except (urllib2.HTTPError,urllib2.URLError), e: + print >> sys.stderr, '%s' % e + sys.exit(1) + +else: + pkgs = pkgdb_data['packages'] + if len(pkgs) < 500: + print >> sys.stderr, 'Too few packages, something is wrong' + sys.exit(1) + email_list = fas_data['emails'] + group_mail = {} + for group in fas_groups.groups: + group_mail[group.name] = group.mailing_list + + contactlist = {} + for pkg, ccusers in pkgs.iteritems(): + emails = [] + for user in ccusers: + if user in email_list: + emails.append(email_list[user]) + elif user.startswith('group::'): + user = user.replace('group::', '') + if user in group_mail: + emails.append(group_mail[user]) + else: + print >> sys.stderr, 'Strange user `%s`, not in '\ + 'email_list nor in group_mail, badly set-up '\ + 'group?\n' % user + else: + print >> sys.stderr, 'Strange user `%s`, not in '\ + 'email_list and not a group\n' % user + + if pkg.lower() in contactlist: + contactlist[pkg.lower()] = contactlist[pkg.lower()].union(emails) + else: + contactlist[pkg.lower()] = set(emails) + + for pkg, emails in sorted(contactlist.iteritems()): + print '%s-owner: %s' % (pkg.lower(),','.join(sorted(emails))) + + for group in fas_groups.groups: + print '{0}: {1}'.format(group.name, group.mailing_list) + diff --git a/roles/packager_alias/files/package-owner-aliases.sh b/roles/packager_alias/files/package-owner-aliases.sh new file mode 100755 index 0000000000..aeb2729231 --- /dev/null +++ b/roles/packager_alias/files/package-owner-aliases.sh @@ -0,0 +1,15 @@ +#!/bin/bash + +output=`mktemp` +dest=/etc/postfix/package-owner +/usr/local/bin/owner-email.py >> $output +if [ $? != 0 ]; then + echo "error creating owner-alias file" >&2 + exit 1 +fi + +cp $output $dest +chmod +r $output +mv $output $dest +restorecon /etc/postfix/package-owner +postalias /etc/postfix/package-owner diff --git a/roles/packager_alias/tasks/main.yml b/roles/packager_alias/tasks/main.yml new file mode 100644 index 0000000000..b6347f6c28 --- /dev/null +++ b/roles/packager_alias/tasks/main.yml @@ -0,0 +1,13 @@ +--- +# Email alias set-up + +- name: Install the script generating the -owner email alias + file: src={{ item.file }} + dest={{ item.location }}/{{ 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 } + tags: + - install +