From 9bacf3f858ac6b92e4eec4c6bd7d23c5b9cfe869 Mon Sep 17 00:00:00 2001 From: alejdg Date: Tue, 21 Apr 2020 18:25:20 -0700 Subject: [PATCH] Move the exception handling to reactive/jenkins.py --- lib/charms/layer/jenkins/plugins.py | 13 +++++++------ reactive/jenkins.py | 13 +++++++++++-- 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/lib/charms/layer/jenkins/plugins.py b/lib/charms/layer/jenkins/plugins.py index a25dc5f1..97fc7cac 100644 --- a/lib/charms/layer/jenkins/plugins.py +++ b/lib/charms/layer/jenkins/plugins.py @@ -3,13 +3,18 @@ import urllib from charmhelpers.core import hookenv, host -from charmhelpers.core.hookenv import status_set from charms.layer.jenkins import paths from charms.layer.jenkins.api import Api from jenkins_plugin_manager.plugin import UpdateCenter +class PluginSiteError(Exception): + def __init__(self): + self.message = ("The configured plugin-site doesn't provide an " + "update-center.json file or is not acessible.") + + class Plugins(object): """Manage Jenkins plugins.""" @@ -23,11 +28,7 @@ def __init__(self): urllib.request.urlopen(update_center) self.update_center = UpdateCenter(uc_url=update_center) except urllib.error.HTTPError: - status_set( - "blocked", - "The configured plugin-site doesn't provide an " - "update-center.json file or is not acessible.") - raise + raise PluginSiteError() def install(self, plugins): """Install the given plugins, optionally removing unlisted ones. diff --git a/reactive/jenkins.py b/reactive/jenkins.py index 2243575f..aca83e89 100644 --- a/reactive/jenkins.py +++ b/reactive/jenkins.py @@ -40,6 +40,7 @@ ) from charms.layer.jenkins.users import Users from charms.layer.jenkins.plugins import Plugins +from charms.layer.jenkins.plugins import PluginSiteError from charms.layer.jenkins.api import Api from charms.layer.jenkins.credentials import Credentials from charms.layer.jenkins.service import Service @@ -64,6 +65,14 @@ def install_dependencies(): packages.install_dependencies() +def plugins_layer(): + try: + plugins = Plugins() + except PluginSiteError as e: + status_set("error", e.message) + return plugins + + # Dynamically create an OR-ed chain of @when_not, so install_dependencies # will get triggered whenever one or more dependencies are unmet (typically # at install time). @@ -166,7 +175,7 @@ def configure_plugins(): return status_set("maintenance", "Configuring plugins") remove_state("jenkins.configured.plugins") - plugins = Plugins() + plugins = plugins_layer() plugins.install(config("plugins")) api = Api() api.wait() # Wait for the service to be fully up @@ -186,7 +195,7 @@ def update_plugins(): update_interval = time.time() - (config("plugins-auto-update-interval") * 60) if (last_update < update_interval): status_set("maintenance", "Updating plugins") - plugins = Plugins() + plugins = plugins_layer() plugins.update(config("plugins")) api = Api() api.wait() # Wait for the service to be fully up