Come copiare file tra host remoti in ansible

  • 0

Come copiare file tra server remoti in Ansible ?. è lo scopo dietro questo articolo. Ogni articolo che sono andato a leggere mi dava suggerimenti ma niente di pratico. Volevo semplicemente fare ansible rsync. Volevo eseguire rsync tra gli host remoti e copiare i file tra gli host remoti.

Quindi ecco l’articolo orientato all’esempio. In questo post, discuteremo le due principali opzioni disponibili per copiare i file tra server remoti o da remoto a remoto.

Quando vogliamo copiare file da un host a un altro host, in generale, la prima cosa che ci viene in mente è SCP e Ansible ha un modulo dedicato per lo stesso nome COPY

Se si vuole copiare un file da un Ansible Control Master a host remoti, il modulo COPY (scp) andrebbe bene. Ma abbiamo bisogno di qualcosa di più quando vogliamo copiare i file tra gli host remoti o copiare i file da remoto a remoto.

Utilizzeremo alcuni dei moduli di Ansible come copy, fetch, synchronize per soddisfare il requisito di copiare i file tra gli host in Ansible.

Mentre siamo già consapevoli di ciò per cui viene usato il modulo Ansible Copy.

Ecco la semplice introduzione a Ansible Fetch e Ansible Synchronize.

Ansible Fetch serve a tirare i file dal server remoto alla macchina di controllo.

Ansible Synchronize è usato per copiare i file tra server remoti (o) host di destinazione. Questo è più simile all’esecuzione di RSYNC con l’aiuto di Ansible.

Tabella del contenuto

L’indice

  1. Il piano / Il requisito
  2. Metodo1: Copiare file tra host remoti usando il modulo fetch
  3. Metodo2: Copiare file tra host remoti usando il modulo synchronize
    1. Synchronize Push
    2. Synchronize Pull
  4. Il risultato dell’esecuzione
  5. Referenze e altri articoli correlati.

Il piano / Il requisito

Per iniziare, definiamo noi stessi qualche requisito in modo che, potremmo relazionarci ed essere sulla stessa pagina.

Abbiamo due server chiamati come segue

  1. mwiappi01
  2. mwiapp02

Il requisito è copiare un file da mwiapp01 a mwiapp02. Prima di procedere, questo è il diagramma dell’infrastruttura della nostra configurazione.

Non fatevi confondere dal nome Master. È solo una macchina di controllo. Ricorda che Ansible è meno agente. quindi non ci sono master e slave.

Metodo1: Copia da app01 a app02 usando il modulo fetch

Nessuna autenticazione SSH richiesta tra i nodi remoti per questo metodo

Questa è l’opzione migliore e più semplice per trasferire i file tra i nodi remoti quando non si ha l’autenticazione basata su chiave SSH abilitata tra i nodi remoti. Anche se non è il percorso più breve. Funziona bene quando il nostro obiettivo primario è quello di ottenere il lavoro fatto, qualunque sia l’approccio.

È un processo in due fasi quando si tratta di questo metodo.

Step1: Fetch del file dal server remoto (sorgente) al master ansible

Step2: Push (Copia) del file dal master ansible al server remoto (destinazione)

Qui il master agisce come un buffer dove i file vengono temporaneamente memorizzati e poi trasferiti.

Considera il seguente playbook che esegue entrambi i compiti di cui sopra.

--- - hosts: app tasks: - name: Fetch the file from the mwiapp01 to master run_once: yes fetch: src=/tmp/app01-to-app02.jar dest=buffer/ flat=yes when: "{{ inventory_hostname == 'mwiapp01' }}" - nome: Copia il file dal master a mwiapp02 copy: src=buffer/app01-to-app02.jar dest=/tmp/ when: "{{ inventory_hostname == 'mwiapp02' }}"

qui usiamo "when" per eseguire l’esecuzione condizionata e inventory_hostname è la variabile ansible built-in che indicherà l’hostname remoto dell’esecuzione corrente.

A volte potrebbe essere necessario usare ansible_hostname al posto di inventory_hostname

In pratica stiamo istruendo Ansible ad eseguire il task Fetch solo sul server mwiapp01 e il task Copy solo quando mwiapp02 è l’host di esecuzione remoto corrente.

Metodo 2: Copia da app01 a app02 usando il modulo synchronize

L’autenticazione basata su chiave SSH deve essere abilitata tra gli host remoti

Perché il modulo Synchronize funzioni senza problemi, l’autenticazione basata su chiave SSH deve essere abilitata tra i nodi remoti. Altrimenti, il compito di sincronizzazione si bloccherà e così il tuo gioco Ansible.

In altre parole, i nodi remoti dovrebbero essere in grado di accedere l’uno all’altro senza dover inserire la password manualmente. Otteniamo questo principalmente con l’aiuto della chiave SSH.

Come detto prima. Ansible Synchronize è più simile ad Ansible RSYNC. la tipica rsyncfunzione di Linux.

