Merge "Release as a plugin spec"

This commit is contained in:
Jenkins 2016-08-24 08:12:09 +00:00 committed by Gerrit Code Review
commit 2d08d11bbd
1 changed files with 420 additions and 0 deletions

View File

@ -0,0 +1,420 @@
..
This work is licensed under a Creative Commons Attribution 3.0 Unported
License.
http://creativecommons.org/licenses/by/3.0/legalcode
===================
Release as a plugin
===================
Blueprint: https://blueprints.launchpad.net/fuel/+spec/release-as-a-plugin
As a deployment Engineer I want to express a Fuel Release as a Fuel Plugin so
that I could define, maintain and deploy various flavors of customized
OpenStack deployments in a clean isolated way, externalized from common
Fuel provisioning layer.
-------------------
Problem description
-------------------
The nailgun repo still holds onto one of the remaining parts of the data model
the release fixture. This fixture is used to describe everything about the
deployment from the ground up and is where every change can possibly be
expressed.
----------------
Proposed changes
----------------
By moving the release fixtures ``openstack.yaml`` completely into the plugin
framework we're opening road to following changes:
* To make ``fuel-library`` repo a plugin.
* It is possible to ship multiple Openstack version release packages as
each in its own plugin.
* Next steps allow Fuel to have different releases bundled or no pre-bundled
releases at all (lightweight version) are possible as well.
Web UI
======
Support of the case when there are ``no release`` is required.
Basic releases will be shipped as pre-installed plugins. It becomes possible
to uninstall them completely leaving Fuel without releases at all.
UI should support case when no releases installed, not allowing to pass in
cluster creation wizard further that a release selection or not allow to start
this wizard at all.
Message about what to do if no releases are installed should be displayed to
user.
Nailgun
=======
Pre-installed plugins
---------------------
Providing releases as a plugin supposes that Fuel bundled release fixture
should be shipped and pre-installed as plugin package.
For the details, please, see [1] spec.
Data model
----------
Data model of Nailgun will be left intact except the changes in incoming
release configuration.
Release name version is determined in metadata with following fields:
.. code-block:: yaml
releases:
- release_name: 'ExampleRelease' #required
description: 'Example Release Description' #required
operating_system: 'ubuntu' #required, or its alias "os"
version: '0.0.1' #required
REST API
--------
No changes in REST API
Orchestration
=============
RPC Protocol
------------
None
Fuel Client
===========
Plugins installation is not changed.
Plugins
=======
Plugin adapters
---------------
Fuel plugin adapter should now be able to understand new format of
``release:`` records declared in plugin ``metadata.yaml``.
New release loader should be integrated with plugin adapters.
Release package
---------------
If ``is_release`` is defined and set to ``true`` for record in the
``releases:`` section this is a hallmark of release definition.
If ``is_release`` is defined and set to ``true`` the ``release_name``
is required.
``is_hotpluggable`` flag is not available for the release plugins and will
be ignored.
Release could contain any data matching FPB and Fuel validation schema,
without any restriction related to the OS version or bundling something
other than OS into the release plugin.
To make updates/upgrades simpler, it's supposed that plugin could contain
either releases or releases extensions, but not both of them at the same time.
FPB validator should provide warning if more than one release is defined
or plugin name is different from the release name.
As the result plugin developer is free to define any folders and files
structure that is comfortable to work with.
Example of ``metadata.yaml``:
.. code-block:: yaml
...
name: 'ExampleRelease'
version: '10.0.0'
package_version: '5.0.0' # plugin package version
releases:
- release_name: 'ExampleRelease'
description: 'Example Release Description' #required
operating_system: 'ubuntu' #required, or its alias "os"
version: 'mitaka-10.0' #required
# is_release should be true for plugins that define releases
is_release: true
# base_release_path allows defining template from which all data tree
# will be inherited by overriding keys.
base_release_path: ubuntu-10.0.0/_base.yaml
networks_path: ubuntu-10.0.0/metadata/networks.yaml
volumes_path: ubuntu-10.0.0/metadata/volumes.yaml
roles_path: ubuntu-10.0.0/metadata/roles.yaml
network_roles_path: ubuntu-10.0.0/metadata/network_roles.yaml
components_path: ubuntu-10.0.0/metadata/components.yaml
attributes_path: ubuntu-10.0.0/attributes/attributes.yaml
vmware_attributes_path: ubuntu-10.0.0/attributes/vmware.yaml
node_attributes_path: ubuntu-10.0.0/attributes/node.yaml
nic_attributes_path: ubuntu-10.0.0/attributes/nic.yaml
bond_attributes_path: ubuntu-10.0.0/attributes/bond.yaml
graphs:
- type: default
tasks_path: ubuntu-10.0.0/graphs/deployment_graph.yaml
- type: provisioning
tasks_path: ubuntu-10.0.0/graphs/provisioning_graph.yaml
- type: deletion
tasks_path: ubuntu-10.0.0/graphs/deletion_graph.yaml
- type: network_verification
tasks_path: ubuntu-10.0.0/graphs/network_verification_graph.yaml
deployment_scripts_path: ubuntu-10.0.0/deployment_scripts/
repository_path: ubuntu-10.0.0/repositories
Attributes except deployment scripts, repository path and graph will be
ignored for old-fashioned plugin release (extending existing release
functionality)
Graphs types are highly required in the release description for providing
good UX experience to plugins developers and deployment engineers for the
``Deploy changes`` action.
`Graph concept extension <https://review.openstack.org/#/c/343256/>`_.
Fuel Plugin Builder
-------------------
Should be able to check new release schema and files are linked as files and
folders paths.
Also it should provide appropriate warnings in case of deprecated syntax
signs.
Plugins Package v5.0.0 will be supported starting from Fuel v9.1.0.
Appropriate validation should be defined.
Under the hood FPB will perform three operations:
* Data files discovery and loading making data tree from plugin files and
rendered configuration templates.
During processing of metadata file all attributes with ``_path`` suffix will
be considered as special one and processed using the following conditions:
* if ``some_key_path`` key is pointing to file or file-like object and it is
possible to load data from it (YAML/JSON) key will be replaced to version
without suffix ``some_key`` and data will be placed under this key in data
tree.
* if key with the ``_path`` suffix is pointing to folder like
``./release/fuel-10.0/``, it will be left intact.
* if key with a path suffix ``_path`` is a glob expression like
``release/graphs/\*.yaml`` file search will be run.
All found files matching glob will be merged
into one list if they all have list root or
their properties will be merged into dict if their root is dict.
In the case of mixed root loader will fail.
After data is merged as well as data from single file it will be placed
under the key without ``_path`` suffix and original key will be removed
from data tree.
* Data tree validation.
* Plugin building and packaging (identical to the current functionality)
Deprecation
-----------
``modes`` release parameter is deprecated and will be removed in further
versions.
``tasks.yaml`` no further supported.
``fuel_version`` field currently is not processed by any business logic in
nailgun and should be deprecated.
Fuel Library
============
In perspective current Fuel Library should become a plugin.
------------
Alternatives
------------
There is alternative implementation offered by bgaifullin@mirantis.com
Release are provided as separate package and it is not related to the plugin.
Each release can be registered in nailgun by using API.
That means it is not required to update plugins model, only need to move
openstack.yaml to the fuel-library side.
The release package should include openstack.yaml and deployment tasks.
The plugins model will be kept as is and plugins only extend releases which
are registered in nailgun instead of new release declaration.
On the other hand release and plugin have quite similar data structures that
are different in the ways they are managed by business logic and how they are
delivered.
It seems sane to make their delivery and management as close as it's possible
as well.
--------------
Upgrade impact
--------------
It will be possible to ship release upgrades as a plugin.
---------------
Security impact
---------------
None
--------------------
Notifications impact
--------------------
Fuel Plugin Builder
===================
Fuel Plugin Builder validator should be able to validate new releases
parameter structure.
---------------
End user impact
---------------
None
------------------
Performance impact
------------------
None
-----------------
Deployment impact
-----------------
None
----------------
Developer impact
----------------
This feature highly affects Fuel plugins and library developers.
---------------------
Infrastructure impact
---------------------
None
--------------------
Documentation impact
--------------------
Add documentation about fuel plugins format.
--------------
Implementation
--------------
Assignee(s)
===========
Primary assignee:
ikutukov@mirantis.com
Other contributors:
Mandatory design review:
bgaifulin@mirantis.com
ikalnitsky@mirantis.com
Work Items
==========
* Bump plugins version to v5.0.0
* Add to ongiong Fuel release support of new manifest version.
* Add new manifest version support to ongoing FPB release.
Dependencies
============
None
-----------
Testing, QA
-----------
* Manual testing
* Automated testing with fuel library as the release.
Acceptance criteria
===================
* It is possible to deploy configuration with specific set of plugins and
packages.
* It is possible to perform only discovering/provision and manage
HostOS + underlay storage and networking.
* Vanilla Fuel 9.1 installation is possible without any release plugins, but
cluster creation is blocked with the UI notice, explaining situation.
----------
References
----------
[1] - https://blueprints.launchpad.net/fuel/+spec/release-description-in-fuel
-library