From fbdc98ca3c193fdfa2690e3142db1cf295a7d41e Mon Sep 17 00:00:00 2001 From: Mikolaj Izdebski Date: Wed, 21 Nov 2018 05:25:41 +0000 Subject: [PATCH] Hotfix Koschei to work with Pagure 5 See: https://github.com/msimacek/koschei/issues/272 --- .../files/hotfix_pagure_extras_plugin.py | 44 +++++++++++++++++++ roles/koschei/frontend/tasks/main.yml | 14 ++++++ .../frontend/templates/config-frontend.cfg.j2 | 14 +++++- 3 files changed, 70 insertions(+), 2 deletions(-) create mode 100644 roles/koschei/frontend/files/hotfix_pagure_extras_plugin.py diff --git a/roles/koschei/frontend/files/hotfix_pagure_extras_plugin.py b/roles/koschei/frontend/files/hotfix_pagure_extras_plugin.py new file mode 100644 index 0000000000..d01db57ce1 --- /dev/null +++ b/roles/koschei/frontend/files/hotfix_pagure_extras_plugin.py @@ -0,0 +1,44 @@ +# Copyright (C) 2018 Red Hat, Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Author: Mikolaj Izdebski + +import requests + +from koschei.config import get_config +from koschei.plugin import listen_event + + +def get_packages_per_user(session): + session.log.debug("Requesting pagure_owner_alias.json") + req = requests.get(get_config('hotfix_pagure_extras.owner_alias_url')) + if not req.ok: + session.log.info("Failed to get pagure_owner_alias.json, status=%d", + req.status_code) + return {} + pkgs_per_user = {} + for pkg, users in req.json()['rpms'].items(): + for user in users: + pkgs_per_user.setdefault(user, []).append(pkg) + return pkgs_per_user + + +@listen_event('get_user_packages') +def get_user_packages(session, username): + def create(): + return get_packages_per_user(session) + pkg_map = session.cache('hotfix_pagure_extras').get_or_create('packages_per_user', create) + return pkg_map.get(str(username)) diff --git a/roles/koschei/frontend/tasks/main.yml b/roles/koschei/frontend/tasks/main.yml index 7427e7e5b1..3bda318aa0 100644 --- a/roles/koschei/frontend/tasks/main.yml +++ b/roles/koschei/frontend/tasks/main.yml @@ -52,3 +52,17 @@ tags: - koschei - service + +- name: create directory for hotfix_pagure_extras plugin + file: name=/usr/lib/python3.6/site-packages/koschei/plugins/hotfix_pagure_extras_plugin state=directory + tags: + - koschei + - hotfix + +- name: install hotfix_pagure_extras plugin + copy: src=hotfix_pagure_extras_plugin.py dest=/usr/lib/python3.6/site-packages/koschei/plugins/hotfix_pagure_extras_plugin/frontend.py + notify: + - reload httpd + tags: + - koschei + - hotfix diff --git a/roles/koschei/frontend/templates/config-frontend.cfg.j2 b/roles/koschei/frontend/templates/config-frontend.cfg.j2 index 79028342a1..97758ad1e6 100644 --- a/roles/koschei/frontend/templates/config-frontend.cfg.j2 +++ b/roles/koschei/frontend/templates/config-frontend.cfg.j2 @@ -39,9 +39,9 @@ config = { }, }, {% if env == 'staging' %} - "plugins": ['pagure', 'copr'], + "plugins": ['hotfix_pagure_extras', 'copr'], {% else %} - "plugins": ['pagure'], + "plugins": ['hotfix_pagure_extras'], {% endif %} "caching": { "pagure": { @@ -53,10 +53,20 @@ config = { }, }, }, + "hotfix_pagure_extras": { + "backend": "dogpile.cache.memcached", + "expiration_time": 3600, # 1 hour + "arguments": { + "url": "memcached01:11211", + }, + }, }, "pagure": { "api_url": "https://src{{ env_suffix }}.fedoraproject.org/api/0", }, + "hotfix_pagure_extras": { + "owner_alias_url": "https://src{{ env_suffix }}.fedoraproject.org/extras/pagure_owner_alias.json", + }, "frontend": { "builds_per_page": 8, "auth": {