Reorganization pass on Aether Docs

Change-Id: I0653109d6fe8d340278580ff5c7758ca264b512e
diff --git a/pronto_deployment_guide/connectivity_service_update.rst b/edge_deployment/connectivity_service_update.rst
similarity index 100%
rename from pronto_deployment_guide/connectivity_service_update.rst
rename to edge_deployment/connectivity_service_update.rst
diff --git a/pronto_deployment_guide/enb_installation.rst b/edge_deployment/enb_installation.rst
similarity index 100%
rename from pronto_deployment_guide/enb_installation.rst
rename to edge_deployment/enb_installation.rst
diff --git a/edge_deployment/fabric_switch_bootstrap.rst b/edge_deployment/fabric_switch_bootstrap.rst
new file mode 100644
index 0000000..bfac6b6
--- /dev/null
+++ b/edge_deployment/fabric_switch_bootstrap.rst
@@ -0,0 +1,168 @@
+..
+   SPDX-FileCopyrightText: © 2020 Open Networking Foundation <support@opennetworking.org>
+   SPDX-License-Identifier: Apache-2.0
+
+Fabric Switch Bootstrap
+=======================
+
+The installation of the ONL OS image on the fabric switches uses the DHCP and
+HTTP server set up on the management server.
+
+The default image is downloaded during that installation process by the
+``onieboot`` role. Make changes to that roll and rerun the management playbook
+to download a newer switch image.
+
+Preparation
+-----------
+
+The switches have a single ethernet port that is shared between OpenBMC and
+ONL. Find out the MAC addresses for both of these ports and enter it into
+NetBox.
+
+Change boot mode to ONIE Rescue mode
+------------------------------------
+
+In order to reinstall an ONL image, you must change the ONIE bootloader to
+"Rescue Mode".
+
+Once the switch is powered on, it should retrieve an IP address on the OpenBMC
+interface with DHCP. OpenBMC uses these default credentials::
+
+  username: root
+  password: 0penBmc
+
+Login to OpenBMC with SSH::
+
+  $ ssh root@10.0.0.131
+  The authenticity of host '10.0.0.131 (10.0.0.131)' can't be established.
+  ECDSA key fingerprint is SHA256:...
+  Are you sure you want to continue connecting (yes/no)? yes
+  Warning: Permanently added '10.0.0.131' (ECDSA) to the list of known hosts.
+  root@10.0.0.131's password:
+  root@bmc:~#
+
+Using the Serial-over-LAN Console, enter ONL::
+
+  root@bmc:~# /usr/local/bin/sol.sh
+  You are in SOL session.
+  Use ctrl-x to quit.
+  -----------------------
+
+  root@onl:~#
+
+.. note::
+  If `sol.sh` is unresponsive, please try to restart the mainboard with::
+
+    root@onl:~# wedge_power.sh restart
+
+
+Change the boot mode to rescue mode with the command ``onl-onie-boot-mode
+rescue``, and reboot::
+
+  root@onl:~# onl-onie-boot-mode rescue
+  [1053033.768512] EXT4-fs (sda2): mounted filesystem with ordered data mode. Opts: (null)
+  [1053033.936893] EXT4-fs (sda3): re-mounted. Opts: (null)
+  [1053033.996727] EXT4-fs (sda3): re-mounted. Opts: (null)
+  The system will boot into ONIE rescue mode at the next restart.
+  root@onl:~# reboot
+
+At this point, ONL will go through it's shutdown sequence and ONIE will start.
+If it does not start right away, press the Enter/Return key a few times - it
+may show you a boot selection screen. Pick ``ONIE`` and ``Rescue`` if given a
+choice.
+
+Installing an ONL image over HTTP
+---------------------------------
+
+Now that the switch is in Rescue mode
+
+First, activate the Console by pressing Enter::
+
+  discover: Rescue mode detected.  Installer disabled.
+
+  Please press Enter to activate this console.
+  To check the install status inspect /var/log/onie.log.
+  Try this:  tail -f /var/log/onie.log
+
+  ** Rescue Mode Enabled **
+  ONIE:/ #
+
+Then run the ``onie-nos-install`` command, with the URL of the management
+server on the management network segment::
+
+  ONIE:/ # onie-nos-install http://10.0.0.129/onie-installer
+  discover: Rescue mode detected. No discover stopped.
+  ONIE: Unable to find 'Serial Number' TLV in EEPROM data.
+  Info: Fetching http://10.0.0.129/onie-installer ...
+  Connecting to 10.0.0.129 (10.0.0.129:80)
+  installer            100% |*******************************|   322M  0:00:00 ETA
+  ONIE: Executing installer: http://10.0.0.129/onie-installer
+  installer: computing checksum of original archive
+  installer: checksum is OK
+  ...
+
+The installation will now start, and then ONL will boot culminating in::
+
+  Open Network Linux OS ONL-wedge100bf-32qs, 2020-11-04.19:44-64100e9
+
+  localhost login:
+
+The default ONL login is::
+
+  username: root
+  password: onl
+
+If you login, you can verify that the switch is getting it's IP address via
+DHCP::
+
+  root@localhost:~# ip addr
+  ...
+  3: ma1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
+      link/ether 00:90:fb:5c:e1:97 brd ff:ff:ff:ff:ff:ff
+      inet 10.0.0.130/25 brd 10.0.0.255 scope global ma1
+  ...
+
+
+Post-ONL Configuration
+----------------------
+
+A ``terraform`` user must be created on the switches to allow them to be
+configured.
+
+This is done using Ansible.  Verify that your inventory (Created earlier from the
+``inventory/example-aether.ini`` file) includes an ``[aetherfabric]`` section
+that has all the names and IP addresses of the compute nodes in it.
+
+Then run a ping test::
+
+  ansible -i inventory/sitename.ini -m ping aetherfabric
+
+This may fail with the error::
+
+  "msg": "Using a SSH password instead of a key is not possible because Host Key checking is enabled and sshpass does not support this.  Please add this host's fingerprint to your known_hosts file to manage this host."
+
+Comment out the ``ansible_ssh_pass="onl"`` line, then rerun the ping test.  It
+may ask you about authorized keys - answer ``yes`` for each host to trust the
+keys::
+
+  The authenticity of host '10.0.0.138 (<no hostip for proxy command>)' can't be established.
+  ECDSA key fingerprint is SHA256:...
+  Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
+
+Once you've trusted the host keys, the ping test should succeed::
+
+  spine1.role1.site | SUCCESS => {
+      "changed": false,
+      "ping": "pong"
+  }
+  leaf1.role1.site | SUCCESS => {
+      "changed": false,
+      "ping": "pong"
+  }
+  ...
+
+Then run the playbook to create the ``terraform`` user::
+
+  ansible-playbook -i inventory/sitename.ini playbooks/aetherfabric-playbook.yml
+
+Once completed, the switch should now be ready for TOST runtime install.
diff --git a/pronto_deployment_guide/images/enb-ser-1.jpg b/edge_deployment/images/enb-ser-1.jpg
similarity index 100%
rename from pronto_deployment_guide/images/enb-ser-1.jpg
rename to edge_deployment/images/enb-ser-1.jpg
Binary files differ
diff --git a/pronto_deployment_guide/images/enb-ser-2.png b/edge_deployment/images/enb-ser-2.png
similarity index 100%
rename from pronto_deployment_guide/images/enb-ser-2.png
rename to edge_deployment/images/enb-ser-2.png
Binary files differ
diff --git a/pronto_deployment_guide/images/enb-ser-3.png b/edge_deployment/images/enb-ser-3.png
similarity index 100%
rename from pronto_deployment_guide/images/enb-ser-3.png
rename to edge_deployment/images/enb-ser-3.png
Binary files differ
diff --git a/pronto_deployment_guide/images/enb-ser-4.png b/edge_deployment/images/enb-ser-4.png
similarity index 100%
rename from pronto_deployment_guide/images/enb-ser-4.png
rename to edge_deployment/images/enb-ser-4.png
Binary files differ
diff --git a/pronto_deployment_guide/images/enb-ser-5.png b/edge_deployment/images/enb-ser-5.png
similarity index 100%
rename from pronto_deployment_guide/images/enb-ser-5.png
rename to edge_deployment/images/enb-ser-5.png
Binary files differ
diff --git a/pronto_deployment_guide/images/enb-ser-6.png b/edge_deployment/images/enb-ser-6.png
similarity index 100%
rename from pronto_deployment_guide/images/enb-ser-6.png
rename to edge_deployment/images/enb-ser-6.png
Binary files differ
diff --git a/pronto_deployment_guide/images/enb-ser-7.png b/edge_deployment/images/enb-ser-7.png
similarity index 100%
rename from pronto_deployment_guide/images/enb-ser-7.png
rename to edge_deployment/images/enb-ser-7.png
Binary files differ
diff --git a/pronto_deployment_guide/images/enb-ser-8.png b/edge_deployment/images/enb-ser-8.png
similarity index 100%
rename from pronto_deployment_guide/images/enb-ser-8.png
rename to edge_deployment/images/enb-ser-8.png
Binary files differ
diff --git a/pronto_deployment_guide/images/jenkins-onos-params.png b/edge_deployment/images/jenkins-onos-params.png
similarity index 100%
rename from pronto_deployment_guide/images/jenkins-onos-params.png
rename to edge_deployment/images/jenkins-onos-params.png
Binary files differ
diff --git a/pronto_deployment_guide/images/mgmtsrv-000.png b/edge_deployment/images/mgmtsrv-000.png
similarity index 100%
rename from pronto_deployment_guide/images/mgmtsrv-000.png
rename to edge_deployment/images/mgmtsrv-000.png
Binary files differ
diff --git a/pronto_deployment_guide/images/mgmtsrv-001.png b/edge_deployment/images/mgmtsrv-001.png
similarity index 100%
rename from pronto_deployment_guide/images/mgmtsrv-001.png
rename to edge_deployment/images/mgmtsrv-001.png
Binary files differ
diff --git a/pronto_deployment_guide/images/mgmtsrv-002.png b/edge_deployment/images/mgmtsrv-002.png
similarity index 100%
rename from pronto_deployment_guide/images/mgmtsrv-002.png
rename to edge_deployment/images/mgmtsrv-002.png
Binary files differ
diff --git a/pronto_deployment_guide/images/mgmtsrv-003.png b/edge_deployment/images/mgmtsrv-003.png
similarity index 100%
rename from pronto_deployment_guide/images/mgmtsrv-003.png
rename to edge_deployment/images/mgmtsrv-003.png
Binary files differ
diff --git a/pronto_deployment_guide/images/mgmtsrv-004.png b/edge_deployment/images/mgmtsrv-004.png
similarity index 100%
rename from pronto_deployment_guide/images/mgmtsrv-004.png
rename to edge_deployment/images/mgmtsrv-004.png
Binary files differ
diff --git a/pronto_deployment_guide/images/mgmtsrv-005.png b/edge_deployment/images/mgmtsrv-005.png
similarity index 100%
rename from pronto_deployment_guide/images/mgmtsrv-005.png
rename to edge_deployment/images/mgmtsrv-005.png
Binary files differ
diff --git a/pronto_deployment_guide/images/mgmtsrv-006.png b/edge_deployment/images/mgmtsrv-006.png
similarity index 100%
rename from pronto_deployment_guide/images/mgmtsrv-006.png
rename to edge_deployment/images/mgmtsrv-006.png
Binary files differ
diff --git a/pronto_deployment_guide/images/mgmtsrv-007.png b/edge_deployment/images/mgmtsrv-007.png
similarity index 100%
rename from pronto_deployment_guide/images/mgmtsrv-007.png
rename to edge_deployment/images/mgmtsrv-007.png
Binary files differ
diff --git a/pronto_deployment_guide/images/pronto_logical_diagram.svg b/edge_deployment/images/pronto_logical_diagram.svg
similarity index 100%
rename from pronto_deployment_guide/images/pronto_logical_diagram.svg
rename to edge_deployment/images/pronto_logical_diagram.svg
diff --git a/pronto_deployment_guide/images/pswi-000.png b/edge_deployment/images/pswi-000.png
similarity index 100%
rename from pronto_deployment_guide/images/pswi-000.png
rename to edge_deployment/images/pswi-000.png
Binary files differ
diff --git a/pronto_deployment_guide/images/pswi-001.png b/edge_deployment/images/pswi-001.png
similarity index 100%
rename from pronto_deployment_guide/images/pswi-001.png
rename to edge_deployment/images/pswi-001.png
Binary files differ
diff --git a/pronto_deployment_guide/images/pswi-003.png b/edge_deployment/images/pswi-003.png
similarity index 100%
rename from pronto_deployment_guide/images/pswi-003.png
rename to edge_deployment/images/pswi-003.png
Binary files differ
diff --git a/pronto_deployment_guide/images/pswi-004.png b/edge_deployment/images/pswi-004.png
similarity index 100%
rename from pronto_deployment_guide/images/pswi-004.png
rename to edge_deployment/images/pswi-004.png
Binary files differ
diff --git a/pronto_deployment_guide/images/pswi-005.png b/edge_deployment/images/pswi-005.png
similarity index 100%
rename from pronto_deployment_guide/images/pswi-005.png
rename to edge_deployment/images/pswi-005.png
Binary files differ
diff --git a/edge_deployment/management_net_bootstrap.rst b/edge_deployment/management_net_bootstrap.rst
new file mode 100644
index 0000000..499e5b1
--- /dev/null
+++ b/edge_deployment/management_net_bootstrap.rst
@@ -0,0 +1,63 @@
+..
+   SPDX-FileCopyrightText: © 2020 Open Networking Foundation <support@opennetworking.org>
+   SPDX-License-Identifier: Apache-2.0
+
+Management Network Bootstrap
+============================
+
+The current Pronto deployment uses an HP/Aruba 2540 24G PoE+ 4SFP+ JL356A
+switch to run the management network and other VLAN's that are used internally.
+
+By default the switch will pull an IP address via DHCP and ``http://<switch IP>``
+will display a management webpage for the switch. You need to be able to access
+this webpage before you can update the configuration.
+
+Loading the Management Switch Configuration
+-------------------------------------------
+
+1. Obtain a copy of the Management switch configuration file (this ends in ``.pcc``).
+
+2.  Open the switch web interface at ``http://<switch IP>``. You may be
+    prompted to login - the default credentials are both ``admin``:
+
+    .. image:: images/pswi-000.png
+       :alt: User Login for switch
+       :scale: 50%
+
+3. Go to the "Management" section at bottom left:
+
+   .. image:: images/pswi-001.png
+       :alt: Update upload
+       :scale: 50%
+
+   In the "Update" section at left, drag the configuration file into the upload
+   area, or click Browse and select it.
+
+4. In the "Select switch configuration file to update" section, select
+   "config1", so it overwrites the default configuration.
+
+5. In the "Select switch configuration file to update" section, select
+   "config1", so it overwrites the default configuration. Click "Update".
+   You'll be prompted to reboot the switch, which you can do with the power
+   symbol at top right. You may be prompted to select an image used to reboot -
+   the "Previously Selected" is the correct one to use:
+
+   .. image:: images/pswi-003.png
+       :alt: Switch Image Select
+       :scale: 30%
+
+6. Wait for the switch to reboot:
+
+   .. image:: images/pswi-004.png
+       :alt: Switch Reboot
+       :scale: 50%
+
+   The switch is now configured with the correct VLANs for Pronto Use.  If you
+   go to Interfaces > VLANs should see a list of VLANs configured on the
+   switch:
+
+   .. image:: images/pswi-005.png
+       :alt: Mgmt VLANs
+       :scale: 50%
+
+
diff --git a/pronto_deployment_guide/overview.rst b/edge_deployment/overview.rst
similarity index 100%
rename from pronto_deployment_guide/overview.rst
rename to edge_deployment/overview.rst
diff --git a/pronto_deployment_guide/run_time_deployment.rst b/edge_deployment/runtime_deployment.rst
similarity index 84%
rename from pronto_deployment_guide/run_time_deployment.rst
rename to edge_deployment/runtime_deployment.rst
index 513f1fb..c97f55d 100644
--- a/pronto_deployment_guide/run_time_deployment.rst
+++ b/edge_deployment/runtime_deployment.rst
@@ -2,16 +2,20 @@
    SPDX-FileCopyrightText: © 2020 Open Networking Foundation <support@opennetworking.org>
    SPDX-License-Identifier: Apache-2.0
 
