From 0296c29dd79ff0994998c259e386644261ee91e4 Mon Sep 17 00:00:00 2001 From: Lance Edgar Date: Tue, 22 Nov 2016 00:55:30 -0600 Subject: [PATCH] Add support for restarting tempmon client --- tailbone/templates/tempmon/clients/view.mako | 22 ++++++++++++++ tailbone/views/tempmon/clients.py | 31 ++++++++++++++++++++ 2 files changed, 53 insertions(+) create mode 100644 tailbone/templates/tempmon/clients/view.mako diff --git a/tailbone/templates/tempmon/clients/view.mako b/tailbone/templates/tempmon/clients/view.mako new file mode 100644 index 00000000..126c00a4 --- /dev/null +++ b/tailbone/templates/tempmon/clients/view.mako @@ -0,0 +1,22 @@ +## -*- coding: utf-8 -*- +<%inherit file="/master/view.mako" /> + +<%def name="head_tags()"> + ${parent.head_tags()} + + + +${parent.body()} + +% if instance.enabled and request.has_perm('tempmon.clients.restart'): +
+ +
+% endif diff --git a/tailbone/views/tempmon/clients.py b/tailbone/views/tempmon/clients.py index e4211104..125de836 100644 --- a/tailbone/views/tempmon/clients.py +++ b/tailbone/views/tempmon/clients.py @@ -26,6 +26,8 @@ Views for tempmon clients from __future__ import unicode_literals, absolute_import +import subprocess + from rattail.db import model import formalchemy as fa @@ -102,6 +104,35 @@ class TempmonClientView(MasterView): del fs.probes del fs.online + def restart(self): + client = self.get_instance() + try: + subprocess.check_output(['ssh', client.hostname, 'sudo service tempmon restart'], + stderr=subprocess.STDOUT) + except subprocess.CalledProcessError as error: + self.request.session.flash("Failed to restart client: {}".format(error.output), 'error') + else: + self.request.session.flash("Client has been restarted: {}".format( + self.get_instance_title(client))) + return self.redirect(self.get_action_url('view', client)) + + @classmethod + def defaults(cls, config): + route_prefix = cls.get_route_prefix() + url_prefix = cls.get_url_prefix() + permission_prefix = cls.get_permission_prefix() + model_key = cls.get_model_key() + model_title = cls.get_model_title() + + cls._defaults(config) + + # restart tempmon client + config.add_tailbone_permission(permission_prefix, '{}.restart'.format(permission_prefix), + "Restart a {}".format(model_title)) + config.add_route('{}.restart'.format(route_prefix), '{}/{{{}}}/restart'.format(url_prefix, model_key)) + config.add_view(cls, attr='restart', route_name='{}.restart'.format(route_prefix), + permission='{}.restart'.format(permission_prefix)) + def includeme(config): TempmonClientView.defaults(config)