Jak kopírovat soubory mezi vzdálenými hostiteli v ansible

  • 0

Jak kopírovat soubory mezi vzdálenými servery v Ansible ?. je účelem tohoto článku. Každý článek, který jsem prošel a přečetl, mi dával návrhy, ale nic praktického. Chtěl jsem prostě udělat ansible rsync. Chtěl jsem spustit rsync mezi vzdálenými hostiteli a kopírovat soubory mezi vzdálenými hostiteli.

Takže zde je článek zaměřený na příklady. V tomto příspěvku probereme dvě hlavní možnosti, které jsou k dispozici pro kopírování souborů mezi vzdálenými servery nebo ze vzdáleného na vzdálený.

Když chceme kopírovat soubory z jednoho hostitele na jiného hostitele, obecně nás jako první napadne SCP a ansible má pro stejnojmenný modul vyhrazený COPY

Pokud chcete zkopírovat soubor z řídicí jednotky ansible na vzdálené hostitele, bude vám stačit modul COPY (scp). Když ale chceme kopírovat soubory mezi vzdálenými hostiteli nebo kopírovat soubory mezi vzdálenými hostiteli, potřebujeme něco víc.

Pro splnění požadavku kopírování souborů mezi hostiteli v systému ansible použijeme některé z modulů ansible, jako je copy, fetch, synchronize.

Již víme, k čemu slouží modul Ansible Copy.

Zde je jednoduchý úvod do modulů Ansible Fetch a Ansible Synchronize.

Modul Ansible Fetch slouží ke stažení souborů ze vzdáleného serveru na řídicí počítač.

Modul Ansible Synchronize slouží ke kopírování souborů mezi vzdálenými servery (nebo) cílovými hostiteli. Jedná se spíše o provedení RSYNC pomocí Ansible.

Obsah

Rejstřík

  1. Plán / Požadavek
  2. Metoda1: Kopírování souborů mezi vzdálenými hostiteli pomocí modulu fetch
  3. Metoda2: Kopírování souboru mezi vzdálenými hostiteli pomocí modulu synchronize
    1. Synchronize Push
    2. Synchronize Pull
  4. Výstup provedení
  5. Reference a další související články.

Plán / Požadavek

Na začátek si sami definujme nějaký požadavek, abychom, mohli navázat a být na stejné vlně.

Máme dva servery pojmenované takto

  1. mwiappi01
  2. mwiapp02

Požadavkem je zkopírovat soubor z mwiapp01 do mwiapp02. Než budeme pokračovat, Toto je schéma infrastruktury našeho nastavení.

Nenechte se zmást názvem Master. Jedná se pouze o řídicí stroj. Nezapomeňte, že Ansible je bez agentů. takže neexistuje žádný master a slave.

Metoda1: Kopírování z app01 do app02 pomocí modulu fetch

Pro tuto metodu není vyžadováno žádné ověřování SSH mezi vzdálenými uzly

Jedná se o nejlepší a nejjednodušší možnost přenosu souborů mezi vzdálenými uzly Pokud nemáte povoleno ověřování na základě klíčů SSH mezi vzdálenými uzly. Ačkoli se nejedná o nejkratší cestu (ani) beeline. Funguje dobře tam, kde se primárně soustředíme na dokončení práce, ať už je přístup jakýkoli.

Jde-li o tuto metodu, jedná se o dvoufázový proces.

Krok1: Načtení souboru ze vzdáleného serveru (zdrojového) do hlavního serveru ansible

Krok2: Přesunutí (kopírování) souboru z hlavního serveru ansible na vzdálený server ( cílový)

Zde hlavní server funguje jako vyrovnávací paměť, kam se soubory dočasně uloží a poté přenesou.

Považte následující playbook, který provádí obě tyto výše uvedené úlohy.

--- - hosts: app tasks: - name: Fetch the file from mwiapp01 to master run_once: yes fetch: src=/tmp/app01-to-app02.jar dest=buffer/ flat=yes when: "{{ inventory_hostname == 'mwiapp01' }}" - name: Zkopíruje soubor z master do mwiapp02 copy: src=buffer/app01-to-app02.jar dest=/tmp/ when: "{{ inventory_hostname == 'mwiapp02' }}"

zde použijeme "when" k provedení podmíněného spuštění a inventory_hostname je vestavěná proměnná ansible, která bude ukazovat na aktuální vzdálené jméno hostitele spuštění.

Někdy může být potřeba použít ansible_hostname místo inventory_hostname

V podstatě dáváme Ansible pokyn, aby provedla úlohu Fetch pouze na serveru mwiapp01 a úlohu copy pouze tehdy, když je mwiapp02 aktuální hostitel vzdáleného provádění.

Metoda 2: Kopírování z aplikace01 do aplikace02 pomocí modulu synchronize

Mezi vzdálenými hostiteli musí být povoleno ověřování na základě klíčů SSH

Pro bezproblémové fungování modulu Synchronize musí být mezi vzdálenými uzly povoleno ověřování na základě klíčů SSH. Jinak se úloha synchronizace zasekne a s ní i vaše hra Ansible.

Jinými slovy, vzdálené uzly by měly být schopny se k sobě přihlásit, aniž by bylo nutné zadávat heslo ručně. Toho dosáhneme většinou pomocí klíče SSH.

