#################
CSI Configuration
#################

This section details how to configure Container Storage Interfaces (CSI) for
your Kubernetes cluster that Atmosphere runs on. You will need to follow the
steps below to enable specific CSI drivers based on your storage requirements.

.. admonition:: Storing secrets securely
    :class: tip

    When configuring CSI drivers, it is important to store sensitive
    information securely. You can use Ansible Vault to encrypt your inventory
    file and store it in a secure location. For more information on how to
    use Ansible Vault, refer to the `Ansible documentation <https://docs.ansible.com/ansible/latest/user_guide/vault.html>`_.

********
Ceph RBD
********

If you are using the Ceph storage solution that Atmosphere deploys out of the
box, no additional configuration is required. The necessary settings are
automatically applied during the installation process.

***************
Dell PowerStore
***************

For environments requiring the integration of PowerStore for storage,
configure the PowerStore CSI driver by updating your Ansible inventory as
follows:

.. code-block:: yaml

    csi_driver: powerstore
    powerstore_csi_config:
      arrays:
        - endpoint: https://<FILL IN>/api/rest
          globalID: <FILL IN>
          username: <FILL IN>
          password: <FILL IN>
          skipCertificateValidation: true
          isDefault: true
          blockProtocol: <FILL IN> # FC or iSCSI

Ensure that you replace ``<FILL IN>`` with actual values relevant to your
PowerStore configuration. This includes specifying the block protocol, which
can either be Fibre Channel (FC) or iSCSI, depending on your network
infrastructure.

*********
IBM Block
*********

If you're using a storage array that is compatible with the IBM Block CSI
driver, you can configure it by updating your Ansible inventory as follows:

.. code-block:: yaml

    csi_driver: ibm_block
    ibm_block_csi_driver_management_address: <FILL IN>
    ibm_block_csi_driver_username: <FILL IN>
    ibm_block_csi_driver_password: <FILL IN>
    ibm_block_csi_driver_pool: <FILL IN>
    ibm_block_csi_driver_io_group: <FILL IN>

Optionally, you can control the ``SpaceEfficiency`` setting which defaults to
`thin` to enable thin provisioning.  To change it to any other value, you
can set the following variable:

.. code-block:: yaml

    ibm_block_csi_driver_space_efficiency: <FILL IN>

Ensure that you replace ``<FILL IN>`` with actual values relevant to your IBM
Block configuration.  You can use the `Creating a StorageClass <https://www.ibm.com/docs/en/stg-block-csi-driver/1.11.3?topic=configuring-creating-storageclass>`_
documentation to help you determine the values to use.

********
Portworx
********

If you are using a Pure Storage array for your block storage, you can use the
Portworx CSI driver to integrate it with your Kubernetes cluster.  Portworx
automatically enables a custom license when integrated with Pure Storage
arrays (FA/FB edition).

To configure the Portworx CSI driver, update your Ansible inventory as follows:

.. code-block:: yaml

    csi_driver: portworx
    portworx_pure_flasharray_san_type: <FILL IN> # FC or ISCSI
    portworx_pure_json:
      FlashBlades: []
      FlashArrays:
        - MgmtEndPoint: <FILL IN>
          APIToken: <FILL IN>

For more information about how the ``portworx_pure_json`` variable is used,
you can refer to the `Pure Storage FlashArray and FlashBlade JSON file reference <https://docs.portworx.com/portworx-enterprise/reference/pure-reference/pure-json-reference>`_.

********
StorPool
********

For environments requiring the integration of StorPool for storage, configure
the StorPool CSI driver by updating your Ansible inventory as follows:

.. code-block:: yaml

    csi_driver: storpool
    storpool_csi_template: k8s

The ``storpool_csi_template`` variable specifies the StorPool template to use
for the deployment which is set to ``k8s`` in the example above.