-==========================
-Aether Run-Time Deployment
-==========================
-This section describes how to install Aether edge runtime and Aether managed applications.
-We will be using GitOps based Aether CD pipeline for this,
-so we just need to create a patch to **aether-pod-configs** repository.
+Aether Runtime Deployment
+=========================
+
+This section describes how to install Aether edge runtime and Aether managed
+applications.
+
+We will be using GitOps based Aether CD pipeline for this, so we just need to
+create a patch to **aether-pod-configs** repository.
 
 Download aether-pod-configs repository
-======================================
-Download aether-pod-configs repository if you don't have it already in your develop machine.
+--------------------------------------
+
+Download the ``aether-pod-configs`` repository if you don't have it already in
+your development machine.
 
 .. code-block:: shell
 
@@ -19,7 +23,8 @@
    $ git clone "ssh://[username]@gerrit.opencord.org:29418/aether-pod-configs"
 
 Update global resource maps
-===========================
+---------------------------
+
 .. attention::
 
    Skip this section if you have already done the same step in the
@@ -30,9 +35,10 @@
 * user_map.tfvars
 * cluster_map.tfvars
 
-As a note, you can find several other global resource maps under the `production` directory.
-Resource definitions that need to be shared among clusters or are better managed in a
-single file to avoid configuration conflicts are maintained in this way.
+As a note, you can find several other global resource maps under the
+`production` directory.  Resource definitions that need to be shared among
+clusters or are better managed in a single file to avoid configuration
+conflicts are maintained in this way.
 
 .. code-block:: diff
 
@@ -98,9 +104,13 @@
    $ git review
 
 Create runtime configurations
-=============================
-In this step, we will add several Terraform configurations and overriding values for the managed applications.
-Run the following commands to auto-generate necessary files under the target ACE directory.
+-----------------------------
+
+In this step, we will add several Terraform configurations and overriding
+values for the managed applications.
+
+Run the following commands to auto-generate necessary files under the target
+ACE directory.
 
 .. code-block:: shell
 
@@ -124,7 +134,8 @@
    Created ../production/ace-test/app_values/omec-upf-pfcp-agent.yml
 
 Create a review request
-=======================
+-----------------------
+
 .. code-block:: shell
 
    $ cd $WORKDIR/aether-pod-configs
