[Community goal] Update the contributor guide

Change-Id: Ia7b7ad90a546bcf7ad7998449efbaec42bffc1d5
Story: #2007236
Task: #39814
This commit is contained in:
Radosław Piliszek 2020-05-20 17:55:57 +02:00
parent d15bf7d62f
commit cc4ece8b8a
6 changed files with 288 additions and 183 deletions

19
CONTRIBUTING.rst Normal file
View File

@ -0,0 +1,19 @@
The source repository for this project can be found at:
https://opendev.org/openstack/kolla-ansible
Pull requests submitted through GitHub are **not** monitored.
To start contributing to OpenStack, follow the steps in the contribution guide
to set up and use Gerrit:
https://docs.openstack.org/contributors/code-and-documentation/quick-start.html
Bugs should be filed on Launchpad:
https://bugs.launchpad.net/kolla-ansible
For more specific information about contributing to this repository, see the
Kolla Ansible contributor guide:
https://docs.openstack.org/kolla-ansible/latest/contributor/contributing.html

View File

@ -1,182 +0,0 @@
.. _CONTRIBUTING:
=================
How To Contribute
=================
Basics
======
#. Our source code is hosted on `OpenDev Kolla-Ansible Git
<https://opendev.org/openstack/kolla-ansible/>`_. Bugs should be
filed on `launchpad <https://bugs.launchpad.net/kolla-ansible>`_.
#. Please follow OpenStack `Gerrit Workflow
<https://docs.openstack.org/infra/manual/developers.html#development-workflow>`__
to contribute to Kolla-ansible.
#. Note the branch you're proposing changes to. ``master`` is the current focus
of development. Kolla project has a strict policy of only allowing backports
in ``stable/branch``, unless when not applicable. A bug in a
``stable/branch`` will first have to be fixed in ``master``.
#. Please file a `blueprint of kolla-ansible <https://blueprints.launchpad.net/kolla-ansible>`__
for any significant code change and a bug for any significant bug fix,
or add a ``TrivialFix`` tag to commit message for simple changes.
See how to reference a bug or a blueprint in the `commit message
<https://wiki.openstack.org/wiki/GitCommitMessages>`_.
#. TrivialFix tags or bugs are not required for documentation changes.
#. We use a `whiteboard <https://etherpad.openstack.org/p/KollaWhiteBoard>`__
to keep track of CI gate status, release status, stable backports, planning
and feature development status.
Development Environment
=======================
Please follow our :doc:`/user/quickstart` to deploy your environment and test
your changes.
Please use the existing sandbox repository, available at `sandbox
<https://opendev.org/openstack-dev/sandbox>`_, for learning, understanding
and testing the `Gerrit Workflow
<https://docs.openstack.org/infra/manual/developers.html#development-workflow>`_.
Adding a release note
=====================
Kolla Ansible (just like Kolla) uses the following release notes sections:
- ``features`` --- for new features or functionality; these should ideally
refer to the blueprint being implemented;
- ``fixes`` --- for fixes closing bugs; these must refer to the bug being
closed;
- ``upgrade`` --- for notes relevant when upgrading from previous version;
these should ideally be added only between major versions; required when
the proposed change affects behaviour in a non-backwards compatible way or
generally changes something impactful;
- ``deprecations`` --- to track deprecated features; relevant changes may
consist of only the commit message and the release note;
- ``prelude`` --- filled in by the PTL before each release or RC.
Other release note types may be applied per common sense.
Each change should include a release note unless being a ``TrivialFix``
change or affecting only docs or CI. Such changes should `not` include
a release note to avoid confusion.
Remember release notes are mostly for end users which, in case of Kolla,
are OpenStack administrators/operators.
In case of doubt, the core team will let you know what is required.
To add a release note, run the following command:
.. code-block:: console
tox -e venv -- reno new <summary-line-with-dashes>
All release notes can be inspected by browsing ``releasenotes/notes``
directory.
To generate release notes in HTML format in ``releasenotes/build``, run:
.. code-block:: console
tox -e releasenotes
Note this requires the release note to be tracked by ``git`` so you
have to at least add it to the ``git``'s staging area.
Adding a new service
====================
Kolla aims to both containerise and deploy all services within the OpenStack
ecosystem. This is a constantly moving target as the ecosystem grows, so these
guidelines aim to help make adding a new service to Kolla a smooth experience.
When adding a role for a new service in Ansible, there are couple of patterns
that Kolla uses throughout that should be followed.
* The sample inventories
Entries should be added for the service in each of
``ansible/inventory/multinode`` and ``ansible/inventory/all-in-one``.
* The playbook
The main playbook that ties all roles together is in ``ansible/site.yml``,
this should be updated with appropriate roles, tags, and conditions. Ensure
also that supporting hosts such as haproxy are updated when necessary.
* The common role
A ``common`` role exists which sets up logging, ``kolla-toolbox`` and other
supporting components. This should be included in all services within
``meta/main.yml`` of your role.
* Common tasks
All services should include the following tasks:
- ``deploy.yml`` : Used to bootstrap, configure and deploy containers
for the service.
- ``reconfigure.yml`` : Used to push new configuration files to the host
and restart the service.
- ``pull.yml`` : Used to pre fetch the image into the Docker image cache
on hosts, to speed up initial deploys.
- ``upgrade.yml`` : Used for upgrading the service in a rolling fashion. May
include service specific setup and steps as not all services can be
upgraded in the same way.
* Logrotation
- For OpenStack services there should be a ``cron-logrotate-PROJECT.conf.j2``
template file in ``ansible/roles/common/templates`` with the following
content:
.. path ansible/roles/common/templates/cron-logrotate-PROJECT.conf.j2
.. code-block:: console
"/var/log/kolla/PROJECT/*.log"
{
}
- For OpenStack services there should be an entry in the ``services`` list
in the ``cron.json.j2`` template file in ``ansible/roles/common/templates``.
* Log delivery
- For OpenStack services the service should add a new ``rewriterule`` in the
``match`` element in the ``01-rewrite.conf.j2`` template file in
``ansible/roles/common/templates/conf/filter`` to deliver log messages to
Elasticsearch.
* Documentation
- For OpenStack services there should be an entry in the list
``OpenStack services`` in the ``README.rst`` file.
- For infrastructure services there should be an entry in the list
``Infrastructure components`` in the ``README.rst`` file.
* Syntax
- All YAML data files should start with three dashes (``---``).
Other than the above, most service roles abide by the following pattern:
- ``Register``: Involves registering the service with Keystone, creating
endpoints, roles, users, etc.
- ``Config``: Distributes the config files to the nodes to be pulled into
the container on startup.
- ``Bootstrap``: Creating the database (but not tables), database user for
the service, permissions, etc.
- ``Bootstrap Service``: Starts a one shot container on the host to create
the database tables, and other initial run time config.
Ansible handlers are used to create or restart containers when necessary.

