From b3fe0a35a4f691858ace177278ae685733ebb471 Mon Sep 17 00:00:00 2001
From: Karel van Klink <karel.vanklink@geant.org>
Date: Tue, 30 Jan 2024 17:16:18 +0100
Subject: [PATCH] add contents to DTAP section

---
 docs/architecture/dtap/acceptance.md          | 19 ++++++++++++-
 docs/architecture/dtap/development.md         | 10 +++++++
 docs/architecture/dtap/index.md               | 27 ++++++++++++++++++-
 docs/architecture/dtap/production.md          | 10 ++++++-
 docs/architecture/dtap/test.md                | 17 +++++++++++-
 includes/glossary.md                          |  3 +++
 mkdocs.yml                                    |  1 +
 .../vocabularies/geant-jargon/accept.txt      |  5 ++--
 .../vocabularies/technical-terms/accept.txt   |  5 ++++
 9 files changed, 91 insertions(+), 6 deletions(-)
 create mode 100644 docs/architecture/dtap/development.md

diff --git a/docs/architecture/dtap/acceptance.md b/docs/architecture/dtap/acceptance.md
index bc010f9..c36f607 100644
--- a/docs/architecture/dtap/acceptance.md
+++ b/docs/architecture/dtap/acceptance.md
@@ -1,3 +1,20 @@
 # Acceptance environment
 
-TBA
+Once GAP components have been tested successfully in the test environment, they
+are advanced to the UAT environment. In this environment, stakeholders from
+other teams such as Network Engineering and Operations are able to perform their
+own tests on the system.
+
+In the UAT environment, only full releases are deployed. This means that
+development builds are not included in this environment. Devices targeted by GAP
+are physical routers in the lab, to increase accuracy of integration testing.
+
+The UAT environment has been designed to mimic the ultimate production
+environment as close as possible. To achieve this, all VMs are managed in the
+same manner using Puppet, and external resources are configured identically. The
+external service database is hosted on a distributed Postgres cluster, which is
+provided by the DevOps team. The Redis instance is also a cluster, which again
+comes from the DevOps team.
+
+Once testing has been completed, components are ready to move to the production
+environment.
diff --git a/docs/architecture/dtap/development.md b/docs/architecture/dtap/development.md
new file mode 100644
index 0000000..5bb9499
--- /dev/null
+++ b/docs/architecture/dtap/development.md
@@ -0,0 +1,10 @@
+# Development environments
+
+For the development of different components of GAP, an environment is needed for
+integration testing. This is done by making use of a Proxmox cluster in the
+GÉANT lab environment, that facilitates different VMs for each developer.
+
+Inside a development VM, containerlab is used to emulate virtual routers of both
+Juniper and Nokia. Port forwarding then enables the developer to run
+applications such as GSO and LSO on their local machine, to help speed up the
+development cycle.
diff --git a/docs/architecture/dtap/index.md b/docs/architecture/dtap/index.md
index 35cd1b5..6b21526 100644
--- a/docs/architecture/dtap/index.md
+++ b/docs/architecture/dtap/index.md
@@ -1,3 +1,28 @@
 # DTAP process
 
-TBA
+To stage the different environments used for testing all components of GAP, the
+DTAP process ensures that software in the production environment is well-tested
+and understood by all parties involved.
+
+For the deployment of GAP, a set of Ansible playbooks is used to prepare VMs,
+install required dependencies, and set up the different components of GAP. There
+are four different environments, with their major differences listed in the
+table below.
+
+| Environment | Router topology | Component versioning | Used by             |
+|-------------|-----------------|----------------------|---------------------|
+| Development | containerlab    | -                    | GAP developers      |
+| Test        | EVE-NG          | 1.6dev135            | GAP developers      |
+| UAT         | lab devices     | 1.5                  | Network Engineering |
+| Production  | production      | 1.2                  | Operations & OC     |
+
+The development environment runs on a local machine of a developer, and is
+therefore highly volatile and unstable. The test environment is less volatile,
+but still contains the newest package versions that are merged into `develop`.
+The UAT environment is more stable, and only contains released packages. This is
+where integration testing with physical devices takes place. 
+
+Once a combination of specific version numbers is deemed compatible and fully
+functional, it is deployed as a whole in production. Production could therefore
+be multiple releases behind UAT, if this combination of newer versions has not
+been tested yet.
diff --git a/docs/architecture/dtap/production.md b/docs/architecture/dtap/production.md
index 701af60..fc6662c 100644
--- a/docs/architecture/dtap/production.md
+++ b/docs/architecture/dtap/production.md
@@ -1,3 +1,11 @@
 # Production environment
 
