Jak skopiować pliki pomiędzy zdalnymi hostami w ansible

  • 0

Jak skopiować pliki pomiędzy zdalnymi serwerami w Ansible ? to cel tego artykułu. Każdy artykuł, który przeczytałem dawał mi sugestie, ale nic praktycznego. Chciałem po prostu zrobić ansible rsync. Chciałem wykonać rsync między zdalnymi hostami i kopiować pliki między zdalnymi hostami.

Więc tutaj jest artykuł zorientowany na przykłady. W tym poście zamierzamy omówić dwie główne opcje dostępne do kopiowania plików między zdalnymi serwerami lub zdalnie do zdalnego.

Gdy chcemy skopiować pliki z jednego hosta do drugiego, w ogóle, pierwszą rzeczą, która przychodzi nam do głowy jest SCP i ansible mają dedykowany moduł o tej samej nazwie COPY

Jeśli chcesz skopiować plik z Ansible Control Master do zdalnych hostów, moduł COPY (scp) byłby w sam raz. Ale potrzebujemy czegoś więcej, gdy chcemy skopiować pliki między zdalnymi hostami lub skopiować pliki między zdalnym a zdalnym.

Wykorzystamy niektóre moduły ansible, takie jak copy, fetch, synchronize, aby zrealizować wymóg kopiowania plików między hostami w ansible.

Już wiemy do czego służy moduł Ansible Copy.

Oto proste wprowadzenie do Ansible Fetch i Ansible Synchronize.

Ansible Fetch służy do pobierania plików ze zdalnego serwera na maszynę sterującą.

Ansible Synchronize służy do kopiowania plików pomiędzy zdalnymi serwerami (lub) hostami docelowymi. Jest to bardziej podobne do wykonywania RSYNC z pomocą Ansible.

Table of Contents

The Index

  1. The Plan / The Requirement
  2. Method1: Copy files between remote hosts using fetch module
  3. Method2: Copy file between remote hosts using synchronize module
    1. Synchronize Push
    2. Synchronize Pull
  4. The Execution Output
  5. References and Other Related Articles.

Plan / Wymaganie

Aby zacząć, zdefiniujmy jakieś wymaganie sami, abyśmy mogli się odnieść i być na tej samej stronie.

Mamy dwa serwery o następujących nazwach

  1. mwiappi01
  2. mwiapp02

Wymaganiem jest skopiowanie pliku z mwiapp01 do mwiapp02. Zanim przejdziemy dalej, oto schemat infrastruktury naszej konfiguracji.

Nie daj się zmylić nazwie Master. To tylko maszyna kontrolna. Pamiętaj, że Ansible jest mniej agentowy, więc nie ma master i slave.

Metoda1: Copy from app01 to app02 using fetch module

NO SSH Authentication required between remote nodes for this method

Jest to najlepsza i najłatwiejsza opcja przesyłania plików między zdalnymi węzłami, gdy nie masz włączonego uwierzytelniania opartego na kluczach SSH między zdalnymi węzłami. Chociaż nie jest to najkrótsza ścieżka (lub) beeline. To działa dobrze, gdzie naszym głównym celem jest, aby uzyskać pracę zrobić cokolwiek podejście może być.

jest to dwuetapowy proces, jeśli chodzi o tę metodę.

Krok 1: Pobieranie pliku z serwera zdalnego (źródło) do ansible master

Krok 2: Wypychanie (kopiowanie) pliku z ansible master na serwer zdalny (miejsce docelowe)

Tutaj ansible master działa jak bufor, w którym pliki są tymczasowo przechowywane, a następnie przesyłane.

Rozważmy następujący playbook, który wykonuje oba te wyżej wymienione zadania.

--- - 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' }}" - name: Kopiowanie pliku z master do mwiapp02 copy: src=buffer/app01-to-app02.jar dest=/tmp/ when: "{{ inventory_hostname == 'mwiapp02' }}"

tutaj używamy "when" do wykonania opartego na warunku, a inventory_hostname jest wbudowaną zmienną ansible, która wskaże bieżącą zdalną nazwę hosta wykonania.

Czasami możesz potrzebować użyć ansible_hostname w miejsce inventory_hostname

Podstawowo instruujemy Ansible, aby wykonało zadanie Fetch tylko na serwerze mwiapp01 i zadanie copy tylko wtedy, gdy mwiapp02 jest bieżącym zdalnym hostem wykonawczym.

Metoda 2: Kopiowanie z app01 do app02 przy użyciu modułu synchronize

Uwierzytelnianie oparte na kluczach SSH musi być włączone między zdalnymi hostami

Aby moduł Synchronize działał bezproblemowo, uwierzytelnianie oparte na kluczach SSH musi być włączone między zdalnymi węzłami. W przeciwnym razie zadanie synchronizacji utknie, a co za tym idzie, twoja zabawa w Ansible.

Innymi słowy, zdalne węzły powinny być w stanie zalogować się do siebie bez konieczności ręcznego wpisywania hasła. Osiągamy to głównie za pomocą klucza SSH.

Jak powiedziano wcześniej. Ansible Synchronize jest bardziej jak Ansible RSYNC. typowa rsync cecha Linuksa.