View File

@ -0,0 +1,91 @@
====================
Adding a new service
====================
When adding a role for a new service in Ansible, there are couple of patterns
which Kolla uses throughout and which should be followed.
* The sample inventories
Entries should be added for the service in each of
``ansible/inventory/multinode`` and ``ansible/inventory/all-in-one``.
* The playbook
The main playbook that ties all roles together is in ``ansible/site.yml``,
this should be updated with appropriate roles, tags, and conditions. Ensure
also that supporting hosts such as haproxy are updated when necessary.
* The common role
A ``common`` role exists which sets up logging, ``kolla-toolbox`` and other
supporting components. This should be included in all services within
``meta/main.yml`` of your role.
* Common tasks
All services should include the following tasks:
- ``deploy.yml`` : Used to bootstrap, configure and deploy containers
for the service.
- ``reconfigure.yml`` : Used to push new configuration files to the host
and restart the service.
- ``pull.yml`` : Used to pre fetch the image into the Docker image cache
on hosts, to speed up initial deploys.
- ``upgrade.yml`` : Used for upgrading the service in a rolling fashion. May
include service specific setup and steps as not all services can be
upgraded in the same way.
* Log rotation
- For OpenStack services there should be a ``cron-logrotate-PROJECT.conf.j2``
template file in ``ansible/roles/common/templates`` with the following
content:
.. path ansible/roles/common/templates/cron-logrotate-PROJECT.conf.j2
.. code-block:: console
"/var/log/kolla/PROJECT/*.log"
{
}
- For OpenStack services there should be an entry in the ``services`` list
in the ``cron.json.j2`` template file in ``ansible/roles/common/templates``.
* Log delivery
- For OpenStack services the service should add a new ``rewriterule`` in the
``match`` element in the ``01-rewrite.conf.j2`` template file in
``ansible/roles/common/templates/conf/filter`` to deliver log messages to
Elasticsearch.
* Documentation
- For OpenStack services there should be an entry in the list
``OpenStack services`` in the ``README.rst`` file.
- For infrastructure services there should be an entry in the list
``Infrastructure components`` in the ``README.rst`` file.
* Syntax
- All YAML data files should start with three dashes (``---``).
Other than the above, most service roles abide by the following pattern:
- ``Register``: Involves registering the service with Keystone, creating
endpoints, roles, users, etc.
- ``Config``: Distributes the config files to the nodes to be pulled into
the container on startup.
- ``Bootstrap``: Creating the database (but not tables), database user for
the service, permissions, etc.
- ``Bootstrap Service``: Starts a one shot container on the host to create
the database tables, and other initial run time config.
Ansible handlers are used to create or restart containers when necessary.