Per sapere come abilitare l’autenticazione basata sulla chiave in pochi secondi, fate riferimento al seguente articolo

Enable SSH Key based authentication using Ansible

Una volta che siamo pronti con l’autenticazione basata sulla chiave SSH. Siamo pronti per eseguire il gioco. ( playbook).

Ci sono due metodi per copiare i file usando il modulo Synchronize

  1. Synchronize Pull
  2. Synchronize Push

Considera il seguente playbook che copia il file da mwiapp01 a mwiapp02 usando entrambi i metodi Synchronize Pull e Synchronize Push

Synchronize Pull

Targeted to: Source Server (mwiapp01)

Delegato a ed eseguito su: Destination Server (mwiapp02)

Spiegazione: Come viene eseguito nel server di destinazione dove il file deve arrivare. Il compito è quello di estrarre il file dal server di origine (o).

Ecco il playbook che viene eseguito sul server di destinazione mwiapp02 con l’aiuto della delega e pulls il file da mwiapp01 a mwiapp02

---- nome: Sync Pull task - Eseguito sull'host di destinazione "{{groups}}" hosts: "{{gruppi}}" utente: wlsusr task: - nome: Copia il file da mwiapp01 a mwiapp02 usando il metodo Pull tag: sync-pull synchronize: src: "{{ item }}" dest: "{{ item }}" mode: pull delegate_to: "{{gruppi}}" register: syncfile run_once: true with_items: - "/tmp/app01-to-app02.jar"

Si potrebbe pensare che il playbook sia impostato per essere eseguito sul primo server, poiché la direttiva hosts punta al primo server. hosts: "{{group}}" mwiapp01

Ma devi notare che stiamo effettivamente eseguendo questo compito sul secondo server mwiapp02 con l’aiuto di delegate_to

Guarda il seguente Screen record per capire meglio questo.

Synchronize Push

Targeted to: Destination Server (mwiapp02)

Delegato a ed eseguito su: Source Server (mwiapp01)

Spiegazione: Poiché viene eseguito nel server di origine dove il file è già presente. Il compito è quello di spingere il file al server di destinazione

Qui è il playbook che viene eseguito sul server sorgente mwiapp01 e pushes il file da 01 a 02

- nome: Sync Push task - Eseguito su host sorgente "{{groups}}" hosts: "{{gruppi}}" utente: wlsusr task: - nome: Copia il file da mwiapp01 a mwiapp02 usando il metodo Push tag: sync-push synchronize: src: "{{ item }}" dest: "{{ item }}" mode: push delegate_to: "{{gruppi}}" register: syncfile with_items: - "/tmp/app01-to-app02.jar"

Potresti pensare che il playbook sia impostato per essere eseguito sul secondo server dato che la direttiva hosts punta al primo server. hosts: "{{group}}" mwiapp02

Ma dovete notare che in realtà stiamo eseguendo questo compito sul primo server mwiapp01 con l’aiuto di delegate_to

Il Playbook è composto da due elenchi di compiti basati su host. Il primo eseguito con Synchronize Pull verrà eseguito su mwiapp02e il secondo con Synchronize Push verrà eseguito su mwiapp01

Anche se il playbook è comprensibile (facile da capire). Sento che ci sono alcune linee particolari che hanno bisogno di più spiegazioni, come "{{groups}}"

Rappresenta il primo elemento (o) server del gruppo di host chiamato “app” proprio come un array

Spero che l’immagine seguente lo renda chiaro.

Altre due linee importanti nel file sono le seguenti

  • modalità Rappresenta il modello del Synchronize. O Synchronize pull o Synchronize push
  • delegate_to Dice ad ansible, dove il compito (o) comando dovrebbe essere effettivamente eseguito.

Spero che tu abbia già capito. delegate_to e il hosts insieme a mode in ansible-playbook, lavorano insieme per rendere possibile l’esecuzione (o) copia remota tra nodi remoti.

Execution Output

Nella schermata precedente, abbiamo eseguito 3 comandi. Il primo e l’ultimo è un comando ad-hoc di Ansible per controllare la disponibilità del file sotto la /tmpdirectory in mwiapp02server

utilizziamo --limitper eseguire il comando in un solo server, anche se usiamo un hostgroup che contiene due server.

abbiamo copiato con successo un file da mwiapp01 a mwiapp02 usando entrambi i moduli Fetch e Synchronize.

Conclusione

In questo post, abbiamo imparato ed eseguito con successo come copiare file tra host remoti usando i moduli ansible copy e fetch. Abbiamo imparato due metodi per copiare i file tra gli host usando ansible.

Spero che questo articolo vi sia utile.

  1. Riferimento del modulo Ansible Copy
  2. Riferimento del modulo Ansible Fetch
  3. Riferimento del modulo Ansible Synchronize
  4. Come copiare o scambiare la chiave SSH tra più host – Ansible
  5. Come scambiare l’IP e aggiornare il file /etc/hosts in più host – Ansible

Spero che questo articolo ti aiuti. Se ti piace questo articolo, per favore condividilo

.