Sådan kopieres filer mellem eksterne værter i ansible

  • 0

Sådan kopieres filer mellem eksterne servere i Ansible ?. er formålet bag denne artikel. Hver artikel jeg gik og læste gav mig forslag, men intet praktisk. Jeg ønskede simpelthen at gøre gøre ansible rsync. Jeg ønskede at udføre rsync mellem fjernværter og kopiere filer mellem fjernværter.

Så her er den eksempelorienterede artikel. I dette indlæg vil vi diskutere de to store muligheder, der er tilgængelige for at kopiere filerne mellem fjernservere eller fjern til fjern.

Når vi ønsker at kopiere filer fra en vært til en anden vært, er det første, der kommer i vores sind, generelt SCP og ansible har et dedikeret modul til det samme navn COPY

Hvis du vil kopiere en fil fra en Ansible Control Master til fjernværter, ville COPY (scp) modulet være helt fint. Men vi har brug for noget mere, når vi vil kopiere filerne mellem fjernværter eller kopiere filer mellem fjernværter til fjernværter.

Vi vil bruge nogle af de ansible moduler som copy, fetch, synchronize til at opfylde kravet om at kopiere filerne mellem værter i ansible.

Mens vi allerede er klar over, hvad er Ansible Copy modulet bruges til.

Her er den enkle introduktion til Ansible Fetch og Ansible Synchronize.

Ansible Fetch er at trække filerne fra fjernserveren til kontrolmaskinen.

Ansible Synchronize bruges til at kopiere filerne mellem fjernservere (eller) målværter. Dette svarer mere til at udføre RSYNC med hjælp fra Ansible.

Indholdsfortegnelse

Indekset

  1. Planen / Kravet
  2. Metode1: Copy files between remote hosts using fetch module
  3. Method2: Copy file between remote hosts using synchronize module
    1. Synkronize Push
    2. Synkronize Pull
  4. The Execution Output
  5. Referencer og andre relaterede artikler.

Planen / Kravet

For at komme i gang, lad os selv definere nogle krav, så vi kan relatere og være på samme side.

Vi har to servere, der hedder som følger

  1. mwiappi01
  2. mwiapp02

Kravet er at kopiere en fil fra mwiapp01 til mwiapp02. Før vi fortsætter, Dette er infrastrukturdiagrammet for vores opsætning.

Bliv ikke forvirret af navnet Master. Det er blot en kontrolmaskine. Husk Ansible er agent mindre. så der er ingen master og slave.

Metode1: Kopier fra app01 til app02 ved hjælp af fetch-modulet

INGEN SSH-autentifikation kræves mellem fjernknudepunkterne for denne metode

Dette er den bedste og nemmeste mulighed for at overføre filer mellem fjernknudepunkterne Når du ikke har SSH-nøglebaseret autentifikation aktiveret mellem fjernknudepunkterne. Selv om det ikke er den korteste vej (eller) beeline. Det fungerer godt, hvor vores primære fokus er at få arbejdet gjort, uanset hvilken fremgangsmåde der er tale om.

Det er en to-trins proces, når det drejer sig om denne metode.

Stræk 1: Hent filen fra fjernserveren (kilde) til ansible master

Stræk 2: Skub (kopiering) filen fra ansible master til fjernserveren ( destination)

Her fungerer masteren som en buffer, hvor filerne gemmes midlertidigt og derefter overføres.

Tænk på følgende playbook, som udfører begge disse ovennævnte opgaver.

--- - 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: Kopier filen fra master til mwiapp02 copy: src=buffer/app01-to-app02.jar dest=/tmp/ when: "{{ inventory_hostname == 'mwiapp02' }}}"

Her bruger vi "when" til at udføre den betingelsesbaserede udførelse, og inventory_hostname er den indbyggede ansible-variabel, som vil pege på den aktuelle udførelse fjernværtsværtsnavn.

Nogle gange kan det være nødvendigt at bruge ansible_hostname i stedet for inventory_hostname

Vi instruerer grundlæggende Ansible om kun at udføre Fetch-opgaven på mwiapp01-serveren og kun at kopiere opgaven, når mwiapp02 er den aktuelle fjernudførelsesvært.

Metode 2: Kopier fra app01 til app02 ved hjælp af synkroniseringsmodulet

SSH-nøglebaseret godkendelse skal være aktiveret mellem fjernværter

For at synkroniseringsmodulet kan fungere problemfrit, skal SSH-nøglebaseret godkendelse være aktiveret mellem fjernknudepunkterne. Ellers vil synkroniseringsopgaven gå i stå, og det samme gør dit Ansible-spil.

Med andre ord skal fjernknudepunkterne kunne logge ind på hinanden uden at skulle indtaste adgangskoden manuelt. Vi opnår dette for det meste ved hjælp af SSH-nøglen.

Som sagt tidligere. Ansible Synchronize er mere som Ansible RSYNC. den typiske rsync funktion i Linux.

