Browse Source

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
James Gu 7 months ago
parent
commit
dac336ae66
1 changed files with 269 additions and 0 deletions
  1. 269
    0
      specs/approved/multi-linux-distros.rst

+ 269
- 0
specs/approved/multi-linux-distros.rst View File

@@ -0,0 +1,269 @@
1
+..
2
+  This work is licensed under a Creative Commons Attribution 3.0 Unported
3
+  License.
4
+
5
+  http://creativecommons.org/licenses/by/3.0/legalcode
6
+
7
+.. index::
8
+   single: template
9
+   single: creating specs
10
+
11
+.. note::
12
+
13
+  Blueprints are written using ReSTructured text.
14
+
15
+Add index directives to help others find your spec. E.g.::
16
+
17
+  .. index::
18
+     single: template
19
+     single: creating specs
20
+
21
+===========================================
22
+Airship Multiple Linux Distribution Support
23
+===========================================
24
+
25
+Various Airship services were developed originally around Ubuntu. This spec
26
+will add the ability in Airship to plug in Linux Distro's, refactor the
27
+existing Ubuntu support as the default Linux distro plugin, and add openSUSE
28
+and other Linux distro's as new plugins.
29
+
30
+Links
31
+=====
32
+
33
+The work to author and implement this spec is tracked in Storyboard:
34
+https://storyboard.openstack.org/#!/story/2003699
35
+
36
+Problem description
37
+===================
38
+
39
+Airship was originally developed focusing on the Ubuntu environment:
40
+
41
+- While having a well defined driver interface, the baremetal provisioner
42
+  currently only supports Canonical's MAAS.
43
+- Promenade bootstraps only on a Ubuntu deployer.
44
+- Assumption of Debian packages in various services.
45
+- Builds and references only Ubuntu based container images.
46
+
47
+Airship is missing a large user base if only supports Ubuntu.
48
+
49
+Impacted components
50
+===================
51
+
52
+Most Airship components will be impacted by this spec:
53
+
54
+#. Promenade: add the ability to bootstrap on any Linux distro and add new
55
+   plugins for openSUSE, CentOS, etc.
56
+#. Pegleg: enhanced to build image on non Debian distros and add openSUSE,
57
+   CentOS and other Linux distros to CI gate.
58
+#. Deckhand: enhanced to build image on non Debian distros and add openSUSE,
59
+   CentOS and other Linux distros to CI gate.
60
+#. Armada: enhanced to build image on non Debian distro and add openSUSE,
61
+   CentOS and other Linux distros to CI gate.
62
+#. Shipyard: enhanced to build image on non Debian distro and add openSUSE,
63
+   CentOS and other Linux distros CI gate.
64
+#. Drydock: enhanced to provision bare metal on non Ubuntu Linux distros using
65
+   Ironic driver (expect to have a separate spec).
66
+#. Airship-in-a-Bottle: add the ability to deploy Airship-in-a-Bottle on
67
+   openSUSE, CentOS, etc.
68
+
69
+Proposed change
70
+===============
71
+
72
+Pegleg
73
+------
74
+
75
+- Add non Ubuntu Linux distros CI gate, including openSUSE, CentOS, etc.
76
+
77
+  - tools/gate/playbooks/docker-image-build.yaml: support Docker rpm install on
78
+    non Debian Linux.
79
+  - add gate test case for openSUSE, CentOS.
80
+
81
+Deckhand
82
+--------
83
+
84
+- Container image(s)
85
+
86
+  - images/deckhand/Dockerfile: add rpm package support for non Debian Linux
87
+    distros
88
+
89
+- Verify Deckhand Python source code and scripts are Linux distro agnostic
90
+- Update document for rpm package installation, e.g., getting started guide
91
+- Add Non Debian Linux support in gate playbooks
92
+
93
+  - tools/gate/playbooks/docker-image-build.yaml
94
+  - tools/gate/playbooks/roles/install-postgresql/tasks/install-postgresql.yaml
95
+  - tools/gate/playbooks/roles/run-integration-tests/tasks/integration-tests.yaml
96
+  - tools/gate/roles/install-postgresql/tasks/install-postgresql.yaml
97
+  - tools/gate/roles/run-integration-tests/tasks/integration-tests.yaml
98
+  - tools/run_pifpaf.sh
99
+  - add gate test case for openSUSE, CentOS, etc.
100
+
101
+Shipyard
102
+--------
103
+
104
+- Container image(s)
105
+
106
+  - images/shipyard/Dockerfile: add rpm package for openSUSE, CentOS, etc.
107
+  - images/airflow/Dockerfile:  add rpm package for openSUSE, CentOS, etc.
108
+
109
+- Verify Shipyard Python source code and scripts are Linux distro agnostic.
110
+- Update documentation where references Ubuntu and MAAS as the sole option.
111
+
112
+  - README.rst
113
+  - docs/source/client-user-guide.rst
114
+  - docs/source/deployment-guide.rst
115
+
116
+- Add non Debian Linux support in gate playbooks
117
+
118
+  - tools/gate/playbooks/roles/build-images/tasks/airship-shipyard.yaml
119
+  - tools/gate/roles/build-images/tasks/airship-shipyard.yaml
120
+  - tools/gate/scripts/000-environment-setup.sh
121
+  - add test cases in zuul for openSUSE, CentOS, etc.
122
+
123
+Armada
124
+------
125
+
126
+- Container image(s)
127
+
128
+  - Dockerfile: add rpm package for non Debian Linux (Docker file location is
129
+    inconsistent with other projects).
130
+
131
+- Verify Python source code and scripts are Linux distro agnostic.
132
+
133
+- Update documentation where references Ubuntu and MAAS as the sole option,
134
+  e.g., getting-started.rst.
135
+
136
+- Add non Debian Linux support in gate playbooks
137
+
138
+  - Add rpm package support when ansible_os_family is SUSE or Red Hat
139
+  - tools/gate/playbooks/docker-image-build.yaml
140
+  - Add test cases in zuul for openSUSE, CentOS, etc.
141
+
142
+Promenade
143
+---------
144
+
145
+- Container image(s)
146
+
147
+  - Dockerfile: add rpm package for SUSE (Docker file location is inconsistent
148
+    with other projects)
149
+
150
+- Verify Python source code and scripts are Linux distro agnostic, e.g.,
151
+
152
+  - Genesis process assumes Debian-based OS. Changes are required to maintain
153
+    this functionality for other distros as well as logic to pick the right
154
+    template, e.g., promenade/templates/roles/common/etc/apt/sources.list.d.
155
+  - tests/unit/api/test_update_labels.py: label is hard coded to "ubuntubox".
156
+    which seems to be just cosmetics
157
+  - tests/unit/api/test_validatedesign.py: deb for Docker and socat
158
+
159
+- Update documentation where references Ubuntu and MAAS as the sole option and
160
+  add list of docker images for other Linux OS than Ubuntu
161
+
162
+  - getting-started.rst
163
+  - developer-onboarding.rst
164
+  - examples: HostSystem.yaml, armada-resources.yaml
165
+
166
+- Add non Debian Linux support in gate playbooks
167
+
168
+  - tools/gate/config-templates/site-config.yaml: add rpm install for Docker
169
+    and socat based on os family
170
+  - tools/setup_gate.sh: add rpm install for Docker based on os family
171
+  - tools/zuul/playbooks/docker-image-build.yaml
172
+  - tools/cleanup.sh:
173
+  - add test cases in zuul for openSUSE, CentOS, etc.
174
+
175
+Treasuremap
176
+-----------
177
+
178
+- Update documentation to add authoring and deployment instructions for
179
+  OpenSUSE, CentOS, etc. Differences are around deb vs rpm packaging, container
180
+  images, repos.
181
+
182
+  - doc/source/authoring_and_deployment.rst
183
+  - global/profiles/kubernetes-host.yaml
184
+  - global/schemas/drydock/Region/v1.yaml
185
+  - global/schemas/promenade/HostSystem/v1.yaml
186
+  - global/software/config/versions.yaml
187
+  - tools/gate/Jenkinsfile
188
+  - global/profiles/kubernetes-host.yaml
189
+  - site/airship-seaworthy/networks/common-addresses.yaml (points to ubuntu
190
+    ntp server)
191
+  - site/airship-seaworthy/profiles/region.yaml (comments references "ubuntu"
192
+    user)
193
+  - site/airship-seaworthy/secrets/passphrases/ubuntu_crypt_password.yaml (name
194
+    hardcoded with "ubuntu" reference)
195
+  - site/airship-seaworthy/software/charts/ucp/divingbell/divingbell.yaml (user
196
+    name is hardcoded "ubuntu")
197
+  - tools/updater.py
198
+
199
+- Add CI gate for openSUSE, CentOS, etc.
200
+
201
+  - tools/gate/Jenkinsfile
202
+
203
+Security impact
204
+---------------
205
+
206
+Do not expect any material change in security controls and/or policies.
207
+
208
+SUSE plans to adopt the Airship AppArmor profile in the Treasuremap project.
209
+
210
+Performance impact
211
+------------------
212
+
213
+Do not expect performance impact.
214
+
215
+Alternatives
216
+------------
217
+
218
+None. Extending Linux distro support is critical for Airship to expand its user
219
+base and for its developer community to grow.
220
+
221
+Implementation
222
+==============
223
+
224
+We propose three milestones to develop the feature in an iterative approach.
225
+
226
+Milestone 1: Multi Linux distro support in the bring your own K8s and Ceph use
227
+case. The work in this milestone is to bring Armada, Shipyard, Deckhand and
228
+Pegleg to Linux distro agnostic, and support Ubuntu and openSUSE as the two
229
+available options, and CentOS if there are developers familiar with CentOS
230
+join the effort.
231
+
232
+Milestone 2: Add the ability in bootstrapping to plug in the KubeAdm and Ceph
233
+release/packages built for the underlying Linux distros on the existing
234
+Physical hosts. The work is focused on Promenade component.
235
+
236
+Milestone 3: Add the ability in Drydock to provision baremetal on Linux distros
237
+in addition to Ubuntu.
238
+
239
+Assignee(s):
240
+
241
+SUSE is committed to implement this spec, add the openSUSE plugins and gate
242
+tests, and welcomes the community to join the effort.
243
+
244
+Dependencies
245
+============
246
+
247
+OpenStack Helm
248
+--------------
249
+
250
+1. Add the openSUSE base OS option in the OSH tool images, including
251
+   cepf-config-helper, libvirt, OpenVSwitch, tempest, vbmc.
252
+2. Add the ability to specify OS choice in loci.sh and support Ubuntu,
253
+   openSUSE, CentOS etc.
254
+
255
+LOCI
256
+----
257
+
258
+1. Add openSUSE base OS option in all OpenStack service images in LOCI.
259
+
260
+Airship
261
+-------
262
+
263
+1. Bring your own K8s and Ceph storage. Link TBD
264
+2. Add Ironic driver in Drydock. Link TBD
265
+
266
+References
267
+==========
268
+
269
+Any external references (other than the direct links above)

Loading…
Cancel
Save