diff --git a/edge_deployment/server_bootstrap.rst b/edge_deployment/server_bootstrap.rst
new file mode 100644
index 0000000..c7fe5e1
--- /dev/null
+++ b/edge_deployment/server_bootstrap.rst
@@ -0,0 +1,293 @@
+..
+   SPDX-FileCopyrightText: © 2020 Open Networking Foundation <support@opennetworking.org>
+   SPDX-License-Identifier: Apache-2.0
+
+Server Bootstrap
+================
+
+Management Server Bootstrap
+"""""""""""""""""""""""""""
+
+The management server is bootstrapped into a customized version of the standard
+Ubuntu 18.04 OS installer.
+
+The `iPXE boot firmware <https://ipxe.org/>`_. is used to start this process
+and is built using the steps detailed in the `ipxe-build
+<https://gerrit.opencord.org/plugins/gitiles/ipxe-build>`_. repo, which
+generates both USB and PXE chainloadable boot images.
+
+Once a system has been started using these images started, these images will
+download a customized script from  an external webserver to continue the boot
+process. This iPXE to webserver connection is secured with mutual TLS
+authentication, enforced by the nginx webserver.
+
+The iPXE scripts are created by the `pxeboot
+<https://gerrit.opencord.org/plugins/gitiles/ansible/role/pxeboot>`_ role,
+which creates both a boot menu, downloads the appropriate binaries for
+bootstrapping an OS installation, and creates per-node installation preseed files.
+
+The preseed files contain configuration steps to install the OS from the
+upstream Ubuntu repos, as well as customization of packages and creating the
+``onfadmin`` user.
+
+Creating a bootable USB drive
+'''''''''''''''''''''''''''''
+
+1. Get a USB key. Can be tiny as the uncompressed image is floppy sized
+   (1.4MB).  Download the USB image file (``<date>_onf_ipxe.usb.zip``) on the
+   system you're using to write the USB key, and unzip it.
+
+2. Put a USB key in the system you're using to create the USB key, then
+   determine which USB device file it's at in ``/dev``.  You might look at the
+   end of the ``dmesg`` output on Linux/Unix or the output of ``diskutil
+   list`` on macOS.
+
+   Be very careful about this, as if you accidentally overwrite some other disk in
+   your system that would be highly problematic.
+
+3. Write the image to the device::
+
+      $ dd if=/path/to/20201116_onf_ipxe.usb of=/dev/sdg
+      2752+0 records in
+      2752+0 records out
+      1409024 bytes (1.4 MB, 1.3 MiB) copied, 2.0272 s, 695 kB/s
+
+  You may need to use `sudo` for this.
+
+Boot and Image Management Server
+''''''''''''''''''''''''''''''''
+
+1. Connect a USB keyboard and VGA monitor to the management node.  Put the USB
+   Key in one of the management node's USB ports (port 2 or 3):
+
+   .. image:: images/mgmtsrv-000.png
+       :alt: Management Server Ports
+       :scale: 50%
+
+2. Turn on the management node, and press the F11 key as it starts to get into
+   the Boot Menu:
+
+   .. image:: images/mgmtsrv-001.png
+       :alt: Management Server Boot Menu
+       :scale: 50%
+
+3. Select the USB key (in this case "PNY USB 2.0", your options may vary) and press return. You should see iPXE load:
+
+   .. image:: images/mgmtsrv-002.png
+       :alt: iPXE load
+       :scale: 50%
+
+4. A menu will appear which displays the system information and DHCP discovered
+   network settings (your network must provide the IP address to the management
+   server via DHCP):
+
+   Use the arrow keys to select "Ubuntu 18.04 Installer (fully automatic)":
+
+   .. image:: images/mgmtsrv-003.png
+       :alt: iPXE Menu
+       :scale: 50%
+
+   There is a 10 second default timeout if left untouched (it will continue the
+   system boot process) so restart the system if you miss the 10 second window.
+
+5. The Ubuntu 18.04 installer will be downloaded and booted:
+
+   .. image:: images/mgmtsrv-004.png
+       :alt: Ubuntu Boot
+       :scale: 50%
+
+6. Then the installer starts and takes around 10 minutes to install (depends on
+   your connection speed):
+
+   .. image:: images/mgmtsrv-005.png
+       :alt: Ubuntu Install
+       :scale: 50%
+
+
+7. At the end of the install, the system will restart and present you with a
+   login prompt:
+
+   .. image:: images/mgmtsrv-006.png
+       :alt: Ubuntu Install Complete
+       :scale: 50%
+
+
+Management Server Configuration
+'''''''''''''''''''''''''''''''
+
+Once the OS is installed on the management server, Ansible is used to remotely
+install software on the management server.
+
+To checkout the ONF ansible repo and enter the virtualenv with the tooling::
+
+  mkdir infra
+  cd infra
+  repo init -u ssh://<your gerrit username>@gerrit.opencord.org:29418/infra-manifest
+  repo sync
+  cd ansible
+  make galaxy
+  source venv_onfansible/bin/activate
+
+Obtain the ``undionly.kpxe`` iPXE artifact for bootstrapping the compute
+servers, and put it in the ``playbook/files`` directory.
+
+Next, create an inventory file to access the NetBox API.  An example is given
+in ``inventory/example-netbox.yml`` - duplicate this file and modify it. Fill
+in the ``api_endpoint`` address and ``token`` with an API key you get out of
+the NetBox instance.  List the IP Prefixes used by the site in the
+``ip_prefixes`` list.
+
+Next, run the ``scripts/netbox_edgeconfig.py`` to generate a host_vars file for
+the management server.  Assuming that the management server in the edge is
+named ``mgmtserver1.stage1.menlo``, you'd run::
+
+  python scripts/netbox_edgeconfig.py inventory/my-netbox.yml > inventory/host_vars/mgmtserver1.stage1.menlo.yml
+
+One manual change needs to be made to this output - edit the
+``inventory/host_vars/mgmtserver1.stage1.menlo.yml`` file and add the following
+to the bottom of the file, replacing the IP addresses with the management
+server IP address for each segment.
+
+In the case of the Fabric that has two leaves and IP ranges, add the Management
+server IP address used for the leaf that it is connected to, and then add a
+route for the other IP address range for the non-Management-connected leaf that
+is via the Fabric router address in the connected leaf range.
+
+This configures the `netplan <https://netplan.io>`_ on the management server,
+and creates a SNAT rule for the UE range route, and will be automated away
+soon::
+
+  # added manually
+  netprep_netplan:
+    ethernets:
+      eno2:
+        addresses:
+          - 10.0.0.1/25
+    vlans:
+      mgmt800:
+        id: 800
+        link: eno2
+        addresses:
+          - 10.0.0.129/25
+      fabr801:
+        id: 801
+        link: eno2
+        addresses:
+          - 10.0.1.129/25
+        routes:
+          - to: 10.0.1.0/25
+            via: 10.0.1.254
+            metric: 100
+
+  netprep_nftables_nat_postrouting: >
+    ip saddr 10.0.1.0/25 ip daddr 10.168.0.0/20 counter snat to 10.0.1.129;
+
+
+Using the ``inventory/example-aether.ini`` as a template, create an
+:doc:`ansible inventory <ansible:user_guide/intro_inventory>` file for the
+site. Change the device names, IP addresses, and ``onfadmin`` password to match
+the ones for this site.  The management server's configuration is in the
+``[aethermgmt]`` and corresponding ``[aethermgmt:vars]`` section.
+
+Then, to configure a management server, run::
+
+  ansible-playbook -i inventory/sitename.ini playbooks/aethermgmt-playbook.yml
+
+This installs software with the following functionality:
+
+- VLANs on second Ethernet port to provide connectivity to the rest of the pod.
+- Firewall with NAT for routing traffic
+- DHCP and TFTP for bootstrapping servers and switches
+- DNS for host naming and identification
+- HTTP server for serving files used for bootstrapping switches
+- Downloads the Tofino switch image
+- Creates user accounts for administrative access
+
+Compute Server Bootstrap
+""""""""""""""""""""""""
+
+Once the management server has finished installation, it will be set to offer
+the same iPXE bootstrap file to the computer.
+
+Each node will be booted, and when iPXE loads select the ``Ubuntu 18.04
+Installer (fully automatic)`` option.
+
+The nodes can be controlled remotely via their BMC management interfaces - if
+the BMC is at ``10.0.0.3`` a remote user can SSH into them with::
+
+  ssh -L 2443:10.0.0.3:443 onfadmin@<mgmt server ip>
+
+And then use their web browser to access the BMC at::
+
+  https://localhost:2443
+
+The default BMC credentials for the Pronto nodes are::
+
+  login: ADMIN
+  password: Admin123
+
+The BMC will also list all of the MAC addresses for the network interfaces
+(including BMC) that are built into the logic board of the system. Add-in
+network cards like the 40GbE ones used in compute servers aren't listed.
+
+To prepare the compute nodes, software must be installed on them.  As they
+can't be accessed directly from your local system, a :ref:`jump host
+<ansible:use_ssh_jump_hosts>` configuration is added, so the SSH connection
+goes through the management server to the compute systems behind it. Doing this
+requires a few steps:
+
+First, configure SSH to use Agent forwarding - create or edit your
+``~/.ssh/config`` file and add the following lines::
+
+  Host <management server IP>
+    ForwardAgent yes
+
+Then try to login to the management server, then the compute node::
+
+  $ ssh onfadmin@<management server IP>
+  Welcome to Ubuntu 18.04.5 LTS (GNU/Linux 5.4.0-54-generic x86_64)
+  ...
+  onfadmin@mgmtserver1:~$ ssh onfadmin@10.0.0.138
+  Welcome to Ubuntu 18.04.5 LTS (GNU/Linux 5.4.0-54-generic x86_64)
+  ...
+  onfadmin@node2:~$
+
+Being able to login to the compute nodes from the management node means that
+SSH Agent forwarding is working correctly.
+
+Verify that your inventory (Created earlier from the
+``inventory/example-aether.ini`` file) includes an ``[aethercompute]`` section
+that has all the names and IP addresses of the compute nodes in it.
+
+Then run a ping test::
+
+  ansible -i inventory/sitename.ini -m ping aethercompute
+
+It may ask you about authorized keys - answer ``yes`` for each host to trust the keys::
+
+  The authenticity of host '10.0.0.138 (<no hostip for proxy command>)' can't be established.
+  ECDSA key fingerprint is SHA256:...
+  Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
+
+You should then see a success message for each host::
+
+  node1.stage1.menlo | SUCCESS => {
+      "changed": false,
+      "ping": "pong"
+  }
+  node2.stage1.menlo | SUCCESS => {
+      "changed": false,
+      "ping": "pong"
+  }
+  ...
+
+Once you've seen this, run the playbook to install the prerequisites (Terraform
+user, Docker)::
+
+  ansible-playbook -i inventory/sitename.ini playbooks/aethercompute-playbook.yml
+
+Note that Docker is quite large and may take a few minutes for installation
+depending on internet connectivity.
+
+Now that these compute nodes have been brought up, the rest of the installation
+can continue.
diff --git a/edge_deployment/site_planning.rst b/edge_deployment/site_planning.rst
new file mode 100644
index 0000000..4af68f7
--- /dev/null
+++ b/edge_deployment/site_planning.rst
@@ -0,0 +1,298 @@
+..
+   SPDX-FileCopyrightText: © 2020 Open Networking Foundation <support@opennetworking.org>
+   SPDX-License-Identifier: Apache-2.0
+
+Site Planning
+=============
+
+Site Design in Netbox
+---------------------
+
+Once the hardware has been ordered, the installation can be planned.  The
+following information needs to be added to `NetBox
+<https://netbox.readthedocs.io/en/stable>`_ to describe each edge site:
+
+1. Add a Site for the edge (if one doesn't already exist), which has the
+   physical location and contact information for the edge.
+
+2. Add equipment Racks to the Site (if they don't already exist).
+
+3. Add a Tenant for the edge (who owns/manages it), assigned to the ``Pronto``
+   or ``Aether`` Tenant Group.
+
+4. Add a VRF (Routing Table) for the edge site. This is usually just the name
+   of the site.  Make sure that ``Enforce unique space`` is checked, so that IP
+   addresses within the VRF are forced to be unique, and that the Tenant Group
+   and Tenant are set.
+
+5. Add a VLAN Group to the edge site, which groups the site's VLANs and
+   requires that they have a unique VLAN number.
+
+6. Add VLANs for the edge site.  These should be assigned a VLAN Group, the
+   Site, and Tenant.
+
+   There can be multiple of the same VLAN in NetBox (VLANs are layer 2, and
+   local to the site), but not within the VLAN group.
+
+   The minimal list of VLANs:
+
+     * ADMIN 1
+     * UPLINK 10
+     * MGMT 800
+     * FAB 801
+
+   If you have multiple deployments at a site using the same management server,
+   add additional VLANs incremented by 10 for the MGMT/FAB - for example:
+
+     * DEVMGMT 810
+     * DEVFAB 801
+
+7. Add IP Prefixes for the site. This should have the Tenant and VRF assigned.
+
+   All edge IP prefixes fit into a ``/22`` sized block.
+
+   The description of the Prefix contains the DNS suffix for all Devices that
+   have IP addresses within this Prefix. The full DNS names are generated by
+   combining the first ``<devname>`` component of the Device names with this
+   suffix.
+
+   An examples using the ``10.0.0.0/22`` block. There are 4 edge
+   prefixes, with the following purposes:
+
+     * ``10.0.0.0/25``
+
+        * Has the Server BMC/LOM and Management Switch
+        * Assign the ADMIN 1 VLAN
+        * Set the description to ``admin.<deployment>.<site>.aetherproject.net`` (or
+          ``prontoproject.net``).
+
+     * ``10.0.0.128/25``
+
+        * Has the Server Management plane, Fabric Switch Management/BMC
+        * Assign MGMT 800 VLAN
+        * Set the description to ``<deployment>.<site>.aetherproject.net`` (or
+          ``prontoproject.net``).
+
+     * ``10.0.1.0/25``
+
+        * IP addresses of the qsfp0 port of the Compute Nodes to Fabric switches, devices
+          connected to the Fabric like the eNB
+        * Assign FAB 801 VLAN
+        * Set the description to ``fab1.<deployment>.<site>.aetherproject.net`` (or
+          ``prontoproject.net``).
+
+     * ``10.0.1.128/25``
+
+        * IP addresses of the qsfp1 port of the Compute Nodes to fabric switches
+        * Assign FAB 801 VLAN
+        * Set the description to ``fab2.<deployment>.<site>.aetherproject.net`` (or
+          ``prontoproject.net``).
+
+   There also needs to be a parent range of the two fabric ranges added:
+
+     * ``10.0.1.0/24``
+
+        * This is used to configure the correct routes, DNS, and TFTP servers
+          provided by DHCP to the equipment that is connected to the fabric
+          leaf switch that the management server (which provides those
+          services) is not connected to.
+
+   Additionally, these edge prefixes are used for Kubernetes but don't need to
+   be created in NetBox:
+
+     * ``10.0.2.0/24``
+
+        * Kubernetes Pod IP's
+
+     * ``10.0.3.0/24``
+
+        * Kubernetes Cluster IP's
+
+8. Add Devices to the site, for each piece of equipment. These are named with a
+   scheme similar to the DNS names used for the pod, given in this format::
+
+     <devname>.<deployment>.<site>
+
+   Examples::
+
+     mgmtserver1.ops1.tucson
+     node1.stage1.menlo
+
+   Note that these names are transformed into DNS names using the Prefixes, and
+   may have additional components - ``admin`` or ``fabric`` may be added after
+   the ``<devname>`` for devices on those networks.
+
+   Set the following fields when creating a device:
+
+     * Site
+     * Tenant
+     * Rack & Rack Position
+     * Serial number
+
+   If a specific Device Type doesn't exist for the device, it must be created,
+   which is detailed in the NetBox documentation, or ask the OPs team for help.
+
+   See `Rackmount of Equipment`_ below for guidance on how equipment should be
+   mounted in the Rack.
+
+9. Add Services to the management server:
+
+    * name: ``dns``
+      protocol: UDP
+      port: 53
+
+    * name: ``tftp``
+      protocol: UDP
+      port: 69
+
+   These are used by the DHCP and DNS config to know which servers offer
+   DNS or TFTP service.
+
+10. Set the MAC address for the physical interfaces on the device.
+
+   You may also need to add physical network interfaces if  aren't already
+   created by the Device Type.  An example would be if additional add-in
+   network cards were installed.
+
+11. Add any virtual interfaces to the Devices. When creating a virtual
+    interface, it should have it's ``label`` field set to the physical network
+    interface that it is assigned
+
+    These are needed are two cases for the Pronto deployment:
+
+     1. On the Management Server, there should bet (at least) two VLAN
+        interfaces created attached to the ``eno2`` network port, which
+        are used to provide connectivity to the management plane and fabric.
+        These should be named ``<name of vlan><vlan ID>``, so the MGMT 800 VLAN
+        would become a virtual interface named ``mgmt800``, with the label
+        ``eno2``.
+
+     2. On the Fabric switches, the ``eth0`` port is shared between the OpenBMC
+        interface and the ONIE/ONL installation.  Add a ``bmc`` virtual
+        interface with a label of ``eth0`` on each fabric switch, and check the
+        ``OOB Management`` checkbox.
+
+12. Create IP addresses for the physical and virtual interfaces.  These should
+    have the Tenant and VRF set.
+
+    The Management Server should always have the first IP address in each
+    range, and they should be incremental, in this order. Examples are given as
+    if there was a single instance of each device - adding additional devices
+    would increment the later IP addresses.
+
+      * Management Server
+
+          * ``eno1`` - site provided public IP address, or blank if DHCP
+            provided
+
+          * ``eno2`` - 10.0.0.1/25 (first of ADMIN) - set as primary IP
+          * ``bmc`` - 10.0.0.2/25 (next of ADMIN)
+          * ``mgmt800`` - 10.0.0.129/25 (first of MGMT)
+          * ``fab801`` - 10.0.1.1/25 (first of FAB)
+
+      * Management Switch
+
+          * ``gbe1`` - 10.0.0.3/25 (next of ADMIN) - set as primary IP
+
+      * Fabric Switch
+
+          * ``eth0`` - 10.0.0.130/25 (next of MGMT), set as primary IP
+          * ``bmc`` - 10.0.0.131/25
+
+      * Compute Server
+
+          * ``eth0`` - 10.0.0.132/25 (next of MGMT), set as primary IP
+          * ``bmc`` - 10.0.0.4/25 (next of ADMIN)
+          * ``qsfp0`` - 10.0.1.2/25 (next of FAB)
+          * ``qsfp1`` - 10.0.1.3/25
+
+      * Other Fabric devices (eNB, etc.)
+
+          * ``eth0`` or other primary interface - 10.0.1.4/25 (next of FAB)
+
+13. Add DHCP ranges to the IP Prefixes for IP's that aren't reserved. These are
+    done like any other IP Address, but with the ``Status`` field is set to
+    ``DHCP``, and they'll consume the entire range of IP addresses given in the
+    CIDR mask.
+
+    For example ``10.0.0.32/27`` as a DHCP block would take up 1/4 of the ADMIN
+    prefix.
+
+14. Add router IP reservations to the IP Prefix for both Fabric prefixes. These
+    are IP addresses used by ONOS to route traffic to the other leaf, and have
+    the following attributes:
+
+    - Have the last usable address in range (in the ``/25`` fabric examples
+      above, these would be ``10.0.1.126/25`` and ``10.0.1.254/25``)
+
+    - Have a ``Status`` of ``Reserved``, and the VRF, Tenant Group, and Tenant
+      set.
+
+    - The Description must start with the word ``router``, such as: ``router
+      for leaf1 Fabric``
+
+    - A custom field named ``RFC3442 Routes`` is set to the CIDR IP address of
+      the opposite leaf - if the leaf's prefix is ``10.0.1.0/25`` and the
+      router IP is ``10.0.1.126/25`` then ``RFC3442 Routes`` should be set to
+      ``10.0.1.128\25`` (and the reverse - on ``10.0.1.254/25`` the ``RFC3442
+      Routes`` would be set to be ``10.0.1.0/25``).  This creates an `RFC3442
+      Classless Static Route Option <https://tools.ietf.org/html/rfc3442>`_
+      for the subnet in DHCP.
+
+15. Add Cables between physical interfaces on the devices
+
+    The topology needs to match the logical diagram presented in the
+    :ref:`network_cable_plan`.  Note that many of the management interfaces
+    need to be located either on the MGMT or ADMIN VLANs, and the management
+    switch is
+    used to provide that separation.
+
+Rackmount of Equipment
+----------------------
+
+Most of the Pronto equipment has a 19" rackmount form factor.
+
+Guidelines for mounting this equipment:
+
+- The EdgeCore Wedge Switches have a front-to-back (aka "port-to-power") fan
+  configuration, so hot air exhaust is out the back of the switch near the
+  power inlets, away from the 32 QSFP network ports on the front of the switch.
+
+- The full-depth 1U and 2U Supermicro servers also have front-to-back airflow
+  but have most of their ports on the rear of the device.
+
+- Airflow through the rack should be in one direction to avoid heat being
+  pulled from one device into another.  This means that to connect the QSFP
+  network ports from the servers to the switches, cabling should be routed
+  through the rack from front (switch) to back (server).  Empty rack spaces
+  should be reserved for this purpose.
+
+- The short-depth management HP Switch and 1U Supermicro servers should be
+  mounted on the rear of the rack.  They both don't generate an appreciable
+  amount of heat, so the airflow direction isn't a significant factor in
+  racking them.
+
+Inventory
+---------
+
+Once equipment arrives, any device needs to be recorded in inventory if it:
+
+1. Connects to the network (has a MAC address)
+2. Has a serial number
+3. Isn't a subcomponent (disk, add-in card, linecard, etc.) of a larger device.
+
+The following information should be recorded for every device:
+
+- Manufacturer
+- Model
+- Serial Number
+- MAC address (for the primary and any management/BMC/IPMI interfaces)
+
+This information should be be added to the corresponding Devices within the ONF
+NetBox instance.  The accuracy of this information is very important as it is
+used in bootstrapping the compute systems, which is currently done by Serial
+Number, as reported to iPXE by SMBIOS.
+
+Once inventory has been completed, let the Infra team know, and the pxeboot
+configuration will be generated to have the OS preseed files corresponding to the
+new servers based on their serial numbers.
diff --git a/pronto_deployment_guide/tost_deployment.rst b/edge_deployment/tost_deployment.rst
similarity index 92%
rename from pronto_deployment_guide/tost_deployment.rst
rename to edge_deployment/tost_deployment.rst
index 97ae868..2ac0225 100644
--- a/pronto_deployment_guide/tost_deployment.rst
+++ b/edge_deployment/tost_deployment.rst
@@ -311,24 +311,32 @@
 
 - **onos-netcfg.json** in **onos** folder
 - Chassis config in **stratum** folder
-  There should be one chassis config for each switch. The file name needs to be **${hostname}-chassis-config.pb.txt**
-- **telegraf.yaml** in **telegraf** folder need to be updated with all switch IP addresses
+  There should be one chassis config for each switch. The file name needs to be
+  **${hostname}-chassis-config.pb.txt**
+- **telegraf.yaml** in **telegraf** folder need to be updated with all switch
+  IP addresses
 
 Double check these files and make sure they have been updated accordingly.
 
 
 Create a review request
 ^^^^^^^^^^^^^^^^^^^^^^^
-We also need to create a gerrit review request, similar to what we have done in the **Aether Run-Time Deployment**.
-Please refer to :doc:`Aether Run-Time Deployment <run_time_deployment>` to create a review request.
+We also need to create a gerrit review request, similar to what we have done in
+the **Aether Runtime Deployment**.
+
+Please refer to :doc:`Aether Runtime Deployment <runtime_deployment>` to
+create a review request.
 
 
 Create TOST deployment job in Jenkins
 =====================================
-There are three major components in the Jenkins system, the Jenkins pipeline and Jenkins Job Builder and Jenkins Job.
+There are three major components in the Jenkins system, the Jenkins pipeline
+and Jenkins Job Builder and Jenkins Job.
 
-We follow the Infrastructure as Code principle to place three major components in a Git repo, **aether-ci-management**
-Download **aether-ci-management** repository .
+We follow the Infrastructure as Code principle to place three major components
+in a Git repo, ``aether-ci-management``
+
+Download the ``aether-ci-management`` repository.
 
 .. code-block:: shell
 
@@ -336,7 +344,8 @@
    $ git clone "ssh://[username]@gerrit.opencord.org:29418/aether-ci-management"
 
 
-Here is the example of folder structure, we put everything related to three major components under the jjb folder.
+Here is the example of folder structure, we put everything related to three
+major components under the jjb folder.
 
 .. code-block:: console
 
@@ -356,21 +365,27 @@
 
 Jenkins pipeline
 ^^^^^^^^^^^^^^^^
-Jenkins pipeline runs the Terraform scripts to install desired applications into the specified Kubernetes cluster.
+Jenkins pipeline runs the Terraform scripts to install desired applications
+into the specified Kubernetes cluster.
 
-Both ONOS and Stratum will read configuration files (network config, chassis config) from aether-pod-config.
-The default git branch is master.
-For testing purpose, we also provide two parameters to specify the number of reviews and patchset.
+Both ONOS and Stratum will read configuration files (network config, chassis
+config) from aether-pod-config.
+
+The default git branch is master.  For testing purpose, we also provide two
+parameters to specify the number of reviews and patchset.
+
 We will explain more in the next section.
 
 .. note::
 
    Currently, we don’t perform the incremental upgrade for TOST application.
    Instead, we perform the clean installation.
-   In the pipeline script, Terraform will destroy all existing resources and then create them again.
+   In the pipeline script, Terraform will destroy all existing resources and
+   then create them again.
 
 
-We put all pipeline scripts under the pipeline directory, the language of the pipeline script is groovy.
+We put all pipeline scripts under the pipeline directory, the language of the
+pipeline script is groovy.
 
 .. code-block:: console
 
@@ -399,9 +414,10 @@
 3. tost-telegraf.groovy
 4. tost.groovy
 
-tost-[onos/stratum/telegraf].groovy are used to deploy the individual application respectively,
-and tost.groovy is a high level script, used to deploy the TOST application, it will execute
-the above three scripts in its pipeline script.
+tost-[onos/stratum/telegraf].groovy are used to deploy the individual
+application respectively, and tost.groovy is a high level script, used to
+deploy the TOST application, it will execute the above three scripts in its
+pipeline script.
 
 
 Jenkins jobs
@@ -415,9 +431,13 @@
 - Source code management
 
 We created one Jenkins job for each TOST component, per Aether edge.
-We have four Jenkins jobs (HostPath provisioner, ONOS, Stratum and Telegraf) for each edge as of today.
 
-There are 10+ parameters in Jenkins jobs and they can be divided into two parts, cluster-level and application-level.
+We have four Jenkins jobs (HostPath provisioner, ONOS, Stratum and Telegraf)
+for each edge as of today.
+
+There are 10+ parameters in Jenkins jobs and they can be divided into two
+parts, cluster-level and application-level.
+
 Here is an example of supported parameters.
 
 .. image:: images/jenkins-onos-params.png
@@ -430,12 +450,13 @@
   the config for aether-pod-configs repo from a specified gerrit review, instead of the
   HEAD branch. It’s good for developer to test its change before merge.
 - **onos_user**: used to login ONOS controller
-- **git_repo/git_server/git_user/git_password_env**: information of git repository, **git_password_env** is a key for
-  Jenkins Credential system.
+- **git_repo/git_server/git_user/git_password_env**: information of git
+  repository, **git_password_env** is a key for Jenkins Credential system.
 
 Cluster level
 """""""""""""
-- **gcp_credential**: Google Cloud Platform credential for remote storage, used by Terraform.
+- **gcp_credential**: Google Cloud Platform credential for remote storage, used
+  by Terraform.
 - **terraform_dir**: The root directory of the TOST directory.
 - **rancher_cluster**: target Rancher cluster name.
 - **rancher_api_env**: Rancher credential to access Rancher, used by Terraform.
@@ -447,12 +468,13 @@
 Jenkins Job Builder (JJB)
 ^^^^^^^^^^^^^^^^^^^^^^^^^
 
-We prefer to apply the IaC (Infrastructure as Code) for everything.
-We use the JJB (Jenkins Job Builder) to create new Jenkins Job, including the Jenkins pipeline.
-We need to clone a set of Jenkins jobs when a new edge is deployed.
+We prefer to apply the IaC (Infrastructure as Code) for everything.  We use the
+JJB (Jenkins Job Builder) to create new Jenkins Job, including the Jenkins
+pipeline.  We need to clone a set of Jenkins jobs when a new edge is deployed.
 
-In order to provide the flexibility and avoid re-inventing the wheel, we used the job template to declare your job.
-Thanks to the JJB, we can use the parameters in the job template to render different kinds of jobs easily.
+In order to provide the flexibility and avoid re-inventing the wheel, we used
+the job template to declare your job.  Thanks to the JJB, we can use the
+parameters in the job template to render different kinds of jobs easily.
 
 All the template files are placed under templates directory.
 
@@ -480,8 +502,8 @@
    ├── verify-licensed.yaml
    └── versioning.yaml
 
-
-we defined all TOST required job templates in tost.yaml and here is its partial content.
+We defined all TOST required job templates in tost.yaml and here is its partial
+content.
 
 .. code-block:: yaml
 
diff --git a/pronto_deployment_guide/troubleshooting.rst b/edge_deployment/troubleshooting.rst
similarity index 100%
rename from pronto_deployment_guide/troubleshooting.rst
rename to edge_deployment/troubleshooting.rst
diff --git a/edge_deployment/vpn_bootstrap.rst b/edge_deployment/vpn_bootstrap.rst
new file mode 100644
index 0000000..223e3d8
--- /dev/null
+++ b/edge_deployment/vpn_bootstrap.rst
@@ -0,0 +1,309 @@
+..
+   SPDX-FileCopyrightText: © 2020 Open Networking Foundation <support@opennetworking.org>
+   SPDX-License-Identifier: Apache-2.0
+
+VPN Bootstrap
+=============
+
+This section walks you through how to set up a VPN between ACE and Aether
+Central in GCP.  We will be using GitOps based Aether CD pipeline for this, so
+we just need to create a patch to **aether-pod-configs** repository.  Note that
+some of the steps described here are not directly related to setting up a VPN,
+but rather are a prerequisite for adding a new ACE.
+
+.. attention::
+
+   If you are adding another ACE to an existing VPN connection, go to
+   :ref:`Add ACE to an existing VPN connection <add_ace_to_vpn>`
+
+Before you begin
+----------------
+
+* Make sure firewall in front of ACE allows UDP port 500, UDP port 4500, and
+  ESP packets from **gcpvpn1.infra.aetherproject.net(35.242.47.15)** and
+  **gcpvpn2.infra.aetherproject.net(34.104.68.78)**
+
+* Make sure that the external IP on ACE side is owned by or routed to the
+  management node
+
+To help your understanding, the following sample ACE environment will be used
+in the rest of this section.  Make sure to replace the sample values when you
+actually create a review request.
+
++-----------------------------+----------------------------------+
+| Management node external IP | 128.105.144.189                  |
++-----------------------------+----------------------------------+
+| ASN                         | 65003                            |
++-----------------------------+----------------------------------+
+| GCP BGP IP address          | Tunnel 1: 169.254.0.9/30         |
+|                             +----------------------------------+
+|                             | Tunnel 2: 169.254.1.9/30         |
++-----------------------------+----------------------------------+
+| ACE BGP IP address          | Tunnel 1: 169.254.0.10/30        |
+|                             +----------------------------------+
+|                             | Tunnel 2: 169.254.1.10/30        |
++-----------------------------+----------------------------------+
+| PSK                         | UMAoZA7blv6gd3IaArDqgK2s0sDB8mlI |
++-----------------------------+----------------------------------+
+| Management Subnet           | 10.91.0.0/24                     |
++-----------------------------+----------------------------------+
+| K8S Subnet                  | Pod IP: 10.66.0.0/17             |
+|                             +----------------------------------+
+|                             | Cluster IP: 10.66.128.0/17       |
++-----------------------------+----------------------------------+
+
+Download aether-pod-configs repository
+--------------------------------------
+
+.. code-block:: shell
+
+   $ cd $WORKDIR
+   $ git clone "ssh://[username]@gerrit.opencord.org:29418/aether-pod-configs"
+
+.. _update_global_resource:
+
+Update global resource maps
+---------------------------
+
+Add a new ACE information at the end of the following global resource maps.
+
+* ``user_map.tfvars``
+* ``cluster_map.tfvars``
+* ``vpn_map.tfvars``
+
+As a note, you can find several other global resource maps under the
+``production`` directory.  Resource definitions that need to be shared among
+clusters or are better managed in a single file to avoid configuration
+conflicts are maintained in this way.
+
+.. code-block:: diff
+
+   $ cd $WORKDIR/aether-pod-configs/production
+   $ vi user_map.tfvars
+
+   # Add the new cluster admin user at the end of the map
+   $ git diff user_map.tfvars
+   --- a/production/user_map.tfvars
+   +++ b/production/user_map.tfvars
+   @@ user_map = {
+      username      = "menlo"
+      password      = "changeme"
+      global_roles  = ["user-base", "catalogs-use"]
+   +  },
+   +  test_admin = {
+   +    username      = "test"
+   +    password      = "changeme"
+   +    global_roles  = ["user-base", "catalogs-use"]
+      }
+   }
+
+.. code-block:: diff
+
+   $ cd $WORKDIR/aether-pod-configs/production
+   $ vi cluster_map.tfvars
+
+   # Add the new K8S cluster information at the end of the map
+   $ git diff cluster_map.tfvars
+   --- a/production/cluster_map.tfvars
+   +++ b/production/cluster_map.tfvars
+   @@ cluster_map = {
+         kube_dns_cluster_ip     = "10.53.128.10"
+         cluster_domain          = "prd.menlo.aetherproject.net"
+         calico_ip_detect_method = "can-reach=www.google.com"
+   +    },
+   +    ace-test = {
+   +      cluster_name            = "ace-test"
+   +      management_subnets      = ["10.91.0.0/24"]
+   +      k8s_version             = "v1.18.8-rancher1-1"
+   +      k8s_pod_range           = "10.66.0.0/17"
+   +      k8s_cluster_ip_range    = "10.66.128.0/17"
+   +      kube_dns_cluster_ip     = "10.66.128.10"
+   +      cluster_domain          = "prd.test.aetherproject.net"
+   +      calico_ip_detect_method = "can-reach=www.google.com"
+         }
+      }
+   }
+
+.. code-block:: diff
+
+   $ cd $WORKDIR/aether-pod-configs/production
+   $ vi vpn_map.tfvars
+
+   # Add VPN and tunnel information at the end of the map
+   $ git diff vpn_map.tfvars
+   --- a/production/vpn_map.tfvars
+   +++ b/production/vpn_map.tfvars
+   @@ vpn_map = {
+      bgp_peer_ip_address_1    = "169.254.0.6"
+      bgp_peer_ip_range_2      = "169.254.1.5/30"
+      bgp_peer_ip_address_2    = "169.254.1.6"
+   +  },
+   +  ace-test = {
+   +    peer_name                = "production-ace-test"
+   +    peer_vpn_gateway_address = "128.105.144.189"
+   +    tunnel_shared_secret     = "UMAoZA7blv6gd3IaArDqgK2s0sDB8mlI"
+   +    bgp_peer_asn             = "65003"
+   +    bgp_peer_ip_range_1      = "169.254.0.9/30"
+   +    bgp_peer_ip_address_1    = "169.254.0.10"
+   +    bgp_peer_ip_range_2      = "169.254.1.9/30"
+   +    bgp_peer_ip_address_2    = "169.254.1.10"
+      }
+   }
+
+.. note::
+   Unless you have a specific requirement, set ASN and BGP addresses to the next available values in the map.
+
+
+Create ACE specific configurations
+----------------------------------
+
+In this step, we will create a directory under `production` with the same name
+as ACE, and add several Terraform configurations and Ansible inventory needed
+to configure a VPN connection.
+
+Throughout the deployment procedure, this directory will contain all ACE
+specific configurations.
+
+Run the following commands to auto-generate necessary files under the target
+ACE directory.
+
+.. code-block:: shell
+
+   $ cd $WORKDIR/aether-pod-configs/tools
+   $ cp ace_env /tmp/ace_env
+   $ vi /tmp/ace_env
+   # Set environment variables
+
+   $ source /tmp/ace_env
+   $ make vpn
+   Created ../production/ace-test
+   Created ../production/ace-test/main.tf
+   Created ../production/ace-test/variables.tf
+   Created ../production/ace-test/gcp_fw.tf
+   Created ../production/ace-test/gcp_ha_vpn.tf
+   Created ../production/ace-test/ansible
+   Created ../production/ace-test/backend.tf
+   Created ../production/ace-test/cluster_val.tfvars
+   Created ../production/ace-test/ansible/hosts.ini
+   Created ../production/ace-test/ansible/extra_vars.yml
+
+.. attention::
+   The predefined templates are tailored to Pronto BOM. You'll need to fix `cluster_val.tfvars` and `ansible/extra_vars.yml`
+   when using a different BOM.
+
+Create a review request
+-----------------------
+
+.. code-block:: shell
+
+   $ cd $WORKDIR/aether-pod-configs/production
+   $ git status
+   On branch tools
+   Changes not staged for commit:
+
+      modified:   cluster_map.tfvars
+      modified:   user_map.tfvars
+      modified:   vpn_map.tfvars
+
+   Untracked files:
+   (use "git add <file>..." to include in what will be committed)
+
+      ace-test/
+
+   $ git add .
+   $ git commit -m "Add test ACE"
+   $ git review
+
+Once the review request is accepted and merged,
+CD pipeline will create VPN tunnels on both GCP and the management node.
+
+Verify VPN connection
+---------------------
+
+You can verify the VPN connections after successful post-merge job by checking
+the routing table on the management node and trying to ping to one of the
+central cluster VMs.
+
+Make sure two tunnel interfaces, `gcp_tunnel1` and `gcp_tunnel2`, exist
+and three additional routing entries via one of the tunnel interfaces.
+
+.. code-block:: shell
+
+   # Verify routings
+   $ netstat -rn
+   Kernel IP routing table
+   Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
+   0.0.0.0         128.105.144.1   0.0.0.0         UG        0 0          0 eno1
+   10.45.128.0     169.254.0.9     255.255.128.0   UG        0 0          0 gcp_tunnel1
+   10.52.128.0     169.254.0.9     255.255.128.0   UG        0 0          0 gcp_tunnel1
+   10.66.128.0     10.91.0.8       255.255.128.0   UG        0 0          0 eno1
+   10.91.0.0       0.0.0.0         255.255.255.0   U         0 0          0 eno1
+   10.168.0.0      169.254.0.9     255.255.240.0   UG        0 0          0 gcp_tunnel1
+   128.105.144.0   0.0.0.0         255.255.252.0   U         0 0          0 eno1
+   169.254.0.8     0.0.0.0         255.255.255.252 U         0 0          0 gcp_tunnel1
+   169.254.1.8     0.0.0.0         255.255.255.252 U         0 0          0 gcp_tunnel2
+
+   # Verify ACC VM access
+   $ ping 10.168.0.6
+
+   # Verify ACC K8S cluster access
+   $ nslookup kube-dns.kube-system.svc.prd.acc.gcp.aetherproject.net 10.52.128.10
+
+You can further verify whether the ACE routes are propagated well to GCP
+by checking GCP dashboard **VPC Network > Routes > Dynamic**.
+
+
+Post VPN setup
+--------------
+
+Once you verify the VPN connections, please update `ansible` directory name to
+`_ansible` to prevent the ansible playbook from running again.  Note that it is
+no harm to re-run the ansible playbook but not recommended.
+
+.. code-block:: shell
+
+   $ cd $WORKDIR/aether-pod-configs/production/$ACE_NAME
+   $ mv ansible _ansible
+   $ git add .
+   $ git commit -m "Mark ansible done for test ACE"
+   $ git review
+
+.. _add_ace_to_vpn:
+
+Add another ACE to an existing VPN connection
+"""""""""""""""""""""""""""""""""""""""""""""
+
+VPN connections can be shared when there are multiple ACE clusters in a site.
+In order to add ACE to an existing VPN connection, you'll have to SSH into the
+management node and manually update BIRD configuration.
+
+.. note::
+
+   This step needs improvements in the future.
+
+.. code-block:: shell
+
+   $ sudo vi /etc/bird/bird.conf
+   protocol static {
+      ...
+      route 10.66.128.0/17 via 10.91.0.10;
+
+      # Add routings for the new ACE's K8S cluster IP range via cluster nodes
+      # TODO: Configure iBGP peering with Calico nodes and dynamically learn these routings
+      route <NEW-ACE-CLUSTER-IP> via <SERVER1>
+      route <NEW-ACE-CLUSTER-IP> via <SERVER2>
+      route <NEW-ACE-CLUSTER-IP> via <SERVER3>
+   }
+
+   filter gcp_tunnel_out {
+      # Add the new ACE's K8S cluster IP range and the management subnet if required to the list
+      if (net ~ [ 10.91.0.0/24, 10.66.128.0/17, <NEW-ACE-CLUSTER-IP-RANGE> ]) then accept;
+      else reject;
+   }
+   # Save and exit
+
+   $ sudo birdc configure
+
+   # Confirm the static routes are added
+   $ sudo birdc show route
+
diff --git a/index.rst b/index.rst
index bfff747..866ff58 100644
--- a/index.rst
+++ b/index.rst
@@ -8,20 +8,13 @@
 can be found on the `ONF Wiki <https://wiki.opennetworking.org/>`_.
 
 .. toctree::