-TBA
+The production environment contains final, well-tested versions of GAP
+components.
+
+This environment has been designed to be resilient and as stable as reasonably
+possible. The used Postgres and Redis services are hosted in distributed
+clusters, and GAP is deployed in three different VMs. These VMs share a virtual
+IP address, where a specific VM is selected using `keepalived`. If one of the
+components of GAP were to go down in one of the VMs, another VM will take over
+without the end user experiencing any system downtime.
diff --git a/docs/architecture/dtap/test.md b/docs/architecture/dtap/test.md
index c28e372..88f17e8 100644
--- a/docs/architecture/dtap/test.md
+++ b/docs/architecture/dtap/test.md
@@ -1,3 +1,18 @@
 # Test environment
 
-TBA
+Once development has taken place, and rudimentary unit and system testing was
+successful, a merge request is opened in the relevant Git repository. Once this
+merge request is approved and included in upstream, it will be on the `develop`
+branch.
+
+The test environment is automatically re-deployed every hour on a VM
+infrastructure in the GÉANT lab environment. This ensures that the test
+environment always contains the newest versions of all components of GAP.
+
+The test environment is meant for the GOAT to test new functionality and
+the stability of GAP. The routers that are targeted, are virtual routers managed
+by an EVE-NG instance. Once testing in the test environment has been concluded
+successfully, GAP components are ready to advance to the UAT environment.
+
+The test environment contains all development builds of components, following
+semantic versioning principles.
diff --git a/includes/glossary.md b/includes/glossary.md
index a90eb03..cc2000a 100644
--- a/includes/glossary.md
+++ b/includes/glossary.md
@@ -10,6 +10,7 @@
 *[GA]: Access Port
 *[GAN]: Access Node
 *[GAP]: GÉANT Automation Platform
+*[GOAT]: GÉANT Orchestration and Automation Team
 *[GP]: Physical Port
 *[GSO]: GÉANT Service Orchestrator
 *[GUI]: Graphical User Interface
@@ -33,4 +34,6 @@
 *[SNMP]: Simple Network Management Protocol
 *[SOT]: Source Of Truth
 *[TBA]: To be added
+*[UAT]: User Acceptance Testing
+*[VM]: Virtual Machine
 *[WFO]: Workflow Orchestrator
diff --git a/mkdocs.yml b/mkdocs.yml
index 12f6ce6..538f534 100644
--- a/mkdocs.yml
+++ b/mkdocs.yml
@@ -58,6 +58,7 @@ nav:
         - LSO: architecture/components/lso/index.md
     - DTAP:
         - architecture/dtap/index.md
+        - Development: architecture/dtap/development.md
         - Test: architecture/dtap/test.md
         - Acceptance: architecture/dtap/acceptance.md
         - Production: architecture/dtap/production.md
diff --git a/vale/styles/config/vocabularies/geant-jargon/accept.txt b/vale/styles/config/vocabularies/geant-jargon/accept.txt
index b2a4c49..1216a24 100644
--- a/vale/styles/config/vocabularies/geant-jargon/accept.txt
+++ b/vale/styles/config/vocabularies/geant-jargon/accept.txt
@@ -4,10 +4,11 @@ address
 BSS
 CFS
 configuration as code
-components?
+[Cc]omponents?
 contains?
 GAP
-GÉANT( Automation Platform)?
+GÉANT Automation Platform
+GOAT
 GSO
 IFS
 iptrunk_*
diff --git a/vale/styles/config/vocabularies/technical-terms/accept.txt b/vale/styles/config/vocabularies/technical-terms/accept.txt
index a07bba6..0c36825 100644
--- a/vale/styles/config/vocabularies/technical-terms/accept.txt
+++ b/vale/styles/config/vocabularies/technical-terms/accept.txt
@@ -8,6 +8,7 @@ DHCP
 DNS
 Dockerfile
 DTAP
+EVE
 FXP
 GAN
 IGP
@@ -21,9 +22,13 @@ MTTR
 MTU
 [Mm]ultipoint
 Netbox
+Postgres
+Proxmox
 REST|rest
 SDP
 SID
 SOT
 SNMP
+UAT
 VLAN
+VMs?
-- 
GitLab