Я використовую Ansible для налаштування деякої конфігурації на декілька вузлів, і в рамках цієї установки мені потрібно розділити один великий файл на n рядків і скопіювати кожну частину у віддалений файл без створення локальної копії кожного фрагмента (наприклад, команда bash split робить). Ansible не може це зробити за замовчуванням (або я просто ще не з'ясував, як це зробити), тому я вирішив скористатися GNU Parallel. Я дізнався тут, що копіювання зі stdin може бути легко виконано так:
~$ echo "Lots of data" | ssh user@example.com 'cat > big.txt'
Але я хочу зробити це одночасно для кількох господарів! Отже, ось приклад прикладу:
~$ cat hosts.txt
1.1.1.1
2.2.2.2
3.3.3.3
~$ cat data.txt
lots
of
...
lines
Я обчислюю кількість рядків на вузол, роблячи "wc -l" і ділячи друге число на перше. Отже, в основному наступним кроком буде щось подібне:
~$ cat data.txt | parallel -S `cat hosts.txt | tr "\n" ","` -N $LINES_PER_HOST --pipe "ssh $HOST 'cat > /data/piece.txt'"
але як я можу запустити одну команду для кожного хоста, чим я повинен замінити $ HOST? Я думав про поєднання двох входів (один - хостинг), але все ще не маю уявлення, як це зробити.
Буду дуже вдячний за будь-які думки.