Ands (Advanced aNalysis and Data Services)

Ansible groups
==============
 - OpenShift
    nodes [enforced]                            All OpenShift Nodes
    storage_nodes                               All OpenShift Nodes with attached storage
    masters [enforced]                          All OpenShift Nodes with attached storage and acting as masters
    
    Additional building blocks:
        simple_nodes                            OpenShift Node (without Storage)
        simple_storage_nodes                    OpenShift Node with Storage atached, but not acting as Master

 - oVirt
    ? ovirt_servers                             All oVirt servers
    ? ovirt_masters                             All oVirt masters

 - General
    ands_servers                                All server hardware running in the server rooms
    ands_storage_servers                        All servers with storage attached (OpenShift storage, oVirt storage, PDV storage)
    ands_cuda_servers                           All servers with NVIDIA hardware
    ands_opencl_servers                         All servers expected to run OpenCL SDK
    ands_desktops                               Destkop computers outside of the server room
    ands                                        Everything

Ansible roles
=============
 - Preparation of Vagrant nodes
    ands_vagrant_vm     vagrant                 Configures Vagrantfile and starts virtual machines if necessary
 
 - Ands-specific
    ands_facts          ands                    Detect current Ands configuration
    ands_storage        ands_storage_servers    Detects large storage device and configures LVM, sets aside space for Heketi if ands_heketi_* is set

 - General (abstract roles)
    common              ands                    Standard repositories & software
    keepalived          masters                 Keepalived Service
    openvpn             nodes                   Configures required tunnels (contains templates for all planned tunnels)
    docker              nodes                   Installs docker and configures LVM-based docker storage backend
    glusterfs           servers                 Installs glusterfs, provisions requested volumes, and mounts them

 - OpenShift
    openshift_resource  include                 Populates OpenShift resources (should be executed on master nodes)
    ands_openshift      nodes                   Configures /etc/hosts (to be independent of DNS), user accounts, GlusterFS endpoints in all projects, Heketi service if needed
    ands_kaas           masters                 For all projects configure Gluster volumes, populates OpenShift resources and configuration user configuration

 - Katrin-specific
    kaas

Ansible parameters (global)
==================
    We are listing here only variables which have the global scope, i.e. affect multiple roles. The role parameters are documented 
    within the role itself. General (non ands_*) roles should not rely on ands_* variables directly (except in 'defaults').
        => Instead the playbooks are used to set role-specific parameters based on ands_* variables. 

 - Domains
    ands_openshift_subdomain    group_vars      The default subdomain of the OpenShift cluster (kaas.kit.edu)
    ands_cluster_domain         group_vars      The default domain name of all cluster servers (.ipe.kit.edu)

 - High Availability
    ands_openshift_lb           group_vars      The FQDN of load-balancer of the OpenShift cluster (katrin.kit.edu)
    ands_ipfailover_interface   group_vars      Interface to run IPFailover service
    ands_ipfailover_vips        group_vars      Virtual IPs to maintain by IPFailover service
 
 - Networks 
    ands_storage_network           group_vars   CIDR of storage network
    ands_openshift_network         group_vars   CIDR of OpenShift network (normally, we use storage network)
    ands_openshift_public_network  group_vars   CIDR of OpenShift public network (normally, we use infrastructure network)
    ands_openshift_ingress_network group_vars   CIDR of OpenShift ingress network

 - Host names / IPs
    ands_host_id                inventory       ID is equivalent to the IP in the infrastructure network
    ands_storage_hostname       computed        IP or hostname of the host in the Infiniband storage network
    ands_hpc_hostname           computed        IP or hostname of the host in the Infiniband HPC network

 - Storage
    ands_data_device            ands_storage    The raid device where Ands LVM will be populated. Normally will be autodetected based on size.
    ands_data_vg                ands_storage    The LVM VG on the main storage device
    ands_data_path              ands_storage    The path where the large storage is mounted
    ands_data_volume_size       group_vars      If not specified, all disks space will be imideately used. Oherwise, it is possible to keep it for other uses and grow as needed.
    ands_heketi_volume_size     group_vars      If specified, some space will set aside on LVM some space for Heketi volume
    ands_storage_domains        ands_storage    List of GlusterFS volumens and mount points (configured in ands_facts and may add additional heketi domain in ands_storage)

 - Docker specific
    docker_storage_device       ands_storage    Storage device to create Docker LVM on (if not existing yet)
    docker_storage_vg           ands_storage    LVM VG for Docker volumes (autodetected if not specified)

 - GlusterFS specific 
    glusterfs_version           group_vars
    glusterfs_transport         group_vars

 - OpenShift specific
    ands_openshift_labels       setup/configs   Labels to assign to the nodes
    ands_openshift_projects     setup/configs   List of projects to configure (with GlusterFS endpoints, etc.)
    ands_openshift_users        setup/configs   Optional list of user names with contacts
    ands_openshift_roles        setup/configs   User-permissions. Configures list of admins, project users, etc.
    ands_secrets                setup/configs   Passwords, etc.

    ands_paths                  setup/configs   Default mount point paths
    ands_storage_domains        setup/configs   List of GlusterFS volumes along with hosting servers     
    ands_openshift_volumes      setup/configs   List of OpenShift volumes linked to GlusterFS volumes and paths. Used to generate PV/PVC. Can be restricted per project.
    ands_openshift_files        setup/configs   List of directories/files on the GlusterFS we want to create, ensure permissions/owners.

    kaas_glusterfs_endpoints    <hard-corded>   Specifies the name of GlusterFS endpoint, should be configured by the ands_openshift service (but currently hardcorded)

 - Project specific 
    volumes                     project         Overrides list of PV/PVC to populate in the project
    files                       project         Additional files to ensure are existing and have correct permissions
    file_owner                  project         Default user owning files
    file_group                  project         Default group owning files
    pods                        project         Configuration of the expected pods
    oc                          project         If necessary may give detailed instructions in which prioritu resources should be populated

 - KATRIN specific
    katrin_node                  group_vars     FQDN of KaaS router (katrin.kit.edu, but now katrin.ipe.kit.edu or something)
    katrin_openvpn_network       group_vars     OpenVPN network encompassing all subnets to Katrin control network
    katrin_openvpn_subnet_bits   group_vars     Subnet size
    katrin_openvpn_subnet_offset group_vars   Offset of a first subnet (according to the specified size)


