* This patch adds the base infrastructure for the new concept
that we call Action Providers. It will allow to refactor
Mistral in a way that all action management will be encapsulated
with action providers. For example, Mistral Engine needs to
schedule actions while processing a workflow. Now it has to
access DB itself to find an action definition (meta info about
what this action is, like python class, input params etc.),
then prepare input parameters, validate parameters and send a
message to an executor to run it. In many other places, Mistral
also directly access DB to fetch an action definition. It's
not flexible because we assume that definitions of Mistral
actions must always be stored in DB. The concept of an Action
Provider allows moving away from that limitation. A particular
implementation of the ActionProvider interface can store action
definitions in any suitable way, even fetching them using
various transport protocols like AMQP, HTTP, TCP, or anything
else. An action provider may also generate action definitions
dynamically, like creating wrappers around a set of operating
system commands. But for the rest of the system it won't matter
what happens inside action providers. All details will be
hidden behind a unified interface.
* Added ActionDescriptor interface and its convenience base
abstract implementation. ActionDescriptor is an entity
representing an action before it's instantiated. It carries
the most important meta information about an action like name,
description, input parameters etc. It is also responsible for
validating action input parameters and instantiating a real
action.
* Added PythonActionDescriptor which represents a regular action
written as a Python class.
* Added CompositeActionProvider that delegates calls find() and
find_all() to a collection of other action providers.
* Minor style changes.
Partially implements: bp/mistral-action-providers
Change-Id: Ic9108c9293731b3576081c75f2786e1156ba0ccd