From 236e109f950200023b9bebbafa66bf4c47ab146f Mon Sep 17 00:00:00 2001 From: Drew Walters <andrew.walters@att.com> Date: Mon, 11 May 2020 22:12:37 +0000 Subject: [PATCH] Add development guide This change moves the development guide from docs.airshipit.org/treasuremap to docs.airshipit.org. It also updates some content to reference Airship 2. Change-Id: Icb3474de2cd22e34221f62e1c0a228770fc89cd1 Signed-off-by: Drew Walters <andrew.walters@att.com> --- doc/source/develop/index.rst | 249 +++++++++++++++++++++++++++++++++++ 1 file changed, 249 insertions(+) diff --git a/doc/source/develop/index.rst b/doc/source/develop/index.rst index c9d2132..eba0520 100644 --- a/doc/source/develop/index.rst +++ b/doc/source/develop/index.rst @@ -14,7 +14,256 @@ Develop Airship =============== +Welcome +------- + +Thank you for your interest in Airship. Our community is eager to help you +contribute to the success of our project and welcome you as a member of our +community! + +We invite you to reach out to us at any time via the `Airship mailing list`_ or +on our `Slack workspace`_. + +Welcome aboard! + +.. _Airship mailing list: http://lists.airshipit.org +.. _Slack workspace: http://airshipit.org/slack + +Getting Started - Airship 2 Development +--------------------------------------- + +Development is underway on Airship 2: the educated evolution of Airship 1, +designed with our experience using Airship in production. Airship 2 makes the +Airship control plane ephemeral, leverages entrenched upstream projects such as +the `Cluster API`_, `Metal Kubed`_, Kustomize_, and `kubeadm`_, and embraces +Kubernetes Custom Resource Definitions (CRDs). To learn more about the Airship +2.0 evolution, see the `Airship 2 evolution blog series`_. + +Each Airship 2 project has its own development guidelines. Join the ongoing Airship 2 +development by referencing the `airshipctl`_ or the `airshipui`_ documentation. + +.. _airshipctl: https://docs.airshipit.org/airshipctl/developers.html +.. _Airship 2 evolution blog series: https://www.airshipit.org/blog/airship-blog-series-1-evolution-towards-2.0 +.. _airshipui: https://docs.airshipit.org/airshipui/developers.html +.. _Cluster API: https://github.com/kubernetes-sigs/cluster-api +.. _kubeadm: https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm +.. _Kustomize: https://github.com/kubernetes-sigs/kustomize +.. _Metal Kubed: https://metal3.io + +Getting Started - Airship 1 Development +--------------------------------------- + +Airship 1 is a collection of open source tools that automate cloud provisioning +and management. Airship provides a declarative framework for defining and +managing the life cycle of open infrastructure tools and the underlying +hardware. These tools include OpenStack for virtual machines, Kubernetes for +container orchestration, and MaaS for bare metal, with planned support for +OpenStack Ironic. + +Improvements are still made Airship 1 daily, and we welcome additional +contributors. We recommend that new contributors begin by reading the +high-level architecture overview included in our `treasuremap`_ documentation. +The architectural overview introduces each Airship component, their core +responsibilities, and their integration points. + +.. _treasuremap: https://docs.airshipit.org/treasuremap + +Deep Dive +~~~~~~~~~ + +Each Airship component is accompanied by its own documentation that provides an +extensive overview of the component. With so many components, it can be +challenging to find a starting point. + +We recommend the following: + +Try an Airship environment +~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Airship provides two single-node environments for demo and development purpose. + +`Airship-in-a-Bottle`_ is a set of reference documents and shell scripts that +stand up a full Airship environment with the execution of a script. + +`Airskiff`_ is a light-weight development environment bundled with a set of +deployment scripts that provides a single-node Airship environment. Airskiff +uses minikube to bootstrap Kubernetes, so it does not include Drydock, MaaS, or +Promenade. + +Additionally, we provide a reference architecture for easily deploying a +smaller, demo site. + +`Airsloop`_ is a fully-authored Airship site that can be quickly deployed as a +baremetal, demo lab. + +.. _Airship-in-a-Bottle: https://opendev.org/airship/in-a-bottle + +.. _Airskiff: https://docs.airshipit.org/treasuremap/airskiff.html + +.. _Airsloop: https://docs.airshipit.org/treasuremap/airsloop.html + +Focus on a component +~~~~~~~~~~~~~~~~~~~~ + +When starting out, focusing on one Airship component allows you to become +intricately familiar with the responsibilities of that component and understand +its function in the Airship integration. Because the components are modeled +after each other, you will also become familiar with the same patterns and +conventions that all Airship components use. + +Airship source code lives in the `OpenDev Airship namespace`_. To clone an +Airship project, execute the following, replacing `<component>` with the name +of the Airship component you want to clone. + +.. code-block bash:: + + git clone https://opendev.org/airship/<component>.git + +Refer to the component's documentation to get started. A list of each +component's documentation is listed below for reference: + + * `Armada`_ + * `Deckhand`_ + * `Divingbell`_ + * `Drydock`_ + * `Pegleg`_ + * `Promenade`_ + * `Shipyard`_ + +.. _OpenDev Airship namespace: https://opendev.org/airship + +.. _Armada: https://airship-armada.readthedocs.io + +.. _Deckhand: https://airship-deckhand.readthedocs.io + +.. _Divingbell: https://airship-divingbell.readthedocs.io + +.. _Drydock: https://airship-drydock.readthedocs.io + +.. _Pegleg: https://airship-pegleg.readthedocs.io + +.. _Promenade: https://airship-promenade.readthedocs.io + +.. _Shipyard: https://airship-shipyard.readthedocs.io + +Testing Changes +~~~~~~~~~~~~~~~ + +Testing of Airship changes can be accomplished several ways: + + #. Standalone, single component testing + #. Integration testing + #. Linting, unit, and functional tests/linting + +.. note:: Testing changes to charts in Airship repositories is best + accomplished using the integration method describe below. + +Standalone Testing +~~~~~~~~~~~~~~~~~~ + +Standalone testing of Airship components, i.e. using an Airship component as a +Python project, provides the quickest feedback loop of the three methods and +allows developers to make changes on the fly. We recommend testing initial code +changes using this method to see results in real-time. + +Each Airship component written in Python has pre-requisites and guides for +running the project in a standalone capacity. Refer to the documentation listed +below. + + * `Armada`_ + * `Deckhand`_ + * `Drydock`_ + * `Pegleg`_ + * `Promenade`_ + * `Shipyard`_ + +Integration Testing +~~~~~~~~~~~~~~~~~~~ + +While each Airship component supports individual usage, Airship components +have several integration points that should be exercised after modifying +functionality. + +We maintain several environments that encompass these integration points: + + #. `Airskiff`_: Integration of Armada, Deckhand, Shipyard, and Pegleg + #. `Airship-in-a-Bottle Multinode`: Full Airship integration + +For changes that merely impact software delivery components, exercising a full +Airskiff deployment is often sufficient. Otherwise, we recommend using the +Airship-in-a-Bottle Multinode environment. + +Each environment's documentation covers the process required to build and test +component images. + +.. _Airskiff: https://docs.airshipit.org/treasuremap/airskiff.html + +.. _Airship-in-a-Bottle Multinode: http://git.openstack.org/cgit/openstack/ + airship-in-a-bottle/tree/tools/multi_nodes_gate/README.rst + +Final Checks +~~~~~~~~~~~~ + +Airship projects provide Makefiles to run unit, integration, and functional +tests as well as lint Python code for PEP8 compliance and Helm charts for +successful template rendering. All checks are gated by Zuul before a change can +be merged. For more information on executing these checks, refer to +project-specific documentation. + +Third party CI tools, such as Jenkins, report results on Airship-in-a-Bottle +patches. These can be exposed using the "Toggle CI" button in the bottom +left-hand page of any gerrit change. + +Pushing code +~~~~~~~~~~~~ + +Airship uses the `OpenDev gerrit`_ for code review. Refer to the `OpenStack +Contributing Guide`_ for a tutorial on submitting changes to Gerrit code +review. + +.. _OpenDev gerrit: https://review.opendev.org + +.. _OpenStack Contributing Guide: https://docs.openstack.org/horizon/latest/contributor/contributing.html + +Next steps +~~~~~~~~~~ + +Upon pushing a change to gerrit, Zuul continuous integration will post job +results on your patch. Refer to the job output by clicking on the job itself to +determine if further action is required. If it's not clear why a job failed, +please reach out to a team member in IRC. We are happy to assist! + +Assuming all continuous integration jobs succeed, Airship community members and +core developers will review your patch and provide feedback. Many patches are +submitted to Airship projects each day. If your patch does not receive feedback +for several days, please reach out using IRC or the Airship mailing list. + +Merging code +~~~~~~~~~~~~ + +Like most OpenDev projects, Airship patches require two +2 code review votes +from core members to merge. Once you have addressed all outstanding feedback, +your change will be merged. + +Beyond +~~~~~~ + +Congratulations! After your first change merges, please keep up-to-date with +the team. We hold two weekly meetings for project and design discussion: + +Our weekly #airshipit IRC meeting provides an opportunity to discuss project +operations. + +Our weekly design call provides an opportunity for in-depth discussion of new +and existing Airship features. + +For more information on the times of each meeting, refer to the `Airship +wiki`_. + +.. _Airship wiki: https://wiki.openstack.org/wiki/Airship + .. toctree:: + :hidden: :maxdepth: 3 getting-started