The CDS is composed of different functional parts that we call environments to reflect the way we create, configure and manage them.

Each environment is defined using puppet files. The puppet files are organized in a git repository and each branch of the repository defines an environment.

The different environments/branches are in place to differentiate functions and aims.

Puppet itself is not enough in order to create and define the different environments. The CDS is installed within a cloud environment managed with Openstack, a software meant to simplify creation of clusters of virtual machines.

Openstack allow to define the Network topology for each cluster or stack. Different stacks are usually isolated from the others unless specific rules are defined.

In the current design each stack is set to have 2 different networks and each virtual machine is built with two virtual network interfaces. One network interface face to a  network specific to the stack and it is identified by 192.168.0.0/24, this allow the inter-connectivity of each VM of the stack.

The other network interface is connected to a shared network. Shared here means that is common to all the VMs of the CDS. It has IPs of 10.10.10(11).0/24.

So each stack is connected to a private and a shred network. 

In order to have puppet running and being able to configure each machine of each stack, the puppet server is installed in an environment called shared. 

Each VM can communicate to the puppet server and get the configurations according to their environment via the shared network.

The puppet Server uses puppet in order to configure itself too and uses the brach/environment called shared.

The shared environment is meant to provide services reachable from any environment and the puppet server is the main example.