Add the charmhub-migration spec
This spec proposes a new, better, but alternative means for maintaining and releasing OpenStack charms in a world with a new charm store (charmhub.io) which provides richer mechanisms for charm delivery. Change-Id: If5719ad54c52d46dc001da4df91caa4b00af256f
This commit is contained in:
parent
9448f7ccae
commit
c68f9e2b08
@ -14,6 +14,7 @@ Here you can find the specs, and spec template, for each release:
|
||||
specs/antelope/index
|
||||
specs/zed/index
|
||||
specs/yoga/index
|
||||
specs/yoga/implemented/*
|
||||
specs/xena/index
|
||||
specs/wallaby/index
|
||||
specs/victoria/index
|
||||
|
733
specs/yoga/implemented/charmhub-migration.rst
Normal file
733
specs/yoga/implemented/charmhub-migration.rst
Normal file
@ -0,0 +1,733 @@
|
||||
..
|
||||
Copyright 2021, Canonical UK
|
||||
|
||||
This work is licensed under a Creative Commons Attribution 3.0
|
||||
Unported License.
|
||||
http://creativecommons.org/licenses/by/3.0/legalcode
|
||||
|
||||
..
|
||||
This template should be in ReSTructured text. Please do not delete
|
||||
any of the sections in this template. If you have nothing to say
|
||||
for a whole section, just write: "None". For help with syntax, see
|
||||
http://sphinx-doc.org/rest.html To test out your formatting, see
|
||||
http://www.tele3.cz/jbar/rest/rest.html
|
||||
|
||||
================================
|
||||
Charmstore to Charmhub Migration
|
||||
================================
|
||||
|
||||
This spec proposes a new, better, but alternative means for maintaining and
|
||||
releasing OpenStack charms in a world with a new charm store (charmhub.io)
|
||||
which provides richer mechanisms for charm delivery.
|
||||
|
||||
A new charm store, charmhub, has been introduced that shares features and
|
||||
capabilities with snaps. The legacy charm store, jaas.ai, is planned to be
|
||||
retired and all projects delivering charms should migrate to charmhub. One of
|
||||
the compelling features of charmhub is the ability to offer multiple tracks for
|
||||
releases.
|
||||
|
||||
The charms themselves are written to support multiple releases of OpenStack
|
||||
from pre-Mitaka to Xena. This is convenient and straightforward for having
|
||||
development working only on one branch at a time for a charm, but requires that
|
||||
code and dependencies work towards the lowest common supported denominator.
|
||||
This is problematic as these charms depend on python libraries that are moving
|
||||
forward and dropping support for legacy python versions such as Python 2, 3.5
|
||||
and beyond, which causes maintenance challenges for current charms.
|
||||
|
||||
Problem Description
|
||||
===================
|
||||
|
||||
Currently, OpenStack Charms are delivered in two charmstore namespaces -
|
||||
``openstack-charmers`` and ``openstack-charmers-next``. The use of two
|
||||
namespaces predates the existence of channels within the jaas.ai charm store.
|
||||
These namespaces are equivalent to the stable and edge channels respectively.
|
||||
|
||||
The git repositories hosting the source code for the OpenStack charms generally
|
||||
live on opendev.org git servers. The repositories contain branches of each
|
||||
stable charm release and an unstable development branch (master). A post-merge
|
||||
job in the CI system publishes an updated version of the charm to the jaas.ai
|
||||
charm store after any change is merged. Changes landing in the master
|
||||
development branch are published in the openstack-charmers-next namespace and
|
||||
changes landing in the most recent stable branch are published in the
|
||||
openstack-charmers namespace.
|
||||
|
||||
One of the challenges with the current approach is that the two branches must
|
||||
focus on the lowest common denominator for dependencies; meaning that most
|
||||
python libraries leveraged and included in the charms must be limited to
|
||||
versions that support older python releases that are still included on older
|
||||
OpenStack releases. As the world of Python library development moves on,
|
||||
support for older python versions are being deprecated and removed causing a
|
||||
variety of maintenance headaches for the current charms.
|
||||
|
||||
Another challenge with this approach is that each new feature introduced adds
|
||||
potential risk to older install bases. In order to mitigate this, the gate
|
||||
testing of the OpenStack Charms runs a broad sampling of tests across a
|
||||
multitude of OpenStack and base distro releases. New contributors are often
|
||||
running into challenges with the CI system and needing to debug older releases
|
||||
even when their patches are not relevant to these older versions.
|
||||
|
||||
One of the positive sides to this arrangement is that development primarily
|
||||
only needs to consider 2 branches at a time - the master development branch
|
||||
and the most recent stable branch. All patches are primarily targeted at the
|
||||
master development branch and relevant bug fixes are backported to a single
|
||||
release.
|
||||
|
||||
Proposed Change
|
||||
===============
|
||||
|
||||
OpenStack charms will adopt a model of release and delivery which takes
|
||||
advantage of the various delivery channels offered by charmhub which closely
|
||||
matches channels in the `Snap store`_. Note, that not all charms will support
|
||||
all releases/versions of a specific service and charms will only adopt branches
|
||||
and tracks for those releases which are relevant to the service itself.
|
||||
|
||||
Tracks
|
||||
------
|
||||
|
||||
Tracks will be set up to track git branches in the upstream repositories and
|
||||
will result in a track per release of the charm payload (e.g. the software
|
||||
service it delivers). When the primary software payload of the charm uses
|
||||
well-known release names, the release name will be used in lieu of version
|
||||
numbers for the track name. When the primary software payload of the charm does
|
||||
not use well-known release names, the version of the software will be used.
|
||||
|
||||
For example, the nova-compute charm delivers nova hypervisor services and the
|
||||
charm tracks will correspond to the OpenStack release of the nova services
|
||||
installed (e.g. ussuri, victoria, etc.).
|
||||
|
||||
As another example, the OVN Central charm delivers OVN as the payload and OVN
|
||||
uses release names/versions of YY.MM. In this scenario, the OVN charm Central
|
||||
charm will provide a track corresponding to the YY.MM naming schema (e.g.
|
||||
21.03, 21.09, etc).
|
||||
|
||||
Risk Levels
|
||||
-----------
|
||||
|
||||
The charmhub store also has the ability to allow the developers and users to
|
||||
provide and consume different risk levels. This feature was also available in
|
||||
the legacy charmstore, however it was not leveraged by the release process
|
||||
until very recently. There are 4 risk levels available within any track: edge,
|
||||
beta, candidate, and stable. The CI system will automatically publish a new
|
||||
charm for any change which lands in the corresponding git branch to the edge
|
||||
risk level.
|
||||
|
||||
Charms will be promoted through the edge -> beta -> candidate -> stable risk
|
||||
levels by a human actor, not through an automated script. Tooling may be
|
||||
developed to assist in this process, but automatic promotion is out of scope at
|
||||
this time. Future enhancements may include triggering a promotion of a build
|
||||
upon the introduction of git tags, but that is considered out of scope for this
|
||||
work.
|
||||
|
||||
Branches
|
||||
--------
|
||||
|
||||
The charmhub store also provides for a further subdivision of tracks and risk
|
||||
levels into branches, which are meant to provide temporary, short-lived,
|
||||
releases for bug fixing purposes. There are various possibilities to consider
|
||||
regarding how branch flows should be worked into the development flow of
|
||||
OpenStack charms.
|
||||
|
||||
For the purposes of this work, branches are explicitly out of scope and should
|
||||
be considered separately.
|
||||
|
||||
Git Branches
|
||||
------------
|
||||
|
||||
Git branches will need to be created for the various tracks that are delivered
|
||||
in Charmhub. The relationship between git branches and charmhub tracks are
|
||||
one-to-many, meaning that a change landing in one branch may result in a charm
|
||||
being published into multiple tracks. This is useful when the tracks provide
|
||||
logically different targets, while the branch serves the same functionality.
|
||||
For example, the latest master branch of development will logically point to
|
||||
the latest OpenStack release as well as the latest/edge release.
|
||||
|
||||
Additionally, the charms in each of the git branches and tracks are intended to
|
||||
support the targeted release N and the previous release N-1 for upgrade
|
||||
purposes.
|
||||
|
||||
OpenStack Charms
|
||||
----------------
|
||||
|
||||
For those charms specifically delivering OpenStack services a new git branch
|
||||
will be created for each OpenStack release the charm supports. This branch will
|
||||
be named in the form of ``stable/<openstack-release>`` for all stable versions
|
||||
of OpenStack. Branches will only be created back to the Queens release of
|
||||
OpenStack. Each of these branches will be created from the tip of the current
|
||||
stable charms release (stable/21.10) as a base. These branches will differ from
|
||||
each other regarding the primary version of software that they are targeting as
|
||||
well as the default configuration values for the track they are deployed from.
|
||||
|
||||
+-----------------+-------------------+
|
||||
| Git Branch | Charmhub Track(s) |
|
||||
+=================+===================+
|
||||
| stable/queens | train |
|
||||
| stable/rocky | |
|
||||
| stable/stein | |
|
||||
| stable/train | |
|
||||
+-----------------+-------------------+
|
||||
| stable/ussuri | ussuri |
|
||||
+-----------------+-------------------+
|
||||
| stable/victoria | victoria |
|
||||
+-----------------+-------------------+
|
||||
| stable/wallaby | wallaby |
|
||||
+-----------------+-------------------+
|
||||
| stable/xena | xena |
|
||||
+-----------------+-------------------+
|
||||
| stable/yoga | yoga |
|
||||
+-----------------+-------------------+
|
||||
| master | zed, latest/edge |
|
||||
+-----------------+-------------------+
|
||||
|
||||
Ceph Charms
|
||||
-----------
|
||||
|
||||
Currently, Ceph updates are delivered through the Ubuntu Cloud Archive which
|
||||
ties the ceph charms to OpenStack versions, causing some challenges in defining
|
||||
tracks per Ceph release. In scenarios where services are co-located (e.g.
|
||||
nova-compute and ceph-osd), updating the source repository for the ceph-osd
|
||||
charm will have unintended consequences on the nova-compute services and their
|
||||
versions. Rather than introduce complex pinning or a new package archive, the
|
||||
charms used to deliver Ceph will track the OpenStack release names in addition
|
||||
to the Ceph release names, up to the Octopus release. This is expected to make
|
||||
the migration easier for users.
|
||||
|
||||
The development git branches will be created corresponding to the appropriate
|
||||
Ceph version where the product was delivered. In order to make it easier for
|
||||
users to migrate, Ceph charms may have a single branch delivered to multiple
|
||||
Charmhub tracks.
|
||||
|
||||
+-----------------+-------------------------+
|
||||
| Git Branch | Charmhub Track(s) |
|
||||
+=================+=========================+
|
||||
| stable/luminous | luminous, queens, rocky |
|
||||
+-----------------+-------------------------+
|
||||
| stable/mimic | mimic, stein |
|
||||
+-----------------+-------------------------+
|
||||
| stable/nautilus | nautilus, train |
|
||||
+-----------------+-------------------------+
|
||||
| stable/octopus | octopus |
|
||||
+-----------------+-------------------------+
|
||||
| stable/pacific | pacific |
|
||||
+-----------------+-------------------------+
|
||||
| master | quincy, latest/edge |
|
||||
+-----------------+-------------------------+
|
||||
|
||||
On the newer branches, a mapping can be made to safely convert a Ceph release
|
||||
name into a cloud-archive pocket in a way that doesn’t unintentionally upgrade
|
||||
either one, with the assumption that a valid mapping between OpenStack and Ceph
|
||||
versions is clearly documented. What that mapping should look like:
|
||||
|
||||
+-------------------+---------------------------------------------+
|
||||
| Ceph Release | OpenStack Release |
|
||||
+===================+=============================================+
|
||||
| Luminous | Queens |
|
||||
+-------------------+---------------------------------------------+
|
||||
| Mimic | Stein |
|
||||
+-------------------+---------------------------------------------+
|
||||
| Nautilus | Train |
|
||||
+-------------------+---------------------------------------------+
|
||||
| Octopus | Ussuri |
|
||||
+-------------------+---------------------------------------------+
|
||||
| Pacific | Wallaby (mid-cycle Openstack, more support) |
|
||||
+-------------------+---------------------------------------------+
|
||||
| Unstable / Quincy | Yoga |
|
||||
+-------------------+---------------------------------------------+
|
||||
|
||||
The above works because we can include distro (bionic-queens) with Rocky
|
||||
safely, and we can include Pacific’s focal-wallaby with Xena safely, as the
|
||||
Xena packages have higher versions.
|
||||
|
||||
The Ceph charms include the following charms:
|
||||
|
||||
* ceph-fs
|
||||
* ceph-iscsi
|
||||
* ceph-mon
|
||||
* ceph-osd
|
||||
* ceph-proxy
|
||||
* ceph-radosgw
|
||||
* ceph-rbd-mirror
|
||||
* ceph-dashboard
|
||||
|
||||
Provider-specific Subordinate Charms
|
||||
------------------------------------
|
||||
|
||||
Some services such as Cinder and Neutron allow for provider specific
|
||||
subordinate charms to be used in order to allow for a specific SDN, storage
|
||||
plugin, etc. These provider-specific subordinate charms are considered
|
||||
supporting charms rather than OpenStack specific charms, however they are often
|
||||
enabling specific functionality for a specific storage backend. As such, they
|
||||
will follow the OpenStack Charms track schema.
|
||||
|
||||
These charms will include the following subordinate charms, and as of this
|
||||
writing include:
|
||||
|
||||
* cinder-ceph
|
||||
* cinder-lvm
|
||||
* cinder-netapp
|
||||
* cinder-purestorage
|
||||
* neutron-openvswitch
|
||||
* neutron-api-plugin-arista
|
||||
* neutron-api-plugin-ovn
|
||||
* keystone-saml-mellon
|
||||
|
||||
OVN Charms
|
||||
----------
|
||||
|
||||
OVN is a networking SDN which is used as the primary SDN for Charmed OpenStack
|
||||
deployments. OVN has been provided through the Ubuntu Cloud Archive as well as
|
||||
the Ubuntu archives. The OVN charms are a bit of a mix when it comes to
|
||||
providing source versions. Standalone charms such as OVN Dedicated Chassis and
|
||||
OVN Central have source options which allow for configuring the archive to use
|
||||
for package installation. As a subordinate charm, OVN Chassis will adopt the
|
||||
version that is installed alongside the principal charm.
|
||||
|
||||
As OVN is a general SDN and not implemented specifically for OpenStack, the
|
||||
tracks in charmhub should closely follow the versions of the software delivered
|
||||
rather than the OpenStack release. This may be a bit confusing at first for
|
||||
users migrating, but this should be addressed with clear documentation as well
|
||||
as tooling to help the end-users select the appropriate track to upgrade their
|
||||
charms to. Additionally, tracks will be put in place labelled
|
||||
openstack-{release-name} to ease the migration burden.
|
||||
|
||||
OVN charms will have the following sets of branches and tracks:
|
||||
|
||||
+--------------+----------------------------+
|
||||
| Branch | Track(s) |
|
||||
+==============+============================+
|
||||
| stable/20.03 | 20.03, ussuri, victoria |
|
||||
+--------------+----------------------------+
|
||||
| stable/20.12 | 20.12, wallaby |
|
||||
+--------------+----------------------------+
|
||||
| stable/21.09 | 21.09, xena |
|
||||
+--------------+----------------------------+
|
||||
| stable/22.03 | 22.03 |
|
||||
+--------------+----------------------------+
|
||||
| master | latest/edge |
|
||||
+--------------+----------------------------+
|
||||
|
||||
Supporting Charms
|
||||
-----------------
|
||||
|
||||
In the OpenStack ecosystem, there are other core services which are required to
|
||||
produce an OpenStack cloud. These services include messaging, database, and
|
||||
certificate management services. While they are critical to the functionality
|
||||
of an OpenStack cloud, they are not tied to specific releases of OpenStack and
|
||||
these charms should result in tracks which are appropriate for their specific
|
||||
behavior.
|
||||
|
||||
These charms consist of the following services, and will result in tracks that
|
||||
are based on the versions of software provided. These services are generally
|
||||
delivered from the Ubuntu archives (not the Ubuntu Cloud Archive) and will
|
||||
track the versions of their versions in Ubuntu.
|
||||
|
||||
+----------------------+---------------+-------------------------+
|
||||
| Charm | Branch | Track(s) |
|
||||
+======================+===============+=========================+
|
||||
| hacluster | stable/bionic | 1.1.x |
|
||||
+----------------------+---------------+-------------------------+
|
||||
| hacluster | stable/focal | 2.0.3, latest/stable |
|
||||
+----------------------+---------------+-------------------------+
|
||||
| hacluster | master | 2.0.5, latest/edge |
|
||||
+----------------------+---------------+-------------------------+
|
||||
| pacemaker-remote | stable/bionic | 1.1.x |
|
||||
+----------------------+---------------+-------------------------+
|
||||
| pacemaker-remote | stable/focal | 2.0.3, latest/stable |
|
||||
+----------------------+---------------+-------------------------+
|
||||
| pacemaker-remote | master | 2.0.5, latest/edge |
|
||||
+----------------------+---------------+-------------------------+
|
||||
| rabbitmq-server | stable/bionic | 3.6 |
|
||||
+----------------------+---------------+-------------------------+
|
||||
| rabbitmq-server | stable/focal | 3.8, latest/stable |
|
||||
+----------------------+---------------+-------------------------+
|
||||
| rabbitmq-server | master | 3.9, latest/edge |
|
||||
+----------------------+---------------+-------------------------+
|
||||
| vault | stable/1.5 | 1.5 |
|
||||
+----------------------+---------------+-------------------------+
|
||||
| vault | stable/1.6 | 1.6 |
|
||||
+----------------------+---------------+-------------------------+
|
||||
| vault | stable/1.7 | 1.7 |
|
||||
+----------------------+---------------+-------------------------+
|
||||
| vault | master | latest/edge |
|
||||
+----------------------+---------------+-------------------------+
|
||||
| percona-cluster | stable/bionic | 5.7, latest/stable |
|
||||
+----------------------+---------------+-------------------------+
|
||||
| percona-cluster | master | latest/edge |
|
||||
+----------------------+---------------+-------------------------+
|
||||
| mysql-innodb-cluster | stable/jammy | 8.0, latest/stable |
|
||||
+----------------------+---------------+-------------------------+
|
||||
| mysql-innodb-cluster | master | latest/edge |
|
||||
+----------------------+---------------+-------------------------+
|
||||
|
||||
Trilio Charms
|
||||
-------------
|
||||
|
||||
Trilio Charms will also need to be migrated to the charmhub delivery mechanism.
|
||||
While implemented for OpenStack, the Trilio software is versioned separately
|
||||
from the OpenStack releases and should use Trilio specific tracks.
|
||||
|
||||
+-----------------------+------------+----------------------+
|
||||
| trilio-data-mover | stable/4.0 | 4.0 |
|
||||
+=======================+============+======================+
|
||||
| trilio-data-mover | stable/4.1 | 4.1, latest/stable |
|
||||
+-----------------------+------------+----------------------+
|
||||
| trilio-data-mover | master | 4.2 (?), latest/edge |
|
||||
+-----------------------+------------+----------------------+
|
||||
| trilio-dm-api | stable/4.0 | 4.0 |
|
||||
+-----------------------+------------+----------------------+
|
||||
| trilio-dm-api | stable/4.1 | 4.1, latest/stable |
|
||||
+-----------------------+------------+----------------------+
|
||||
| trilio-dm-api | master | 4.2 (?), latest/edge |
|
||||
+-----------------------+------------+----------------------+
|
||||
| trilio-horizon-plugin | stable/4.0 | 4.0 |
|
||||
+-----------------------+------------+----------------------+
|
||||
| trilio-horizon-plugin | stable/4.1 | 4.1, latest/stable |
|
||||
+-----------------------+------------+----------------------+
|
||||
| trilio-horizon-plugin | master | 4.2 (?), latest/edge |
|
||||
+-----------------------+------------+----------------------+
|
||||
| trilio-wlm | stable/4.0 | 4.0 |
|
||||
+-----------------------+------------+----------------------+
|
||||
| trilio-wlm | stable/4.1 | 4.1, latest/stable |
|
||||
+-----------------------+------------+----------------------+
|
||||
| trilio-wlm | master | 4.2 (?), latest/edge |
|
||||
+-----------------------+------------+----------------------+
|
||||
|
||||
|
||||
Installation Sources
|
||||
--------------------
|
||||
|
||||
Most charms in the OpenStack charm collection provide a config option that
|
||||
allows the user to set the archive or repository that debian packages/snaps are
|
||||
installed from. This is generally provided via either the ``openstack-origin``
|
||||
or ``source`` charm config option, which defaults to install using the local
|
||||
installations default distribution repositories.
|
||||
|
||||
In order to ensure that the tracks are installing the appropriate versions of
|
||||
packages, the default value for this config option will be set to the
|
||||
appropriate installation source for the track. If a track spans multiple distro
|
||||
releases (e.g. the cloud-archive at the LTS release crossover), the charm will
|
||||
need to be able to determine whether this should be sourced from the
|
||||
cloud-archive or the distribution, whichever is appropriate.
|
||||
|
||||
Primarily, this will affect the tracks that use the Ussuri Ubuntu Cloud Archive
|
||||
and the Yoga Ubuntu Cloud Archive as an installation source.
|
||||
|
||||
Latest Track
|
||||
------------
|
||||
|
||||
The ‘latest’ track in charmhub is its own track, and like other tracks - charms
|
||||
can be pushed to the track and the various risk levels within the track. While
|
||||
it is a full blown track, to end users it is a means to get the "latest"
|
||||
version of a piece of software. However, the risk level must be taken into
|
||||
consideration for which version should be installed.
|
||||
|
||||
The latest track will be used into two ways:
|
||||
|
||||
* The ``latest/stable`` track will be used to park the stable 21.10 charms
|
||||
release until (at least) the 22.10 release.
|
||||
* At 22.10, the ``latest/stable`` track will follow the current stable release,
|
||||
and for 22.10 this will be the ``zed`` track.
|
||||
|
||||
The reasoning is that the 21.10 charms' metadata advertise focal support,
|
||||
against ``all`` architecturees and so it difficult to replace until a jammy,
|
||||
and greater, charm can be released to the channel. However, the zed charms will
|
||||
only support jammy and kinetic, and so they can be released alongside the
|
||||
existing 21.10 charms. Then existing 21.10 charms won't upgrade as the new
|
||||
charms will not support focal. Therefore, it is safe to re-use the
|
||||
``latest/stable`` track at that point.
|
||||
|
||||
Risks
|
||||
-----
|
||||
|
||||
The purpose of each risk level for each track is as follows:
|
||||
|
||||
Edge
|
||||
~~~~
|
||||
|
||||
For each charm, the latest/edge channel will always map the current master
|
||||
development branch.
|
||||
|
||||
Currently, for stable branches, the edge track will not be used, as the
|
||||
Launchpad builders will push directly to the stable track. This is in keeping
|
||||
with the existing policy of requiring 2 x +2 reviews on gerrit for stable
|
||||
branches. At some future point, automation/policy will be introduced to enable
|
||||
pushing to edge to start with and then having testing/policy to promote to more
|
||||
stable risks.
|
||||
|
||||
Beta
|
||||
~~~~
|
||||
|
||||
The beta risk level will be used for milestone releases during the charm
|
||||
development cycle.
|
||||
|
||||
Candidate
|
||||
~~~~~~~~~
|
||||
|
||||
The ``<track>/candidate`` channel will be used to track the next software
|
||||
release as it enters the final weeks of development and stabilizes in
|
||||
preparation for a release. Note that this is on the next stable release track.
|
||||
|
||||
Stable
|
||||
~~~~~~
|
||||
|
||||
The stable track will track the stable, tested, released version of the charm.
|
||||
|
||||
Technology Preview Charms
|
||||
-------------------------
|
||||
|
||||
Charms are initially released in the "Technology Preview" state. Charms which
|
||||
are in the technology preview state should not be promoted into the stable
|
||||
channel until it is determined it is stable for the corresponding payload
|
||||
release. Once it has graduated, all releases which have qualified as graduated
|
||||
from technology preview will then be promoted to the stable channel. It is
|
||||
possible that not all tracks of a charm will have a stable risk level. Charms
|
||||
which are still in technology preview will only promote those charms to the
|
||||
beta channel until it is determined that the charm has reached maturity, at
|
||||
which point it can be promoted to the candidate and/or stable channels as
|
||||
appropriate.
|
||||
|
||||
For example, a charm such as ovn-chassis may be delivered as technology preview
|
||||
in the Stein release track but may not reach maturity until the Train release
|
||||
track. The Train release track of the charm will be promoted to the stable
|
||||
channel but the Stein release track will only have the charm in the beta
|
||||
channel.
|
||||
|
||||
Special consideration is needed for those charms considered Technology Preview
|
||||
at the time of this transition. Technology Preview charms are not promulgated
|
||||
in the charm store and are available under the ``openstack-charmers``
|
||||
namespace. Charmhub does not have namespaces in the same way and these charms
|
||||
exist but are prefixed with the ‘openstack-charmers’ name, e.g.
|
||||
openstack-charmers-ironic-api. These charms will be created in charmhub and
|
||||
promoted to the beta channel.
|
||||
|
||||
Continuous Integration
|
||||
----------------------
|
||||
|
||||
Charmhub will deliver charms that are built for specific architectures.
|
||||
OpenStack charms to date, are built using python modules on amd64 architectures
|
||||
and distributed as such. This is generally acceptable as they are primarily
|
||||
source charms which have deliveries, but can pose some interesting challenges
|
||||
for non-amd64 architectures with native extensions.
|
||||
|
||||
The OpenStack CI system is currently composed of a Zuul-CI system which is used
|
||||
to trigger a variety of pep8 (pycodestyle), unit and functional tests for each
|
||||
patch proposed to a charm. Post-merge hooks are registered which trigger a
|
||||
Jenkins task to publish the charm to the legacy charm store.
|
||||
|
||||
Publishing Charms
|
||||
-----------------
|
||||
|
||||
For newer charms, delivered through charmhub, they are expected to have
|
||||
platform specific charms so that native extensions or tooling required by the
|
||||
charm can be built for the appropriate target architecture. Launchpad now
|
||||
offers charm recipes, which can be used to build and publish charms in a
|
||||
similar manner to snap recipes. Changes merged into a repository will trigger a
|
||||
build of the charm on all supported architectures and publish the resulting
|
||||
charm to Charmhub. Leveraging this service removes a step from the OpenStack
|
||||
Charmers maintained CI system for publishing charms to the charm store and
|
||||
results in completely eliminating the need for jenkins in the CI
|
||||
infrastructure.
|
||||
|
||||
The Launchpad charm recipes require that the git trees are known and stored in
|
||||
Launchpad itself. In order to continue to use the upstream OpenStack gerrit
|
||||
review system, which is standard for OpenStack services and has been standard
|
||||
for the charms for years, each charm project in Launchpad will be configured to
|
||||
mirror the source from the upstream opendev git system.
|
||||
|
||||
A charm recipe will be created for each branch of each charm such that upon a
|
||||
patch being merged in the upstream gerrit repository, the Launchpad service
|
||||
will update the mirrored (a.k.a. imported) repository, detect that new changes
|
||||
are present, initiate a charm build and publish these results to the
|
||||
appropriate channel(s) in charmhub.
|
||||
|
||||
Note that charm recipes in Launchpad will only build by default once per hour.
|
||||
While there is normally a slight delay in publishing charms to the charm store,
|
||||
there is one publish per change to the charm. In the Launchpad build model,
|
||||
multiple changes can be queued up and included in a single build unless builds
|
||||
are explicitly requested within the hour time window. This is considered
|
||||
acceptable for charm development and publishing purposes.
|
||||
|
||||
Testing Charms
|
||||
--------------
|
||||
|
||||
With the introduction of branches and tracks per OpenStack release, the need to
|
||||
test a multitude of OpenStack releases for each change is no longer required.
|
||||
Instead, targeted tests for the branch will be run. For example, a change
|
||||
proposed to the Keystone charm in the stable/xena branch will run only tests
|
||||
relevant to the Xena release of OpenStack.
|
||||
|
||||
Reducing the releases that are running in the gate allows for the charm to be
|
||||
focused on the specific payload release and need not worry about spurious
|
||||
failures on older releases.
|
||||
|
||||
The branches may also include tests that exercise the N-1 version of the
|
||||
release software, in order to validate that the upgrade of N-1 to N are
|
||||
functioning properly.
|
||||
|
||||
Charmcraft
|
||||
----------
|
||||
|
||||
In order to leverage the charm recipes in Launchpad, all of the charms will
|
||||
need to be built using the charmcraft tool. Charmcraft, however, was designed
|
||||
to build and publish operator framework charms, which excludes the majority of
|
||||
the charms in the OpenStack charms collection.
|
||||
|
||||
Charmcraft has recently grown parity with the snapcraft toolset, which allows a
|
||||
variety of plugins to be used instead of the default charm plugin. The ‘dump’
|
||||
plugin is appropriate to use for classic charms, however it is unsuitable for
|
||||
reactive charms. In the long term, a new plugin should be created for building
|
||||
reactive charms using charmcraft. In the short term, the various steps for
|
||||
producing a charm can be overridden using the ‘override-build’,
|
||||
‘override-stage’, and ‘override-prime’ steps which will use the existing tox
|
||||
infrastructure to build, stage, and prime the reactive charm.
|
||||
|
||||
Documentation
|
||||
-------------
|
||||
|
||||
Documentation for the OpenStack Charms and Ceph Charms are generally available
|
||||
as a solution level, with charm README files serving as the primary source of
|
||||
documentation within the Charm store and the published OpenStack Charm Guide,
|
||||
OpenStack Charms Deployment Guide and Ubuntu Ceph Documentation providing
|
||||
solution level documentation.
|
||||
|
||||
The release notes need to clearly identify the change to use and leverage
|
||||
Charmhub as well as referencing migration documentation. Migration
|
||||
documentation needs to be clearly outlined to make it simple for users to
|
||||
migrate from using the Charm Store to Charmhub.
|
||||
|
||||
Developer documentation should also be provided in the OpenStack Charm Guide to
|
||||
provide details for developers wishing to contribute new features, bug fixes,
|
||||
etc.
|
||||
|
||||
|
||||
Alternatives
|
||||
------------
|
||||
|
||||
There aren't really any good alternatives. When the charmstore to charmhub
|
||||
cut-over is implemented, the existing ``charm`` command will stop working,
|
||||
which means that the entire build and publishing system in Jenkins will simply
|
||||
stop working too. So the only real alternative is to re-work the Jenkins
|
||||
software to use charmcraft and then use that to push to the charm store.
|
||||
|
||||
This means continuing to maintain Jenkins and not take advantage of the
|
||||
Launchpad builders to build architecture aware charms.
|
||||
|
||||
Implementation
|
||||
==============
|
||||
|
||||
Assignee(s)
|
||||
-----------
|
||||
|
||||
Primary assignee:
|
||||
Alex Kavanagh
|
||||
|
||||
Gerrit Topic
|
||||
------------
|
||||
|
||||
N/A
|
||||
|
||||
Work Items
|
||||
----------
|
||||
|
||||
Produce 'charmcraft' recipes for classic and reactive charms
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Launchpad can be used to build charms when branches in git repositories are
|
||||
changed. These builds are controlled by recipes. Part of the work will be to
|
||||
ensure that these recipes work for all of the charms. They will be centrally
|
||||
controlled and 'synced' into charms as part of the development cycle.
|
||||
|
||||
* Write classic recipe
|
||||
* Write reactive charm recipe using charm-tools ``build`` command.
|
||||
* Add recipes to ``release-tools`` repository.
|
||||
|
||||
Produce helper tools/library to manage launchpad projects/recipes
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
In order to manage the charms, recipes and mapping of git repository branches
|
||||
to charmhub tracks/channels, a suite of tools and configuration will be
|
||||
produced to manage the complexity of the number of charms, branches and tracks.
|
||||
|
||||
Essential functionality will be:
|
||||
|
||||
* display gap between config and actual in git repositories and launchpad
|
||||
recipes.
|
||||
* Show desired tracks vs actual tracks for charms (in charmhub) to generate
|
||||
'requests' for new tracks, or for tracks to be deleted.
|
||||
* update existing recipes against the configuration.
|
||||
* Create new recipes as required against the config.
|
||||
|
||||
|
||||
Repositories
|
||||
------------
|
||||
|
||||
Initially, the existing ``release-tools`` repository will be the collecting
|
||||
point for the tools, but it has become a bit of a dumping ground for related
|
||||
tools and needs a major re-organistion. In the fullness of time, these tools
|
||||
may be broken out into their own repository where changes to the config
|
||||
automatically updates the recipes.
|
||||
|
||||
Additionaly, the manage the recipes a separate ``charmhub-lp-tools`` tool will
|
||||
be created to automate recipe creation, updates, deletes and changed, and to
|
||||
authorize uploads to the charmhub.
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
https://github.com/openstack-charmers/release-tools
|
||||
https://github.com/openstack-charmers/charmhub-lp-tools
|
||||
|
||||
Documentation
|
||||
-------------
|
||||
|
||||
Documentation for the tools, configuration schemas and how the system works
|
||||
will be inside the repository in the form of Markdown files. This is to ensure
|
||||
that the documentation 'lives' with the code. Where possible documentations
|
||||
for the schemas (config files) will be in the config files themselves.
|
||||
|
||||
Security
|
||||
--------
|
||||
|
||||
No additional security concerns.
|
||||
|
||||
The user that runs the tool must have a launchpad account in the
|
||||
``openstack-charmers`` team, and a charmhub account in the
|
||||
``openstack-charmers`` team.
|
||||
|
||||
Testing
|
||||
-------
|
||||
|
||||
The possibility to break the charmstore and charmhub is pretty high, so the
|
||||
tools and process will be developed incrementally against 'test' charms and low
|
||||
priority 'real' charms.
|
||||
|
||||
Stage 1
|
||||
~~~~~~~
|
||||
|
||||
Initially copies of the existing charms will be registered into the charmhub
|
||||
(under new names), to test the recipes and ability to build charms. This is to
|
||||
verify that the charm build recipes work for classic and reactive charms.
|
||||
|
||||
Stage 2
|
||||
~~~~~~~
|
||||
|
||||
Selecting two charms (notionally, ``neutron-dynamic-routing`` and
|
||||
``manila-generic``), break the link to the charmstore and ensure that tracks,
|
||||
branches and recipes can be created such that updates to the charms git
|
||||
repositories result in built charms in the correct tracks.
|
||||
|
||||
This will allow the correct changes to the charms to be enumerated and captured
|
||||
in the release-tools repository.
|
||||
|
||||
Dependencies
|
||||
============
|
||||
|
||||
None
|
||||
|
||||
References
|
||||
----------
|
||||
|
||||
* `Charmhub unofficial docs <https://github.com/canonical/charmhub-unofficial-docs>`__
|
||||
* `Snapcraft channels <https://snapcraft.io/docs/channels>`__
|
||||
* `Mirroring repositories from other sites <https://help.launchpad.net/Code/Git#Mirroring_repositories_from_other_sites>`__
|
||||
|
||||
.. targets
|
||||
.. _`Snap store`: https://snapcraft.io/docs/channels
|
Loading…
Reference in New Issue
Block a user