ฉันใช้ Ansible เพื่อตั้งค่าการกำหนดค่าบนหลาย ๆ โหนดและเป็นส่วนหนึ่งของการตั้งค่านี้ฉันต้องแยกไฟล์ขนาดใหญ่หนึ่งไฟล์ด้วย n บรรทัดและคัดลอกแต่ละส่วนไปยังไฟล์ระยะไกลโดยไม่ต้องสร้างสำเนาโลคัลของแต่ละอัน (เช่นทุบตี แยก คำสั่งทำ) 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 ด้วยอะไร ฉันคิดเกี่ยวกับการรวมสองอินพุต (หนึ่งเป็นโฮสต์) แต่ก็ยังไม่รู้ว่าจะทำอย่างไร
จะขอบคุณความคิดใด ๆ จริงๆ