# Copyright (c) 2014 The Chromium OS Authors. All rights reserved. # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. """This file defines tasks to be executed in provision actions.""" import abc import logging import common class BaseActionable(object): """Base class of an actionable item.""" @abc.abstractmethod def execute(self, job, host, *args, **kwargs): """Execute the action item. @param job: A job object from a control file. @param host: A host to run this action against. @param args: arguments to passed to the test. @param kwargs: keyword arguments to passed to the test. @returns True if succeeds, False otherwise, subclass should override this method. """ raise NotImplementedError('Subclass should override execute.') class TestActionable(BaseActionable): """A test to be executed as an action""" def __init__(self, test, extra_kwargs={}): """Init method. @param test: String, the test to run, e.g. dummy_PassServer @param extra_kargs: A dictionary, extra keyval-based args that will be passed when execute the test. """ self.test = test self.extra_kwargs = extra_kwargs def execute(self, job, host, *args, **kwargs): """Execute the action item. @param job: A job object from a control file. @param host: A host to run this action against. @param args: arguments to passed to the test. @param kwargs: keyword arguments to passed to the test. @returns True if succeeds, False otherwise. """ kwargs.update(self.extra_kwargs) return job.run_test(self.test, host=host, *args, **kwargs) class RebootActionable(BaseActionable): """Reboot action.""" def execute(self, job, host, *args, **kwargs): """Execute the action item. @param job: A job object from a control file. @param host: A host to run this action against. @param args: arguments to passed to the test. @param kwargs: keyword arguments to passed to the test. @returns True if succeeds. """ logging.error('Executing RebootActionable ... ') host.reboot() logging.error('RebootActionable execution succeeds. ') return True