View File

@ -0,0 +1,130 @@
============================
So You Want to Contribute...
============================
For general information on contributing to OpenStack, please check out the
`contributor guide <https://docs.openstack.org/contributors/>`_ to get started.
It covers all the basics that are common to all OpenStack projects: the
accounts you need, the basics of interacting with our Gerrit review system,
how we communicate as a community, etc.
Below will cover the more project specific information you need to get started
with Kolla Ansible.
Basics
~~~~~~
The source repository for this project can be found at:
https://opendev.org/openstack/kolla-ansible
Communication
~~~~~~~~~~~~~
Kolla Ansible shares communication channels with Kolla.
IRC Channel
``#openstack-kolla`` (`channel logs`_) on Freenode
Weekly Meetings
On Wednesdays at 15:00 UTC in the IRC channel (`meetings logs`_)
Mailing list (prefix subjects with ``[kolla]``)
http://lists.openstack.org/pipermail/openstack-discuss/
Meeting Agenda
https://wiki.openstack.org/wiki/Meetings/Kolla
Whiteboard (etherpad)
Keeping track of CI gate status, release status, stable backports,
planning and feature development status.
https://etherpad.openstack.org/p/KollaWhiteBoard
.. _channel logs: http://eavesdrop.openstack.org/irclogs/%23openstack-kolla/
.. _meetings logs: http://eavesdrop.openstack.org/meetings/kolla/
Contacting the Core Team
~~~~~~~~~~~~~~~~~~~~~~~~
The list in alphabetical order (on first name):
+-----------------------+---------------+------------------------------------+
| Name | IRC nick | Email address |
+=======================+===============+====================================+
| `Chason Chan`_ | chason | chason.chan@foxmail.com |
+-----------------------+---------------+------------------------------------+
| `Christian Berendt`_ | berendt | berendt@betacloud-solutions.de |
+-----------------------+---------------+------------------------------------+
| `Dincer Celik`_ | osmanlicilegi | hello@dincercelik.com |
+-----------------------+---------------+------------------------------------+
| `Eduardo Gonzalez`_ | egonzalez | dabarren@gmail.com |
+-----------------------+---------------+------------------------------------+
| `Jeffrey Zhang`_ | Jeffrey4l | jeffrey.zhang@99cloud.net |
+-----------------------+---------------+------------------------------------+
| `Marcin Juszkiewicz`_ | hrw | marcin.juszkiewicz@linaro.org |
+-----------------------+---------------+------------------------------------+
| `Mark Goddard`_ | mgoddard | mark@stackhpc.com |
+-----------------------+---------------+------------------------------------+
| `Michał Nasiadka`_ | mnasiadka | mnasiadka@gmail.com |
+-----------------------+---------------+------------------------------------+
| `Radosław Piliszek`_ | yoctozepto | radoslaw.piliszek@gmail.com |
+-----------------------+---------------+------------------------------------+
| `Surya Prakash`_ | spsurya | singh.surya64mnnit@gmail.com |
+-----------------------+---------------+------------------------------------+
| `Cao Yuan`_ | caoyuan | cao.yuan@99cloud.net |
+-----------------------+---------------+------------------------------------+
.. _Chason Chan: https://launchpad.net/~chen-xing
.. _Christian Berendt: https://launchpad.net/~berendt
.. _Dincer Celik: https://launchpad.net/~osmanlicilegi
.. _Eduardo Gonzalez: https://launchpad.net/~egonzalez90
.. _Jeffrey Zhang: https://launchpad.net/~jeffrey4l
.. _Marcin Juszkiewicz: https://launchpad.net/~hrw
.. _Mark Goddard: https://launchpad.net/~mgoddard
.. _Michał Nasiadka: https://launchpad.net/~mnasiadka
.. _Radosław Piliszek: https://launchpad.net/~yoctozepto
.. _Surya Prakash: https://launchpad.net/~confisurya
.. _Cao Yuan: https://launchpad.net/~caoi-yuan
The current effective list is also available from Gerrit:
https://review.opendev.org/#/admin/groups/1637,members
New Feature Planning
~~~~~~~~~~~~~~~~~~~~
New features are discussed via IRC or mailing list (with [kolla] prefix).
Kolla project keeps blueprints in `Launchpad <https://blueprints.launchpad.net/kolla-ansible>`__.
Specs are welcome but not strictly required.
Task Tracking
~~~~~~~~~~~~~
Kolla project tracks tasks in `Launchpad <https://bugs.launchpad.net/kolla-ansible>`__.
Note this is the same place as for bugs.
If you're looking for some smaller, easier work item to pick up and get started
on, search for the 'low-hanging-fruit' tag.
A more lightweight task tracking is done via etherpad - `Whiteboard <https://etherpad.openstack.org/p/KollaWhiteBoard>`__.
Reporting a Bug
~~~~~~~~~~~~~~~
You found an issue and want to make sure we are aware of it? You can do so
on `Launchpad <https://bugs.launchpad.net/kolla-ansible>`__.
Note this is the same place as for tasks.
Getting Your Patch Merged
~~~~~~~~~~~~~~~~~~~~~~~~~
Most changes proposed to Kolla Ansible require two +2 votes from core reviewers
before +W. A release note is required on most changes as well. Release notes
policy is described in :ref:`its own section <release-notes>`.
Significant changes should have documentation and testing provided with them.
Project Team Lead Duties
~~~~~~~~~~~~~~~~~~~~~~~~
All common PTL duties are enumerated in the `PTL guide <https://docs.openstack.org/project-team-guide/ptl.html>`_.
Kolla-Ansible-specific PTL duties are listed in `Kolla Ansible PTL guide <https://docs.openstack.org/kolla-ansible/latest/contributor/ptl-guide.html>`_.

