Add multi linux distro support in Airship

This spec adds the ability to plug in Linux distro into Airship services and add OpenSUSE support in addition to the existing Ubuntu support.

Change-Id: If35809a53095ee8a395a77215e5fb9f561c56078
Story: 2003699
This commit is contained in:
James Gu 2018-09-09 22:46:59 -07:00 committed by jamesgu
parent 145307c84b
commit dac336ae66
1 changed files with 269 additions and 0 deletions

View File

@ -0,0 +1,269 @@
..
This work is licensed under a Creative Commons Attribution 3.0 Unported
License.
http://creativecommons.org/licenses/by/3.0/legalcode
.. index::
single: template
single: creating specs
.. note::
Blueprints are written using ReSTructured text.
Add index directives to help others find your spec. E.g.::
.. index::
single: template
single: creating specs
===========================================
Airship Multiple Linux Distribution Support
===========================================
Various Airship services were developed originally around Ubuntu. This spec
will add the ability in Airship to plug in Linux Distro's, refactor the
existing Ubuntu support as the default Linux distro plugin, and add openSUSE
and other Linux distro's as new plugins.
Links
=====
The work to author and implement this spec is tracked in Storyboard:
https://storyboard.openstack.org/#!/story/2003699
Problem description
===================
Airship was originally developed focusing on the Ubuntu environment:
- While having a well defined driver interface, the baremetal provisioner
currently only supports Canonical's MAAS.
- Promenade bootstraps only on a Ubuntu deployer.
- Assumption of Debian packages in various services.
- Builds and references only Ubuntu based container images.
Airship is missing a large user base if only supports Ubuntu.
Impacted components
===================
Most Airship components will be impacted by this spec:
#. Promenade: add the ability to bootstrap on any Linux distro and add new
plugins for openSUSE, CentOS, etc.
#. Pegleg: enhanced to build image on non Debian distros and add openSUSE,
CentOS and other Linux distros to CI gate.
#. Deckhand: enhanced to build image on non Debian distros and add openSUSE,
CentOS and other Linux distros to CI gate.
#. Armada: enhanced to build image on non Debian distro and add openSUSE,
CentOS and other Linux distros to CI gate.
#. Shipyard: enhanced to build image on non Debian distro and add openSUSE,
CentOS and other Linux distros CI gate.
#. Drydock: enhanced to provision bare metal on non Ubuntu Linux distros using
Ironic driver (expect to have a separate spec).
#. Airship-in-a-Bottle: add the ability to deploy Airship-in-a-Bottle on
openSUSE, CentOS, etc.
Proposed change
===============
Pegleg
------
- Add non Ubuntu Linux distros CI gate, including openSUSE, CentOS, etc.
- tools/gate/playbooks/docker-image-build.yaml: support Docker rpm install on
non Debian Linux.
- add gate test case for openSUSE, CentOS.
Deckhand
--------
- Container image(s)
- images/deckhand/Dockerfile: add rpm package support for non Debian Linux
distros
- Verify Deckhand Python source code and scripts are Linux distro agnostic
- Update document for rpm package installation, e.g., getting started guide
- Add Non Debian Linux support in gate playbooks
- tools/gate/playbooks/docker-image-build.yaml
- tools/gate/playbooks/roles/install-postgresql/tasks/install-postgresql.yaml
- tools/gate/playbooks/roles/run-integration-tests/tasks/integration-tests.yaml
- tools/gate/roles/install-postgresql/tasks/install-postgresql.yaml
- tools/gate/roles/run-integration-tests/tasks/integration-tests.yaml
- tools/run_pifpaf.sh
- add gate test case for openSUSE, CentOS, etc.
Shipyard
--------
- Container image(s)
- images/shipyard/Dockerfile: add rpm package for openSUSE, CentOS, etc.
- images/airflow/Dockerfile: add rpm package for openSUSE, CentOS, etc.
- Verify Shipyard Python source code and scripts are Linux distro agnostic.
- Update documentation where references Ubuntu and MAAS as the sole option.
- README.rst
- docs/source/client-user-guide.rst
- docs/source/deployment-guide.rst
- Add non Debian Linux support in gate playbooks
- tools/gate/playbooks/roles/build-images/tasks/airship-shipyard.yaml
- tools/gate/roles/build-images/tasks/airship-shipyard.yaml
- tools/gate/scripts/000-environment-setup.sh
- add test cases in zuul for openSUSE, CentOS, etc.
Armada
------
- Container image(s)
- Dockerfile: add rpm package for non Debian Linux (Docker file location is
inconsistent with other projects).
- Verify Python source code and scripts are Linux distro agnostic.
- Update documentation where references Ubuntu and MAAS as the sole option,
e.g., getting-started.rst.
- Add non Debian Linux support in gate playbooks
- Add rpm package support when ansible_os_family is SUSE or Red Hat
- tools/gate/playbooks/docker-image-build.yaml
- Add test cases in zuul for openSUSE, CentOS, etc.
Promenade
---------
- Container image(s)
- Dockerfile: add rpm package for SUSE (Docker file location is inconsistent
with other projects)
- Verify Python source code and scripts are Linux distro agnostic, e.g.,
- Genesis process assumes Debian-based OS. Changes are required to maintain
this functionality for other distros as well as logic to pick the right
template, e.g., promenade/templates/roles/common/etc/apt/sources.list.d.
- tests/unit/api/test_update_labels.py: label is hard coded to "ubuntubox".
which seems to be just cosmetics
- tests/unit/api/test_validatedesign.py: deb for Docker and socat
- Update documentation where references Ubuntu and MAAS as the sole option and
add list of docker images for other Linux OS than Ubuntu
- getting-started.rst
- developer-onboarding.rst
- examples: HostSystem.yaml, armada-resources.yaml
- Add non Debian Linux support in gate playbooks
- tools/gate/config-templates/site-config.yaml: add rpm install for Docker
and socat based on os family
- tools/setup_gate.sh: add rpm install for Docker based on os family
- tools/zuul/playbooks/docker-image-build.yaml
- tools/cleanup.sh:
- add test cases in zuul for openSUSE, CentOS, etc.
Treasuremap
-----------
- Update documentation to add authoring and deployment instructions for
OpenSUSE, CentOS, etc. Differences are around deb vs rpm packaging, container
images, repos.
- doc/source/authoring_and_deployment.rst
- global/profiles/kubernetes-host.yaml
- global/schemas/drydock/Region/v1.yaml
- global/schemas/promenade/HostSystem/v1.yaml
- global/software/config/versions.yaml
- tools/gate/Jenkinsfile
- global/profiles/kubernetes-host.yaml
- site/airship-seaworthy/networks/common-addresses.yaml (points to ubuntu
ntp server)
- site/airship-seaworthy/profiles/region.yaml (comments references "ubuntu"
user)
- site/airship-seaworthy/secrets/passphrases/ubuntu_crypt_password.yaml (name
hardcoded with "ubuntu" reference)
- site/airship-seaworthy/software/charts/ucp/divingbell/divingbell.yaml (user
name is hardcoded "ubuntu")
- tools/updater.py
- Add CI gate for openSUSE, CentOS, etc.
- tools/gate/Jenkinsfile
Security impact
---------------
Do not expect any material change in security controls and/or policies.
SUSE plans to adopt the Airship AppArmor profile in the Treasuremap project.
Performance impact
------------------
Do not expect performance impact.
Alternatives
------------
None. Extending Linux distro support is critical for Airship to expand its user
base and for its developer community to grow.
Implementation
==============
We propose three milestones to develop the feature in an iterative approach.
Milestone 1: Multi Linux distro support in the bring your own K8s and Ceph use
case. The work in this milestone is to bring Armada, Shipyard, Deckhand and
Pegleg to Linux distro agnostic, and support Ubuntu and openSUSE as the two
available options, and CentOS if there are developers familiar with CentOS
join the effort.
Milestone 2: Add the ability in bootstrapping to plug in the KubeAdm and Ceph
release/packages built for the underlying Linux distros on the existing
Physical hosts. The work is focused on Promenade component.
Milestone 3: Add the ability in Drydock to provision baremetal on Linux distros
in addition to Ubuntu.
Assignee(s):
SUSE is committed to implement this spec, add the openSUSE plugins and gate
tests, and welcomes the community to join the effort.
Dependencies
============
OpenStack Helm
--------------
1. Add the openSUSE base OS option in the OSH tool images, including
cepf-config-helper, libvirt, OpenVSwitch, tempest, vbmc.
2. Add the ability to specify OS choice in loci.sh and support Ubuntu,
openSUSE, CentOS etc.
LOCI
----
1. Add openSUSE base OS option in all OpenStack service images in LOCI.
Airship
-------
1. Bring your own K8s and Ceph storage. Link TBD
2. Add Ironic driver in Drydock. Link TBD
References
==========
Any external references (other than the direct links above)