From bf321d2969d889e0815f40ea8e661f563928d4f3 Mon Sep 17 00:00:00 2001
From: portdirect <pete@port.direct>
Date: Tue, 28 Nov 2017 12:27:42 -0500
Subject: [PATCH] Spec: Developer Environment

This PS introduces a Spec for the updated OpenStack-Helm developer
environment.

Change-Id: I02ac56e39049f866dc875374f596e169d952f148
Implements: blueprint developer-environment
---
 doc/source/specs/developer-environment.rst | 124 +++++++++++++++++++++
 doc/source/specs/index.rst                 |   1 +
 2 files changed, 125 insertions(+)
 create mode 100644 doc/source/specs/developer-environment.rst

diff --git a/doc/source/specs/developer-environment.rst b/doc/source/specs/developer-environment.rst
new file mode 100644
index 0000000000..d76b365bfe
--- /dev/null
+++ b/doc/source/specs/developer-environment.rst
@@ -0,0 +1,124 @@
+..
+ This work is licensed under a Creative Commons Attribution 3.0 Unported
+ License.
+
+ http://creativecommons.org/licenses/by/3.0/legalcode
+
+..
+
+=====================
+Developer Environment
+=====================
+
+https://blueprints.launchpad.net/openstack-helm/+spec/developer-environment
+
+Problem Description
+===================
+
+Developers require a simple way of instantiating a working environment for
+OpenStack-Helm, that allows them to quickly begin development of the project.
+This is more complex to achieve than many OpenStack Projects that can simply
+rely upon a devstack plugin to achieve this. This is as OpenStack-Helm is
+focused on the deployment of OpenStack (and associated) Projects, rather than
+the development of the projects themselves, and also requires additional
+supporting infrastructure, e.g. Kubernetes and a CNI.
+
+Use cases
+---------
+1. Development of OpenStack-Helm
+2. PoC deployments of OpenStack-Helm
+
+Proposed Change
+===============
+
+The OpenStack-Helm Zuulv2 gates were written to allow use outside of
+OpenStack-Infra, to quickly set up a Kubernetes cluster, with the adoption of
+Zuulv3 underway it is logical to extend this paradigm to the Zuulv3 Playbooks.
+This will be driven via a ``Makefile`` that will allow developers to perform the
+following actions:
+
+* Prepare Host(s) for OpenStack-Helm deployment
+* Deploy Kubernetes via KubeADM, with charts for CNI and DNS services
+
+At this point, curated scripts will be used to deploy OpenStack-Helm services on
+demand as desired, with documentation provided to allow a new developer to
+quickly set up either a single or multimode deployment of a reference
+`OpenStack Compute Kit <https://governance.openstack.org/tc/reference/tags/starter-kit_compute.html>`_
+environment with the addition of:
+
+* Ceph backed Object Storage
+* Ceph backed Block Storage (cinder)
+* Orchestration (heat)
+* Web UI (horizon)
+
+A set of scripts will be provided to exercise the deployed environment that
+checks the basic functionality of the deployed cloud, driven where possible via
+OpenStack heat:
+
+* Create external network
+* Setup access to the external network from the development machine
+* Create tenant network
+* Create tenant router to link tenant network and external
+* Create SSH Key in nova
+* Create VM on tenant network
+* Assign Floating IP to VM
+* SSH into VM and check it can access the internet
+
+This deployment process will be gated, to ensure that the development
+the environment is consistently working against ``master`` for the
+OpenStack-Helm repositories.
+
+Security Impact
+---------------
+There will be no security impact, as it will deploy the charts in
+OpenStack-Helm[-infra/-addons] upon a reference KubeADM administered cluster.
+
+Performance Impact
+------------------
+This feature will not affect the performance of OpenStack-Helm.
+
+Alternatives
+------------
+The alternative would be to continue supporting the current bash driven
+containerized KubeADM and Kubelet approach, though this has the following
+issues:
+
+* The containerized Kubelet cannot survive a restart, as it does not setup
+  mounts correctly.
+* The bash scripts are largely undocumented and have grown to the point where
+  they are very hard for a new developer to work on.
+* The move to Zuulv3 native operation of the OpenStack-Helm gates mean there
+  would be no code reuse between the gate and developer environments, so
+  supporting the existing code for Zuulv2 will incur significant tech-debt.
+
+Implementation
+==============
+
+Assignee(s)
+-----------
+
+Primary assignee:
+  portdirect (Pete Birley)
+
+Work Items
+----------
+
+The following work items need to be completed for this Specification to be
+implemented.
+
+* Update of Developer Documentation
+* Update of Makefile for OpenStack-Helm-Infra to allow modular deployment of
+  components
+* Develop scripts for bringing up OpenStack-Helm Charts and perform basic
+  interactive tests
+* Add gate for developer environment
+
+Testing
+=======
+A gate will be added to OpenStack-Helm that runs through the developer
+environment deployment process.
+
+Documentation Impact
+====================
+The developer documentation in OpenStack-Helm should be updated to match the
+gated developer deploy process.
diff --git a/doc/source/specs/index.rst b/doc/source/specs/index.rst
index 3651f16eb7..1d0c0dde17 100644
--- a/doc/source/specs/index.rst
+++ b/doc/source/specs/index.rst
@@ -6,6 +6,7 @@ Contents:
 .. toctree::
    :maxdepth: 2
 
+   developer-environment.rst
    osh-lma-stack.rst
    specifications.rst
    template.rst