Usando o GNU Parallel ao arquivo scp enorme dividindo-o por trecho por host

2

Estou usando o Ansible para configurar algumas configurações em vários nós e, como parte dessa configuração, preciso dividir um arquivo grande por linhas n e copiar cada parte em um arquivo remoto sem criar cópia local de cada pedaço (como o comando bash split ). O Ansible não pode fazer isso por padrão (ou eu simplesmente não descobri como fazer isso ainda), então eu decidi usar o GNU Parallel. Eu descobri aqui que copiar de stdin pode ser feito facilmente assim:

~$ echo "Lots of data" | ssh [email protected] 'cat > big.txt'

Mas eu quero fazer isso simultaneamente para vários hosts! Então, aqui está um exemplo de entrada:

~$ cat hosts.txt
1.1.1.1
2.2.2.2
3.3.3.3

~$ cat data.txt
lots
of
...
lines

Eu calculo o número de linhas por nó fazendo "wc -l" e dividindo o segundo número pelo primeiro. Então, basicamente, o próximo passo seria algo assim:

~$ cat data.txt | parallel -S 'cat hosts.txt | tr "\n" ","' -N $LINES_PER_HOST --pipe "ssh $HOST 'cat > /data/piece.txt'"

mas como posso iniciar um comando para cada host, com o que devo substituir o $ HOST? Pensei em combinar duas entradas (uma sendo hosts), mas ainda não tenho ideia de como fazer isso.

Eu realmente aprecio todos os pensamentos.

    
por Enchantner 27.06.2016 / 18:15

1 resposta

1

Funciona a partir da versão 20150922:

parallel-20150922 -a bigfile --roundrobin  --pipepart --slf hosts.txt -j1 'cat > giraf'
    
por 27.06.2016 / 19:47