J'utilise Ansible pour mettre en place une configuration sur plusieurs nœuds, et dans le cadre de cette configuration, j'ai besoin de diviser un gros fichier en deux parties. n et copier chaque partie dans un fichier distant sans créer de copie locale de chaque morceau (comme bash divisé le fait). Ansible ne peut pas le faire par défaut (ou je n'ai pas encore trouvé comment le faire), alors j'ai décidé d'utiliser GNU Parallel. J'ai trouvé aquí que la copie à partir de stdin peut être facilement faite comme ceci :
~$ echo "Lots of data" | ssh user@example.com 'cat > big.txt'
Mais je veux faire cela simultanément sur plusieurs hôtes ! Voici donc un exemple d'entrée :
~$ cat hosts.txt
1.1.1.1
2.2.2.2
3.3.3.3
~$ cat data.txt
lots
of
...
lines
Je calcule le nombre de lignes par noeud en faisant "wc -l" et en divisant le second nombre par le premier. Donc, en gros, la prochaine étape serait quelque chose comme ça :
~$ cat data.txt | parallel -S `cat hosts.txt | tr "\n" ","` -N $LINES_PER_HOST --pipe "ssh $HOST 'cat > /data/piece.txt'"
mais comment puis-je lancer une commande pour chaque hôte, par quoi dois-je remplacer $HOST ? J'ai pensé à combiner deux entrées (l'une étant les hôtes), mais je ne sais toujours pas comment faire.
J'apprécierais vraiment toute réflexion.