-   :maxdepth: 1
-   :caption: Overview
-   :hidden:
-   :glob:
-
-   readme
-
-.. toctree::
    :maxdepth: 3
    :caption: Operations
    :hidden:
    :glob:
 
-   operations
+   operations/procedures
+   operations/sop
 
 .. toctree::
    :maxdepth: 3
@@ -29,12 +22,30 @@
    :hidden:
    :glob:
 
-   pronto_deployment_guide/overview.rst
-   pronto_deployment_guide/hw_installation.rst
-   pronto_deployment_guide/bootstrapping.rst
-   pronto_deployment_guide/run_time_deployment.rst
-   pronto_deployment_guide/tost_deployment.rst
-   pronto_deployment_guide/connectivity_service_update.rst
-   pronto_deployment_guide/enb_installation.rst
-   pronto_deployment_guide/acceptance_test_specification.rst
-   pronto_deployment_guide/troubleshooting.rst
+   edge_deployment/overview
+   edge_deployment/site_planning
+   edge_deployment/management_net_bootstrap
+   edge_deployment/server_bootstrap
+   edge_deployment/fabric_switch_bootstrap
+   edge_deployment/vpn_bootstrap
+   edge_deployment/runtime_deployment
+   edge_deployment/tost_deployment
+   edge_deployment/connectivity_service_update
+   edge_deployment/enb_installation
+   edge_deployment/troubleshooting
+
+.. toctree::
+   :maxdepth: 3
+   :caption: Test Automation
+   :hidden:
+   :glob:
+
+   testing/acceptance_specification
+
+.. toctree::
+   :maxdepth: 1
+   :caption: Meta
+   :hidden:
+   :glob:
+
+   readme
diff --git a/operations.rst b/operations/procedures.rst
similarity index 96%
rename from operations.rst
rename to operations/procedures.rst
index a3b1e14..4c16b1e 100644
--- a/operations.rst
+++ b/operations/procedures.rst
@@ -2,8 +2,8 @@
    SPDX-FileCopyrightText: © 2020 Open Networking Foundation <support@opennetworking.org>
    SPDX-License-Identifier: Apache-2.0
 
