Add resume action

This commit is contained in:
Adam Collard 2015-08-11 10:55:31 +01:00
parent 71afac4c78
commit 3210ee5244
4 changed files with 87 additions and 3 deletions

View File

@ -1,3 +1,5 @@
pause:
description: Pause the swift-storage unit. This action will stop any swift services.
description: Pause the swift-storage unit. This action will stop Swift services.
resume:
description: Resume the swift-storage unit. This action will start Swift services.

View File

@ -5,7 +5,7 @@ import os
import sys
import yaml
from charmhelpers.core.host import service_pause
from charmhelpers.core.host import service_pause, service_resume
from charmhelpers.core.hookenv import action_fail, status_set
from lib.swift_storage_utils import SWIFT_SVCS
@ -33,9 +33,21 @@ def pause(args):
"maintenance", "Paused. Use 'resume' action to resume normal service.")
def resume(args):
"""Resume all the swift services.
@raises Exception if any services fail to start
"""
for service in SWIFT_SVCS:
started = service_resume(service)
if not started:
raise Exception("{} didn't start cleanly.".format(service))
status_set("active", "")
# A dictionary of all the defined actions to callables (which take
# parsed arguments).
ACTIONS = {"pause": pause}
ACTIONS = {"pause": pause, "resume": resume}
def main(argv):

1
actions/resume Symbolic link
View File

@ -0,0 +1 @@
actions.py

View File

@ -81,6 +81,75 @@ class PauseTestCase(CharmTestCase):
"Use 'resume' action to resume normal service."])
class ResumeTestCase(CharmTestCase):
def setUp(self):
super(ResumeTestCase, self).setUp(
actions.actions, ["service_resume", "status_set"])
def test_resumes_services(self):
"""Resume action resumes all of the Swift services."""
resume_calls = []
def fake_service_resume(svc):
resume_calls.append(svc)
return True
self.service_resume.side_effect = fake_service_resume
actions.actions.resume([])
self.assertEqual(resume_calls, ['swift-account-auditor',
'swift-account-reaper',
'swift-account-replicator',
'swift-account-server',
'swift-container-auditor',
'swift-container-replicator',
'swift-container-server',
'swift-container-sync',
'swift-container-updater',
'swift-object-auditor',
'swift-object-replicator',
'swift-object-server',
'swift-object-updater'])
def test_bails_out_early_on_error(self):
"""Resume action fails early if there are errors starting a service."""
resume_calls = []
def maybe_kill(svc):
if svc == "swift-container-auditor":
return False
else:
resume_calls.append(svc)
return True
self.service_resume.side_effect = maybe_kill
self.assertRaisesRegexp(
Exception, "swift-container-auditor didn't start cleanly.",
actions.actions.resume, [])
self.assertEqual(resume_calls, ['swift-account-auditor',
'swift-account-reaper',
'swift-account-replicator',
'swift-account-server'])
def test_status_mode(self):
"""Resume action sets the status to maintenance."""
status_calls = []
self.status_set.side_effect = lambda state, msg: status_calls.append(
state)
actions.actions.resume([])
self.assertEqual(status_calls, ["active"])
def test_status_message(self):
"""Resume action sets an empty status message."""
status_calls = []
self.status_set.side_effect = lambda state, msg: status_calls.append(
msg)
actions.actions.resume([])
self.assertEqual(status_calls, [""])
class GetActionParserTestCase(unittest.TestCase):
def test_definition_from_yaml(self):