download_archive
Introduction
Gestion centralisée des fichiers et de leurs signatures, à utiliser pour tous les fichiers qui seraient normalement téléchargés sur différentes machines.
L'idée est de ne télécharger le fichier qu'une fois (sur la tower), tout en vérifiant sa signature, et en offrant un cache persistant.
Ce rôle cherche le fichier demandé dans le dépôt situé sur la tower et le télécharge si nécessaire. Aucune hypothèse n'est faite sur la nature du téléchargement; le fichier est sauvegardé tel quel.
Il expose ensuite la variable application_file_location qui contient le chemin du fichier sur la tower.
Dans les deux cas, la signature est vérifiée et le rôle échoue en cas de corruption. Les signatures supportées sont le hash sha256 et minisig.
Variables génériques
Le rôle s'attend à recevoir les variables suivantes :
application: nom de l'application (arbitraire mais doit être unique);version: version de l'application (idem);download_url: URL de téléchargement du fichier;variant:[sha256|minisig](défaut :sha256)
sha256
Variable spécifique :
application_checksum: hashsha256à confronter au hash du fichier téléchargé.
minisign
Variables spécifiques :
download_url_sig: URL du fichier.minisigà télécharger.key: clé publique associée à la signature.
⚠️ Si le nom du fichier à télécharger est
file, le nom du fichier de signature doit êtrefile.minisig.
⚠️ La signature
inlinen'est pas supportée (sera implémentée selon les besoins).
💡 Le système de signature s'appelle
minisign, mais l'extension de signature est.minisig.
Exemple d'utilisation
- name: Download and verify reaction package
# Vérifie le cache et la signature, (re-)télécharge si besoin
import_role:
name: download_archive
vars:
application: reaction
version: "{{ reaction_version }}"
# À préciser obligatoirement pour `minisign`
variant: minisign
download_url: "https://static.ppom.me/reaction/releases/{{ reaction_version }}/reaction_{{ reaction_version_deb }}_amd64.deb"
download_url_sig: "https://static.ppom.me/reaction/releases/{{ reaction_version }}/reaction_{{ reaction_version_deb }}_amd64.deb.minisig"
# La clé est normalement donnée par l'auteur·ice
key: RWSpLTPfbvllNqRrXUgZzM7mFjLUA7PQioAItz80ag8uU4A2wtoT2DzX
- name: Fetch reaction package from tower
copy:
# Le playbook est supposé lancé depuis la tower, ainsi
# on peut utiliser le chemin retourné, qui est de fait local
src: "{{ application_file_location }}"
# Chemin sur l'hôte distant
dest: "/tmp/reaction.deb"
# Cas où le fichier existe déjà à l'identique : permet
# de pousser le cache jusqu'au bout
force: false
mode: "0640"