-Operations
-==========
+General Procedures
+==================
 
 Edge shutdown procedure
 -----------------------
diff --git a/operations/sop.rst b/operations/sop.rst
new file mode 100644
index 0000000..94fd81a
--- /dev/null
+++ b/operations/sop.rst
@@ -0,0 +1,8 @@
+..
+   SPDX-FileCopyrightText: © 2020 Open Networking Foundation <support@opennetworking.org>
+   SPDX-License-Identifier: Apache-2.0
+
+Standard Operating Procedures
+=============================
+
+
diff --git a/pronto_deployment_guide/bootstrapping.rst b/pronto_deployment_guide/bootstrapping.rst
deleted file mode 100644
index 5b0d895..0000000
--- a/pronto_deployment_guide/bootstrapping.rst
+++ /dev/null
@@ -1,468 +0,0 @@
-..
-   SPDX-FileCopyrightText: © 2020 Open Networking Foundation <support@opennetworking.org>
-   SPDX-License-Identifier: Apache-2.0
-
-Bootstrapping
-=============
-
-.. _switch-install:
-
-OS Installation - Switches
---------------------------
-
-The installation of the ONL OS image on the fabric switches uses the DHCP and
-HTTP server set up on the management server.
-
-The default image is downloaded during that installation process by the
-``onieboot`` role. Make changes to that roll and rerun the management playbook
-to download a newer switch image.
-
-Preparation
-"""""""""""
-
-The switches have a single ethernet port that is shared between OpenBMC and
-ONL. Find out the MAC addresses for both of these ports and enter it into
-NetBox.
-
-Change boot mode to ONIE Rescue mode
-""""""""""""""""""""""""""""""""""""
-
-In order to reinstall an ONL image, you must change the ONIE bootloader to
-"Rescue Mode".
-
-Once the switch is powered on, it should retrieve an IP address on the OpenBMC
-interface with DHCP. OpenBMC uses these default credentials::
-
-  username: root
-  password: 0penBmc
-
-Login to OpenBMC with SSH::
-
-  $ ssh root@10.0.0.131
-  The authenticity of host '10.0.0.131 (10.0.0.131)' can't be established.
-  ECDSA key fingerprint is SHA256:...
-  Are you sure you want to continue connecting (yes/no)? yes
-  Warning: Permanently added '10.0.0.131' (ECDSA) to the list of known hosts.
-  root@10.0.0.131's password:
-  root@bmc:~#
-
-Using the Serial-over-LAN Console, enter ONL::
-
-  root@bmc:~# /usr/local/bin/sol.sh
-  You are in SOL session.
-  Use ctrl-x to quit.
-  -----------------------
-
-  root@onl:~#
-
-.. note::
-  If `sol.sh` is unresponsive, please try to restart the mainboard with::
-
-    root@onl:~# wedge_power.sh restart
-
-
-Change the boot mode to rescue mode with the command ``onl-onie-boot-mode
-rescue``, and reboot::
-
-  root@onl:~# onl-onie-boot-mode rescue
-  [1053033.768512] EXT4-fs (sda2): mounted filesystem with ordered data mode. Opts: (null)
-  [1053033.936893] EXT4-fs (sda3): re-mounted. Opts: (null)
-  [1053033.996727] EXT4-fs (sda3): re-mounted. Opts: (null)
-  The system will boot into ONIE rescue mode at the next restart.
-  root@onl:~# reboot
-
-At this point, ONL will go through it's shutdown sequence and ONIE will start.
-If it does not start right away, press the Enter/Return key a few times - it
-may show you a boot selection screen. Pick ``ONIE`` and ``Rescue`` if given a
-choice.
-
-Installing an ONL image over HTTP
-"""""""""""""""""""""""""""""""""
-
-Now that the switch is in Rescue mode
-
-First, activate the Console by pressing Enter::
-
-  discover: Rescue mode detected.  Installer disabled.
-
-  Please press Enter to activate this console.
-  To check the install status inspect /var/log/onie.log.
-  Try this:  tail -f /var/log/onie.log
-
-  ** Rescue Mode Enabled **
-  ONIE:/ #
-
-Then run the ``onie-nos-install`` command, with the URL of the management
-server on the management network segment::
-
-  ONIE:/ # onie-nos-install http://10.0.0.129/onie-installer
-  discover: Rescue mode detected. No discover stopped.
-  ONIE: Unable to find 'Serial Number' TLV in EEPROM data.
-  Info: Fetching http://10.0.0.129/onie-installer ...
-  Connecting to 10.0.0.129 (10.0.0.129:80)
-  installer            100% |*******************************|   322M  0:00:00 ETA
-  ONIE: Executing installer: http://10.0.0.129/onie-installer
-  installer: computing checksum of original archive
-  installer: checksum is OK
-  ...
-
-The installation will now start, and then ONL will boot culminating in::
-
-  Open Network Linux OS ONL-wedge100bf-32qs, 2020-11-04.19:44-64100e9
-
-  localhost login:
-
-The default ONL login is::
-
-  username: root
-  password: onl
-
-If you login, you can verify that the switch is getting it's IP address via
-DHCP::
-
-  root@localhost:~# ip addr
-  ...
-  3: ma1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
-      link/ether 00:90:fb:5c:e1:97 brd ff:ff:ff:ff:ff:ff
-      inet 10.0.0.130/25 brd 10.0.0.255 scope global ma1
-  ...
-
-
-Post-ONL Configuration
-""""""""""""""""""""""
-
-A ``terraform`` user must be created on the switches to allow them to be
-configured.
-
-This is done using Ansible.  Verify that your inventory (Created earlier from the
-``inventory/example-aether.ini`` file) includes an ``[aetherfabric]`` section
-that has all the names and IP addresses of the compute nodes in it.
-
-Then run a ping test::
-
-  ansible -i inventory/sitename.ini -m ping aetherfabric
-
-This may fail with the error::
-
-  "msg": "Using a SSH password instead of a key is not possible because Host Key checking is enabled and sshpass does not support this.  Please add this host's fingerprint to your known_hosts file to manage this host."
-
-Comment out the ``ansible_ssh_pass="onl"`` line, then rerun the ping test.  It
-may ask you about authorized keys - answer ``yes`` for each host to trust the
-keys::
-
-  The authenticity of host '10.0.0.138 (<no hostip for proxy command>)' can't be established.
-  ECDSA key fingerprint is SHA256:...
-  Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
-
-Once you've trusted the host keys, the ping test should succeed::
-
-  spine1.role1.site | SUCCESS => {
-      "changed": false,
-      "ping": "pong"
-  }
-  leaf1.role1.site | SUCCESS => {
-      "changed": false,
-      "ping": "pong"
-  }
-  ...
-
-Then run the playbook to create the ``terraform`` user::
-
-  ansible-playbook -i inventory/sitename.ini playbooks/aetherfabric-playbook.yml
-
-Once completed, the switch should now be ready for TOST runtime install.
-
-VPN
----
-
-This section walks you through how to set up a VPN between ACE and Aether Central in GCP.
-We will be using GitOps based Aether CD pipeline for this,
-so we just need to create a patch to **aether-pod-configs** repository.
-Note that some of the steps described here are not directly related to setting up a VPN,
-but rather are a prerequisite for adding a new ACE.
-
-.. attention::
-
-   If you are adding another ACE to an existing VPN connection, go to
-   :ref:`Add ACE to an existing VPN connection <add_ace_to_vpn>`
-
-Before you begin
-""""""""""""""""
-
-* Make sure firewall in front of ACE allows UDP port 500, UDP port 4500, and ESP packets
-  from **gcpvpn1.infra.aetherproject.net(35.242.47.15)** and **gcpvpn2.infra.aetherproject.net(34.104.68.78)**
-* Make sure that the external IP on ACE side is owned by or routed to the management node
-
-To help your understanding, the following sample ACE environment will be used in the rest of this section.
-Make sure to replace the sample values when you actually create a review request.
-
-+-----------------------------+----------------------------------+
-| Management node external IP | 128.105.144.189                  |
-+-----------------------------+----------------------------------+
-| ASN                         | 65003                            |
-+-----------------------------+----------------------------------+
-| GCP BGP IP address          | Tunnel 1: 169.254.0.9/30         |
-|                             +----------------------------------+
-|                             | Tunnel 2: 169.254.1.9/30         |
-+-----------------------------+----------------------------------+
-| ACE BGP IP address          | Tunnel 1: 169.254.0.10/30        |
-|                             +----------------------------------+
-|                             | Tunnel 2: 169.254.1.10/30        |
-+-----------------------------+----------------------------------+
-| PSK                         | UMAoZA7blv6gd3IaArDqgK2s0sDB8mlI |
-+-----------------------------+----------------------------------+
-| Management Subnet           | 10.91.0.0/24                     |
-+-----------------------------+----------------------------------+
-| K8S Subnet                  | Pod IP: 10.66.0.0/17             |
-|                             +----------------------------------+
-|                             | Cluster IP: 10.66.128.0/17       |
-+-----------------------------+----------------------------------+
-
-Download aether-pod-configs repository
-""""""""""""""""""""""""""""""""""""""
-
-.. code-block:: shell
-
-   $ cd $WORKDIR
-   $ git clone "ssh://[username]@gerrit.opencord.org:29418/aether-pod-configs"
-
-.. _update_global_resource:
-
-Update global resource maps
-"""""""""""""""""""""""""""
-
-Add a new ACE information at the end of the following global resource maps.
-
-* user_map.tfvars
-* cluster_map.tfvars
-* vpn_map.tfvars
-
-As a note, you can find several other global resource maps under the `production` directory.
-Resource definitions that need to be shared among clusters or are better managed in a
-single file to avoid configuration conflicts are maintained in this way.
-
-.. code-block:: diff
-
-   $ cd $WORKDIR/aether-pod-configs/production
-   $ vi user_map.tfvars
-
-   # Add the new cluster admin user at the end of the map
-   $ git diff user_map.tfvars
-   --- a/production/user_map.tfvars
-   +++ b/production/user_map.tfvars
-   @@ user_map = {
-      username      = "menlo"
-      password      = "changeme"
-      global_roles  = ["user-base", "catalogs-use"]
-   +  },
-   +  test_admin = {
-   +    username      = "test"
-   +    password      = "changeme"
-   +    global_roles  = ["user-base", "catalogs-use"]
-      }
-   }
-
-.. code-block:: diff
-
-   $ cd $WORKDIR/aether-pod-configs/production
-   $ vi cluster_map.tfvars
-
-   # Add the new K8S cluster information at the end of the map
-   $ git diff cluster_map.tfvars
-   --- a/production/cluster_map.tfvars
-   +++ b/production/cluster_map.tfvars
-   @@ cluster_map = {
-         kube_dns_cluster_ip     = "10.53.128.10"
-         cluster_domain          = "prd.menlo.aetherproject.net"
-         calico_ip_detect_method = "can-reach=www.google.com"
-   +    },
-   +    ace-test = {
-   +      cluster_name            = "ace-test"
-   +      management_subnets      = ["10.91.0.0/24"]
-   +      k8s_version             = "v1.18.8-rancher1-1"
-   +      k8s_pod_range           = "10.66.0.0/17"
-   +      k8s_cluster_ip_range    = "10.66.128.0/17"
-   +      kube_dns_cluster_ip     = "10.66.128.10"
-   +      cluster_domain          = "prd.test.aetherproject.net"
-   +      calico_ip_detect_method = "can-reach=www.google.com"
-         }
-      }
-   }
-
-.. code-block:: diff
-
-   $ cd $WORKDIR/aether-pod-configs/production
-   $ vi vpn_map.tfvars
-
-   # Add VPN and tunnel information at the end of the map
-   $ git diff vpn_map.tfvars
-   --- a/production/vpn_map.tfvars
-   +++ b/production/vpn_map.tfvars
-   @@ vpn_map = {
-      bgp_peer_ip_address_1    = "169.254.0.6"
-      bgp_peer_ip_range_2      = "169.254.1.5/30"
-      bgp_peer_ip_address_2    = "169.254.1.6"
-   +  },
-   +  ace-test = {
-   +    peer_name                = "production-ace-test"
-   +    peer_vpn_gateway_address = "128.105.144.189"
-   +    tunnel_shared_secret     = "UMAoZA7blv6gd3IaArDqgK2s0sDB8mlI"
-   +    bgp_peer_asn             = "65003"
-   +    bgp_peer_ip_range_1      = "169.254.0.9/30"
-   +    bgp_peer_ip_address_1    = "169.254.0.10"
-   +    bgp_peer_ip_range_2      = "169.254.1.9/30"
-   +    bgp_peer_ip_address_2    = "169.254.1.10"
-      }
-   }
-
-.. note::
-   Unless you have a specific requirement, set ASN and BGP addresses to the next available values in the map.
-
-
-Create ACE specific configurations
-""""""""""""""""""""""""""""""""""
-
-In this step, we will create a directory under `production` with the same name as ACE,
-and add several Terraform configurations and Ansible inventory needed to configure a VPN connection.
-Throughout the deployment procedure, this directory will contain all ACE specific configurations.
-
-Run the following commands to auto-generate necessary files under the target ACE directory.
-
-.. code-block:: shell
-
-   $ cd $WORKDIR/aether-pod-configs/tools
-   $ cp ace_env /tmp/ace_env
-   $ vi /tmp/ace_env
-   # Set environment variables
-
-   $ source /tmp/ace_env
-   $ make vpn
-   Created ../production/ace-test
-   Created ../production/ace-test/main.tf
-   Created ../production/ace-test/variables.tf
-   Created ../production/ace-test/gcp_fw.tf
-   Created ../production/ace-test/gcp_ha_vpn.tf
-   Created ../production/ace-test/ansible
-   Created ../production/ace-test/backend.tf
-   Created ../production/ace-test/cluster_val.tfvars
-   Created ../production/ace-test/ansible/hosts.ini
-   Created ../production/ace-test/ansible/extra_vars.yml
-
-.. attention::
-   The predefined templates are tailored to Pronto BOM. You'll need to fix `cluster_val.tfvars` and `ansible/extra_vars.yml`
-   when using a different BOM.
-
-Create a review request
-"""""""""""""""""""""""
-
-.. code-block:: shell
-
-   $ cd $WORKDIR/aether-pod-configs/production
-   $ git status
-   On branch tools
-   Changes not staged for commit:
-
-      modified:   cluster_map.tfvars
-      modified:   user_map.tfvars
-      modified:   vpn_map.tfvars
-
-   Untracked files:
-   (use "git add <file>..." to include in what will be committed)
-
-      ace-test/
-
-   $ git add .
-   $ git commit -m "Add test ACE"
-   $ git review
-
-Once the review request is accepted and merged,
-CD pipeline will create VPN tunnels on both GCP and the management node.
-
-Verify VPN connection
-"""""""""""""""""""""
-
-You can verify the VPN connections after successful post-merge job
-by checking the routing table on the management node and trying to ping to one of the central cluster VMs.
-Make sure two tunnel interfaces, `gcp_tunnel1` and `gcp_tunnel2`, exist
-and three additional routing entries via one of the tunnel interfaces.
-
-.. code-block:: shell
-
-   # Verify routings
-   $ netstat -rn
-   Kernel IP routing table
-   Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
-   0.0.0.0         128.105.144.1   0.0.0.0         UG        0 0          0 eno1
-   10.45.128.0     169.254.0.9     255.255.128.0   UG        0 0          0 gcp_tunnel1
-   10.52.128.0     169.254.0.9     255.255.128.0   UG        0 0          0 gcp_tunnel1
-   10.66.128.0     10.91.0.8       255.255.128.0   UG        0 0          0 eno1
-   10.91.0.0       0.0.0.0         255.255.255.0   U         0 0          0 eno1
-   10.168.0.0      169.254.0.9     255.255.240.0   UG        0 0          0 gcp_tunnel1
-   128.105.144.0   0.0.0.0         255.255.252.0   U         0 0          0 eno1
-   169.254.0.8     0.0.0.0         255.255.255.252 U         0 0          0 gcp_tunnel1
-   169.254.1.8     0.0.0.0         255.255.255.252 U         0 0          0 gcp_tunnel2
-
-   # Verify ACC VM access
-   $ ping 10.168.0.6
-
-   # Verify ACC K8S cluster access
-   $ nslookup kube-dns.kube-system.svc.prd.acc.gcp.aetherproject.net 10.52.128.10
-
-You can further verify whether the ACE routes are propagated well to GCP
-by checking GCP dashboard **VPC Network > Routes > Dynamic**.
-
-
-Post VPN setup
-""""""""""""""
-
-Once you verify the VPN connections, please update `ansible` directory name to `_ansible` to prevent
-the ansible playbook from running again.
-Note that it is no harm to re-run the ansible playbook but not recommended.
-
-.. code-block:: shell
-
-   $ cd $WORKDIR/aether-pod-configs/production/$ACE_NAME
-   $ mv ansible _ansible
-   $ git add .
-   $ git commit -m "Mark ansible done for test ACE"
-   $ git review
-
-.. _add_ace_to_vpn:
-
-Add another ACE to an existing VPN connection
-"""""""""""""""""""""""""""""""""""""""""""""
-
-VPN connections can be shared when there are multiple ACE clusters in a site.
-In order to add ACE to an existing VPN connection,
-you'll have to SSH into the management node and manually update BIRD configuration.
-
-.. note::
-
-   This step needs improvements in the future.
-
-.. code-block:: shell
-
-   $ sudo vi /etc/bird/bird.conf
-   protocol static {
-      ...
-      route 10.66.128.0/17 via 10.91.0.10;
-
-      # Add routings for the new ACE's K8S cluster IP range via cluster nodes
-      # TODO: Configure iBGP peering with Calico nodes and dynamically learn these routings
-      route <NEW-ACE-CLUSTER-IP> via <SERVER1>
-      route <NEW-ACE-CLUSTER-IP> via <SERVER2>
-      route <NEW-ACE-CLUSTER-IP> via <SERVER3>
-   }
-
-   filter gcp_tunnel_out {
-      # Add the new ACE's K8S cluster IP range and the management subnet if required to the list
-      if (net ~ [ 10.91.0.0/24, 10.66.128.0/17, <NEW-ACE-CLUSTER-IP-RANGE> ]) then accept;
-      else reject;
-   }
-   # Save and exit
-
-   $ sudo birdc configure
-
-   # Confirm the static routes are added
-   $ sudo birdc show route
-
diff --git a/pronto_deployment_guide/hw_installation.rst b/pronto_deployment_guide/hw_installation.rst
deleted file mode 100644
index cfee987..0000000
--- a/pronto_deployment_guide/hw_installation.rst
+++ /dev/null
@@ -1,654 +0,0 @@
-..
-   SPDX-FileCopyrightText: © 2020 Open Networking Foundation <support@opennetworking.org>
-   SPDX-License-Identifier: Apache-2.0
-
-Hardware Installation
-=====================
-
-Once the hardware has been ordered, the installation can be planned and
-implemented. This document describes the installation of the servers and
-software.
-
-Installation of the fabric switch hardware is covered in :ref:`OS Installation
-- Switches <switch-install>`.
-
-Installation of the radio hardware is covered in :ref:`eNB Installation
-<enb-installation>`.
-
-Site Bookkeeping
-----------------
-
-The following items need to be added to `NetBox
-<https://netbox.readthedocs.io/en/stable>`_ to describe each edge site:
-
-1. Add a Site for the edge (if one doesn't already exist), which has the
-   physical location and contact information for the edge.
-
-2. Add equipment Racks to the Site (if they don't already exist).
-
-3. Add a Tenant for the edge (who owns/manages it), assigned to the ``Pronto``
-   or ``Aether`` Tenant Group.
-
-4. Add a VRF (Routing Table) for the edge site. This is usually just the name
-   of the site.  Make sure that ``Enforce unique space`` is checked, so that IP
-   addresses within the VRF are forced to be unique, and that the Tenant Group
-   and Tenant are set.
-
-5. Add a VLAN Group to the edge site, which groups the site's VLANs and
-   requires that they have a unique VLAN number.
-
-6. Add VLANs for the edge site.  These should be assigned a VLAN Group, the
-   Site, and Tenant.
-
-   There can be multiple of the same VLAN in NetBox (VLANs are layer 2, and
-   local to the site), but not within the VLAN group.
-
-   The minimal list of VLANs:
-
-     * ADMIN 1
-     * UPLINK 10
-     * MGMT 800
-     * FAB 801
-
-   If you have multiple deployments at a site using the same management server,
-   add additional VLANs incremented by 10 for the MGMT/FAB - for example:
-
-     * DEVMGMT 810
-     * DEVFAB 801
-
-7. Add IP Prefixes for the site. This should have the Tenant and VRF assigned.
-
-   All edge IP prefixes fit into a ``/22`` sized block.
-
-   The description of the Prefix contains the DNS suffix for all Devices that
-   have IP addresses within this Prefix. The full DNS names are generated by
-   combining the first ``<devname>`` component of the Device names with this
-   suffix.
-
-   An examples using the ``10.0.0.0/22`` block. There are 4 edge
-   prefixes, with the following purposes:
-
-     * ``10.0.0.0/25``
-
-        * Has the Server BMC/LOM and Management Switch
-        * Assign the ADMIN 1 VLAN
-        * Set the description to ``admin.<deployment>.<site>.aetherproject.net`` (or
-          ``prontoproject.net``).
-
-     * ``10.0.0.128/25``
-
-        * Has the Server Management plane, Fabric Switch Management/BMC
-        * Assign MGMT 800 VLAN
-        * Set the description to ``<deployment>.<site>.aetherproject.net`` (or
-          ``prontoproject.net``).
-
-     * ``10.0.1.0/25``
-
-        * IP addresses of the qsfp0 port of the Compute Nodes to Fabric switches, devices
-          connected to the Fabric like the eNB
-        * Assign FAB 801 VLAN
-        * Set the description to ``fab1.<deployment>.<site>.aetherproject.net`` (or
-          ``prontoproject.net``).
-
-     * ``10.0.1.128/25``
-
-        * IP addresses of the qsfp1 port of the Compute Nodes to fabric switches
-        * Assign FAB 801 VLAN
-        * Set the description to ``fab2.<deployment>.<site>.aetherproject.net`` (or
-          ``prontoproject.net``).
-
-   There also needs to be a parent range of the two fabric ranges added:
-
-     * ``10.0.1.0/24``
-
-        * This is used to configure the correct routes, DNS, and TFTP servers
-          provided by DHCP to the equipment that is connected to the fabric
-          leaf switch that the management server (which provides those
-          services) is not connected to.
-
-   Additionally, these edge prefixes are used for Kubernetes but don't need to
-   be created in NetBox:
-
-     * ``10.0.2.0/24``
-
-        * Kubernetes Pod IP's
-
-     * ``10.0.3.0/24``
-
-        * Kubernetes Cluster IP's
-
-8. Add Devices to the site, for each piece of equipment. These are named with a
-   scheme similar to the DNS names used for the pod, given in this format::
-
-     <devname>.<deployment>.<site>
-
-   Examples::
-
-     mgmtserver1.ops1.tucson
-     node1.stage1.menlo
-
-   Note that these names are transformed into DNS names using the Prefixes, and
-   may have additional components - ``admin`` or ``fabric`` may be added after
-   the ``<devname>`` for devices on those networks.
-
-   Set the following fields when creating a device:
-
-     * Site
-     * Tenant
-     * Rack & Rack Position
-     * Serial number
-
-   If a specific Device Type doesn't exist for the device, it must be created,
-   which is detailed in the NetBox documentation, or ask the OPs team for help.
-
-   See `Rackmount of Equipment`_ below for guidance on how equipment should be
-   mounted in the Rack.
-
-9. Add Services to the management server:
-
-    * name: ``dns``
-      protocol: UDP
-      port: 53
-
-    * name: ``tftp``
-      protocol: UDP
-      port: 69
-
-   These are used by the DHCP and DNS config to know which servers offer
-   DNS or TFTP service.
-
-10. Set the MAC address for the physical interfaces on the device.
-
-   You may also need to add physical network interfaces if  aren't already
-   created by the Device Type.  An example would be if additional add-in
-   network cards were installed.
-
-11. Add any virtual interfaces to the Devices. When creating a virtual
-    interface, it should have it's ``label`` field set to the physical network
-    interface that it is assigned
-
-    These are needed are two cases for the Pronto deployment:
-
-     1. On the Management Server, there should bet (at least) two VLAN
-        interfaces created attached to the ``eno2`` network port, which
-        are used to provide connectivity to the management plane and fabric.
-        These should be named ``<name of vlan><vlan ID>``, so the MGMT 800 VLAN
-        would become a virtual interface named ``mgmt800``, with the label
-        ``eno2``.
-
-     2. On the Fabric switches, the ``eth0`` port is shared between the OpenBMC
-        interface and the ONIE/ONL installation.  Add a ``bmc`` virtual
-        interface with a label of ``eth0`` on each fabric switch, and check the
-        ``OOB Management`` checkbox.
-
-12. Create IP addresses for the physical and virtual interfaces.  These should
-    have the Tenant and VRF set.
-
-    The Management Server should always have the first IP address in each
-    range, and they should be incremental, in this order. Examples are given as
-    if there was a single instance of each device - adding additional devices
-    would increment the later IP addresses.
-
-      * Management Server
-
-          * ``eno1`` - site provided public IP address, or blank if DHCP
-            provided
-
-          * ``eno2`` - 10.0.0.1/25 (first of ADMIN) - set as primary IP
-          * ``bmc`` - 10.0.0.2/25 (next of ADMIN)
-          * ``mgmt800`` - 10.0.0.129/25 (first of MGMT)
-          * ``fab801`` - 10.0.1.1/25 (first of FAB)
-
-      * Management Switch
-
-          * ``gbe1`` - 10.0.0.3/25 (next of ADMIN) - set as primary IP
-
-      * Fabric Switch
-
-          * ``eth0`` - 10.0.0.130/25 (next of MGMT), set as primary IP
-          * ``bmc`` - 10.0.0.131/25
-
-      * Compute Server
-
-          * ``eth0`` - 10.0.0.132/25 (next of MGMT), set as primary IP
-          * ``bmc`` - 10.0.0.4/25 (next of ADMIN)
-          * ``qsfp0`` - 10.0.1.2/25 (next of FAB)
-          * ``qsfp1`` - 10.0.1.3/25
-
-      * Other Fabric devices (eNB, etc.)
-
-          * ``eth0`` or other primary interface - 10.0.1.4/25 (next of FAB)
-
-13. Add DHCP ranges to the IP Prefixes for IP's that aren't reserved. These are
-    done like any other IP Address, but with the ``Status`` field is set to
-    ``DHCP``, and they'll consume the entire range of IP addresses given in the
-    CIDR mask.
-
-    For example ``10.0.0.32/27`` as a DHCP block would take up 1/4 of the ADMIN
-    prefix.
-
-14. Add router IP reservations to the IP Prefix for both Fabric prefixes. These
-    are IP addresses used by ONOS to route traffic to the other leaf, and have
-    the following attributes:
-
-    - Have the last usable address in range (in the ``/25`` fabric examples
-      above, these would be ``10.0.1.126/25`` and ``10.0.1.254/25``)
-
-    - Have a ``Status`` of ``Reserved``, and the VRF, Tenant Group, and Tenant
-      set.
-
-    - The Description must start with the word ``router``, such as: ``router
-      for leaf1 Fabric``
-
-    - A custom field named ``RFC3442 Routes`` is set to the CIDR IP address of
-      the opposite leaf - if the leaf's prefix is ``10.0.1.0/25`` and the
-      router IP is ``10.0.1.126/25`` then ``RFC3442 Routes`` should be set to
-      ``10.0.1.128\25`` (and the reverse - on ``10.0.1.254/25`` the ``RFC3442
-      Routes`` would be set to be ``10.0.1.0/25``).  This creates an `RFC3442
-      Classless Static Route Option <https://tools.ietf.org/html/rfc3442>`_
-      for the subnet in DHCP.
-
-15. Add Cables between physical interfaces on the devices
-
-    The topology needs to match the logical diagram presented in the
-    :ref:`network_cable_plan`.  Note that many of the management interfaces
-    need to be located either on the MGMT or ADMIN VLANs, and the management
-    switch is
-    used to provide that separation.
-
-Rackmount of Equipment
-----------------------
-
-Most of the Pronto equipment has a 19" rackmount form factor.
-
-Guidelines for mounting this equipment:
-
-- The EdgeCore Wedge Switches have a front-to-back (aka "port-to-power") fan
-  configuration, so hot air exhaust is out the back of the switch near the
-  power inlets, away from the 32 QSFP network ports on the front of the switch.
-
-- The full-depth 1U and 2U Supermicro servers also have front-to-back airflow
-  but have most of their ports on the rear of the device.
-
-- Airflow through the rack should be in one direction to avoid heat being
-  pulled from one device into another.  This means that to connect the QSFP
-  network ports from the servers to the switches, cabling should be routed
-  through the rack from front (switch) to back (server).  Empty rack spaces
-  should be reserved for this purpose.
-
-- The short-depth management HP Switch and 1U Supermicro servers should be
-  mounted on the rear of the rack.  They both don't generate an appreciable
-  amount of heat, so the airflow direction isn't a significant factor in
-  racking them.
-
-Inventory
----------
-
-Once equipment arrives, any device needs to be recorded in inventory if it:
-
-1. Connects to the network (has a MAC address)
-2. Has a serial number
-3. Isn't a subcomponent (disk, add-in card, linecard, etc.) of a larger device.
-
-The following information should be recorded for every device:
-
-- Manufacturer
-- Model
-- Serial Number
-- MAC address (for the primary and any management/BMC/IPMI interfaces)
-
-This information should be be added to the corresponding Devices ONF NetBox
-instance.  The accuracy of this information is very important as it is used in
-bootstrapping the systems.
-
-Once inventory has been completed, let the Infra team know, and the pxeboot
-configuration will be generated to have the OS preseed files corresponding to the
-new servers based on their serial numbers.
-
-Management Switch Bootstrap
----------------------------
-
-The current Pronto deployment uses an HP/Aruba 2540 24G PoE+ 4SFP+ JL356A
-switch to run the management network and other VLAN's that are used internally.
-
-By default the switch will pull an IP address via DHCP and ``http://<switch IP>``
-will display a management webpage for the switch. You need to be able to access
-this webpage before you can update the configuration.
-
-Loading the Management Switch Configuration
-"""""""""""""""""""""""""""""""""""""""""""
-
-1. Obtain a copy of the Management switch configuration file (this ends in ``.pcc``).
-
-2.  Open the switch web interface at ``http://<switch IP>``. You may be
-    prompted to login - the default credentials are both ``admin``:
-
-    .. image:: images/pswi-000.png
-       :alt: User Login for switch
-       :scale: 50%
-
-3. Go to the "Management" section at bottom left:
-
-   .. image:: images/pswi-001.png
-       :alt: Update upload
-       :scale: 50%
-
-   In the "Update" section at left, drag the configuration file into the upload
-   area, or click Browse and select it.
-
-4. In the "Select switch configuration file to update" section, select
-   "config1", so it overwrites the default configuration.
-
-5. In the "Select switch configuration file to update" section, select
-   "config1", so it overwrites the default configuration. Click "Update".
-   You'll be prompted to reboot the switch, which you can do with the power
-   symbol at top right. You may be prompted to select an image used to reboot -
-   the "Previously Selected" is the correct one to use:
-
-   .. image:: images/pswi-003.png
-       :alt: Switch Image Select
-       :scale: 30%
-
-6. Wait for the switch to reboot:
-
-   .. image:: images/pswi-004.png
-       :alt: Switch Reboot
-       :scale: 50%
-
-   The switch is now configured with the correct VLANs for Pronto Use.  If you
-   go to Interfaces > VLANs should see a list of VLANs configured on the
-   switch:
-
-   .. image:: images/pswi-005.png
-       :alt: Mgmt VLANs
-       :scale: 50%
-
-Software Bootstrap
-------------------
-
-Management Server Bootstrap
-"""""""""""""""""""""""""""
-
-The management server is bootstrapped into a customized version of the standard
-Ubuntu 18.04 OS installer.
-
-The `iPXE boot firmware <https://ipxe.org/>`_. is used to start this process
-and is built using the steps detailed in the `ipxe-build
-<https://gerrit.opencord.org/plugins/gitiles/ipxe-build>`_. repo, which
-generates both USB and PXE chainloadable boot images.
-
-Once a system has been started using these images started, these images will
-download a customized script from  an external webserver to continue the boot
-process. This iPXE to webserver connection is secured with mutual TLS
-authentication, enforced by the nginx webserver.
-
-The iPXE scripts are created by the `pxeboot
-<https://gerrit.opencord.org/plugins/gitiles/ansible/role/pxeboot>`_ role,
-which creates both a boot menu, downloads the appropriate binaries for
-bootstrapping an OS installation, and creates per-node installation preseed files.
-
-The preseed files contain configuration steps to install the OS from the
-upstream Ubuntu repos, as well as customization of packages and creating the
-``onfadmin`` user.
-
-Creating a bootable USB drive
-'''''''''''''''''''''''''''''
-
-1. Get a USB key. Can be tiny as the uncompressed image is floppy sized
-   (1.4MB).  Download the USB image file (``<date>_onf_ipxe.usb.zip``) on the
-   system you're using to write the USB key, and unzip it.
-
-2. Put a USB key in the system you're using to create the USB key, then
-   determine which USB device file it's at in ``/dev``.  You might look at the
-   end of the ``dmesg`` output on Linux/Unix or the output of ``diskutil
-   list`` on macOS.
-
-   Be very careful about this, as if you accidentally overwrite some other disk in
-   your system that would be highly problematic.
-
-3. Write the image to the device::
-
-      $ dd if=/path/to/20201116_onf_ipxe.usb of=/dev/sdg
-      2752+0 records in
-      2752+0 records out
-      1409024 bytes (1.4 MB, 1.3 MiB) copied, 2.0272 s, 695 kB/s
-
-  You may need to use `sudo` for this.
-
-Boot and Image Management Server
-''''''''''''''''''''''''''''''''
-
-1. Connect a USB keyboard and VGA monitor to the management node.  Put the USB
-   Key in one of the management node's USB ports (port 2 or 3):
-
-   .. image:: images/mgmtsrv-000.png
-       :alt: Management Server Ports
-       :scale: 50%
-
-2. Turn on the management node, and press the F11 key as it starts to get into
-   the Boot Menu:
-
-   .. image:: images/mgmtsrv-001.png
-       :alt: Management Server Boot Menu
-       :scale: 50%
-
-3. Select the USB key (in this case "PNY USB 2.0", your options may vary) and press return. You should see iPXE load:
-
-   .. image:: images/mgmtsrv-002.png
-       :alt: iPXE load
-       :scale: 50%
-
-4. A menu will appear which displays the system information and DHCP discovered
-   network settings (your network must provide the IP address to the management
-   server via DHCP):
-
-   Use the arrow keys to select "Ubuntu 18.04 Installer (fully automatic)":
-
-   .. image:: images/mgmtsrv-003.png
-       :alt: iPXE Menu
-       :scale: 50%
-
-   There is a 10 second default timeout if left untouched (it will continue the
-   system boot process) so restart the system if you miss the 10 second window.
-
-5. The Ubuntu 18.04 installer will be downloaded and booted:
-
-   .. image:: images/mgmtsrv-004.png
-       :alt: Ubuntu Boot
-       :scale: 50%
-
-6. Then the installer starts and takes around 10 minutes to install (depends on
-   your connection speed):
-
-   .. image:: images/mgmtsrv-005.png
-       :alt: Ubuntu Install
-       :scale: 50%
-
-
-7. At the end of the install, the system will restart and present you with a
-   login prompt:
-
-   .. image:: images/mgmtsrv-006.png
-       :alt: Ubuntu Install Complete
-       :scale: 50%
-
-
-Management Server Configuration
-'''''''''''''''''''''''''''''''
-
-Once the OS is installed on the management server, Ansible is used to remotely
-install software on the management server.
-
-To checkout the ONF ansible repo and enter the virtualenv with the tooling::
-
-  mkdir infra
-  cd infra
-  repo init -u ssh://<your gerrit username>@gerrit.opencord.org:29418/infra-manifest
-  repo sync
-  cd ansible
-  make galaxy
-  source venv_onfansible/bin/activate
-
-Obtain the ``undionly.kpxe`` iPXE artifact for bootstrapping the compute
-servers, and put it in the ``playbook/files`` directory.
-
-Next, create an inventory file to access the NetBox API.  An example is given
-in ``inventory/example-netbox.yml`` - duplicate this file and modify it. Fill
-in the ``api_endpoint`` address and ``token`` with an API key you get out of
-the NetBox instance.  List the IP Prefixes used by the site in the
-``ip_prefixes`` list.
-
-Next, run the ``scripts/netbox_edgeconfig.py`` to generate a host_vars file for
-the management server.  Assuming that the management server in the edge is
-named ``mgmtserver1.stage1.menlo``, you'd run::
-
-  python scripts/netbox_edgeconfig.py inventory/my-netbox.yml > inventory/host_vars/mgmtserver1.stage1.menlo.yml
-
-One manual change needs to be made to this output - edit the
-``inventory/host_vars/mgmtserver1.stage1.menlo.yml`` file and add the following
-to the bottom of the file, replacing the IP addresses with the management
-server IP address for each segment.
-
-In the case of the Fabric that has two leaves and IP ranges, add the Management
-server IP address used for the leaf that it is connected to, and then add a
-route for the other IP address range for the non-Management-connected leaf that
-is via the Fabric router address in the connected leaf range.
-
-This configures the `netplan <https://netplan.io>`_ on the management server,
-and creates a SNAT rule for the UE range route, and will be automated away
-soon::
-
-  # added manually
-  netprep_netplan:
-    ethernets:
-      eno2:
-        addresses:
-          - 10.0.0.1/25
-    vlans:
-      mgmt800:
-        id: 800
-        link: eno2
-        addresses:
-          - 10.0.0.129/25
-      fabr801:
-        id: 801
-        link: eno2
-        addresses:
-          - 10.0.1.129/25
-        routes:
-          - to: 10.0.1.0/25
-            via: 10.0.1.254
-            metric: 100
-
-  netprep_nftables_nat_postrouting: >
-    ip saddr 10.0.1.0/25 ip daddr 10.168.0.0/20 counter snat to 10.0.1.129;
-
-
-Using the ``inventory/example-aether.ini`` as a template, create an
-:doc:`ansible inventory <ansible:user_guide/intro_inventory>` file for the
-site. Change the device names, IP addresses, and ``onfadmin`` password to match
-the ones for this site.  The management server's configuration is in the
-``[aethermgmt]`` and corresponding ``[aethermgmt:vars]`` section.
-
-Then, to configure a management server, run::
-
-  ansible-playbook -i inventory/sitename.ini playbooks/aethermgmt-playbook.yml
-
-This installs software with the following functionality:
-
-- VLANs on second Ethernet port to provide connectivity to the rest of the pod.
-- Firewall with NAT for routing traffic
-- DHCP and TFTP for bootstrapping servers and switches
-- DNS for host naming and identification
-- HTTP server for serving files used for bootstrapping switches
-- Downloads the Tofino switch image
-- Creates user accounts for administrative access
-
-Compute Server Bootstrap
-""""""""""""""""""""""""
-
-Once the management server has finished installation, it will be set to offer
-the same iPXE bootstrap file to the computer.
-
-Each node will be booted, and when iPXE loads select the ``Ubuntu 18.04
-Installer (fully automatic)`` option.
-
-The nodes can be controlled remotely via their BMC management interfaces - if
-the BMC is at ``10.0.0.3`` a remote user can SSH into them with::
-
-  ssh -L 2443:10.0.0.3:443 onfadmin@<mgmt server ip>
-
-And then use their web browser to access the BMC at::
-
-  https://localhost:2443
-
-The default BMC credentials for the Pronto nodes are::
-
-  login: ADMIN
-  password: Admin123
-
-The BMC will also list all of the MAC addresses for the network interfaces
-(including BMC) that are built into the logic board of the system. Add-in
-network cards like the 40GbE ones used in compute servers aren't listed.
-
-To prepare the compute nodes, software must be installed on them.  As they
-can't be accessed directly from your local system, a :ref:`jump host
-<ansible:use_ssh_jump_hosts>` configuration is added, so the SSH connection
-goes through the management server to the compute systems behind it. Doing this
-requires a few steps:
-
-First, configure SSH to use Agent forwarding - create or edit your
-``~/.ssh/config`` file and add the following lines::
-
-  Host <management server IP>
-    ForwardAgent yes
-
-Then try to login to the management server, then the compute node::
-
-  $ ssh onfadmin@<management server IP>
-  Welcome to Ubuntu 18.04.5 LTS (GNU/Linux 5.4.0-54-generic x86_64)
-  ...
-  onfadmin@mgmtserver1:~$ ssh onfadmin@10.0.0.138
-  Welcome to Ubuntu 18.04.5 LTS (GNU/Linux 5.4.0-54-generic x86_64)
-  ...
-  onfadmin@node2:~$
-
-Being able to login to the compute nodes from the management node means that
-SSH Agent forwarding is working correctly.
-
-Verify that your inventory (Created earlier from the
-``inventory/example-aether.ini`` file) includes an ``[aethercompute]`` section
-that has all the names and IP addresses of the compute nodes in it.
-
-Then run a ping test::
-
-  ansible -i inventory/sitename.ini -m ping aethercompute
-
-It may ask you about authorized keys - answer ``yes`` for each host to trust the keys::
-
-  The authenticity of host '10.0.0.138 (<no hostip for proxy command>)' can't be established.
-  ECDSA key fingerprint is SHA256:...
-  Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
-
-You should then see a success message for each host::
-
-  node1.stage1.menlo | SUCCESS => {
-      "changed": false,
-      "ping": "pong"
-  }
-  node2.stage1.menlo | SUCCESS => {
-      "changed": false,
-      "ping": "pong"
-  }
-  ...
-
-Once you've seen this, run the playbook to install the prerequisites (Terraform
-user, Docker)::
-
-  ansible-playbook -i inventory/sitename.ini playbooks/aethercompute-playbook.yml
-
-Note that Docker is quite large and may take a few minutes for installation
-depending on internet connectivity.
-
-Now that these compute nodes have been brought up, the rest of the installation
-can continue.
diff --git a/pronto_deployment_guide/acceptance_test_specification.rst b/testing/acceptance_specification.rst
similarity index 96%
rename from pronto_deployment_guide/acceptance_test_specification.rst
rename to testing/acceptance_specification.rst
index da12424..c4c72e1 100644
--- a/pronto_deployment_guide/acceptance_test_specification.rst
+++ b/testing/acceptance_specification.rst
@@ -2,23 +2,27 @@
    SPDX-FileCopyrightText: © 2020 Open Networking Foundation <support@opennetworking.org>
    SPDX-License-Identifier: Apache-2.0
 
-=============================
-Acceptance Test Specification
-=============================
+Acceptance Specification
+========================
 
 Objectives
-==========
+----------
 
-The purpose of this document is to create an end-user test object list (TOL) for Aether Connected Edge (ACE).
-This document will focus on the connectivity services end-user testing.
-In the future, this document will extend to other services offered through ACE.
+The purpose of this document is to create an end-user test object list (TOL)
+for Aether Connected Edge (ACE).
+
+This document will focus on the connectivity services end-user testing.  In the
+future, this document will extend to other services offered through ACE.
 
 The Automated continuous testing framework for the platform is out of the scope of this document.
 
 Integration Test (eNB-LTE Core)
-===============================
-Before we start to test End-to-End connectivity, we have to check the connection (called S1-MME/S1-C interface)
-between eNB in an edge and MME in a public cloud.
+-------------------------------
+
+Before we start to test End-to-End connectivity, we have to check the
+connection (called S1-MME/S1-C interface) between eNB in an edge and MME in a
+public cloud.
+
 In order to verify this connectivity, the following test cases should be passed.
 
 Note that all the following test/verification cases have some assumptions:
@@ -29,6 +33,7 @@
 
 IT-TOL01 Fabric Test 1: the connectivity test within the edge
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
 In order to test the fabric test, please see the following steps:
 
 
@@ -216,7 +221,7 @@
   :alt: Example (the eNB ID is 19)
 
 Connectivity Services
-=====================
+---------------------
 
 Aether provides only data connectivity for end-user devices and systems.
 So the voice service over LTE is not available. However, users can use
@@ -313,14 +318,14 @@
 
 
 Monitoring Services
-===================
+-------------------
 
 ACE uses the Grafana dashboard for monitoring services.
 Each ACE will be provided with Read-Only Access to our centralized monitoring platform.
 
 
 Application Services
-====================
+--------------------
 
 Aether uses Rancher to onboard applications to ACE.
 Each ACE host will be provided with access to rancher to onboard applications on their ACE cluster.
diff --git a/pronto_deployment_guide/images/it-tol04.png b/testing/images/it-tol04.png
similarity index 100%
rename from pronto_deployment_guide/images/it-tol04.png
rename to testing/images/it-tol04.png
Binary files differ
diff --git a/pronto_deployment_guide/images/it-tol05.png b/testing/images/it-tol05.png
similarity index 100%
rename from pronto_deployment_guide/images/it-tol05.png
rename to testing/images/it-tol05.png
Binary files differ
diff --git a/pronto_deployment_guide/images/it-tol06.png b/testing/images/it-tol06.png
similarity index 100%
rename from pronto_deployment_guide/images/it-tol06.png
rename to testing/images/it-tol06.png
Binary files differ