~adam-collard/landscape-charm/install-sources-keys

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
import subprocess

from charmhelpers.core import hookenv

from lib.action import MaintenanceAction
from lib.error import CharmError
from lib.paths import default_paths, LSCTL


class ProcessesNotStartedError(CharmError):
    """Some of the Landscape server processes couldn't be started."""

    def __init__(self, start_output, status_output):
        message = "Some services failed to start.\n\n{}\n\n{}".format(
            start_output, status_output)
        super(ProcessesNotStartedError, self).__init__(message)


class ResumeAction(MaintenanceAction):
    """Resume all Landscape services on the unit."""

    def __init__(self, hookenv=hookenv, paths=default_paths,
                 subprocess=subprocess):
        super(ResumeAction, self).__init__(hookenv=hookenv, paths=paths)
        self._subprocess = subprocess

    def _run(self):
        self._hookenv.status_set("maintenance", "Starting services.")
        start_output = self._subprocess.check_output((LSCTL, "start"))
        try:
            self._subprocess.check_output((LSCTL, "status"))
        except subprocess.CalledProcessError as status_error:
            self._hookenv.status_set("maintenance", "Stopping services.")
            self._subprocess.call((LSCTL, "stop"))
            self._hookenv.status_set(
                "maintenance", "Services failed to start.")
            raise ProcessesNotStartedError(start_output, status_error.output)
        else:
            self._hookenv.status_set("active", "")