tripleo-specs/specs/mitaka/tripleo-mistral-deployment-library.rst
Ryan Brady 98d07fae58 TripleO Deployment Library with Mistral
This spec describes the intent to create a library for TripleO
deployment that integrates with Mistral for use in the CLI and GUI.

Change-Id: I41db5b9fb9b4a3e77f52ca7c3c58022f6f282e9a
2016-04-13 16:50:51 +00:00

275 lines
11 KiB
ReStructuredText

============================================================
Library support for TripleO Overcloud Deployment Via Mistral
============================================================
We need a TripleO library that supports the overcloud deployment workflow.
Problem Description
===================
TripleO has an overcloud deployment workflow that uses Heat templates and uses
the following steps:
* The user edits the templates and environment file. These can be stored
anywhere.
* Templates may be validated by Heat.
* Templates and environment are sent to Heat for overcloud deployment.
This workflow is already supported by the CLI.
However from a GUI perspective, although the workflow is straightforward, it is
not simple. Here are some of the complications that arise:
* Some of the business logic in this workflow is contained in the CLI itself,
making it difficult for other UIs to use.
* If the TripleO overcloud deployment workflow changes, it is easy for the CLI
and GUI approach to end up on divergent paths - a dangerous situation.
* The CLI approach allows open-ended flexibility (the CLI doesn't care where
the templates come from) that is detrimental for a GUI (the GUI user doesn't
care where the templates are stored, but consistency in approach is desirable
to prevent divergence among GUIs and CLIs).
There is a need to create common code that accommodates the flexibility of the
CLI with the ease-of-use needs of GUI consumers.
Proposed Change
===============
In order to solve this problem, we propose to create a Mistral-integrated
deployment with the following:
* Encapsulate the business logic involved in the overcloud deployment workflow
within the tripleo-common library utilizing Mistral actions and workflows.
* Provide a simplified workflow to hide unneeded complexity from GUI consumers
* Update the CLI to use this code where appropriate to prevent divergence with
GUIs.
The first three points deserve further explanation. First, let us lay out the
proposed GUI workflow.
1. A user pushes the Heat deployment templates into swift.
2. The user defines values for the template resource types given by Heat
template capabilities which are stored in an environment[1]. Note that this
spec will be completed by mitaka at the earliest. A workaround is discussed
below.
3. Now that the template resource types are specified, the user can configure
deployment parameters given by Heat. Edited parameters are updated and are
stored in an environment. 'Roles' can still be derived from available Heat
parameters[2].
4. Steps 2 and 3 can be repeated.
5. With configuration complete, the user triggers the deployment of the
overcloud. The templates and environment file are taken from Swift
and sent to Heat.
6. Once overcloud deployment is complete, any needed post-deploy config is
performed.
The CLI and GUI will both use the Swift workflow and store the templates into
Swift. This would facilitate the potential to switch to the UI from a CLI based
deployment and vice-versa.
Mistral Workflows are composed of Tasks, which group together one or more
Actions to be executed with a Workflow Execution. The Action is implemented as
a class with an initialization method and a run method. The run method provides
a single execution point for Python code. Any persistence of state required for
Actions or Workflows will be stored in a Mistral Environment object.
In some cases, an OpenStack Service may be missing a feature needed for TripleO
or it might only be accessible through its associated Python client. To
mitigate this issue in the short term, some of the Actions will need to be
executed directly with an Action Execution [3] which calls the Action directly and
returns instantly, but also doesn't have access to the same context as a
Workflow Execution. In theory, every action execution should be replaced by an
OpenStack service API call.
Below is a summary of the intended Workflows and Actions to be executed from the
CLI or the GUI using the python-mistralclient or Mistral API. There may be
additional actions or library code necessary to enable these operations that
will not be intended to be consumed directly.
Workflows:
* Node Registration
* Node Introspection
* Plan Creation
* Plan Deletion
* Deploy
* Validation Operations
Actions:
* Plan List
* Get Capabilites
* Update Capabilities
* Get Parameters
* Update Parameters
* Roles List
For Flavors and Image management, the Nova and Glance APIs will be used
respectively.
The registration and introspection of nodes will be implemented within a
Mistral Workflow. The logic is currently in tripleoclient and will be ported,
as certain node configurations are specified as part of the logic (ramdisk,
kernel names, etc.) so the user does not have to specify those. Tagging,
listing and deleting nodes will happen via the Ironic/Inspectors APIs as
appropriate.
A deployment plan consists of a collection of heat templates in a Swift
container, combined with data stored in a Mistral Environment. When the plan is
first created, the capabilities map data will be parsed and stored in the
associated Mistral Environment. The templates will need to be uploaded to a
Swift container with the same name as the stack to be created. While any user
could use a raw POST request to accomplish this, the GUI and CLI will provide
convenience functions improve the user experience. The convenience functions
will be implemented in an Action that can be used directly or included in a
Workflow.
The deletion of a plan will be implemented in a Workflow to ensure there isn't
an associated stack before deleting the templates, container and Mistral
Environment. Listing the plans will be accomplished by calling
'mistral environment-list'.
To get a list of the available Heat environment files with descriptions and
constraints, the library will have an Action that returns the information about
capabilities added during plan creation and identifies which Heat environment
files have already been selected. There will also be an action that accepts a
list of user selected Heat environment files and stores the information in the
Mistral Environment. It would be inconvenient to use a Workflow for these
actions as they just read or update the Mistral Environment and do not require
additional logic.
The identification of Roles will be implemented in a Workflow that calls out to
Heat.
To obtain the deployment parameters, Actions will be created that will call out
to heat with the required template information to obtain the parameters and set
the parameter values to the Environment.
To perform TripleO validations, Workflows and associated Actions will be created
to support list, start, stop, and results operations. See the spec [4] for more
information on how the validations will be implemented with Mistral.
Alternatives
------------
One alternative is to force non-CLI UIs to re-implement the business logic
currently contained within the CLI. This is not a good alternative. Another
possible alternative would be to create a REST API [5] to abstract TripleO
deployment logic, but it would require considerably more effort to create and
maintain and has been discussed at length on the mailing list. [6][7]
Security Impact
---------------
Other End User Impact
---------------------
The --templates workflow will end up being modified to use the updated
tripleo-common library.
Integrating with Mistral is a straightforward process and this may result in
increased usage.
Performance Impact
------------------
None
Other Deployer Impact
---------------------
None
Developer Impact
----------------
Rather than write workflow code in python-tripleoclient directly developers will
now create Mistral Actions and Workflows that help implement the requirements.
Right now, changing the overcloud deployment workflow results in stress due to
the need to individually update both the CLI and GUI code. Converging the two
makes this a far easier proposition. However developers will need to have this
architecture in mind and ensure that changes to the --templates or --plan
workflow are maintained in the tripleo-common library (when appropriate) to
avoid unneeded divergences.
Implementation
==============
Assignee(s)
-----------
Primary assignees:
* rbrady
* jtomasek
* dprince
Work Items
----------
The work items required are:
* Develop the tripleo-common Mistral actions that provide all of the
functionality required for our deployment workflows.
* This involves moving much of the code out of python-tripleoclient and into
generic, narrowly focused, Mistral actions that can be consumed via the
Mistral API.
* Create new Mistral workflows to help with high level things like deployment,
introspection, node registration, etc.
* tripleo-common is more of an internal library, and its logic is meant to be
consumed (almost) solely by using Mistral
actions. Projects should not attempt to circumvent the API by using
tripleo-common as a library as much as possible.
There may be some exceptions to this for common polling functions, etc. but in
general all core workflow logic should be API driven.
* Update the CLI to consume these Mistral actions directly via
python-mistralclient.
All patches that implement these changes must pass CI and add additional tests
as needed.
Dependencies
============
None
Testing
=======
The TripleO CI should be updated to test the updated tripleo-common library.
Our intent is to make tripleoclient consume Mistral actions as we write them.
Because all of the existing upstream Tripleo CI release on tripleoclient taking
this approach ensures that our all of our workflow actions always work. This
should get us coverage on 90% of the Mistral actions and workflows and allow us
to proceed with the implementation iteratively/quickly. Once the UI is installed
and part of our upstream CI we can also rely on coverage there to ensure we
don't have breakages.
Documentation Impact
====================
Mistral Actions and Workflows are sort of self-documenting and can be easily
introspected by running 'mistral workflow-list' or 'mistral action-list' on the
command line. The updated library however will have to be well-documented and
meet OpenStack standards. Documentation will be needed in both the
tripleo-common and tripleo-docs repositories.
References
==========
[1] https://specs.openstack.org/openstack/heat-specs/specs/mitaka/resource-capabilities.html
[2] https://specs.openstack.org/openstack/heat-specs/specs/liberty/nested-validation.html
[3] http://docs.openstack.org/developer/mistral/terminology/executions.html
[4] https://review.openstack.org/#/c/255792/
[5] http://specs.openstack.org/openstack/tripleo-specs/specs/mitaka/tripleo-overcloud-deployment-library.html
[6] http://lists.openstack.org/pipermail/openstack-dev/2016-January/083943.html
[7] http://lists.openstack.org/pipermail/openstack-dev/2016-January/083757.html