==================
Building Inventory
==================

Atmosphere relies on an Ansible inventory in order to drive the deployment of
all the components.

In order to deploy Atmosphere, you will need to build a directory structure
that will contain all the configuration files and secrets required to deploy
the platform.

The recommended layout is as follows:

.. code-block:: text

    cloud-config
    ├── inventory
    │   ├── group_vars
    │   │   ├── all
    │   │   │   ├── ceph.yml
    │   │   │   ├── cluster_issuer.yml
    │   │   │   ├── endpoints.yml
    │   │   │   ├── keepalived.yml
    │   │   │   ├── kube-prometheus-stack.yml
    │   │   │   ├── kubernetes.yml
    │   │   │   ├── neutron.yml
    │   │   │   └── secrets.sops.yml
    │   │   ├── cephs
    │   │   │   └── osds.yml
    │   └── hosts.ini
    ├── playbooks
    │   └── site.yml
    └── requirements.yml

The ``requirements.yml`` file is used to specify the atmosphere ansible collection
version that will be used to deploy the platform.  Please refer to the `Release Notes`
for the version information.  The file contents should look like this:

.. code-block:: yaml

    collections:
      - name: vexxhost.atmosphere
        version: 4.3.1

To generate the inventory configuration files, you can use the ``generate_workspace``
playbook to simplify the process.  The following command will generate the
inventory in the specified directory:

.. code-block:: bash

    ansible-playbook -e domain_name="yourdomain.com" \
                     -e workspace_path="$(pwd)/cloud-config/inventory" \
                     vexxhost.atmosphere.generate_workspace

The ``cloud-config`` directory can be managed by any SCM tool of your choice, such as Git,
and can be used to store all the configuration files and secrets required to deploy the
platform.  You also need to assign the domain name of your cluster to the domain_name
variable for production deployments.

Refer to the other sections of the `Deployment Guide` to update the configuration files
according to your network and hardware specification in the inventory directory.

The file contents should look like this:

.. code-block:: yaml

    collections:
      - name: vexxhost.atmosphere
        version: 4.3.1


*************
``hosts.ini``
*************

The ``hosts.ini`` file is the Ansible inventory file that will be used to deploy
the platform. It is recommended to use the following layout:

.. code-block:: ini

    [controllers]
    ctl1.cloud.atmosphere.dev
    ctl2.cloud.atmosphere.dev
    ctl3.cloud.atmosphere.dev

    [computes]
    kvm1.cloud.atmosphere.dev
    kvm2.cloud.atmosphere.dev
    kvm3.cloud.atmosphere.dev

    [cephs]
    ceph1.cloud.atmosphere.dev
    ceph2.cloud.atmosphere.dev
    ceph3.cloud.atmosphere.dev

.. admonition:: FQDNs are required!

      The hostnames listed in the inventory file must be a FQDN that resolves to
      the IP address of the host.  If they do not, you will have failures such
      as agents failing to start, live migration failures and other transient
      and hard to diagnose issues.

**********
HTTP proxy
**********

If you nodes can only access the internet through an HTTP proxy, you will need
to set the following variables within your inventory which will make sure that
the ``containerd`` and ``dockerd`` services are able to pull images through
this HTTP proxy, as well as the ``download_artifact`` role which is used to
download artifacts for deploying the cluster.

.. code-block:: yaml

    http_proxy: http://proxy.example.com:3128
    https_proxy: http://proxy.example.com:3128
    no_proxy: localhost,127.0.0.0/8,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16,169.254.0.0/16,.svc,.cluster.local

If you have any other services that need to access the internet without going
through the proxy, you can add them to the ``no_proxy`` variable.
