Deployment plan management changes

Change-Id: I622e934715557d2c556d1118f309ca9273c2f043
This commit is contained in:
Jiri Tomasek 2017-02-28 12:06:15 +01:00
parent ced8320a2b
commit 7721a35292
2 changed files with 238 additions and 0 deletions

View File

@ -3,6 +3,14 @@
==============================
Tripleo Project Specifications
==============================
Pike Proposed Specs:
.. toctree::
:glob:
:maxdepth: 1
specs/pike/*
Ocata Approved Specs:
.. toctree::

View File

@ -0,0 +1,230 @@
..
This work is licensed under a Creative Commons Attribution 3.0 Unported
License.
http://creativecommons.org/licenses/by/3.0/legalcode
==================================
Deployment Plan Management changes
==================================
https://blueprints.launchpad.net/tripleo/+spec/deployment-plan-management-refactor
The goal of this work is to improve GUI and CLI interoperability by changing the way
deployment configuration is stored, making it more compact and simplify plan import
and export.
Problem Description
===================
The problem is broadly described in mailing list discussion [1]. This spec is a result
of agreement achieved in that discussion.
TripleO-Common library currently operates on Mistral environment for storing plan
configuration although not all data are stored there since there are additional files
which define plan configuration (roles_data.yaml, network_data.yaml, capabilities-map.yaml)
which are currently used by CLI to drive certain parts of deployment configuration.
This imposes a problem of synchronization of content of those files with Mistral
environment when plan is imported or exported.
TripleO-Common needs to be able to provide means for roles and networks management.
Proposed Change
===============
Overview
--------
TripleO plan configuration data should be stored in single place rather than in multiple
(mistral environment + plan meta files stored in Swift container).
TripleO-Common should move from using mistral environment to storing the information
in file (plan-environment.yaml) in Swift container so all plan configuration data
are stored in 'meta' files in Swift and tripleo-common provides API to perform operations
on this data.
Plan meta files: capabilities-map.yaml, roles_data.yaml, network_data.yaml [3],
plan-environment.yaml
Proposed plan-environment.yaml file structure::
version: 1.0
name: A name of a plan which this file describes
description: >
A description of a plan, it's usage and potential summary of features it provides
template: overcloud.yaml
environments:
- path: overcloud-resource-registry-puppet.yaml
parameter_defaults:
ControllerCount: 1
passwords:
TrovePassword: "vEPKFbdpTeesCWRmtjgH4s7M8"
PankoPassword: "qJJj3gTg8bTCkbtYtYVPtzcyz"
KeystoneCredential0: "Yeh1wPLUWz0kiugxifYU19qaf5FADDZU31dnno4gJns="
This solution makes whole plan configuration stored in Swift container together with
rest of plan files, simplifies plan import/export functionality as no synchronization
is necessary between the Swift files and mistral environment. Plan configuration is
more straightforward and CLI/GUI interoperability is improved.
Initially the plan configuration is going to be split into multiple 'meta' files
(plan-environment.yaml, capabilities-map.yaml, roles_data.yaml, network_data.yaml)
all stored in Swift container.
As a next step we can evaluate a solution which merges them all into plan-environment.yaml
Using CLI workflow user works with local files. Plan, Networks and Roles are configured by
making changes directly in relevant files (plan-management.yaml, roles_data.yaml, ...).
Plan is created and templates are generated on deploy command.
TripleO Common library will implement CRUD actions for Roles and Networks
management. This will allow clients to manage Roles and Networks and generate relevant
templates (see work items).
TripleO UI and other clients use tripleo-common library which operates on plan stored in
Swift container.
Alternatives
------------
Alternative approach is treating Swift 'meta' files as an input during plan creation
and synchronize them to Mistral environment when plan is imported which is described
initially in [1] and is used in current plan import/export implementation [2]
This solution needs to deal with multiple race conditions, makes plan import/export
much more complicated and overall solution is not simple to understand. Using this
solution should be considered if using mistral environment as a plan configuration
storage has some marginal benefits over using file in Swift. Which is not the case
according to the discussion [1]
As a subsequent step to proposed solution, it is possible to join all existing
'meta' files into a single one.
Security Impact
---------------
None.
Other End User Impact
---------------------
CLI/GUI interoperability is improved
Performance Impact
------------------
None.
Other Deployer Impact
---------------------
None.
Developer Impact
----------------
This change makes Deployment Plan import/export functionality much simpler as well as
makes the tripleo-common operate on the same set of files as CLI does. It is much
easier to understand the CLI users how tripleo-common works as it does not do any
swift files -> mistral environment synchronization on the background.
TripleO-Common can introduce functionality manage Roles and Networks which perfectly
matches to how CLI workflow does it.
Implementation
==============
Assignee(s)
-----------
Primary assignee:
akrivoka
Other contributors:
* d0ugal
* rbrady
* jtomasek
Work Items
----------
* [tripleo-heat-templates] Update plan-environment.yaml to match new specification.
blueprint: https://blueprints.launchpad.net/tripleo/+spec/update-plan-environment-yaml
* [tripleo-common] Update relevant actions to store data in plan-environment.yaml in
Swift instead of using mistral-environment. Migrate any existing data away from Mistral.
blueprint: https://blueprints.launchpad.net/tripleo/+spec/stop-using-mistral-env
* [tripleo-common] On plan creation/update tripleo-common validates the plan and checks
that roles_data.yaml and network_data.yaml exist as well as validates it's format.
On success, plan creation/update templates are generated/regenerated.
blueprint: https://blueprints.launchpad.net/tripleo/+spec/validate-roles-networks
* [tripleo-common] Provide a GetRoles action to list current roles in json format by reading
roles_data.yaml.
blueprint: https://blueprints.launchpad.net/tripleo/+spec/get-roles-action
* [tripleo-common] Provide a GetNetworks action to list current networks in json format
by reading network_data.yaml.
blueprint: https://blueprints.launchpad.net/tripleo/+spec/get-networks-action
* [tripleo-common] Provide an UpdateRoles action to update Roles. It takes data in
json format validates it's contents and persists them in roles_data.yaml, after
successful update, templates are regenerated.
blueprint: https://blueprints.launchpad.net/tripleo/+spec/update-roles-action
* [tripleo-common] Provide an UpdateNetworks action to update Networks. It takes data in
json format validates it's contents and persists them in network_data.yaml.
blueprint: https://blueprints.launchpad.net/tripleo/+spec/update-networks-action
* [tripleo-ui] Provide a way to create/list/update/delete Roles by calling tripleo-common
actions.
blueprint: https://blueprints.launchpad.net/tripleo/+spec/roles-crud-ui
* [tripleo-ui] Provide a way to create/list/update/delete Networks by calling tripleo-common
actions.
blueprint: https://blueprints.launchpad.net/tripleo/+spec/networks-crud-ui
* [tripleo-ui] Provide a way to assign Networks to Roles.
blueprint: https://blueprints.launchpad.net/tripleo/+spec/networks-roles-assignment-ui
* [python-tripleoclient] Update CLI to use tripleo-common actions for operations
that currently modify mistral environment
related bug: https://bugs.launchpad.net/tripleo/+bug/1635409
Dependencies
============
None.
Testing
=======
Feature will be tested as part of TripleO CI
Documentation Impact
====================
Documentation should be updated to reflect the new capabilities of GUI (Roles/Networks management),
a way to use plan-environment.yaml via CLI workflow and CLI/GUI interoperability using plan import
and export features.
References
==========
[1] http://lists.openstack.org/pipermail/openstack-dev/2017-February/111433.html
[2] https://specs.openstack.org/openstack/tripleo-specs/specs/ocata/gui-plan-import-export.html
[3] https://review.openstack.org/#/c/409921/