Add a spec for top-level project hosting

Change-Id: Ic92726dc341af5802ad803d239bd547ef5068043
This commit is contained in:
James E. Blair 2017-11-29 15:38:17 -08:00
parent 59799fbdfc
commit b3df3dc134
2 changed files with 240 additions and 0 deletions

View File

@ -42,6 +42,7 @@ permits.
specs/storyboard_worklists_boards
specs/translation_check_site
specs/wiki_modernization
specs/project-hosting
Help Wanted
===========

239
specs/project-hosting.rst Normal file
View File

@ -0,0 +1,239 @@
::
Copyright 2017 Red Hat, Inc.
This work is licensed under a Creative Commons Attribution 3.0
Unported License.
http://creativecommons.org/licenses/by/3.0/legalcode
=========================
Top-Level Project Hosting
=========================
https://storyboard.openstack.org/#!/story/2001382
The OpenStack Foundation has embarked on an effort to foster new
"`open infrastructure`_" projects. To facilitate that, provide
infrastructure support for projects using non "OpenStack" branding.
.. _open infrastructure:
http://lists.openstack.org/pipermail/foundation/2017-November/002532.html
Problem Description
===================
All of our existing project hosting services are OpenStack branded.
We'd like to support other projects, but gain an economy of scale from
our existing services where possible.
Each of the services we operate can be evaluated on two axes: how
desirable it is to operate that service under an individual project's
brand, and how technically feasible it is to do so. For example, it
is both very desirable and feasible to operate a web site for a
project under its own brand. It is somewhat desirable and feasible to
do the same for mailing lists. It may be desirable, but under our
current constraints, less feasible to do the same for Gerrit. And due
to the cross-project integration nature of our CI system, Zuul, it may
be feasible but less desirable to operate the CI system under more
than one brand.
This specification focuses only on those services where using an
individual project's brand is both desirable and feasible.
To address those services for which this is either not desirable or
feasible, we are discussing moving those services to a neutral brand.
This specification does not address that, other than it is intended to
be compatible with it should we do so in the future.
Proposed Change
===============
This describes how we can support multiple top-level projects for
several (but not all) of our existing services. We may want to extend
this to cover other services later, but for now, the focus is on the
most critical for new projects.
DNS Servers
-----------
To facilitate the hosting of new domains, we will set up at least two
authoritative DNS servers, ns1.openstack.org and ns2.openstack.org,
and host them in different cloud regions.
We will deploy bind and/or NSD on these servers (implementors choice).
They will simply serve zone files directly from git repos which will
undergo code review in the normal manner.
Eventually we will probably want to change the domain names of these
dns servers if we rebrand the project infrastructure service itself to
something other than "OpenStack".
Note, this describes a service for new domains, and does not alter the
way we manage the openstack.org zone.
Mailing Lists
-------------
Mailman supports multi-domain hosting, as long as the mailing list
names are unique across domains. In order to allow for such
conflicts, as well as per-domain themes, we will need to use multiple
installations of Mailman.
To accomplish this, alter the mailman puppet module to create a new
local mailman installation for every domain we host. Then allow
creation of lists within that domain as usual.
The exim config will need to be updated to support multiple domains as
well.
Git Servers
-----------
Alter jeepyb and the projects.yaml file it reads to output a cgitrc
file for each domain. The apache virtualhosts on the git farm can set
the CGIT_CONFIG env variable as appropriate, so that each domain
displays only the relevant projects.
Some new top-level projects may have code in OpenStack's Gerrit
already. To facilitate these cases, create symlinks on the git
servers so that every project can be cloned without it's prefix. We
could just do this as necessary for specific projects, however, this
is a likely step in the process of flattening the OpenStack git
namespace anyway, so we may as well solve the problem once globally.
This should work because we do, as a matter of policy, require unique
project names regardless of the prefix.
Websites
--------
Projects can add new virtualhosts to files.openstack.org to serve
static content from AFS. This will let them take advantage of the
existing docs publishing jobs (or write their own jobs that use static
generators) to serve websites in the same way. Each new project site
would get its own AFS volume.
Alternatives
------------
One alternative would be to ignore the issue and let other people
bring up their own infrastructure for other top-level projects. But
we'd rather collaborate with them on all of the projects that the
OpenStack Foundation supports, to increase the diversity of
contributions all around. Many services will benefit from an economy
of scale as well.
With collaboration, an alternative implementation would be to simply
spin up new severs for every project. This ignores the economy of
scale we can obtain in some cases. Our infrastructure is still not
*completely* automated and in many cases, that may increase the amount
of work compared to colocation.
Another alternative applicable to some services would be to alter our
infrastructure to be more automated. Particularly with the use of
containers, this could achivee a good balance between economies of
scale and service complexity. However, that will require more design
before implementation, and there are projects that are ready to begin
using these services now. Instead, we should implement what we can
with our current infrastructure quickly, with an eye to moving to
automated container-based systems in the future.
An alternative to running our own authoritative DNS servers would be
to use an existing cloud service. However, a strongly desired feature
of the proposed system is to have the option of managing the contents
of DNS in git, in standard zone files. We may, in the future, write
tooling to translate zone files to API calls, but the proposal is the
simplest method to start.
Implementation
==============
Assignee(s)
-----------
* corvus
Gerrit Topic
------------
Use Gerrit topic "project-hosting" for all patches related to this spec.
.. code-block:: bash
git-review -t project-hosting
Work Items
----------
* Create DNS puppet modules
* Create DNS servers
* Update Mailman puppet modules to support multiple sites
* Update existing Mailman config to use new site paradigm
* Symlink git repos on git farm
* Add support to jeepyb for multiple sites
* Add support to git farm puppet modules for multiple cgit sites
* Update projects.yaml to specify jeepyb site
Work items or tasks -- break the feature up into the things that need to be
done to implement it. Those parts might end up being done by different people,
but we're mostly trying to understand the timeline for implementation.
Repositories
------------
We may need new repositories for DNS related puppet modules.
When new top-level projects are added, we will likely need new git
repositories to host DNS and web content for each.
Servers
-------
We will add new authoritative DNS servers. Otherwise, all services
will use existing servers.
DNS Entries
-----------
We will need to manually add the entries for the new ADNS servers.
Beyond that, new projects should be able to use these servers for
their own DNS hosting.
Documentation
-------------
System-config documentation for these services should be updated to
match. Eventually we may want to add an overview page for services
offered to top-level projects, but that is not necessary as a first
step.
Security
--------
This should not alter the security posture of any of the affected
services.
A new service, ADNS servers, is proposed. The software will be
supplied by the OS with automatic security updates. We will need to
operate that service according to current best practices, for
instance, disabling or restricting AXFR to avoid being used in a
reflection attack.
Testing
-------
Puppet modules will be tested on throwaway dev servers before use.
Dependencies
============
No dependencies.