Aby wiedzieć jak włączyć Uwierzytelnianie oparte na kluczach w kilka sekund, Odwołaj się do następującego artykułu

Włącz Uwierzytelnianie oparte na kluczach SSH używając Ansible

Gdy już jesteśmy gotowi z Uwierzytelnianiem opartym na kluczach SSH. Jesteśmy gotowi, aby odtworzyć sztukę. ( playbook).

Istnieją dwie metody kopiowania plików przy użyciu modułu Synchronize

  1. Synchronize Pull
  2. Synchronize Push

Rozważmy poniższe playbooki, które kopiują plik z mwiapp01 do mwiapp02 przy użyciu zarówno metody Synchronize Pull, jak i Synchronize Push

Synchronize Pull

Targeted to: Source Server (mwiapp01)

Delegated to and Executed on: Destination Server (mwiapp02)

Wyjaśnienie: Ponieważ jest on wykonywany na serwerze docelowym, gdzie plik ma dotrzeć. Zadanie polega na wyciągnięciu pliku z serwera Origin (lub) source.

Here is the playbook which gets executed on the destination server mwiapp02 with help of delegation and pulls the file from mwiapp01 to mwiapp02

---- name: Sync Pull task - Executed on the 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: - "/tmp/app01-to-app02.jar"

Można by pomyśleć, że playbook jest ustawiony do wykonania na pierwszym serwerze, ponieważ dyrektywa hosts jest skierowana na pierwszy serwer. hosts: "{{group}}" mwiapp01

Ale musisz zauważyć, że w rzeczywistości wykonujemy to zadanie na drugim serwerze mwiapp02 z pomocą delegate_to

Spójrz na następujący rekord ekranu, aby lepiej to zrozumieć.

Synchronize Push

Targeted to: Destination Server (mwiapp02)

Delegated to and Executed on: Source Server (mwiapp01)

Wyjaśnienie: Ponieważ jest on wykonywany na serwerze źródłowym, na którym plik jest już obecny. Zadanie polega na przepchnięciu pliku do serwera docelowego

Tutaj jest playbook, który zostaje wykonany na serwerze źródłowym mwiapp01 i pushes plik z 01 do 02

- nazwa: 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: - "/tmp/app01-to-app02.jar"

Można by pomyśleć, że playbook jest ustawiony do wykonania na drugim serwerze, ponieważ dyrektywa hosts jest skierowana na pierwszy serwer. hosts: "{{group}}" mwiapp02

Ale musisz zauważyć, że w rzeczywistości wykonujemy to zadanie na pierwszym serwerze mwiapp01 z pomocą delegate_to

Playbook składa się z dwóch list zadań opartych na hostach. Pierwszy uruchomiony przy użyciu Synchronize Pull będzie działał na mwiapp02, a drugi przy użyciu Synchronize Push będzie działał na mwiapp01

Chociaż playbook jest zrozumiały ( łatwy do zrozumienia). Czuję, że są pewne osobliwe linie, które wymagają więcej wyjaśnień, jak "{{groups}}"

Oprezentuje pierwszy element (lub) serwer grupy hostów o nazwie „app” tak jak tablica

Mam nadzieję, że poniższy obraz wyjaśniłby to.

Inne dwie ważne linie w pliku są następujące

  • mode Reprezentuje model Synchronize. Albo Synchronize pull albo Synchronize push
  • delegate_to Mówi ansible, gdzie zadanie (lub) polecenie powinno zostać wykonane.

Mam nadzieję, że już to zrozumiałeś. delegate_to i hosts wraz z mode w ansible-playbook, pracują razem aby umożliwić zdalne wykonanie (lub) kopiowanie pomiędzy zdalnymi węzłami.

Wyniki wykonania

W poprzednim zrzucie ekranu, wykonaliśmy 3 polecenia. Pierwsze i ostatnie to polecenie Ansible ad-hoc sprawdzające dostępność pliku pod katalogiem /tmp w mwiapp02serwerze

używamy --limit, aby wykonać polecenie tylko na jednym serwerze, choć używamy hostgroup, która zawiera dwa serwery.

Pomyślnie skopiowaliśmy plik z mwiapp01 do mwiapp02 używając zarówno modułów Fetch jak i Synchronize.

Podsumowanie

W tym poście, pomyślnie nauczyliśmy się i wykonaliśmy jak kopiować pliki pomiędzy zdalnymi hostami używając modułów ansible copy i fetch. Poznaliśmy dwie metody kopiowania plików między hostami przy użyciu ansible.

Mam nadzieję, że ten artykuł był dla Ciebie pomocny.

  1. Odniesienie do modułu Ansible Copy
  2. Odniesienie do modułu Ansible Fetch
  3. Odniesienie do modułu Ansible Synchronize
  4. Jak skopiować lub wymienić klucz SSH między wieloma hostami – Ansible
  5. Jak wymienić IP i zaktualizować plik /etc/hosts na wielu hostach – Ansible

Mam nadzieję, że ten artykuł jest pomocny. Jeśli podoba Ci się ten artykuł, proszę podziel się nim

.