Jak již bylo řečeno. Ansible Synchronize je spíše Ansible RSYNC. typická rsync funkce systému Linux.

Chcete-li vědět, jak zapnout ověřování na základě klíče během několika sekund, přečtěte si následující článek

Zapnutí ověřování na základě klíče SSH pomocí systému Ansible

Jakmile budeme mít hotové ověřování na základě klíče SSH. Jsme připraveni hrát hru. ( playbook).

Existují dvě metody kopírování souborů pomocí modulu Synchronize

  1. Synchronize Pull
  2. Synchronize Push

Zvažte následující playbooky, které kopírují soubor z mwiapp01 do mwiapp02 pomocí metody Synchronize Pull i Synchronize Push

Synchronize Pull

Cíleno na: Zdrojový server (mwiapp01)

Delegováno na a provedeno na: Cílový server (mwiapp02)

Vysvětlení: Jelikož se provádí na cílovém serveru, kam má soubor dorazit. Úkolem je vytáhnout soubor z původního (nebo) zdrojového serveru.

Tady je playbook, který se provede na cílovém serveru mwiapp02 pomocí delegace a pulls soubor z mwiapp01 na mwiapp02

---- název: Sync Pull task - Executed on Destination host "{{groups}}" hosts: "{{groups}}" user: wlsusr tasks: - name: Copy the file from mwiapp01 to mwiapp02 using Method Pull tags: sync-pull synchronize: src: "{{ item }}" dest: "{{ item }}" mode: pull delegate_to: "{{groups}}" register: syncfile run_once: true with_items: - 

Mohlo by se zdát, že playbook je nastaven tak, aby se spouštěl na prvním serveru, protože direktiva hosts je zaměřena na první server. hosts: "{{group}}" mwiapp01

Musíte si však všimnout, že ve skutečnosti provádíme tuto úlohu na druhém serveru mwiapp02 pomocí delegate_to

Pro lepší pochopení se podívejte na následující záznam na obrazovce.

Synchronize Push

Targeted to: Cílový server (mwiapp02)

Delegováno na a provedeno na: Zdrojový server (mwiapp01)

Vysvětlení: Jelikož se provádí na zdrojovém serveru, kde se soubor již nachází. Úkolem je odeslat soubor na cílový server

Tady je playbook, který se provede na zdrojovém serveru mwiapp01 a pushes soubor z 01 na 02

- název: Sync Push task - Executed on source host "{{groups}}" hosts: "{{groups}}" user: wlsusr tasks: - name: Copy the file from mwiapp01 to mwiapp02 using Method Push tags: sync-push synchronize: src: "{{ item }}" dest: "{{ item }}" mode: push delegate_to: "{{groups}}" register: syncfile with_items: - 

Mohlo by se zdát, že playbook je nastaven tak, aby se spouštěl na druhém serveru, protože direktiva hosts je zaměřena na první server. hosts: "{{group}}" mwiapp02

Musíte si ale všimnout, že ve skutečnosti tuto úlohu provádíme na prvním serveru mwiapp01 pomocí delegate_to

Seznam úloh Playbook se skládá ze seznamu dvou úloh založených na hostiteli. První spuštěná pomocí Synchronize Pull se spustí na mwiapp02a druhá pomocí Synchronize Push se spustí na mwiapp01

Přestože je playbook srozumitelný ( snadno pochopitelný). Mám pocit, že jsou zde některé zvláštní řádky, které je třeba více vysvětlit, jako například "{{groups}}"

Představuje první prvek (nebo) server skupiny hostitelů s názvem „app“ stejně jako pole

Doufám, že následující obrázek by to objasnil.

Další dva důležité řádky v souboru jsou následující

  • mode Představuje model Synchronize. Buď Synchronize pull, nebo Synchronize push
  • delegate_to Říká ansible, kde se má úloha (nebo) příkaz vlastně provést.

Doufám, že už jste to snad pochopili. delegate_to a hosts spolu s mode v ansible-playbook spolupracují, aby umožnily vzdálené provedení (nebo) kopírování mezi vzdálenými uzly.

Výstup provedení

Na předchozím obrázku jsme provedli 3 příkazy. První a poslední je ad-hoc příkaz Ansible pro kontrolu dostupnosti souboru v adresáři /tmpv mwiapp02serveru

používáme --limitpro provedení příkazu pouze na jednom serveru, ačkoli používáme hostgroup, která obsahuje dva servery.

úspěšně jsme zkopírovali soubor z mwiapp01 na mwiapp02 pomocí modulů Fetch a Synchronize.

Závěr

V tomto příspěvku jsme se úspěšně naučili a provedli kopírování souborů mezi vzdálenými hostiteli pomocí modulů ansible copy a fetch. Naučili jsme se dvě metody kopírování souborů mezi hostiteli pomocí ansible.

Doufám, že pro vás bude tento článek užitečný.

  1. Odkaz na modul Ansible Copy
  2. Odkaz na modul Ansible Fetch
  3. Odkaz na modul Ansible Synchronize
  4. Jak zkopírovat nebo vyměnit klíč SSH mezi více hostiteli – Ansible
  5. Jak vyměnit IP a aktualizovat soubor /etc/hosts ve více hostitelích – Ansible

Snad vám tento článek pomůže. Pokud se vám tento článek líbí, sdílejte ho prosím