##################################################
Offre froide en mode INA
##################################################

Cette procédure décrit l'installation en local d'une offre froide configurée en mode INA, et les vérifications associées : écriture et lecture d'archives par une entrée et un export DIP, puis commande de bandes.

.. note:: Pour le paramétrage d'une offre froide sur une plate-forme déployée, se reporter à ``doc/fr/installation/installation/21-addons.rst``.

------------------------------
1. Démarrez les COTS
------------------------------

Restreignez les droits des clés privées, sinon le ``sshd`` du conteneur ignore sa clé d'hôte au démarrage :

.. code-block:: bash

	chmod 600 /vitam/conf/ina-tape-proxy/ssh/sftp_server_key
	chmod 600 /vitam/conf/ina-tape-proxy/ssh/vitam_client_key

..

Depuis ``dev-deployment/docker-cots`` :

.. code-block:: bash

	docker compose up -d

..

Le ``docker-compose`` de développement démarre, en plus des COTS habituels, un conteneur SFTP qui tient lieu de canal vers l'INA.

------------------------------------------------------------
2. Créez la configuration de lancement de l'offre froide
------------------------------------------------------------

Dans IntelliJ, dupliquez la configuration ``Offer`` et modifiez :

.. code-block:: text

	Name                 Offer3
	Main class           fr.gouv.vitam.storage.offers.rest.DefaultOfferMain
	Module               vitam-offer
	Program arguments    /vitam/conf/offer3/offer.conf
	Working directory    /vitam/conf/offer3/
	VM options           identiques à celles de Offer

..

Ajoutez ``Offer3`` à la configuration Multirun ``Vitam``, après ``InaTapeProxy`` qui y figure déjà.

------------------------------------------------------------
3. Déclarez l'offre auprès du moteur de stockage
------------------------------------------------------------

Dans ``/etc/hosts`` :

.. code-block:: text

	127.0.0.1       offer-tape-1.service.consul

..

Dans ``vitam-conf-dev/conf/storage/static-offer.json`` :

.. code-block:: json

	{
		"id": "offer-tape-1.service.consul",
		"baseUrl": "http://offer-tape-1.service.consul:9902",
		"asyncRead": true
	}

..

Vérifiez que le fichier de rattachement au driver contient l'offre froide, et ajoutez-la sinon :

.. code-block:: bash

	cat /vitam/data/storage/fr.gouv.vitam.storage.offers.workspace.driver.DriverImpl
	# offer-fs-1.service.consul;offer-tape-1.service.consul

..

------------------------------
4. Lancez les services
------------------------------

Lancez la configuration Multirun ``Vitam``.

------------------------------------------------------------
5. Routez les entrées vers l'offre froide
------------------------------------------------------------

Créez un contrat de gestion dont la stratégie de stockage est ``tape`` ou ``tape_only``, et rattachez-le au contrat d'entrée utilisé pour les versements.

------------------------------
6. Lancez le simulateur INA
------------------------------

.. code-block:: bash

	sudo apt install python3-paramiko
	python3 dev-deployment/ina-simulator/ina_simulator.py

..

.. caution:: Sans le simulateur, les écritures aboutissent mais toute lecture d'archive reste bloquée jusqu'à expiration de ``pollingTimeoutMS``, quinze minutes par défaut.

------------------------------------------------------------
7. Versez un SIP et vérifiez l'écriture sur bande
------------------------------------------------------------

Versez un SIP par le moyen habituel.

.. important:: Les objets n'atteignent la bande qu'une fois le ``tar`` finalisé : à ``maxTarFileSize``, ou après ``tarBufferingTimeoutInMinutes`` — deux minutes en configuration de développement.

État du ``tar``, dans ``/vitam/data/offer3/inputTars/<file-bucket>/`` :

.. code-block:: text

	<horodatage>-<uuid>.tar.tmp    tar ouvert, objets en cours d'accumulation
	<horodatage>-<uuid>.tar        tar scellé, ordre d'écriture en file
	(plus rien)                    écrit sur bande, déplacé vers cachedTars

..

Traces du proxy :

.. code-block:: text

	POST /drives/0/io/write?inputPath=.../inputTars/test-objects/<horodatage>-<guid>.tar
	SftpIoService - Upload completed successfully: /input/<archive>.tar
	SftpIoService - Remote marker sent to INA: WRITE_OK at /request/<archive>.tar.WRITE_OK

..

Sortie du simulateur :

.. code-block:: text

	Marqueur WRITE_OK détecté : '<archive>.tar.WRITE_OK'
	Archivé sur la 'bande' : '/input/tape/<archive>.tar'

..

------------------------------------------------------------
8. Exportez un DIP et vérifiez la lecture depuis la bande
------------------------------------------------------------

Exportez un DIP portant sur l'opération versée.

Traces du proxy :

.. code-block:: text

	GET /drives/0/io/read?outputPath=.../tmpTarOutput/<archive>.tar
	SftpIoService - Download completed for /output/<archive>.tar

..

Sortie du simulateur :

.. code-block:: text

	Requête de lecture détectée : '<archive>.tar.READ_REQUEST'
	Copié avec succès vers : '/output/<archive>.tar'

..

------------------------------------------------------------
9. Vérifiez que les labels ne transitent pas par l'INA
------------------------------------------------------------

Le label d'une bande est écrit au premier versement sur une bande vierge, et relu à chaque montage de bande.

Traces du proxy, à l'écriture :

.. code-block:: text

	POST /drives/0/io/write?inputPath=.../inputTars/tmp/tape-Label-TAPE_0001
	TapeLabelIoServiceDecorator - Tape label tape-Label-TAPE_0001 stored successfully

..

Traces du proxy, à la lecture :

.. code-block:: text

	GET /drives/0/io/read?outputPath=.../tmpTarOutput/tape-Label-TAPE_0001
	TapeLabelIoServiceDecorator - Tape label tape-Label-TAPE_0001 retrieved successfully

..

Le label est dans le répertoire local :

.. code-block:: bash

	ls /vitam/data/ina-tape-proxy/labels

..

------------------------------------------------------------
10. Lancez une commande de bandes
------------------------------------------------------------

Appelez le port d'administration de l'offre froide, qui répond ``202`` :

.. code-block:: bash

	curl -i -X POST http://localhost:29902/offer/v1/tapeorder \
	     -H 'Content-Type: application/json' \
	     -d '{"tapeCodes":["TAPE_0001"]}'

..

Traces du proxy :

.. code-block:: text

	POST /tapeorder tapeOrders=[...]
	SftpIoService - Sending order request for 1 tape(s) to /request/tape_order_request_<horodatage>.json

..

Le fichier de commande reste dans ``/request`` du serveur SFTP : le simulateur ne traite que les marqueurs ``WRITE_OK`` et ``READ_REQUEST``.

.. note:: Sur une plate-forme déployée, la commande de bandes se lance par le playbook ``deployment/ansible-vitam-exploitation/tape_order.yml``, décrit dans ``doc/fr/exploitation/topics/46-tapeorder.rst``.