View File

@ -12,7 +12,9 @@ We welcome everyone to join our project!
.. toctree::
:maxdepth: 1
CONTRIBUTING
contributing
adding-a-new-service
release-notes
vagrant-dev-env
running-tests
kolla-for-openstack-development

View File

@ -0,0 +1,45 @@
.. _release-notes:
=============
Release notes
=============
Kolla Ansible (just like Kolla) uses the following release notes sections:
- ``features`` --- for new features or functionality; these should ideally
refer to the blueprint being implemented;
- ``fixes`` --- for fixes closing bugs; these must refer to the bug being
closed;
- ``upgrade`` --- for notes relevant when upgrading from previous version;
these should ideally be added only between major versions; required when
the proposed change affects behaviour in a non-backwards compatible way or
generally changes something impactful;
- ``deprecations`` --- to track deprecated features; relevant changes may
consist of only the commit message and the release note;
- ``prelude`` --- filled in by the PTL before each release or RC.
Other release note types may be applied per common sense.
Each change should include a release note unless being a ``TrivialFix``
change or affecting only docs or CI. Such changes should `not` include
a release note to avoid confusion.
Remember release notes are mostly for end users which, in case of Kolla,
are OpenStack administrators/operators.
In case of doubt, the core team will let you know what is required.
To add a release note, run the following command:
.. code-block:: console
tox -e venv -- reno new <summary-line-with-dashes>
All release notes can be inspected by browsing ``releasenotes/notes``
directory.
To generate release notes in HTML format in ``releasenotes/build``, run:
.. code-block:: console
tox -e releasenotes
Note this requires the release note to be tracked by ``git`` so you
have to at least add it to the ``git``'s staging area.