Spec of adapting file injection deprecation in nova
Change-Id: I4c388c8432f59d642892bf7f811d6761e1fc4f7e Implement: blueprint adapt-to-file-injection-deprecation-in-nova Signed-off-by: Fan Zhang <zh.f@outlook.com>
This commit is contained in:
parent
9d90c049ee
commit
9e93a231e3
@ -12,6 +12,15 @@ Contents:
|
||||
|
||||
specs/*
|
||||
|
||||
Rocky approved specs:
|
||||
|
||||
.. toctree::
|
||||
:glob:
|
||||
:maxdepth: 1
|
||||
|
||||
specs/rocky/*
|
||||
|
||||
|
||||
Queens approved specs:
|
||||
|
||||
.. toctree::
|
||||
|
224
specs/rocky/adapt-to-file-injection-deprecation-in-nova.rst
Normal file
224
specs/rocky/adapt-to-file-injection-deprecation-in-nova.rst
Normal file
@ -0,0 +1,224 @@
|
||||
..
|
||||
This work is licensed under a Creative Commons Attribution 3.0 Unported
|
||||
License.
|
||||
|
||||
http://creativecommons.org/licenses/by/3.0/legalcode
|
||||
|
||||
Sections of this template were taken directly from the Nova spec
|
||||
template at:
|
||||
https://github.com/openstack/nova-specs/blob/master/specs/juno-template.rst
|
||||
|
||||
..
|
||||
|
||||
|
||||
===========================================
|
||||
Adapt to file injection deprecation in nova
|
||||
===========================================
|
||||
|
||||
.. If section numbers are desired, unindent this
|
||||
.. sectnum::
|
||||
|
||||
.. If a TOC is desired, unindent this
|
||||
.. contents::
|
||||
|
||||
Trove currently uses `--personality` to inject files while booting an instance
|
||||
via Nova api. Unfortunately, this parameter is deprecated from Queens release,
|
||||
nova microversion 2.57. As bp `Deprecate file injection` [1]_ mentioned,
|
||||
the code to support it would remain, but having a microversion boundary would
|
||||
give Nova the ability to eventually remove the code in the future. In
|
||||
this spec, we try to adapt to file injection deprecation and implement another
|
||||
way to inject files into instance.
|
||||
|
||||
|
||||
Launchpad Blueprint:
|
||||
https://blueprints.launchpad.net/trove/+spec/adapt-to-file-injection-deprecation-in-nova
|
||||
|
||||
|
||||
Problem Description
|
||||
===================
|
||||
|
||||
Nova deprecates file injection by popping out `--personality` parameter in
|
||||
request schema of microversion 2.57, then no value of `--personality` would
|
||||
be passed to Nova api service. It's the current way using this parameter to
|
||||
inject files in Trove. We're facing the risk that it would break Trove
|
||||
completely.
|
||||
|
||||
|
||||
Proposed Change
|
||||
===============
|
||||
|
||||
Using `--user-data` is one of the alternatives to inject files while booting
|
||||
an instance.
|
||||
|
||||
Here is what we are going to do:
|
||||
|
||||
* Reorganize function ``trove.instance.models.BaseInstance#get_injected_files``
|
||||
to get the files contents, injected path, owner and permission, then build an
|
||||
``InjectedFile`` object. In case of injecting multiple files into instance,
|
||||
we should build and return an ``InjectedFile`` object list.
|
||||
|
||||
* Change ``trove.taskmanager.models.FreshInstanceTasks#_prepare_userdata``.
|
||||
Build cloud-config scripts based on ``InjectedFile`` object list. If there is
|
||||
a `<datastore_manager>.cloudinit` script, e.g, mysql.cloudinit, we should
|
||||
detect the format of the script, and then convert it alongside with
|
||||
`cloud-config scripts` [2]_ into a mime multi part file [3]_ in case that
|
||||
we have to pass more than one type of data to cloud-init. So here should be
|
||||
two main helpers, one for organizing cloud-config scripts which looks like
|
||||
below:
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
#cloud-config
|
||||
write_files:
|
||||
- encoding: b64
|
||||
content: CiMgVGhpcyBmaWxlIGNvbnRyb2xzIHRoZSBzdGF0ZSBvZiBTRUxpbnV4...
|
||||
owner: trove:trove
|
||||
path: /etc/trove/trove.conf
|
||||
|
||||
the other one for generating mime messages if there is any `*.cloudinit`
|
||||
scripts.
|
||||
|
||||
.. note::
|
||||
|
||||
Noted that currently we're going to support **ONLY** two formats for
|
||||
`*.cloudinit` file, cloud-config and user-data script [4]_. It may be
|
||||
difficult for us to organize one user-data scripts based on one
|
||||
mime multi-part file or gzip compressed content, and other formats
|
||||
may not be used a lot. As for formats reference, please see [5]_ .
|
||||
|
||||
* Use `--user-data` to pass the parameter we build above while booting an
|
||||
instance, then we can inject files into instance's specified location,
|
||||
with proper owner and permission. One thing to clarify here is that
|
||||
according to configuration item:
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
cfg.BoolOpt('use_nova_server_config_drive', default=True,
|
||||
help='Use config drive for file injection when booting '
|
||||
'instance.'),
|
||||
|
||||
we enable `--config-drive` when calling novaclient to create
|
||||
a server by default.
|
||||
|
||||
* Remove unused and deprecated codes.
|
||||
|
||||
|
||||
Configuration
|
||||
-------------
|
||||
|
||||
None
|
||||
|
||||
Database
|
||||
--------
|
||||
|
||||
None
|
||||
|
||||
Public API
|
||||
----------
|
||||
|
||||
None
|
||||
|
||||
Public API Security
|
||||
-------------------
|
||||
|
||||
None
|
||||
|
||||
Python API
|
||||
----------
|
||||
|
||||
None
|
||||
|
||||
CLI (python-troveclient)
|
||||
------------------------
|
||||
|
||||
None
|
||||
|
||||
Internal API
|
||||
------------
|
||||
|
||||
None
|
||||
|
||||
Guest Agent
|
||||
-----------
|
||||
|
||||
None
|
||||
|
||||
|
||||
Alternatives
|
||||
------------
|
||||
|
||||
None
|
||||
|
||||
|
||||
Dashboard Impact (UX)
|
||||
=====================
|
||||
|
||||
None
|
||||
|
||||
Implementation
|
||||
==============
|
||||
|
||||
Assignee(s)
|
||||
-----------
|
||||
|
||||
Primary assignee:
|
||||
Fan Zhang <zh.f@outlook.com>
|
||||
|
||||
Milestones
|
||||
----------
|
||||
|
||||
Target Milestone for completion:
|
||||
Rocky-R2
|
||||
|
||||
|
||||
Work Items
|
||||
----------
|
||||
|
||||
* Add new `InjectedFile` object.
|
||||
|
||||
* Add new helper functions.
|
||||
|
||||
* Modify current code, including deprecating files parameter and changing
|
||||
to user-data.
|
||||
|
||||
* Modify related code which uses `--personality` parameter to boot an instance.
|
||||
|
||||
|
||||
Upgrade Implications
|
||||
====================
|
||||
|
||||
None
|
||||
|
||||
|
||||
Dependencies
|
||||
============
|
||||
|
||||
None
|
||||
|
||||
|
||||
Testing
|
||||
=======
|
||||
|
||||
* Current functional tests should cover the creating instance scenario.
|
||||
|
||||
* Would need some new unit tests.
|
||||
|
||||
|
||||
Documentation Impact
|
||||
====================
|
||||
|
||||
Docs needed for new configuration item usage.
|
||||
|
||||
References
|
||||
==========
|
||||
|
||||
.. [1] https://specs.openstack.org/openstack/nova-specs/specs/queens/implemented/deprecate-file-injection.html
|
||||
.. [2] http://cloudinit.readthedocs.io/en/latest/topics/format.html#cloud-config-data
|
||||
.. [3] http://cloudinit.readthedocs.io/en/latest/topics/format.html#mime-multi-part-archive
|
||||
.. [4] http://cloudinit.readthedocs.io/en/latest/topics/format.html#user-data-script
|
||||
.. [5] http://cloudinit.readthedocs.io/en/latest/topics/format.html#formats
|
||||
|
||||
Appendix
|
||||
========
|
||||
|
||||
None.
|
Loading…
x
Reference in New Issue
Block a user