Add spec for the removal of Swift from the Undercloud

This spec has been submitted to enable us to remove Swift from the
Undercloud. The Spec is a highlevel document which provides insight
into the process we believe we can take to excise swift from the
Undercloud.

Change-Id: I7890f87acfb9d5aab47ee943ab85364d309867cb
Signed-off-by: Kevin Carter <kecarter@redhat.com>
This commit is contained in:
Kevin Carter 2020-09-15 11:36:01 -05:00 committed by Kevin Carter (cloudnull)
parent bc9277b840
commit e83d8aba3a

View File

@ -0,0 +1,188 @@
..
This work is licensed under a Creative Commons Attribution 3.0 Unported
License.
http://creativecommons.org/licenses/by/3.0/legalcode
=================================
Disable Swift from the Undercloud
=================================
The goal of this proposal is to introduce the community to the idea of
disabling Swift on the TripleO Undercloud. Within this propose we intend
to provide a high-level overview of how we can accomplish this goal.
Problem Description
===================
Swift is being used to store objects related to the deployment which are
managed entirely on the Undercloud. In the past, there was an API / UI to
interact with the deployment tooling; however, with the deprecation of the UI
and the removal of Mistral this is no longer the case. The Undercloud is
assumed to be a single node which is used to deploy OpenStack clouds, and
requires the user to login to the node to run commands. Because we're no longer
attempting to make the Undercloud a distributed system there's no need for an
API'able distributed storage service. Swift, in it's current state, is
under-utilized and carries unnecessary operational and resource overhead.
Proposed Change
===============
Overview
--------
Decommission Swift from the Undercloud.
To decommission Swift, we'll start by removing all of the `tripleoclient` Swift
interactions. These interactions are largely storing and retrieving YAML files
which provide context to the user for current deployment status. To ensure
we're not breaking deployment expectations, we'll push everything to the local
file system and retain all of the file properties wherever possible. We will
need coordinate with tripleo-ansible to ensure we're making all direct Swift
client and module interactions optional.
Once we're able to remove the `tripleoclient` Swift interactions, we'll move to
disable Swift interactions from tripleo-common. These interactions are similar
to the ones found within the `tripleoclient`, though tripleo-common has some
complexity; we'll need to ensure we're not breaking expectations we've created
with our puppet deployment methodologies which have some Swift assumptions.
Alternatives
------------
We keep everything as-is.
Security Impact
---------------
There should be no significant security implications when disabling Swift.
It could be argued that disabling Swift might make the deployment more secure,
it will lessen the attack surface; however, given the fact that Swift on the
Undercloud is only used by director I would consider any benefit insignificant.
Upgrade Impact
--------------
There will be no upgrade impact; this change will be transparent to the
end-user.
Other End User Impact
---------------------
None.
Performance Impact
------------------
Disabling Swift could make some client interactions faster; however, the
benefit should be negligible. That said, disabling Swift would remove a
service on the Undercloud, which would make setup faster and reduce the
resources required to run the Undercloud.
Other Deployer Impact
---------------------
Operationally we should see an improvement as it will no longer be required to
explore a Swift container, and download files to debug different parts of the
deployment. All deployment related file artifacts housed within Swift will
exist on the Undercloud using the local file system, and should be easily
interacted with.
Developer Impact
----------------
None, if anything disabling Swift should make the life of a TripleO developer
easier.
Implementation
==============
Excising Swift client interactions will be handled directly in as few reviews
as possible; hopefully allowing us to backport this change, should it be deemed
valuable to stable releases.
All of the objects stored within Swift will be stored in
`/var/lib/tripleo/{named_artifact_directories}`. This will allow us to
implement all of the same core logic in our various libraries just without the
use of the API call to store the object.
In terms of enabling us to eliminate swift without having a significant impact
on the internal API we'll first start by trying to replace the swift object
functions within tripleo-common with local file system calls. By using the
existing functions and replacing the backend we'll ensure API compatibility and
lessen the likely hood of creating regressions.
.. note::
We'll need to collaborate with various groups to ensure we're porting assumed
functionality correctly. While this spec will not go into the specifics
implementation details for porting assumed functionality, it should be known
that we will be accountable for ensuring existing functionality is ported
appropriately.
Assignee(s)
-----------
Primary assignee:
cloudnull
Other contributors:
- emilien
- ekultails
Work Items
----------
The work items listed here are high level, and not meant to provide specific
implementation details or timelines.
* Enumerate all of the Swift interactions
* Create a space on the Undercloud to house the files
* This location will be on the local file system and will be created into a
git archive; git is used for easier debug, rapid rollback, and will
provide simple versioning.
* Create an option to disable Swift on the Undercloud.
* Convert client interactions to using the local file system
* Ensure all tripleo-ansible Swift client calls are made optional
* Convert tripleo-common Swift interactions to using the local file system
* Disable Swift on the Undercloud
Dependencies
============
Before Swift can be disabled on the Undercloud we will need ensure the
deployment methodology has been changed to Metalsmith.
Testing
=======
The Swift tests will need to be updated to use the local file system, however
the existing tests and test structure will be reused.
Documentation Impact
====================
There are several references to Swift in our documentation which we will need to
update.
References
==========
* https://etherpad.opendev.org/p/tripleo-heat-swift-removal-undercloud
* http://paste.openstack.org/show/798208