For at vide hvordan man aktiverer nøglebaseret autentificering bare på få sekunder, henvises til følgende artikel

Aktiver SSH Key baseret autentificering ved hjælp af Ansible

Når vi er klar med SSH Key-baseret autentificering. Vi er klar til at spille stykket. ( playbook).

Der er to metoder til at kopiere filer ved hjælp af Synchronize-modulet

  1. Synchronize Pull
  2. Synchronize Push

Opnå følgende playbooks, som kopierer filen fra mwiapp01 til mwiapp02 ved hjælp af både Synchronize Pull og Synchronize Push-metoden

Synchronize Pull

Targeted to: Kildeserver (mwiapp01)

Delegeret til og udført på:

Delegeret til og udført på: Destinationsserver (mwiapp02)

Forklaring: Da den udføres på destinationsserveren, hvor filen skal ankomme. Opgaven er at trække filen fra Origin (eller) kildeserveren.

Her er den playbook, der bliver udført på destinationsserveren mwiapp02 ved hjælp af delegation og pulls filen fra mwiapp01 til mwiapp02

---- navn: 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 sync-pull synchronize: src: "{{ item }}" dest: "{{ item }}" mode: pull delegate_to: "{{groups}}}" register: syncfile run_once: true with_items: - "/tmp/app01-to-app02.jar"

Du kan tro, at playbooken er indstillet til at blive udført på den første server, da hosts-direktivet er rettet mod den første server. hosts: "{{group}}" mwiapp01

Men du skal bemærke, at vi faktisk udfører denne opgave på den anden server mwiapp02 ved hjælp af delegate_to

Kig på følgende skærmpost for at forstå dette bedre.

Synkroniser Push

Targeted to: Destinationsserver (mwiapp02)

Delegeret til og udført på:

Delegeret til og udført på: Kildeserver (mwiapp01)

Forklaring: Da den udføres på kildeserveren, hvor filen allerede er til stede. Opgaven er at skubbe filen til destinationsserveren

Her er den playbook, der bliver udført på kildeserveren mwiapp01 og pushes filen fra 01 til 02

- navn: Sync Push task - Udført på kildevært "{{groups}}" værter: "{{groups}}}" user: wlsusr tasks: - name: Copy the file from mwiapp01 to mwiapp02 using Method Push tags: sync-push sync-push synchronize: src: "{{ item }}" dest: "{{ item }}" mode: push delegate_to: "{{groups}}}" register: syncfile with_items: "{{groups}} - "/tmp/app01-to-app02.jar"

Du kan tro, at playbooken er indstillet til at blive udført på den anden server, da hosts-direktivet er rettet mod den første server. hosts: "{{group}}" mwiapp02

Men du skal bemærke, at vi faktisk udfører denne opgave på den første server mwiapp01 ved hjælp af delegate_to

Spillebogen består af to værtsbaserede opgaver liste. Den første kører med Synchronize Pull vil køre på mwiapp02og den anden med Synchronize Push vil køre på mwiapp01

Selv om playbooken er forståelig ( let at forstå). Jeg føler, at der er nogle ejendommelige linjer, der har brug for mere forklaring, som "{{groups}}"

Det repræsenterer det første element (eller) server i værtsgruppen ved navn “app” ligesom et array

Håber følgende billede ville gøre det klart.

Andre to vigtige linjer i filen er som følger

  • mode Det repræsenterer modellen af Synchronize. Enten Synchronize pull eller Synchronize push
  • delegate_to Den fortæller ansible, hvor opgaven (eller) kommandoen egentlig skal udføres.

Håber du måske har forstået det nu. delegate_to og hosts sammen med mode i ansible-playbook, arbejder sammen for at gøre fjernudførelse (eller) kopiering mellem fjernknudepunkter mulig.

Udførelsesoutput

I det foregående skærmbillede har vi udført 3 kommandoer. Den første og den sidste er en Ansible ad hoc-kommando til at kontrollere tilgængeligheden af filen under /tmpmappen i mwiapp02server

Vi bruger --limit til at udføre kommandoen i kun én server, selvom vi bruger hostgruppen, der indeholder to servere.

Vi har med succes kopieret en fil fra mwiapp01 til mwiapp02 ved hjælp af både Fetch- og Synchronize-moduler.

Slutning

I dette indlæg har vi med succes lært og udført, hvordan man kopierer filer mellem fjernværter ved hjælp af ansible copy- og fetch-moduler. Vi har lært to metoder til at kopiere filerne mellem værter ved hjælp af ansible.

Håber du finder denne artikel nyttig.

  1. Ansible Copy modul reference
  2. Ansible Fetch modul reference
  3. Ansible Synchronize modul reference
  4. Sådan kopierer eller udveksler SSH Key mellem flere værter – Ansible
  5. Sådan udveksler du IP og opdaterer /etc/hosts filen i flere værter – Ansible

Håber denne artikel hjælper. Hvis du kan lide denne artikel, bedes du dele den